diff options
author | David S. Miller <davem@davemloft.net> | 2010-06-26 13:27:00 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-06-26 13:27:00 -0400 |
commit | c67dda14389205f0a223c5089307495290939b3b (patch) | |
tree | fad0bb26b28703d02a22ebdd44d94eabac4a2ade /drivers/serial | |
parent | 43bc2db47292a824152145253b1dd2847e7312a3 (diff) | |
parent | 7e27d6e778cd87b6f2415515d7127eba53fe5d02 (diff) |
Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
Diffstat (limited to 'drivers/serial')
-rw-r--r-- | drivers/serial/8250_pci.c | 71 | ||||
-rw-r--r-- | drivers/serial/altera_uart.c | 44 | ||||
-rw-r--r-- | drivers/serial/bfin_5xx.c | 9 | ||||
-rw-r--r-- | drivers/serial/msm_serial.c | 21 | ||||
-rw-r--r-- | drivers/serial/msm_serial.h | 56 | ||||
-rw-r--r-- | drivers/serial/pmac_zilog.c | 7 | ||||
-rw-r--r-- | drivers/serial/s5pv210.c | 8 | ||||
-rw-r--r-- | drivers/serial/serial_cs.c | 18 |
8 files changed, 175 insertions, 59 deletions
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c index 01c012da4e26..746a44621d91 100644 --- a/drivers/serial/8250_pci.c +++ b/drivers/serial/8250_pci.c | |||
@@ -982,6 +982,18 @@ static int skip_tx_en_setup(struct serial_private *priv, | |||
982 | #define PCI_SUBDEVICE_ID_POCTAL422 0x0408 | 982 | #define PCI_SUBDEVICE_ID_POCTAL422 0x0408 |
983 | #define PCI_VENDOR_ID_ADVANTECH 0x13fe | 983 | #define PCI_VENDOR_ID_ADVANTECH 0x13fe |
984 | #define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620 | 984 | #define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620 |
985 | #define PCI_DEVICE_ID_TITAN_200I 0x8028 | ||
986 | #define PCI_DEVICE_ID_TITAN_400I 0x8048 | ||
987 | #define PCI_DEVICE_ID_TITAN_800I 0x8088 | ||
988 | #define PCI_DEVICE_ID_TITAN_800EH 0xA007 | ||
989 | #define PCI_DEVICE_ID_TITAN_800EHB 0xA008 | ||
990 | #define PCI_DEVICE_ID_TITAN_400EH 0xA009 | ||
991 | #define PCI_DEVICE_ID_TITAN_100E 0xA010 | ||
992 | #define PCI_DEVICE_ID_TITAN_200E 0xA012 | ||
993 | #define PCI_DEVICE_ID_TITAN_400E 0xA013 | ||
994 | #define PCI_DEVICE_ID_TITAN_800E 0xA014 | ||
995 | #define PCI_DEVICE_ID_TITAN_200EI 0xA016 | ||
996 | #define PCI_DEVICE_ID_TITAN_200EISI 0xA017 | ||
985 | 997 | ||
986 | /* Unknown vendors/cards - this should not be in linux/pci_ids.h */ | 998 | /* Unknown vendors/cards - this should not be in linux/pci_ids.h */ |
987 | #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584 | 999 | #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584 |
@@ -1541,6 +1553,10 @@ enum pci_board_num_t { | |||
1541 | pbn_b3_4_115200, | 1553 | pbn_b3_4_115200, |
1542 | pbn_b3_8_115200, | 1554 | pbn_b3_8_115200, |
1543 | 1555 | ||
1556 | pbn_b4_bt_2_921600, | ||
1557 | pbn_b4_bt_4_921600, | ||
1558 | pbn_b4_bt_8_921600, | ||
1559 | |||
1544 | /* | 1560 | /* |
1545 | * Board-specific versions. | 1561 | * Board-specific versions. |
1546 | */ | 1562 | */ |
@@ -1995,6 +2011,25 @@ static struct pciserial_board pci_boards[] __devinitdata = { | |||
1995 | .uart_offset = 8, | 2011 | .uart_offset = 8, |
1996 | }, | 2012 | }, |
1997 | 2013 | ||
2014 | [pbn_b4_bt_2_921600] = { | ||
2015 | .flags = FL_BASE4, | ||
2016 | .num_ports = 2, | ||
2017 | .base_baud = 921600, | ||
2018 | .uart_offset = 8, | ||
2019 | }, | ||
2020 | [pbn_b4_bt_4_921600] = { | ||
2021 | .flags = FL_BASE4, | ||
2022 | .num_ports = 4, | ||
2023 | .base_baud = 921600, | ||
2024 | .uart_offset = 8, | ||
2025 | }, | ||
2026 | [pbn_b4_bt_8_921600] = { | ||
2027 | .flags = FL_BASE4, | ||
2028 | .num_ports = 8, | ||
2029 | .base_baud = 921600, | ||
2030 | .uart_offset = 8, | ||
2031 | }, | ||
2032 | |||
1998 | /* | 2033 | /* |
1999 | * Entries following this are board-specific. | 2034 | * Entries following this are board-specific. |
2000 | */ | 2035 | */ |
@@ -3043,6 +3078,42 @@ static struct pci_device_id serial_pci_tbl[] = { | |||
3043 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800L, | 3078 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800L, |
3044 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | 3079 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
3045 | pbn_b0_bt_8_921600 }, | 3080 | pbn_b0_bt_8_921600 }, |
3081 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200I, | ||
3082 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3083 | pbn_b4_bt_2_921600 }, | ||
3084 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400I, | ||
3085 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3086 | pbn_b4_bt_4_921600 }, | ||
3087 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800I, | ||
3088 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3089 | pbn_b4_bt_8_921600 }, | ||
3090 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400EH, | ||
3091 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3092 | pbn_b0_4_921600 }, | ||
3093 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800EH, | ||
3094 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3095 | pbn_b0_4_921600 }, | ||
3096 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800EHB, | ||
3097 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3098 | pbn_b0_4_921600 }, | ||
3099 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100E, | ||
3100 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3101 | pbn_oxsemi_1_4000000 }, | ||
3102 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200E, | ||
3103 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3104 | pbn_oxsemi_2_4000000 }, | ||
3105 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400E, | ||
3106 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3107 | pbn_oxsemi_4_4000000 }, | ||
3108 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800E, | ||
3109 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3110 | pbn_oxsemi_8_4000000 }, | ||
3111 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200EI, | ||
3112 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3113 | pbn_oxsemi_2_4000000 }, | ||
3114 | { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200EISI, | ||
3115 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
3116 | pbn_oxsemi_2_4000000 }, | ||
3046 | 3117 | ||
3047 | { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_550, | 3118 | { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_550, |
3048 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, | 3119 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
diff --git a/drivers/serial/altera_uart.c b/drivers/serial/altera_uart.c index bcee156d2f2e..0f1189605d21 100644 --- a/drivers/serial/altera_uart.c +++ b/drivers/serial/altera_uart.c | |||
@@ -89,15 +89,12 @@ static unsigned int altera_uart_tx_empty(struct uart_port *port) | |||
89 | static unsigned int altera_uart_get_mctrl(struct uart_port *port) | 89 | static unsigned int altera_uart_get_mctrl(struct uart_port *port) |
90 | { | 90 | { |
91 | struct altera_uart *pp = container_of(port, struct altera_uart, port); | 91 | struct altera_uart *pp = container_of(port, struct altera_uart, port); |
92 | unsigned long flags; | ||
93 | unsigned int sigs; | 92 | unsigned int sigs; |
94 | 93 | ||
95 | spin_lock_irqsave(&port->lock, flags); | ||
96 | sigs = | 94 | sigs = |
97 | (readl(port->membase + ALTERA_UART_STATUS_REG) & | 95 | (readl(port->membase + ALTERA_UART_STATUS_REG) & |
98 | ALTERA_UART_STATUS_CTS_MSK) ? TIOCM_CTS : 0; | 96 | ALTERA_UART_STATUS_CTS_MSK) ? TIOCM_CTS : 0; |
99 | sigs |= (pp->sigs & TIOCM_RTS); | 97 | sigs |= (pp->sigs & TIOCM_RTS); |
100 | spin_unlock_irqrestore(&port->lock, flags); | ||
101 | 98 | ||
102 | return sigs; | 99 | return sigs; |
103 | } | 100 | } |
@@ -105,49 +102,37 @@ static unsigned int altera_uart_get_mctrl(struct uart_port *port) | |||
105 | static void altera_uart_set_mctrl(struct uart_port *port, unsigned int sigs) | 102 | static void altera_uart_set_mctrl(struct uart_port *port, unsigned int sigs) |
106 | { | 103 | { |
107 | struct altera_uart *pp = container_of(port, struct altera_uart, port); | 104 | struct altera_uart *pp = container_of(port, struct altera_uart, port); |
108 | unsigned long flags; | ||
109 | 105 | ||
110 | spin_lock_irqsave(&port->lock, flags); | ||
111 | pp->sigs = sigs; | 106 | pp->sigs = sigs; |
112 | if (sigs & TIOCM_RTS) | 107 | if (sigs & TIOCM_RTS) |
113 | pp->imr |= ALTERA_UART_CONTROL_RTS_MSK; | 108 | pp->imr |= ALTERA_UART_CONTROL_RTS_MSK; |
114 | else | 109 | else |
115 | pp->imr &= ~ALTERA_UART_CONTROL_RTS_MSK; | 110 | pp->imr &= ~ALTERA_UART_CONTROL_RTS_MSK; |
116 | writel(pp->imr, port->membase + ALTERA_UART_CONTROL_REG); | 111 | writel(pp->imr, port->membase + ALTERA_UART_CONTROL_REG); |
117 | spin_unlock_irqrestore(&port->lock, flags); | ||
118 | } | 112 | } |
119 | 113 | ||
120 | static void altera_uart_start_tx(struct uart_port *port) | 114 | static void altera_uart_start_tx(struct uart_port *port) |
121 | { | 115 | { |
122 | struct altera_uart *pp = container_of(port, struct altera_uart, port); | 116 | struct altera_uart *pp = container_of(port, struct altera_uart, port); |
123 | unsigned long flags; | ||
124 | 117 | ||
125 | spin_lock_irqsave(&port->lock, flags); | ||
126 | pp->imr |= ALTERA_UART_CONTROL_TRDY_MSK; | 118 | pp->imr |= ALTERA_UART_CONTROL_TRDY_MSK; |
127 | writel(pp->imr, port->membase + ALTERA_UART_CONTROL_REG); | 119 | writel(pp->imr, port->membase + ALTERA_UART_CONTROL_REG); |
128 | spin_unlock_irqrestore(&port->lock, flags); | ||
129 | } | 120 | } |
130 | 121 | ||
131 | static void altera_uart_stop_tx(struct uart_port *port) | 122 | static void altera_uart_stop_tx(struct uart_port *port) |
132 | { | 123 | { |
133 | struct altera_uart *pp = container_of(port, struct altera_uart, port); | 124 | struct altera_uart *pp = container_of(port, struct altera_uart, port); |
134 | unsigned long flags; | ||
135 | 125 | ||
136 | spin_lock_irqsave(&port->lock, flags); | ||
137 | pp->imr &= ~ALTERA_UART_CONTROL_TRDY_MSK; | 126 | pp->imr &= ~ALTERA_UART_CONTROL_TRDY_MSK; |
138 | writel(pp->imr, port->membase + ALTERA_UART_CONTROL_REG); | 127 | writel(pp->imr, port->membase + ALTERA_UART_CONTROL_REG); |
139 | spin_unlock_irqrestore(&port->lock, flags); | ||
140 | } | 128 | } |
141 | 129 | ||
142 | static void altera_uart_stop_rx(struct uart_port *port) | 130 | static void altera_uart_stop_rx(struct uart_port *port) |
143 | { | 131 | { |
144 | struct altera_uart *pp = container_of(port, struct altera_uart, port); | 132 | struct altera_uart *pp = container_of(port, struct altera_uart, port); |
145 | unsigned long flags; | ||
146 | 133 | ||
147 | spin_lock_irqsave(&port->lock, flags); | ||
148 | pp->imr &= ~ALTERA_UART_CONTROL_RRDY_MSK; | 134 | pp->imr &= ~ALTERA_UART_CONTROL_RRDY_MSK; |
149 | writel(pp->imr, port->membase + ALTERA_UART_CONTROL_REG); | 135 | writel(pp->imr, port->membase + ALTERA_UART_CONTROL_REG); |
150 | spin_unlock_irqrestore(&port->lock, flags); | ||
151 | } | 136 | } |
152 | 137 | ||
153 | static void altera_uart_break_ctl(struct uart_port *port, int break_state) | 138 | static void altera_uart_break_ctl(struct uart_port *port, int break_state) |
@@ -272,10 +257,14 @@ static irqreturn_t altera_uart_interrupt(int irq, void *data) | |||
272 | unsigned int isr; | 257 | unsigned int isr; |
273 | 258 | ||
274 | isr = readl(port->membase + ALTERA_UART_STATUS_REG) & pp->imr; | 259 | isr = readl(port->membase + ALTERA_UART_STATUS_REG) & pp->imr; |
260 | |||
261 | spin_lock(&port->lock); | ||
275 | if (isr & ALTERA_UART_STATUS_RRDY_MSK) | 262 | if (isr & ALTERA_UART_STATUS_RRDY_MSK) |
276 | altera_uart_rx_chars(pp); | 263 | altera_uart_rx_chars(pp); |
277 | if (isr & ALTERA_UART_STATUS_TRDY_MSK) | 264 | if (isr & ALTERA_UART_STATUS_TRDY_MSK) |
278 | altera_uart_tx_chars(pp); | 265 | altera_uart_tx_chars(pp); |
266 | spin_unlock(&port->lock); | ||
267 | |||
279 | return IRQ_RETVAL(isr); | 268 | return IRQ_RETVAL(isr); |
280 | } | 269 | } |
281 | 270 | ||
@@ -402,31 +391,24 @@ int __init early_altera_uart_setup(struct altera_uart_platform_uart *platp) | |||
402 | return 0; | 391 | return 0; |
403 | } | 392 | } |
404 | 393 | ||
405 | static void altera_uart_console_putc(struct console *co, const char c) | 394 | static void altera_uart_console_putc(struct uart_port *port, const char c) |
406 | { | 395 | { |
407 | struct uart_port *port = &(altera_uart_ports + co->index)->port; | 396 | while (!(readl(port->membase + ALTERA_UART_STATUS_REG) & |
408 | int i; | 397 | ALTERA_UART_STATUS_TRDY_MSK)) |
398 | cpu_relax(); | ||
409 | 399 | ||
410 | for (i = 0; i < 0x10000; i++) { | ||
411 | if (readl(port->membase + ALTERA_UART_STATUS_REG) & | ||
412 | ALTERA_UART_STATUS_TRDY_MSK) | ||
413 | break; | ||
414 | } | ||
415 | writel(c, port->membase + ALTERA_UART_TXDATA_REG); | 400 | writel(c, port->membase + ALTERA_UART_TXDATA_REG); |
416 | for (i = 0; i < 0x10000; i++) { | ||
417 | if (readl(port->membase + ALTERA_UART_STATUS_REG) & | ||
418 | ALTERA_UART_STATUS_TRDY_MSK) | ||
419 | break; | ||
420 | } | ||
421 | } | 401 | } |
422 | 402 | ||
423 | static void altera_uart_console_write(struct console *co, const char *s, | 403 | static void altera_uart_console_write(struct console *co, const char *s, |
424 | unsigned int count) | 404 | unsigned int count) |
425 | { | 405 | { |
406 | struct uart_port *port = &(altera_uart_ports + co->index)->port; | ||
407 | |||
426 | for (; count; count--, s++) { | 408 | for (; count; count--, s++) { |
427 | altera_uart_console_putc(co, *s); | 409 | altera_uart_console_putc(port, *s); |
428 | if (*s == '\n') | 410 | if (*s == '\n') |
429 | altera_uart_console_putc(co, '\r'); | 411 | altera_uart_console_putc(port, '\r'); |
430 | } | 412 | } |
431 | } | 413 | } |
432 | 414 | ||
@@ -516,7 +498,7 @@ static int __devinit altera_uart_probe(struct platform_device *pdev) | |||
516 | return 0; | 498 | return 0; |
517 | } | 499 | } |
518 | 500 | ||
519 | static int altera_uart_remove(struct platform_device *pdev) | 501 | static int __devexit altera_uart_remove(struct platform_device *pdev) |
520 | { | 502 | { |
521 | struct uart_port *port; | 503 | struct uart_port *port; |
522 | int i; | 504 | int i; |
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index 96f7e7484fee..511cbf687877 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c | |||
@@ -797,7 +797,7 @@ static void bfin_serial_shutdown(struct uart_port *port) | |||
797 | gpio_free(uart->rts_pin); | 797 | gpio_free(uart->rts_pin); |
798 | #endif | 798 | #endif |
799 | #ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS | 799 | #ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS |
800 | if (UART_GET_IER(uart) && EDSSI) | 800 | if (UART_GET_IER(uart) & EDSSI) |
801 | free_irq(uart->status_irq, uart); | 801 | free_irq(uart->status_irq, uart); |
802 | #endif | 802 | #endif |
803 | } | 803 | } |
@@ -869,7 +869,12 @@ bfin_serial_set_termios(struct uart_port *port, struct ktermios *termios, | |||
869 | } | 869 | } |
870 | 870 | ||
871 | baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); | 871 | baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); |
872 | quot = uart_get_divisor(port, baud) - ANOMALY_05000230; | 872 | quot = uart_get_divisor(port, baud); |
873 | |||
874 | /* If discipline is not IRDA, apply ANOMALY_05000230 */ | ||
875 | if (termios->c_line != N_IRDA) | ||
876 | quot -= ANOMALY_05000230; | ||
877 | |||
873 | spin_lock_irqsave(&uart->port.lock, flags); | 878 | spin_lock_irqsave(&uart->port.lock, flags); |
874 | 879 | ||
875 | UART_SET_ANOMALY_THRESHOLD(uart, USEC_PER_SEC / baud * 15); | 880 | UART_SET_ANOMALY_THRESHOLD(uart, USEC_PER_SEC / baud * 15); |
diff --git a/drivers/serial/msm_serial.c b/drivers/serial/msm_serial.c index ecdc0facf7ee..f8c816e7725d 100644 --- a/drivers/serial/msm_serial.c +++ b/drivers/serial/msm_serial.c | |||
@@ -41,19 +41,6 @@ struct msm_port { | |||
41 | unsigned int imr; | 41 | unsigned int imr; |
42 | }; | 42 | }; |
43 | 43 | ||
44 | #define UART_TO_MSM(uart_port) ((struct msm_port *) uart_port) | ||
45 | |||
46 | static inline void msm_write(struct uart_port *port, unsigned int val, | ||
47 | unsigned int off) | ||
48 | { | ||
49 | __raw_writel(val, port->membase + off); | ||
50 | } | ||
51 | |||
52 | static inline unsigned int msm_read(struct uart_port *port, unsigned int off) | ||
53 | { | ||
54 | return __raw_readl(port->membase + off); | ||
55 | } | ||
56 | |||
57 | static void msm_stop_tx(struct uart_port *port) | 44 | static void msm_stop_tx(struct uart_port *port) |
58 | { | 45 | { |
59 | struct msm_port *msm_port = UART_TO_MSM(port); | 46 | struct msm_port *msm_port = UART_TO_MSM(port); |
@@ -320,11 +307,7 @@ static void msm_init_clock(struct uart_port *port) | |||
320 | struct msm_port *msm_port = UART_TO_MSM(port); | 307 | struct msm_port *msm_port = UART_TO_MSM(port); |
321 | 308 | ||
322 | clk_enable(msm_port->clk); | 309 | clk_enable(msm_port->clk); |
323 | 310 | msm_serial_set_mnd_regs(port); | |
324 | msm_write(port, 0xC0, UART_MREG); | ||
325 | msm_write(port, 0xB2, UART_NREG); | ||
326 | msm_write(port, 0x7D, UART_DREG); | ||
327 | msm_write(port, 0x1C, UART_MNDREG); | ||
328 | } | 311 | } |
329 | 312 | ||
330 | static int msm_startup(struct uart_port *port) | 313 | static int msm_startup(struct uart_port *port) |
@@ -706,6 +689,8 @@ static int __init msm_serial_probe(struct platform_device *pdev) | |||
706 | if (unlikely(IS_ERR(msm_port->clk))) | 689 | if (unlikely(IS_ERR(msm_port->clk))) |
707 | return PTR_ERR(msm_port->clk); | 690 | return PTR_ERR(msm_port->clk); |
708 | port->uartclk = clk_get_rate(msm_port->clk); | 691 | port->uartclk = clk_get_rate(msm_port->clk); |
692 | printk(KERN_INFO "uartclk = %d\n", port->uartclk); | ||
693 | |||
709 | 694 | ||
710 | resource = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 695 | resource = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
711 | if (unlikely(!resource)) | 696 | if (unlikely(!resource)) |
diff --git a/drivers/serial/msm_serial.h b/drivers/serial/msm_serial.h index 689f1fa0e84e..f6ca9ca79e98 100644 --- a/drivers/serial/msm_serial.h +++ b/drivers/serial/msm_serial.h | |||
@@ -114,4 +114,60 @@ | |||
114 | #define UART_MISR 0x0010 | 114 | #define UART_MISR 0x0010 |
115 | #define UART_ISR 0x0014 | 115 | #define UART_ISR 0x0014 |
116 | 116 | ||
117 | #define UART_TO_MSM(uart_port) ((struct msm_port *) uart_port) | ||
118 | |||
119 | static inline | ||
120 | void msm_write(struct uart_port *port, unsigned int val, unsigned int off) | ||
121 | { | ||
122 | __raw_writel(val, port->membase + off); | ||
123 | } | ||
124 | |||
125 | static inline | ||
126 | unsigned int msm_read(struct uart_port *port, unsigned int off) | ||
127 | { | ||
128 | return __raw_readl(port->membase + off); | ||
129 | } | ||
130 | |||
131 | /* | ||
132 | * Setup the MND registers to use the TCXO clock. | ||
133 | */ | ||
134 | static inline void msm_serial_set_mnd_regs_tcxo(struct uart_port *port) | ||
135 | { | ||
136 | msm_write(port, 0x06, UART_MREG); | ||
137 | msm_write(port, 0xF1, UART_NREG); | ||
138 | msm_write(port, 0x0F, UART_DREG); | ||
139 | msm_write(port, 0x1A, UART_MNDREG); | ||
140 | } | ||
141 | |||
142 | /* | ||
143 | * Setup the MND registers to use the TCXO clock divided by 4. | ||
144 | */ | ||
145 | static inline void msm_serial_set_mnd_regs_tcxoby4(struct uart_port *port) | ||
146 | { | ||
147 | msm_write(port, 0x18, UART_MREG); | ||
148 | msm_write(port, 0xF6, UART_NREG); | ||
149 | msm_write(port, 0x0F, UART_DREG); | ||
150 | msm_write(port, 0x0A, UART_MNDREG); | ||
151 | } | ||
152 | |||
153 | static inline | ||
154 | void msm_serial_set_mnd_regs_from_uartclk(struct uart_port *port) | ||
155 | { | ||
156 | if (port->uartclk == 19200000) | ||
157 | msm_serial_set_mnd_regs_tcxo(port); | ||
158 | else | ||
159 | msm_serial_set_mnd_regs_tcxoby4(port); | ||
160 | } | ||
161 | |||
162 | /* | ||
163 | * TROUT has a specific defect that makes it report it's uartclk | ||
164 | * as 19.2Mhz (TCXO) when it's actually 4.8Mhz (TCXO/4). This special | ||
165 | * cases TROUT to use the right clock. | ||
166 | */ | ||
167 | #ifdef CONFIG_MACH_TROUT | ||
168 | #define msm_serial_set_mnd_regs msm_serial_set_mnd_regs_tcxoby4 | ||
169 | #else | ||
170 | #define msm_serial_set_mnd_regs msm_serial_set_mnd_regs_from_uartclk | ||
171 | #endif | ||
172 | |||
117 | #endif /* __DRIVERS_SERIAL_MSM_SERIAL_H */ | 173 | #endif /* __DRIVERS_SERIAL_MSM_SERIAL_H */ |
diff --git a/drivers/serial/pmac_zilog.c b/drivers/serial/pmac_zilog.c index cabbdc7ba583..5b9cde79e4ea 100644 --- a/drivers/serial/pmac_zilog.c +++ b/drivers/serial/pmac_zilog.c | |||
@@ -2005,8 +2005,11 @@ static struct of_device_id pmz_match[] = | |||
2005 | MODULE_DEVICE_TABLE (of, pmz_match); | 2005 | MODULE_DEVICE_TABLE (of, pmz_match); |
2006 | 2006 | ||
2007 | static struct macio_driver pmz_driver = { | 2007 | static struct macio_driver pmz_driver = { |
2008 | .name = "pmac_zilog", | 2008 | .driver = { |
2009 | .match_table = pmz_match, | 2009 | .name = "pmac_zilog", |
2010 | .owner = THIS_MODULE, | ||
2011 | .of_match_table = pmz_match, | ||
2012 | }, | ||
2010 | .probe = pmz_attach, | 2013 | .probe = pmz_attach, |
2011 | .remove = pmz_detach, | 2014 | .remove = pmz_detach, |
2012 | .suspend = pmz_suspend, | 2015 | .suspend = pmz_suspend, |
diff --git a/drivers/serial/s5pv210.c b/drivers/serial/s5pv210.c index 8dc03837617b..4a789e5361a4 100644 --- a/drivers/serial/s5pv210.c +++ b/drivers/serial/s5pv210.c | |||
@@ -119,7 +119,7 @@ static int s5p_serial_probe(struct platform_device *pdev) | |||
119 | return s3c24xx_serial_probe(pdev, s5p_uart_inf[pdev->id]); | 119 | return s3c24xx_serial_probe(pdev, s5p_uart_inf[pdev->id]); |
120 | } | 120 | } |
121 | 121 | ||
122 | static struct platform_driver s5p_serial_drv = { | 122 | static struct platform_driver s5p_serial_driver = { |
123 | .probe = s5p_serial_probe, | 123 | .probe = s5p_serial_probe, |
124 | .remove = __devexit_p(s3c24xx_serial_remove), | 124 | .remove = __devexit_p(s3c24xx_serial_remove), |
125 | .driver = { | 125 | .driver = { |
@@ -130,19 +130,19 @@ static struct platform_driver s5p_serial_drv = { | |||
130 | 130 | ||
131 | static int __init s5pv210_serial_console_init(void) | 131 | static int __init s5pv210_serial_console_init(void) |
132 | { | 132 | { |
133 | return s3c24xx_serial_initconsole(&s5p_serial_drv, s5p_uart_inf); | 133 | return s3c24xx_serial_initconsole(&s5p_serial_driver, s5p_uart_inf); |
134 | } | 134 | } |
135 | 135 | ||
136 | console_initcall(s5pv210_serial_console_init); | 136 | console_initcall(s5pv210_serial_console_init); |
137 | 137 | ||
138 | static int __init s5p_serial_init(void) | 138 | static int __init s5p_serial_init(void) |
139 | { | 139 | { |
140 | return s3c24xx_serial_init(&s5p_serial_drv, *s5p_uart_inf); | 140 | return s3c24xx_serial_init(&s5p_serial_driver, *s5p_uart_inf); |
141 | } | 141 | } |
142 | 142 | ||
143 | static void __exit s5p_serial_exit(void) | 143 | static void __exit s5p_serial_exit(void) |
144 | { | 144 | { |
145 | platform_driver_unregister(&s5p_serial_drv); | 145 | platform_driver_unregister(&s5p_serial_driver); |
146 | } | 146 | } |
147 | 147 | ||
148 | module_init(s5p_serial_init); | 148 | module_init(s5p_serial_init); |
diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c index dadd686c9801..526307368f8b 100644 --- a/drivers/serial/serial_cs.c +++ b/drivers/serial/serial_cs.c | |||
@@ -715,6 +715,8 @@ static struct pcmcia_device_id serial_ids[] = { | |||
715 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0057, 0x0021), | 715 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0057, 0x0021), |
716 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0089, 0x110a), | 716 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0089, 0x110a), |
717 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0104, 0x000a), | 717 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0104, 0x000a), |
718 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0105, 0x0d0a), | ||
719 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0105, 0x0e0a), | ||
718 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0105, 0xea15), | 720 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0105, 0xea15), |
719 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0109, 0x0501), | 721 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0109, 0x0501), |
720 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0138, 0x110a), | 722 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0138, 0x110a), |
@@ -724,8 +726,6 @@ static struct pcmcia_device_id serial_ids[] = { | |||
724 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x016c, 0x0081), | 726 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x016c, 0x0081), |
725 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x021b, 0x0101), | 727 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x021b, 0x0101), |
726 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x08a1, 0xc0ab), | 728 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x08a1, 0xc0ab), |
727 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0105, 0x0d0a), | ||
728 | PCMCIA_PFC_DEVICE_MANF_CARD(1, 0x0105, 0x0e0a), | ||
729 | PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "CC/XJEM3288", "DATA/FAX/CELL ETHERNET MODEM", 0xf510db04, 0x04cd2988, 0x46a52d63), | 729 | PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "CC/XJEM3288", "DATA/FAX/CELL ETHERNET MODEM", 0xf510db04, 0x04cd2988, 0x46a52d63), |
730 | PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "CC/XJEM3336", "DATA/FAX/CELL ETHERNET MODEM", 0xf510db04, 0x0143b773, 0x46a52d63), | 730 | PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "CC/XJEM3336", "DATA/FAX/CELL ETHERNET MODEM", 0xf510db04, 0x0143b773, 0x46a52d63), |
731 | PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "EM1144T", "PCMCIA MODEM", 0xf510db04, 0x856d66c8, 0xbd6c43ef), | 731 | PCMCIA_PFC_DEVICE_PROD_ID123(1, "MEGAHERTZ", "EM1144T", "PCMCIA MODEM", 0xf510db04, 0x856d66c8, 0xbd6c43ef), |
@@ -768,17 +768,26 @@ static struct pcmcia_device_id serial_ids[] = { | |||
768 | PCMCIA_DEVICE_MANF_CARD(0x00a4, 0x0276), | 768 | PCMCIA_DEVICE_MANF_CARD(0x00a4, 0x0276), |
769 | PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0039), | 769 | PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0039), |
770 | PCMCIA_DEVICE_MANF_CARD(0x0104, 0x0006), | 770 | PCMCIA_DEVICE_MANF_CARD(0x0104, 0x0006), |
771 | PCMCIA_DEVICE_MANF_CARD(0x0105, 0x0101), /* TDK DF2814 */ | ||
772 | PCMCIA_DEVICE_MANF_CARD(0x0105, 0x100a), /* Xircom CM-56G */ | ||
773 | PCMCIA_DEVICE_MANF_CARD(0x0105, 0x3e0a), /* TDK DF5660 */ | ||
771 | PCMCIA_DEVICE_MANF_CARD(0x0105, 0x410a), | 774 | PCMCIA_DEVICE_MANF_CARD(0x0105, 0x410a), |
775 | PCMCIA_DEVICE_MANF_CARD(0x0107, 0x0002), /* USRobotics 14,400 */ | ||
772 | PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d50), | 776 | PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d50), |
773 | PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d51), | 777 | PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d51), |
774 | PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d52), | 778 | PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d52), |
775 | PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d53), | 779 | PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0d53), |
776 | PCMCIA_DEVICE_MANF_CARD(0x010b, 0xd180), | 780 | PCMCIA_DEVICE_MANF_CARD(0x010b, 0xd180), |
781 | PCMCIA_DEVICE_MANF_CARD(0x0115, 0x3330), /* USRobotics/SUN 14,400 */ | ||
782 | PCMCIA_DEVICE_MANF_CARD(0x0124, 0x0100), /* Nokia DTP-2 ver II */ | ||
783 | PCMCIA_DEVICE_MANF_CARD(0x0134, 0x5600), /* LASAT COMMUNICATIONS A/S */ | ||
777 | PCMCIA_DEVICE_MANF_CARD(0x0137, 0x000e), | 784 | PCMCIA_DEVICE_MANF_CARD(0x0137, 0x000e), |
778 | PCMCIA_DEVICE_MANF_CARD(0x0137, 0x001b), | 785 | PCMCIA_DEVICE_MANF_CARD(0x0137, 0x001b), |
779 | PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0025), | 786 | PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0025), |
780 | PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0045), | 787 | PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0045), |
781 | PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0052), | 788 | PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0052), |
789 | PCMCIA_DEVICE_MANF_CARD(0x016c, 0x0006), /* Psion 56K+Fax */ | ||
790 | PCMCIA_DEVICE_MANF_CARD(0x0200, 0x0001), /* MultiMobile */ | ||
782 | PCMCIA_DEVICE_PROD_ID134("ADV", "TECH", "COMpad-32/85", 0x67459937, 0x916d02ba, 0x8fbe92ae), | 791 | PCMCIA_DEVICE_PROD_ID134("ADV", "TECH", "COMpad-32/85", 0x67459937, 0x916d02ba, 0x8fbe92ae), |
783 | PCMCIA_DEVICE_PROD_ID124("GATEWAY2000", "CC3144", "PCMCIA MODEM", 0x506bccae, 0xcb3685f1, 0xbd6c43ef), | 792 | PCMCIA_DEVICE_PROD_ID124("GATEWAY2000", "CC3144", "PCMCIA MODEM", 0x506bccae, 0xcb3685f1, 0xbd6c43ef), |
784 | PCMCIA_DEVICE_PROD_ID14("MEGAHERTZ", "PCMCIA MODEM", 0xf510db04, 0xbd6c43ef), | 793 | PCMCIA_DEVICE_PROD_ID14("MEGAHERTZ", "PCMCIA MODEM", 0xf510db04, 0xbd6c43ef), |
@@ -792,16 +801,21 @@ static struct pcmcia_device_id serial_ids[] = { | |||
792 | PCMCIA_DEVICE_PROD_ID12("COMPAQ", "PCMCIA 33600 FAX/DATA MODEM", 0xa3a3062c, 0x5a00ce95), | 801 | PCMCIA_DEVICE_PROD_ID12("COMPAQ", "PCMCIA 33600 FAX/DATA MODEM", 0xa3a3062c, 0x5a00ce95), |
793 | PCMCIA_DEVICE_PROD_ID12("Computerboards, Inc.", "PCM-COM422", 0xd0b78f51, 0x7e2d49ed), | 802 | PCMCIA_DEVICE_PROD_ID12("Computerboards, Inc.", "PCM-COM422", 0xd0b78f51, 0x7e2d49ed), |
794 | PCMCIA_DEVICE_PROD_ID12("Dr. Neuhaus", "FURY CARD 14K4", 0x76942813, 0x8b96ce65), | 803 | PCMCIA_DEVICE_PROD_ID12("Dr. Neuhaus", "FURY CARD 14K4", 0x76942813, 0x8b96ce65), |
804 | PCMCIA_DEVICE_PROD_ID12("IBM", "ISDN/56K/GSM", 0xb569a6e5, 0xfee5297b), | ||
795 | PCMCIA_DEVICE_PROD_ID12("Intelligent", "ANGIA FAX/MODEM", 0xb496e65e, 0xf31602a6), | 805 | PCMCIA_DEVICE_PROD_ID12("Intelligent", "ANGIA FAX/MODEM", 0xb496e65e, 0xf31602a6), |
796 | PCMCIA_DEVICE_PROD_ID12("Intel", "MODEM 2400+", 0x816cc815, 0x412729fb), | 806 | PCMCIA_DEVICE_PROD_ID12("Intel", "MODEM 2400+", 0x816cc815, 0x412729fb), |
807 | PCMCIA_DEVICE_PROD_ID12("Intertex", "IX34-PCMCIA", 0xf8a097e3, 0x97880447), | ||
797 | PCMCIA_DEVICE_PROD_ID12("IOTech Inc ", "PCMCIA Dual RS-232 Serial Port Card", 0x3bd2d898, 0x92abc92f), | 808 | PCMCIA_DEVICE_PROD_ID12("IOTech Inc ", "PCMCIA Dual RS-232 Serial Port Card", 0x3bd2d898, 0x92abc92f), |
798 | PCMCIA_DEVICE_PROD_ID12("MACRONIX", "FAX/MODEM", 0x668388b3, 0x3f9bdf2f), | 809 | PCMCIA_DEVICE_PROD_ID12("MACRONIX", "FAX/MODEM", 0x668388b3, 0x3f9bdf2f), |
799 | PCMCIA_DEVICE_PROD_ID12("Multi-Tech", "MT1432LT", 0x5f73be51, 0x0b3e2383), | 810 | PCMCIA_DEVICE_PROD_ID12("Multi-Tech", "MT1432LT", 0x5f73be51, 0x0b3e2383), |
800 | PCMCIA_DEVICE_PROD_ID12("Multi-Tech", "MT2834LT", 0x5f73be51, 0x4cd7c09e), | 811 | PCMCIA_DEVICE_PROD_ID12("Multi-Tech", "MT2834LT", 0x5f73be51, 0x4cd7c09e), |
801 | PCMCIA_DEVICE_PROD_ID12("OEM ", "C288MX ", 0xb572d360, 0xd2385b7a), | 812 | PCMCIA_DEVICE_PROD_ID12("OEM ", "C288MX ", 0xb572d360, 0xd2385b7a), |
813 | PCMCIA_DEVICE_PROD_ID12("Option International", "V34bis GSM/PSTN Data/Fax Modem", 0x9d7cd6f5, 0x5cb8bf41), | ||
802 | PCMCIA_DEVICE_PROD_ID12("PCMCIA ", "C336MX ", 0x99bcafe9, 0xaa25bcab), | 814 | PCMCIA_DEVICE_PROD_ID12("PCMCIA ", "C336MX ", 0x99bcafe9, 0xaa25bcab), |
803 | PCMCIA_DEVICE_PROD_ID12("Quatech Inc", "PCMCIA Dual RS-232 Serial Port Card", 0xc4420b35, 0x92abc92f), | 815 | PCMCIA_DEVICE_PROD_ID12("Quatech Inc", "PCMCIA Dual RS-232 Serial Port Card", 0xc4420b35, 0x92abc92f), |
804 | PCMCIA_DEVICE_PROD_ID12("Quatech Inc", "Dual RS-232 Serial Port PC Card", 0xc4420b35, 0x031a380d), | 816 | PCMCIA_DEVICE_PROD_ID12("Quatech Inc", "Dual RS-232 Serial Port PC Card", 0xc4420b35, 0x031a380d), |
817 | PCMCIA_DEVICE_PROD_ID12("Telia", "SurfinBird 560P/A+", 0xe2cdd5e, 0xc9314b38), | ||
818 | PCMCIA_DEVICE_PROD_ID1("Smart Serial Port", 0x2d8ce292), | ||
805 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "PCMCIA", "EN2218-LAN/MODEM", 0x281f1c5d, 0x570f348e, "cis/PCMLM28.cis"), | 819 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "PCMCIA", "EN2218-LAN/MODEM", 0x281f1c5d, 0x570f348e, "cis/PCMLM28.cis"), |
806 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "PCMCIA", "UE2218-LAN/MODEM", 0x281f1c5d, 0x6fdcacee, "cis/PCMLM28.cis"), | 820 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "PCMCIA", "UE2218-LAN/MODEM", 0x281f1c5d, 0x6fdcacee, "cis/PCMLM28.cis"), |
807 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "Psion Dacom", "Gold Card V34 Ethernet", 0xf5f025c2, 0x338e8155, "cis/PCMLM28.cis"), | 821 | PCMCIA_PFC_DEVICE_CIS_PROD_ID12(1, "Psion Dacom", "Gold Card V34 Ethernet", 0xf5f025c2, 0x338e8155, "cis/PCMLM28.cis"), |