Loading drivers/tty/serial/pch_uart.c +47 −12 Original line number Original line Diff line number Diff line Loading @@ -235,6 +235,36 @@ struct eg20t_port { dma_addr_t rx_buf_dma; dma_addr_t rx_buf_dma; }; }; /** * struct pch_uart_driver_data - private data structure for UART-DMA * @port_type: The number of DMA channel * @line_no: UART port line number (0, 1, 2...) */ struct pch_uart_driver_data { int port_type; int line_no; }; enum pch_uart_num_t { pch_et20t_uart0 = 0, pch_et20t_uart1, pch_et20t_uart2, pch_et20t_uart3, pch_ml7213_uart0, pch_ml7213_uart1, pch_ml7213_uart2, }; static struct pch_uart_driver_data drv_dat[] = { [pch_et20t_uart0] = {PCH_UART_8LINE, 0}, [pch_et20t_uart1] = {PCH_UART_2LINE, 1}, [pch_et20t_uart2] = {PCH_UART_2LINE, 2}, [pch_et20t_uart3] = {PCH_UART_2LINE, 3}, [pch_ml7213_uart0] = {PCH_UART_8LINE, 0}, [pch_ml7213_uart1] = {PCH_UART_2LINE, 1}, [pch_ml7213_uart2] = {PCH_UART_2LINE, 2}, }; static unsigned int default_baud = 9600; static unsigned int default_baud = 9600; static const int trigger_level_256[4] = { 1, 64, 128, 224 }; static const int trigger_level_256[4] = { 1, 64, 128, 224 }; static const int trigger_level_64[4] = { 1, 16, 32, 56 }; static const int trigger_level_64[4] = { 1, 16, 32, 56 }; Loading Loading @@ -568,7 +598,8 @@ static void pch_request_dma(struct uart_port *port) /* Set Tx DMA */ /* Set Tx DMA */ param = &priv->param_tx; param = &priv->param_tx; param->dma_dev = &dma_dev->dev; param->dma_dev = &dma_dev->dev; param->chan_id = priv->port.line; param->chan_id = priv->port.line * 2; /* Tx = 0, 2, 4, ... */ param->tx_reg = port->mapbase + UART_TX; param->tx_reg = port->mapbase + UART_TX; chan = dma_request_channel(mask, filter, param); chan = dma_request_channel(mask, filter, param); if (!chan) { if (!chan) { Loading @@ -581,7 +612,8 @@ static void pch_request_dma(struct uart_port *port) /* Set Rx DMA */ /* Set Rx DMA */ param = &priv->param_rx; param = &priv->param_rx; param->dma_dev = &dma_dev->dev; param->dma_dev = &dma_dev->dev; param->chan_id = priv->port.line + 1; /* Rx = Tx + 1 */ param->chan_id = priv->port.line * 2 + 1; /* Rx = Tx + 1 */ param->rx_reg = port->mapbase + UART_RX; param->rx_reg = port->mapbase + UART_RX; chan = dma_request_channel(mask, filter, param); chan = dma_request_channel(mask, filter, param); if (!chan) { if (!chan) { Loading Loading @@ -1358,8 +1390,11 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev, unsigned int mapbase; unsigned int mapbase; unsigned char *rxbuf; unsigned char *rxbuf; int fifosize, base_baud; int fifosize, base_baud; static int num; int port_type; int port_type = id->driver_data; struct pch_uart_driver_data *board; board = &drv_dat[id->driver_data]; port_type = board->port_type; priv = kzalloc(sizeof(struct eg20t_port), GFP_KERNEL); priv = kzalloc(sizeof(struct eg20t_port), GFP_KERNEL); if (priv == NULL) if (priv == NULL) Loading Loading @@ -1404,7 +1439,7 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev, priv->port.ops = &pch_uart_ops; priv->port.ops = &pch_uart_ops; priv->port.flags = UPF_BOOT_AUTOCONF; priv->port.flags = UPF_BOOT_AUTOCONF; priv->port.fifosize = fifosize; priv->port.fifosize = fifosize; priv->port.line = num++; priv->port.line = board->line_no; priv->trigger = PCH_UART_HAL_TRIGGER_M; priv->trigger = PCH_UART_HAL_TRIGGER_M; spin_lock_init(&priv->port.lock); spin_lock_init(&priv->port.lock); Loading Loading @@ -1482,19 +1517,19 @@ static int pch_uart_pci_resume(struct pci_dev *pdev) static DEFINE_PCI_DEVICE_TABLE(pch_uart_pci_id) = { static DEFINE_PCI_DEVICE_TABLE(pch_uart_pci_id) = { {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8811), {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8811), .driver_data = PCH_UART_8LINE}, .driver_data = pch_et20t_uart0}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8812), {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8812), .driver_data = PCH_UART_2LINE}, .driver_data = pch_et20t_uart1}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8813), {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8813), .driver_data = PCH_UART_2LINE}, .driver_data = pch_et20t_uart2}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8814), {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8814), .driver_data = PCH_UART_2LINE}, .driver_data = pch_et20t_uart3}, {PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8027), {PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8027), .driver_data = PCH_UART_8LINE}, .driver_data = pch_ml7213_uart0}, {PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8028), {PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8028), .driver_data = PCH_UART_2LINE}, .driver_data = pch_ml7213_uart1}, {PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8029), {PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8029), .driver_data = PCH_UART_2LINE}, .driver_data = pch_ml7213_uart2}, {0,}, {0,}, }; }; Loading Loading
drivers/tty/serial/pch_uart.c +47 −12 Original line number Original line Diff line number Diff line Loading @@ -235,6 +235,36 @@ struct eg20t_port { dma_addr_t rx_buf_dma; dma_addr_t rx_buf_dma; }; }; /** * struct pch_uart_driver_data - private data structure for UART-DMA * @port_type: The number of DMA channel * @line_no: UART port line number (0, 1, 2...) */ struct pch_uart_driver_data { int port_type; int line_no; }; enum pch_uart_num_t { pch_et20t_uart0 = 0, pch_et20t_uart1, pch_et20t_uart2, pch_et20t_uart3, pch_ml7213_uart0, pch_ml7213_uart1, pch_ml7213_uart2, }; static struct pch_uart_driver_data drv_dat[] = { [pch_et20t_uart0] = {PCH_UART_8LINE, 0}, [pch_et20t_uart1] = {PCH_UART_2LINE, 1}, [pch_et20t_uart2] = {PCH_UART_2LINE, 2}, [pch_et20t_uart3] = {PCH_UART_2LINE, 3}, [pch_ml7213_uart0] = {PCH_UART_8LINE, 0}, [pch_ml7213_uart1] = {PCH_UART_2LINE, 1}, [pch_ml7213_uart2] = {PCH_UART_2LINE, 2}, }; static unsigned int default_baud = 9600; static unsigned int default_baud = 9600; static const int trigger_level_256[4] = { 1, 64, 128, 224 }; static const int trigger_level_256[4] = { 1, 64, 128, 224 }; static const int trigger_level_64[4] = { 1, 16, 32, 56 }; static const int trigger_level_64[4] = { 1, 16, 32, 56 }; Loading Loading @@ -568,7 +598,8 @@ static void pch_request_dma(struct uart_port *port) /* Set Tx DMA */ /* Set Tx DMA */ param = &priv->param_tx; param = &priv->param_tx; param->dma_dev = &dma_dev->dev; param->dma_dev = &dma_dev->dev; param->chan_id = priv->port.line; param->chan_id = priv->port.line * 2; /* Tx = 0, 2, 4, ... */ param->tx_reg = port->mapbase + UART_TX; param->tx_reg = port->mapbase + UART_TX; chan = dma_request_channel(mask, filter, param); chan = dma_request_channel(mask, filter, param); if (!chan) { if (!chan) { Loading @@ -581,7 +612,8 @@ static void pch_request_dma(struct uart_port *port) /* Set Rx DMA */ /* Set Rx DMA */ param = &priv->param_rx; param = &priv->param_rx; param->dma_dev = &dma_dev->dev; param->dma_dev = &dma_dev->dev; param->chan_id = priv->port.line + 1; /* Rx = Tx + 1 */ param->chan_id = priv->port.line * 2 + 1; /* Rx = Tx + 1 */ param->rx_reg = port->mapbase + UART_RX; param->rx_reg = port->mapbase + UART_RX; chan = dma_request_channel(mask, filter, param); chan = dma_request_channel(mask, filter, param); if (!chan) { if (!chan) { Loading Loading @@ -1358,8 +1390,11 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev, unsigned int mapbase; unsigned int mapbase; unsigned char *rxbuf; unsigned char *rxbuf; int fifosize, base_baud; int fifosize, base_baud; static int num; int port_type; int port_type = id->driver_data; struct pch_uart_driver_data *board; board = &drv_dat[id->driver_data]; port_type = board->port_type; priv = kzalloc(sizeof(struct eg20t_port), GFP_KERNEL); priv = kzalloc(sizeof(struct eg20t_port), GFP_KERNEL); if (priv == NULL) if (priv == NULL) Loading Loading @@ -1404,7 +1439,7 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev, priv->port.ops = &pch_uart_ops; priv->port.ops = &pch_uart_ops; priv->port.flags = UPF_BOOT_AUTOCONF; priv->port.flags = UPF_BOOT_AUTOCONF; priv->port.fifosize = fifosize; priv->port.fifosize = fifosize; priv->port.line = num++; priv->port.line = board->line_no; priv->trigger = PCH_UART_HAL_TRIGGER_M; priv->trigger = PCH_UART_HAL_TRIGGER_M; spin_lock_init(&priv->port.lock); spin_lock_init(&priv->port.lock); Loading Loading @@ -1482,19 +1517,19 @@ static int pch_uart_pci_resume(struct pci_dev *pdev) static DEFINE_PCI_DEVICE_TABLE(pch_uart_pci_id) = { static DEFINE_PCI_DEVICE_TABLE(pch_uart_pci_id) = { {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8811), {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8811), .driver_data = PCH_UART_8LINE}, .driver_data = pch_et20t_uart0}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8812), {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8812), .driver_data = PCH_UART_2LINE}, .driver_data = pch_et20t_uart1}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8813), {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8813), .driver_data = PCH_UART_2LINE}, .driver_data = pch_et20t_uart2}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8814), {PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8814), .driver_data = PCH_UART_2LINE}, .driver_data = pch_et20t_uart3}, {PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8027), {PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8027), .driver_data = PCH_UART_8LINE}, .driver_data = pch_ml7213_uart0}, {PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8028), {PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8028), .driver_data = PCH_UART_2LINE}, .driver_data = pch_ml7213_uart1}, {PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8029), {PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8029), .driver_data = PCH_UART_2LINE}, .driver_data = pch_ml7213_uart2}, {0,}, {0,}, }; }; Loading