diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/serial/atmel_serial.c | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c index e08fe64e4466..8cea6068f03e 100644 --- a/drivers/serial/atmel_serial.c +++ b/drivers/serial/atmel_serial.c | |||
@@ -153,17 +153,23 @@ static struct atmel_uart_port atmel_ports[ATMEL_MAX_UART]; | |||
153 | static struct console atmel_console; | 153 | static struct console atmel_console; |
154 | #endif | 154 | #endif |
155 | 155 | ||
156 | static inline struct atmel_uart_port * | ||
157 | to_atmel_uart_port(struct uart_port *uart) | ||
158 | { | ||
159 | return container_of(uart, struct atmel_uart_port, uart); | ||
160 | } | ||
161 | |||
156 | #ifdef CONFIG_SERIAL_ATMEL_PDC | 162 | #ifdef CONFIG_SERIAL_ATMEL_PDC |
157 | static bool atmel_use_dma_rx(struct uart_port *port) | 163 | static bool atmel_use_dma_rx(struct uart_port *port) |
158 | { | 164 | { |
159 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 165 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
160 | 166 | ||
161 | return atmel_port->use_dma_rx; | 167 | return atmel_port->use_dma_rx; |
162 | } | 168 | } |
163 | 169 | ||
164 | static bool atmel_use_dma_tx(struct uart_port *port) | 170 | static bool atmel_use_dma_tx(struct uart_port *port) |
165 | { | 171 | { |
166 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 172 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
167 | 173 | ||
168 | return atmel_port->use_dma_tx; | 174 | return atmel_port->use_dma_tx; |
169 | } | 175 | } |
@@ -326,7 +332,7 @@ static void | |||
326 | atmel_buffer_rx_char(struct uart_port *port, unsigned int status, | 332 | atmel_buffer_rx_char(struct uart_port *port, unsigned int status, |
327 | unsigned int ch) | 333 | unsigned int ch) |
328 | { | 334 | { |
329 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 335 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
330 | struct circ_buf *ring = &atmel_port->rx_ring; | 336 | struct circ_buf *ring = &atmel_port->rx_ring; |
331 | struct atmel_uart_char *c; | 337 | struct atmel_uart_char *c; |
332 | 338 | ||
@@ -370,7 +376,7 @@ static void atmel_pdc_rxerr(struct uart_port *port, unsigned int status) | |||
370 | */ | 376 | */ |
371 | static void atmel_rx_chars(struct uart_port *port) | 377 | static void atmel_rx_chars(struct uart_port *port) |
372 | { | 378 | { |
373 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 379 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
374 | unsigned int status, ch; | 380 | unsigned int status, ch; |
375 | 381 | ||
376 | status = UART_GET_CSR(port); | 382 | status = UART_GET_CSR(port); |
@@ -450,7 +456,7 @@ static void atmel_tx_chars(struct uart_port *port) | |||
450 | static void | 456 | static void |
451 | atmel_handle_receive(struct uart_port *port, unsigned int pending) | 457 | atmel_handle_receive(struct uart_port *port, unsigned int pending) |
452 | { | 458 | { |
453 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 459 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
454 | 460 | ||
455 | if (atmel_use_dma_rx(port)) { | 461 | if (atmel_use_dma_rx(port)) { |
456 | /* | 462 | /* |
@@ -491,7 +497,7 @@ atmel_handle_receive(struct uart_port *port, unsigned int pending) | |||
491 | static void | 497 | static void |
492 | atmel_handle_transmit(struct uart_port *port, unsigned int pending) | 498 | atmel_handle_transmit(struct uart_port *port, unsigned int pending) |
493 | { | 499 | { |
494 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 500 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
495 | 501 | ||
496 | if (atmel_use_dma_tx(port)) { | 502 | if (atmel_use_dma_tx(port)) { |
497 | /* PDC transmit */ | 503 | /* PDC transmit */ |
@@ -515,7 +521,7 @@ static void | |||
515 | atmel_handle_status(struct uart_port *port, unsigned int pending, | 521 | atmel_handle_status(struct uart_port *port, unsigned int pending, |
516 | unsigned int status) | 522 | unsigned int status) |
517 | { | 523 | { |
518 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 524 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
519 | 525 | ||
520 | if (pending & (ATMEL_US_RIIC | ATMEL_US_DSRIC | ATMEL_US_DCDIC | 526 | if (pending & (ATMEL_US_RIIC | ATMEL_US_DSRIC | ATMEL_US_DCDIC |
521 | | ATMEL_US_CTSIC)) { | 527 | | ATMEL_US_CTSIC)) { |
@@ -551,7 +557,7 @@ static irqreturn_t atmel_interrupt(int irq, void *dev_id) | |||
551 | */ | 557 | */ |
552 | static void atmel_tx_dma(struct uart_port *port) | 558 | static void atmel_tx_dma(struct uart_port *port) |
553 | { | 559 | { |
554 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 560 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
555 | struct circ_buf *xmit = &port->info->xmit; | 561 | struct circ_buf *xmit = &port->info->xmit; |
556 | struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx; | 562 | struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx; |
557 | int count; | 563 | int count; |
@@ -593,7 +599,7 @@ static void atmel_tx_dma(struct uart_port *port) | |||
593 | 599 | ||
594 | static void atmel_rx_from_ring(struct uart_port *port) | 600 | static void atmel_rx_from_ring(struct uart_port *port) |
595 | { | 601 | { |
596 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 602 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
597 | struct circ_buf *ring = &atmel_port->rx_ring; | 603 | struct circ_buf *ring = &atmel_port->rx_ring; |
598 | unsigned int flg; | 604 | unsigned int flg; |
599 | unsigned int status; | 605 | unsigned int status; |
@@ -661,7 +667,7 @@ static void atmel_rx_from_ring(struct uart_port *port) | |||
661 | 667 | ||
662 | static void atmel_rx_from_dma(struct uart_port *port) | 668 | static void atmel_rx_from_dma(struct uart_port *port) |
663 | { | 669 | { |
664 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 670 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
665 | struct tty_struct *tty = port->info->tty; | 671 | struct tty_struct *tty = port->info->tty; |
666 | struct atmel_dma_buffer *pdc; | 672 | struct atmel_dma_buffer *pdc; |
667 | int rx_idx = atmel_port->pdc_rx_idx; | 673 | int rx_idx = atmel_port->pdc_rx_idx; |
@@ -741,7 +747,7 @@ static void atmel_rx_from_dma(struct uart_port *port) | |||
741 | static void atmel_tasklet_func(unsigned long data) | 747 | static void atmel_tasklet_func(unsigned long data) |
742 | { | 748 | { |
743 | struct uart_port *port = (struct uart_port *)data; | 749 | struct uart_port *port = (struct uart_port *)data; |
744 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 750 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
745 | unsigned int status; | 751 | unsigned int status; |
746 | unsigned int status_change; | 752 | unsigned int status_change; |
747 | 753 | ||
@@ -786,7 +792,7 @@ static void atmel_tasklet_func(unsigned long data) | |||
786 | */ | 792 | */ |
787 | static int atmel_startup(struct uart_port *port) | 793 | static int atmel_startup(struct uart_port *port) |
788 | { | 794 | { |
789 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 795 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
790 | int retval; | 796 | int retval; |
791 | 797 | ||
792 | /* | 798 | /* |
@@ -896,7 +902,7 @@ static int atmel_startup(struct uart_port *port) | |||
896 | */ | 902 | */ |
897 | static void atmel_shutdown(struct uart_port *port) | 903 | static void atmel_shutdown(struct uart_port *port) |
898 | { | 904 | { |
899 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 905 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
900 | /* | 906 | /* |
901 | * Ensure everything is stopped. | 907 | * Ensure everything is stopped. |
902 | */ | 908 | */ |
@@ -953,7 +959,7 @@ static void atmel_shutdown(struct uart_port *port) | |||
953 | static void atmel_serial_pm(struct uart_port *port, unsigned int state, | 959 | static void atmel_serial_pm(struct uart_port *port, unsigned int state, |
954 | unsigned int oldstate) | 960 | unsigned int oldstate) |
955 | { | 961 | { |
956 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 962 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
957 | 963 | ||
958 | switch (state) { | 964 | switch (state) { |
959 | case 0: | 965 | case 0: |
@@ -1425,7 +1431,7 @@ static int atmel_serial_suspend(struct platform_device *pdev, | |||
1425 | pm_message_t state) | 1431 | pm_message_t state) |
1426 | { | 1432 | { |
1427 | struct uart_port *port = platform_get_drvdata(pdev); | 1433 | struct uart_port *port = platform_get_drvdata(pdev); |
1428 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 1434 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
1429 | 1435 | ||
1430 | if (device_may_wakeup(&pdev->dev) | 1436 | if (device_may_wakeup(&pdev->dev) |
1431 | && !at91_suspend_entering_slow_clock()) | 1437 | && !at91_suspend_entering_slow_clock()) |
@@ -1441,7 +1447,7 @@ static int atmel_serial_suspend(struct platform_device *pdev, | |||
1441 | static int atmel_serial_resume(struct platform_device *pdev) | 1447 | static int atmel_serial_resume(struct platform_device *pdev) |
1442 | { | 1448 | { |
1443 | struct uart_port *port = platform_get_drvdata(pdev); | 1449 | struct uart_port *port = platform_get_drvdata(pdev); |
1444 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 1450 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
1445 | 1451 | ||
1446 | if (atmel_port->suspended) { | 1452 | if (atmel_port->suspended) { |
1447 | uart_resume_port(&atmel_uart, port); | 1453 | uart_resume_port(&atmel_uart, port); |
@@ -1501,7 +1507,7 @@ err_alloc_ring: | |||
1501 | static int __devexit atmel_serial_remove(struct platform_device *pdev) | 1507 | static int __devexit atmel_serial_remove(struct platform_device *pdev) |
1502 | { | 1508 | { |
1503 | struct uart_port *port = platform_get_drvdata(pdev); | 1509 | struct uart_port *port = platform_get_drvdata(pdev); |
1504 | struct atmel_uart_port *atmel_port = (struct atmel_uart_port *)port; | 1510 | struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); |
1505 | int ret = 0; | 1511 | int ret = 0; |
1506 | 1512 | ||
1507 | device_init_wakeup(&pdev->dev, 0); | 1513 | device_init_wakeup(&pdev->dev, 0); |