serial: exar: Factor out platform hooks
This prepares the addition of IOT2040 platform support by preparing the needed setup and rs485_config hooks. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
4076cf08ac
commit
0d963ebf57
|
@ -63,6 +63,11 @@
|
|||
|
||||
struct exar8250;
|
||||
|
||||
struct exar8250_platform {
|
||||
int (*rs485_config)(struct uart_port *, struct serial_rs485 *);
|
||||
int (*register_gpio)(struct pci_dev *, struct uart_8250_port *);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct exar8250_board - board information
|
||||
* @num_ports: number of serial ports
|
||||
|
@ -189,7 +194,7 @@ static void setup_gpio(u8 __iomem *p)
|
|||
}
|
||||
|
||||
static void *
|
||||
xr17v35x_register_gpio(struct pci_dev *pcidev)
|
||||
__xr17v35x_register_gpio(struct pci_dev *pcidev)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
|
||||
|
@ -208,17 +213,36 @@ xr17v35x_register_gpio(struct pci_dev *pcidev)
|
|||
return pdev;
|
||||
}
|
||||
|
||||
static int xr17v35x_register_gpio(struct pci_dev *pcidev,
|
||||
struct uart_8250_port *port)
|
||||
{
|
||||
if (pcidev->vendor == PCI_VENDOR_ID_EXAR)
|
||||
port->port.private_data =
|
||||
__xr17v35x_register_gpio(pcidev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct exar8250_platform exar8250_default_platform = {
|
||||
.register_gpio = xr17v35x_register_gpio,
|
||||
};
|
||||
|
||||
static int
|
||||
pci_xr17v35x_setup(struct exar8250 *priv, struct pci_dev *pcidev,
|
||||
struct uart_8250_port *port, int idx)
|
||||
{
|
||||
const struct exar8250_board *board = priv->board;
|
||||
const struct exar8250_platform *platform;
|
||||
unsigned int offset = idx * 0x400;
|
||||
unsigned int baud = 7812500;
|
||||
u8 __iomem *p;
|
||||
int ret;
|
||||
|
||||
platform = &exar8250_default_platform;
|
||||
|
||||
port->port.uartclk = baud * 16;
|
||||
port->port.rs485_config = platform->rs485_config;
|
||||
|
||||
/*
|
||||
* Setup the uart clock for the devices on expansion slot to
|
||||
* half the clock speed of the main chip (which is 125MHz)
|
||||
|
@ -241,12 +265,10 @@ pci_xr17v35x_setup(struct exar8250 *priv, struct pci_dev *pcidev,
|
|||
/* Setup Multipurpose Input/Output pins. */
|
||||
setup_gpio(p);
|
||||
|
||||
if (pcidev->vendor == PCI_VENDOR_ID_EXAR)
|
||||
port->port.private_data =
|
||||
xr17v35x_register_gpio(pcidev);
|
||||
ret = platform->register_gpio(pcidev, port);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void pci_xr17v35x_exit(struct pci_dev *pcidev)
|
||||
|
|
Loading…
Reference in New Issue