diff options
author | Graf Yang <graf.yang@analog.com> | 2008-02-28 22:31:08 -0500 |
---|---|---|
committer | Bryan Wu <cooloney@kernel.org> | 2008-02-28 22:31:08 -0500 |
commit | 7d01b475ab17018756c8df27c2ee3c220fab05f8 (patch) | |
tree | f24b3804a69a899e51175c817ec3bef827dde951 | |
parent | 0c11700dbfaf0aa5336bd667373ee09db245f3ea (diff) |
Blackfin Serial Driver: Enable IR function when user application (irattach /dev/ttyBFx -s) call TIOCSETD ioctl with line discipline N_IRDA
Signed-off-by: Graf Yang <graf.yang@analog.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
-rw-r--r-- | drivers/serial/bfin_5xx.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index 46bb47f37b9a..4e0b8cd4d4e0 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c | |||
@@ -900,6 +900,31 @@ bfin_serial_verify_port(struct uart_port *port, struct serial_struct *ser) | |||
900 | return 0; | 900 | return 0; |
901 | } | 901 | } |
902 | 902 | ||
903 | /* | ||
904 | * Enable the IrDA function if tty->ldisc.num is N_IRDA. | ||
905 | * In other cases, disable IrDA function. | ||
906 | */ | ||
907 | static void bfin_set_ldisc(struct tty_struct *tty) | ||
908 | { | ||
909 | int line = tty->index; | ||
910 | unsigned short val; | ||
911 | |||
912 | if (line >= tty->driver->num) | ||
913 | return; | ||
914 | |||
915 | switch (tty->ldisc.num) { | ||
916 | case N_IRDA: | ||
917 | val = UART_GET_GCTL(&bfin_serial_ports[line]); | ||
918 | val |= (IREN | RPOLC); | ||
919 | UART_PUT_GCTL(&bfin_serial_ports[line], val); | ||
920 | break; | ||
921 | default: | ||
922 | val = UART_GET_GCTL(&bfin_serial_ports[line]); | ||
923 | val &= ~(IREN | RPOLC); | ||
924 | UART_PUT_GCTL(&bfin_serial_ports[line], val); | ||
925 | } | ||
926 | } | ||
927 | |||
903 | static struct uart_ops bfin_serial_pops = { | 928 | static struct uart_ops bfin_serial_pops = { |
904 | .tx_empty = bfin_serial_tx_empty, | 929 | .tx_empty = bfin_serial_tx_empty, |
905 | .set_mctrl = bfin_serial_set_mctrl, | 930 | .set_mctrl = bfin_serial_set_mctrl, |
@@ -1261,6 +1286,7 @@ static int __init bfin_serial_init(void) | |||
1261 | 1286 | ||
1262 | ret = uart_register_driver(&bfin_serial_reg); | 1287 | ret = uart_register_driver(&bfin_serial_reg); |
1263 | if (ret == 0) { | 1288 | if (ret == 0) { |
1289 | bfin_serial_reg.tty_driver->set_ldisc = bfin_set_ldisc; | ||
1264 | ret = platform_driver_register(&bfin_serial_driver); | 1290 | ret = platform_driver_register(&bfin_serial_driver); |
1265 | if (ret) { | 1291 | if (ret) { |
1266 | pr_debug("uart register failed\n"); | 1292 | pr_debug("uart register failed\n"); |