diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/alpha/Kconfig | 2 | ||||
-rw-r--r-- | arch/alpha/kernel/srmcons.c | 18 | ||||
-rw-r--r-- | arch/arm/boot/dts/vt8500.dtsi | 40 | ||||
-rw-r--r-- | arch/arm/boot/dts/wm8505.dtsi | 60 | ||||
-rw-r--r-- | arch/arm/boot/dts/wm8650.dtsi | 20 | ||||
-rw-r--r-- | arch/arm/boot/dts/zynq-7000.dtsi | 4 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/assabet.c | 1 | ||||
-rw-r--r-- | arch/arm/plat-samsung/include/plat/adc.h | 1 | ||||
-rw-r--r-- | arch/ia64/hp/sim/Kconfig | 1 | ||||
-rw-r--r-- | arch/ia64/hp/sim/simserial.c | 21 | ||||
-rw-r--r-- | arch/m68k/Kconfig.devices | 2 | ||||
-rw-r--r-- | arch/mips/sni/a20r.c | 2 | ||||
-rw-r--r-- | arch/mn10300/kernel/mn10300-serial.c | 20 | ||||
-rw-r--r-- | arch/parisc/Kconfig | 1 | ||||
-rw-r--r-- | arch/parisc/kernel/pdc_cons.c | 10 | ||||
-rw-r--r-- | arch/sparc/kernel/kgdb_32.c | 1 | ||||
-rw-r--r-- | arch/tile/Kconfig | 1 | ||||
-rw-r--r-- | arch/um/Kconfig.common | 1 | ||||
-rw-r--r-- | arch/um/drivers/chan.h | 3 | ||||
-rw-r--r-- | arch/um/drivers/chan_kern.c | 25 | ||||
-rw-r--r-- | arch/um/drivers/line.c | 7 | ||||
-rw-r--r-- | arch/x86/lguest/Kconfig | 1 | ||||
-rw-r--r-- | arch/xtensa/Kconfig | 1 | ||||
-rw-r--r-- | arch/xtensa/platforms/iss/console.c | 10 |
24 files changed, 169 insertions, 84 deletions
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index 775361f67bfd..dabc93649495 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig | |||
@@ -124,6 +124,7 @@ choice | |||
124 | 124 | ||
125 | config ALPHA_GENERIC | 125 | config ALPHA_GENERIC |
126 | bool "Generic" | 126 | bool "Generic" |
127 | depends on TTY | ||
127 | help | 128 | help |
128 | A generic kernel will run on all supported Alpha hardware. | 129 | A generic kernel will run on all supported Alpha hardware. |
129 | 130 | ||
@@ -490,6 +491,7 @@ config VGA_HOSE | |||
490 | 491 | ||
491 | config ALPHA_SRM | 492 | config ALPHA_SRM |
492 | bool "Use SRM as bootloader" if ALPHA_CABRIOLET || ALPHA_AVANTI_CH || ALPHA_EB64P || ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR || ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_NAUTILUS || ALPHA_NONAME | 493 | bool "Use SRM as bootloader" if ALPHA_CABRIOLET || ALPHA_AVANTI_CH || ALPHA_EB64P || ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR || ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_NAUTILUS || ALPHA_NONAME |
494 | depends on TTY | ||
493 | default y if ALPHA_JENSEN || ALPHA_MIKASA || ALPHA_SABLE || ALPHA_LYNX || ALPHA_NORITAKE || ALPHA_DP264 || ALPHA_RAWHIDE || ALPHA_EIGER || ALPHA_WILDFIRE || ALPHA_TITAN || ALPHA_SHARK || ALPHA_MARVEL | 495 | default y if ALPHA_JENSEN || ALPHA_MIKASA || ALPHA_SABLE || ALPHA_LYNX || ALPHA_NORITAKE || ALPHA_DP264 || ALPHA_RAWHIDE || ALPHA_EIGER || ALPHA_WILDFIRE || ALPHA_TITAN || ALPHA_SHARK || ALPHA_MARVEL |
494 | ---help--- | 496 | ---help--- |
495 | There are two different types of booting firmware on Alphas: SRM, | 497 | There are two different types of booting firmware on Alphas: SRM, |
diff --git a/arch/alpha/kernel/srmcons.c b/arch/alpha/kernel/srmcons.c index 59b7bbad8394..6f01d9ad7b81 100644 --- a/arch/alpha/kernel/srmcons.c +++ b/arch/alpha/kernel/srmcons.c | |||
@@ -44,7 +44,7 @@ typedef union _srmcons_result { | |||
44 | 44 | ||
45 | /* called with callback_lock held */ | 45 | /* called with callback_lock held */ |
46 | static int | 46 | static int |
47 | srmcons_do_receive_chars(struct tty_struct *tty) | 47 | srmcons_do_receive_chars(struct tty_port *port) |
48 | { | 48 | { |
49 | srmcons_result result; | 49 | srmcons_result result; |
50 | int count = 0, loops = 0; | 50 | int count = 0, loops = 0; |
@@ -52,13 +52,13 @@ srmcons_do_receive_chars(struct tty_struct *tty) | |||
52 | do { | 52 | do { |
53 | result.as_long = callback_getc(0); | 53 | result.as_long = callback_getc(0); |
54 | if (result.bits.status < 2) { | 54 | if (result.bits.status < 2) { |
55 | tty_insert_flip_char(tty, (char)result.bits.c, 0); | 55 | tty_insert_flip_char(port, (char)result.bits.c, 0); |
56 | count++; | 56 | count++; |
57 | } | 57 | } |
58 | } while((result.bits.status & 1) && (++loops < 10)); | 58 | } while((result.bits.status & 1) && (++loops < 10)); |
59 | 59 | ||
60 | if (count) | 60 | if (count) |
61 | tty_schedule_flip(tty); | 61 | tty_schedule_flip(port); |
62 | 62 | ||
63 | return count; | 63 | return count; |
64 | } | 64 | } |
@@ -73,7 +73,7 @@ srmcons_receive_chars(unsigned long data) | |||
73 | 73 | ||
74 | local_irq_save(flags); | 74 | local_irq_save(flags); |
75 | if (spin_trylock(&srmcons_callback_lock)) { | 75 | if (spin_trylock(&srmcons_callback_lock)) { |
76 | if (!srmcons_do_receive_chars(port->tty)) | 76 | if (!srmcons_do_receive_chars(port)) |
77 | incr = 100; | 77 | incr = 100; |
78 | spin_unlock(&srmcons_callback_lock); | 78 | spin_unlock(&srmcons_callback_lock); |
79 | } | 79 | } |
@@ -88,7 +88,7 @@ srmcons_receive_chars(unsigned long data) | |||
88 | 88 | ||
89 | /* called with callback_lock held */ | 89 | /* called with callback_lock held */ |
90 | static int | 90 | static int |
91 | srmcons_do_write(struct tty_struct *tty, const char *buf, int count) | 91 | srmcons_do_write(struct tty_port *port, const char *buf, int count) |
92 | { | 92 | { |
93 | static char str_cr[1] = "\r"; | 93 | static char str_cr[1] = "\r"; |
94 | long c, remaining = count; | 94 | long c, remaining = count; |
@@ -113,10 +113,10 @@ srmcons_do_write(struct tty_struct *tty, const char *buf, int count) | |||
113 | cur += result.bits.c; | 113 | cur += result.bits.c; |
114 | 114 | ||
115 | /* | 115 | /* |
116 | * Check for pending input iff a tty was provided | 116 | * Check for pending input iff a tty port was provided |
117 | */ | 117 | */ |
118 | if (tty) | 118 | if (port) |
119 | srmcons_do_receive_chars(tty); | 119 | srmcons_do_receive_chars(port); |
120 | } | 120 | } |
121 | 121 | ||
122 | while (need_cr) { | 122 | while (need_cr) { |
@@ -135,7 +135,7 @@ srmcons_write(struct tty_struct *tty, | |||
135 | unsigned long flags; | 135 | unsigned long flags; |
136 | 136 | ||
137 | spin_lock_irqsave(&srmcons_callback_lock, flags); | 137 | spin_lock_irqsave(&srmcons_callback_lock, flags); |
138 | srmcons_do_write(tty, (const char *) buf, count); | 138 | srmcons_do_write(tty->port, (const char *) buf, count); |
139 | spin_unlock_irqrestore(&srmcons_callback_lock, flags); | 139 | spin_unlock_irqrestore(&srmcons_callback_lock, flags); |
140 | 140 | ||
141 | return count; | 141 | return count; |
diff --git a/arch/arm/boot/dts/vt8500.dtsi b/arch/arm/boot/dts/vt8500.dtsi index d8645e990b21..cf31ced46602 100644 --- a/arch/arm/boot/dts/vt8500.dtsi +++ b/arch/arm/boot/dts/vt8500.dtsi | |||
@@ -45,6 +45,38 @@ | |||
45 | compatible = "fixed-clock"; | 45 | compatible = "fixed-clock"; |
46 | clock-frequency = <24000000>; | 46 | clock-frequency = <24000000>; |
47 | }; | 47 | }; |
48 | |||
49 | clkuart0: uart0 { | ||
50 | #clock-cells = <0>; | ||
51 | compatible = "via,vt8500-device-clock"; | ||
52 | clocks = <&ref24>; | ||
53 | enable-reg = <0x250>; | ||
54 | enable-bit = <1>; | ||
55 | }; | ||
56 | |||
57 | clkuart1: uart1 { | ||
58 | #clock-cells = <0>; | ||
59 | compatible = "via,vt8500-device-clock"; | ||
60 | clocks = <&ref24>; | ||
61 | enable-reg = <0x250>; | ||
62 | enable-bit = <2>; | ||
63 | }; | ||
64 | |||
65 | clkuart2: uart2 { | ||
66 | #clock-cells = <0>; | ||
67 | compatible = "via,vt8500-device-clock"; | ||
68 | clocks = <&ref24>; | ||
69 | enable-reg = <0x250>; | ||
70 | enable-bit = <3>; | ||
71 | }; | ||
72 | |||
73 | clkuart3: uart3 { | ||
74 | #clock-cells = <0>; | ||
75 | compatible = "via,vt8500-device-clock"; | ||
76 | clocks = <&ref24>; | ||
77 | enable-reg = <0x250>; | ||
78 | enable-bit = <4>; | ||
79 | }; | ||
48 | }; | 80 | }; |
49 | }; | 81 | }; |
50 | 82 | ||
@@ -83,28 +115,28 @@ | |||
83 | compatible = "via,vt8500-uart"; | 115 | compatible = "via,vt8500-uart"; |
84 | reg = <0xd8200000 0x1040>; | 116 | reg = <0xd8200000 0x1040>; |
85 | interrupts = <32>; | 117 | interrupts = <32>; |
86 | clocks = <&ref24>; | 118 | clocks = <&clkuart0>; |
87 | }; | 119 | }; |
88 | 120 | ||
89 | uart@d82b0000 { | 121 | uart@d82b0000 { |
90 | compatible = "via,vt8500-uart"; | 122 | compatible = "via,vt8500-uart"; |
91 | reg = <0xd82b0000 0x1040>; | 123 | reg = <0xd82b0000 0x1040>; |
92 | interrupts = <33>; | 124 | interrupts = <33>; |
93 | clocks = <&ref24>; | 125 | clocks = <&clkuart1>; |
94 | }; | 126 | }; |
95 | 127 | ||
96 | uart@d8210000 { | 128 | uart@d8210000 { |
97 | compatible = "via,vt8500-uart"; | 129 | compatible = "via,vt8500-uart"; |
98 | reg = <0xd8210000 0x1040>; | 130 | reg = <0xd8210000 0x1040>; |
99 | interrupts = <47>; | 131 | interrupts = <47>; |
100 | clocks = <&ref24>; | 132 | clocks = <&clkuart2>; |
101 | }; | 133 | }; |
102 | 134 | ||
103 | uart@d82c0000 { | 135 | uart@d82c0000 { |
104 | compatible = "via,vt8500-uart"; | 136 | compatible = "via,vt8500-uart"; |
105 | reg = <0xd82c0000 0x1040>; | 137 | reg = <0xd82c0000 0x1040>; |
106 | interrupts = <50>; | 138 | interrupts = <50>; |
107 | clocks = <&ref24>; | 139 | clocks = <&clkuart3>; |
108 | }; | 140 | }; |
109 | 141 | ||
110 | rtc@d8100000 { | 142 | rtc@d8100000 { |
diff --git a/arch/arm/boot/dts/wm8505.dtsi b/arch/arm/boot/dts/wm8505.dtsi index 330f833ac3b0..e74a1c0fb9a2 100644 --- a/arch/arm/boot/dts/wm8505.dtsi +++ b/arch/arm/boot/dts/wm8505.dtsi | |||
@@ -59,6 +59,54 @@ | |||
59 | compatible = "fixed-clock"; | 59 | compatible = "fixed-clock"; |
60 | clock-frequency = <24000000>; | 60 | clock-frequency = <24000000>; |
61 | }; | 61 | }; |
62 | |||
63 | clkuart0: uart0 { | ||
64 | #clock-cells = <0>; | ||
65 | compatible = "via,vt8500-device-clock"; | ||
66 | clocks = <&ref24>; | ||
67 | enable-reg = <0x250>; | ||
68 | enable-bit = <1>; | ||
69 | }; | ||
70 | |||
71 | clkuart1: uart1 { | ||
72 | #clock-cells = <0>; | ||
73 | compatible = "via,vt8500-device-clock"; | ||
74 | clocks = <&ref24>; | ||
75 | enable-reg = <0x250>; | ||
76 | enable-bit = <2>; | ||
77 | }; | ||
78 | |||
79 | clkuart2: uart2 { | ||
80 | #clock-cells = <0>; | ||
81 | compatible = "via,vt8500-device-clock"; | ||
82 | clocks = <&ref24>; | ||
83 | enable-reg = <0x250>; | ||
84 | enable-bit = <3>; | ||
85 | }; | ||
86 | |||
87 | clkuart3: uart3 { | ||
88 | #clock-cells = <0>; | ||
89 | compatible = "via,vt8500-device-clock"; | ||
90 | clocks = <&ref24>; | ||
91 | enable-reg = <0x250>; | ||
92 | enable-bit = <4>; | ||
93 | }; | ||
94 | |||
95 | clkuart4: uart4 { | ||
96 | #clock-cells = <0>; | ||
97 | compatible = "via,vt8500-device-clock"; | ||
98 | clocks = <&ref24>; | ||
99 | enable-reg = <0x250>; | ||
100 | enable-bit = <22>; | ||
101 | }; | ||
102 | |||
103 | clkuart5: uart5 { | ||
104 | #clock-cells = <0>; | ||
105 | compatible = "via,vt8500-device-clock"; | ||
106 | clocks = <&ref24>; | ||
107 | enable-reg = <0x250>; | ||
108 | enable-bit = <23>; | ||
109 | }; | ||
62 | }; | 110 | }; |
63 | }; | 111 | }; |
64 | 112 | ||
@@ -96,42 +144,42 @@ | |||
96 | compatible = "via,vt8500-uart"; | 144 | compatible = "via,vt8500-uart"; |
97 | reg = <0xd8200000 0x1040>; | 145 | reg = <0xd8200000 0x1040>; |
98 | interrupts = <32>; | 146 | interrupts = <32>; |
99 | clocks = <&ref24>; | 147 | clocks = <&clkuart0>; |
100 | }; | 148 | }; |
101 | 149 | ||
102 | uart@d82b0000 { | 150 | uart@d82b0000 { |
103 | compatible = "via,vt8500-uart"; | 151 | compatible = "via,vt8500-uart"; |
104 | reg = <0xd82b0000 0x1040>; | 152 | reg = <0xd82b0000 0x1040>; |
105 | interrupts = <33>; | 153 | interrupts = <33>; |
106 | clocks = <&ref24>; | 154 | clocks = <&clkuart1>; |
107 | }; | 155 | }; |
108 | 156 | ||
109 | uart@d8210000 { | 157 | uart@d8210000 { |
110 | compatible = "via,vt8500-uart"; | 158 | compatible = "via,vt8500-uart"; |
111 | reg = <0xd8210000 0x1040>; | 159 | reg = <0xd8210000 0x1040>; |
112 | interrupts = <47>; | 160 | interrupts = <47>; |
113 | clocks = <&ref24>; | 161 | clocks = <&clkuart2>; |
114 | }; | 162 | }; |
115 | 163 | ||
116 | uart@d82c0000 { | 164 | uart@d82c0000 { |
117 | compatible = "via,vt8500-uart"; | 165 | compatible = "via,vt8500-uart"; |
118 | reg = <0xd82c0000 0x1040>; | 166 | reg = <0xd82c0000 0x1040>; |
119 | interrupts = <50>; | 167 | interrupts = <50>; |
120 | clocks = <&ref24>; | 168 | clocks = <&clkuart3>; |
121 | }; | 169 | }; |
122 | 170 | ||
123 | uart@d8370000 { | 171 | uart@d8370000 { |
124 | compatible = "via,vt8500-uart"; | 172 | compatible = "via,vt8500-uart"; |
125 | reg = <0xd8370000 0x1040>; | 173 | reg = <0xd8370000 0x1040>; |
126 | interrupts = <31>; | 174 | interrupts = <31>; |
127 | clocks = <&ref24>; | 175 | clocks = <&clkuart4>; |
128 | }; | 176 | }; |
129 | 177 | ||
130 | uart@d8380000 { | 178 | uart@d8380000 { |
131 | compatible = "via,vt8500-uart"; | 179 | compatible = "via,vt8500-uart"; |
132 | reg = <0xd8380000 0x1040>; | 180 | reg = <0xd8380000 0x1040>; |
133 | interrupts = <30>; | 181 | interrupts = <30>; |
134 | clocks = <&ref24>; | 182 | clocks = <&clkuart5>; |
135 | }; | 183 | }; |
136 | 184 | ||
137 | rtc@d8100000 { | 185 | rtc@d8100000 { |
diff --git a/arch/arm/boot/dts/wm8650.dtsi b/arch/arm/boot/dts/wm8650.dtsi index 83b9467559bb..db3c0a12e052 100644 --- a/arch/arm/boot/dts/wm8650.dtsi +++ b/arch/arm/boot/dts/wm8650.dtsi | |||
@@ -75,6 +75,22 @@ | |||
75 | reg = <0x204>; | 75 | reg = <0x204>; |
76 | }; | 76 | }; |
77 | 77 | ||
78 | clkuart0: uart0 { | ||
79 | #clock-cells = <0>; | ||
80 | compatible = "via,vt8500-device-clock"; | ||
81 | clocks = <&ref24>; | ||
82 | enable-reg = <0x250>; | ||
83 | enable-bit = <1>; | ||
84 | }; | ||
85 | |||
86 | clkuart1: uart1 { | ||
87 | #clock-cells = <0>; | ||
88 | compatible = "via,vt8500-device-clock"; | ||
89 | clocks = <&ref24>; | ||
90 | enable-reg = <0x250>; | ||
91 | enable-bit = <2>; | ||
92 | }; | ||
93 | |||
78 | arm: arm { | 94 | arm: arm { |
79 | #clock-cells = <0>; | 95 | #clock-cells = <0>; |
80 | compatible = "via,vt8500-device-clock"; | 96 | compatible = "via,vt8500-device-clock"; |
@@ -128,14 +144,14 @@ | |||
128 | compatible = "via,vt8500-uart"; | 144 | compatible = "via,vt8500-uart"; |
129 | reg = <0xd8200000 0x1040>; | 145 | reg = <0xd8200000 0x1040>; |
130 | interrupts = <32>; | 146 | interrupts = <32>; |
131 | clocks = <&ref24>; | 147 | clocks = <&clkuart0>; |
132 | }; | 148 | }; |
133 | 149 | ||
134 | uart@d82b0000 { | 150 | uart@d82b0000 { |
135 | compatible = "via,vt8500-uart"; | 151 | compatible = "via,vt8500-uart"; |
136 | reg = <0xd82b0000 0x1040>; | 152 | reg = <0xd82b0000 0x1040>; |
137 | interrupts = <33>; | 153 | interrupts = <33>; |
138 | clocks = <&ref24>; | 154 | clocks = <&clkuart1>; |
139 | }; | 155 | }; |
140 | 156 | ||
141 | rtc@d8100000 { | 157 | rtc@d8100000 { |
diff --git a/arch/arm/boot/dts/zynq-7000.dtsi b/arch/arm/boot/dts/zynq-7000.dtsi index 401c1262d4ed..5914b5654591 100644 --- a/arch/arm/boot/dts/zynq-7000.dtsi +++ b/arch/arm/boot/dts/zynq-7000.dtsi | |||
@@ -44,14 +44,14 @@ | |||
44 | compatible = "xlnx,xuartps"; | 44 | compatible = "xlnx,xuartps"; |
45 | reg = <0xE0000000 0x1000>; | 45 | reg = <0xE0000000 0x1000>; |
46 | interrupts = <0 27 4>; | 46 | interrupts = <0 27 4>; |
47 | clock = <50000000>; | 47 | clocks = <&uart_clk 0>; |
48 | }; | 48 | }; |
49 | 49 | ||
50 | uart1: uart@e0001000 { | 50 | uart1: uart@e0001000 { |
51 | compatible = "xlnx,xuartps"; | 51 | compatible = "xlnx,xuartps"; |
52 | reg = <0xE0001000 0x1000>; | 52 | reg = <0xE0001000 0x1000>; |
53 | interrupts = <0 50 4>; | 53 | interrupts = <0 50 4>; |
54 | clock = <50000000>; | 54 | clocks = <&uart_clk 1>; |
55 | }; | 55 | }; |
56 | 56 | ||
57 | slcr: slcr@f8000000 { | 57 | slcr: slcr@f8000000 { |
diff --git a/arch/arm/mach-sa1100/assabet.c b/arch/arm/mach-sa1100/assabet.c index 9a23739f7026..442497363db9 100644 --- a/arch/arm/mach-sa1100/assabet.c +++ b/arch/arm/mach-sa1100/assabet.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/ioport.h> | 16 | #include <linux/ioport.h> |
17 | #include <linux/platform_data/sa11x0-serial.h> | 17 | #include <linux/platform_data/sa11x0-serial.h> |
18 | #include <linux/serial_core.h> | 18 | #include <linux/serial_core.h> |
19 | #include <linux/platform_device.h> | ||
19 | #include <linux/mfd/ucb1x00.h> | 20 | #include <linux/mfd/ucb1x00.h> |
20 | #include <linux/mtd/mtd.h> | 21 | #include <linux/mtd/mtd.h> |
21 | #include <linux/mtd/partitions.h> | 22 | #include <linux/mtd/partitions.h> |
diff --git a/arch/arm/plat-samsung/include/plat/adc.h b/arch/arm/plat-samsung/include/plat/adc.h index b258a08de591..2fc89315553f 100644 --- a/arch/arm/plat-samsung/include/plat/adc.h +++ b/arch/arm/plat-samsung/include/plat/adc.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #define __ASM_PLAT_ADC_H __FILE__ | 15 | #define __ASM_PLAT_ADC_H __FILE__ |
16 | 16 | ||
17 | struct s3c_adc_client; | 17 | struct s3c_adc_client; |
18 | struct platform_device; | ||
18 | 19 | ||
19 | extern int s3c_adc_start(struct s3c_adc_client *client, | 20 | extern int s3c_adc_start(struct s3c_adc_client *client, |
20 | unsigned int channel, unsigned int nr_samples); | 21 | unsigned int channel, unsigned int nr_samples); |
diff --git a/arch/ia64/hp/sim/Kconfig b/arch/ia64/hp/sim/Kconfig index 8d513a8c5266..d84707d55203 100644 --- a/arch/ia64/hp/sim/Kconfig +++ b/arch/ia64/hp/sim/Kconfig | |||
@@ -8,6 +8,7 @@ config HP_SIMETH | |||
8 | 8 | ||
9 | config HP_SIMSERIAL | 9 | config HP_SIMSERIAL |
10 | bool "Simulated serial driver support" | 10 | bool "Simulated serial driver support" |
11 | depends on TTY | ||
11 | 12 | ||
12 | config HP_SIMSERIAL_CONSOLE | 13 | config HP_SIMSERIAL_CONSOLE |
13 | bool "Console for HP simulator" | 14 | bool "Console for HP simulator" |
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c index fc3924d18c1f..da2f319fb71d 100644 --- a/arch/ia64/hp/sim/simserial.c +++ b/arch/ia64/hp/sim/simserial.c | |||
@@ -53,7 +53,7 @@ struct tty_driver *hp_simserial_driver; | |||
53 | 53 | ||
54 | static struct console *console; | 54 | static struct console *console; |
55 | 55 | ||
56 | static void receive_chars(struct tty_struct *tty) | 56 | static void receive_chars(struct tty_port *port) |
57 | { | 57 | { |
58 | unsigned char ch; | 58 | unsigned char ch; |
59 | static unsigned char seen_esc = 0; | 59 | static unsigned char seen_esc = 0; |
@@ -81,10 +81,10 @@ static void receive_chars(struct tty_struct *tty) | |||
81 | } | 81 | } |
82 | seen_esc = 0; | 82 | seen_esc = 0; |
83 | 83 | ||
84 | if (tty_insert_flip_char(tty, ch, TTY_NORMAL) == 0) | 84 | if (tty_insert_flip_char(port, ch, TTY_NORMAL) == 0) |
85 | break; | 85 | break; |
86 | } | 86 | } |
87 | tty_flip_buffer_push(tty); | 87 | tty_flip_buffer_push(port); |
88 | } | 88 | } |
89 | 89 | ||
90 | /* | 90 | /* |
@@ -93,18 +93,9 @@ static void receive_chars(struct tty_struct *tty) | |||
93 | static irqreturn_t rs_interrupt_single(int irq, void *dev_id) | 93 | static irqreturn_t rs_interrupt_single(int irq, void *dev_id) |
94 | { | 94 | { |
95 | struct serial_state *info = dev_id; | 95 | struct serial_state *info = dev_id; |
96 | struct tty_struct *tty = tty_port_tty_get(&info->port); | ||
97 | 96 | ||
98 | if (!tty) { | 97 | receive_chars(&info->port); |
99 | printk(KERN_INFO "%s: tty=0 problem\n", __func__); | 98 | |
100 | return IRQ_NONE; | ||
101 | } | ||
102 | /* | ||
103 | * pretty simple in our case, because we only get interrupts | ||
104 | * on inbound traffic | ||
105 | */ | ||
106 | receive_chars(tty); | ||
107 | tty_kref_put(tty); | ||
108 | return IRQ_HANDLED; | 99 | return IRQ_HANDLED; |
109 | } | 100 | } |
110 | 101 | ||
@@ -435,7 +426,7 @@ static int rs_open(struct tty_struct *tty, struct file * filp) | |||
435 | struct tty_port *port = &info->port; | 426 | struct tty_port *port = &info->port; |
436 | 427 | ||
437 | tty->driver_data = info; | 428 | tty->driver_data = info; |
438 | tty->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0; | 429 | port->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0; |
439 | 430 | ||
440 | /* | 431 | /* |
441 | * figure out which console to use (should be one already) | 432 | * figure out which console to use (should be one already) |
diff --git a/arch/m68k/Kconfig.devices b/arch/m68k/Kconfig.devices index c4cdfe444c64..4bc945dfe467 100644 --- a/arch/m68k/Kconfig.devices +++ b/arch/m68k/Kconfig.devices | |||
@@ -41,7 +41,7 @@ config NFBLOCK | |||
41 | 41 | ||
42 | config NFCON | 42 | config NFCON |
43 | tristate "NatFeat console driver" | 43 | tristate "NatFeat console driver" |
44 | depends on NATFEAT | 44 | depends on TTY && NATFEAT |
45 | help | 45 | help |
46 | Say Y to include support for the ARAnyM NatFeat console driver | 46 | Say Y to include support for the ARAnyM NatFeat console driver |
47 | which allows the console output to be redirected to the stderr | 47 | which allows the console output to be redirected to the stderr |
diff --git a/arch/mips/sni/a20r.c b/arch/mips/sni/a20r.c index 9cb9d43a3a0e..e05ad4da44d9 100644 --- a/arch/mips/sni/a20r.c +++ b/arch/mips/sni/a20r.c | |||
@@ -118,7 +118,7 @@ static struct resource sc26xx_rsrc[] = { | |||
118 | } | 118 | } |
119 | }; | 119 | }; |
120 | 120 | ||
121 | #include <linux/platform_data/sccnxp.h> | 121 | #include <linux/platform_data/serial-sccnxp.h> |
122 | 122 | ||
123 | static struct sccnxp_pdata sccnxp_data = { | 123 | static struct sccnxp_pdata sccnxp_data = { |
124 | .reg_shift = 2, | 124 | .reg_shift = 2, |
diff --git a/arch/mn10300/kernel/mn10300-serial.c b/arch/mn10300/kernel/mn10300-serial.c index 81d5cb9b6569..bf6e949a2f87 100644 --- a/arch/mn10300/kernel/mn10300-serial.c +++ b/arch/mn10300/kernel/mn10300-serial.c | |||
@@ -524,7 +524,7 @@ static int mask_test_and_clear(volatile u8 *ptr, u8 mask) | |||
524 | static void mn10300_serial_receive_interrupt(struct mn10300_serial_port *port) | 524 | static void mn10300_serial_receive_interrupt(struct mn10300_serial_port *port) |
525 | { | 525 | { |
526 | struct uart_icount *icount = &port->uart.icount; | 526 | struct uart_icount *icount = &port->uart.icount; |
527 | struct tty_struct *tty = port->uart.state->port.tty; | 527 | struct tty_port *tport = &port->uart.state->port; |
528 | unsigned ix; | 528 | unsigned ix; |
529 | int count; | 529 | int count; |
530 | u8 st, ch, push, status, overrun; | 530 | u8 st, ch, push, status, overrun; |
@@ -534,10 +534,10 @@ static void mn10300_serial_receive_interrupt(struct mn10300_serial_port *port) | |||
534 | push = 0; | 534 | push = 0; |
535 | 535 | ||
536 | count = CIRC_CNT(port->rx_inp, port->rx_outp, MNSC_BUFFER_SIZE); | 536 | count = CIRC_CNT(port->rx_inp, port->rx_outp, MNSC_BUFFER_SIZE); |
537 | count = tty_buffer_request_room(tty, count); | 537 | count = tty_buffer_request_room(tport, count); |
538 | if (count == 0) { | 538 | if (count == 0) { |
539 | if (!tty->low_latency) | 539 | if (!tport->low_latency) |
540 | tty_flip_buffer_push(tty); | 540 | tty_flip_buffer_push(tport); |
541 | return; | 541 | return; |
542 | } | 542 | } |
543 | 543 | ||
@@ -545,8 +545,8 @@ try_again: | |||
545 | /* pull chars out of the hat */ | 545 | /* pull chars out of the hat */ |
546 | ix = ACCESS_ONCE(port->rx_outp); | 546 | ix = ACCESS_ONCE(port->rx_outp); |
547 | if (CIRC_CNT(port->rx_inp, ix, MNSC_BUFFER_SIZE) == 0) { | 547 | if (CIRC_CNT(port->rx_inp, ix, MNSC_BUFFER_SIZE) == 0) { |
548 | if (push && !tty->low_latency) | 548 | if (push && !tport->low_latency) |
549 | tty_flip_buffer_push(tty); | 549 | tty_flip_buffer_push(tport); |
550 | return; | 550 | return; |
551 | } | 551 | } |
552 | 552 | ||
@@ -666,19 +666,19 @@ insert: | |||
666 | else | 666 | else |
667 | flag = TTY_NORMAL; | 667 | flag = TTY_NORMAL; |
668 | 668 | ||
669 | tty_insert_flip_char(tty, ch, flag); | 669 | tty_insert_flip_char(tport, ch, flag); |
670 | } | 670 | } |
671 | 671 | ||
672 | /* overrun is special, since it's reported immediately, and doesn't | 672 | /* overrun is special, since it's reported immediately, and doesn't |
673 | * affect the current character | 673 | * affect the current character |
674 | */ | 674 | */ |
675 | if (overrun) | 675 | if (overrun) |
676 | tty_insert_flip_char(tty, 0, TTY_OVERRUN); | 676 | tty_insert_flip_char(tport, 0, TTY_OVERRUN); |
677 | 677 | ||
678 | count--; | 678 | count--; |
679 | if (count <= 0) { | 679 | if (count <= 0) { |
680 | if (!tty->low_latency) | 680 | if (!tport->low_latency) |
681 | tty_flip_buffer_push(tty); | 681 | tty_flip_buffer_push(tport); |
682 | return; | 682 | return; |
683 | } | 683 | } |
684 | 684 | ||
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index 9f2820659da2..c600f39aa453 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig | |||
@@ -21,6 +21,7 @@ config PARISC | |||
21 | select HAVE_MOD_ARCH_SPECIFIC | 21 | select HAVE_MOD_ARCH_SPECIFIC |
22 | select MODULES_USE_ELF_RELA | 22 | select MODULES_USE_ELF_RELA |
23 | select CLONE_BACKWARDS | 23 | select CLONE_BACKWARDS |
24 | select TTY # Needed for pdc_cons.c | ||
24 | 25 | ||
25 | help | 26 | help |
26 | The PA-RISC microprocessor is designed by Hewlett-Packard and used | 27 | The PA-RISC microprocessor is designed by Hewlett-Packard and used |
diff --git a/arch/parisc/kernel/pdc_cons.c b/arch/parisc/kernel/pdc_cons.c index efc5e7d30530..d5cae55195ec 100644 --- a/arch/parisc/kernel/pdc_cons.c +++ b/arch/parisc/kernel/pdc_cons.c | |||
@@ -138,23 +138,17 @@ static const struct tty_operations pdc_console_tty_ops = { | |||
138 | static void pdc_console_poll(unsigned long unused) | 138 | static void pdc_console_poll(unsigned long unused) |
139 | { | 139 | { |
140 | int data, count = 0; | 140 | int data, count = 0; |
141 | struct tty_struct *tty = tty_port_tty_get(&tty_port); | ||
142 | |||
143 | if (!tty) | ||
144 | return; | ||
145 | 141 | ||
146 | while (1) { | 142 | while (1) { |
147 | data = pdc_console_poll_key(NULL); | 143 | data = pdc_console_poll_key(NULL); |
148 | if (data == -1) | 144 | if (data == -1) |
149 | break; | 145 | break; |
150 | tty_insert_flip_char(tty, data & 0xFF, TTY_NORMAL); | 146 | tty_insert_flip_char(&tty_port, data & 0xFF, TTY_NORMAL); |
151 | count ++; | 147 | count ++; |
152 | } | 148 | } |
153 | 149 | ||
154 | if (count) | 150 | if (count) |
155 | tty_flip_buffer_push(tty); | 151 | tty_flip_buffer_push(&tty_port); |
156 | |||
157 | tty_kref_put(tty); | ||
158 | 152 | ||
159 | if (pdc_cons.flags & CON_ENABLED) | 153 | if (pdc_cons.flags & CON_ENABLED) |
160 | mod_timer(&pdc_console_timer, jiffies + PDC_CONS_POLL_DELAY); | 154 | mod_timer(&pdc_console_timer, jiffies + PDC_CONS_POLL_DELAY); |
diff --git a/arch/sparc/kernel/kgdb_32.c b/arch/sparc/kernel/kgdb_32.c index 2e424a576a36..dcf210811af4 100644 --- a/arch/sparc/kernel/kgdb_32.c +++ b/arch/sparc/kernel/kgdb_32.c | |||
@@ -5,6 +5,7 @@ | |||
5 | 5 | ||
6 | #include <linux/kgdb.h> | 6 | #include <linux/kgdb.h> |
7 | #include <linux/kdebug.h> | 7 | #include <linux/kdebug.h> |
8 | #include <linux/sched.h> | ||
8 | 9 | ||
9 | #include <asm/kdebug.h> | 10 | #include <asm/kdebug.h> |
10 | #include <asm/ptrace.h> | 11 | #include <asm/ptrace.h> |
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig index 1bb7ad4aeff4..36136e81f5d8 100644 --- a/arch/tile/Kconfig +++ b/arch/tile/Kconfig | |||
@@ -121,6 +121,7 @@ config DEBUG_COPY_FROM_USER | |||
121 | def_bool n | 121 | def_bool n |
122 | 122 | ||
123 | config HVC_TILE | 123 | config HVC_TILE |
124 | depends on TTY | ||
124 | select HVC_DRIVER | 125 | select HVC_DRIVER |
125 | def_bool y | 126 | def_bool y |
126 | 127 | ||
diff --git a/arch/um/Kconfig.common b/arch/um/Kconfig.common index 648121b037d5..bceee6623b00 100644 --- a/arch/um/Kconfig.common +++ b/arch/um/Kconfig.common | |||
@@ -12,6 +12,7 @@ config UML | |||
12 | select GENERIC_CPU_DEVICES | 12 | select GENERIC_CPU_DEVICES |
13 | select GENERIC_IO | 13 | select GENERIC_IO |
14 | select GENERIC_CLOCKEVENTS | 14 | select GENERIC_CLOCKEVENTS |
15 | select TTY # Needed for line.c | ||
15 | 16 | ||
16 | config MMU | 17 | config MMU |
17 | bool | 18 | bool |
diff --git a/arch/um/drivers/chan.h b/arch/um/drivers/chan.h index 02b5a76e98d9..78f1b8999964 100644 --- a/arch/um/drivers/chan.h +++ b/arch/um/drivers/chan.h | |||
@@ -27,8 +27,7 @@ struct chan { | |||
27 | void *data; | 27 | void *data; |
28 | }; | 28 | }; |
29 | 29 | ||
30 | extern void chan_interrupt(struct line *line, | 30 | extern void chan_interrupt(struct line *line, int irq); |
31 | struct tty_struct *tty, int irq); | ||
32 | extern int parse_chan_pair(char *str, struct line *line, int device, | 31 | extern int parse_chan_pair(char *str, struct line *line, int device, |
33 | const struct chan_opts *opts, char **error_out); | 32 | const struct chan_opts *opts, char **error_out); |
34 | extern int write_chan(struct chan *chan, const char *buf, int len, | 33 | extern int write_chan(struct chan *chan, const char *buf, int len, |
diff --git a/arch/um/drivers/chan_kern.c b/arch/um/drivers/chan_kern.c index e9a0abc6a32f..15c553c239a1 100644 --- a/arch/um/drivers/chan_kern.c +++ b/arch/um/drivers/chan_kern.c | |||
@@ -81,12 +81,6 @@ static const struct chan_ops not_configged_ops = { | |||
81 | }; | 81 | }; |
82 | #endif /* CONFIG_NOCONFIG_CHAN */ | 82 | #endif /* CONFIG_NOCONFIG_CHAN */ |
83 | 83 | ||
84 | static void tty_receive_char(struct tty_struct *tty, char ch) | ||
85 | { | ||
86 | if (tty) | ||
87 | tty_insert_flip_char(tty, ch, TTY_NORMAL); | ||
88 | } | ||
89 | |||
90 | static int open_one_chan(struct chan *chan) | 84 | static int open_one_chan(struct chan *chan) |
91 | { | 85 | { |
92 | int fd, err; | 86 | int fd, err; |
@@ -137,11 +131,9 @@ void chan_enable_winch(struct chan *chan, struct tty_struct *tty) | |||
137 | static void line_timer_cb(struct work_struct *work) | 131 | static void line_timer_cb(struct work_struct *work) |
138 | { | 132 | { |
139 | struct line *line = container_of(work, struct line, task.work); | 133 | struct line *line = container_of(work, struct line, task.work); |
140 | struct tty_struct *tty = tty_port_tty_get(&line->port); | ||
141 | 134 | ||
142 | if (!line->throttled) | 135 | if (!line->throttled) |
143 | chan_interrupt(line, tty, line->driver->read_irq); | 136 | chan_interrupt(line, line->driver->read_irq); |
144 | tty_kref_put(tty); | ||
145 | } | 137 | } |
146 | 138 | ||
147 | int enable_chan(struct line *line) | 139 | int enable_chan(struct line *line) |
@@ -552,8 +544,9 @@ int parse_chan_pair(char *str, struct line *line, int device, | |||
552 | return 0; | 544 | return 0; |
553 | } | 545 | } |
554 | 546 | ||
555 | void chan_interrupt(struct line *line, struct tty_struct *tty, int irq) | 547 | void chan_interrupt(struct line *line, int irq) |
556 | { | 548 | { |
549 | struct tty_port *port = &line->port; | ||
557 | struct chan *chan = line->chan_in; | 550 | struct chan *chan = line->chan_in; |
558 | int err; | 551 | int err; |
559 | char c; | 552 | char c; |
@@ -562,21 +555,24 @@ void chan_interrupt(struct line *line, struct tty_struct *tty, int irq) | |||
562 | goto out; | 555 | goto out; |
563 | 556 | ||
564 | do { | 557 | do { |
565 | if (tty && !tty_buffer_request_room(tty, 1)) { | 558 | if (!tty_buffer_request_room(port, 1)) { |
566 | schedule_delayed_work(&line->task, 1); | 559 | schedule_delayed_work(&line->task, 1); |
567 | goto out; | 560 | goto out; |
568 | } | 561 | } |
569 | err = chan->ops->read(chan->fd, &c, chan->data); | 562 | err = chan->ops->read(chan->fd, &c, chan->data); |
570 | if (err > 0) | 563 | if (err > 0) |
571 | tty_receive_char(tty, c); | 564 | tty_insert_flip_char(port, c, TTY_NORMAL); |
572 | } while (err > 0); | 565 | } while (err > 0); |
573 | 566 | ||
574 | if (err == 0) | 567 | if (err == 0) |
575 | reactivate_fd(chan->fd, irq); | 568 | reactivate_fd(chan->fd, irq); |
576 | if (err == -EIO) { | 569 | if (err == -EIO) { |
577 | if (chan->primary) { | 570 | if (chan->primary) { |
578 | if (tty != NULL) | 571 | struct tty_struct *tty = tty_port_tty_get(&line->port); |
572 | if (tty != NULL) { | ||
579 | tty_hangup(tty); | 573 | tty_hangup(tty); |
574 | tty_kref_put(tty); | ||
575 | } | ||
580 | if (line->chan_out != chan) | 576 | if (line->chan_out != chan) |
581 | close_one_chan(line->chan_out, 1); | 577 | close_one_chan(line->chan_out, 1); |
582 | } | 578 | } |
@@ -585,6 +581,5 @@ void chan_interrupt(struct line *line, struct tty_struct *tty, int irq) | |||
585 | return; | 581 | return; |
586 | } | 582 | } |
587 | out: | 583 | out: |
588 | if (tty) | 584 | tty_flip_buffer_push(port); |
589 | tty_flip_buffer_push(tty); | ||
590 | } | 585 | } |
diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c index 9ffc28bd4b7a..f1b38571f94e 100644 --- a/arch/um/drivers/line.c +++ b/arch/um/drivers/line.c | |||
@@ -19,11 +19,10 @@ static irqreturn_t line_interrupt(int irq, void *data) | |||
19 | { | 19 | { |
20 | struct chan *chan = data; | 20 | struct chan *chan = data; |
21 | struct line *line = chan->line; | 21 | struct line *line = chan->line; |
22 | struct tty_struct *tty = tty_port_tty_get(&line->port); | ||
23 | 22 | ||
24 | if (line) | 23 | if (line) |
25 | chan_interrupt(line, tty, irq); | 24 | chan_interrupt(line, irq); |
26 | tty_kref_put(tty); | 25 | |
27 | return IRQ_HANDLED; | 26 | return IRQ_HANDLED; |
28 | } | 27 | } |
29 | 28 | ||
@@ -234,7 +233,7 @@ void line_unthrottle(struct tty_struct *tty) | |||
234 | struct line *line = tty->driver_data; | 233 | struct line *line = tty->driver_data; |
235 | 234 | ||
236 | line->throttled = 0; | 235 | line->throttled = 0; |
237 | chan_interrupt(line, tty, line->driver->read_irq); | 236 | chan_interrupt(line, line->driver->read_irq); |
238 | 237 | ||
239 | /* | 238 | /* |
240 | * Maybe there is enough stuff pending that calling the interrupt | 239 | * Maybe there is enough stuff pending that calling the interrupt |
diff --git a/arch/x86/lguest/Kconfig b/arch/x86/lguest/Kconfig index 7872a3330fb5..29043d2048a0 100644 --- a/arch/x86/lguest/Kconfig +++ b/arch/x86/lguest/Kconfig | |||
@@ -2,6 +2,7 @@ config LGUEST_GUEST | |||
2 | bool "Lguest guest support" | 2 | bool "Lguest guest support" |
3 | select PARAVIRT | 3 | select PARAVIRT |
4 | depends on X86_32 | 4 | depends on X86_32 |
5 | select TTY | ||
5 | select VIRTUALIZATION | 6 | select VIRTUALIZATION |
6 | select VIRTIO | 7 | select VIRTIO |
7 | select VIRTIO_CONSOLE | 8 | select VIRTIO_CONSOLE |
diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig index 5aab1acabf1c..ad64c73b8675 100644 --- a/arch/xtensa/Kconfig +++ b/arch/xtensa/Kconfig | |||
@@ -132,6 +132,7 @@ choice | |||
132 | 132 | ||
133 | config XTENSA_PLATFORM_ISS | 133 | config XTENSA_PLATFORM_ISS |
134 | bool "ISS" | 134 | bool "ISS" |
135 | depends on TTY | ||
135 | select XTENSA_CALIBRATE_CCOUNT | 136 | select XTENSA_CALIBRATE_CCOUNT |
136 | select SERIAL_CONSOLE | 137 | select SERIAL_CONSOLE |
137 | select XTENSA_ISS_NETWORK | 138 | select XTENSA_ISS_NETWORK |
diff --git a/arch/xtensa/platforms/iss/console.c b/arch/xtensa/platforms/iss/console.c index 8207a119eee9..da9866f7fecf 100644 --- a/arch/xtensa/platforms/iss/console.c +++ b/arch/xtensa/platforms/iss/console.c | |||
@@ -58,7 +58,8 @@ static int rs_open(struct tty_struct *tty, struct file * filp) | |||
58 | tty->port = &serial_port; | 58 | tty->port = &serial_port; |
59 | spin_lock(&timer_lock); | 59 | spin_lock(&timer_lock); |
60 | if (tty->count == 1) { | 60 | if (tty->count == 1) { |
61 | setup_timer(&serial_timer, rs_poll, (unsigned long)tty); | 61 | setup_timer(&serial_timer, rs_poll, |
62 | (unsigned long)&serial_port); | ||
62 | mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE); | 63 | mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE); |
63 | } | 64 | } |
64 | spin_unlock(&timer_lock); | 65 | spin_unlock(&timer_lock); |
@@ -97,8 +98,7 @@ static int rs_write(struct tty_struct * tty, | |||
97 | 98 | ||
98 | static void rs_poll(unsigned long priv) | 99 | static void rs_poll(unsigned long priv) |
99 | { | 100 | { |
100 | struct tty_struct* tty = (struct tty_struct*) priv; | 101 | struct tty_port *port = (struct tty_port *)priv; |
101 | |||
102 | struct timeval tv = { .tv_sec = 0, .tv_usec = 0 }; | 102 | struct timeval tv = { .tv_sec = 0, .tv_usec = 0 }; |
103 | int i = 0; | 103 | int i = 0; |
104 | unsigned char c; | 104 | unsigned char c; |
@@ -107,12 +107,12 @@ static void rs_poll(unsigned long priv) | |||
107 | 107 | ||
108 | while (__simc(SYS_select_one, 0, XTISS_SELECT_ONE_READ, (int)&tv,0,0)){ | 108 | while (__simc(SYS_select_one, 0, XTISS_SELECT_ONE_READ, (int)&tv,0,0)){ |
109 | __simc (SYS_read, 0, (unsigned long)&c, 1, 0, 0); | 109 | __simc (SYS_read, 0, (unsigned long)&c, 1, 0, 0); |
110 | tty_insert_flip_char(tty, c, TTY_NORMAL); | 110 | tty_insert_flip_char(port, c, TTY_NORMAL); |
111 | i++; | 111 | i++; |
112 | } | 112 | } |
113 | 113 | ||
114 | if (i) | 114 | if (i) |
115 | tty_flip_buffer_push(tty); | 115 | tty_flip_buffer_push(port); |
116 | 116 | ||
117 | 117 | ||
118 | mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE); | 118 | mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE); |