diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-01 15:26:52 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-01 15:26:52 -0400 |
commit | 3498d13b8090c0b0ef911409fbc503a7c4cca6ef (patch) | |
tree | 254ca00276e863d9fba25707690c66b2a04c49e9 /arch | |
parent | def7cb8cd4e3258db88050eaaca5438bcc3dafca (diff) | |
parent | 0c57dfcc6c1d037243c2f8fbf62eab3633326ec0 (diff) |
Merge tag 'tty-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Pull TTY changes from Greg Kroah-Hartman:
"As we skipped the merge window for 3.6-rc1 for the tty tree,
everything is now settled down and working properly, so we are ready
for 3.7-rc1. Here's the patchset, it's big, but the large changes are
removing a firmware file and adding a staging tty driver (it depended
on the tty core changes, so it's going through this tree instead of
the staging tree.)
All of these patches have been in the linux-next tree for a while.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>"
Fix up more-or-less trivial conflicts in
- drivers/char/pcmcia/synclink_cs.c:
tty NULL dereference fix vs tty_port_cts_enabled() helper function
- drivers/staging/{Kconfig,Makefile}:
add-add conflict (dgrp driver added close to other staging drivers)
- drivers/staging/ipack/devices/ipoctal.c:
"split ipoctal_channel from iopctal" vs "TTY: use tty_port_register_device"
* tag 'tty-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (235 commits)
tty/serial: Add kgdb_nmi driver
tty/serial/amba-pl011: Quiesce interrupts in poll_get_char
tty/serial/amba-pl011: Implement poll_init callback
tty/serial/core: Introduce poll_init callback
kdb: Turn KGDB_KDB=n stubs into static inlines
kdb: Implement disable_nmi command
kernel/debug: Mask KGDB NMI upon entry
serial: pl011: handle corruption at high clock speeds
serial: sccnxp: Make 'default' choice in switch last
serial: sccnxp: Remove mask termios caps for SW flow control
serial: sccnxp: Report actual baudrate back to core
serial: samsung: Add poll_get_char & poll_put_char
Powerpc 8xx CPM_UART setting MAXIDL register proportionaly to baud rate
Powerpc 8xx CPM_UART maxidl should not depend on fifo size
Powerpc 8xx CPM_UART too many interrupts
Powerpc 8xx CPM_UART desynchronisation
serial: set correct baud_base for EXSYS EX-41092 Dual 16950
serial: omap: fix the reciever line error case
8250: blacklist Winbond CIR port
8250_pnp: do pnp probe before legacy probe
...
Diffstat (limited to 'arch')
-rw-r--r-- | arch/alpha/kernel/srmcons.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-omap2/serial.c | 18 | ||||
-rw-r--r-- | arch/arm/mach-ux500/board-mop500.c | 21 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/omap-serial.h | 50 | ||||
-rw-r--r-- | arch/ia64/hp/sim/simserial.c | 3 | ||||
-rw-r--r-- | arch/m68k/emu/nfcon.c | 4 | ||||
-rw-r--r-- | arch/mips/cavium-octeon/serial.c | 30 | ||||
-rw-r--r-- | arch/mips/sni/a20r.c | 32 | ||||
-rw-r--r-- | arch/parisc/kernel/pdc_cons.c | 1 | ||||
-rw-r--r-- | arch/um/drivers/line.c | 3 | ||||
-rw-r--r-- | arch/xtensa/platforms/iss/console.c | 1 |
11 files changed, 79 insertions, 85 deletions
diff --git a/arch/alpha/kernel/srmcons.c b/arch/alpha/kernel/srmcons.c index 3ea809430eda..5d5865204a1d 100644 --- a/arch/alpha/kernel/srmcons.c +++ b/arch/alpha/kernel/srmcons.c | |||
@@ -223,6 +223,7 @@ srmcons_init(void) | |||
223 | driver->subtype = SYSTEM_TYPE_SYSCONS; | 223 | driver->subtype = SYSTEM_TYPE_SYSCONS; |
224 | driver->init_termios = tty_std_termios; | 224 | driver->init_termios = tty_std_termios; |
225 | tty_set_operations(driver, &srmcons_ops); | 225 | tty_set_operations(driver, &srmcons_ops); |
226 | tty_port_link_device(&srmcons_singleton.port, driver, 0); | ||
226 | err = tty_register_driver(driver); | 227 | err = tty_register_driver(driver); |
227 | if (err) { | 228 | if (err) { |
228 | put_tty_driver(driver); | 229 | put_tty_driver(driver); |
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index c1b93c752d70..9e80d209d138 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c | |||
@@ -81,8 +81,9 @@ static struct omap_uart_port_info omap_serial_default_info[] __initdata = { | |||
81 | }; | 81 | }; |
82 | 82 | ||
83 | #ifdef CONFIG_PM | 83 | #ifdef CONFIG_PM |
84 | static void omap_uart_enable_wakeup(struct platform_device *pdev, bool enable) | 84 | static void omap_uart_enable_wakeup(struct device *dev, bool enable) |
85 | { | 85 | { |
86 | struct platform_device *pdev = to_platform_device(dev); | ||
86 | struct omap_device *od = to_omap_device(pdev); | 87 | struct omap_device *od = to_omap_device(pdev); |
87 | 88 | ||
88 | if (!od) | 89 | if (!od) |
@@ -99,15 +100,17 @@ static void omap_uart_enable_wakeup(struct platform_device *pdev, bool enable) | |||
99 | * in Smartidle Mode When Configured for DMA Operations. | 100 | * in Smartidle Mode When Configured for DMA Operations. |
100 | * WA: configure uart in force idle mode. | 101 | * WA: configure uart in force idle mode. |
101 | */ | 102 | */ |
102 | static void omap_uart_set_noidle(struct platform_device *pdev) | 103 | static void omap_uart_set_noidle(struct device *dev) |
103 | { | 104 | { |
105 | struct platform_device *pdev = to_platform_device(dev); | ||
104 | struct omap_device *od = to_omap_device(pdev); | 106 | struct omap_device *od = to_omap_device(pdev); |
105 | 107 | ||
106 | omap_hwmod_set_slave_idlemode(od->hwmods[0], HWMOD_IDLEMODE_NO); | 108 | omap_hwmod_set_slave_idlemode(od->hwmods[0], HWMOD_IDLEMODE_NO); |
107 | } | 109 | } |
108 | 110 | ||
109 | static void omap_uart_set_smartidle(struct platform_device *pdev) | 111 | static void omap_uart_set_smartidle(struct device *dev) |
110 | { | 112 | { |
113 | struct platform_device *pdev = to_platform_device(dev); | ||
111 | struct omap_device *od = to_omap_device(pdev); | 114 | struct omap_device *od = to_omap_device(pdev); |
112 | u8 idlemode; | 115 | u8 idlemode; |
113 | 116 | ||
@@ -120,10 +123,10 @@ static void omap_uart_set_smartidle(struct platform_device *pdev) | |||
120 | } | 123 | } |
121 | 124 | ||
122 | #else | 125 | #else |
123 | static void omap_uart_enable_wakeup(struct platform_device *pdev, bool enable) | 126 | static void omap_uart_enable_wakeup(struct device *dev, bool enable) |
124 | {} | 127 | {} |
125 | static void omap_uart_set_noidle(struct platform_device *pdev) {} | 128 | static void omap_uart_set_noidle(struct device *dev) {} |
126 | static void omap_uart_set_smartidle(struct platform_device *pdev) {} | 129 | static void omap_uart_set_smartidle(struct device *dev) {} |
127 | #endif /* CONFIG_PM */ | 130 | #endif /* CONFIG_PM */ |
128 | 131 | ||
129 | #ifdef CONFIG_OMAP_MUX | 132 | #ifdef CONFIG_OMAP_MUX |
@@ -304,6 +307,9 @@ void __init omap_serial_init_port(struct omap_board_data *bdata, | |||
304 | omap_up.dma_rx_timeout = info->dma_rx_timeout; | 307 | omap_up.dma_rx_timeout = info->dma_rx_timeout; |
305 | omap_up.dma_rx_poll_rate = info->dma_rx_poll_rate; | 308 | omap_up.dma_rx_poll_rate = info->dma_rx_poll_rate; |
306 | omap_up.autosuspend_timeout = info->autosuspend_timeout; | 309 | omap_up.autosuspend_timeout = info->autosuspend_timeout; |
310 | omap_up.DTR_gpio = info->DTR_gpio; | ||
311 | omap_up.DTR_inverted = info->DTR_inverted; | ||
312 | omap_up.DTR_present = info->DTR_present; | ||
307 | 313 | ||
308 | pdata = &omap_up; | 314 | pdata = &omap_up; |
309 | pdata_size = sizeof(struct omap_uart_port_info); | 315 | pdata_size = sizeof(struct omap_uart_port_info); |
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index a534d8880de1..1d2e3c6f8b59 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c | |||
@@ -524,33 +524,12 @@ static struct stedma40_chan_cfg uart2_dma_cfg_tx = { | |||
524 | }; | 524 | }; |
525 | #endif | 525 | #endif |
526 | 526 | ||
527 | #define PRCC_K_SOFTRST_SET 0x18 | ||
528 | #define PRCC_K_SOFTRST_CLEAR 0x1C | ||
529 | static void ux500_uart0_reset(void) | ||
530 | { | ||
531 | void __iomem *prcc_rst_set, *prcc_rst_clr; | ||
532 | |||
533 | prcc_rst_set = (void __iomem *)IO_ADDRESS(U8500_CLKRST1_BASE + | ||
534 | PRCC_K_SOFTRST_SET); | ||
535 | prcc_rst_clr = (void __iomem *)IO_ADDRESS(U8500_CLKRST1_BASE + | ||
536 | PRCC_K_SOFTRST_CLEAR); | ||
537 | |||
538 | /* Activate soft reset PRCC_K_SOFTRST_CLEAR */ | ||
539 | writel((readl(prcc_rst_clr) | 0x1), prcc_rst_clr); | ||
540 | udelay(1); | ||
541 | |||
542 | /* Release soft reset PRCC_K_SOFTRST_SET */ | ||
543 | writel((readl(prcc_rst_set) | 0x1), prcc_rst_set); | ||
544 | udelay(1); | ||
545 | } | ||
546 | |||
547 | static struct amba_pl011_data uart0_plat = { | 527 | static struct amba_pl011_data uart0_plat = { |
548 | #ifdef CONFIG_STE_DMA40 | 528 | #ifdef CONFIG_STE_DMA40 |
549 | .dma_filter = stedma40_filter, | 529 | .dma_filter = stedma40_filter, |
550 | .dma_rx_param = &uart0_dma_cfg_rx, | 530 | .dma_rx_param = &uart0_dma_cfg_rx, |
551 | .dma_tx_param = &uart0_dma_cfg_tx, | 531 | .dma_tx_param = &uart0_dma_cfg_tx, |
552 | #endif | 532 | #endif |
553 | .reset = ux500_uart0_reset, | ||
554 | }; | 533 | }; |
555 | 534 | ||
556 | static struct amba_pl011_data uart1_plat = { | 535 | static struct amba_pl011_data uart1_plat = { |
diff --git a/arch/arm/plat-omap/include/plat/omap-serial.h b/arch/arm/plat-omap/include/plat/omap-serial.h index 1a52725ffcf2..a531149823bb 100644 --- a/arch/arm/plat-omap/include/plat/omap-serial.h +++ b/arch/arm/plat-omap/include/plat/omap-serial.h | |||
@@ -18,7 +18,7 @@ | |||
18 | #define __OMAP_SERIAL_H__ | 18 | #define __OMAP_SERIAL_H__ |
19 | 19 | ||
20 | #include <linux/serial_core.h> | 20 | #include <linux/serial_core.h> |
21 | #include <linux/platform_device.h> | 21 | #include <linux/device.h> |
22 | #include <linux/pm_qos.h> | 22 | #include <linux/pm_qos.h> |
23 | 23 | ||
24 | #include <plat/mux.h> | 24 | #include <plat/mux.h> |
@@ -42,10 +42,10 @@ | |||
42 | #define OMAP_UART_WER_MOD_WKUP 0X7F | 42 | #define OMAP_UART_WER_MOD_WKUP 0X7F |
43 | 43 | ||
44 | /* Enable XON/XOFF flow control on output */ | 44 | /* Enable XON/XOFF flow control on output */ |
45 | #define OMAP_UART_SW_TX 0x04 | 45 | #define OMAP_UART_SW_TX 0x8 |
46 | 46 | ||
47 | /* Enable XON/XOFF flow control on input */ | 47 | /* Enable XON/XOFF flow control on input */ |
48 | #define OMAP_UART_SW_RX 0x04 | 48 | #define OMAP_UART_SW_RX 0x2 |
49 | 49 | ||
50 | #define OMAP_UART_SYSC_RESET 0X07 | 50 | #define OMAP_UART_SYSC_RESET 0X07 |
51 | #define OMAP_UART_TCR_TRIG 0X0F | 51 | #define OMAP_UART_TCR_TRIG 0X0F |
@@ -69,11 +69,14 @@ struct omap_uart_port_info { | |||
69 | unsigned int dma_rx_timeout; | 69 | unsigned int dma_rx_timeout; |
70 | unsigned int autosuspend_timeout; | 70 | unsigned int autosuspend_timeout; |
71 | unsigned int dma_rx_poll_rate; | 71 | unsigned int dma_rx_poll_rate; |
72 | int DTR_gpio; | ||
73 | int DTR_inverted; | ||
74 | int DTR_present; | ||
72 | 75 | ||
73 | int (*get_context_loss_count)(struct device *); | 76 | int (*get_context_loss_count)(struct device *); |
74 | void (*set_forceidle)(struct platform_device *); | 77 | void (*set_forceidle)(struct device *); |
75 | void (*set_noidle)(struct platform_device *); | 78 | void (*set_noidle)(struct device *); |
76 | void (*enable_wakeup)(struct platform_device *, bool); | 79 | void (*enable_wakeup)(struct device *, bool); |
77 | }; | 80 | }; |
78 | 81 | ||
79 | struct uart_omap_dma { | 82 | struct uart_omap_dma { |
@@ -102,39 +105,4 @@ struct uart_omap_dma { | |||
102 | unsigned int rx_timeout; | 105 | unsigned int rx_timeout; |
103 | }; | 106 | }; |
104 | 107 | ||
105 | struct uart_omap_port { | ||
106 | struct uart_port port; | ||
107 | struct uart_omap_dma uart_dma; | ||
108 | struct platform_device *pdev; | ||
109 | |||
110 | unsigned char ier; | ||
111 | unsigned char lcr; | ||
112 | unsigned char mcr; | ||
113 | unsigned char fcr; | ||
114 | unsigned char efr; | ||
115 | unsigned char dll; | ||
116 | unsigned char dlh; | ||
117 | unsigned char mdr1; | ||
118 | unsigned char scr; | ||
119 | |||
120 | int use_dma; | ||
121 | /* | ||
122 | * Some bits in registers are cleared on a read, so they must | ||
123 | * be saved whenever the register is read but the bits will not | ||
124 | * be immediately processed. | ||
125 | */ | ||
126 | unsigned int lsr_break_flag; | ||
127 | unsigned char msr_saved_flags; | ||
128 | char name[20]; | ||
129 | unsigned long port_activity; | ||
130 | u32 context_loss_cnt; | ||
131 | u32 errata; | ||
132 | u8 wakeups_enabled; | ||
133 | |||
134 | struct pm_qos_request pm_qos_request; | ||
135 | u32 latency; | ||
136 | u32 calc_latency; | ||
137 | struct work_struct qos_work; | ||
138 | }; | ||
139 | |||
140 | #endif /* __OMAP_SERIAL_H__ */ | 108 | #endif /* __OMAP_SERIAL_H__ */ |
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c index c34785dca92b..ec536e4e36c9 100644 --- a/arch/ia64/hp/sim/simserial.c +++ b/arch/ia64/hp/sim/simserial.c | |||
@@ -338,7 +338,7 @@ static void rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios) | |||
338 | { | 338 | { |
339 | /* Handle turning off CRTSCTS */ | 339 | /* Handle turning off CRTSCTS */ |
340 | if ((old_termios->c_cflag & CRTSCTS) && | 340 | if ((old_termios->c_cflag & CRTSCTS) && |
341 | !(tty->termios->c_cflag & CRTSCTS)) { | 341 | !(tty->termios.c_cflag & CRTSCTS)) { |
342 | tty->hw_stopped = 0; | 342 | tty->hw_stopped = 0; |
343 | } | 343 | } |
344 | } | 344 | } |
@@ -545,6 +545,7 @@ static int __init simrs_init(void) | |||
545 | /* the port is imaginary */ | 545 | /* the port is imaginary */ |
546 | printk(KERN_INFO "ttyS0 at 0x03f8 (irq = %d) is a 16550\n", state->irq); | 546 | printk(KERN_INFO "ttyS0 at 0x03f8 (irq = %d) is a 16550\n", state->irq); |
547 | 547 | ||
548 | tty_port_link_device(&state->port, hp_simserial_driver, 0); | ||
548 | retval = tty_register_driver(hp_simserial_driver); | 549 | retval = tty_register_driver(hp_simserial_driver); |
549 | if (retval) { | 550 | if (retval) { |
550 | printk(KERN_ERR "Couldn't register simserial driver\n"); | 551 | printk(KERN_ERR "Couldn't register simserial driver\n"); |
diff --git a/arch/m68k/emu/nfcon.c b/arch/m68k/emu/nfcon.c index 8db25e806947..16d170f53bfd 100644 --- a/arch/m68k/emu/nfcon.c +++ b/arch/m68k/emu/nfcon.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <asm/natfeat.h> | 19 | #include <asm/natfeat.h> |
20 | 20 | ||
21 | static int stderr_id; | 21 | static int stderr_id; |
22 | static struct tty_port nfcon_tty_port; | ||
22 | static struct tty_driver *nfcon_tty_driver; | 23 | static struct tty_driver *nfcon_tty_driver; |
23 | 24 | ||
24 | static void nfputs(const char *str, unsigned int count) | 25 | static void nfputs(const char *str, unsigned int count) |
@@ -119,6 +120,8 @@ static int __init nfcon_init(void) | |||
119 | { | 120 | { |
120 | int res; | 121 | int res; |
121 | 122 | ||
123 | tty_port_init(&nfcon_tty_port); | ||
124 | |||
122 | stderr_id = nf_get_id("NF_STDERR"); | 125 | stderr_id = nf_get_id("NF_STDERR"); |
123 | if (!stderr_id) | 126 | if (!stderr_id) |
124 | return -ENODEV; | 127 | return -ENODEV; |
@@ -135,6 +138,7 @@ static int __init nfcon_init(void) | |||
135 | nfcon_tty_driver->flags = TTY_DRIVER_REAL_RAW; | 138 | nfcon_tty_driver->flags = TTY_DRIVER_REAL_RAW; |
136 | 139 | ||
137 | tty_set_operations(nfcon_tty_driver, &nfcon_tty_ops); | 140 | tty_set_operations(nfcon_tty_driver, &nfcon_tty_ops); |
141 | tty_port_link_device(&nfcon_tty_port, nfcon_tty_driver, 0); | ||
138 | res = tty_register_driver(nfcon_tty_driver); | 142 | res = tty_register_driver(nfcon_tty_driver); |
139 | if (res) { | 143 | if (res) { |
140 | pr_err("failed to register nfcon tty driver\n"); | 144 | pr_err("failed to register nfcon tty driver\n"); |
diff --git a/arch/mips/cavium-octeon/serial.c b/arch/mips/cavium-octeon/serial.c index 138b2216b4f8..569f41bdcc46 100644 --- a/arch/mips/cavium-octeon/serial.c +++ b/arch/mips/cavium-octeon/serial.c | |||
@@ -47,40 +47,40 @@ static int __devinit octeon_serial_probe(struct platform_device *pdev) | |||
47 | { | 47 | { |
48 | int irq, res; | 48 | int irq, res; |
49 | struct resource *res_mem; | 49 | struct resource *res_mem; |
50 | struct uart_port port; | 50 | struct uart_8250_port up; |
51 | 51 | ||
52 | /* All adaptors have an irq. */ | 52 | /* All adaptors have an irq. */ |
53 | irq = platform_get_irq(pdev, 0); | 53 | irq = platform_get_irq(pdev, 0); |
54 | if (irq < 0) | 54 | if (irq < 0) |
55 | return irq; | 55 | return irq; |
56 | 56 | ||
57 | memset(&port, 0, sizeof(port)); | 57 | memset(&up, 0, sizeof(up)); |
58 | 58 | ||
59 | port.flags = ASYNC_SKIP_TEST | UPF_SHARE_IRQ | UPF_FIXED_TYPE; | 59 | up.port.flags = ASYNC_SKIP_TEST | UPF_SHARE_IRQ | UPF_FIXED_TYPE; |
60 | port.type = PORT_OCTEON; | 60 | up.port.type = PORT_OCTEON; |
61 | port.iotype = UPIO_MEM; | 61 | up.port.iotype = UPIO_MEM; |
62 | port.regshift = 3; | 62 | up.port.regshift = 3; |
63 | port.dev = &pdev->dev; | 63 | up.port.dev = &pdev->dev; |
64 | 64 | ||
65 | if (octeon_is_simulation()) | 65 | if (octeon_is_simulation()) |
66 | /* Make simulator output fast*/ | 66 | /* Make simulator output fast*/ |
67 | port.uartclk = 115200 * 16; | 67 | up.port.uartclk = 115200 * 16; |
68 | else | 68 | else |
69 | port.uartclk = octeon_get_io_clock_rate(); | 69 | up.port.uartclk = octeon_get_io_clock_rate(); |
70 | 70 | ||
71 | port.serial_in = octeon_serial_in; | 71 | up.port.serial_in = octeon_serial_in; |
72 | port.serial_out = octeon_serial_out; | 72 | up.port.serial_out = octeon_serial_out; |
73 | port.irq = irq; | 73 | up.port.irq = irq; |
74 | 74 | ||
75 | res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 75 | res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
76 | if (res_mem == NULL) { | 76 | if (res_mem == NULL) { |
77 | dev_err(&pdev->dev, "found no memory resource\n"); | 77 | dev_err(&pdev->dev, "found no memory resource\n"); |
78 | return -ENXIO; | 78 | return -ENXIO; |
79 | } | 79 | } |
80 | port.mapbase = res_mem->start; | 80 | up.port.mapbase = res_mem->start; |
81 | port.membase = ioremap(res_mem->start, resource_size(res_mem)); | 81 | up.port.membase = ioremap(res_mem->start, resource_size(res_mem)); |
82 | 82 | ||
83 | res = serial8250_register_port(&port); | 83 | res = serial8250_register_8250_port(&up); |
84 | 84 | ||
85 | return res >= 0 ? 0 : res; | 85 | return res >= 0 ? 0 : res; |
86 | } | 86 | } |
diff --git a/arch/mips/sni/a20r.c b/arch/mips/sni/a20r.c index c48194c3073b..b2d4f492d782 100644 --- a/arch/mips/sni/a20r.c +++ b/arch/mips/sni/a20r.c | |||
@@ -133,6 +133,38 @@ static struct platform_device sc26xx_pdev = { | |||
133 | } | 133 | } |
134 | }; | 134 | }; |
135 | 135 | ||
136 | #warning "Please try migrate to use new driver SCCNXP and report the status" \ | ||
137 | "in the linux-serial mailing list." | ||
138 | |||
139 | /* The code bellow is a replacement of SC26XX to SCCNXP */ | ||
140 | #if 0 | ||
141 | #include <linux/platform_data/sccnxp.h> | ||
142 | |||
143 | static struct sccnxp_pdata sccnxp_data = { | ||
144 | .reg_shift = 2, | ||
145 | .frequency = 3686400, | ||
146 | .mctrl_cfg[0] = MCTRL_SIG(DTR_OP, LINE_OP7) | | ||
147 | MCTRL_SIG(RTS_OP, LINE_OP3) | | ||
148 | MCTRL_SIG(DSR_IP, LINE_IP5) | | ||
149 | MCTRL_SIG(DCD_IP, LINE_IP6), | ||
150 | .mctrl_cfg[1] = MCTRL_SIG(DTR_OP, LINE_OP2) | | ||
151 | MCTRL_SIG(RTS_OP, LINE_OP1) | | ||
152 | MCTRL_SIG(DSR_IP, LINE_IP0) | | ||
153 | MCTRL_SIG(CTS_IP, LINE_IP1) | | ||
154 | MCTRL_SIG(DCD_IP, LINE_IP2) | | ||
155 | MCTRL_SIG(RNG_IP, LINE_IP3), | ||
156 | }; | ||
157 | |||
158 | static struct platform_device sc2681_pdev = { | ||
159 | .name = "sc2681", | ||
160 | .resource = sc2xxx_rsrc, | ||
161 | .num_resources = ARRAY_SIZE(sc2xxx_rsrc), | ||
162 | .dev = { | ||
163 | .platform_data = &sccnxp_data, | ||
164 | }, | ||
165 | }; | ||
166 | #endif | ||
167 | |||
136 | static u32 a20r_ack_hwint(void) | 168 | static u32 a20r_ack_hwint(void) |
137 | { | 169 | { |
138 | u32 status = read_c0_status(); | 170 | u32 status = read_c0_status(); |
diff --git a/arch/parisc/kernel/pdc_cons.c b/arch/parisc/kernel/pdc_cons.c index 47341aa208f2..88238638aee6 100644 --- a/arch/parisc/kernel/pdc_cons.c +++ b/arch/parisc/kernel/pdc_cons.c | |||
@@ -202,6 +202,7 @@ static int __init pdc_console_tty_driver_init(void) | |||
202 | pdc_console_tty_driver->flags = TTY_DRIVER_REAL_RAW | | 202 | pdc_console_tty_driver->flags = TTY_DRIVER_REAL_RAW | |
203 | TTY_DRIVER_RESET_TERMIOS; | 203 | TTY_DRIVER_RESET_TERMIOS; |
204 | tty_set_operations(pdc_console_tty_driver, &pdc_console_tty_ops); | 204 | tty_set_operations(pdc_console_tty_driver, &pdc_console_tty_ops); |
205 | tty_port_link_device(&tty_port, pdc_console_tty_driver, 0); | ||
205 | 206 | ||
206 | err = tty_register_driver(pdc_console_tty_driver); | 207 | err = tty_register_driver(pdc_console_tty_driver); |
207 | if (err) { | 208 | if (err) { |
diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c index bbaf2c59830a..457475f98414 100644 --- a/arch/um/drivers/line.c +++ b/arch/um/drivers/line.c | |||
@@ -409,7 +409,8 @@ int setup_one_line(struct line *lines, int n, char *init, | |||
409 | line->valid = 1; | 409 | line->valid = 1; |
410 | err = parse_chan_pair(new, line, n, opts, error_out); | 410 | err = parse_chan_pair(new, line, n, opts, error_out); |
411 | if (!err) { | 411 | if (!err) { |
412 | struct device *d = tty_register_device(driver, n, NULL); | 412 | struct device *d = tty_port_register_device(&line->port, |
413 | driver, n, NULL); | ||
413 | if (IS_ERR(d)) { | 414 | if (IS_ERR(d)) { |
414 | *error_out = "Failed to register device"; | 415 | *error_out = "Failed to register device"; |
415 | err = PTR_ERR(d); | 416 | err = PTR_ERR(d); |
diff --git a/arch/xtensa/platforms/iss/console.c b/arch/xtensa/platforms/iss/console.c index f9726f6afdf1..2cd3d3a3400b 100644 --- a/arch/xtensa/platforms/iss/console.c +++ b/arch/xtensa/platforms/iss/console.c | |||
@@ -223,6 +223,7 @@ int __init rs_init(void) | |||
223 | serial_driver->flags = TTY_DRIVER_REAL_RAW; | 223 | serial_driver->flags = TTY_DRIVER_REAL_RAW; |
224 | 224 | ||
225 | tty_set_operations(serial_driver, &serial_ops); | 225 | tty_set_operations(serial_driver, &serial_ops); |
226 | tty_port_link_device(&serial_port, serial_driver, 0); | ||
226 | 227 | ||
227 | if (tty_register_driver(serial_driver)) | 228 | if (tty_register_driver(serial_driver)) |
228 | panic("Couldn't register serial driver\n"); | 229 | panic("Couldn't register serial driver\n"); |