Commit 6816383a09b5be8d35f14f4c25dedb64498e4959

Authored by Paul Gortmaker
Committed by Greg Kroah-Hartman
1 parent 5a22e30def

tty: sparc: rename drivers/tty/serial/suncore.h -> include/linux/sunserialcore.h

There are multiple users of this file from different source
paths now, and rather than have ../ paths in include statements,
just move the file to the linux header dir.

Suggested-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Showing 9 changed files with 42 additions and 45 deletions Inline Diff

1 1
2 2
3 List of maintainers and how to submit kernel changes 3 List of maintainers and how to submit kernel changes
4 4
5 Please try to follow the guidelines below. This will make things 5 Please try to follow the guidelines below. This will make things
6 easier on the maintainers. Not all of these guidelines matter for every 6 easier on the maintainers. Not all of these guidelines matter for every
7 trivial patch so apply some common sense. 7 trivial patch so apply some common sense.
8 8
9 1. Always _test_ your changes, however small, on at least 4 or 9 1. Always _test_ your changes, however small, on at least 4 or
10 5 people, preferably many more. 10 5 people, preferably many more.
11 11
12 2. Try to release a few ALPHA test versions to the net. Announce 12 2. Try to release a few ALPHA test versions to the net. Announce
13 them onto the kernel channel and await results. This is especially 13 them onto the kernel channel and await results. This is especially
14 important for device drivers, because often that's the only way 14 important for device drivers, because often that's the only way
15 you will find things like the fact version 3 firmware needs 15 you will find things like the fact version 3 firmware needs
16 a magic fix you didn't know about, or some clown changed the 16 a magic fix you didn't know about, or some clown changed the
17 chips on a board and not its name. (Don't laugh! Look at the 17 chips on a board and not its name. (Don't laugh! Look at the
18 SMC etherpower for that.) 18 SMC etherpower for that.)
19 19
20 3. Make sure your changes compile correctly in multiple 20 3. Make sure your changes compile correctly in multiple
21 configurations. In particular check that changes work both as a 21 configurations. In particular check that changes work both as a
22 module and built into the kernel. 22 module and built into the kernel.
23 23
24 4. When you are happy with a change make it generally available for 24 4. When you are happy with a change make it generally available for
25 testing and await feedback. 25 testing and await feedback.
26 26
27 5. Make a patch available to the relevant maintainer in the list. Use 27 5. Make a patch available to the relevant maintainer in the list. Use
28 'diff -u' to make the patch easy to merge. Be prepared to get your 28 'diff -u' to make the patch easy to merge. Be prepared to get your
29 changes sent back with seemingly silly requests about formatting 29 changes sent back with seemingly silly requests about formatting
30 and variable names. These aren't as silly as they seem. One 30 and variable names. These aren't as silly as they seem. One
31 job the maintainers (and especially Linus) do is to keep things 31 job the maintainers (and especially Linus) do is to keep things
32 looking the same. Sometimes this means that the clever hack in 32 looking the same. Sometimes this means that the clever hack in
33 your driver to get around a problem actually needs to become a 33 your driver to get around a problem actually needs to become a
34 generalized kernel feature ready for next time. 34 generalized kernel feature ready for next time.
35 35
36 PLEASE check your patch with the automated style checker 36 PLEASE check your patch with the automated style checker
37 (scripts/checkpatch.pl) to catch trival style violations. 37 (scripts/checkpatch.pl) to catch trival style violations.
38 See Documentation/CodingStyle for guidance here. 38 See Documentation/CodingStyle for guidance here.
39 39
40 PLEASE CC: the maintainers and mailing lists that are generated 40 PLEASE CC: the maintainers and mailing lists that are generated
41 by scripts/get_maintainer.pl. The results returned by the 41 by scripts/get_maintainer.pl. The results returned by the
42 script will be best if you have git installed and are making 42 script will be best if you have git installed and are making
43 your changes in a branch derived from Linus' latest git tree. 43 your changes in a branch derived from Linus' latest git tree.
44 See Documentation/SubmittingPatches for details. 44 See Documentation/SubmittingPatches for details.
45 45
46 PLEASE try to include any credit lines you want added with the 46 PLEASE try to include any credit lines you want added with the
47 patch. It avoids people being missed off by mistake and makes 47 patch. It avoids people being missed off by mistake and makes
48 it easier to know who wants adding and who doesn't. 48 it easier to know who wants adding and who doesn't.
49 49
50 PLEASE document known bugs. If it doesn't work for everything 50 PLEASE document known bugs. If it doesn't work for everything
51 or does something very odd once a month document it. 51 or does something very odd once a month document it.
52 52
53 PLEASE remember that submissions must be made under the terms 53 PLEASE remember that submissions must be made under the terms
54 of the OSDL certificate of contribution and should include a 54 of the OSDL certificate of contribution and should include a
55 Signed-off-by: line. The current version of this "Developer's 55 Signed-off-by: line. The current version of this "Developer's
56 Certificate of Origin" (DCO) is listed in the file 56 Certificate of Origin" (DCO) is listed in the file
57 Documentation/SubmittingPatches. 57 Documentation/SubmittingPatches.
58 58
59 6. Make sure you have the right to send any changes you make. If you 59 6. Make sure you have the right to send any changes you make. If you
60 do changes at work you may find your employer owns the patch 60 do changes at work you may find your employer owns the patch
61 not you. 61 not you.
62 62
63 7. When sending security related changes or reports to a maintainer 63 7. When sending security related changes or reports to a maintainer
64 please Cc: security@kernel.org, especially if the maintainer 64 please Cc: security@kernel.org, especially if the maintainer
65 does not respond. 65 does not respond.
66 66
67 8. Happy hacking. 67 8. Happy hacking.
68 68
69 Descriptions of section entries: 69 Descriptions of section entries:
70 70
71 P: Person (obsolete) 71 P: Person (obsolete)
72 M: Mail patches to: FullName <address@domain> 72 M: Mail patches to: FullName <address@domain>
73 L: Mailing list that is relevant to this area 73 L: Mailing list that is relevant to this area
74 W: Web-page with status/info 74 W: Web-page with status/info
75 Q: Patchwork web based patch tracking system site 75 Q: Patchwork web based patch tracking system site
76 T: SCM tree type and location. Type is one of: git, hg, quilt, stgit, topgit. 76 T: SCM tree type and location. Type is one of: git, hg, quilt, stgit, topgit.
77 S: Status, one of the following: 77 S: Status, one of the following:
78 Supported: Someone is actually paid to look after this. 78 Supported: Someone is actually paid to look after this.
79 Maintained: Someone actually looks after it. 79 Maintained: Someone actually looks after it.
80 Odd Fixes: It has a maintainer but they don't have time to do 80 Odd Fixes: It has a maintainer but they don't have time to do
81 much other than throw the odd patch in. See below.. 81 much other than throw the odd patch in. See below..
82 Orphan: No current maintainer [but maybe you could take the 82 Orphan: No current maintainer [but maybe you could take the
83 role as you write your new code]. 83 role as you write your new code].
84 Obsolete: Old code. Something tagged obsolete generally means 84 Obsolete: Old code. Something tagged obsolete generally means
85 it has been replaced by a better system and you 85 it has been replaced by a better system and you
86 should be using that. 86 should be using that.
87 F: Files and directories with wildcard patterns. 87 F: Files and directories with wildcard patterns.
88 A trailing slash includes all files and subdirectory files. 88 A trailing slash includes all files and subdirectory files.
89 F: drivers/net/ all files in and below drivers/net 89 F: drivers/net/ all files in and below drivers/net
90 F: drivers/net/* all files in drivers/net, but not below 90 F: drivers/net/* all files in drivers/net, but not below
91 F: */net/* all files in "any top level directory"/net 91 F: */net/* all files in "any top level directory"/net
92 One pattern per line. Multiple F: lines acceptable. 92 One pattern per line. Multiple F: lines acceptable.
93 X: Files and directories that are NOT maintained, same rules as F: 93 X: Files and directories that are NOT maintained, same rules as F:
94 Files exclusions are tested before file matches. 94 Files exclusions are tested before file matches.
95 Can be useful for excluding a specific subdirectory, for instance: 95 Can be useful for excluding a specific subdirectory, for instance:
96 F: net/ 96 F: net/
97 X: net/ipv6/ 97 X: net/ipv6/
98 matches all files in and below net excluding net/ipv6/ 98 matches all files in and below net excluding net/ipv6/
99 K: Keyword perl extended regex pattern to match content in a 99 K: Keyword perl extended regex pattern to match content in a
100 patch or file. For instance: 100 patch or file. For instance:
101 K: of_get_profile 101 K: of_get_profile
102 matches patches or files that contain "of_get_profile" 102 matches patches or files that contain "of_get_profile"
103 K: \b(printk|pr_(info|err))\b 103 K: \b(printk|pr_(info|err))\b
104 matches patches or files that contain one or more of the words 104 matches patches or files that contain one or more of the words
105 printk, pr_info or pr_err 105 printk, pr_info or pr_err
106 One regex pattern per line. Multiple K: lines acceptable. 106 One regex pattern per line. Multiple K: lines acceptable.
107 107
108 Note: For the hard of thinking, this list is meant to remain in alphabetical 108 Note: For the hard of thinking, this list is meant to remain in alphabetical
109 order. If you could add yourselves to it in alphabetical order that would be 109 order. If you could add yourselves to it in alphabetical order that would be
110 so much easier [Ed] 110 so much easier [Ed]
111 111
112 Maintainers List (try to look for most precise areas first) 112 Maintainers List (try to look for most precise areas first)
113 113
114 ----------------------------------- 114 -----------------------------------
115 115
116 3C505 NETWORK DRIVER 116 3C505 NETWORK DRIVER
117 M: Philip Blundell <philb@gnu.org> 117 M: Philip Blundell <philb@gnu.org>
118 L: netdev@vger.kernel.org 118 L: netdev@vger.kernel.org
119 S: Maintained 119 S: Maintained
120 F: drivers/net/ethernet/i825xx/3c505* 120 F: drivers/net/ethernet/i825xx/3c505*
121 121
122 3C59X NETWORK DRIVER 122 3C59X NETWORK DRIVER
123 M: Steffen Klassert <klassert@mathematik.tu-chemnitz.de> 123 M: Steffen Klassert <klassert@mathematik.tu-chemnitz.de>
124 L: netdev@vger.kernel.org 124 L: netdev@vger.kernel.org
125 S: Maintained 125 S: Maintained
126 F: Documentation/networking/vortex.txt 126 F: Documentation/networking/vortex.txt
127 F: drivers/net/ethernet/3com/3c59x.c 127 F: drivers/net/ethernet/3com/3c59x.c
128 128
129 3CR990 NETWORK DRIVER 129 3CR990 NETWORK DRIVER
130 M: David Dillow <dave@thedillows.org> 130 M: David Dillow <dave@thedillows.org>
131 L: netdev@vger.kernel.org 131 L: netdev@vger.kernel.org
132 S: Maintained 132 S: Maintained
133 F: drivers/net/ethernet/3com/typhoon* 133 F: drivers/net/ethernet/3com/typhoon*
134 134
135 3WARE SAS/SATA-RAID SCSI DRIVERS (3W-XXXX, 3W-9XXX, 3W-SAS) 135 3WARE SAS/SATA-RAID SCSI DRIVERS (3W-XXXX, 3W-9XXX, 3W-SAS)
136 M: Adam Radford <linuxraid@lsi.com> 136 M: Adam Radford <linuxraid@lsi.com>
137 L: linux-scsi@vger.kernel.org 137 L: linux-scsi@vger.kernel.org
138 W: http://www.lsi.com 138 W: http://www.lsi.com
139 S: Supported 139 S: Supported
140 F: drivers/scsi/3w-* 140 F: drivers/scsi/3w-*
141 141
142 53C700 AND 53C700-66 SCSI DRIVER 142 53C700 AND 53C700-66 SCSI DRIVER
143 M: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com> 143 M: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
144 L: linux-scsi@vger.kernel.org 144 L: linux-scsi@vger.kernel.org
145 S: Maintained 145 S: Maintained
146 F: drivers/scsi/53c700* 146 F: drivers/scsi/53c700*
147 147
148 6PACK NETWORK DRIVER FOR AX.25 148 6PACK NETWORK DRIVER FOR AX.25
149 M: Andreas Koensgen <ajk@comnets.uni-bremen.de> 149 M: Andreas Koensgen <ajk@comnets.uni-bremen.de>
150 L: linux-hams@vger.kernel.org 150 L: linux-hams@vger.kernel.org
151 S: Maintained 151 S: Maintained
152 F: drivers/net/hamradio/6pack.c 152 F: drivers/net/hamradio/6pack.c
153 153
154 8169 10/100/1000 GIGABIT ETHERNET DRIVER 154 8169 10/100/1000 GIGABIT ETHERNET DRIVER
155 M: Realtek linux nic maintainers <nic_swsd@realtek.com> 155 M: Realtek linux nic maintainers <nic_swsd@realtek.com>
156 M: Francois Romieu <romieu@fr.zoreil.com> 156 M: Francois Romieu <romieu@fr.zoreil.com>
157 L: netdev@vger.kernel.org 157 L: netdev@vger.kernel.org
158 S: Maintained 158 S: Maintained
159 F: drivers/net/ethernet/realtek/r8169.c 159 F: drivers/net/ethernet/realtek/r8169.c
160 160
161 8250/16?50 (AND CLONE UARTS) SERIAL DRIVER 161 8250/16?50 (AND CLONE UARTS) SERIAL DRIVER
162 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> 162 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
163 L: linux-serial@vger.kernel.org 163 L: linux-serial@vger.kernel.org
164 W: http://serial.sourceforge.net 164 W: http://serial.sourceforge.net
165 S: Maintained 165 S: Maintained
166 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6.git 166 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6.git
167 F: drivers/tty/serial/8250* 167 F: drivers/tty/serial/8250*
168 F: include/linux/serial_8250.h 168 F: include/linux/serial_8250.h
169 169
170 8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.] 170 8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
171 L: netdev@vger.kernel.org 171 L: netdev@vger.kernel.org
172 S: Orphan / Obsolete 172 S: Orphan / Obsolete
173 F: drivers/net/ethernet/8390/ 173 F: drivers/net/ethernet/8390/
174 174
175 9P FILE SYSTEM 175 9P FILE SYSTEM
176 M: Eric Van Hensbergen <ericvh@gmail.com> 176 M: Eric Van Hensbergen <ericvh@gmail.com>
177 M: Ron Minnich <rminnich@sandia.gov> 177 M: Ron Minnich <rminnich@sandia.gov>
178 M: Latchesar Ionkov <lucho@ionkov.net> 178 M: Latchesar Ionkov <lucho@ionkov.net>
179 L: v9fs-developer@lists.sourceforge.net 179 L: v9fs-developer@lists.sourceforge.net
180 W: http://swik.net/v9fs 180 W: http://swik.net/v9fs
181 Q: http://patchwork.kernel.org/project/v9fs-devel/list/ 181 Q: http://patchwork.kernel.org/project/v9fs-devel/list/
182 T: git git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs.git 182 T: git git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs.git
183 S: Maintained 183 S: Maintained
184 F: Documentation/filesystems/9p.txt 184 F: Documentation/filesystems/9p.txt
185 F: fs/9p/ 185 F: fs/9p/
186 186
187 AACRAID SCSI RAID DRIVER 187 AACRAID SCSI RAID DRIVER
188 M: Adaptec OEM Raid Solutions <aacraid@adaptec.com> 188 M: Adaptec OEM Raid Solutions <aacraid@adaptec.com>
189 L: linux-scsi@vger.kernel.org 189 L: linux-scsi@vger.kernel.org
190 W: http://www.adaptec.com/ 190 W: http://www.adaptec.com/
191 S: Supported 191 S: Supported
192 F: Documentation/scsi/aacraid.txt 192 F: Documentation/scsi/aacraid.txt
193 F: drivers/scsi/aacraid/ 193 F: drivers/scsi/aacraid/
194 194
195 ABIT UGURU 1,2 HARDWARE MONITOR DRIVER 195 ABIT UGURU 1,2 HARDWARE MONITOR DRIVER
196 M: Hans de Goede <hdegoede@redhat.com> 196 M: Hans de Goede <hdegoede@redhat.com>
197 L: lm-sensors@lm-sensors.org 197 L: lm-sensors@lm-sensors.org
198 S: Maintained 198 S: Maintained
199 F: drivers/hwmon/abituguru.c 199 F: drivers/hwmon/abituguru.c
200 200
201 ABIT UGURU 3 HARDWARE MONITOR DRIVER 201 ABIT UGURU 3 HARDWARE MONITOR DRIVER
202 M: Alistair John Strachan <alistair@devzero.co.uk> 202 M: Alistair John Strachan <alistair@devzero.co.uk>
203 L: lm-sensors@lm-sensors.org 203 L: lm-sensors@lm-sensors.org
204 S: Maintained 204 S: Maintained
205 F: drivers/hwmon/abituguru3.c 205 F: drivers/hwmon/abituguru3.c
206 206
207 ACENIC DRIVER 207 ACENIC DRIVER
208 M: Jes Sorensen <jes@trained-monkey.org> 208 M: Jes Sorensen <jes@trained-monkey.org>
209 L: linux-acenic@sunsite.dk 209 L: linux-acenic@sunsite.dk
210 S: Maintained 210 S: Maintained
211 F: drivers/net/ethernet/alteon/acenic* 211 F: drivers/net/ethernet/alteon/acenic*
212 212
213 ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER 213 ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER
214 M: Peter Feuerer <peter@piie.net> 214 M: Peter Feuerer <peter@piie.net>
215 L: platform-driver-x86@vger.kernel.org 215 L: platform-driver-x86@vger.kernel.org
216 W: http://piie.net/?section=acerhdf 216 W: http://piie.net/?section=acerhdf
217 S: Maintained 217 S: Maintained
218 F: drivers/platform/x86/acerhdf.c 218 F: drivers/platform/x86/acerhdf.c
219 219
220 ACER WMI LAPTOP EXTRAS 220 ACER WMI LAPTOP EXTRAS
221 M: Joey Lee <jlee@novell.com> 221 M: Joey Lee <jlee@novell.com>
222 L: platform-driver-x86@vger.kernel.org 222 L: platform-driver-x86@vger.kernel.org
223 S: Maintained 223 S: Maintained
224 F: drivers/platform/x86/acer-wmi.c 224 F: drivers/platform/x86/acer-wmi.c
225 225
226 ACPI 226 ACPI
227 M: Len Brown <lenb@kernel.org> 227 M: Len Brown <lenb@kernel.org>
228 L: linux-acpi@vger.kernel.org 228 L: linux-acpi@vger.kernel.org
229 W: http://www.lesswatts.org/projects/acpi/ 229 W: http://www.lesswatts.org/projects/acpi/
230 Q: http://patchwork.kernel.org/project/linux-acpi/list/ 230 Q: http://patchwork.kernel.org/project/linux-acpi/list/
231 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git 231 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
232 S: Supported 232 S: Supported
233 F: drivers/acpi/ 233 F: drivers/acpi/
234 F: drivers/pnp/pnpacpi/ 234 F: drivers/pnp/pnpacpi/
235 F: include/linux/acpi.h 235 F: include/linux/acpi.h
236 F: include/acpi/ 236 F: include/acpi/
237 237
238 ACPI FAN DRIVER 238 ACPI FAN DRIVER
239 M: Zhang Rui <rui.zhang@intel.com> 239 M: Zhang Rui <rui.zhang@intel.com>
240 L: linux-acpi@vger.kernel.org 240 L: linux-acpi@vger.kernel.org
241 W: http://www.lesswatts.org/projects/acpi/ 241 W: http://www.lesswatts.org/projects/acpi/
242 S: Supported 242 S: Supported
243 F: drivers/acpi/fan.c 243 F: drivers/acpi/fan.c
244 244
245 ACPI PROCESSOR AGGREGATOR DRIVER 245 ACPI PROCESSOR AGGREGATOR DRIVER
246 M: Shaohua Li <shaohua.li@intel.com> 246 M: Shaohua Li <shaohua.li@intel.com>
247 L: linux-acpi@vger.kernel.org 247 L: linux-acpi@vger.kernel.org
248 W: http://www.lesswatts.org/projects/acpi/ 248 W: http://www.lesswatts.org/projects/acpi/
249 S: Supported 249 S: Supported
250 F: drivers/acpi/acpi_pad.c 250 F: drivers/acpi/acpi_pad.c
251 251
252 ACPI THERMAL DRIVER 252 ACPI THERMAL DRIVER
253 M: Zhang Rui <rui.zhang@intel.com> 253 M: Zhang Rui <rui.zhang@intel.com>
254 L: linux-acpi@vger.kernel.org 254 L: linux-acpi@vger.kernel.org
255 W: http://www.lesswatts.org/projects/acpi/ 255 W: http://www.lesswatts.org/projects/acpi/
256 S: Supported 256 S: Supported
257 F: drivers/acpi/*thermal* 257 F: drivers/acpi/*thermal*
258 258
259 ACPI VIDEO DRIVER 259 ACPI VIDEO DRIVER
260 M: Zhang Rui <rui.zhang@intel.com> 260 M: Zhang Rui <rui.zhang@intel.com>
261 L: linux-acpi@vger.kernel.org 261 L: linux-acpi@vger.kernel.org
262 W: http://www.lesswatts.org/projects/acpi/ 262 W: http://www.lesswatts.org/projects/acpi/
263 S: Supported 263 S: Supported
264 F: drivers/acpi/video.c 264 F: drivers/acpi/video.c
265 265
266 ACPI WMI DRIVER 266 ACPI WMI DRIVER
267 L: platform-driver-x86@vger.kernel.org 267 L: platform-driver-x86@vger.kernel.org
268 S: Orphan 268 S: Orphan
269 F: drivers/platform/x86/wmi.c 269 F: drivers/platform/x86/wmi.c
270 270
271 AD1889 ALSA SOUND DRIVER 271 AD1889 ALSA SOUND DRIVER
272 M: Kyle McMartin <kyle@mcmartin.ca> 272 M: Kyle McMartin <kyle@mcmartin.ca>
273 M: Thibaut Varene <T-Bone@parisc-linux.org> 273 M: Thibaut Varene <T-Bone@parisc-linux.org>
274 W: http://wiki.parisc-linux.org/AD1889 274 W: http://wiki.parisc-linux.org/AD1889
275 L: linux-parisc@vger.kernel.org 275 L: linux-parisc@vger.kernel.org
276 S: Maintained 276 S: Maintained
277 F: sound/pci/ad1889.* 277 F: sound/pci/ad1889.*
278 278
279 AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER 279 AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER
280 M: Michael Hennerich <michael.hennerich@analog.com> 280 M: Michael Hennerich <michael.hennerich@analog.com>
281 L: device-drivers-devel@blackfin.uclinux.org 281 L: device-drivers-devel@blackfin.uclinux.org
282 W: http://wiki.analog.com/AD5254 282 W: http://wiki.analog.com/AD5254
283 S: Supported 283 S: Supported
284 F: drivers/misc/ad525x_dpot.c 284 F: drivers/misc/ad525x_dpot.c
285 285
286 AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821) 286 AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821)
287 M: Michael Hennerich <michael.hennerich@analog.com> 287 M: Michael Hennerich <michael.hennerich@analog.com>
288 L: device-drivers-devel@blackfin.uclinux.org 288 L: device-drivers-devel@blackfin.uclinux.org
289 W: http://wiki.analog.com/AD5398 289 W: http://wiki.analog.com/AD5398
290 S: Supported 290 S: Supported
291 F: drivers/regulator/ad5398.c 291 F: drivers/regulator/ad5398.c
292 292
293 AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A) 293 AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A)
294 M: Michael Hennerich <michael.hennerich@analog.com> 294 M: Michael Hennerich <michael.hennerich@analog.com>
295 L: device-drivers-devel@blackfin.uclinux.org 295 L: device-drivers-devel@blackfin.uclinux.org
296 W: http://wiki.analog.com/AD7142 296 W: http://wiki.analog.com/AD7142
297 S: Supported 297 S: Supported
298 F: drivers/input/misc/ad714x.c 298 F: drivers/input/misc/ad714x.c
299 299
300 AD7877 TOUCHSCREEN DRIVER 300 AD7877 TOUCHSCREEN DRIVER
301 M: Michael Hennerich <michael.hennerich@analog.com> 301 M: Michael Hennerich <michael.hennerich@analog.com>
302 L: device-drivers-devel@blackfin.uclinux.org 302 L: device-drivers-devel@blackfin.uclinux.org
303 W: http://wiki.analog.com/AD7877 303 W: http://wiki.analog.com/AD7877
304 S: Supported 304 S: Supported
305 F: drivers/input/touchscreen/ad7877.c 305 F: drivers/input/touchscreen/ad7877.c
306 306
307 AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889) 307 AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889)
308 M: Michael Hennerich <michael.hennerich@analog.com> 308 M: Michael Hennerich <michael.hennerich@analog.com>
309 L: device-drivers-devel@blackfin.uclinux.org 309 L: device-drivers-devel@blackfin.uclinux.org
310 W: http://wiki.analog.com/AD7879 310 W: http://wiki.analog.com/AD7879
311 S: Supported 311 S: Supported
312 F: drivers/input/touchscreen/ad7879.c 312 F: drivers/input/touchscreen/ad7879.c
313 313
314 ADDRESS SPACE LAYOUT RANDOMIZATION (ASLR) 314 ADDRESS SPACE LAYOUT RANDOMIZATION (ASLR)
315 M: Jiri Kosina <jkosina@suse.cz> 315 M: Jiri Kosina <jkosina@suse.cz>
316 S: Maintained 316 S: Maintained
317 317
318 ADM1025 HARDWARE MONITOR DRIVER 318 ADM1025 HARDWARE MONITOR DRIVER
319 M: Jean Delvare <khali@linux-fr.org> 319 M: Jean Delvare <khali@linux-fr.org>
320 L: lm-sensors@lm-sensors.org 320 L: lm-sensors@lm-sensors.org
321 S: Maintained 321 S: Maintained
322 F: Documentation/hwmon/adm1025 322 F: Documentation/hwmon/adm1025
323 F: drivers/hwmon/adm1025.c 323 F: drivers/hwmon/adm1025.c
324 324
325 ADM1029 HARDWARE MONITOR DRIVER 325 ADM1029 HARDWARE MONITOR DRIVER
326 M: Corentin Labbe <corentin.labbe@geomatys.fr> 326 M: Corentin Labbe <corentin.labbe@geomatys.fr>
327 L: lm-sensors@lm-sensors.org 327 L: lm-sensors@lm-sensors.org
328 S: Maintained 328 S: Maintained
329 F: drivers/hwmon/adm1029.c 329 F: drivers/hwmon/adm1029.c
330 330
331 ADM8211 WIRELESS DRIVER 331 ADM8211 WIRELESS DRIVER
332 L: linux-wireless@vger.kernel.org 332 L: linux-wireless@vger.kernel.org
333 W: http://linuxwireless.org/ 333 W: http://linuxwireless.org/
334 S: Orphan 334 S: Orphan
335 F: drivers/net/wireless/adm8211.* 335 F: drivers/net/wireless/adm8211.*
336 336
337 ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501) 337 ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501)
338 M: Michael Hennerich <michael.hennerich@analog.com> 338 M: Michael Hennerich <michael.hennerich@analog.com>
339 L: device-drivers-devel@blackfin.uclinux.org 339 L: device-drivers-devel@blackfin.uclinux.org
340 W: http://wiki.analog.com/ADP5520 340 W: http://wiki.analog.com/ADP5520
341 S: Supported 341 S: Supported
342 F: drivers/mfd/adp5520.c 342 F: drivers/mfd/adp5520.c
343 F: drivers/video/backlight/adp5520_bl.c 343 F: drivers/video/backlight/adp5520_bl.c
344 F: drivers/leds/leds-adp5520.c 344 F: drivers/leds/leds-adp5520.c
345 F: drivers/gpio/gpio-adp5520.c 345 F: drivers/gpio/gpio-adp5520.c
346 F: drivers/input/keyboard/adp5520-keys.c 346 F: drivers/input/keyboard/adp5520-keys.c
347 347
348 ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587) 348 ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587)
349 M: Michael Hennerich <michael.hennerich@analog.com> 349 M: Michael Hennerich <michael.hennerich@analog.com>
350 L: device-drivers-devel@blackfin.uclinux.org 350 L: device-drivers-devel@blackfin.uclinux.org
351 W: http://wiki.analog.com/ADP5588 351 W: http://wiki.analog.com/ADP5588
352 S: Supported 352 S: Supported
353 F: drivers/input/keyboard/adp5588-keys.c 353 F: drivers/input/keyboard/adp5588-keys.c
354 F: drivers/gpio/gpio-adp5588.c 354 F: drivers/gpio/gpio-adp5588.c
355 355
356 ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863) 356 ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863)
357 M: Michael Hennerich <michael.hennerich@analog.com> 357 M: Michael Hennerich <michael.hennerich@analog.com>
358 L: device-drivers-devel@blackfin.uclinux.org 358 L: device-drivers-devel@blackfin.uclinux.org
359 W: http://wiki.analog.com/ADP8860 359 W: http://wiki.analog.com/ADP8860
360 S: Supported 360 S: Supported
361 F: drivers/video/backlight/adp8860_bl.c 361 F: drivers/video/backlight/adp8860_bl.c
362 362
363 ADS1015 HARDWARE MONITOR DRIVER 363 ADS1015 HARDWARE MONITOR DRIVER
364 M: Dirk Eibach <eibach@gdsys.de> 364 M: Dirk Eibach <eibach@gdsys.de>
365 L: lm-sensors@lm-sensors.org 365 L: lm-sensors@lm-sensors.org
366 S: Maintained 366 S: Maintained
367 F: Documentation/hwmon/ads1015 367 F: Documentation/hwmon/ads1015
368 F: drivers/hwmon/ads1015.c 368 F: drivers/hwmon/ads1015.c
369 F: include/linux/i2c/ads1015.h 369 F: include/linux/i2c/ads1015.h
370 370
371 ADT746X FAN DRIVER 371 ADT746X FAN DRIVER
372 M: Colin Leroy <colin@colino.net> 372 M: Colin Leroy <colin@colino.net>
373 S: Maintained 373 S: Maintained
374 F: drivers/macintosh/therm_adt746x.c 374 F: drivers/macintosh/therm_adt746x.c
375 375
376 ADT7475 HARDWARE MONITOR DRIVER 376 ADT7475 HARDWARE MONITOR DRIVER
377 M: Jean Delvare <khali@linux-fr.org> 377 M: Jean Delvare <khali@linux-fr.org>
378 L: lm-sensors@lm-sensors.org 378 L: lm-sensors@lm-sensors.org
379 S: Maintained 379 S: Maintained
380 F: Documentation/hwmon/adt7475 380 F: Documentation/hwmon/adt7475
381 F: drivers/hwmon/adt7475.c 381 F: drivers/hwmon/adt7475.c
382 382
383 ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346) 383 ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346)
384 M: Michael Hennerich <michael.hennerich@analog.com> 384 M: Michael Hennerich <michael.hennerich@analog.com>
385 L: device-drivers-devel@blackfin.uclinux.org 385 L: device-drivers-devel@blackfin.uclinux.org
386 W: http://wiki.analog.com/ADXL345 386 W: http://wiki.analog.com/ADXL345
387 S: Supported 387 S: Supported
388 F: drivers/input/misc/adxl34x.c 388 F: drivers/input/misc/adxl34x.c
389 389
390 ADVANSYS SCSI DRIVER 390 ADVANSYS SCSI DRIVER
391 M: Matthew Wilcox <matthew@wil.cx> 391 M: Matthew Wilcox <matthew@wil.cx>
392 L: linux-scsi@vger.kernel.org 392 L: linux-scsi@vger.kernel.org
393 S: Maintained 393 S: Maintained
394 F: Documentation/scsi/advansys.txt 394 F: Documentation/scsi/advansys.txt
395 F: drivers/scsi/advansys.c 395 F: drivers/scsi/advansys.c
396 396
397 AEDSP16 DRIVER 397 AEDSP16 DRIVER
398 M: Riccardo Facchetti <fizban@tin.it> 398 M: Riccardo Facchetti <fizban@tin.it>
399 S: Maintained 399 S: Maintained
400 F: sound/oss/aedsp16.c 400 F: sound/oss/aedsp16.c
401 401
402 AFFS FILE SYSTEM 402 AFFS FILE SYSTEM
403 L: linux-fsdevel@vger.kernel.org 403 L: linux-fsdevel@vger.kernel.org
404 S: Orphan 404 S: Orphan
405 F: Documentation/filesystems/affs.txt 405 F: Documentation/filesystems/affs.txt
406 F: fs/affs/ 406 F: fs/affs/
407 407
408 AFS FILESYSTEM & AF_RXRPC SOCKET DOMAIN 408 AFS FILESYSTEM & AF_RXRPC SOCKET DOMAIN
409 M: David Howells <dhowells@redhat.com> 409 M: David Howells <dhowells@redhat.com>
410 L: linux-afs@lists.infradead.org 410 L: linux-afs@lists.infradead.org
411 S: Supported 411 S: Supported
412 F: fs/afs/ 412 F: fs/afs/
413 F: include/net/af_rxrpc.h 413 F: include/net/af_rxrpc.h
414 F: net/rxrpc/af_rxrpc.c 414 F: net/rxrpc/af_rxrpc.c
415 415
416 AGPGART DRIVER 416 AGPGART DRIVER
417 M: David Airlie <airlied@linux.ie> 417 M: David Airlie <airlied@linux.ie>
418 T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git 418 T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
419 S: Maintained 419 S: Maintained
420 F: drivers/char/agp/ 420 F: drivers/char/agp/
421 F: include/linux/agp* 421 F: include/linux/agp*
422 422
423 AHA152X SCSI DRIVER 423 AHA152X SCSI DRIVER
424 M: "Juergen E. Fischer" <fischer@norbit.de> 424 M: "Juergen E. Fischer" <fischer@norbit.de>
425 L: linux-scsi@vger.kernel.org 425 L: linux-scsi@vger.kernel.org
426 S: Maintained 426 S: Maintained
427 F: drivers/scsi/aha152x* 427 F: drivers/scsi/aha152x*
428 F: drivers/scsi/pcmcia/aha152x* 428 F: drivers/scsi/pcmcia/aha152x*
429 429
430 AIC7XXX / AIC79XX SCSI DRIVER 430 AIC7XXX / AIC79XX SCSI DRIVER
431 M: Hannes Reinecke <hare@suse.de> 431 M: Hannes Reinecke <hare@suse.de>
432 L: linux-scsi@vger.kernel.org 432 L: linux-scsi@vger.kernel.org
433 S: Maintained 433 S: Maintained
434 F: drivers/scsi/aic7xxx/ 434 F: drivers/scsi/aic7xxx/
435 F: drivers/scsi/aic7xxx_old/ 435 F: drivers/scsi/aic7xxx_old/
436 436
437 AIO 437 AIO
438 M: Benjamin LaHaise <bcrl@kvack.org> 438 M: Benjamin LaHaise <bcrl@kvack.org>
439 L: linux-aio@kvack.org 439 L: linux-aio@kvack.org
440 S: Supported 440 S: Supported
441 F: fs/aio.c 441 F: fs/aio.c
442 F: include/linux/*aio*.h 442 F: include/linux/*aio*.h
443 443
444 ALCATEL SPEEDTOUCH USB DRIVER 444 ALCATEL SPEEDTOUCH USB DRIVER
445 M: Duncan Sands <duncan.sands@free.fr> 445 M: Duncan Sands <duncan.sands@free.fr>
446 L: linux-usb@vger.kernel.org 446 L: linux-usb@vger.kernel.org
447 W: http://www.linux-usb.org/SpeedTouch/ 447 W: http://www.linux-usb.org/SpeedTouch/
448 S: Maintained 448 S: Maintained
449 F: drivers/usb/atm/speedtch.c 449 F: drivers/usb/atm/speedtch.c
450 F: drivers/usb/atm/usbatm.c 450 F: drivers/usb/atm/usbatm.c
451 451
452 ALCHEMY AU1XX0 MMC DRIVER 452 ALCHEMY AU1XX0 MMC DRIVER
453 M: Manuel Lauss <manuel.lauss@gmail.com> 453 M: Manuel Lauss <manuel.lauss@gmail.com>
454 S: Maintained 454 S: Maintained
455 F: drivers/mmc/host/au1xmmc.c 455 F: drivers/mmc/host/au1xmmc.c
456 456
457 ALI1563 I2C DRIVER 457 ALI1563 I2C DRIVER
458 M: Rudolf Marek <r.marek@assembler.cz> 458 M: Rudolf Marek <r.marek@assembler.cz>
459 L: linux-i2c@vger.kernel.org 459 L: linux-i2c@vger.kernel.org
460 S: Maintained 460 S: Maintained
461 F: Documentation/i2c/busses/i2c-ali1563 461 F: Documentation/i2c/busses/i2c-ali1563
462 F: drivers/i2c/busses/i2c-ali1563.c 462 F: drivers/i2c/busses/i2c-ali1563.c
463 463
464 ALPHA PORT 464 ALPHA PORT
465 M: Richard Henderson <rth@twiddle.net> 465 M: Richard Henderson <rth@twiddle.net>
466 M: Ivan Kokshaysky <ink@jurassic.park.msu.ru> 466 M: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
467 M: Matt Turner <mattst88@gmail.com> 467 M: Matt Turner <mattst88@gmail.com>
468 L: linux-alpha@vger.kernel.org 468 L: linux-alpha@vger.kernel.org
469 F: arch/alpha/ 469 F: arch/alpha/
470 470
471 ALTERA UART/JTAG UART SERIAL DRIVERS 471 ALTERA UART/JTAG UART SERIAL DRIVERS
472 M: Tobias Klauser <tklauser@distanz.ch> 472 M: Tobias Klauser <tklauser@distanz.ch>
473 L: linux-serial@vger.kernel.org 473 L: linux-serial@vger.kernel.org
474 L: nios2-dev@sopc.et.ntust.edu.tw (moderated for non-subscribers) 474 L: nios2-dev@sopc.et.ntust.edu.tw (moderated for non-subscribers)
475 S: Maintained 475 S: Maintained
476 F: drivers/tty/serial/altera_uart.c 476 F: drivers/tty/serial/altera_uart.c
477 F: drivers/tty/serial/altera_jtaguart.c 477 F: drivers/tty/serial/altera_jtaguart.c
478 F: include/linux/altera_uart.h 478 F: include/linux/altera_uart.h
479 F: include/linux/altera_jtaguart.h 479 F: include/linux/altera_jtaguart.h
480 480
481 AMD FAM15H PROCESSOR POWER MONITORING DRIVER 481 AMD FAM15H PROCESSOR POWER MONITORING DRIVER
482 M: Andreas Herrmann <andreas.herrmann3@amd.com> 482 M: Andreas Herrmann <andreas.herrmann3@amd.com>
483 L: lm-sensors@lm-sensors.org 483 L: lm-sensors@lm-sensors.org
484 S: Maintained 484 S: Maintained
485 F: Documentation/hwmon/fam15h_power 485 F: Documentation/hwmon/fam15h_power
486 F: drivers/hwmon/fam15h_power.c 486 F: drivers/hwmon/fam15h_power.c
487 487
488 AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER 488 AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER
489 M: Thomas Dahlmann <dahlmann.thomas@arcor.de> 489 M: Thomas Dahlmann <dahlmann.thomas@arcor.de>
490 L: linux-geode@lists.infradead.org (moderated for non-subscribers) 490 L: linux-geode@lists.infradead.org (moderated for non-subscribers)
491 S: Supported 491 S: Supported
492 F: drivers/usb/gadget/amd5536udc.* 492 F: drivers/usb/gadget/amd5536udc.*
493 493
494 AMD GEODE PROCESSOR/CHIPSET SUPPORT 494 AMD GEODE PROCESSOR/CHIPSET SUPPORT
495 P: Andres Salomon <dilinger@queued.net> 495 P: Andres Salomon <dilinger@queued.net>
496 L: linux-geode@lists.infradead.org (moderated for non-subscribers) 496 L: linux-geode@lists.infradead.org (moderated for non-subscribers)
497 W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html 497 W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html
498 S: Supported 498 S: Supported
499 F: drivers/char/hw_random/geode-rng.c 499 F: drivers/char/hw_random/geode-rng.c
500 F: drivers/crypto/geode* 500 F: drivers/crypto/geode*
501 F: drivers/video/geode/ 501 F: drivers/video/geode/
502 F: arch/x86/include/asm/geode.h 502 F: arch/x86/include/asm/geode.h
503 503
504 AMD IOMMU (AMD-VI) 504 AMD IOMMU (AMD-VI)
505 M: Joerg Roedel <joerg.roedel@amd.com> 505 M: Joerg Roedel <joerg.roedel@amd.com>
506 L: iommu@lists.linux-foundation.org 506 L: iommu@lists.linux-foundation.org
507 T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git 507 T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git
508 S: Supported 508 S: Supported
509 F: drivers/iommu/amd_iommu*.[ch] 509 F: drivers/iommu/amd_iommu*.[ch]
510 F: include/linux/amd-iommu.h 510 F: include/linux/amd-iommu.h
511 511
512 AMD MICROCODE UPDATE SUPPORT 512 AMD MICROCODE UPDATE SUPPORT
513 M: Andreas Herrmann <andreas.herrmann3@amd.com> 513 M: Andreas Herrmann <andreas.herrmann3@amd.com>
514 L: amd64-microcode@amd64.org 514 L: amd64-microcode@amd64.org
515 S: Supported 515 S: Supported
516 F: arch/x86/kernel/microcode_amd.c 516 F: arch/x86/kernel/microcode_amd.c
517 517
518 AMS (Apple Motion Sensor) DRIVER 518 AMS (Apple Motion Sensor) DRIVER
519 M: Michael Hanselmann <linux-kernel@hansmi.ch> 519 M: Michael Hanselmann <linux-kernel@hansmi.ch>
520 S: Supported 520 S: Supported
521 F: drivers/macintosh/ams/ 521 F: drivers/macintosh/ams/
522 522
523 AMSO1100 RNIC DRIVER 523 AMSO1100 RNIC DRIVER
524 M: Tom Tucker <tom@opengridcomputing.com> 524 M: Tom Tucker <tom@opengridcomputing.com>
525 M: Steve Wise <swise@opengridcomputing.com> 525 M: Steve Wise <swise@opengridcomputing.com>
526 L: linux-rdma@vger.kernel.org 526 L: linux-rdma@vger.kernel.org
527 S: Maintained 527 S: Maintained
528 F: drivers/infiniband/hw/amso1100/ 528 F: drivers/infiniband/hw/amso1100/
529 529
530 ANALOG DEVICES INC ASOC CODEC DRIVERS 530 ANALOG DEVICES INC ASOC CODEC DRIVERS
531 M: Lars-Peter Clausen <lars@metafoo.de> 531 M: Lars-Peter Clausen <lars@metafoo.de>
532 L: device-drivers-devel@blackfin.uclinux.org 532 L: device-drivers-devel@blackfin.uclinux.org
533 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 533 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
534 W: http://wiki.analog.com/ 534 W: http://wiki.analog.com/
535 S: Supported 535 S: Supported
536 F: sound/soc/codecs/adau* 536 F: sound/soc/codecs/adau*
537 F: sound/soc/codecs/adav* 537 F: sound/soc/codecs/adav*
538 F: sound/soc/codecs/ad1* 538 F: sound/soc/codecs/ad1*
539 F: sound/soc/codecs/ssm* 539 F: sound/soc/codecs/ssm*
540 F: sound/soc/codecs/sigmadsp.* 540 F: sound/soc/codecs/sigmadsp.*
541 541
542 ANALOG DEVICES INC ASOC DRIVERS 542 ANALOG DEVICES INC ASOC DRIVERS
543 L: uclinux-dist-devel@blackfin.uclinux.org 543 L: uclinux-dist-devel@blackfin.uclinux.org
544 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 544 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
545 W: http://blackfin.uclinux.org/ 545 W: http://blackfin.uclinux.org/
546 S: Supported 546 S: Supported
547 F: sound/soc/blackfin/* 547 F: sound/soc/blackfin/*
548 548
549 AOA (Apple Onboard Audio) ALSA DRIVER 549 AOA (Apple Onboard Audio) ALSA DRIVER
550 M: Johannes Berg <johannes@sipsolutions.net> 550 M: Johannes Berg <johannes@sipsolutions.net>
551 L: linuxppc-dev@lists.ozlabs.org 551 L: linuxppc-dev@lists.ozlabs.org
552 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 552 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
553 S: Maintained 553 S: Maintained
554 F: sound/aoa/ 554 F: sound/aoa/
555 555
556 APM DRIVER 556 APM DRIVER
557 M: Jiri Kosina <jkosina@suse.cz> 557 M: Jiri Kosina <jkosina@suse.cz>
558 S: Odd fixes 558 S: Odd fixes
559 F: arch/x86/kernel/apm_32.c 559 F: arch/x86/kernel/apm_32.c
560 F: include/linux/apm_bios.h 560 F: include/linux/apm_bios.h
561 F: drivers/char/apm-emulation.c 561 F: drivers/char/apm-emulation.c
562 562
563 APPLE BCM5974 MULTITOUCH DRIVER 563 APPLE BCM5974 MULTITOUCH DRIVER
564 M: Henrik Rydberg <rydberg@euromail.se> 564 M: Henrik Rydberg <rydberg@euromail.se>
565 L: linux-input@vger.kernel.org 565 L: linux-input@vger.kernel.org
566 S: Maintained 566 S: Maintained
567 F: drivers/input/mouse/bcm5974.c 567 F: drivers/input/mouse/bcm5974.c
568 568
569 APPLE SMC DRIVER 569 APPLE SMC DRIVER
570 M: Henrik Rydberg <rydberg@euromail.se> 570 M: Henrik Rydberg <rydberg@euromail.se>
571 L: lm-sensors@lm-sensors.org 571 L: lm-sensors@lm-sensors.org
572 S: Maintained 572 S: Maintained
573 F: drivers/hwmon/applesmc.c 573 F: drivers/hwmon/applesmc.c
574 574
575 APPLETALK NETWORK LAYER 575 APPLETALK NETWORK LAYER
576 M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> 576 M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
577 S: Maintained 577 S: Maintained
578 F: drivers/net/appletalk/ 578 F: drivers/net/appletalk/
579 F: net/appletalk/ 579 F: net/appletalk/
580 580
581 ARASAN COMPACT FLASH PATA CONTROLLER 581 ARASAN COMPACT FLASH PATA CONTROLLER
582 M: Viresh Kumar <viresh.kumar@st.com> 582 M: Viresh Kumar <viresh.kumar@st.com>
583 L: linux-ide@vger.kernel.org 583 L: linux-ide@vger.kernel.org
584 S: Maintained 584 S: Maintained
585 F: include/linux/pata_arasan_cf_data.h 585 F: include/linux/pata_arasan_cf_data.h
586 F: drivers/ata/pata_arasan_cf.c 586 F: drivers/ata/pata_arasan_cf.c
587 587
588 ARC FRAMEBUFFER DRIVER 588 ARC FRAMEBUFFER DRIVER
589 M: Jaya Kumar <jayalk@intworks.biz> 589 M: Jaya Kumar <jayalk@intworks.biz>
590 S: Maintained 590 S: Maintained
591 F: drivers/video/arcfb.c 591 F: drivers/video/arcfb.c
592 F: drivers/video/fb_defio.c 592 F: drivers/video/fb_defio.c
593 593
594 ARM MFM AND FLOPPY DRIVERS 594 ARM MFM AND FLOPPY DRIVERS
595 M: Ian Molton <spyro@f2s.com> 595 M: Ian Molton <spyro@f2s.com>
596 S: Maintained 596 S: Maintained
597 F: arch/arm/lib/floppydma.S 597 F: arch/arm/lib/floppydma.S
598 F: arch/arm/include/asm/floppy.h 598 F: arch/arm/include/asm/floppy.h
599 599
600 ARM PMU PROFILING AND DEBUGGING 600 ARM PMU PROFILING AND DEBUGGING
601 M: Will Deacon <will.deacon@arm.com> 601 M: Will Deacon <will.deacon@arm.com>
602 S: Maintained 602 S: Maintained
603 F: arch/arm/kernel/perf_event* 603 F: arch/arm/kernel/perf_event*
604 F: arch/arm/oprofile/common.c 604 F: arch/arm/oprofile/common.c
605 F: arch/arm/kernel/pmu.c 605 F: arch/arm/kernel/pmu.c
606 F: arch/arm/include/asm/pmu.h 606 F: arch/arm/include/asm/pmu.h
607 F: arch/arm/kernel/hw_breakpoint.c 607 F: arch/arm/kernel/hw_breakpoint.c
608 F: arch/arm/include/asm/hw_breakpoint.h 608 F: arch/arm/include/asm/hw_breakpoint.h
609 609
610 ARM PORT 610 ARM PORT
611 M: Russell King <linux@arm.linux.org.uk> 611 M: Russell King <linux@arm.linux.org.uk>
612 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 612 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
613 W: http://www.arm.linux.org.uk/ 613 W: http://www.arm.linux.org.uk/
614 S: Maintained 614 S: Maintained
615 F: arch/arm/ 615 F: arch/arm/
616 616
617 ARM PRIMECELL AACI PL041 DRIVER 617 ARM PRIMECELL AACI PL041 DRIVER
618 M: Russell King <linux@arm.linux.org.uk> 618 M: Russell King <linux@arm.linux.org.uk>
619 S: Maintained 619 S: Maintained
620 F: sound/arm/aaci.* 620 F: sound/arm/aaci.*
621 621
622 ARM PRIMECELL CLCD PL110 DRIVER 622 ARM PRIMECELL CLCD PL110 DRIVER
623 M: Russell King <linux@arm.linux.org.uk> 623 M: Russell King <linux@arm.linux.org.uk>
624 S: Maintained 624 S: Maintained
625 F: drivers/video/amba-clcd.* 625 F: drivers/video/amba-clcd.*
626 626
627 ARM PRIMECELL KMI PL050 DRIVER 627 ARM PRIMECELL KMI PL050 DRIVER
628 M: Russell King <linux@arm.linux.org.uk> 628 M: Russell King <linux@arm.linux.org.uk>
629 S: Maintained 629 S: Maintained
630 F: drivers/input/serio/ambakmi.* 630 F: drivers/input/serio/ambakmi.*
631 F: include/linux/amba/kmi.h 631 F: include/linux/amba/kmi.h
632 632
633 ARM PRIMECELL MMCI PL180/1 DRIVER 633 ARM PRIMECELL MMCI PL180/1 DRIVER
634 S: Orphan 634 S: Orphan
635 F: drivers/mmc/host/mmci.* 635 F: drivers/mmc/host/mmci.*
636 636
637 ARM PRIMECELL BUS SUPPORT 637 ARM PRIMECELL BUS SUPPORT
638 M: Russell King <linux@arm.linux.org.uk> 638 M: Russell King <linux@arm.linux.org.uk>
639 S: Maintained 639 S: Maintained
640 F: drivers/amba/ 640 F: drivers/amba/
641 F: include/linux/amba/bus.h 641 F: include/linux/amba/bus.h
642 642
643 ARM/ADI ROADRUNNER MACHINE SUPPORT 643 ARM/ADI ROADRUNNER MACHINE SUPPORT
644 M: Lennert Buytenhek <kernel@wantstofly.org> 644 M: Lennert Buytenhek <kernel@wantstofly.org>
645 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 645 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
646 S: Maintained 646 S: Maintained
647 F: arch/arm/mach-ixp23xx/ 647 F: arch/arm/mach-ixp23xx/
648 F: arch/arm/mach-ixp23xx/include/mach/ 648 F: arch/arm/mach-ixp23xx/include/mach/
649 649
650 ARM/ADS SPHERE MACHINE SUPPORT 650 ARM/ADS SPHERE MACHINE SUPPORT
651 M: Lennert Buytenhek <kernel@wantstofly.org> 651 M: Lennert Buytenhek <kernel@wantstofly.org>
652 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 652 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
653 S: Maintained 653 S: Maintained
654 654
655 ARM/AFEB9260 MACHINE SUPPORT 655 ARM/AFEB9260 MACHINE SUPPORT
656 M: Sergey Lapin <slapin@ossfans.org> 656 M: Sergey Lapin <slapin@ossfans.org>
657 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 657 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
658 S: Maintained 658 S: Maintained
659 659
660 ARM/AJECO 1ARM MACHINE SUPPORT 660 ARM/AJECO 1ARM MACHINE SUPPORT
661 M: Lennert Buytenhek <kernel@wantstofly.org> 661 M: Lennert Buytenhek <kernel@wantstofly.org>
662 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 662 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
663 S: Maintained 663 S: Maintained
664 664
665 ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES 665 ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES
666 M: Andrew Victor <linux@maxim.org.za> 666 M: Andrew Victor <linux@maxim.org.za>
667 M: Nicolas Ferre <nicolas.ferre@atmel.com> 667 M: Nicolas Ferre <nicolas.ferre@atmel.com>
668 M: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com> 668 M: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
669 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 669 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
670 W: http://maxim.org.za/at91_26.html 670 W: http://maxim.org.za/at91_26.html
671 W: http://www.linux4sam.org 671 W: http://www.linux4sam.org
672 S: Supported 672 S: Supported
673 F: arch/arm/mach-at91/ 673 F: arch/arm/mach-at91/
674 674
675 ARM/BCMRING ARM ARCHITECTURE 675 ARM/BCMRING ARM ARCHITECTURE
676 M: Jiandong Zheng <jdzheng@broadcom.com> 676 M: Jiandong Zheng <jdzheng@broadcom.com>
677 M: Scott Branden <sbranden@broadcom.com> 677 M: Scott Branden <sbranden@broadcom.com>
678 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 678 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
679 S: Maintained 679 S: Maintained
680 F: arch/arm/mach-bcmring 680 F: arch/arm/mach-bcmring
681 681
682 ARM/BCMRING MTD NAND DRIVER 682 ARM/BCMRING MTD NAND DRIVER
683 M: Jiandong Zheng <jdzheng@broadcom.com> 683 M: Jiandong Zheng <jdzheng@broadcom.com>
684 M: Scott Branden <sbranden@broadcom.com> 684 M: Scott Branden <sbranden@broadcom.com>
685 L: linux-mtd@lists.infradead.org 685 L: linux-mtd@lists.infradead.org
686 S: Maintained 686 S: Maintained
687 F: drivers/mtd/nand/bcm_umi_nand.c 687 F: drivers/mtd/nand/bcm_umi_nand.c
688 F: drivers/mtd/nand/bcm_umi_bch.c 688 F: drivers/mtd/nand/bcm_umi_bch.c
689 F: drivers/mtd/nand/nand_bcm_umi.h 689 F: drivers/mtd/nand/nand_bcm_umi.h
690 690
691 ARM/CALXEDA HIGHBANK ARCHITECTURE 691 ARM/CALXEDA HIGHBANK ARCHITECTURE
692 M: Rob Herring <rob.herring@calxeda.com> 692 M: Rob Herring <rob.herring@calxeda.com>
693 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 693 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
694 S: Maintained 694 S: Maintained
695 F: arch/arm/mach-highbank/ 695 F: arch/arm/mach-highbank/
696 696
697 ARM/CAVIUM NETWORKS CNS3XXX MACHINE SUPPORT 697 ARM/CAVIUM NETWORKS CNS3XXX MACHINE SUPPORT
698 M: Anton Vorontsov <avorontsov@mvista.com> 698 M: Anton Vorontsov <avorontsov@mvista.com>
699 S: Maintained 699 S: Maintained
700 F: arch/arm/mach-cns3xxx/ 700 F: arch/arm/mach-cns3xxx/
701 T: git git://git.infradead.org/users/cbou/linux-cns3xxx.git 701 T: git git://git.infradead.org/users/cbou/linux-cns3xxx.git
702 702
703 ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE 703 ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE
704 M: Hartley Sweeten <hsweeten@visionengravers.com> 704 M: Hartley Sweeten <hsweeten@visionengravers.com>
705 M: Ryan Mallon <rmallon@gmail.com> 705 M: Ryan Mallon <rmallon@gmail.com>
706 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 706 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
707 S: Maintained 707 S: Maintained
708 F: arch/arm/mach-ep93xx/ 708 F: arch/arm/mach-ep93xx/
709 F: arch/arm/mach-ep93xx/include/mach/ 709 F: arch/arm/mach-ep93xx/include/mach/
710 710
711 ARM/CIRRUS LOGIC EDB9315A MACHINE SUPPORT 711 ARM/CIRRUS LOGIC EDB9315A MACHINE SUPPORT
712 M: Lennert Buytenhek <kernel@wantstofly.org> 712 M: Lennert Buytenhek <kernel@wantstofly.org>
713 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 713 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
714 S: Maintained 714 S: Maintained
715 715
716 ARM/CLKDEV SUPPORT 716 ARM/CLKDEV SUPPORT
717 M: Russell King <linux@arm.linux.org.uk> 717 M: Russell King <linux@arm.linux.org.uk>
718 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 718 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
719 F: arch/arm/include/asm/clkdev.h 719 F: arch/arm/include/asm/clkdev.h
720 F: drivers/clk/clkdev.c 720 F: drivers/clk/clkdev.c
721 721
722 ARM/COMPULAB CM-X270/EM-X270 and CM-X300 MACHINE SUPPORT 722 ARM/COMPULAB CM-X270/EM-X270 and CM-X300 MACHINE SUPPORT
723 M: Mike Rapoport <mike@compulab.co.il> 723 M: Mike Rapoport <mike@compulab.co.il>
724 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 724 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
725 S: Maintained 725 S: Maintained
726 726
727 ARM/CONTEC MICRO9 MACHINE SUPPORT 727 ARM/CONTEC MICRO9 MACHINE SUPPORT
728 M: Hubert Feurstein <hubert.feurstein@contec.at> 728 M: Hubert Feurstein <hubert.feurstein@contec.at>
729 S: Maintained 729 S: Maintained
730 F: arch/arm/mach-ep93xx/micro9.c 730 F: arch/arm/mach-ep93xx/micro9.c
731 731
732 ARM/CORGI MACHINE SUPPORT 732 ARM/CORGI MACHINE SUPPORT
733 M: Richard Purdie <rpurdie@rpsys.net> 733 M: Richard Purdie <rpurdie@rpsys.net>
734 S: Maintained 734 S: Maintained
735 735
736 ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE 736 ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE
737 M: Hans Ulli Kroll <ulli.kroll@googlemail.com> 737 M: Hans Ulli Kroll <ulli.kroll@googlemail.com>
738 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 738 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
739 T: git git://git.berlios.de/gemini-board 739 T: git git://git.berlios.de/gemini-board
740 S: Maintained 740 S: Maintained
741 F: arch/arm/mach-gemini/ 741 F: arch/arm/mach-gemini/
742 742
743 ARM/CSR SIRFPRIMA2 MACHINE SUPPORT 743 ARM/CSR SIRFPRIMA2 MACHINE SUPPORT
744 M: Barry Song <baohua.song@csr.com> 744 M: Barry Song <baohua.song@csr.com>
745 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 745 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
746 S: Maintained 746 S: Maintained
747 F: arch/arm/mach-prima2/ 747 F: arch/arm/mach-prima2/
748 F: drivers/dma/sirf-dma* 748 F: drivers/dma/sirf-dma*
749 749
750 ARM/EBSA110 MACHINE SUPPORT 750 ARM/EBSA110 MACHINE SUPPORT
751 M: Russell King <linux@arm.linux.org.uk> 751 M: Russell King <linux@arm.linux.org.uk>
752 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 752 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
753 W: http://www.arm.linux.org.uk/ 753 W: http://www.arm.linux.org.uk/
754 S: Maintained 754 S: Maintained
755 F: arch/arm/mach-ebsa110/ 755 F: arch/arm/mach-ebsa110/
756 F: drivers/net/ethernet/amd/am79c961a.* 756 F: drivers/net/ethernet/amd/am79c961a.*
757 757
758 ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6) 758 ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6)
759 M: Daniel Ribeiro <drwyrm@gmail.com> 759 M: Daniel Ribeiro <drwyrm@gmail.com>
760 M: Stefan Schmidt <stefan@openezx.org> 760 M: Stefan Schmidt <stefan@openezx.org>
761 M: Harald Welte <laforge@openezx.org> 761 M: Harald Welte <laforge@openezx.org>
762 L: openezx-devel@lists.openezx.org (moderated for non-subscribers) 762 L: openezx-devel@lists.openezx.org (moderated for non-subscribers)
763 W: http://www.openezx.org/ 763 W: http://www.openezx.org/
764 S: Maintained 764 S: Maintained
765 T: topgit git://git.openezx.org/openezx.git 765 T: topgit git://git.openezx.org/openezx.git
766 F: arch/arm/mach-pxa/ezx.c 766 F: arch/arm/mach-pxa/ezx.c
767 767
768 ARM/FARADAY FA526 PORT 768 ARM/FARADAY FA526 PORT
769 M: Hans Ulli Kroll <ulli.kroll@googlemail.com> 769 M: Hans Ulli Kroll <ulli.kroll@googlemail.com>
770 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 770 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
771 S: Maintained 771 S: Maintained
772 T: git git://git.berlios.de/gemini-board 772 T: git git://git.berlios.de/gemini-board
773 F: arch/arm/mm/*-fa* 773 F: arch/arm/mm/*-fa*
774 774
775 ARM/FOOTBRIDGE ARCHITECTURE 775 ARM/FOOTBRIDGE ARCHITECTURE
776 M: Russell King <linux@arm.linux.org.uk> 776 M: Russell King <linux@arm.linux.org.uk>
777 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 777 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
778 W: http://www.arm.linux.org.uk/ 778 W: http://www.arm.linux.org.uk/
779 S: Maintained 779 S: Maintained
780 F: arch/arm/include/asm/hardware/dec21285.h 780 F: arch/arm/include/asm/hardware/dec21285.h
781 F: arch/arm/mach-footbridge/ 781 F: arch/arm/mach-footbridge/
782 782
783 ARM/FREESCALE IMX / MXC ARM ARCHITECTURE 783 ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
784 M: Sascha Hauer <kernel@pengutronix.de> 784 M: Sascha Hauer <kernel@pengutronix.de>
785 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 785 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
786 S: Maintained 786 S: Maintained
787 T: git git://git.pengutronix.de/git/imx/linux-2.6.git 787 T: git git://git.pengutronix.de/git/imx/linux-2.6.git
788 F: arch/arm/mach-mx*/ 788 F: arch/arm/mach-mx*/
789 F: arch/arm/mach-imx/ 789 F: arch/arm/mach-imx/
790 F: arch/arm/plat-mxc/ 790 F: arch/arm/plat-mxc/
791 791
792 ARM/FREESCALE IMX6 792 ARM/FREESCALE IMX6
793 M: Shawn Guo <shawn.guo@linaro.org> 793 M: Shawn Guo <shawn.guo@linaro.org>
794 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 794 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
795 S: Maintained 795 S: Maintained
796 T: git git://git.linaro.org/people/shawnguo/linux-2.6.git 796 T: git git://git.linaro.org/people/shawnguo/linux-2.6.git
797 F: arch/arm/mach-imx/*imx6* 797 F: arch/arm/mach-imx/*imx6*
798 798
799 ARM/FREESCALE MXS ARM ARCHITECTURE 799 ARM/FREESCALE MXS ARM ARCHITECTURE
800 M: Shawn Guo <shawn.guo@linaro.org> 800 M: Shawn Guo <shawn.guo@linaro.org>
801 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 801 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
802 S: Maintained 802 S: Maintained
803 T: git git://git.linaro.org/people/shawnguo/linux-2.6.git 803 T: git git://git.linaro.org/people/shawnguo/linux-2.6.git
804 F: arch/arm/mach-mxs/ 804 F: arch/arm/mach-mxs/
805 805
806 ARM/GLOMATION GESBC9312SX MACHINE SUPPORT 806 ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
807 M: Lennert Buytenhek <kernel@wantstofly.org> 807 M: Lennert Buytenhek <kernel@wantstofly.org>
808 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 808 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
809 S: Maintained 809 S: Maintained
810 810
811 ARM/GUMSTIX MACHINE SUPPORT 811 ARM/GUMSTIX MACHINE SUPPORT
812 M: Steve Sakoman <sakoman@gmail.com> 812 M: Steve Sakoman <sakoman@gmail.com>
813 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 813 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
814 S: Maintained 814 S: Maintained
815 815
816 ARM/H4700 (HP IPAQ HX4700) MACHINE SUPPORT 816 ARM/H4700 (HP IPAQ HX4700) MACHINE SUPPORT
817 M: Philipp Zabel <philipp.zabel@gmail.com> 817 M: Philipp Zabel <philipp.zabel@gmail.com>
818 S: Maintained 818 S: Maintained
819 F: arch/arm/mach-pxa/hx4700.c 819 F: arch/arm/mach-pxa/hx4700.c
820 F: arch/arm/mach-pxa/include/mach/hx4700.h 820 F: arch/arm/mach-pxa/include/mach/hx4700.h
821 821
822 ARM/HP JORNADA 7XX MACHINE SUPPORT 822 ARM/HP JORNADA 7XX MACHINE SUPPORT
823 M: Kristoffer Ericson <kristoffer.ericson@gmail.com> 823 M: Kristoffer Ericson <kristoffer.ericson@gmail.com>
824 W: www.jlime.com 824 W: www.jlime.com
825 S: Maintained 825 S: Maintained
826 T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git 826 T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git
827 F: arch/arm/mach-sa1100/jornada720.c 827 F: arch/arm/mach-sa1100/jornada720.c
828 F: arch/arm/mach-sa1100/include/mach/jornada720.h 828 F: arch/arm/mach-sa1100/include/mach/jornada720.h
829 829
830 ARM/INCOME PXA270 SUPPORT 830 ARM/INCOME PXA270 SUPPORT
831 M: Marek Vasut <marek.vasut@gmail.com> 831 M: Marek Vasut <marek.vasut@gmail.com>
832 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 832 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
833 S: Maintained 833 S: Maintained
834 F: arch/arm/mach-pxa/colibri-pxa270-income.c 834 F: arch/arm/mach-pxa/colibri-pxa270-income.c
835 835
836 ARM/INTEL IOP32X ARM ARCHITECTURE 836 ARM/INTEL IOP32X ARM ARCHITECTURE
837 M: Lennert Buytenhek <kernel@wantstofly.org> 837 M: Lennert Buytenhek <kernel@wantstofly.org>
838 M: Dan Williams <dan.j.williams@intel.com> 838 M: Dan Williams <dan.j.williams@intel.com>
839 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 839 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
840 S: Maintained 840 S: Maintained
841 841
842 ARM/INTEL IOP33X ARM ARCHITECTURE 842 ARM/INTEL IOP33X ARM ARCHITECTURE
843 M: Dan Williams <dan.j.williams@intel.com> 843 M: Dan Williams <dan.j.williams@intel.com>
844 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 844 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
845 S: Maintained 845 S: Maintained
846 846
847 ARM/INTEL IOP13XX ARM ARCHITECTURE 847 ARM/INTEL IOP13XX ARM ARCHITECTURE
848 M: Lennert Buytenhek <kernel@wantstofly.org> 848 M: Lennert Buytenhek <kernel@wantstofly.org>
849 M: Dan Williams <dan.j.williams@intel.com> 849 M: Dan Williams <dan.j.williams@intel.com>
850 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 850 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
851 S: Maintained 851 S: Maintained
852 852
853 ARM/INTEL IQ81342EX MACHINE SUPPORT 853 ARM/INTEL IQ81342EX MACHINE SUPPORT
854 M: Lennert Buytenhek <kernel@wantstofly.org> 854 M: Lennert Buytenhek <kernel@wantstofly.org>
855 M: Dan Williams <dan.j.williams@intel.com> 855 M: Dan Williams <dan.j.williams@intel.com>
856 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 856 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
857 S: Maintained 857 S: Maintained
858 858
859 ARM/INTEL IXP2000 ARM ARCHITECTURE 859 ARM/INTEL IXP2000 ARM ARCHITECTURE
860 M: Lennert Buytenhek <kernel@wantstofly.org> 860 M: Lennert Buytenhek <kernel@wantstofly.org>
861 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 861 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
862 S: Maintained 862 S: Maintained
863 863
864 ARM/INTEL IXDP2850 MACHINE SUPPORT 864 ARM/INTEL IXDP2850 MACHINE SUPPORT
865 M: Lennert Buytenhek <kernel@wantstofly.org> 865 M: Lennert Buytenhek <kernel@wantstofly.org>
866 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 866 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
867 S: Maintained 867 S: Maintained
868 868
869 ARM/INTEL IXP23XX ARM ARCHITECTURE 869 ARM/INTEL IXP23XX ARM ARCHITECTURE
870 M: Lennert Buytenhek <kernel@wantstofly.org> 870 M: Lennert Buytenhek <kernel@wantstofly.org>
871 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 871 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
872 S: Maintained 872 S: Maintained
873 873
874 ARM/INTEL IXP4XX ARM ARCHITECTURE 874 ARM/INTEL IXP4XX ARM ARCHITECTURE
875 M: Imre Kaloz <kaloz@openwrt.org> 875 M: Imre Kaloz <kaloz@openwrt.org>
876 M: Krzysztof Halasa <khc@pm.waw.pl> 876 M: Krzysztof Halasa <khc@pm.waw.pl>
877 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 877 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
878 S: Maintained 878 S: Maintained
879 F: arch/arm/mach-ixp4xx/ 879 F: arch/arm/mach-ixp4xx/
880 880
881 ARM/INTEL RESEARCH IMOTE/STARGATE 2 MACHINE SUPPORT 881 ARM/INTEL RESEARCH IMOTE/STARGATE 2 MACHINE SUPPORT
882 M: Jonathan Cameron <jic23@cam.ac.uk> 882 M: Jonathan Cameron <jic23@cam.ac.uk>
883 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 883 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
884 S: Maintained 884 S: Maintained
885 F: arch/arm/mach-pxa/stargate2.c 885 F: arch/arm/mach-pxa/stargate2.c
886 F: drivers/pcmcia/pxa2xx_stargate2.c 886 F: drivers/pcmcia/pxa2xx_stargate2.c
887 887
888 ARM/INTEL XSC3 (MANZANO) ARM CORE 888 ARM/INTEL XSC3 (MANZANO) ARM CORE
889 M: Lennert Buytenhek <kernel@wantstofly.org> 889 M: Lennert Buytenhek <kernel@wantstofly.org>
890 M: Dan Williams <dan.j.williams@intel.com> 890 M: Dan Williams <dan.j.williams@intel.com>
891 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 891 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
892 S: Maintained 892 S: Maintained
893 893
894 ARM/IP FABRICS DOUBLE ESPRESSO MACHINE SUPPORT 894 ARM/IP FABRICS DOUBLE ESPRESSO MACHINE SUPPORT
895 M: Lennert Buytenhek <kernel@wantstofly.org> 895 M: Lennert Buytenhek <kernel@wantstofly.org>
896 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 896 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
897 S: Maintained 897 S: Maintained
898 898
899 ARM/LOGICPD PXA270 MACHINE SUPPORT 899 ARM/LOGICPD PXA270 MACHINE SUPPORT
900 M: Lennert Buytenhek <kernel@wantstofly.org> 900 M: Lennert Buytenhek <kernel@wantstofly.org>
901 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 901 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
902 S: Maintained 902 S: Maintained
903 903
904 ARM/MAGICIAN MACHINE SUPPORT 904 ARM/MAGICIAN MACHINE SUPPORT
905 M: Philipp Zabel <philipp.zabel@gmail.com> 905 M: Philipp Zabel <philipp.zabel@gmail.com>
906 S: Maintained 906 S: Maintained
907 907
908 ARM/Marvell Loki/Kirkwood/MV78xx0/Orion SOC support 908 ARM/Marvell Loki/Kirkwood/MV78xx0/Orion SOC support
909 M: Lennert Buytenhek <kernel@wantstofly.org> 909 M: Lennert Buytenhek <kernel@wantstofly.org>
910 M: Nicolas Pitre <nico@fluxnic.net> 910 M: Nicolas Pitre <nico@fluxnic.net>
911 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 911 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
912 S: Odd Fixes 912 S: Odd Fixes
913 F: arch/arm/mach-kirkwood/ 913 F: arch/arm/mach-kirkwood/
914 F: arch/arm/mach-mv78xx0/ 914 F: arch/arm/mach-mv78xx0/
915 F: arch/arm/mach-orion5x/ 915 F: arch/arm/mach-orion5x/
916 F: arch/arm/plat-orion/ 916 F: arch/arm/plat-orion/
917 917
918 ARM/Orion SoC/Technologic Systems TS-78xx platform support 918 ARM/Orion SoC/Technologic Systems TS-78xx platform support
919 M: Alexander Clouter <alex@digriz.org.uk> 919 M: Alexander Clouter <alex@digriz.org.uk>
920 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 920 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
921 W: http://www.digriz.org.uk/ts78xx/kernel 921 W: http://www.digriz.org.uk/ts78xx/kernel
922 S: Maintained 922 S: Maintained
923 F: arch/arm/mach-orion5x/ts78xx-* 923 F: arch/arm/mach-orion5x/ts78xx-*
924 924
925 ARM/MIOA701 MACHINE SUPPORT 925 ARM/MIOA701 MACHINE SUPPORT
926 M: Robert Jarzmik <robert.jarzmik@free.fr> 926 M: Robert Jarzmik <robert.jarzmik@free.fr>
927 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 927 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
928 F: arch/arm/mach-pxa/mioa701.c 928 F: arch/arm/mach-pxa/mioa701.c
929 S: Maintained 929 S: Maintained
930 930
931 ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT 931 ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT
932 M: Michael Petchkovsky <mkpetch@internode.on.net> 932 M: Michael Petchkovsky <mkpetch@internode.on.net>
933 S: Maintained 933 S: Maintained
934 934
935 ARM/NOMADIK ARCHITECTURE 935 ARM/NOMADIK ARCHITECTURE
936 M: Alessandro Rubini <rubini@unipv.it> 936 M: Alessandro Rubini <rubini@unipv.it>
937 M: Linus Walleij <linus.walleij@stericsson.com> 937 M: Linus Walleij <linus.walleij@stericsson.com>
938 M: STEricsson <STEricsson_nomadik_linux@list.st.com> 938 M: STEricsson <STEricsson_nomadik_linux@list.st.com>
939 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 939 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
940 S: Maintained 940 S: Maintained
941 F: arch/arm/mach-nomadik/ 941 F: arch/arm/mach-nomadik/
942 F: arch/arm/plat-nomadik/ 942 F: arch/arm/plat-nomadik/
943 F: drivers/i2c/busses/i2c-nomadik.c 943 F: drivers/i2c/busses/i2c-nomadik.c
944 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git 944 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
945 945
946 ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT 946 ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
947 M: Nelson Castillo <arhuaco@freaks-unidos.net> 947 M: Nelson Castillo <arhuaco@freaks-unidos.net>
948 L: openmoko-kernel@lists.openmoko.org (subscribers-only) 948 L: openmoko-kernel@lists.openmoko.org (subscribers-only)
949 W: http://wiki.openmoko.org/wiki/Neo_FreeRunner 949 W: http://wiki.openmoko.org/wiki/Neo_FreeRunner
950 S: Supported 950 S: Supported
951 951
952 ARM/QUALCOMM MSM MACHINE SUPPORT 952 ARM/QUALCOMM MSM MACHINE SUPPORT
953 M: David Brown <davidb@codeaurora.org> 953 M: David Brown <davidb@codeaurora.org>
954 M: Daniel Walker <dwalker@fifo99.com> 954 M: Daniel Walker <dwalker@fifo99.com>
955 M: Bryan Huntsman <bryanh@codeaurora.org> 955 M: Bryan Huntsman <bryanh@codeaurora.org>
956 L: linux-arm-msm@vger.kernel.org 956 L: linux-arm-msm@vger.kernel.org
957 F: arch/arm/mach-msm/ 957 F: arch/arm/mach-msm/
958 F: drivers/video/msm/ 958 F: drivers/video/msm/
959 F: drivers/mmc/host/msm_sdcc.c 959 F: drivers/mmc/host/msm_sdcc.c
960 F: drivers/mmc/host/msm_sdcc.h 960 F: drivers/mmc/host/msm_sdcc.h
961 F: drivers/tty/serial/msm_serial.h 961 F: drivers/tty/serial/msm_serial.h
962 F: drivers/tty/serial/msm_serial.c 962 F: drivers/tty/serial/msm_serial.c
963 F: drivers/platform/msm/ 963 F: drivers/platform/msm/
964 F: drivers/*/pm8???-* 964 F: drivers/*/pm8???-*
965 F: include/linux/mfd/pm8xxx/ 965 F: include/linux/mfd/pm8xxx/
966 T: git git://codeaurora.org/quic/kernel/davidb/linux-msm.git 966 T: git git://codeaurora.org/quic/kernel/davidb/linux-msm.git
967 S: Maintained 967 S: Maintained
968 968
969 ARM/TOSA MACHINE SUPPORT 969 ARM/TOSA MACHINE SUPPORT
970 M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> 970 M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
971 M: Dirk Opfer <dirk@opfer-online.de> 971 M: Dirk Opfer <dirk@opfer-online.de>
972 S: Maintained 972 S: Maintained
973 973
974 ARM/PALMTX,PALMT5,PALMLD,PALMTE2,PALMTC SUPPORT 974 ARM/PALMTX,PALMT5,PALMLD,PALMTE2,PALMTC SUPPORT
975 M: Marek Vasut <marek.vasut@gmail.com> 975 M: Marek Vasut <marek.vasut@gmail.com>
976 L: linux-arm-kernel@lists.infradead.org 976 L: linux-arm-kernel@lists.infradead.org
977 W: http://hackndev.com 977 W: http://hackndev.com
978 S: Maintained 978 S: Maintained
979 F: arch/arm/mach-pxa/include/mach/palmtx.h 979 F: arch/arm/mach-pxa/include/mach/palmtx.h
980 F: arch/arm/mach-pxa/palmtx.c 980 F: arch/arm/mach-pxa/palmtx.c
981 F: arch/arm/mach-pxa/include/mach/palmt5.h 981 F: arch/arm/mach-pxa/include/mach/palmt5.h
982 F: arch/arm/mach-pxa/palmt5.c 982 F: arch/arm/mach-pxa/palmt5.c
983 F: arch/arm/mach-pxa/include/mach/palmld.h 983 F: arch/arm/mach-pxa/include/mach/palmld.h
984 F: arch/arm/mach-pxa/palmld.c 984 F: arch/arm/mach-pxa/palmld.c
985 F: arch/arm/mach-pxa/include/mach/palmte2.h 985 F: arch/arm/mach-pxa/include/mach/palmte2.h
986 F: arch/arm/mach-pxa/palmte2.c 986 F: arch/arm/mach-pxa/palmte2.c
987 F: arch/arm/mach-pxa/include/mach/palmtc.h 987 F: arch/arm/mach-pxa/include/mach/palmtc.h
988 F: arch/arm/mach-pxa/palmtc.c 988 F: arch/arm/mach-pxa/palmtc.c
989 989
990 ARM/PALM TREO SUPPORT 990 ARM/PALM TREO SUPPORT
991 M: Tomas Cech <sleep_walker@suse.cz> 991 M: Tomas Cech <sleep_walker@suse.cz>
992 L: linux-arm-kernel@lists.infradead.org 992 L: linux-arm-kernel@lists.infradead.org
993 W: http://hackndev.com 993 W: http://hackndev.com
994 S: Maintained 994 S: Maintained
995 F: arch/arm/mach-pxa/include/mach/palmtreo.h 995 F: arch/arm/mach-pxa/include/mach/palmtreo.h
996 F: arch/arm/mach-pxa/palmtreo.c 996 F: arch/arm/mach-pxa/palmtreo.c
997 997
998 ARM/PALMZ72 SUPPORT 998 ARM/PALMZ72 SUPPORT
999 M: Sergey Lapin <slapin@ossfans.org> 999 M: Sergey Lapin <slapin@ossfans.org>
1000 L: linux-arm-kernel@lists.infradead.org 1000 L: linux-arm-kernel@lists.infradead.org
1001 W: http://hackndev.com 1001 W: http://hackndev.com
1002 S: Maintained 1002 S: Maintained
1003 F: arch/arm/mach-pxa/include/mach/palmz72.h 1003 F: arch/arm/mach-pxa/include/mach/palmz72.h
1004 F: arch/arm/mach-pxa/palmz72.c 1004 F: arch/arm/mach-pxa/palmz72.c
1005 1005
1006 ARM/PLEB SUPPORT 1006 ARM/PLEB SUPPORT
1007 M: Peter Chubb <pleb@gelato.unsw.edu.au> 1007 M: Peter Chubb <pleb@gelato.unsw.edu.au>
1008 W: http://www.disy.cse.unsw.edu.au/Hardware/PLEB 1008 W: http://www.disy.cse.unsw.edu.au/Hardware/PLEB
1009 S: Maintained 1009 S: Maintained
1010 1010
1011 ARM/PT DIGITAL BOARD PORT 1011 ARM/PT DIGITAL BOARD PORT
1012 M: Stefan Eletzhofer <stefan.eletzhofer@eletztrick.de> 1012 M: Stefan Eletzhofer <stefan.eletzhofer@eletztrick.de>
1013 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1013 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1014 W: http://www.arm.linux.org.uk/ 1014 W: http://www.arm.linux.org.uk/
1015 S: Maintained 1015 S: Maintained
1016 1016
1017 ARM/RADISYS ENP2611 MACHINE SUPPORT 1017 ARM/RADISYS ENP2611 MACHINE SUPPORT
1018 M: Lennert Buytenhek <kernel@wantstofly.org> 1018 M: Lennert Buytenhek <kernel@wantstofly.org>
1019 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1019 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1020 S: Maintained 1020 S: Maintained
1021 1021
1022 ARM/RISCPC ARCHITECTURE 1022 ARM/RISCPC ARCHITECTURE
1023 M: Russell King <linux@arm.linux.org.uk> 1023 M: Russell King <linux@arm.linux.org.uk>
1024 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1024 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1025 W: http://www.arm.linux.org.uk/ 1025 W: http://www.arm.linux.org.uk/
1026 S: Maintained 1026 S: Maintained
1027 F: arch/arm/common/time-acorn.c 1027 F: arch/arm/common/time-acorn.c
1028 F: arch/arm/include/asm/hardware/entry-macro-iomd.S 1028 F: arch/arm/include/asm/hardware/entry-macro-iomd.S
1029 F: arch/arm/include/asm/hardware/ioc.h 1029 F: arch/arm/include/asm/hardware/ioc.h
1030 F: arch/arm/include/asm/hardware/iomd.h 1030 F: arch/arm/include/asm/hardware/iomd.h
1031 F: arch/arm/include/asm/hardware/memc.h 1031 F: arch/arm/include/asm/hardware/memc.h
1032 F: arch/arm/mach-rpc/ 1032 F: arch/arm/mach-rpc/
1033 F: drivers/net/ethernet/8390/etherh.c 1033 F: drivers/net/ethernet/8390/etherh.c
1034 F: drivers/net/ethernet/i825xx/ether1* 1034 F: drivers/net/ethernet/i825xx/ether1*
1035 F: drivers/net/ethernet/seeq/ether3* 1035 F: drivers/net/ethernet/seeq/ether3*
1036 F: drivers/scsi/arm/ 1036 F: drivers/scsi/arm/
1037 1037
1038 ARM/SHARK MACHINE SUPPORT 1038 ARM/SHARK MACHINE SUPPORT
1039 M: Alexander Schulz <alex@shark-linux.de> 1039 M: Alexander Schulz <alex@shark-linux.de>
1040 W: http://www.shark-linux.de/shark.html 1040 W: http://www.shark-linux.de/shark.html
1041 S: Maintained 1041 S: Maintained
1042 1042
1043 ARM/SAMSUNG ARM ARCHITECTURES 1043 ARM/SAMSUNG ARM ARCHITECTURES
1044 M: Ben Dooks <ben-linux@fluff.org> 1044 M: Ben Dooks <ben-linux@fluff.org>
1045 M: Kukjin Kim <kgene.kim@samsung.com> 1045 M: Kukjin Kim <kgene.kim@samsung.com>
1046 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1046 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1047 L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers) 1047 L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
1048 W: http://www.fluff.org/ben/linux/ 1048 W: http://www.fluff.org/ben/linux/
1049 S: Maintained 1049 S: Maintained
1050 F: arch/arm/plat-samsung/ 1050 F: arch/arm/plat-samsung/
1051 F: arch/arm/plat-s3c24xx/ 1051 F: arch/arm/plat-s3c24xx/
1052 F: arch/arm/plat-s5p/ 1052 F: arch/arm/plat-s5p/
1053 F: arch/arm/mach-s3c24*/ 1053 F: arch/arm/mach-s3c24*/
1054 F: arch/arm/mach-s3c64xx/ 1054 F: arch/arm/mach-s3c64xx/
1055 F: drivers/*/*s3c2410* 1055 F: drivers/*/*s3c2410*
1056 F: drivers/*/*/*s3c2410* 1056 F: drivers/*/*/*s3c2410*
1057 F: drivers/spi/spi-s3c* 1057 F: drivers/spi/spi-s3c*
1058 F: sound/soc/samsung/* 1058 F: sound/soc/samsung/*
1059 1059
1060 ARM/S5P EXYNOS ARM ARCHITECTURES 1060 ARM/S5P EXYNOS ARM ARCHITECTURES
1061 M: Kukjin Kim <kgene.kim@samsung.com> 1061 M: Kukjin Kim <kgene.kim@samsung.com>
1062 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1062 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1063 L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers) 1063 L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
1064 S: Maintained 1064 S: Maintained
1065 F: arch/arm/mach-s5p*/ 1065 F: arch/arm/mach-s5p*/
1066 F: arch/arm/mach-exynos*/ 1066 F: arch/arm/mach-exynos*/
1067 1067
1068 ARM/SAMSUNG MOBILE MACHINE SUPPORT 1068 ARM/SAMSUNG MOBILE MACHINE SUPPORT
1069 M: Kyungmin Park <kyungmin.park@samsung.com> 1069 M: Kyungmin Park <kyungmin.park@samsung.com>
1070 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1070 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1071 S: Maintained 1071 S: Maintained
1072 F: arch/arm/mach-s5pv210/mach-aquila.c 1072 F: arch/arm/mach-s5pv210/mach-aquila.c
1073 F: arch/arm/mach-s5pv210/mach-goni.c 1073 F: arch/arm/mach-s5pv210/mach-goni.c
1074 F: arch/arm/mach-exynos/mach-universal_c210.c 1074 F: arch/arm/mach-exynos/mach-universal_c210.c
1075 F: arch/arm/mach-exynos/mach-nuri.c 1075 F: arch/arm/mach-exynos/mach-nuri.c
1076 1076
1077 ARM/SAMSUNG S5P SERIES FIMC SUPPORT 1077 ARM/SAMSUNG S5P SERIES FIMC SUPPORT
1078 M: Kyungmin Park <kyungmin.park@samsung.com> 1078 M: Kyungmin Park <kyungmin.park@samsung.com>
1079 M: Sylwester Nawrocki <s.nawrocki@samsung.com> 1079 M: Sylwester Nawrocki <s.nawrocki@samsung.com>
1080 L: linux-arm-kernel@lists.infradead.org 1080 L: linux-arm-kernel@lists.infradead.org
1081 L: linux-media@vger.kernel.org 1081 L: linux-media@vger.kernel.org
1082 S: Maintained 1082 S: Maintained
1083 F: arch/arm/plat-s5p/dev-fimc* 1083 F: arch/arm/plat-s5p/dev-fimc*
1084 F: arch/arm/plat-samsung/include/plat/*fimc* 1084 F: arch/arm/plat-samsung/include/plat/*fimc*
1085 F: drivers/media/video/s5p-fimc/ 1085 F: drivers/media/video/s5p-fimc/
1086 1086
1087 ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT 1087 ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT
1088 M: Kyungmin Park <kyungmin.park@samsung.com> 1088 M: Kyungmin Park <kyungmin.park@samsung.com>
1089 M: Kamil Debski <k.debski@samsung.com> 1089 M: Kamil Debski <k.debski@samsung.com>
1090 M: Jeongtae Park <jtp.park@samsung.com> 1090 M: Jeongtae Park <jtp.park@samsung.com>
1091 L: linux-arm-kernel@lists.infradead.org 1091 L: linux-arm-kernel@lists.infradead.org
1092 L: linux-media@vger.kernel.org 1092 L: linux-media@vger.kernel.org
1093 S: Maintained 1093 S: Maintained
1094 F: arch/arm/plat-s5p/dev-mfc.c 1094 F: arch/arm/plat-s5p/dev-mfc.c
1095 F: drivers/media/video/s5p-mfc/ 1095 F: drivers/media/video/s5p-mfc/
1096 1096
1097 ARM/SAMSUNG S5P SERIES TV SUBSYSTEM SUPPORT 1097 ARM/SAMSUNG S5P SERIES TV SUBSYSTEM SUPPORT
1098 M: Kyungmin Park <kyungmin.park@samsung.com> 1098 M: Kyungmin Park <kyungmin.park@samsung.com>
1099 M: Tomasz Stanislawski <t.stanislaws@samsung.com> 1099 M: Tomasz Stanislawski <t.stanislaws@samsung.com>
1100 L: linux-arm-kernel@lists.infradead.org 1100 L: linux-arm-kernel@lists.infradead.org
1101 L: linux-media@vger.kernel.org 1101 L: linux-media@vger.kernel.org
1102 S: Maintained 1102 S: Maintained
1103 F: drivers/media/video/s5p-tv/ 1103 F: drivers/media/video/s5p-tv/
1104 1104
1105 ARM/SHMOBILE ARM ARCHITECTURE 1105 ARM/SHMOBILE ARM ARCHITECTURE
1106 M: Paul Mundt <lethal@linux-sh.org> 1106 M: Paul Mundt <lethal@linux-sh.org>
1107 M: Magnus Damm <magnus.damm@gmail.com> 1107 M: Magnus Damm <magnus.damm@gmail.com>
1108 L: linux-sh@vger.kernel.org 1108 L: linux-sh@vger.kernel.org
1109 W: http://oss.renesas.com 1109 W: http://oss.renesas.com
1110 Q: http://patchwork.kernel.org/project/linux-sh/list/ 1110 Q: http://patchwork.kernel.org/project/linux-sh/list/
1111 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git rmobile-latest 1111 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git rmobile-latest
1112 S: Supported 1112 S: Supported
1113 F: arch/arm/mach-shmobile/ 1113 F: arch/arm/mach-shmobile/
1114 F: drivers/sh/ 1114 F: drivers/sh/
1115 1115
1116 ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT 1116 ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
1117 M: Lennert Buytenhek <kernel@wantstofly.org> 1117 M: Lennert Buytenhek <kernel@wantstofly.org>
1118 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1118 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1119 S: Maintained 1119 S: Maintained
1120 1120
1121 ARM/TETON BGA MACHINE SUPPORT 1121 ARM/TETON BGA MACHINE SUPPORT
1122 M: "Mark F. Brown" <mark.brown314@gmail.com> 1122 M: "Mark F. Brown" <mark.brown314@gmail.com>
1123 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1123 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1124 S: Maintained 1124 S: Maintained
1125 1125
1126 ARM/THECUS N2100 MACHINE SUPPORT 1126 ARM/THECUS N2100 MACHINE SUPPORT
1127 M: Lennert Buytenhek <kernel@wantstofly.org> 1127 M: Lennert Buytenhek <kernel@wantstofly.org>
1128 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1128 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1129 S: Maintained 1129 S: Maintained
1130 1130
1131 ARM/NUVOTON W90X900 ARM ARCHITECTURE 1131 ARM/NUVOTON W90X900 ARM ARCHITECTURE
1132 M: Wan ZongShun <mcuos.com@gmail.com> 1132 M: Wan ZongShun <mcuos.com@gmail.com>
1133 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1133 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1134 W: http://www.mcuos.com 1134 W: http://www.mcuos.com
1135 S: Maintained 1135 S: Maintained
1136 F: arch/arm/mach-w90x900/ 1136 F: arch/arm/mach-w90x900/
1137 F: drivers/input/keyboard/w90p910_keypad.c 1137 F: drivers/input/keyboard/w90p910_keypad.c
1138 F: drivers/input/touchscreen/w90p910_ts.c 1138 F: drivers/input/touchscreen/w90p910_ts.c
1139 F: drivers/watchdog/nuc900_wdt.c 1139 F: drivers/watchdog/nuc900_wdt.c
1140 F: drivers/net/ethernet/nuvoton/w90p910_ether.c 1140 F: drivers/net/ethernet/nuvoton/w90p910_ether.c
1141 F: drivers/mtd/nand/nuc900_nand.c 1141 F: drivers/mtd/nand/nuc900_nand.c
1142 F: drivers/rtc/rtc-nuc900.c 1142 F: drivers/rtc/rtc-nuc900.c
1143 F: drivers/spi/spi-nuc900.c 1143 F: drivers/spi/spi-nuc900.c
1144 F: drivers/usb/host/ehci-w90x900.c 1144 F: drivers/usb/host/ehci-w90x900.c
1145 F: drivers/video/nuc900fb.c 1145 F: drivers/video/nuc900fb.c
1146 1146
1147 ARM/U300 MACHINE SUPPORT 1147 ARM/U300 MACHINE SUPPORT
1148 M: Linus Walleij <linus.walleij@stericsson.com> 1148 M: Linus Walleij <linus.walleij@stericsson.com>
1149 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1149 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1150 S: Supported 1150 S: Supported
1151 F: arch/arm/mach-u300/ 1151 F: arch/arm/mach-u300/
1152 F: drivers/i2c/busses/i2c-stu300.c 1152 F: drivers/i2c/busses/i2c-stu300.c
1153 F: drivers/rtc/rtc-coh901331.c 1153 F: drivers/rtc/rtc-coh901331.c
1154 F: drivers/watchdog/coh901327_wdt.c 1154 F: drivers/watchdog/coh901327_wdt.c
1155 F: drivers/dma/coh901318* 1155 F: drivers/dma/coh901318*
1156 F: drivers/mfd/ab3100* 1156 F: drivers/mfd/ab3100*
1157 F: drivers/rtc/rtc-ab3100.c 1157 F: drivers/rtc/rtc-ab3100.c
1158 F: drivers/rtc/rtc-coh901331.c 1158 F: drivers/rtc/rtc-coh901331.c
1159 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git 1159 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
1160 1160
1161 ARM/Ux500 ARM ARCHITECTURE 1161 ARM/Ux500 ARM ARCHITECTURE
1162 M: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> 1162 M: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
1163 M: Linus Walleij <linus.walleij@stericsson.com> 1163 M: Linus Walleij <linus.walleij@stericsson.com>
1164 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1164 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1165 S: Maintained 1165 S: Maintained
1166 F: arch/arm/mach-ux500/ 1166 F: arch/arm/mach-ux500/
1167 F: drivers/dma/ste_dma40* 1167 F: drivers/dma/ste_dma40*
1168 F: drivers/mfd/abx500* 1168 F: drivers/mfd/abx500*
1169 F: drivers/mfd/ab8500* 1169 F: drivers/mfd/ab8500*
1170 F: drivers/mfd/stmpe* 1170 F: drivers/mfd/stmpe*
1171 F: drivers/rtc/rtc-ab8500.c 1171 F: drivers/rtc/rtc-ab8500.c
1172 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git 1172 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
1173 1173
1174 ARM/VFP SUPPORT 1174 ARM/VFP SUPPORT
1175 M: Russell King <linux@arm.linux.org.uk> 1175 M: Russell King <linux@arm.linux.org.uk>
1176 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1176 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1177 W: http://www.arm.linux.org.uk/ 1177 W: http://www.arm.linux.org.uk/
1178 S: Maintained 1178 S: Maintained
1179 F: arch/arm/vfp/ 1179 F: arch/arm/vfp/
1180 1180
1181 ARM/VOIPAC PXA270 SUPPORT 1181 ARM/VOIPAC PXA270 SUPPORT
1182 M: Marek Vasut <marek.vasut@gmail.com> 1182 M: Marek Vasut <marek.vasut@gmail.com>
1183 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1183 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1184 S: Maintained 1184 S: Maintained
1185 F: arch/arm/mach-pxa/vpac270.c 1185 F: arch/arm/mach-pxa/vpac270.c
1186 F: arch/arm/mach-pxa/include/mach/vpac270.h 1186 F: arch/arm/mach-pxa/include/mach/vpac270.h
1187 1187
1188 ARM/ZIPIT Z2 SUPPORT 1188 ARM/ZIPIT Z2 SUPPORT
1189 M: Marek Vasut <marek.vasut@gmail.com> 1189 M: Marek Vasut <marek.vasut@gmail.com>
1190 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1190 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1191 S: Maintained 1191 S: Maintained
1192 F: arch/arm/mach-pxa/z2.c 1192 F: arch/arm/mach-pxa/z2.c
1193 F: arch/arm/mach-pxa/include/mach/z2.h 1193 F: arch/arm/mach-pxa/include/mach/z2.h
1194 1194
1195 ASC7621 HARDWARE MONITOR DRIVER 1195 ASC7621 HARDWARE MONITOR DRIVER
1196 M: George Joseph <george.joseph@fairview5.com> 1196 M: George Joseph <george.joseph@fairview5.com>
1197 L: lm-sensors@lm-sensors.org 1197 L: lm-sensors@lm-sensors.org
1198 S: Maintained 1198 S: Maintained
1199 F: Documentation/hwmon/asc7621 1199 F: Documentation/hwmon/asc7621
1200 F: drivers/hwmon/asc7621.c 1200 F: drivers/hwmon/asc7621.c
1201 1201
1202 ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS 1202 ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
1203 M: Corentin Chary <corentincj@iksaif.net> 1203 M: Corentin Chary <corentincj@iksaif.net>
1204 L: acpi4asus-user@lists.sourceforge.net 1204 L: acpi4asus-user@lists.sourceforge.net
1205 L: platform-driver-x86@vger.kernel.org 1205 L: platform-driver-x86@vger.kernel.org
1206 W: http://acpi4asus.sf.net 1206 W: http://acpi4asus.sf.net
1207 S: Maintained 1207 S: Maintained
1208 F: drivers/platform/x86/asus*.c 1208 F: drivers/platform/x86/asus*.c
1209 F: drivers/platform/x86/eeepc*.c 1209 F: drivers/platform/x86/eeepc*.c
1210 1210
1211 ASUS ASB100 HARDWARE MONITOR DRIVER 1211 ASUS ASB100 HARDWARE MONITOR DRIVER
1212 M: "Mark M. Hoffman" <mhoffman@lightlink.com> 1212 M: "Mark M. Hoffman" <mhoffman@lightlink.com>
1213 L: lm-sensors@lm-sensors.org 1213 L: lm-sensors@lm-sensors.org
1214 S: Maintained 1214 S: Maintained
1215 F: drivers/hwmon/asb100.c 1215 F: drivers/hwmon/asb100.c
1216 1216
1217 ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API 1217 ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API
1218 M: Dan Williams <dan.j.williams@intel.com> 1218 M: Dan Williams <dan.j.williams@intel.com>
1219 W: http://sourceforge.net/projects/xscaleiop 1219 W: http://sourceforge.net/projects/xscaleiop
1220 S: Supported 1220 S: Supported
1221 F: Documentation/crypto/async-tx-api.txt 1221 F: Documentation/crypto/async-tx-api.txt
1222 F: crypto/async_tx/ 1222 F: crypto/async_tx/
1223 F: drivers/dma/ 1223 F: drivers/dma/
1224 F: include/linux/dmaengine.h 1224 F: include/linux/dmaengine.h
1225 F: include/linux/async_tx.h 1225 F: include/linux/async_tx.h
1226 1226
1227 AT24 EEPROM DRIVER 1227 AT24 EEPROM DRIVER
1228 M: Wolfram Sang <w.sang@pengutronix.de> 1228 M: Wolfram Sang <w.sang@pengutronix.de>
1229 L: linux-i2c@vger.kernel.org 1229 L: linux-i2c@vger.kernel.org
1230 S: Maintained 1230 S: Maintained
1231 F: drivers/misc/eeprom/at24.c 1231 F: drivers/misc/eeprom/at24.c
1232 F: include/linux/i2c/at24.h 1232 F: include/linux/i2c/at24.h
1233 1233
1234 ATA OVER ETHERNET (AOE) DRIVER 1234 ATA OVER ETHERNET (AOE) DRIVER
1235 M: "Ed L. Cashin" <ecashin@coraid.com> 1235 M: "Ed L. Cashin" <ecashin@coraid.com>
1236 W: http://www.coraid.com/support/linux 1236 W: http://www.coraid.com/support/linux
1237 S: Supported 1237 S: Supported
1238 F: Documentation/aoe/ 1238 F: Documentation/aoe/
1239 F: drivers/block/aoe/ 1239 F: drivers/block/aoe/
1240 1240
1241 ATHEROS ATH GENERIC UTILITIES 1241 ATHEROS ATH GENERIC UTILITIES
1242 M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com> 1242 M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
1243 L: linux-wireless@vger.kernel.org 1243 L: linux-wireless@vger.kernel.org
1244 S: Supported 1244 S: Supported
1245 F: drivers/net/wireless/ath/* 1245 F: drivers/net/wireless/ath/*
1246 1246
1247 ATHEROS ATH5K WIRELESS DRIVER 1247 ATHEROS ATH5K WIRELESS DRIVER
1248 M: Jiri Slaby <jirislaby@gmail.com> 1248 M: Jiri Slaby <jirislaby@gmail.com>
1249 M: Nick Kossifidis <mickflemm@gmail.com> 1249 M: Nick Kossifidis <mickflemm@gmail.com>
1250 M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com> 1250 M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
1251 M: Bob Copeland <me@bobcopeland.com> 1251 M: Bob Copeland <me@bobcopeland.com>
1252 L: linux-wireless@vger.kernel.org 1252 L: linux-wireless@vger.kernel.org
1253 L: ath5k-devel@lists.ath5k.org 1253 L: ath5k-devel@lists.ath5k.org
1254 W: http://wireless.kernel.org/en/users/Drivers/ath5k 1254 W: http://wireless.kernel.org/en/users/Drivers/ath5k
1255 S: Maintained 1255 S: Maintained
1256 F: drivers/net/wireless/ath/ath5k/ 1256 F: drivers/net/wireless/ath/ath5k/
1257 1257
1258 ATHEROS ATH6KL WIRELESS DRIVER 1258 ATHEROS ATH6KL WIRELESS DRIVER
1259 M: Kalle Valo <kvalo@qca.qualcomm.com> 1259 M: Kalle Valo <kvalo@qca.qualcomm.com>
1260 L: linux-wireless@vger.kernel.org 1260 L: linux-wireless@vger.kernel.org
1261 W: http://wireless.kernel.org/en/users/Drivers/ath6kl 1261 W: http://wireless.kernel.org/en/users/Drivers/ath6kl
1262 T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath6kl.git 1262 T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath6kl.git
1263 S: Supported 1263 S: Supported
1264 F: drivers/net/wireless/ath/ath6kl/ 1264 F: drivers/net/wireless/ath/ath6kl/
1265 1265
1266 ATHEROS ATH9K WIRELESS DRIVER 1266 ATHEROS ATH9K WIRELESS DRIVER
1267 M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com> 1267 M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
1268 M: Jouni Malinen <jouni@qca.qualcomm.com> 1268 M: Jouni Malinen <jouni@qca.qualcomm.com>
1269 M: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> 1269 M: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
1270 M: Senthil Balasubramanian <senthilb@qca.qualcomm.com> 1270 M: Senthil Balasubramanian <senthilb@qca.qualcomm.com>
1271 L: linux-wireless@vger.kernel.org 1271 L: linux-wireless@vger.kernel.org
1272 L: ath9k-devel@lists.ath9k.org 1272 L: ath9k-devel@lists.ath9k.org
1273 W: http://wireless.kernel.org/en/users/Drivers/ath9k 1273 W: http://wireless.kernel.org/en/users/Drivers/ath9k
1274 S: Supported 1274 S: Supported
1275 F: drivers/net/wireless/ath/ath9k/ 1275 F: drivers/net/wireless/ath/ath9k/
1276 1276
1277 CARL9170 LINUX COMMUNITY WIRELESS DRIVER 1277 CARL9170 LINUX COMMUNITY WIRELESS DRIVER
1278 M: Christian Lamparter <chunkeey@googlemail.com> 1278 M: Christian Lamparter <chunkeey@googlemail.com>
1279 L: linux-wireless@vger.kernel.org 1279 L: linux-wireless@vger.kernel.org
1280 W: http://wireless.kernel.org/en/users/Drivers/carl9170 1280 W: http://wireless.kernel.org/en/users/Drivers/carl9170
1281 S: Maintained 1281 S: Maintained
1282 F: drivers/net/wireless/ath/carl9170/ 1282 F: drivers/net/wireless/ath/carl9170/
1283 1283
1284 ATK0110 HWMON DRIVER 1284 ATK0110 HWMON DRIVER
1285 M: Luca Tettamanti <kronos.it@gmail.com> 1285 M: Luca Tettamanti <kronos.it@gmail.com>
1286 L: lm-sensors@lm-sensors.org 1286 L: lm-sensors@lm-sensors.org
1287 S: Maintained 1287 S: Maintained
1288 F: drivers/hwmon/asus_atk0110.c 1288 F: drivers/hwmon/asus_atk0110.c
1289 1289
1290 ATI_REMOTE2 DRIVER 1290 ATI_REMOTE2 DRIVER
1291 M: Ville Syrjala <syrjala@sci.fi> 1291 M: Ville Syrjala <syrjala@sci.fi>
1292 S: Maintained 1292 S: Maintained
1293 F: drivers/input/misc/ati_remote2.c 1293 F: drivers/input/misc/ati_remote2.c
1294 1294
1295 ATLX ETHERNET DRIVERS 1295 ATLX ETHERNET DRIVERS
1296 M: Jay Cliburn <jcliburn@gmail.com> 1296 M: Jay Cliburn <jcliburn@gmail.com>
1297 M: Chris Snook <chris.snook@gmail.com> 1297 M: Chris Snook <chris.snook@gmail.com>
1298 L: netdev@vger.kernel.org 1298 L: netdev@vger.kernel.org
1299 W: http://sourceforge.net/projects/atl1 1299 W: http://sourceforge.net/projects/atl1
1300 W: http://atl1.sourceforge.net 1300 W: http://atl1.sourceforge.net
1301 S: Maintained 1301 S: Maintained
1302 F: drivers/net/ethernet/atheros/ 1302 F: drivers/net/ethernet/atheros/
1303 1303
1304 ATM 1304 ATM
1305 M: Chas Williams <chas@cmf.nrl.navy.mil> 1305 M: Chas Williams <chas@cmf.nrl.navy.mil>
1306 L: linux-atm-general@lists.sourceforge.net (moderated for non-subscribers) 1306 L: linux-atm-general@lists.sourceforge.net (moderated for non-subscribers)
1307 L: netdev@vger.kernel.org 1307 L: netdev@vger.kernel.org
1308 W: http://linux-atm.sourceforge.net 1308 W: http://linux-atm.sourceforge.net
1309 S: Maintained 1309 S: Maintained
1310 F: drivers/atm/ 1310 F: drivers/atm/
1311 F: include/linux/atm* 1311 F: include/linux/atm*
1312 1312
1313 ATMEL AT91 MCI DRIVER 1313 ATMEL AT91 MCI DRIVER
1314 M: Nicolas Ferre <nicolas.ferre@atmel.com> 1314 M: Nicolas Ferre <nicolas.ferre@atmel.com>
1315 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1315 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1316 W: http://www.atmel.com/products/AT91/ 1316 W: http://www.atmel.com/products/AT91/
1317 W: http://www.at91.com/ 1317 W: http://www.at91.com/
1318 S: Maintained 1318 S: Maintained
1319 F: drivers/mmc/host/at91_mci.c 1319 F: drivers/mmc/host/at91_mci.c
1320 1320
1321 ATMEL AT91 / AT32 MCI DRIVER 1321 ATMEL AT91 / AT32 MCI DRIVER
1322 M: Nicolas Ferre <nicolas.ferre@atmel.com> 1322 M: Nicolas Ferre <nicolas.ferre@atmel.com>
1323 S: Maintained 1323 S: Maintained
1324 F: drivers/mmc/host/atmel-mci.c 1324 F: drivers/mmc/host/atmel-mci.c
1325 F: drivers/mmc/host/atmel-mci-regs.h 1325 F: drivers/mmc/host/atmel-mci-regs.h
1326 1326
1327 ATMEL AT91 / AT32 SERIAL DRIVER 1327 ATMEL AT91 / AT32 SERIAL DRIVER
1328 M: Nicolas Ferre <nicolas.ferre@atmel.com> 1328 M: Nicolas Ferre <nicolas.ferre@atmel.com>
1329 S: Supported 1329 S: Supported
1330 F: drivers/tty/serial/atmel_serial.c 1330 F: drivers/tty/serial/atmel_serial.c
1331 1331
1332 ATMEL LCDFB DRIVER 1332 ATMEL LCDFB DRIVER
1333 M: Nicolas Ferre <nicolas.ferre@atmel.com> 1333 M: Nicolas Ferre <nicolas.ferre@atmel.com>
1334 L: linux-fbdev@vger.kernel.org 1334 L: linux-fbdev@vger.kernel.org
1335 S: Maintained 1335 S: Maintained
1336 F: drivers/video/atmel_lcdfb.c 1336 F: drivers/video/atmel_lcdfb.c
1337 F: include/video/atmel_lcdc.h 1337 F: include/video/atmel_lcdc.h
1338 1338
1339 ATMEL MACB ETHERNET DRIVER 1339 ATMEL MACB ETHERNET DRIVER
1340 M: Nicolas Ferre <nicolas.ferre@atmel.com> 1340 M: Nicolas Ferre <nicolas.ferre@atmel.com>
1341 S: Supported 1341 S: Supported
1342 F: drivers/net/ethernet/cadence/ 1342 F: drivers/net/ethernet/cadence/
1343 1343
1344 ATMEL SPI DRIVER 1344 ATMEL SPI DRIVER
1345 M: Nicolas Ferre <nicolas.ferre@atmel.com> 1345 M: Nicolas Ferre <nicolas.ferre@atmel.com>
1346 S: Supported 1346 S: Supported
1347 F: drivers/spi/spi-atmel.* 1347 F: drivers/spi/spi-atmel.*
1348 1348
1349 ATMEL USBA UDC DRIVER 1349 ATMEL USBA UDC DRIVER
1350 M: Nicolas Ferre <nicolas.ferre@atmel.com> 1350 M: Nicolas Ferre <nicolas.ferre@atmel.com>
1351 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1351 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
1352 W: http://avr32linux.org/twiki/bin/view/Main/AtmelUsbDeviceDriver 1352 W: http://avr32linux.org/twiki/bin/view/Main/AtmelUsbDeviceDriver
1353 S: Supported 1353 S: Supported
1354 F: drivers/usb/gadget/atmel_usba_udc.* 1354 F: drivers/usb/gadget/atmel_usba_udc.*
1355 1355
1356 ATMEL WIRELESS DRIVER 1356 ATMEL WIRELESS DRIVER
1357 M: Simon Kelley <simon@thekelleys.org.uk> 1357 M: Simon Kelley <simon@thekelleys.org.uk>
1358 L: linux-wireless@vger.kernel.org 1358 L: linux-wireless@vger.kernel.org
1359 W: http://www.thekelleys.org.uk/atmel 1359 W: http://www.thekelleys.org.uk/atmel
1360 W: http://atmelwlandriver.sourceforge.net/ 1360 W: http://atmelwlandriver.sourceforge.net/
1361 S: Maintained 1361 S: Maintained
1362 F: drivers/net/wireless/atmel* 1362 F: drivers/net/wireless/atmel*
1363 1363
1364 AUDIT SUBSYSTEM 1364 AUDIT SUBSYSTEM
1365 M: Al Viro <viro@zeniv.linux.org.uk> 1365 M: Al Viro <viro@zeniv.linux.org.uk>
1366 M: Eric Paris <eparis@redhat.com> 1366 M: Eric Paris <eparis@redhat.com>
1367 L: linux-audit@redhat.com (subscribers-only) 1367 L: linux-audit@redhat.com (subscribers-only)
1368 W: http://people.redhat.com/sgrubb/audit/ 1368 W: http://people.redhat.com/sgrubb/audit/
1369 T: git git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current.git 1369 T: git git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current.git
1370 S: Maintained 1370 S: Maintained
1371 F: include/linux/audit.h 1371 F: include/linux/audit.h
1372 F: kernel/audit* 1372 F: kernel/audit*
1373 1373
1374 AUXILIARY DISPLAY DRIVERS 1374 AUXILIARY DISPLAY DRIVERS
1375 M: Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com> 1375 M: Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
1376 W: http://miguelojeda.es/auxdisplay.htm 1376 W: http://miguelojeda.es/auxdisplay.htm
1377 W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm 1377 W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm
1378 S: Maintained 1378 S: Maintained
1379 F: drivers/auxdisplay/ 1379 F: drivers/auxdisplay/
1380 F: include/linux/cfag12864b.h 1380 F: include/linux/cfag12864b.h
1381 1381
1382 AVR32 ARCHITECTURE 1382 AVR32 ARCHITECTURE
1383 M: Haavard Skinnemoen <hskinnemoen@gmail.com> 1383 M: Haavard Skinnemoen <hskinnemoen@gmail.com>
1384 M: Hans-Christian Egtvedt <egtvedt@samfundet.no> 1384 M: Hans-Christian Egtvedt <egtvedt@samfundet.no>
1385 W: http://www.atmel.com/products/AVR32/ 1385 W: http://www.atmel.com/products/AVR32/
1386 W: http://avr32linux.org/ 1386 W: http://avr32linux.org/
1387 W: http://avrfreaks.net/ 1387 W: http://avrfreaks.net/
1388 S: Maintained 1388 S: Maintained
1389 F: arch/avr32/ 1389 F: arch/avr32/
1390 1390
1391 AVR32/AT32AP MACHINE SUPPORT 1391 AVR32/AT32AP MACHINE SUPPORT
1392 M: Haavard Skinnemoen <hskinnemoen@gmail.com> 1392 M: Haavard Skinnemoen <hskinnemoen@gmail.com>
1393 M: Hans-Christian Egtvedt <egtvedt@samfundet.no> 1393 M: Hans-Christian Egtvedt <egtvedt@samfundet.no>
1394 S: Maintained 1394 S: Maintained
1395 F: arch/avr32/mach-at32ap/ 1395 F: arch/avr32/mach-at32ap/
1396 1396
1397 AX.25 NETWORK LAYER 1397 AX.25 NETWORK LAYER
1398 M: Ralf Baechle <ralf@linux-mips.org> 1398 M: Ralf Baechle <ralf@linux-mips.org>
1399 L: linux-hams@vger.kernel.org 1399 L: linux-hams@vger.kernel.org
1400 W: http://www.linux-ax25.org/ 1400 W: http://www.linux-ax25.org/
1401 S: Maintained 1401 S: Maintained
1402 F: include/linux/ax25.h 1402 F: include/linux/ax25.h
1403 F: include/net/ax25.h 1403 F: include/net/ax25.h
1404 F: net/ax25/ 1404 F: net/ax25/
1405 1405
1406 B43 WIRELESS DRIVER 1406 B43 WIRELESS DRIVER
1407 M: Stefano Brivio <stefano.brivio@polimi.it> 1407 M: Stefano Brivio <stefano.brivio@polimi.it>
1408 L: linux-wireless@vger.kernel.org 1408 L: linux-wireless@vger.kernel.org
1409 L: b43-dev@lists.infradead.org (moderated for non-subscribers) 1409 L: b43-dev@lists.infradead.org (moderated for non-subscribers)
1410 W: http://linuxwireless.org/en/users/Drivers/b43 1410 W: http://linuxwireless.org/en/users/Drivers/b43
1411 S: Maintained 1411 S: Maintained
1412 F: drivers/net/wireless/b43/ 1412 F: drivers/net/wireless/b43/
1413 1413
1414 B43LEGACY WIRELESS DRIVER 1414 B43LEGACY WIRELESS DRIVER
1415 M: Larry Finger <Larry.Finger@lwfinger.net> 1415 M: Larry Finger <Larry.Finger@lwfinger.net>
1416 M: Stefano Brivio <stefano.brivio@polimi.it> 1416 M: Stefano Brivio <stefano.brivio@polimi.it>
1417 L: linux-wireless@vger.kernel.org 1417 L: linux-wireless@vger.kernel.org
1418 W: http://linuxwireless.org/en/users/Drivers/b43 1418 W: http://linuxwireless.org/en/users/Drivers/b43
1419 S: Maintained 1419 S: Maintained
1420 F: drivers/net/wireless/b43legacy/ 1420 F: drivers/net/wireless/b43legacy/
1421 1421
1422 BACKLIGHT CLASS/SUBSYSTEM 1422 BACKLIGHT CLASS/SUBSYSTEM
1423 M: Richard Purdie <rpurdie@rpsys.net> 1423 M: Richard Purdie <rpurdie@rpsys.net>
1424 S: Maintained 1424 S: Maintained
1425 F: drivers/video/backlight/ 1425 F: drivers/video/backlight/
1426 F: include/linux/backlight.h 1426 F: include/linux/backlight.h
1427 1427
1428 BATMAN ADVANCED 1428 BATMAN ADVANCED
1429 M: Marek Lindner <lindner_marek@yahoo.de> 1429 M: Marek Lindner <lindner_marek@yahoo.de>
1430 M: Simon Wunderlich <siwu@hrz.tu-chemnitz.de> 1430 M: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
1431 L: b.a.t.m.a.n@lists.open-mesh.org 1431 L: b.a.t.m.a.n@lists.open-mesh.org
1432 W: http://www.open-mesh.org/ 1432 W: http://www.open-mesh.org/
1433 S: Maintained 1433 S: Maintained
1434 F: net/batman-adv/ 1434 F: net/batman-adv/
1435 1435
1436 BAYCOM/HDLCDRV DRIVERS FOR AX.25 1436 BAYCOM/HDLCDRV DRIVERS FOR AX.25
1437 M: Thomas Sailer <t.sailer@alumni.ethz.ch> 1437 M: Thomas Sailer <t.sailer@alumni.ethz.ch>
1438 L: linux-hams@vger.kernel.org 1438 L: linux-hams@vger.kernel.org
1439 W: http://www.baycom.org/~tom/ham/ham.html 1439 W: http://www.baycom.org/~tom/ham/ham.html
1440 S: Maintained 1440 S: Maintained
1441 F: drivers/net/hamradio/baycom* 1441 F: drivers/net/hamradio/baycom*
1442 1442
1443 BEFS FILE SYSTEM 1443 BEFS FILE SYSTEM
1444 S: Orphan 1444 S: Orphan
1445 F: Documentation/filesystems/befs.txt 1445 F: Documentation/filesystems/befs.txt
1446 F: fs/befs/ 1446 F: fs/befs/
1447 1447
1448 BFS FILE SYSTEM 1448 BFS FILE SYSTEM
1449 M: "Tigran A. Aivazian" <tigran@aivazian.fsnet.co.uk> 1449 M: "Tigran A. Aivazian" <tigran@aivazian.fsnet.co.uk>
1450 S: Maintained 1450 S: Maintained
1451 F: Documentation/filesystems/bfs.txt 1451 F: Documentation/filesystems/bfs.txt
1452 F: fs/bfs/ 1452 F: fs/bfs/
1453 F: include/linux/bfs_fs.h 1453 F: include/linux/bfs_fs.h
1454 1454
1455 BLACKFIN ARCHITECTURE 1455 BLACKFIN ARCHITECTURE
1456 M: Mike Frysinger <vapier@gentoo.org> 1456 M: Mike Frysinger <vapier@gentoo.org>
1457 L: uclinux-dist-devel@blackfin.uclinux.org 1457 L: uclinux-dist-devel@blackfin.uclinux.org
1458 W: http://blackfin.uclinux.org 1458 W: http://blackfin.uclinux.org
1459 S: Supported 1459 S: Supported
1460 F: arch/blackfin/ 1460 F: arch/blackfin/
1461 1461
1462 BLACKFIN EMAC DRIVER 1462 BLACKFIN EMAC DRIVER
1463 L: uclinux-dist-devel@blackfin.uclinux.org 1463 L: uclinux-dist-devel@blackfin.uclinux.org
1464 W: http://blackfin.uclinux.org 1464 W: http://blackfin.uclinux.org
1465 S: Supported 1465 S: Supported
1466 F: drivers/net/ethernet/adi/ 1466 F: drivers/net/ethernet/adi/
1467 1467
1468 BLACKFIN RTC DRIVER 1468 BLACKFIN RTC DRIVER
1469 M: Mike Frysinger <vapier.adi@gmail.com> 1469 M: Mike Frysinger <vapier.adi@gmail.com>
1470 L: uclinux-dist-devel@blackfin.uclinux.org 1470 L: uclinux-dist-devel@blackfin.uclinux.org
1471 W: http://blackfin.uclinux.org 1471 W: http://blackfin.uclinux.org
1472 S: Supported 1472 S: Supported
1473 F: drivers/rtc/rtc-bfin.c 1473 F: drivers/rtc/rtc-bfin.c
1474 1474
1475 BLACKFIN SDH DRIVER 1475 BLACKFIN SDH DRIVER
1476 M: Cliff Cai <cliff.cai@analog.com> 1476 M: Cliff Cai <cliff.cai@analog.com>
1477 L: uclinux-dist-devel@blackfin.uclinux.org 1477 L: uclinux-dist-devel@blackfin.uclinux.org
1478 W: http://blackfin.uclinux.org 1478 W: http://blackfin.uclinux.org
1479 S: Supported 1479 S: Supported
1480 F: drivers/mmc/host/bfin_sdh.c 1480 F: drivers/mmc/host/bfin_sdh.c
1481 1481
1482 BLACKFIN SERIAL DRIVER 1482 BLACKFIN SERIAL DRIVER
1483 M: Sonic Zhang <sonic.zhang@analog.com> 1483 M: Sonic Zhang <sonic.zhang@analog.com>
1484 L: uclinux-dist-devel@blackfin.uclinux.org 1484 L: uclinux-dist-devel@blackfin.uclinux.org
1485 W: http://blackfin.uclinux.org 1485 W: http://blackfin.uclinux.org
1486 S: Supported 1486 S: Supported
1487 F: drivers/tty/serial/bfin_uart.c 1487 F: drivers/tty/serial/bfin_uart.c
1488 1488
1489 BLACKFIN WATCHDOG DRIVER 1489 BLACKFIN WATCHDOG DRIVER
1490 M: Mike Frysinger <vapier.adi@gmail.com> 1490 M: Mike Frysinger <vapier.adi@gmail.com>
1491 L: uclinux-dist-devel@blackfin.uclinux.org 1491 L: uclinux-dist-devel@blackfin.uclinux.org
1492 W: http://blackfin.uclinux.org 1492 W: http://blackfin.uclinux.org
1493 S: Supported 1493 S: Supported
1494 F: drivers/watchdog/bfin_wdt.c 1494 F: drivers/watchdog/bfin_wdt.c
1495 1495
1496 BLACKFIN I2C TWI DRIVER 1496 BLACKFIN I2C TWI DRIVER
1497 M: Sonic Zhang <sonic.zhang@analog.com> 1497 M: Sonic Zhang <sonic.zhang@analog.com>
1498 L: uclinux-dist-devel@blackfin.uclinux.org 1498 L: uclinux-dist-devel@blackfin.uclinux.org
1499 W: http://blackfin.uclinux.org/ 1499 W: http://blackfin.uclinux.org/
1500 S: Supported 1500 S: Supported
1501 F: drivers/i2c/busses/i2c-bfin-twi.c 1501 F: drivers/i2c/busses/i2c-bfin-twi.c
1502 1502
1503 BLOCK LAYER 1503 BLOCK LAYER
1504 M: Jens Axboe <axboe@kernel.dk> 1504 M: Jens Axboe <axboe@kernel.dk>
1505 T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git 1505 T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git
1506 S: Maintained 1506 S: Maintained
1507 F: block/ 1507 F: block/
1508 1508
1509 BLOCK2MTD DRIVER 1509 BLOCK2MTD DRIVER
1510 M: Joern Engel <joern@lazybastard.org> 1510 M: Joern Engel <joern@lazybastard.org>
1511 L: linux-mtd@lists.infradead.org 1511 L: linux-mtd@lists.infradead.org
1512 S: Maintained 1512 S: Maintained
1513 F: drivers/mtd/devices/block2mtd.c 1513 F: drivers/mtd/devices/block2mtd.c
1514 1514
1515 BLUETOOTH DRIVERS 1515 BLUETOOTH DRIVERS
1516 M: Marcel Holtmann <marcel@holtmann.org> 1516 M: Marcel Holtmann <marcel@holtmann.org>
1517 M: "Gustavo F. Padovan" <padovan@profusion.mobi> 1517 M: "Gustavo F. Padovan" <padovan@profusion.mobi>
1518 L: linux-bluetooth@vger.kernel.org 1518 L: linux-bluetooth@vger.kernel.org
1519 W: http://www.bluez.org/ 1519 W: http://www.bluez.org/
1520 T: git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6.git 1520 T: git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6.git
1521 S: Maintained 1521 S: Maintained
1522 F: drivers/bluetooth/ 1522 F: drivers/bluetooth/
1523 1523
1524 BLUETOOTH SUBSYSTEM 1524 BLUETOOTH SUBSYSTEM
1525 M: Marcel Holtmann <marcel@holtmann.org> 1525 M: Marcel Holtmann <marcel@holtmann.org>
1526 M: "Gustavo F. Padovan" <padovan@profusion.mobi> 1526 M: "Gustavo F. Padovan" <padovan@profusion.mobi>
1527 L: linux-bluetooth@vger.kernel.org 1527 L: linux-bluetooth@vger.kernel.org
1528 W: http://www.bluez.org/ 1528 W: http://www.bluez.org/
1529 T: git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6.git 1529 T: git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6.git
1530 S: Maintained 1530 S: Maintained
1531 F: net/bluetooth/ 1531 F: net/bluetooth/
1532 F: include/net/bluetooth/ 1532 F: include/net/bluetooth/
1533 1533
1534 BONDING DRIVER 1534 BONDING DRIVER
1535 M: Jay Vosburgh <fubar@us.ibm.com> 1535 M: Jay Vosburgh <fubar@us.ibm.com>
1536 M: Andy Gospodarek <andy@greyhouse.net> 1536 M: Andy Gospodarek <andy@greyhouse.net>
1537 L: netdev@vger.kernel.org 1537 L: netdev@vger.kernel.org
1538 W: http://sourceforge.net/projects/bonding/ 1538 W: http://sourceforge.net/projects/bonding/
1539 S: Supported 1539 S: Supported
1540 F: drivers/net/bonding/ 1540 F: drivers/net/bonding/
1541 F: include/linux/if_bonding.h 1541 F: include/linux/if_bonding.h
1542 1542
1543 BROADCOM B44 10/100 ETHERNET DRIVER 1543 BROADCOM B44 10/100 ETHERNET DRIVER
1544 M: Gary Zambrano <zambrano@broadcom.com> 1544 M: Gary Zambrano <zambrano@broadcom.com>
1545 L: netdev@vger.kernel.org 1545 L: netdev@vger.kernel.org
1546 S: Supported 1546 S: Supported
1547 F: drivers/net/ethernet/broadcom/b44.* 1547 F: drivers/net/ethernet/broadcom/b44.*
1548 1548
1549 BROADCOM BNX2 GIGABIT ETHERNET DRIVER 1549 BROADCOM BNX2 GIGABIT ETHERNET DRIVER
1550 M: Michael Chan <mchan@broadcom.com> 1550 M: Michael Chan <mchan@broadcom.com>
1551 L: netdev@vger.kernel.org 1551 L: netdev@vger.kernel.org
1552 S: Supported 1552 S: Supported
1553 F: drivers/net/ethernet/broadcom/bnx2.* 1553 F: drivers/net/ethernet/broadcom/bnx2.*
1554 F: drivers/net/ethernet/broadcom/bnx2_* 1554 F: drivers/net/ethernet/broadcom/bnx2_*
1555 1555
1556 BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER 1556 BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
1557 M: Eilon Greenstein <eilong@broadcom.com> 1557 M: Eilon Greenstein <eilong@broadcom.com>
1558 L: netdev@vger.kernel.org 1558 L: netdev@vger.kernel.org
1559 S: Supported 1559 S: Supported
1560 F: drivers/net/ethernet/broadcom/bnx2x/ 1560 F: drivers/net/ethernet/broadcom/bnx2x/
1561 1561
1562 BROADCOM TG3 GIGABIT ETHERNET DRIVER 1562 BROADCOM TG3 GIGABIT ETHERNET DRIVER
1563 M: Matt Carlson <mcarlson@broadcom.com> 1563 M: Matt Carlson <mcarlson@broadcom.com>
1564 M: Michael Chan <mchan@broadcom.com> 1564 M: Michael Chan <mchan@broadcom.com>
1565 L: netdev@vger.kernel.org 1565 L: netdev@vger.kernel.org
1566 S: Supported 1566 S: Supported
1567 F: drivers/net/ethernet/broadcom/tg3.* 1567 F: drivers/net/ethernet/broadcom/tg3.*
1568 1568
1569 BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER 1569 BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER
1570 M: Brett Rudley <brudley@broadcom.com> 1570 M: Brett Rudley <brudley@broadcom.com>
1571 M: Henry Ptasinski <henryp@broadcom.com> 1571 M: Henry Ptasinski <henryp@broadcom.com>
1572 M: Roland Vossen <rvossen@broadcom.com> 1572 M: Roland Vossen <rvossen@broadcom.com>
1573 M: Arend van Spriel <arend@broadcom.com> 1573 M: Arend van Spriel <arend@broadcom.com>
1574 M: Franky (Zhenhui) Lin <frankyl@broadcom.com> 1574 M: Franky (Zhenhui) Lin <frankyl@broadcom.com>
1575 M: Kan Yan <kanyan@broadcom.com> 1575 M: Kan Yan <kanyan@broadcom.com>
1576 L: linux-wireless@vger.kernel.org 1576 L: linux-wireless@vger.kernel.org
1577 S: Supported 1577 S: Supported
1578 F: drivers/net/wireless/brcm80211/ 1578 F: drivers/net/wireless/brcm80211/
1579 1579
1580 BROADCOM BNX2FC 10 GIGABIT FCOE DRIVER 1580 BROADCOM BNX2FC 10 GIGABIT FCOE DRIVER
1581 M: Bhanu Prakash Gollapudi <bprakash@broadcom.com> 1581 M: Bhanu Prakash Gollapudi <bprakash@broadcom.com>
1582 L: linux-scsi@vger.kernel.org 1582 L: linux-scsi@vger.kernel.org
1583 S: Supported 1583 S: Supported
1584 F: drivers/scsi/bnx2fc/ 1584 F: drivers/scsi/bnx2fc/
1585 1585
1586 BROADCOM SPECIFIC AMBA DRIVER (BCMA) 1586 BROADCOM SPECIFIC AMBA DRIVER (BCMA)
1587 M: Rafaล‚ Miล‚ecki <zajec5@gmail.com> 1587 M: Rafaล‚ Miล‚ecki <zajec5@gmail.com>
1588 L: linux-wireless@vger.kernel.org 1588 L: linux-wireless@vger.kernel.org
1589 S: Maintained 1589 S: Maintained
1590 F: drivers/bcma/ 1590 F: drivers/bcma/
1591 F: include/linux/bcma/ 1591 F: include/linux/bcma/
1592 1592
1593 BROCADE BFA FC SCSI DRIVER 1593 BROCADE BFA FC SCSI DRIVER
1594 M: Jing Huang <huangj@brocade.com> 1594 M: Jing Huang <huangj@brocade.com>
1595 L: linux-scsi@vger.kernel.org 1595 L: linux-scsi@vger.kernel.org
1596 S: Supported 1596 S: Supported
1597 F: drivers/scsi/bfa/ 1597 F: drivers/scsi/bfa/
1598 1598
1599 BROCADE BNA 10 GIGABIT ETHERNET DRIVER 1599 BROCADE BNA 10 GIGABIT ETHERNET DRIVER
1600 M: Rasesh Mody <rmody@brocade.com> 1600 M: Rasesh Mody <rmody@brocade.com>
1601 L: netdev@vger.kernel.org 1601 L: netdev@vger.kernel.org
1602 S: Supported 1602 S: Supported
1603 F: drivers/net/ethernet/brocade/bna/ 1603 F: drivers/net/ethernet/brocade/bna/
1604 1604
1605 BSG (block layer generic sg v4 driver) 1605 BSG (block layer generic sg v4 driver)
1606 M: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> 1606 M: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
1607 L: linux-scsi@vger.kernel.org 1607 L: linux-scsi@vger.kernel.org
1608 S: Supported 1608 S: Supported
1609 F: block/bsg.c 1609 F: block/bsg.c
1610 F: include/linux/bsg.h 1610 F: include/linux/bsg.h
1611 1611
1612 BT87X AUDIO DRIVER 1612 BT87X AUDIO DRIVER
1613 M: Clemens Ladisch <clemens@ladisch.de> 1613 M: Clemens Ladisch <clemens@ladisch.de>
1614 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 1614 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
1615 T: git git://git.alsa-project.org/alsa-kernel.git 1615 T: git git://git.alsa-project.org/alsa-kernel.git
1616 S: Maintained 1616 S: Maintained
1617 F: Documentation/sound/alsa/Bt87x.txt 1617 F: Documentation/sound/alsa/Bt87x.txt
1618 F: sound/pci/bt87x.c 1618 F: sound/pci/bt87x.c
1619 1619
1620 BT8XXGPIO DRIVER 1620 BT8XXGPIO DRIVER
1621 M: Michael Buesch <m@bues.ch> 1621 M: Michael Buesch <m@bues.ch>
1622 W: http://bu3sch.de/btgpio.php 1622 W: http://bu3sch.de/btgpio.php
1623 S: Maintained 1623 S: Maintained
1624 F: drivers/gpio/gpio-bt8xx.c 1624 F: drivers/gpio/gpio-bt8xx.c
1625 1625
1626 BTRFS FILE SYSTEM 1626 BTRFS FILE SYSTEM
1627 M: Chris Mason <chris.mason@oracle.com> 1627 M: Chris Mason <chris.mason@oracle.com>
1628 L: linux-btrfs@vger.kernel.org 1628 L: linux-btrfs@vger.kernel.org
1629 W: http://btrfs.wiki.kernel.org/ 1629 W: http://btrfs.wiki.kernel.org/
1630 Q: http://patchwork.kernel.org/project/linux-btrfs/list/ 1630 Q: http://patchwork.kernel.org/project/linux-btrfs/list/
1631 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable.git 1631 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable.git
1632 S: Maintained 1632 S: Maintained
1633 F: Documentation/filesystems/btrfs.txt 1633 F: Documentation/filesystems/btrfs.txt
1634 F: fs/btrfs/ 1634 F: fs/btrfs/
1635 1635
1636 BTTV VIDEO4LINUX DRIVER 1636 BTTV VIDEO4LINUX DRIVER
1637 M: Mauro Carvalho Chehab <mchehab@infradead.org> 1637 M: Mauro Carvalho Chehab <mchehab@infradead.org>
1638 L: linux-media@vger.kernel.org 1638 L: linux-media@vger.kernel.org
1639 W: http://linuxtv.org 1639 W: http://linuxtv.org
1640 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 1640 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
1641 S: Maintained 1641 S: Maintained
1642 F: Documentation/video4linux/bttv/ 1642 F: Documentation/video4linux/bttv/
1643 F: drivers/media/video/bt8xx/bttv* 1643 F: drivers/media/video/bt8xx/bttv*
1644 1644
1645 C-MEDIA CMI8788 DRIVER 1645 C-MEDIA CMI8788 DRIVER
1646 M: Clemens Ladisch <clemens@ladisch.de> 1646 M: Clemens Ladisch <clemens@ladisch.de>
1647 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 1647 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
1648 T: git git://git.alsa-project.org/alsa-kernel.git 1648 T: git git://git.alsa-project.org/alsa-kernel.git
1649 S: Maintained 1649 S: Maintained
1650 F: sound/pci/oxygen/ 1650 F: sound/pci/oxygen/
1651 1651
1652 C6X ARCHITECTURE 1652 C6X ARCHITECTURE
1653 M: Mark Salter <msalter@redhat.com> 1653 M: Mark Salter <msalter@redhat.com>
1654 M: Aurelien Jacquiot <a-jacquiot@ti.com> 1654 M: Aurelien Jacquiot <a-jacquiot@ti.com>
1655 L: linux-c6x-dev@linux-c6x.org 1655 L: linux-c6x-dev@linux-c6x.org
1656 W: http://www.linux-c6x.org/wiki/index.php/Main_Page 1656 W: http://www.linux-c6x.org/wiki/index.php/Main_Page
1657 S: Maintained 1657 S: Maintained
1658 F: arch/c6x/ 1658 F: arch/c6x/
1659 1659
1660 CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS 1660 CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS
1661 M: David Howells <dhowells@redhat.com> 1661 M: David Howells <dhowells@redhat.com>
1662 L: linux-cachefs@redhat.com 1662 L: linux-cachefs@redhat.com
1663 S: Supported 1663 S: Supported
1664 F: Documentation/filesystems/caching/cachefiles.txt 1664 F: Documentation/filesystems/caching/cachefiles.txt
1665 F: fs/cachefiles/ 1665 F: fs/cachefiles/
1666 1666
1667 CAFE CMOS INTEGRATED CAMERA CONTROLLER DRIVER 1667 CAFE CMOS INTEGRATED CAMERA CONTROLLER DRIVER
1668 M: Jonathan Corbet <corbet@lwn.net> 1668 M: Jonathan Corbet <corbet@lwn.net>
1669 L: linux-media@vger.kernel.org 1669 L: linux-media@vger.kernel.org
1670 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 1670 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
1671 S: Maintained 1671 S: Maintained
1672 F: Documentation/video4linux/cafe_ccic 1672 F: Documentation/video4linux/cafe_ccic
1673 F: drivers/media/video/marvell-ccic/ 1673 F: drivers/media/video/marvell-ccic/
1674 1674
1675 CAIF NETWORK LAYER 1675 CAIF NETWORK LAYER
1676 M: Sjur Braendeland <sjur.brandeland@stericsson.com> 1676 M: Sjur Braendeland <sjur.brandeland@stericsson.com>
1677 L: netdev@vger.kernel.org 1677 L: netdev@vger.kernel.org
1678 S: Supported 1678 S: Supported
1679 F: Documentation/networking/caif/ 1679 F: Documentation/networking/caif/
1680 F: drivers/net/caif/ 1680 F: drivers/net/caif/
1681 F: include/linux/caif/ 1681 F: include/linux/caif/
1682 F: include/net/caif/ 1682 F: include/net/caif/
1683 F: net/caif/ 1683 F: net/caif/
1684 1684
1685 CALGARY x86-64 IOMMU 1685 CALGARY x86-64 IOMMU
1686 M: Muli Ben-Yehuda <muli@il.ibm.com> 1686 M: Muli Ben-Yehuda <muli@il.ibm.com>
1687 M: "Jon D. Mason" <jdmason@kudzu.us> 1687 M: "Jon D. Mason" <jdmason@kudzu.us>
1688 L: discuss@x86-64.org 1688 L: discuss@x86-64.org
1689 S: Maintained 1689 S: Maintained
1690 F: arch/x86/kernel/pci-calgary_64.c 1690 F: arch/x86/kernel/pci-calgary_64.c
1691 F: arch/x86/kernel/tce_64.c 1691 F: arch/x86/kernel/tce_64.c
1692 F: arch/x86/include/asm/calgary.h 1692 F: arch/x86/include/asm/calgary.h
1693 F: arch/x86/include/asm/tce.h 1693 F: arch/x86/include/asm/tce.h
1694 1694
1695 CAN NETWORK LAYER 1695 CAN NETWORK LAYER
1696 M: Oliver Hartkopp <socketcan@hartkopp.net> 1696 M: Oliver Hartkopp <socketcan@hartkopp.net>
1697 L: linux-can@vger.kernel.org 1697 L: linux-can@vger.kernel.org
1698 W: http://gitorious.org/linux-can 1698 W: http://gitorious.org/linux-can
1699 T: git git://gitorious.org/linux-can/linux-can-next.git 1699 T: git git://gitorious.org/linux-can/linux-can-next.git
1700 S: Maintained 1700 S: Maintained
1701 F: net/can/ 1701 F: net/can/
1702 F: include/linux/can.h 1702 F: include/linux/can.h
1703 F: include/linux/can/core.h 1703 F: include/linux/can/core.h
1704 F: include/linux/can/bcm.h 1704 F: include/linux/can/bcm.h
1705 F: include/linux/can/raw.h 1705 F: include/linux/can/raw.h
1706 F: include/linux/can/gw.h 1706 F: include/linux/can/gw.h
1707 1707
1708 CAN NETWORK DRIVERS 1708 CAN NETWORK DRIVERS
1709 M: Wolfgang Grandegger <wg@grandegger.com> 1709 M: Wolfgang Grandegger <wg@grandegger.com>
1710 M: Marc Kleine-Budde <mkl@pengutronix.de> 1710 M: Marc Kleine-Budde <mkl@pengutronix.de>
1711 L: linux-can@vger.kernel.org 1711 L: linux-can@vger.kernel.org
1712 W: http://gitorious.org/linux-can 1712 W: http://gitorious.org/linux-can
1713 T: git git://gitorious.org/linux-can/linux-can-next.git 1713 T: git git://gitorious.org/linux-can/linux-can-next.git
1714 S: Maintained 1714 S: Maintained
1715 F: drivers/net/can/ 1715 F: drivers/net/can/
1716 F: include/linux/can/dev.h 1716 F: include/linux/can/dev.h
1717 F: include/linux/can/error.h 1717 F: include/linux/can/error.h
1718 F: include/linux/can/netlink.h 1718 F: include/linux/can/netlink.h
1719 F: include/linux/can/platform/ 1719 F: include/linux/can/platform/
1720 1720
1721 CELL BROADBAND ENGINE ARCHITECTURE 1721 CELL BROADBAND ENGINE ARCHITECTURE
1722 M: Arnd Bergmann <arnd@arndb.de> 1722 M: Arnd Bergmann <arnd@arndb.de>
1723 L: linuxppc-dev@lists.ozlabs.org 1723 L: linuxppc-dev@lists.ozlabs.org
1724 L: cbe-oss-dev@lists.ozlabs.org 1724 L: cbe-oss-dev@lists.ozlabs.org
1725 W: http://www.ibm.com/developerworks/power/cell/ 1725 W: http://www.ibm.com/developerworks/power/cell/
1726 S: Supported 1726 S: Supported
1727 F: arch/powerpc/include/asm/cell*.h 1727 F: arch/powerpc/include/asm/cell*.h
1728 F: arch/powerpc/include/asm/spu*.h 1728 F: arch/powerpc/include/asm/spu*.h
1729 F: arch/powerpc/oprofile/*cell* 1729 F: arch/powerpc/oprofile/*cell*
1730 F: arch/powerpc/platforms/cell/ 1730 F: arch/powerpc/platforms/cell/
1731 1731
1732 CEPH DISTRIBUTED FILE SYSTEM CLIENT 1732 CEPH DISTRIBUTED FILE SYSTEM CLIENT
1733 M: Sage Weil <sage@newdream.net> 1733 M: Sage Weil <sage@newdream.net>
1734 L: ceph-devel@vger.kernel.org 1734 L: ceph-devel@vger.kernel.org
1735 W: http://ceph.newdream.net/ 1735 W: http://ceph.newdream.net/
1736 T: git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git 1736 T: git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git
1737 S: Supported 1737 S: Supported
1738 F: Documentation/filesystems/ceph.txt 1738 F: Documentation/filesystems/ceph.txt
1739 F: fs/ceph 1739 F: fs/ceph
1740 F: net/ceph 1740 F: net/ceph
1741 F: include/linux/ceph 1741 F: include/linux/ceph
1742 1742
1743 CERTIFIED WIRELESS USB (WUSB) SUBSYSTEM: 1743 CERTIFIED WIRELESS USB (WUSB) SUBSYSTEM:
1744 L: linux-usb@vger.kernel.org 1744 L: linux-usb@vger.kernel.org
1745 S: Orphan 1745 S: Orphan
1746 F: Documentation/usb/WUSB-Design-overview.txt 1746 F: Documentation/usb/WUSB-Design-overview.txt
1747 F: Documentation/usb/wusb-cbaf 1747 F: Documentation/usb/wusb-cbaf
1748 F: drivers/usb/host/hwa-hc.c 1748 F: drivers/usb/host/hwa-hc.c
1749 F: drivers/usb/host/whci/ 1749 F: drivers/usb/host/whci/
1750 F: drivers/usb/wusbcore/ 1750 F: drivers/usb/wusbcore/
1751 F: include/linux/usb/wusb* 1751 F: include/linux/usb/wusb*
1752 1752
1753 CFAG12864B LCD DRIVER 1753 CFAG12864B LCD DRIVER
1754 M: Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com> 1754 M: Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
1755 W: http://miguelojeda.es/auxdisplay.htm 1755 W: http://miguelojeda.es/auxdisplay.htm
1756 W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm 1756 W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm
1757 S: Maintained 1757 S: Maintained
1758 F: drivers/auxdisplay/cfag12864b.c 1758 F: drivers/auxdisplay/cfag12864b.c
1759 F: include/linux/cfag12864b.h 1759 F: include/linux/cfag12864b.h
1760 1760
1761 CFAG12864BFB LCD FRAMEBUFFER DRIVER 1761 CFAG12864BFB LCD FRAMEBUFFER DRIVER
1762 M: Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com> 1762 M: Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
1763 W: http://miguelojeda.es/auxdisplay.htm 1763 W: http://miguelojeda.es/auxdisplay.htm
1764 W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm 1764 W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm
1765 S: Maintained 1765 S: Maintained
1766 F: drivers/auxdisplay/cfag12864bfb.c 1766 F: drivers/auxdisplay/cfag12864bfb.c
1767 F: include/linux/cfag12864b.h 1767 F: include/linux/cfag12864b.h
1768 1768
1769 CFG80211 and NL80211 1769 CFG80211 and NL80211
1770 M: Johannes Berg <johannes@sipsolutions.net> 1770 M: Johannes Berg <johannes@sipsolutions.net>
1771 L: linux-wireless@vger.kernel.org 1771 L: linux-wireless@vger.kernel.org
1772 S: Maintained 1772 S: Maintained
1773 F: include/linux/nl80211.h 1773 F: include/linux/nl80211.h
1774 F: include/net/cfg80211.h 1774 F: include/net/cfg80211.h
1775 F: net/wireless/* 1775 F: net/wireless/*
1776 X: net/wireless/wext* 1776 X: net/wireless/wext*
1777 1777
1778 CHAR and MISC DRIVERS 1778 CHAR and MISC DRIVERS
1779 M: Arnd Bergmann <arnd@arndb.de> 1779 M: Arnd Bergmann <arnd@arndb.de>
1780 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> 1780 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1781 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git 1781 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
1782 S: Supported 1782 S: Supported
1783 F: drivers/char/* 1783 F: drivers/char/*
1784 F: drivers/misc/* 1784 F: drivers/misc/*
1785 1785
1786 CHECKPATCH 1786 CHECKPATCH
1787 M: Andy Whitcroft <apw@canonical.com> 1787 M: Andy Whitcroft <apw@canonical.com>
1788 S: Supported 1788 S: Supported
1789 F: scripts/checkpatch.pl 1789 F: scripts/checkpatch.pl
1790 1790
1791 CHINESE DOCUMENTATION 1791 CHINESE DOCUMENTATION
1792 M: Harry Wei <harryxiyou@gmail.com> 1792 M: Harry Wei <harryxiyou@gmail.com>
1793 L: xiyoulinuxkernelgroup@googlegroups.com 1793 L: xiyoulinuxkernelgroup@googlegroups.com
1794 L: linux-kernel@zh-kernel.org (moderated for non-subscribers) 1794 L: linux-kernel@zh-kernel.org (moderated for non-subscribers)
1795 S: Maintained 1795 S: Maintained
1796 F: Documentation/zh_CN/ 1796 F: Documentation/zh_CN/
1797 1797
1798 CISCO VIC ETHERNET NIC DRIVER 1798 CISCO VIC ETHERNET NIC DRIVER
1799 M: Christian Benvenuti <benve@cisco.com> 1799 M: Christian Benvenuti <benve@cisco.com>
1800 M: Roopa Prabhu <roprabhu@cisco.com> 1800 M: Roopa Prabhu <roprabhu@cisco.com>
1801 M: David Wang <dwang2@cisco.com> 1801 M: David Wang <dwang2@cisco.com>
1802 S: Supported 1802 S: Supported
1803 F: drivers/net/ethernet/cisco/enic/ 1803 F: drivers/net/ethernet/cisco/enic/
1804 1804
1805 CIRRUS LOGIC EP93XX ETHERNET DRIVER 1805 CIRRUS LOGIC EP93XX ETHERNET DRIVER
1806 M: Hartley Sweeten <hsweeten@visionengravers.com> 1806 M: Hartley Sweeten <hsweeten@visionengravers.com>
1807 L: netdev@vger.kernel.org 1807 L: netdev@vger.kernel.org
1808 S: Maintained 1808 S: Maintained
1809 F: drivers/net/ethernet/cirrus/ep93xx_eth.c 1809 F: drivers/net/ethernet/cirrus/ep93xx_eth.c
1810 1810
1811 CIRRUS LOGIC EP93XX OHCI USB HOST DRIVER 1811 CIRRUS LOGIC EP93XX OHCI USB HOST DRIVER
1812 M: Lennert Buytenhek <kernel@wantstofly.org> 1812 M: Lennert Buytenhek <kernel@wantstofly.org>
1813 L: linux-usb@vger.kernel.org 1813 L: linux-usb@vger.kernel.org
1814 S: Maintained 1814 S: Maintained
1815 F: drivers/usb/host/ohci-ep93xx.c 1815 F: drivers/usb/host/ohci-ep93xx.c
1816 1816
1817 CIRRUS LOGIC CS4270 SOUND DRIVER 1817 CIRRUS LOGIC CS4270 SOUND DRIVER
1818 M: Timur Tabi <timur@freescale.com> 1818 M: Timur Tabi <timur@freescale.com>
1819 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 1819 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
1820 S: Supported 1820 S: Supported
1821 F: sound/soc/codecs/cs4270* 1821 F: sound/soc/codecs/cs4270*
1822 1822
1823 CLK API 1823 CLK API
1824 M: Russell King <linux@arm.linux.org.uk> 1824 M: Russell King <linux@arm.linux.org.uk>
1825 F: include/linux/clk.h 1825 F: include/linux/clk.h
1826 1826
1827 CISCO FCOE HBA DRIVER 1827 CISCO FCOE HBA DRIVER
1828 M: Abhijeet Joglekar <abjoglek@cisco.com> 1828 M: Abhijeet Joglekar <abjoglek@cisco.com>
1829 M: Venkata Siva Vijayendra Bhamidipati <vbhamidi@cisco.com> 1829 M: Venkata Siva Vijayendra Bhamidipati <vbhamidi@cisco.com>
1830 M: Brian Uchino <buchino@cisco.com> 1830 M: Brian Uchino <buchino@cisco.com>
1831 L: linux-scsi@vger.kernel.org 1831 L: linux-scsi@vger.kernel.org
1832 S: Supported 1832 S: Supported
1833 F: drivers/scsi/fnic/ 1833 F: drivers/scsi/fnic/
1834 1834
1835 CMPC ACPI DRIVER 1835 CMPC ACPI DRIVER
1836 M: Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com> 1836 M: Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
1837 M: Daniel Oliveira Nascimento <don@syst.com.br> 1837 M: Daniel Oliveira Nascimento <don@syst.com.br>
1838 L: platform-driver-x86@vger.kernel.org 1838 L: platform-driver-x86@vger.kernel.org
1839 S: Supported 1839 S: Supported
1840 F: drivers/platform/x86/classmate-laptop.c 1840 F: drivers/platform/x86/classmate-laptop.c
1841 1841
1842 COCCINELLE/Semantic Patches (SmPL) 1842 COCCINELLE/Semantic Patches (SmPL)
1843 M: Julia Lawall <julia@diku.dk> 1843 M: Julia Lawall <julia@diku.dk>
1844 M: Gilles Muller <Gilles.Muller@lip6.fr> 1844 M: Gilles Muller <Gilles.Muller@lip6.fr>
1845 M: Nicolas Palix <npalix.work@gmail.com> 1845 M: Nicolas Palix <npalix.work@gmail.com>
1846 L: cocci@diku.dk (moderated for non-subscribers) 1846 L: cocci@diku.dk (moderated for non-subscribers)
1847 W: http://coccinelle.lip6.fr/ 1847 W: http://coccinelle.lip6.fr/
1848 S: Supported 1848 S: Supported
1849 F: scripts/coccinelle/ 1849 F: scripts/coccinelle/
1850 F: scripts/coccicheck 1850 F: scripts/coccicheck
1851 1851
1852 CODA FILE SYSTEM 1852 CODA FILE SYSTEM
1853 M: Jan Harkes <jaharkes@cs.cmu.edu> 1853 M: Jan Harkes <jaharkes@cs.cmu.edu>
1854 M: coda@cs.cmu.edu 1854 M: coda@cs.cmu.edu
1855 L: codalist@coda.cs.cmu.edu 1855 L: codalist@coda.cs.cmu.edu
1856 W: http://www.coda.cs.cmu.edu/ 1856 W: http://www.coda.cs.cmu.edu/
1857 S: Maintained 1857 S: Maintained
1858 F: Documentation/filesystems/coda.txt 1858 F: Documentation/filesystems/coda.txt
1859 F: fs/coda/ 1859 F: fs/coda/
1860 F: include/linux/coda*.h 1860 F: include/linux/coda*.h
1861 1861
1862 COMMON INTERNET FILE SYSTEM (CIFS) 1862 COMMON INTERNET FILE SYSTEM (CIFS)
1863 M: Steve French <sfrench@samba.org> 1863 M: Steve French <sfrench@samba.org>
1864 L: linux-cifs@vger.kernel.org 1864 L: linux-cifs@vger.kernel.org
1865 L: samba-technical@lists.samba.org (moderated for non-subscribers) 1865 L: samba-technical@lists.samba.org (moderated for non-subscribers)
1866 W: http://linux-cifs.samba.org/ 1866 W: http://linux-cifs.samba.org/
1867 Q: http://patchwork.ozlabs.org/project/linux-cifs-client/list/ 1867 Q: http://patchwork.ozlabs.org/project/linux-cifs-client/list/
1868 T: git git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6.git 1868 T: git git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6.git
1869 S: Supported 1869 S: Supported
1870 F: Documentation/filesystems/cifs.txt 1870 F: Documentation/filesystems/cifs.txt
1871 F: fs/cifs/ 1871 F: fs/cifs/
1872 1872
1873 COMPACTPCI HOTPLUG CORE 1873 COMPACTPCI HOTPLUG CORE
1874 M: Scott Murray <scott@spiteful.org> 1874 M: Scott Murray <scott@spiteful.org>
1875 L: linux-pci@vger.kernel.org 1875 L: linux-pci@vger.kernel.org
1876 S: Maintained 1876 S: Maintained
1877 F: drivers/pci/hotplug/cpci_hotplug* 1877 F: drivers/pci/hotplug/cpci_hotplug*
1878 1878
1879 COMPACTPCI HOTPLUG ZIATECH ZT5550 DRIVER 1879 COMPACTPCI HOTPLUG ZIATECH ZT5550 DRIVER
1880 M: Scott Murray <scott@spiteful.org> 1880 M: Scott Murray <scott@spiteful.org>
1881 L: linux-pci@vger.kernel.org 1881 L: linux-pci@vger.kernel.org
1882 S: Maintained 1882 S: Maintained
1883 F: drivers/pci/hotplug/cpcihp_zt5550.* 1883 F: drivers/pci/hotplug/cpcihp_zt5550.*
1884 1884
1885 COMPACTPCI HOTPLUG GENERIC DRIVER 1885 COMPACTPCI HOTPLUG GENERIC DRIVER
1886 M: Scott Murray <scott@spiteful.org> 1886 M: Scott Murray <scott@spiteful.org>
1887 L: linux-pci@vger.kernel.org 1887 L: linux-pci@vger.kernel.org
1888 S: Maintained 1888 S: Maintained
1889 F: drivers/pci/hotplug/cpcihp_generic.c 1889 F: drivers/pci/hotplug/cpcihp_generic.c
1890 1890
1891 COMPAL LAPTOP SUPPORT 1891 COMPAL LAPTOP SUPPORT
1892 M: Cezary Jackiewicz <cezary.jackiewicz@gmail.com> 1892 M: Cezary Jackiewicz <cezary.jackiewicz@gmail.com>
1893 L: platform-driver-x86@vger.kernel.org 1893 L: platform-driver-x86@vger.kernel.org
1894 S: Maintained 1894 S: Maintained
1895 F: drivers/platform/x86/compal-laptop.c 1895 F: drivers/platform/x86/compal-laptop.c
1896 1896
1897 CONEXANT ACCESSRUNNER USB DRIVER 1897 CONEXANT ACCESSRUNNER USB DRIVER
1898 M: Simon Arlott <cxacru@fire.lp0.eu> 1898 M: Simon Arlott <cxacru@fire.lp0.eu>
1899 L: accessrunner-general@lists.sourceforge.net 1899 L: accessrunner-general@lists.sourceforge.net
1900 W: http://accessrunner.sourceforge.net/ 1900 W: http://accessrunner.sourceforge.net/
1901 S: Maintained 1901 S: Maintained
1902 F: drivers/usb/atm/cxacru.c 1902 F: drivers/usb/atm/cxacru.c
1903 1903
1904 CONFIGFS 1904 CONFIGFS
1905 M: Joel Becker <jlbec@evilplan.org> 1905 M: Joel Becker <jlbec@evilplan.org>
1906 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/configfs.git 1906 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/configfs.git
1907 S: Supported 1907 S: Supported
1908 F: fs/configfs/ 1908 F: fs/configfs/
1909 F: include/linux/configfs.h 1909 F: include/linux/configfs.h
1910 1910
1911 CONNECTOR 1911 CONNECTOR
1912 M: Evgeniy Polyakov <zbr@ioremap.net> 1912 M: Evgeniy Polyakov <zbr@ioremap.net>
1913 L: netdev@vger.kernel.org 1913 L: netdev@vger.kernel.org
1914 S: Maintained 1914 S: Maintained
1915 F: drivers/connector/ 1915 F: drivers/connector/
1916 1916
1917 CONTROL GROUPS (CGROUPS) 1917 CONTROL GROUPS (CGROUPS)
1918 M: Tejun Heo <tj@kernel.org> 1918 M: Tejun Heo <tj@kernel.org>
1919 M: Li Zefan <lizf@cn.fujitsu.com> 1919 M: Li Zefan <lizf@cn.fujitsu.com>
1920 L: containers@lists.linux-foundation.org 1920 L: containers@lists.linux-foundation.org
1921 L: cgroups@vger.kernel.org 1921 L: cgroups@vger.kernel.org
1922 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git 1922 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git
1923 S: Maintained 1923 S: Maintained
1924 F: include/linux/cgroup* 1924 F: include/linux/cgroup*
1925 F: kernel/cgroup* 1925 F: kernel/cgroup*
1926 F: mm/*cgroup* 1926 F: mm/*cgroup*
1927 1927
1928 CORETEMP HARDWARE MONITORING DRIVER 1928 CORETEMP HARDWARE MONITORING DRIVER
1929 M: Fenghua Yu <fenghua.yu@intel.com> 1929 M: Fenghua Yu <fenghua.yu@intel.com>
1930 L: lm-sensors@lm-sensors.org 1930 L: lm-sensors@lm-sensors.org
1931 S: Maintained 1931 S: Maintained
1932 F: Documentation/hwmon/coretemp 1932 F: Documentation/hwmon/coretemp
1933 F: drivers/hwmon/coretemp.c 1933 F: drivers/hwmon/coretemp.c
1934 1934
1935 COSA/SRP SYNC SERIAL DRIVER 1935 COSA/SRP SYNC SERIAL DRIVER
1936 M: Jan "Yenya" Kasprzak <kas@fi.muni.cz> 1936 M: Jan "Yenya" Kasprzak <kas@fi.muni.cz>
1937 W: http://www.fi.muni.cz/~kas/cosa/ 1937 W: http://www.fi.muni.cz/~kas/cosa/
1938 S: Maintained 1938 S: Maintained
1939 F: drivers/net/wan/cosa* 1939 F: drivers/net/wan/cosa*
1940 1940
1941 CPMAC ETHERNET DRIVER 1941 CPMAC ETHERNET DRIVER
1942 M: Florian Fainelli <florian@openwrt.org> 1942 M: Florian Fainelli <florian@openwrt.org>
1943 L: netdev@vger.kernel.org 1943 L: netdev@vger.kernel.org
1944 S: Maintained 1944 S: Maintained
1945 F: drivers/net/ethernet/ti/cpmac.c 1945 F: drivers/net/ethernet/ti/cpmac.c
1946 1946
1947 CPU FREQUENCY DRIVERS 1947 CPU FREQUENCY DRIVERS
1948 M: Dave Jones <davej@redhat.com> 1948 M: Dave Jones <davej@redhat.com>
1949 L: cpufreq@vger.kernel.org 1949 L: cpufreq@vger.kernel.org
1950 W: http://www.codemonkey.org.uk/projects/cpufreq/ 1950 W: http://www.codemonkey.org.uk/projects/cpufreq/
1951 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davej/cpufreq.git 1951 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davej/cpufreq.git
1952 S: Maintained 1952 S: Maintained
1953 F: drivers/cpufreq/ 1953 F: drivers/cpufreq/
1954 F: include/linux/cpufreq.h 1954 F: include/linux/cpufreq.h
1955 1955
1956 CPUID/MSR DRIVER 1956 CPUID/MSR DRIVER
1957 M: "H. Peter Anvin" <hpa@zytor.com> 1957 M: "H. Peter Anvin" <hpa@zytor.com>
1958 S: Maintained 1958 S: Maintained
1959 F: arch/x86/kernel/cpuid.c 1959 F: arch/x86/kernel/cpuid.c
1960 F: arch/x86/kernel/msr.c 1960 F: arch/x86/kernel/msr.c
1961 1961
1962 CPU POWER MONITORING SUBSYSTEM 1962 CPU POWER MONITORING SUBSYSTEM
1963 M: Dominik Brodowski <linux@dominikbrodowski.net> 1963 M: Dominik Brodowski <linux@dominikbrodowski.net>
1964 M: Thomas Renninger <trenn@suse.de> 1964 M: Thomas Renninger <trenn@suse.de>
1965 S: Maintained 1965 S: Maintained
1966 F: tools/power/cpupower 1966 F: tools/power/cpupower
1967 1967
1968 CPUSETS 1968 CPUSETS
1969 M: Paul Menage <paul@paulmenage.org> 1969 M: Paul Menage <paul@paulmenage.org>
1970 W: http://www.bullopensource.org/cpuset/ 1970 W: http://www.bullopensource.org/cpuset/
1971 W: http://oss.sgi.com/projects/cpusets/ 1971 W: http://oss.sgi.com/projects/cpusets/
1972 S: Supported 1972 S: Supported
1973 F: Documentation/cgroups/cpusets.txt 1973 F: Documentation/cgroups/cpusets.txt
1974 F: include/linux/cpuset.h 1974 F: include/linux/cpuset.h
1975 F: kernel/cpuset.c 1975 F: kernel/cpuset.c
1976 1976
1977 CRAMFS FILESYSTEM 1977 CRAMFS FILESYSTEM
1978 W: http://sourceforge.net/projects/cramfs/ 1978 W: http://sourceforge.net/projects/cramfs/
1979 S: Orphan 1979 S: Orphan
1980 F: Documentation/filesystems/cramfs.txt 1980 F: Documentation/filesystems/cramfs.txt
1981 F: fs/cramfs/ 1981 F: fs/cramfs/
1982 1982
1983 CRIS PORT 1983 CRIS PORT
1984 M: Mikael Starvik <starvik@axis.com> 1984 M: Mikael Starvik <starvik@axis.com>
1985 M: Jesper Nilsson <jesper.nilsson@axis.com> 1985 M: Jesper Nilsson <jesper.nilsson@axis.com>
1986 L: linux-cris-kernel@axis.com 1986 L: linux-cris-kernel@axis.com
1987 W: http://developer.axis.com 1987 W: http://developer.axis.com
1988 S: Maintained 1988 S: Maintained
1989 F: arch/cris/ 1989 F: arch/cris/
1990 F: drivers/tty/serial/crisv10.* 1990 F: drivers/tty/serial/crisv10.*
1991 1991
1992 CRYPTO API 1992 CRYPTO API
1993 M: Herbert Xu <herbert@gondor.apana.org.au> 1993 M: Herbert Xu <herbert@gondor.apana.org.au>
1994 M: "David S. Miller" <davem@davemloft.net> 1994 M: "David S. Miller" <davem@davemloft.net>
1995 L: linux-crypto@vger.kernel.org 1995 L: linux-crypto@vger.kernel.org
1996 T: git git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git 1996 T: git git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git
1997 S: Maintained 1997 S: Maintained
1998 F: Documentation/crypto/ 1998 F: Documentation/crypto/
1999 F: arch/*/crypto/ 1999 F: arch/*/crypto/
2000 F: crypto/ 2000 F: crypto/
2001 F: drivers/crypto/ 2001 F: drivers/crypto/
2002 F: include/crypto/ 2002 F: include/crypto/
2003 2003
2004 CRYPTOGRAPHIC RANDOM NUMBER GENERATOR 2004 CRYPTOGRAPHIC RANDOM NUMBER GENERATOR
2005 M: Neil Horman <nhorman@tuxdriver.com> 2005 M: Neil Horman <nhorman@tuxdriver.com>
2006 L: linux-crypto@vger.kernel.org 2006 L: linux-crypto@vger.kernel.org
2007 S: Maintained 2007 S: Maintained
2008 F: crypto/ansi_cprng.c 2008 F: crypto/ansi_cprng.c
2009 F: crypto/rng.c 2009 F: crypto/rng.c
2010 2010
2011 CS5535 Audio ALSA driver 2011 CS5535 Audio ALSA driver
2012 M: Jaya Kumar <jayakumar.alsa@gmail.com> 2012 M: Jaya Kumar <jayakumar.alsa@gmail.com>
2013 S: Maintained 2013 S: Maintained
2014 F: sound/pci/cs5535audio/ 2014 F: sound/pci/cs5535audio/
2015 2015
2016 CX18 VIDEO4LINUX DRIVER 2016 CX18 VIDEO4LINUX DRIVER
2017 M: Andy Walls <awalls@md.metrocast.net> 2017 M: Andy Walls <awalls@md.metrocast.net>
2018 L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers) 2018 L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
2019 L: linux-media@vger.kernel.org 2019 L: linux-media@vger.kernel.org
2020 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 2020 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
2021 W: http://linuxtv.org 2021 W: http://linuxtv.org
2022 W: http://www.ivtvdriver.org/index.php/Cx18 2022 W: http://www.ivtvdriver.org/index.php/Cx18
2023 S: Maintained 2023 S: Maintained
2024 F: Documentation/video4linux/cx18.txt 2024 F: Documentation/video4linux/cx18.txt
2025 F: drivers/media/video/cx18/ 2025 F: drivers/media/video/cx18/
2026 2026
2027 CXGB3 ETHERNET DRIVER (CXGB3) 2027 CXGB3 ETHERNET DRIVER (CXGB3)
2028 M: Divy Le Ray <divy@chelsio.com> 2028 M: Divy Le Ray <divy@chelsio.com>
2029 L: netdev@vger.kernel.org 2029 L: netdev@vger.kernel.org
2030 W: http://www.chelsio.com 2030 W: http://www.chelsio.com
2031 S: Supported 2031 S: Supported
2032 F: drivers/net/ethernet/chelsio/cxgb3/ 2032 F: drivers/net/ethernet/chelsio/cxgb3/
2033 2033
2034 CXGB3 IWARP RNIC DRIVER (IW_CXGB3) 2034 CXGB3 IWARP RNIC DRIVER (IW_CXGB3)
2035 M: Steve Wise <swise@chelsio.com> 2035 M: Steve Wise <swise@chelsio.com>
2036 L: linux-rdma@vger.kernel.org 2036 L: linux-rdma@vger.kernel.org
2037 W: http://www.openfabrics.org 2037 W: http://www.openfabrics.org
2038 S: Supported 2038 S: Supported
2039 F: drivers/infiniband/hw/cxgb3/ 2039 F: drivers/infiniband/hw/cxgb3/
2040 2040
2041 CXGB4 ETHERNET DRIVER (CXGB4) 2041 CXGB4 ETHERNET DRIVER (CXGB4)
2042 M: Dimitris Michailidis <dm@chelsio.com> 2042 M: Dimitris Michailidis <dm@chelsio.com>
2043 L: netdev@vger.kernel.org 2043 L: netdev@vger.kernel.org
2044 W: http://www.chelsio.com 2044 W: http://www.chelsio.com
2045 S: Supported 2045 S: Supported
2046 F: drivers/net/ethernet/chelsio/cxgb4/ 2046 F: drivers/net/ethernet/chelsio/cxgb4/
2047 2047
2048 CXGB4 IWARP RNIC DRIVER (IW_CXGB4) 2048 CXGB4 IWARP RNIC DRIVER (IW_CXGB4)
2049 M: Steve Wise <swise@chelsio.com> 2049 M: Steve Wise <swise@chelsio.com>
2050 L: linux-rdma@vger.kernel.org 2050 L: linux-rdma@vger.kernel.org
2051 W: http://www.openfabrics.org 2051 W: http://www.openfabrics.org
2052 S: Supported 2052 S: Supported
2053 F: drivers/infiniband/hw/cxgb4/ 2053 F: drivers/infiniband/hw/cxgb4/
2054 2054
2055 CXGB4VF ETHERNET DRIVER (CXGB4VF) 2055 CXGB4VF ETHERNET DRIVER (CXGB4VF)
2056 M: Casey Leedom <leedom@chelsio.com> 2056 M: Casey Leedom <leedom@chelsio.com>
2057 L: netdev@vger.kernel.org 2057 L: netdev@vger.kernel.org
2058 W: http://www.chelsio.com 2058 W: http://www.chelsio.com
2059 S: Supported 2059 S: Supported
2060 F: drivers/net/ethernet/chelsio/cxgb4vf/ 2060 F: drivers/net/ethernet/chelsio/cxgb4vf/
2061 2061
2062 STMMAC ETHERNET DRIVER 2062 STMMAC ETHERNET DRIVER
2063 M: Giuseppe Cavallaro <peppe.cavallaro@st.com> 2063 M: Giuseppe Cavallaro <peppe.cavallaro@st.com>
2064 L: netdev@vger.kernel.org 2064 L: netdev@vger.kernel.org
2065 W: http://www.stlinux.com 2065 W: http://www.stlinux.com
2066 S: Supported 2066 S: Supported
2067 F: drivers/net/ethernet/stmicro/stmmac/ 2067 F: drivers/net/ethernet/stmicro/stmmac/
2068 2068
2069 CYBERPRO FB DRIVER 2069 CYBERPRO FB DRIVER
2070 M: Russell King <linux@arm.linux.org.uk> 2070 M: Russell King <linux@arm.linux.org.uk>
2071 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 2071 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
2072 W: http://www.arm.linux.org.uk/ 2072 W: http://www.arm.linux.org.uk/
2073 S: Maintained 2073 S: Maintained
2074 F: drivers/video/cyber2000fb.* 2074 F: drivers/video/cyber2000fb.*
2075 2075
2076 CYCLADES 2X SYNC CARD DRIVER 2076 CYCLADES 2X SYNC CARD DRIVER
2077 M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> 2077 M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2078 W: http://oops.ghostprotocols.net:81/blog 2078 W: http://oops.ghostprotocols.net:81/blog
2079 S: Maintained 2079 S: Maintained
2080 F: drivers/net/wan/cycx* 2080 F: drivers/net/wan/cycx*
2081 2081
2082 CYCLADES ASYNC MUX DRIVER 2082 CYCLADES ASYNC MUX DRIVER
2083 W: http://www.cyclades.com/ 2083 W: http://www.cyclades.com/
2084 S: Orphan 2084 S: Orphan
2085 F: drivers/tty/cyclades.c 2085 F: drivers/tty/cyclades.c
2086 F: include/linux/cyclades.h 2086 F: include/linux/cyclades.h
2087 2087
2088 CYCLADES PC300 DRIVER 2088 CYCLADES PC300 DRIVER
2089 W: http://www.cyclades.com/ 2089 W: http://www.cyclades.com/
2090 S: Orphan 2090 S: Orphan
2091 F: drivers/net/wan/pc300* 2091 F: drivers/net/wan/pc300*
2092 2092
2093 DAMA SLAVE for AX.25 2093 DAMA SLAVE for AX.25
2094 M: Joerg Reuter <jreuter@yaina.de> 2094 M: Joerg Reuter <jreuter@yaina.de>
2095 W: http://yaina.de/jreuter/ 2095 W: http://yaina.de/jreuter/
2096 W: http://www.qsl.net/dl1bke/ 2096 W: http://www.qsl.net/dl1bke/
2097 L: linux-hams@vger.kernel.org 2097 L: linux-hams@vger.kernel.org
2098 S: Maintained 2098 S: Maintained
2099 F: net/ax25/af_ax25.c 2099 F: net/ax25/af_ax25.c
2100 F: net/ax25/ax25_dev.c 2100 F: net/ax25/ax25_dev.c
2101 F: net/ax25/ax25_ds_* 2101 F: net/ax25/ax25_ds_*
2102 F: net/ax25/ax25_in.c 2102 F: net/ax25/ax25_in.c
2103 F: net/ax25/ax25_out.c 2103 F: net/ax25/ax25_out.c
2104 F: net/ax25/ax25_timer.c 2104 F: net/ax25/ax25_timer.c
2105 F: net/ax25/sysctl_net_ax25.c 2105 F: net/ax25/sysctl_net_ax25.c
2106 2106
2107 DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER 2107 DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER
2108 L: netdev@vger.kernel.org 2108 L: netdev@vger.kernel.org
2109 S: Orphan 2109 S: Orphan
2110 F: Documentation/networking/dmfe.txt 2110 F: Documentation/networking/dmfe.txt
2111 F: drivers/net/ethernet/dec/tulip/dmfe.c 2111 F: drivers/net/ethernet/dec/tulip/dmfe.c
2112 2112
2113 DC390/AM53C974 SCSI driver 2113 DC390/AM53C974 SCSI driver
2114 M: Kurt Garloff <garloff@suse.de> 2114 M: Kurt Garloff <garloff@suse.de>
2115 W: http://www.garloff.de/kurt/linux/dc390/ 2115 W: http://www.garloff.de/kurt/linux/dc390/
2116 M: Guennadi Liakhovetski <g.liakhovetski@gmx.de> 2116 M: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
2117 S: Maintained 2117 S: Maintained
2118 F: drivers/scsi/tmscsim.* 2118 F: drivers/scsi/tmscsim.*
2119 2119
2120 DC395x SCSI driver 2120 DC395x SCSI driver
2121 M: Oliver Neukum <oliver@neukum.name> 2121 M: Oliver Neukum <oliver@neukum.name>
2122 M: Ali Akcaagac <aliakc@web.de> 2122 M: Ali Akcaagac <aliakc@web.de>
2123 M: Jamie Lenehan <lenehan@twibble.org> 2123 M: Jamie Lenehan <lenehan@twibble.org>
2124 W: http://twibble.org/dist/dc395x/ 2124 W: http://twibble.org/dist/dc395x/
2125 L: dc395x@twibble.org 2125 L: dc395x@twibble.org
2126 L: http://lists.twibble.org/mailman/listinfo/dc395x/ 2126 L: http://lists.twibble.org/mailman/listinfo/dc395x/
2127 S: Maintained 2127 S: Maintained
2128 F: Documentation/scsi/dc395x.txt 2128 F: Documentation/scsi/dc395x.txt
2129 F: drivers/scsi/dc395x.* 2129 F: drivers/scsi/dc395x.*
2130 2130
2131 DCCP PROTOCOL 2131 DCCP PROTOCOL
2132 M: Gerrit Renker <gerrit@erg.abdn.ac.uk> 2132 M: Gerrit Renker <gerrit@erg.abdn.ac.uk>
2133 L: dccp@vger.kernel.org 2133 L: dccp@vger.kernel.org
2134 W: http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp 2134 W: http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp
2135 S: Maintained 2135 S: Maintained
2136 F: include/linux/dccp.h 2136 F: include/linux/dccp.h
2137 F: include/linux/tfrc.h 2137 F: include/linux/tfrc.h
2138 F: net/dccp/ 2138 F: net/dccp/
2139 2139
2140 DECnet NETWORK LAYER 2140 DECnet NETWORK LAYER
2141 W: http://linux-decnet.sourceforge.net 2141 W: http://linux-decnet.sourceforge.net
2142 L: linux-decnet-user@lists.sourceforge.net 2142 L: linux-decnet-user@lists.sourceforge.net
2143 S: Orphan 2143 S: Orphan
2144 F: Documentation/networking/decnet.txt 2144 F: Documentation/networking/decnet.txt
2145 F: net/decnet/ 2145 F: net/decnet/
2146 2146
2147 DEFXX FDDI NETWORK DRIVER 2147 DEFXX FDDI NETWORK DRIVER
2148 M: "Maciej W. Rozycki" <macro@linux-mips.org> 2148 M: "Maciej W. Rozycki" <macro@linux-mips.org>
2149 S: Maintained 2149 S: Maintained
2150 F: drivers/net/fddi/defxx.* 2150 F: drivers/net/fddi/defxx.*
2151 2151
2152 DELL LAPTOP DRIVER 2152 DELL LAPTOP DRIVER
2153 M: Matthew Garrett <mjg59@srcf.ucam.org> 2153 M: Matthew Garrett <mjg59@srcf.ucam.org>
2154 L: platform-driver-x86@vger.kernel.org 2154 L: platform-driver-x86@vger.kernel.org
2155 S: Maintained 2155 S: Maintained
2156 F: drivers/platform/x86/dell-laptop.c 2156 F: drivers/platform/x86/dell-laptop.c
2157 2157
2158 DELL LAPTOP SMM DRIVER 2158 DELL LAPTOP SMM DRIVER
2159 M: Massimo Dal Zotto <dz@debian.org> 2159 M: Massimo Dal Zotto <dz@debian.org>
2160 W: http://www.debian.org/~dz/i8k/ 2160 W: http://www.debian.org/~dz/i8k/
2161 S: Maintained 2161 S: Maintained
2162 F: drivers/char/i8k.c 2162 F: drivers/char/i8k.c
2163 F: include/linux/i8k.h 2163 F: include/linux/i8k.h
2164 2164
2165 DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas) 2165 DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas)
2166 M: Doug Warzecha <Douglas_Warzecha@dell.com> 2166 M: Doug Warzecha <Douglas_Warzecha@dell.com>
2167 S: Maintained 2167 S: Maintained
2168 F: Documentation/dcdbas.txt 2168 F: Documentation/dcdbas.txt
2169 F: drivers/firmware/dcdbas.* 2169 F: drivers/firmware/dcdbas.*
2170 2170
2171 DELL WMI EXTRAS DRIVER 2171 DELL WMI EXTRAS DRIVER
2172 M: Matthew Garrett <mjg59@srcf.ucam.org> 2172 M: Matthew Garrett <mjg59@srcf.ucam.org>
2173 S: Maintained 2173 S: Maintained
2174 F: drivers/platform/x86/dell-wmi.c 2174 F: drivers/platform/x86/dell-wmi.c
2175 2175
2176 DESIGNWARE USB3 DRD IP DRIVER 2176 DESIGNWARE USB3 DRD IP DRIVER
2177 M: Felipe Balbi <balbi@ti.com> 2177 M: Felipe Balbi <balbi@ti.com>
2178 L: linux-usb@vger.kernel.org 2178 L: linux-usb@vger.kernel.org
2179 L: linux-omap@vger.kernel.org 2179 L: linux-omap@vger.kernel.org
2180 T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git 2180 T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git
2181 S: Maintained 2181 S: Maintained
2182 F: drivers/usb/dwc3/ 2182 F: drivers/usb/dwc3/
2183 2183
2184 DEVICE FREQUENCY (DEVFREQ) 2184 DEVICE FREQUENCY (DEVFREQ)
2185 M: MyungJoo Ham <myungjoo.ham@samsung.com> 2185 M: MyungJoo Ham <myungjoo.ham@samsung.com>
2186 M: Kyungmin Park <kyungmin.park@samsung.com> 2186 M: Kyungmin Park <kyungmin.park@samsung.com>
2187 L: linux-kernel@vger.kernel.org 2187 L: linux-kernel@vger.kernel.org
2188 S: Maintained 2188 S: Maintained
2189 F: drivers/devfreq/ 2189 F: drivers/devfreq/
2190 2190
2191 DEVICE NUMBER REGISTRY 2191 DEVICE NUMBER REGISTRY
2192 M: Torben Mathiasen <device@lanana.org> 2192 M: Torben Mathiasen <device@lanana.org>
2193 W: http://lanana.org/docs/device-list/index.html 2193 W: http://lanana.org/docs/device-list/index.html
2194 S: Maintained 2194 S: Maintained
2195 2195
2196 DEVICE-MAPPER (LVM) 2196 DEVICE-MAPPER (LVM)
2197 P: Alasdair Kergon 2197 P: Alasdair Kergon
2198 L: dm-devel@redhat.com 2198 L: dm-devel@redhat.com
2199 W: http://sources.redhat.com/dm 2199 W: http://sources.redhat.com/dm
2200 Q: http://patchwork.kernel.org/project/dm-devel/list/ 2200 Q: http://patchwork.kernel.org/project/dm-devel/list/
2201 S: Maintained 2201 S: Maintained
2202 F: Documentation/device-mapper/ 2202 F: Documentation/device-mapper/
2203 F: drivers/md/dm* 2203 F: drivers/md/dm*
2204 F: include/linux/device-mapper.h 2204 F: include/linux/device-mapper.h
2205 F: include/linux/dm-*.h 2205 F: include/linux/dm-*.h
2206 2206
2207 DIOLAN U2C-12 I2C DRIVER 2207 DIOLAN U2C-12 I2C DRIVER
2208 M: Guenter Roeck <guenter.roeck@ericsson.com> 2208 M: Guenter Roeck <guenter.roeck@ericsson.com>
2209 L: linux-i2c@vger.kernel.org 2209 L: linux-i2c@vger.kernel.org
2210 S: Maintained 2210 S: Maintained
2211 F: drivers/i2c/busses/i2c-diolan-u2c.c 2211 F: drivers/i2c/busses/i2c-diolan-u2c.c
2212 2212
2213 DIRECTORY NOTIFICATION (DNOTIFY) 2213 DIRECTORY NOTIFICATION (DNOTIFY)
2214 M: Eric Paris <eparis@parisplace.org> 2214 M: Eric Paris <eparis@parisplace.org>
2215 S: Maintained 2215 S: Maintained
2216 F: Documentation/filesystems/dnotify.txt 2216 F: Documentation/filesystems/dnotify.txt
2217 F: fs/notify/dnotify/ 2217 F: fs/notify/dnotify/
2218 F: include/linux/dnotify.h 2218 F: include/linux/dnotify.h
2219 2219
2220 DISK GEOMETRY AND PARTITION HANDLING 2220 DISK GEOMETRY AND PARTITION HANDLING
2221 M: Andries Brouwer <aeb@cwi.nl> 2221 M: Andries Brouwer <aeb@cwi.nl>
2222 W: http://www.win.tue.nl/~aeb/linux/Large-Disk.html 2222 W: http://www.win.tue.nl/~aeb/linux/Large-Disk.html
2223 W: http://www.win.tue.nl/~aeb/linux/zip/zip-1.html 2223 W: http://www.win.tue.nl/~aeb/linux/zip/zip-1.html
2224 W: http://www.win.tue.nl/~aeb/partitions/partition_types-1.html 2224 W: http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
2225 S: Maintained 2225 S: Maintained
2226 2226
2227 DISKQUOTA 2227 DISKQUOTA
2228 M: Jan Kara <jack@suse.cz> 2228 M: Jan Kara <jack@suse.cz>
2229 S: Maintained 2229 S: Maintained
2230 F: Documentation/filesystems/quota.txt 2230 F: Documentation/filesystems/quota.txt
2231 F: fs/quota/ 2231 F: fs/quota/
2232 F: include/linux/quota*.h 2232 F: include/linux/quota*.h
2233 2233
2234 DISTRIBUTED LOCK MANAGER (DLM) 2234 DISTRIBUTED LOCK MANAGER (DLM)
2235 M: Christine Caulfield <ccaulfie@redhat.com> 2235 M: Christine Caulfield <ccaulfie@redhat.com>
2236 M: David Teigland <teigland@redhat.com> 2236 M: David Teigland <teigland@redhat.com>
2237 L: cluster-devel@redhat.com 2237 L: cluster-devel@redhat.com
2238 W: http://sources.redhat.com/cluster/ 2238 W: http://sources.redhat.com/cluster/
2239 T: git git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm.git 2239 T: git git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm.git
2240 S: Supported 2240 S: Supported
2241 F: fs/dlm/ 2241 F: fs/dlm/
2242 2242
2243 DMA BUFFER SHARING FRAMEWORK 2243 DMA BUFFER SHARING FRAMEWORK
2244 M: Sumit Semwal <sumit.semwal@linaro.org> 2244 M: Sumit Semwal <sumit.semwal@linaro.org>
2245 S: Maintained 2245 S: Maintained
2246 L: linux-media@vger.kernel.org 2246 L: linux-media@vger.kernel.org
2247 L: dri-devel@lists.freedesktop.org 2247 L: dri-devel@lists.freedesktop.org
2248 L: linaro-mm-sig@lists.linaro.org 2248 L: linaro-mm-sig@lists.linaro.org
2249 F: drivers/base/dma-buf* 2249 F: drivers/base/dma-buf*
2250 F: include/linux/dma-buf* 2250 F: include/linux/dma-buf*
2251 F: Documentation/dma-buf-sharing.txt 2251 F: Documentation/dma-buf-sharing.txt
2252 T: git git://git.linaro.org/people/sumitsemwal/linux-dma-buf.git 2252 T: git git://git.linaro.org/people/sumitsemwal/linux-dma-buf.git
2253 2253
2254 DMA GENERIC OFFLOAD ENGINE SUBSYSTEM 2254 DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
2255 M: Vinod Koul <vinod.koul@intel.com> 2255 M: Vinod Koul <vinod.koul@intel.com>
2256 M: Dan Williams <dan.j.williams@intel.com> 2256 M: Dan Williams <dan.j.williams@intel.com>
2257 S: Supported 2257 S: Supported
2258 F: drivers/dma/ 2258 F: drivers/dma/
2259 F: include/linux/dma* 2259 F: include/linux/dma*
2260 T: git git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx.git 2260 T: git git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx.git
2261 T: git git://git.infradead.org/users/vkoul/slave-dma.git (slave-dma) 2261 T: git git://git.infradead.org/users/vkoul/slave-dma.git (slave-dma)
2262 2262
2263 DME1737 HARDWARE MONITOR DRIVER 2263 DME1737 HARDWARE MONITOR DRIVER
2264 M: Juerg Haefliger <juergh@gmail.com> 2264 M: Juerg Haefliger <juergh@gmail.com>
2265 L: lm-sensors@lm-sensors.org 2265 L: lm-sensors@lm-sensors.org
2266 S: Maintained 2266 S: Maintained
2267 F: Documentation/hwmon/dme1737 2267 F: Documentation/hwmon/dme1737
2268 F: drivers/hwmon/dme1737.c 2268 F: drivers/hwmon/dme1737.c
2269 2269
2270 DOCBOOK FOR DOCUMENTATION 2270 DOCBOOK FOR DOCUMENTATION
2271 M: Randy Dunlap <rdunlap@xenotime.net> 2271 M: Randy Dunlap <rdunlap@xenotime.net>
2272 S: Maintained 2272 S: Maintained
2273 F: scripts/kernel-doc 2273 F: scripts/kernel-doc
2274 2274
2275 DOCKING STATION DRIVER 2275 DOCKING STATION DRIVER
2276 M: Shaohua Li <shaohua.li@intel.com> 2276 M: Shaohua Li <shaohua.li@intel.com>
2277 L: linux-acpi@vger.kernel.org 2277 L: linux-acpi@vger.kernel.org
2278 S: Supported 2278 S: Supported
2279 F: drivers/acpi/dock.c 2279 F: drivers/acpi/dock.c
2280 2280
2281 DOCUMENTATION 2281 DOCUMENTATION
2282 M: Randy Dunlap <rdunlap@xenotime.net> 2282 M: Randy Dunlap <rdunlap@xenotime.net>
2283 L: linux-doc@vger.kernel.org 2283 L: linux-doc@vger.kernel.org
2284 T: quilt http://xenotime.net/kernel-doc-patches/current/ 2284 T: quilt http://xenotime.net/kernel-doc-patches/current/
2285 S: Maintained 2285 S: Maintained
2286 F: Documentation/ 2286 F: Documentation/
2287 2287
2288 DOUBLETALK DRIVER 2288 DOUBLETALK DRIVER
2289 M: "James R. Van Zandt" <jrv@vanzandt.mv.com> 2289 M: "James R. Van Zandt" <jrv@vanzandt.mv.com>
2290 L: blinux-list@redhat.com 2290 L: blinux-list@redhat.com
2291 S: Maintained 2291 S: Maintained
2292 F: drivers/char/dtlk.c 2292 F: drivers/char/dtlk.c
2293 F: include/linux/dtlk.h 2293 F: include/linux/dtlk.h
2294 2294
2295 DPT_I2O SCSI RAID DRIVER 2295 DPT_I2O SCSI RAID DRIVER
2296 M: Adaptec OEM Raid Solutions <aacraid@adaptec.com> 2296 M: Adaptec OEM Raid Solutions <aacraid@adaptec.com>
2297 L: linux-scsi@vger.kernel.org 2297 L: linux-scsi@vger.kernel.org
2298 W: http://www.adaptec.com/ 2298 W: http://www.adaptec.com/
2299 S: Maintained 2299 S: Maintained
2300 F: drivers/scsi/dpt* 2300 F: drivers/scsi/dpt*
2301 F: drivers/scsi/dpt/ 2301 F: drivers/scsi/dpt/
2302 2302
2303 DRBD DRIVER 2303 DRBD DRIVER
2304 P: Philipp Reisner 2304 P: Philipp Reisner
2305 P: Lars Ellenberg 2305 P: Lars Ellenberg
2306 M: drbd-dev@lists.linbit.com 2306 M: drbd-dev@lists.linbit.com
2307 L: drbd-user@lists.linbit.com 2307 L: drbd-user@lists.linbit.com
2308 W: http://www.drbd.org 2308 W: http://www.drbd.org
2309 T: git git://git.drbd.org/linux-2.6-drbd.git drbd 2309 T: git git://git.drbd.org/linux-2.6-drbd.git drbd
2310 T: git git://git.drbd.org/drbd-8.3.git 2310 T: git git://git.drbd.org/drbd-8.3.git
2311 S: Supported 2311 S: Supported
2312 F: drivers/block/drbd/ 2312 F: drivers/block/drbd/
2313 F: lib/lru_cache.c 2313 F: lib/lru_cache.c
2314 F: Documentation/blockdev/drbd/ 2314 F: Documentation/blockdev/drbd/
2315 2315
2316 DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS 2316 DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS
2317 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> 2317 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2318 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6.git 2318 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6.git
2319 S: Supported 2319 S: Supported
2320 F: Documentation/kobject.txt 2320 F: Documentation/kobject.txt
2321 F: drivers/base/ 2321 F: drivers/base/
2322 F: fs/sysfs/ 2322 F: fs/sysfs/
2323 F: fs/debugfs/ 2323 F: fs/debugfs/
2324 F: include/linux/kobj* 2324 F: include/linux/kobj*
2325 F: include/linux/debugfs.h 2325 F: include/linux/debugfs.h
2326 F: lib/kobj* 2326 F: lib/kobj*
2327 2327
2328 DRM DRIVERS 2328 DRM DRIVERS
2329 M: David Airlie <airlied@linux.ie> 2329 M: David Airlie <airlied@linux.ie>
2330 L: dri-devel@lists.freedesktop.org 2330 L: dri-devel@lists.freedesktop.org
2331 T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git 2331 T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
2332 S: Maintained 2332 S: Maintained
2333 F: drivers/gpu/drm/ 2333 F: drivers/gpu/drm/
2334 F: include/drm/ 2334 F: include/drm/
2335 2335
2336 INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets) 2336 INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
2337 M: Keith Packard <keithp@keithp.com> 2337 M: Keith Packard <keithp@keithp.com>
2338 L: intel-gfx@lists.freedesktop.org (subscribers-only) 2338 L: intel-gfx@lists.freedesktop.org (subscribers-only)
2339 L: dri-devel@lists.freedesktop.org 2339 L: dri-devel@lists.freedesktop.org
2340 T: git git://git.kernel.org/pub/scm/linux/kernel/git/keithp/linux-2.6.git 2340 T: git git://git.kernel.org/pub/scm/linux/kernel/git/keithp/linux-2.6.git
2341 S: Supported 2341 S: Supported
2342 F: drivers/gpu/drm/i915 2342 F: drivers/gpu/drm/i915
2343 F: include/drm/i915* 2343 F: include/drm/i915*
2344 2344
2345 DRM DRIVERS FOR EXYNOS 2345 DRM DRIVERS FOR EXYNOS
2346 M: Inki Dae <inki.dae@samsung.com> 2346 M: Inki Dae <inki.dae@samsung.com>
2347 M: Joonyoung Shim <jy0922.shim@samsung.com> 2347 M: Joonyoung Shim <jy0922.shim@samsung.com>
2348 M: Seung-Woo Kim <sw0312.kim@samsung.com> 2348 M: Seung-Woo Kim <sw0312.kim@samsung.com>
2349 M: Kyungmin Park <kyungmin.park@samsung.com> 2349 M: Kyungmin Park <kyungmin.park@samsung.com>
2350 L: dri-devel@lists.freedesktop.org 2350 L: dri-devel@lists.freedesktop.org
2351 S: Supported 2351 S: Supported
2352 F: drivers/gpu/drm/exynos 2352 F: drivers/gpu/drm/exynos
2353 F: include/drm/exynos* 2353 F: include/drm/exynos*
2354 2354
2355 DSCC4 DRIVER 2355 DSCC4 DRIVER
2356 M: Francois Romieu <romieu@fr.zoreil.com> 2356 M: Francois Romieu <romieu@fr.zoreil.com>
2357 L: netdev@vger.kernel.org 2357 L: netdev@vger.kernel.org
2358 S: Maintained 2358 S: Maintained
2359 F: drivers/net/wan/dscc4.c 2359 F: drivers/net/wan/dscc4.c
2360 2360
2361 DYNAMIC DEBUG 2361 DYNAMIC DEBUG
2362 M: Jason Baron <jbaron@redhat.com> 2362 M: Jason Baron <jbaron@redhat.com>
2363 S: Maintained 2363 S: Maintained
2364 F: lib/dynamic_debug.c 2364 F: lib/dynamic_debug.c
2365 F: include/linux/dynamic_debug.h 2365 F: include/linux/dynamic_debug.h
2366 2366
2367 DZ DECSTATION DZ11 SERIAL DRIVER 2367 DZ DECSTATION DZ11 SERIAL DRIVER
2368 M: "Maciej W. Rozycki" <macro@linux-mips.org> 2368 M: "Maciej W. Rozycki" <macro@linux-mips.org>
2369 S: Maintained 2369 S: Maintained
2370 F: drivers/tty/serial/dz.* 2370 F: drivers/tty/serial/dz.*
2371 2371
2372 EATA-DMA SCSI DRIVER 2372 EATA-DMA SCSI DRIVER
2373 M: Michael Neuffer <mike@i-Connect.Net> 2373 M: Michael Neuffer <mike@i-Connect.Net>
2374 L: linux-eata@i-connect.net 2374 L: linux-eata@i-connect.net
2375 L: linux-scsi@vger.kernel.org 2375 L: linux-scsi@vger.kernel.org
2376 S: Maintained 2376 S: Maintained
2377 F: drivers/scsi/eata* 2377 F: drivers/scsi/eata*
2378 2378
2379 EATA ISA/EISA/PCI SCSI DRIVER 2379 EATA ISA/EISA/PCI SCSI DRIVER
2380 M: Dario Ballabio <ballabio_dario@emc.com> 2380 M: Dario Ballabio <ballabio_dario@emc.com>
2381 L: linux-scsi@vger.kernel.org 2381 L: linux-scsi@vger.kernel.org
2382 S: Maintained 2382 S: Maintained
2383 F: drivers/scsi/eata.c 2383 F: drivers/scsi/eata.c
2384 2384
2385 EATA-PIO SCSI DRIVER 2385 EATA-PIO SCSI DRIVER
2386 M: Michael Neuffer <mike@i-Connect.Net> 2386 M: Michael Neuffer <mike@i-Connect.Net>
2387 L: linux-eata@i-connect.net 2387 L: linux-eata@i-connect.net
2388 L: linux-scsi@vger.kernel.org 2388 L: linux-scsi@vger.kernel.org
2389 S: Maintained 2389 S: Maintained
2390 F: drivers/scsi/eata_pio.* 2390 F: drivers/scsi/eata_pio.*
2391 2391
2392 EBTABLES 2392 EBTABLES
2393 M: Bart De Schuymer <bart.de.schuymer@pandora.be> 2393 M: Bart De Schuymer <bart.de.schuymer@pandora.be>
2394 L: netfilter-devel@vger.kernel.org 2394 L: netfilter-devel@vger.kernel.org
2395 W: http://ebtables.sourceforge.net/ 2395 W: http://ebtables.sourceforge.net/
2396 S: Maintained 2396 S: Maintained
2397 F: include/linux/netfilter_bridge/ebt_*.h 2397 F: include/linux/netfilter_bridge/ebt_*.h
2398 F: net/bridge/netfilter/ebt*.c 2398 F: net/bridge/netfilter/ebt*.c
2399 2399
2400 ECRYPT FILE SYSTEM 2400 ECRYPT FILE SYSTEM
2401 M: Tyler Hicks <tyhicks@canonical.com> 2401 M: Tyler Hicks <tyhicks@canonical.com>
2402 M: Dustin Kirkland <dustin.kirkland@gazzang.com> 2402 M: Dustin Kirkland <dustin.kirkland@gazzang.com>
2403 L: ecryptfs@vger.kernel.org 2403 L: ecryptfs@vger.kernel.org
2404 W: https://launchpad.net/ecryptfs 2404 W: https://launchpad.net/ecryptfs
2405 S: Supported 2405 S: Supported
2406 F: Documentation/filesystems/ecryptfs.txt 2406 F: Documentation/filesystems/ecryptfs.txt
2407 F: fs/ecryptfs/ 2407 F: fs/ecryptfs/
2408 2408
2409 EDAC-CORE 2409 EDAC-CORE
2410 M: Doug Thompson <dougthompson@xmission.com> 2410 M: Doug Thompson <dougthompson@xmission.com>
2411 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) 2411 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
2412 W: bluesmoke.sourceforge.net 2412 W: bluesmoke.sourceforge.net
2413 S: Supported 2413 S: Supported
2414 F: Documentation/edac.txt 2414 F: Documentation/edac.txt
2415 F: drivers/edac/edac_* 2415 F: drivers/edac/edac_*
2416 F: include/linux/edac.h 2416 F: include/linux/edac.h
2417 2417
2418 EDAC-AMD64 2418 EDAC-AMD64
2419 M: Doug Thompson <dougthompson@xmission.com> 2419 M: Doug Thompson <dougthompson@xmission.com>
2420 M: Borislav Petkov <borislav.petkov@amd.com> 2420 M: Borislav Petkov <borislav.petkov@amd.com>
2421 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) 2421 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
2422 W: bluesmoke.sourceforge.net 2422 W: bluesmoke.sourceforge.net
2423 S: Supported 2423 S: Supported
2424 F: drivers/edac/amd64_edac* 2424 F: drivers/edac/amd64_edac*
2425 2425
2426 EDAC-E752X 2426 EDAC-E752X
2427 M: Mark Gross <mark.gross@intel.com> 2427 M: Mark Gross <mark.gross@intel.com>
2428 M: Doug Thompson <dougthompson@xmission.com> 2428 M: Doug Thompson <dougthompson@xmission.com>
2429 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) 2429 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
2430 W: bluesmoke.sourceforge.net 2430 W: bluesmoke.sourceforge.net
2431 S: Maintained 2431 S: Maintained
2432 F: drivers/edac/e752x_edac.c 2432 F: drivers/edac/e752x_edac.c
2433 2433
2434 EDAC-E7XXX 2434 EDAC-E7XXX
2435 M: Doug Thompson <dougthompson@xmission.com> 2435 M: Doug Thompson <dougthompson@xmission.com>
2436 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) 2436 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
2437 W: bluesmoke.sourceforge.net 2437 W: bluesmoke.sourceforge.net
2438 S: Maintained 2438 S: Maintained
2439 F: drivers/edac/e7xxx_edac.c 2439 F: drivers/edac/e7xxx_edac.c
2440 2440
2441 EDAC-I82443BXGX 2441 EDAC-I82443BXGX
2442 M: Tim Small <tim@buttersideup.com> 2442 M: Tim Small <tim@buttersideup.com>
2443 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) 2443 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
2444 W: bluesmoke.sourceforge.net 2444 W: bluesmoke.sourceforge.net
2445 S: Maintained 2445 S: Maintained
2446 F: drivers/edac/i82443bxgx_edac.c 2446 F: drivers/edac/i82443bxgx_edac.c
2447 2447
2448 EDAC-I3000 2448 EDAC-I3000
2449 M: Jason Uhlenkott <juhlenko@akamai.com> 2449 M: Jason Uhlenkott <juhlenko@akamai.com>
2450 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) 2450 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
2451 W: bluesmoke.sourceforge.net 2451 W: bluesmoke.sourceforge.net
2452 S: Maintained 2452 S: Maintained
2453 F: drivers/edac/i3000_edac.c 2453 F: drivers/edac/i3000_edac.c
2454 2454
2455 EDAC-I5000 2455 EDAC-I5000
2456 M: Doug Thompson <dougthompson@xmission.com> 2456 M: Doug Thompson <dougthompson@xmission.com>
2457 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) 2457 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
2458 W: bluesmoke.sourceforge.net 2458 W: bluesmoke.sourceforge.net
2459 S: Maintained 2459 S: Maintained
2460 F: drivers/edac/i5000_edac.c 2460 F: drivers/edac/i5000_edac.c
2461 2461
2462 EDAC-I5400 2462 EDAC-I5400
2463 M: Mauro Carvalho Chehab <mchehab@redhat.com> 2463 M: Mauro Carvalho Chehab <mchehab@redhat.com>
2464 L: linux-edac@vger.kernel.org 2464 L: linux-edac@vger.kernel.org
2465 W: bluesmoke.sourceforge.net 2465 W: bluesmoke.sourceforge.net
2466 S: Maintained 2466 S: Maintained
2467 F: drivers/edac/i5400_edac.c 2467 F: drivers/edac/i5400_edac.c
2468 2468
2469 EDAC-I7300 2469 EDAC-I7300
2470 M: Mauro Carvalho Chehab <mchehab@redhat.com> 2470 M: Mauro Carvalho Chehab <mchehab@redhat.com>
2471 L: linux-edac@vger.kernel.org 2471 L: linux-edac@vger.kernel.org
2472 W: bluesmoke.sourceforge.net 2472 W: bluesmoke.sourceforge.net
2473 S: Maintained 2473 S: Maintained
2474 F: drivers/edac/i7300_edac.c 2474 F: drivers/edac/i7300_edac.c
2475 2475
2476 EDAC-I7CORE 2476 EDAC-I7CORE
2477 M: Mauro Carvalho Chehab <mchehab@redhat.com> 2477 M: Mauro Carvalho Chehab <mchehab@redhat.com>
2478 L: linux-edac@vger.kernel.org 2478 L: linux-edac@vger.kernel.org
2479 W: bluesmoke.sourceforge.net 2479 W: bluesmoke.sourceforge.net
2480 S: Maintained 2480 S: Maintained
2481 F: drivers/edac/i7core_edac.c 2481 F: drivers/edac/i7core_edac.c
2482 2482
2483 EDAC-I82975X 2483 EDAC-I82975X
2484 M: Ranganathan Desikan <ravi@jetztechnologies.com> 2484 M: Ranganathan Desikan <ravi@jetztechnologies.com>
2485 M: "Arvind R." <arvino55@gmail.com> 2485 M: "Arvind R." <arvino55@gmail.com>
2486 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) 2486 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
2487 W: bluesmoke.sourceforge.net 2487 W: bluesmoke.sourceforge.net
2488 S: Maintained 2488 S: Maintained
2489 F: drivers/edac/i82975x_edac.c 2489 F: drivers/edac/i82975x_edac.c
2490 2490
2491 EDAC-PASEMI 2491 EDAC-PASEMI
2492 M: Egor Martovetsky <egor@pasemi.com> 2492 M: Egor Martovetsky <egor@pasemi.com>
2493 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) 2493 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
2494 W: bluesmoke.sourceforge.net 2494 W: bluesmoke.sourceforge.net
2495 S: Maintained 2495 S: Maintained
2496 F: drivers/edac/pasemi_edac.c 2496 F: drivers/edac/pasemi_edac.c
2497 2497
2498 EDAC-R82600 2498 EDAC-R82600
2499 M: Tim Small <tim@buttersideup.com> 2499 M: Tim Small <tim@buttersideup.com>
2500 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) 2500 L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
2501 W: bluesmoke.sourceforge.net 2501 W: bluesmoke.sourceforge.net
2502 S: Maintained 2502 S: Maintained
2503 F: drivers/edac/r82600_edac.c 2503 F: drivers/edac/r82600_edac.c
2504 2504
2505 EDAC-SBRIDGE 2505 EDAC-SBRIDGE
2506 M: Mauro Carvalho Chehab <mchehab@redhat.com> 2506 M: Mauro Carvalho Chehab <mchehab@redhat.com>
2507 L: linux-edac@vger.kernel.org 2507 L: linux-edac@vger.kernel.org
2508 W: bluesmoke.sourceforge.net 2508 W: bluesmoke.sourceforge.net
2509 S: Maintained 2509 S: Maintained
2510 F: drivers/edac/sb_edac.c 2510 F: drivers/edac/sb_edac.c
2511 2511
2512 EDIROL UA-101/UA-1000 DRIVER 2512 EDIROL UA-101/UA-1000 DRIVER
2513 M: Clemens Ladisch <clemens@ladisch.de> 2513 M: Clemens Ladisch <clemens@ladisch.de>
2514 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 2514 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
2515 T: git git://git.alsa-project.org/alsa-kernel.git 2515 T: git git://git.alsa-project.org/alsa-kernel.git
2516 S: Maintained 2516 S: Maintained
2517 F: sound/usb/misc/ua101.c 2517 F: sound/usb/misc/ua101.c
2518 2518
2519 EFIFB FRAMEBUFFER DRIVER 2519 EFIFB FRAMEBUFFER DRIVER
2520 L: linux-fbdev@vger.kernel.org 2520 L: linux-fbdev@vger.kernel.org
2521 M: Peter Jones <pjones@redhat.com> 2521 M: Peter Jones <pjones@redhat.com>
2522 S: Maintained 2522 S: Maintained
2523 F: drivers/video/efifb.c 2523 F: drivers/video/efifb.c
2524 2524
2525 EFS FILESYSTEM 2525 EFS FILESYSTEM
2526 W: http://aeschi.ch.eu.org/efs/ 2526 W: http://aeschi.ch.eu.org/efs/
2527 S: Orphan 2527 S: Orphan
2528 F: fs/efs/ 2528 F: fs/efs/
2529 2529
2530 EHCA (IBM GX bus InfiniBand adapter) DRIVER 2530 EHCA (IBM GX bus InfiniBand adapter) DRIVER
2531 M: Hoang-Nam Nguyen <hnguyen@de.ibm.com> 2531 M: Hoang-Nam Nguyen <hnguyen@de.ibm.com>
2532 M: Christoph Raisch <raisch@de.ibm.com> 2532 M: Christoph Raisch <raisch@de.ibm.com>
2533 L: linux-rdma@vger.kernel.org 2533 L: linux-rdma@vger.kernel.org
2534 S: Supported 2534 S: Supported
2535 F: drivers/infiniband/hw/ehca/ 2535 F: drivers/infiniband/hw/ehca/
2536 2536
2537 EHEA (IBM pSeries eHEA 10Gb ethernet adapter) DRIVER 2537 EHEA (IBM pSeries eHEA 10Gb ethernet adapter) DRIVER
2538 M: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com> 2538 M: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
2539 L: netdev@vger.kernel.org 2539 L: netdev@vger.kernel.org
2540 S: Maintained 2540 S: Maintained
2541 F: drivers/net/ethernet/ibm/ehea/ 2541 F: drivers/net/ethernet/ibm/ehea/
2542 2542
2543 EMBEDDED LINUX 2543 EMBEDDED LINUX
2544 M: Paul Gortmaker <paul.gortmaker@windriver.com> 2544 M: Paul Gortmaker <paul.gortmaker@windriver.com>
2545 M: Matt Mackall <mpm@selenic.com> 2545 M: Matt Mackall <mpm@selenic.com>
2546 M: David Woodhouse <dwmw2@infradead.org> 2546 M: David Woodhouse <dwmw2@infradead.org>
2547 L: linux-embedded@vger.kernel.org 2547 L: linux-embedded@vger.kernel.org
2548 S: Maintained 2548 S: Maintained
2549 2549
2550 EMULEX LPFC FC SCSI DRIVER 2550 EMULEX LPFC FC SCSI DRIVER
2551 M: James Smart <james.smart@emulex.com> 2551 M: James Smart <james.smart@emulex.com>
2552 L: linux-scsi@vger.kernel.org 2552 L: linux-scsi@vger.kernel.org
2553 W: http://sourceforge.net/projects/lpfcxxxx 2553 W: http://sourceforge.net/projects/lpfcxxxx
2554 S: Supported 2554 S: Supported
2555 F: drivers/scsi/lpfc/ 2555 F: drivers/scsi/lpfc/
2556 2556
2557 ENE CB710 FLASH CARD READER DRIVER 2557 ENE CB710 FLASH CARD READER DRIVER
2558 M: Michaล‚ Mirosล‚aw <mirq-linux@rere.qmqm.pl> 2558 M: Michaล‚ Mirosล‚aw <mirq-linux@rere.qmqm.pl>
2559 S: Maintained 2559 S: Maintained
2560 F: drivers/misc/cb710/ 2560 F: drivers/misc/cb710/
2561 F: drivers/mmc/host/cb710-mmc.* 2561 F: drivers/mmc/host/cb710-mmc.*
2562 F: include/linux/cb710.h 2562 F: include/linux/cb710.h
2563 2563
2564 ENE KB2426 (ENE0100/ENE020XX) INFRARED RECEIVER 2564 ENE KB2426 (ENE0100/ENE020XX) INFRARED RECEIVER
2565 M: Maxim Levitsky <maximlevitsky@gmail.com> 2565 M: Maxim Levitsky <maximlevitsky@gmail.com>
2566 S: Maintained 2566 S: Maintained
2567 F: drivers/media/rc/ene_ir.* 2567 F: drivers/media/rc/ene_ir.*
2568 2568
2569 EPSON 1355 FRAMEBUFFER DRIVER 2569 EPSON 1355 FRAMEBUFFER DRIVER
2570 M: Christopher Hoover <ch@murgatroid.com> 2570 M: Christopher Hoover <ch@murgatroid.com>
2571 M: Christopher Hoover <ch@hpl.hp.com> 2571 M: Christopher Hoover <ch@hpl.hp.com>
2572 S: Maintained 2572 S: Maintained
2573 F: drivers/video/epson1355fb.c 2573 F: drivers/video/epson1355fb.c
2574 2574
2575 EPSON S1D13XXX FRAMEBUFFER DRIVER 2575 EPSON S1D13XXX FRAMEBUFFER DRIVER
2576 M: Kristoffer Ericson <kristoffer.ericson@gmail.com> 2576 M: Kristoffer Ericson <kristoffer.ericson@gmail.com>
2577 S: Maintained 2577 S: Maintained
2578 T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git 2578 T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git
2579 F: drivers/video/s1d13xxxfb.c 2579 F: drivers/video/s1d13xxxfb.c
2580 F: include/video/s1d13xxxfb.h 2580 F: include/video/s1d13xxxfb.h
2581 2581
2582 ETHEREXPRESS-16 NETWORK DRIVER 2582 ETHEREXPRESS-16 NETWORK DRIVER
2583 M: Philip Blundell <philb@gnu.org> 2583 M: Philip Blundell <philb@gnu.org>
2584 L: netdev@vger.kernel.org 2584 L: netdev@vger.kernel.org
2585 S: Maintained 2585 S: Maintained
2586 F: drivers/net/ethernet/i825xx/eexpress.* 2586 F: drivers/net/ethernet/i825xx/eexpress.*
2587 2587
2588 ETHERNET BRIDGE 2588 ETHERNET BRIDGE
2589 M: Stephen Hemminger <shemminger@vyatta.com> 2589 M: Stephen Hemminger <shemminger@vyatta.com>
2590 L: bridge@lists.linux-foundation.org 2590 L: bridge@lists.linux-foundation.org
2591 L: netdev@vger.kernel.org 2591 L: netdev@vger.kernel.org
2592 W: http://www.linuxfoundation.org/en/Net:Bridge 2592 W: http://www.linuxfoundation.org/en/Net:Bridge
2593 S: Maintained 2593 S: Maintained
2594 F: include/linux/netfilter_bridge/ 2594 F: include/linux/netfilter_bridge/
2595 F: net/bridge/ 2595 F: net/bridge/
2596 2596
2597 ETHERTEAM 16I DRIVER 2597 ETHERTEAM 16I DRIVER
2598 M: Mika Kuoppala <miku@iki.fi> 2598 M: Mika Kuoppala <miku@iki.fi>
2599 S: Maintained 2599 S: Maintained
2600 F: drivers/net/ethernet/fujitsu/eth16i.c 2600 F: drivers/net/ethernet/fujitsu/eth16i.c
2601 2601
2602 EXT2 FILE SYSTEM 2602 EXT2 FILE SYSTEM
2603 M: Jan Kara <jack@suse.cz> 2603 M: Jan Kara <jack@suse.cz>
2604 L: linux-ext4@vger.kernel.org 2604 L: linux-ext4@vger.kernel.org
2605 S: Maintained 2605 S: Maintained
2606 F: Documentation/filesystems/ext2.txt 2606 F: Documentation/filesystems/ext2.txt
2607 F: fs/ext2/ 2607 F: fs/ext2/
2608 F: include/linux/ext2* 2608 F: include/linux/ext2*
2609 2609
2610 EXT3 FILE SYSTEM 2610 EXT3 FILE SYSTEM
2611 M: Jan Kara <jack@suse.cz> 2611 M: Jan Kara <jack@suse.cz>
2612 M: Andrew Morton <akpm@linux-foundation.org> 2612 M: Andrew Morton <akpm@linux-foundation.org>
2613 M: Andreas Dilger <adilger.kernel@dilger.ca> 2613 M: Andreas Dilger <adilger.kernel@dilger.ca>
2614 L: linux-ext4@vger.kernel.org 2614 L: linux-ext4@vger.kernel.org
2615 S: Maintained 2615 S: Maintained
2616 F: Documentation/filesystems/ext3.txt 2616 F: Documentation/filesystems/ext3.txt
2617 F: fs/ext3/ 2617 F: fs/ext3/
2618 F: include/linux/ext3* 2618 F: include/linux/ext3*
2619 2619
2620 EXT4 FILE SYSTEM 2620 EXT4 FILE SYSTEM
2621 M: "Theodore Ts'o" <tytso@mit.edu> 2621 M: "Theodore Ts'o" <tytso@mit.edu>
2622 M: Andreas Dilger <adilger.kernel@dilger.ca> 2622 M: Andreas Dilger <adilger.kernel@dilger.ca>
2623 L: linux-ext4@vger.kernel.org 2623 L: linux-ext4@vger.kernel.org
2624 W: http://ext4.wiki.kernel.org 2624 W: http://ext4.wiki.kernel.org
2625 Q: http://patchwork.ozlabs.org/project/linux-ext4/list/ 2625 Q: http://patchwork.ozlabs.org/project/linux-ext4/list/
2626 S: Maintained 2626 S: Maintained
2627 F: Documentation/filesystems/ext4.txt 2627 F: Documentation/filesystems/ext4.txt
2628 F: fs/ext4/ 2628 F: fs/ext4/
2629 2629
2630 Extended Verification Module (EVM) 2630 Extended Verification Module (EVM)
2631 M: Mimi Zohar <zohar@us.ibm.com> 2631 M: Mimi Zohar <zohar@us.ibm.com>
2632 S: Supported 2632 S: Supported
2633 F: security/integrity/evm/ 2633 F: security/integrity/evm/
2634 2634
2635 F71805F HARDWARE MONITORING DRIVER 2635 F71805F HARDWARE MONITORING DRIVER
2636 M: Jean Delvare <khali@linux-fr.org> 2636 M: Jean Delvare <khali@linux-fr.org>
2637 L: lm-sensors@lm-sensors.org 2637 L: lm-sensors@lm-sensors.org
2638 S: Maintained 2638 S: Maintained
2639 F: Documentation/hwmon/f71805f 2639 F: Documentation/hwmon/f71805f
2640 F: drivers/hwmon/f71805f.c 2640 F: drivers/hwmon/f71805f.c
2641 2641
2642 FANOTIFY 2642 FANOTIFY
2643 M: Eric Paris <eparis@redhat.com> 2643 M: Eric Paris <eparis@redhat.com>
2644 S: Maintained 2644 S: Maintained
2645 F: fs/notify/fanotify/ 2645 F: fs/notify/fanotify/
2646 F: include/linux/fanotify.h 2646 F: include/linux/fanotify.h
2647 2647
2648 FARSYNC SYNCHRONOUS DRIVER 2648 FARSYNC SYNCHRONOUS DRIVER
2649 M: Kevin Curtis <kevin.curtis@farsite.co.uk> 2649 M: Kevin Curtis <kevin.curtis@farsite.co.uk>
2650 W: http://www.farsite.co.uk/ 2650 W: http://www.farsite.co.uk/
2651 S: Supported 2651 S: Supported
2652 F: drivers/net/wan/farsync.* 2652 F: drivers/net/wan/farsync.*
2653 2653
2654 FAULT INJECTION SUPPORT 2654 FAULT INJECTION SUPPORT
2655 M: Akinobu Mita <akinobu.mita@gmail.com> 2655 M: Akinobu Mita <akinobu.mita@gmail.com>
2656 S: Supported 2656 S: Supported
2657 F: Documentation/fault-injection/ 2657 F: Documentation/fault-injection/
2658 F: lib/fault-inject.c 2658 F: lib/fault-inject.c
2659 2659
2660 FCOE SUBSYSTEM (libfc, libfcoe, fcoe) 2660 FCOE SUBSYSTEM (libfc, libfcoe, fcoe)
2661 M: Robert Love <robert.w.love@intel.com> 2661 M: Robert Love <robert.w.love@intel.com>
2662 L: devel@open-fcoe.org 2662 L: devel@open-fcoe.org
2663 W: www.Open-FCoE.org 2663 W: www.Open-FCoE.org
2664 S: Supported 2664 S: Supported
2665 F: drivers/scsi/libfc/ 2665 F: drivers/scsi/libfc/
2666 F: drivers/scsi/fcoe/ 2666 F: drivers/scsi/fcoe/
2667 F: include/scsi/fc/ 2667 F: include/scsi/fc/
2668 F: include/scsi/libfc.h 2668 F: include/scsi/libfc.h
2669 F: include/scsi/libfcoe.h 2669 F: include/scsi/libfcoe.h
2670 2670
2671 FILE LOCKING (flock() and fcntl()/lockf()) 2671 FILE LOCKING (flock() and fcntl()/lockf())
2672 M: Matthew Wilcox <matthew@wil.cx> 2672 M: Matthew Wilcox <matthew@wil.cx>
2673 L: linux-fsdevel@vger.kernel.org 2673 L: linux-fsdevel@vger.kernel.org
2674 S: Maintained 2674 S: Maintained
2675 F: include/linux/fcntl.h 2675 F: include/linux/fcntl.h
2676 F: include/linux/fs.h 2676 F: include/linux/fs.h
2677 F: fs/fcntl.c 2677 F: fs/fcntl.c
2678 F: fs/locks.c 2678 F: fs/locks.c
2679 2679
2680 FILESYSTEMS (VFS and infrastructure) 2680 FILESYSTEMS (VFS and infrastructure)
2681 M: Alexander Viro <viro@zeniv.linux.org.uk> 2681 M: Alexander Viro <viro@zeniv.linux.org.uk>
2682 L: linux-fsdevel@vger.kernel.org 2682 L: linux-fsdevel@vger.kernel.org
2683 S: Maintained 2683 S: Maintained
2684 F: fs/* 2684 F: fs/*
2685 2685
2686 FINTEK F75375S HARDWARE MONITOR AND FAN CONTROLLER DRIVER 2686 FINTEK F75375S HARDWARE MONITOR AND FAN CONTROLLER DRIVER
2687 M: Riku Voipio <riku.voipio@iki.fi> 2687 M: Riku Voipio <riku.voipio@iki.fi>
2688 L: lm-sensors@lm-sensors.org 2688 L: lm-sensors@lm-sensors.org
2689 S: Maintained 2689 S: Maintained
2690 F: drivers/hwmon/f75375s.c 2690 F: drivers/hwmon/f75375s.c
2691 F: include/linux/f75375s.h 2691 F: include/linux/f75375s.h
2692 2692
2693 FIREWIRE AUDIO DRIVERS 2693 FIREWIRE AUDIO DRIVERS
2694 M: Clemens Ladisch <clemens@ladisch.de> 2694 M: Clemens Ladisch <clemens@ladisch.de>
2695 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 2695 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
2696 T: git git://git.alsa-project.org/alsa-kernel.git 2696 T: git git://git.alsa-project.org/alsa-kernel.git
2697 S: Maintained 2697 S: Maintained
2698 F: sound/firewire/ 2698 F: sound/firewire/
2699 2699
2700 FIREWIRE SUBSYSTEM 2700 FIREWIRE SUBSYSTEM
2701 M: Stefan Richter <stefanr@s5r6.in-berlin.de> 2701 M: Stefan Richter <stefanr@s5r6.in-berlin.de>
2702 L: linux1394-devel@lists.sourceforge.net 2702 L: linux1394-devel@lists.sourceforge.net
2703 W: http://ieee1394.wiki.kernel.org/ 2703 W: http://ieee1394.wiki.kernel.org/
2704 T: git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394.git 2704 T: git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394.git
2705 S: Maintained 2705 S: Maintained
2706 F: drivers/firewire/ 2706 F: drivers/firewire/
2707 F: include/linux/firewire*.h 2707 F: include/linux/firewire*.h
2708 F: tools/firewire/ 2708 F: tools/firewire/
2709 2709
2710 FIRMWARE LOADER (request_firmware) 2710 FIRMWARE LOADER (request_firmware)
2711 S: Orphan 2711 S: Orphan
2712 F: Documentation/firmware_class/ 2712 F: Documentation/firmware_class/
2713 F: drivers/base/firmware*.c 2713 F: drivers/base/firmware*.c
2714 F: include/linux/firmware.h 2714 F: include/linux/firmware.h
2715 2715
2716 FPU EMULATOR 2716 FPU EMULATOR
2717 M: Bill Metzenthen <billm@melbpc.org.au> 2717 M: Bill Metzenthen <billm@melbpc.org.au>
2718 W: http://floatingpoint.sourceforge.net/emulator/index.html 2718 W: http://floatingpoint.sourceforge.net/emulator/index.html
2719 S: Maintained 2719 S: Maintained
2720 F: arch/x86/math-emu/ 2720 F: arch/x86/math-emu/
2721 2721
2722 FRAME RELAY DLCI/FRAD (Sangoma drivers too) 2722 FRAME RELAY DLCI/FRAD (Sangoma drivers too)
2723 L: netdev@vger.kernel.org 2723 L: netdev@vger.kernel.org
2724 S: Orphan 2724 S: Orphan
2725 F: drivers/net/wan/dlci.c 2725 F: drivers/net/wan/dlci.c
2726 F: drivers/net/wan/sdla.c 2726 F: drivers/net/wan/sdla.c
2727 2727
2728 FRAMEBUFFER LAYER 2728 FRAMEBUFFER LAYER
2729 M: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> 2729 M: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
2730 L: linux-fbdev@vger.kernel.org 2730 L: linux-fbdev@vger.kernel.org
2731 W: http://linux-fbdev.sourceforge.net/ 2731 W: http://linux-fbdev.sourceforge.net/
2732 Q: http://patchwork.kernel.org/project/linux-fbdev/list/ 2732 Q: http://patchwork.kernel.org/project/linux-fbdev/list/
2733 T: git git://github.com/schandinat/linux-2.6.git fbdev-next 2733 T: git git://github.com/schandinat/linux-2.6.git fbdev-next
2734 S: Maintained 2734 S: Maintained
2735 F: Documentation/fb/ 2735 F: Documentation/fb/
2736 F: Documentation/devicetree/bindings/fb/ 2736 F: Documentation/devicetree/bindings/fb/
2737 F: drivers/video/ 2737 F: drivers/video/
2738 F: include/video/ 2738 F: include/video/
2739 F: include/linux/fb.h 2739 F: include/linux/fb.h
2740 2740
2741 FREESCALE DMA DRIVER 2741 FREESCALE DMA DRIVER
2742 M: Li Yang <leoli@freescale.com> 2742 M: Li Yang <leoli@freescale.com>
2743 M: Zhang Wei <zw@zh-kernel.org> 2743 M: Zhang Wei <zw@zh-kernel.org>
2744 L: linuxppc-dev@lists.ozlabs.org 2744 L: linuxppc-dev@lists.ozlabs.org
2745 S: Maintained 2745 S: Maintained
2746 F: drivers/dma/fsldma.* 2746 F: drivers/dma/fsldma.*
2747 2747
2748 FREESCALE I2C CPM DRIVER 2748 FREESCALE I2C CPM DRIVER
2749 M: Jochen Friedrich <jochen@scram.de> 2749 M: Jochen Friedrich <jochen@scram.de>
2750 L: linuxppc-dev@lists.ozlabs.org 2750 L: linuxppc-dev@lists.ozlabs.org
2751 L: linux-i2c@vger.kernel.org 2751 L: linux-i2c@vger.kernel.org
2752 S: Maintained 2752 S: Maintained
2753 F: drivers/i2c/busses/i2c-cpm.c 2753 F: drivers/i2c/busses/i2c-cpm.c
2754 2754
2755 FREESCALE IMX / MXC FRAMEBUFFER DRIVER 2755 FREESCALE IMX / MXC FRAMEBUFFER DRIVER
2756 M: Sascha Hauer <kernel@pengutronix.de> 2756 M: Sascha Hauer <kernel@pengutronix.de>
2757 L: linux-fbdev@vger.kernel.org 2757 L: linux-fbdev@vger.kernel.org
2758 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 2758 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
2759 S: Maintained 2759 S: Maintained
2760 F: arch/arm/plat-mxc/include/mach/imxfb.h 2760 F: arch/arm/plat-mxc/include/mach/imxfb.h
2761 F: drivers/video/imxfb.c 2761 F: drivers/video/imxfb.c
2762 2762
2763 FREESCALE SOC FS_ENET DRIVER 2763 FREESCALE SOC FS_ENET DRIVER
2764 M: Pantelis Antoniou <pantelis.antoniou@gmail.com> 2764 M: Pantelis Antoniou <pantelis.antoniou@gmail.com>
2765 M: Vitaly Bordug <vbordug@ru.mvista.com> 2765 M: Vitaly Bordug <vbordug@ru.mvista.com>
2766 L: linuxppc-dev@lists.ozlabs.org 2766 L: linuxppc-dev@lists.ozlabs.org
2767 L: netdev@vger.kernel.org 2767 L: netdev@vger.kernel.org
2768 S: Maintained 2768 S: Maintained
2769 F: drivers/net/ethernet/freescale/fs_enet/ 2769 F: drivers/net/ethernet/freescale/fs_enet/
2770 F: include/linux/fs_enet_pd.h 2770 F: include/linux/fs_enet_pd.h
2771 2771
2772 FREESCALE QUICC ENGINE LIBRARY 2772 FREESCALE QUICC ENGINE LIBRARY
2773 M: Timur Tabi <timur@freescale.com> 2773 M: Timur Tabi <timur@freescale.com>
2774 L: linuxppc-dev@lists.ozlabs.org 2774 L: linuxppc-dev@lists.ozlabs.org
2775 S: Supported 2775 S: Supported
2776 F: arch/powerpc/sysdev/qe_lib/ 2776 F: arch/powerpc/sysdev/qe_lib/
2777 F: arch/powerpc/include/asm/*qe.h 2777 F: arch/powerpc/include/asm/*qe.h
2778 2778
2779 FREESCALE USB PERIPHERAL DRIVERS 2779 FREESCALE USB PERIPHERAL DRIVERS
2780 M: Li Yang <leoli@freescale.com> 2780 M: Li Yang <leoli@freescale.com>
2781 L: linux-usb@vger.kernel.org 2781 L: linux-usb@vger.kernel.org
2782 L: linuxppc-dev@lists.ozlabs.org 2782 L: linuxppc-dev@lists.ozlabs.org
2783 S: Maintained 2783 S: Maintained
2784 F: drivers/usb/gadget/fsl* 2784 F: drivers/usb/gadget/fsl*
2785 2785
2786 FREESCALE QUICC ENGINE UCC ETHERNET DRIVER 2786 FREESCALE QUICC ENGINE UCC ETHERNET DRIVER
2787 M: Li Yang <leoli@freescale.com> 2787 M: Li Yang <leoli@freescale.com>
2788 L: netdev@vger.kernel.org 2788 L: netdev@vger.kernel.org
2789 L: linuxppc-dev@lists.ozlabs.org 2789 L: linuxppc-dev@lists.ozlabs.org
2790 S: Maintained 2790 S: Maintained
2791 F: drivers/net/ethernet/freescale/ucc_geth* 2791 F: drivers/net/ethernet/freescale/ucc_geth*
2792 2792
2793 FREESCALE QUICC ENGINE UCC UART DRIVER 2793 FREESCALE QUICC ENGINE UCC UART DRIVER
2794 M: Timur Tabi <timur@freescale.com> 2794 M: Timur Tabi <timur@freescale.com>
2795 L: linuxppc-dev@lists.ozlabs.org 2795 L: linuxppc-dev@lists.ozlabs.org
2796 S: Supported 2796 S: Supported
2797 F: drivers/tty/serial/ucc_uart.c 2797 F: drivers/tty/serial/ucc_uart.c
2798 2798
2799 FREESCALE SOC SOUND DRIVERS 2799 FREESCALE SOC SOUND DRIVERS
2800 M: Timur Tabi <timur@freescale.com> 2800 M: Timur Tabi <timur@freescale.com>
2801 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 2801 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
2802 L: linuxppc-dev@lists.ozlabs.org 2802 L: linuxppc-dev@lists.ozlabs.org
2803 S: Supported 2803 S: Supported
2804 F: sound/soc/fsl/fsl* 2804 F: sound/soc/fsl/fsl*
2805 F: sound/soc/fsl/mpc8610_hpcd.c 2805 F: sound/soc/fsl/mpc8610_hpcd.c
2806 2806
2807 FREEVXFS FILESYSTEM 2807 FREEVXFS FILESYSTEM
2808 M: Christoph Hellwig <hch@infradead.org> 2808 M: Christoph Hellwig <hch@infradead.org>
2809 W: ftp://ftp.openlinux.org/pub/people/hch/vxfs 2809 W: ftp://ftp.openlinux.org/pub/people/hch/vxfs
2810 S: Maintained 2810 S: Maintained
2811 F: fs/freevxfs/ 2811 F: fs/freevxfs/
2812 2812
2813 FREEZER 2813 FREEZER
2814 M: Pavel Machek <pavel@ucw.cz> 2814 M: Pavel Machek <pavel@ucw.cz>
2815 M: "Rafael J. Wysocki" <rjw@sisk.pl> 2815 M: "Rafael J. Wysocki" <rjw@sisk.pl>
2816 L: linux-pm@vger.kernel.org 2816 L: linux-pm@vger.kernel.org
2817 S: Supported 2817 S: Supported
2818 F: Documentation/power/freezing-of-tasks.txt 2818 F: Documentation/power/freezing-of-tasks.txt
2819 F: include/linux/freezer.h 2819 F: include/linux/freezer.h
2820 F: kernel/freezer.c 2820 F: kernel/freezer.c
2821 2821
2822 FS-CACHE: LOCAL CACHING FOR NETWORK FILESYSTEMS 2822 FS-CACHE: LOCAL CACHING FOR NETWORK FILESYSTEMS
2823 M: David Howells <dhowells@redhat.com> 2823 M: David Howells <dhowells@redhat.com>
2824 L: linux-cachefs@redhat.com 2824 L: linux-cachefs@redhat.com
2825 S: Supported 2825 S: Supported
2826 F: Documentation/filesystems/caching/ 2826 F: Documentation/filesystems/caching/
2827 F: fs/fscache/ 2827 F: fs/fscache/
2828 F: include/linux/fscache*.h 2828 F: include/linux/fscache*.h
2829 2829
2830 FUJITSU FR-V (FRV) PORT 2830 FUJITSU FR-V (FRV) PORT
2831 M: David Howells <dhowells@redhat.com> 2831 M: David Howells <dhowells@redhat.com>
2832 S: Maintained 2832 S: Maintained
2833 F: arch/frv/ 2833 F: arch/frv/
2834 2834
2835 FUJITSU LAPTOP EXTRAS 2835 FUJITSU LAPTOP EXTRAS
2836 M: Jonathan Woithe <jwoithe@physics.adelaide.edu.au> 2836 M: Jonathan Woithe <jwoithe@physics.adelaide.edu.au>
2837 L: platform-driver-x86@vger.kernel.org 2837 L: platform-driver-x86@vger.kernel.org
2838 S: Maintained 2838 S: Maintained
2839 F: drivers/platform/x86/fujitsu-laptop.c 2839 F: drivers/platform/x86/fujitsu-laptop.c
2840 2840
2841 FUJITSU M-5MO LS CAMERA ISP DRIVER 2841 FUJITSU M-5MO LS CAMERA ISP DRIVER
2842 M: Kyungmin Park <kyungmin.park@samsung.com> 2842 M: Kyungmin Park <kyungmin.park@samsung.com>
2843 M: Heungjun Kim <riverful.kim@samsung.com> 2843 M: Heungjun Kim <riverful.kim@samsung.com>
2844 L: linux-media@vger.kernel.org 2844 L: linux-media@vger.kernel.org
2845 S: Maintained 2845 S: Maintained
2846 F: drivers/media/video/m5mols/ 2846 F: drivers/media/video/m5mols/
2847 F: include/media/m5mols.h 2847 F: include/media/m5mols.h
2848 2848
2849 FUSE: FILESYSTEM IN USERSPACE 2849 FUSE: FILESYSTEM IN USERSPACE
2850 M: Miklos Szeredi <miklos@szeredi.hu> 2850 M: Miklos Szeredi <miklos@szeredi.hu>
2851 L: fuse-devel@lists.sourceforge.net 2851 L: fuse-devel@lists.sourceforge.net
2852 W: http://fuse.sourceforge.net/ 2852 W: http://fuse.sourceforge.net/
2853 S: Maintained 2853 S: Maintained
2854 F: fs/fuse/ 2854 F: fs/fuse/
2855 F: include/linux/fuse.h 2855 F: include/linux/fuse.h
2856 2856
2857 FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit) 2857 FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit)
2858 M: Rik Faith <faith@cs.unc.edu> 2858 M: Rik Faith <faith@cs.unc.edu>
2859 L: linux-scsi@vger.kernel.org 2859 L: linux-scsi@vger.kernel.org
2860 S: Odd Fixes (e.g., new signatures) 2860 S: Odd Fixes (e.g., new signatures)
2861 F: drivers/scsi/fdomain.* 2861 F: drivers/scsi/fdomain.*
2862 2862
2863 GDT SCSI DISK ARRAY CONTROLLER DRIVER 2863 GDT SCSI DISK ARRAY CONTROLLER DRIVER
2864 M: Achim Leubner <achim_leubner@adaptec.com> 2864 M: Achim Leubner <achim_leubner@adaptec.com>
2865 L: linux-scsi@vger.kernel.org 2865 L: linux-scsi@vger.kernel.org
2866 W: http://www.icp-vortex.com/ 2866 W: http://www.icp-vortex.com/
2867 S: Supported 2867 S: Supported
2868 F: drivers/scsi/gdt* 2868 F: drivers/scsi/gdt*
2869 2869
2870 GENERIC GPIO I2C DRIVER 2870 GENERIC GPIO I2C DRIVER
2871 M: Haavard Skinnemoen <hskinnemoen@gmail.com> 2871 M: Haavard Skinnemoen <hskinnemoen@gmail.com>
2872 S: Supported 2872 S: Supported
2873 F: drivers/i2c/busses/i2c-gpio.c 2873 F: drivers/i2c/busses/i2c-gpio.c
2874 F: include/linux/i2c-gpio.h 2874 F: include/linux/i2c-gpio.h
2875 2875
2876 GENERIC GPIO I2C MULTIPLEXER DRIVER 2876 GENERIC GPIO I2C MULTIPLEXER DRIVER
2877 M: Peter Korsgaard <peter.korsgaard@barco.com> 2877 M: Peter Korsgaard <peter.korsgaard@barco.com>
2878 L: linux-i2c@vger.kernel.org 2878 L: linux-i2c@vger.kernel.org
2879 S: Supported 2879 S: Supported
2880 F: drivers/i2c/muxes/gpio-i2cmux.c 2880 F: drivers/i2c/muxes/gpio-i2cmux.c
2881 F: include/linux/gpio-i2cmux.h 2881 F: include/linux/gpio-i2cmux.h
2882 F: Documentation/i2c/muxes/gpio-i2cmux 2882 F: Documentation/i2c/muxes/gpio-i2cmux
2883 2883
2884 GENERIC HDLC (WAN) DRIVERS 2884 GENERIC HDLC (WAN) DRIVERS
2885 M: Krzysztof Halasa <khc@pm.waw.pl> 2885 M: Krzysztof Halasa <khc@pm.waw.pl>
2886 W: http://www.kernel.org/pub/linux/utils/net/hdlc/ 2886 W: http://www.kernel.org/pub/linux/utils/net/hdlc/
2887 S: Maintained 2887 S: Maintained
2888 F: drivers/net/wan/c101.c 2888 F: drivers/net/wan/c101.c
2889 F: drivers/net/wan/hd6457* 2889 F: drivers/net/wan/hd6457*
2890 F: drivers/net/wan/hdlc* 2890 F: drivers/net/wan/hdlc*
2891 F: drivers/net/wan/n2.c 2891 F: drivers/net/wan/n2.c
2892 F: drivers/net/wan/pc300too.c 2892 F: drivers/net/wan/pc300too.c
2893 F: drivers/net/wan/pci200syn.c 2893 F: drivers/net/wan/pci200syn.c
2894 F: drivers/net/wan/wanxl* 2894 F: drivers/net/wan/wanxl*
2895 2895
2896 GENERIC INCLUDE/ASM HEADER FILES 2896 GENERIC INCLUDE/ASM HEADER FILES
2897 M: Arnd Bergmann <arnd@arndb.de> 2897 M: Arnd Bergmann <arnd@arndb.de>
2898 L: linux-arch@vger.kernel.org 2898 L: linux-arch@vger.kernel.org
2899 T: git git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic.git 2899 T: git git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic.git
2900 S: Maintained 2900 S: Maintained
2901 F: include/asm-generic 2901 F: include/asm-generic
2902 2902
2903 GENERIC UIO DRIVER FOR PCI DEVICES 2903 GENERIC UIO DRIVER FOR PCI DEVICES
2904 M: "Michael S. Tsirkin" <mst@redhat.com> 2904 M: "Michael S. Tsirkin" <mst@redhat.com>
2905 L: kvm@vger.kernel.org 2905 L: kvm@vger.kernel.org
2906 S: Supported 2906 S: Supported
2907 F: drivers/uio/uio_pci_generic.c 2907 F: drivers/uio/uio_pci_generic.c
2908 2908
2909 GFS2 FILE SYSTEM 2909 GFS2 FILE SYSTEM
2910 M: Steven Whitehouse <swhiteho@redhat.com> 2910 M: Steven Whitehouse <swhiteho@redhat.com>
2911 L: cluster-devel@redhat.com 2911 L: cluster-devel@redhat.com
2912 W: http://sources.redhat.com/cluster/ 2912 W: http://sources.redhat.com/cluster/
2913 T: git git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-fixes.git 2913 T: git git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-fixes.git
2914 T: git git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw.git 2914 T: git git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw.git
2915 S: Supported 2915 S: Supported
2916 F: Documentation/filesystems/gfs2*.txt 2916 F: Documentation/filesystems/gfs2*.txt
2917 F: fs/gfs2/ 2917 F: fs/gfs2/
2918 F: include/linux/gfs2_ondisk.h 2918 F: include/linux/gfs2_ondisk.h
2919 2919
2920 GIGASET ISDN DRIVERS 2920 GIGASET ISDN DRIVERS
2921 M: Hansjoerg Lipp <hjlipp@web.de> 2921 M: Hansjoerg Lipp <hjlipp@web.de>
2922 M: Tilman Schmidt <tilman@imap.cc> 2922 M: Tilman Schmidt <tilman@imap.cc>
2923 L: gigaset307x-common@lists.sourceforge.net 2923 L: gigaset307x-common@lists.sourceforge.net
2924 W: http://gigaset307x.sourceforge.net/ 2924 W: http://gigaset307x.sourceforge.net/
2925 S: Maintained 2925 S: Maintained
2926 F: Documentation/isdn/README.gigaset 2926 F: Documentation/isdn/README.gigaset
2927 F: drivers/isdn/gigaset/ 2927 F: drivers/isdn/gigaset/
2928 F: include/linux/gigaset_dev.h 2928 F: include/linux/gigaset_dev.h
2929 2929
2930 GPIO SUBSYSTEM 2930 GPIO SUBSYSTEM
2931 M: Grant Likely <grant.likely@secretlab.ca> 2931 M: Grant Likely <grant.likely@secretlab.ca>
2932 M: Linus Walleij <linus.walleij@stericsson.com> 2932 M: Linus Walleij <linus.walleij@stericsson.com>
2933 S: Maintained 2933 S: Maintained
2934 T: git git://git.secretlab.ca/git/linux-2.6.git 2934 T: git git://git.secretlab.ca/git/linux-2.6.git
2935 F: Documentation/gpio.txt 2935 F: Documentation/gpio.txt
2936 F: drivers/gpio/ 2936 F: drivers/gpio/
2937 F: include/linux/gpio* 2937 F: include/linux/gpio*
2938 2938
2939 GRE DEMULTIPLEXER DRIVER 2939 GRE DEMULTIPLEXER DRIVER
2940 M: Dmitry Kozlov <xeb@mail.ru> 2940 M: Dmitry Kozlov <xeb@mail.ru>
2941 L: netdev@vger.kernel.org 2941 L: netdev@vger.kernel.org
2942 S: Maintained 2942 S: Maintained
2943 F: net/ipv4/gre.c 2943 F: net/ipv4/gre.c
2944 F: include/net/gre.h 2944 F: include/net/gre.h
2945 2945
2946 GRETH 10/100/1G Ethernet MAC device driver 2946 GRETH 10/100/1G Ethernet MAC device driver
2947 M: Kristoffer Glembo <kristoffer@gaisler.com> 2947 M: Kristoffer Glembo <kristoffer@gaisler.com>
2948 L: netdev@vger.kernel.org 2948 L: netdev@vger.kernel.org
2949 S: Maintained 2949 S: Maintained
2950 F: drivers/net/ethernet/aeroflex/ 2950 F: drivers/net/ethernet/aeroflex/
2951 2951
2952 GSPCA FINEPIX SUBDRIVER 2952 GSPCA FINEPIX SUBDRIVER
2953 M: Frank Zago <frank@zago.net> 2953 M: Frank Zago <frank@zago.net>
2954 L: linux-media@vger.kernel.org 2954 L: linux-media@vger.kernel.org
2955 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 2955 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
2956 S: Maintained 2956 S: Maintained
2957 F: drivers/media/video/gspca/finepix.c 2957 F: drivers/media/video/gspca/finepix.c
2958 2958
2959 GSPCA GL860 SUBDRIVER 2959 GSPCA GL860 SUBDRIVER
2960 M: Olivier Lorin <o.lorin@laposte.net> 2960 M: Olivier Lorin <o.lorin@laposte.net>
2961 L: linux-media@vger.kernel.org 2961 L: linux-media@vger.kernel.org
2962 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 2962 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
2963 S: Maintained 2963 S: Maintained
2964 F: drivers/media/video/gspca/gl860/ 2964 F: drivers/media/video/gspca/gl860/
2965 2965
2966 GSPCA M5602 SUBDRIVER 2966 GSPCA M5602 SUBDRIVER
2967 M: Erik Andren <erik.andren@gmail.com> 2967 M: Erik Andren <erik.andren@gmail.com>
2968 L: linux-media@vger.kernel.org 2968 L: linux-media@vger.kernel.org
2969 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 2969 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
2970 S: Maintained 2970 S: Maintained
2971 F: drivers/media/video/gspca/m5602/ 2971 F: drivers/media/video/gspca/m5602/
2972 2972
2973 GSPCA PAC207 SONIXB SUBDRIVER 2973 GSPCA PAC207 SONIXB SUBDRIVER
2974 M: Hans de Goede <hdegoede@redhat.com> 2974 M: Hans de Goede <hdegoede@redhat.com>
2975 L: linux-media@vger.kernel.org 2975 L: linux-media@vger.kernel.org
2976 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 2976 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
2977 S: Maintained 2977 S: Maintained
2978 F: drivers/media/video/gspca/pac207.c 2978 F: drivers/media/video/gspca/pac207.c
2979 2979
2980 GSPCA SN9C20X SUBDRIVER 2980 GSPCA SN9C20X SUBDRIVER
2981 M: Brian Johnson <brijohn@gmail.com> 2981 M: Brian Johnson <brijohn@gmail.com>
2982 L: linux-media@vger.kernel.org 2982 L: linux-media@vger.kernel.org
2983 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 2983 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
2984 S: Maintained 2984 S: Maintained
2985 F: drivers/media/video/gspca/sn9c20x.c 2985 F: drivers/media/video/gspca/sn9c20x.c
2986 2986
2987 GSPCA T613 SUBDRIVER 2987 GSPCA T613 SUBDRIVER
2988 M: Leandro Costantino <lcostantino@gmail.com> 2988 M: Leandro Costantino <lcostantino@gmail.com>
2989 L: linux-media@vger.kernel.org 2989 L: linux-media@vger.kernel.org
2990 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 2990 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
2991 S: Maintained 2991 S: Maintained
2992 F: drivers/media/video/gspca/t613.c 2992 F: drivers/media/video/gspca/t613.c
2993 2993
2994 GSPCA USB WEBCAM DRIVER 2994 GSPCA USB WEBCAM DRIVER
2995 M: Jean-Francois Moine <moinejf@free.fr> 2995 M: Jean-Francois Moine <moinejf@free.fr>
2996 W: http://moinejf.free.fr 2996 W: http://moinejf.free.fr
2997 L: linux-media@vger.kernel.org 2997 L: linux-media@vger.kernel.org
2998 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 2998 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
2999 S: Maintained 2999 S: Maintained
3000 F: drivers/media/video/gspca/ 3000 F: drivers/media/video/gspca/
3001 3001
3002 HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER 3002 HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
3003 M: Frank Seidel <frank@f-seidel.de> 3003 M: Frank Seidel <frank@f-seidel.de>
3004 L: platform-driver-x86@vger.kernel.org 3004 L: platform-driver-x86@vger.kernel.org
3005 W: http://www.kernel.org/pub/linux/kernel/people/fseidel/hdaps/ 3005 W: http://www.kernel.org/pub/linux/kernel/people/fseidel/hdaps/
3006 S: Maintained 3006 S: Maintained
3007 F: drivers/platform/x86/hdaps.c 3007 F: drivers/platform/x86/hdaps.c
3008 3008
3009 HWPOISON MEMORY FAILURE HANDLING 3009 HWPOISON MEMORY FAILURE HANDLING
3010 M: Andi Kleen <andi@firstfloor.org> 3010 M: Andi Kleen <andi@firstfloor.org>
3011 L: linux-mm@kvack.org 3011 L: linux-mm@kvack.org
3012 T: git git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6.git hwpoison 3012 T: git git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6.git hwpoison
3013 S: Maintained 3013 S: Maintained
3014 F: mm/memory-failure.c 3014 F: mm/memory-failure.c
3015 F: mm/hwpoison-inject.c 3015 F: mm/hwpoison-inject.c
3016 3016
3017 HYPERVISOR VIRTUAL CONSOLE DRIVER 3017 HYPERVISOR VIRTUAL CONSOLE DRIVER
3018 L: linuxppc-dev@lists.ozlabs.org 3018 L: linuxppc-dev@lists.ozlabs.org
3019 S: Odd Fixes 3019 S: Odd Fixes
3020 F: drivers/tty/hvc/ 3020 F: drivers/tty/hvc/
3021 3021
3022 HARDWARE MONITORING 3022 HARDWARE MONITORING
3023 M: Jean Delvare <khali@linux-fr.org> 3023 M: Jean Delvare <khali@linux-fr.org>
3024 M: Guenter Roeck <guenter.roeck@ericsson.com> 3024 M: Guenter Roeck <guenter.roeck@ericsson.com>
3025 L: lm-sensors@lm-sensors.org 3025 L: lm-sensors@lm-sensors.org
3026 W: http://www.lm-sensors.org/ 3026 W: http://www.lm-sensors.org/
3027 T: quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-hwmon/ 3027 T: quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-hwmon/
3028 T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git 3028 T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
3029 S: Maintained 3029 S: Maintained
3030 F: Documentation/hwmon/ 3030 F: Documentation/hwmon/
3031 F: drivers/hwmon/ 3031 F: drivers/hwmon/
3032 F: include/linux/hwmon*.h 3032 F: include/linux/hwmon*.h
3033 3033
3034 HARDWARE RANDOM NUMBER GENERATOR CORE 3034 HARDWARE RANDOM NUMBER GENERATOR CORE
3035 M: Matt Mackall <mpm@selenic.com> 3035 M: Matt Mackall <mpm@selenic.com>
3036 M: Herbert Xu <herbert@gondor.apana.org.au> 3036 M: Herbert Xu <herbert@gondor.apana.org.au>
3037 S: Odd fixes 3037 S: Odd fixes
3038 F: Documentation/hw_random.txt 3038 F: Documentation/hw_random.txt
3039 F: drivers/char/hw_random/ 3039 F: drivers/char/hw_random/
3040 F: include/linux/hw_random.h 3040 F: include/linux/hw_random.h
3041 3041
3042 HARDWARE SPINLOCK CORE 3042 HARDWARE SPINLOCK CORE
3043 M: Ohad Ben-Cohen <ohad@wizery.com> 3043 M: Ohad Ben-Cohen <ohad@wizery.com>
3044 S: Maintained 3044 S: Maintained
3045 F: Documentation/hwspinlock.txt 3045 F: Documentation/hwspinlock.txt
3046 F: drivers/hwspinlock/hwspinlock_* 3046 F: drivers/hwspinlock/hwspinlock_*
3047 F: include/linux/hwspinlock.h 3047 F: include/linux/hwspinlock.h
3048 3048
3049 HARMONY SOUND DRIVER 3049 HARMONY SOUND DRIVER
3050 M: Kyle McMartin <kyle@mcmartin.ca> 3050 M: Kyle McMartin <kyle@mcmartin.ca>
3051 L: linux-parisc@vger.kernel.org 3051 L: linux-parisc@vger.kernel.org
3052 S: Maintained 3052 S: Maintained
3053 F: sound/parisc/harmony.* 3053 F: sound/parisc/harmony.*
3054 3054
3055 HEWLETT-PACKARD SMART2 RAID DRIVER 3055 HEWLETT-PACKARD SMART2 RAID DRIVER
3056 M: Chirag Kantharia <chirag.kantharia@hp.com> 3056 M: Chirag Kantharia <chirag.kantharia@hp.com>
3057 L: iss_storagedev@hp.com 3057 L: iss_storagedev@hp.com
3058 S: Maintained 3058 S: Maintained
3059 F: Documentation/blockdev/cpqarray.txt 3059 F: Documentation/blockdev/cpqarray.txt
3060 F: drivers/block/cpqarray.* 3060 F: drivers/block/cpqarray.*
3061 3061
3062 HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa) 3062 HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa)
3063 M: "Stephen M. Cameron" <scameron@beardog.cce.hp.com> 3063 M: "Stephen M. Cameron" <scameron@beardog.cce.hp.com>
3064 L: iss_storagedev@hp.com 3064 L: iss_storagedev@hp.com
3065 S: Supported 3065 S: Supported
3066 F: Documentation/scsi/hpsa.txt 3066 F: Documentation/scsi/hpsa.txt
3067 F: drivers/scsi/hpsa*.[ch] 3067 F: drivers/scsi/hpsa*.[ch]
3068 F: include/linux/cciss*.h 3068 F: include/linux/cciss*.h
3069 3069
3070 HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss) 3070 HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss)
3071 M: Mike Miller <mike.miller@hp.com> 3071 M: Mike Miller <mike.miller@hp.com>
3072 L: iss_storagedev@hp.com 3072 L: iss_storagedev@hp.com
3073 S: Supported 3073 S: Supported
3074 F: Documentation/blockdev/cciss.txt 3074 F: Documentation/blockdev/cciss.txt
3075 F: drivers/block/cciss* 3075 F: drivers/block/cciss*
3076 F: include/linux/cciss_ioctl.h 3076 F: include/linux/cciss_ioctl.h
3077 3077
3078 HFS FILESYSTEM 3078 HFS FILESYSTEM
3079 L: linux-fsdevel@vger.kernel.org 3079 L: linux-fsdevel@vger.kernel.org
3080 S: Orphan 3080 S: Orphan
3081 F: Documentation/filesystems/hfs.txt 3081 F: Documentation/filesystems/hfs.txt
3082 F: fs/hfs/ 3082 F: fs/hfs/
3083 3083
3084 HGA FRAMEBUFFER DRIVER 3084 HGA FRAMEBUFFER DRIVER
3085 M: Ferenc Bakonyi <fero@drama.obuda.kando.hu> 3085 M: Ferenc Bakonyi <fero@drama.obuda.kando.hu>
3086 L: linux-nvidia@lists.surfsouth.com 3086 L: linux-nvidia@lists.surfsouth.com
3087 W: http://drama.obuda.kando.hu/~fero/cgi-bin/hgafb.shtml 3087 W: http://drama.obuda.kando.hu/~fero/cgi-bin/hgafb.shtml
3088 S: Maintained 3088 S: Maintained
3089 F: drivers/video/hgafb.c 3089 F: drivers/video/hgafb.c
3090 3090
3091 HIBERNATION (aka Software Suspend, aka swsusp) 3091 HIBERNATION (aka Software Suspend, aka swsusp)
3092 M: Pavel Machek <pavel@ucw.cz> 3092 M: Pavel Machek <pavel@ucw.cz>
3093 M: "Rafael J. Wysocki" <rjw@sisk.pl> 3093 M: "Rafael J. Wysocki" <rjw@sisk.pl>
3094 L: linux-pm@vger.kernel.org 3094 L: linux-pm@vger.kernel.org
3095 S: Supported 3095 S: Supported
3096 F: arch/x86/power/ 3096 F: arch/x86/power/
3097 F: drivers/base/power/ 3097 F: drivers/base/power/
3098 F: kernel/power/ 3098 F: kernel/power/
3099 F: include/linux/suspend.h 3099 F: include/linux/suspend.h
3100 F: include/linux/freezer.h 3100 F: include/linux/freezer.h
3101 F: include/linux/pm.h 3101 F: include/linux/pm.h
3102 F: arch/*/include/asm/suspend*.h 3102 F: arch/*/include/asm/suspend*.h
3103 3103
3104 HID CORE LAYER 3104 HID CORE LAYER
3105 M: Jiri Kosina <jkosina@suse.cz> 3105 M: Jiri Kosina <jkosina@suse.cz>
3106 L: linux-input@vger.kernel.org 3106 L: linux-input@vger.kernel.org
3107 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git 3107 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git
3108 S: Maintained 3108 S: Maintained
3109 F: drivers/hid/ 3109 F: drivers/hid/
3110 F: include/linux/hid* 3110 F: include/linux/hid*
3111 3111
3112 HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS 3112 HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS
3113 M: Thomas Gleixner <tglx@linutronix.de> 3113 M: Thomas Gleixner <tglx@linutronix.de>
3114 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core 3114 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
3115 S: Maintained 3115 S: Maintained
3116 F: Documentation/timers/ 3116 F: Documentation/timers/
3117 F: kernel/hrtimer.c 3117 F: kernel/hrtimer.c
3118 F: kernel/time/clockevents.c 3118 F: kernel/time/clockevents.c
3119 F: kernel/time/tick*.* 3119 F: kernel/time/tick*.*
3120 F: kernel/time/timer_*.c 3120 F: kernel/time/timer_*.c
3121 F: include/linux/clockchips.h 3121 F: include/linux/clockchips.h
3122 F: include/linux/hrtimer.h 3122 F: include/linux/hrtimer.h
3123 3123
3124 HIGH-SPEED SCC DRIVER FOR AX.25 3124 HIGH-SPEED SCC DRIVER FOR AX.25
3125 M: Klaus Kudielka <klaus.kudielka@ieee.org> 3125 M: Klaus Kudielka <klaus.kudielka@ieee.org>
3126 L: linux-hams@vger.kernel.org 3126 L: linux-hams@vger.kernel.org
3127 W: http://www.nt.tuwien.ac.at/~kkudielk/Linux/ 3127 W: http://www.nt.tuwien.ac.at/~kkudielk/Linux/
3128 S: Maintained 3128 S: Maintained
3129 F: drivers/net/hamradio/dmascc.c 3129 F: drivers/net/hamradio/dmascc.c
3130 F: drivers/net/hamradio/scc.c 3130 F: drivers/net/hamradio/scc.c
3131 3131
3132 HIGHPOINT ROCKETRAID 3xxx RAID DRIVER 3132 HIGHPOINT ROCKETRAID 3xxx RAID DRIVER
3133 M: HighPoint Linux Team <linux@highpoint-tech.com> 3133 M: HighPoint Linux Team <linux@highpoint-tech.com>
3134 W: http://www.highpoint-tech.com 3134 W: http://www.highpoint-tech.com
3135 S: Supported 3135 S: Supported
3136 F: Documentation/scsi/hptiop.txt 3136 F: Documentation/scsi/hptiop.txt
3137 F: drivers/scsi/hptiop.c 3137 F: drivers/scsi/hptiop.c
3138 3138
3139 HIPPI 3139 HIPPI
3140 M: Jes Sorensen <jes@trained-monkey.org> 3140 M: Jes Sorensen <jes@trained-monkey.org>
3141 L: linux-hippi@sunsite.dk 3141 L: linux-hippi@sunsite.dk
3142 S: Maintained 3142 S: Maintained
3143 F: include/linux/hippidevice.h 3143 F: include/linux/hippidevice.h
3144 F: include/linux/if_hippi.h 3144 F: include/linux/if_hippi.h
3145 F: net/802/hippi.c 3145 F: net/802/hippi.c
3146 F: drivers/net/hippi/ 3146 F: drivers/net/hippi/
3147 3147
3148 HOST AP DRIVER 3148 HOST AP DRIVER
3149 M: Jouni Malinen <j@w1.fi> 3149 M: Jouni Malinen <j@w1.fi>
3150 L: hostap@shmoo.com (subscribers-only) 3150 L: hostap@shmoo.com (subscribers-only)
3151 L: linux-wireless@vger.kernel.org 3151 L: linux-wireless@vger.kernel.org
3152 W: http://hostap.epitest.fi/ 3152 W: http://hostap.epitest.fi/
3153 S: Maintained 3153 S: Maintained
3154 F: drivers/net/wireless/hostap/ 3154 F: drivers/net/wireless/hostap/
3155 3155
3156 HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER 3156 HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER
3157 L: platform-driver-x86@vger.kernel.org 3157 L: platform-driver-x86@vger.kernel.org
3158 S: Orphan 3158 S: Orphan
3159 F: drivers/platform/x86/tc1100-wmi.c 3159 F: drivers/platform/x86/tc1100-wmi.c
3160 3160
3161 HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series 3161 HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
3162 M: Jaroslav Kysela <perex@perex.cz> 3162 M: Jaroslav Kysela <perex@perex.cz>
3163 S: Maintained 3163 S: Maintained
3164 F: drivers/net/ethernet/hp/hp100.* 3164 F: drivers/net/ethernet/hp/hp100.*
3165 3165
3166 HPET: High Precision Event Timers driver 3166 HPET: High Precision Event Timers driver
3167 M: Clemens Ladisch <clemens@ladisch.de> 3167 M: Clemens Ladisch <clemens@ladisch.de>
3168 S: Maintained 3168 S: Maintained
3169 F: Documentation/timers/hpet.txt 3169 F: Documentation/timers/hpet.txt
3170 F: drivers/char/hpet.c 3170 F: drivers/char/hpet.c
3171 F: include/linux/hpet.h 3171 F: include/linux/hpet.h
3172 3172
3173 HPET: x86 3173 HPET: x86
3174 M: "Venkatesh Pallipadi (Venki)" <venki@google.com> 3174 M: "Venkatesh Pallipadi (Venki)" <venki@google.com>
3175 S: Maintained 3175 S: Maintained
3176 F: arch/x86/kernel/hpet.c 3176 F: arch/x86/kernel/hpet.c
3177 F: arch/x86/include/asm/hpet.h 3177 F: arch/x86/include/asm/hpet.h
3178 3178
3179 HPFS FILESYSTEM 3179 HPFS FILESYSTEM
3180 M: Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz> 3180 M: Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
3181 W: http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi 3181 W: http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi
3182 S: Maintained 3182 S: Maintained
3183 F: fs/hpfs/ 3183 F: fs/hpfs/
3184 3184
3185 HSO 3G MODEM DRIVER 3185 HSO 3G MODEM DRIVER
3186 M: Jan Dumon <j.dumon@option.com> 3186 M: Jan Dumon <j.dumon@option.com>
3187 W: http://www.pharscape.org 3187 W: http://www.pharscape.org
3188 S: Maintained 3188 S: Maintained
3189 F: drivers/net/usb/hso.c 3189 F: drivers/net/usb/hso.c
3190 3190
3191 HTCPEN TOUCHSCREEN DRIVER 3191 HTCPEN TOUCHSCREEN DRIVER
3192 M: Pau Oliva Fora <pof@eslack.org> 3192 M: Pau Oliva Fora <pof@eslack.org>
3193 L: linux-input@vger.kernel.org 3193 L: linux-input@vger.kernel.org
3194 S: Maintained 3194 S: Maintained
3195 F: drivers/input/touchscreen/htcpen.c 3195 F: drivers/input/touchscreen/htcpen.c
3196 3196
3197 HUGETLB FILESYSTEM 3197 HUGETLB FILESYSTEM
3198 M: William Irwin <wli@holomorphy.com> 3198 M: William Irwin <wli@holomorphy.com>
3199 S: Maintained 3199 S: Maintained
3200 F: fs/hugetlbfs/ 3200 F: fs/hugetlbfs/
3201 3201
3202 Hyper-V CORE AND DRIVERS 3202 Hyper-V CORE AND DRIVERS
3203 M: K. Y. Srinivasan <kys@microsoft.com> 3203 M: K. Y. Srinivasan <kys@microsoft.com>
3204 M: Haiyang Zhang <haiyangz@microsoft.com> 3204 M: Haiyang Zhang <haiyangz@microsoft.com>
3205 L: devel@linuxdriverproject.org 3205 L: devel@linuxdriverproject.org
3206 S: Maintained 3206 S: Maintained
3207 F: drivers/hv/ 3207 F: drivers/hv/
3208 F: drivers/hid/hid-hyperv.c 3208 F: drivers/hid/hid-hyperv.c
3209 F: drivers/net/hyperv/ 3209 F: drivers/net/hyperv/
3210 F: drivers/staging/hv/ 3210 F: drivers/staging/hv/
3211 3211
3212 I2C/SMBUS STUB DRIVER 3212 I2C/SMBUS STUB DRIVER
3213 M: "Mark M. Hoffman" <mhoffman@lightlink.com> 3213 M: "Mark M. Hoffman" <mhoffman@lightlink.com>
3214 L: linux-i2c@vger.kernel.org 3214 L: linux-i2c@vger.kernel.org
3215 S: Maintained 3215 S: Maintained
3216 F: drivers/i2c/busses/i2c-stub.c 3216 F: drivers/i2c/busses/i2c-stub.c
3217 3217
3218 I2C SUBSYSTEM 3218 I2C SUBSYSTEM
3219 M: "Jean Delvare (PC drivers, core)" <khali@linux-fr.org> 3219 M: "Jean Delvare (PC drivers, core)" <khali@linux-fr.org>
3220 M: "Ben Dooks (embedded platforms)" <ben-linux@fluff.org> 3220 M: "Ben Dooks (embedded platforms)" <ben-linux@fluff.org>
3221 M: "Wolfram Sang (embedded platforms)" <w.sang@pengutronix.de> 3221 M: "Wolfram Sang (embedded platforms)" <w.sang@pengutronix.de>
3222 L: linux-i2c@vger.kernel.org 3222 L: linux-i2c@vger.kernel.org
3223 W: http://i2c.wiki.kernel.org/ 3223 W: http://i2c.wiki.kernel.org/
3224 T: quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-i2c/ 3224 T: quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-i2c/
3225 T: git git://git.fluff.org/bjdooks/linux.git 3225 T: git git://git.fluff.org/bjdooks/linux.git
3226 S: Maintained 3226 S: Maintained
3227 F: Documentation/i2c/ 3227 F: Documentation/i2c/
3228 F: drivers/i2c/ 3228 F: drivers/i2c/
3229 F: include/linux/i2c.h 3229 F: include/linux/i2c.h
3230 F: include/linux/i2c-*.h 3230 F: include/linux/i2c-*.h
3231 3231
3232 I2C-TINY-USB DRIVER 3232 I2C-TINY-USB DRIVER
3233 M: Till Harbaum <till@harbaum.org> 3233 M: Till Harbaum <till@harbaum.org>
3234 L: linux-i2c@vger.kernel.org 3234 L: linux-i2c@vger.kernel.org
3235 W: http://www.harbaum.org/till/i2c_tiny_usb 3235 W: http://www.harbaum.org/till/i2c_tiny_usb
3236 S: Maintained 3236 S: Maintained
3237 F: drivers/i2c/busses/i2c-tiny-usb.c 3237 F: drivers/i2c/busses/i2c-tiny-usb.c
3238 3238
3239 i386 BOOT CODE 3239 i386 BOOT CODE
3240 M: "H. Peter Anvin" <hpa@zytor.com> 3240 M: "H. Peter Anvin" <hpa@zytor.com>
3241 S: Maintained 3241 S: Maintained
3242 F: arch/x86/boot/ 3242 F: arch/x86/boot/
3243 3243
3244 i386 SETUP CODE / CPU ERRATA WORKAROUNDS 3244 i386 SETUP CODE / CPU ERRATA WORKAROUNDS
3245 M: "H. Peter Anvin" <hpa@zytor.com> 3245 M: "H. Peter Anvin" <hpa@zytor.com>
3246 T: git git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup.git 3246 T: git git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup.git
3247 S: Maintained 3247 S: Maintained
3248 3248
3249 IA64 (Itanium) PLATFORM 3249 IA64 (Itanium) PLATFORM
3250 M: Tony Luck <tony.luck@intel.com> 3250 M: Tony Luck <tony.luck@intel.com>
3251 M: Fenghua Yu <fenghua.yu@intel.com> 3251 M: Fenghua Yu <fenghua.yu@intel.com>
3252 L: linux-ia64@vger.kernel.org 3252 L: linux-ia64@vger.kernel.org
3253 T: git git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux.git 3253 T: git git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux.git
3254 S: Maintained 3254 S: Maintained
3255 F: arch/ia64/ 3255 F: arch/ia64/
3256 3256
3257 IBM MCA SCSI SUBSYSTEM DRIVER 3257 IBM MCA SCSI SUBSYSTEM DRIVER
3258 M: Michael Lang <langa2@kph.uni-mainz.de> 3258 M: Michael Lang <langa2@kph.uni-mainz.de>
3259 W: http://www.uni-mainz.de/~langm000/linux.html 3259 W: http://www.uni-mainz.de/~langm000/linux.html
3260 S: Maintained 3260 S: Maintained
3261 F: drivers/scsi/ibmmca.c 3261 F: drivers/scsi/ibmmca.c
3262 3262
3263 IBM Power Linux RAID adapter 3263 IBM Power Linux RAID adapter
3264 M: Brian King <brking@us.ibm.com> 3264 M: Brian King <brking@us.ibm.com>
3265 S: Supported 3265 S: Supported
3266 F: drivers/scsi/ipr.* 3266 F: drivers/scsi/ipr.*
3267 3267
3268 IBM Power Virtual Ethernet Device Driver 3268 IBM Power Virtual Ethernet Device Driver
3269 M: Santiago Leon <santil@linux.vnet.ibm.com> 3269 M: Santiago Leon <santil@linux.vnet.ibm.com>
3270 L: netdev@vger.kernel.org 3270 L: netdev@vger.kernel.org
3271 S: Supported 3271 S: Supported
3272 F: drivers/net/ethernet/ibm/ibmveth.* 3272 F: drivers/net/ethernet/ibm/ibmveth.*
3273 3273
3274 IBM ServeRAID RAID DRIVER 3274 IBM ServeRAID RAID DRIVER
3275 P: Jack Hammer 3275 P: Jack Hammer
3276 M: Dave Jeffery <ipslinux@adaptec.com> 3276 M: Dave Jeffery <ipslinux@adaptec.com>
3277 W: http://www.developer.ibm.com/welcome/netfinity/serveraid.html 3277 W: http://www.developer.ibm.com/welcome/netfinity/serveraid.html
3278 S: Supported 3278 S: Supported
3279 F: drivers/scsi/ips.* 3279 F: drivers/scsi/ips.*
3280 3280
3281 IDE SUBSYSTEM 3281 IDE SUBSYSTEM
3282 M: "David S. Miller" <davem@davemloft.net> 3282 M: "David S. Miller" <davem@davemloft.net>
3283 L: linux-ide@vger.kernel.org 3283 L: linux-ide@vger.kernel.org
3284 Q: http://patchwork.ozlabs.org/project/linux-ide/list/ 3284 Q: http://patchwork.ozlabs.org/project/linux-ide/list/
3285 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide-2.6.git 3285 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide-2.6.git
3286 S: Maintained 3286 S: Maintained
3287 F: Documentation/ide/ 3287 F: Documentation/ide/
3288 F: drivers/ide/ 3288 F: drivers/ide/
3289 F: include/linux/ide.h 3289 F: include/linux/ide.h
3290 3290
3291 IDEAPAD LAPTOP EXTRAS DRIVER 3291 IDEAPAD LAPTOP EXTRAS DRIVER
3292 M: Ike Panhc <ike.pan@canonical.com> 3292 M: Ike Panhc <ike.pan@canonical.com>
3293 L: platform-driver-x86@vger.kernel.org 3293 L: platform-driver-x86@vger.kernel.org
3294 W: http://launchpad.net/ideapad-laptop 3294 W: http://launchpad.net/ideapad-laptop
3295 S: Maintained 3295 S: Maintained
3296 F: drivers/platform/x86/ideapad-laptop.c 3296 F: drivers/platform/x86/ideapad-laptop.c
3297 3297
3298 IDE/ATAPI DRIVERS 3298 IDE/ATAPI DRIVERS
3299 M: Borislav Petkov <petkovbb@gmail.com> 3299 M: Borislav Petkov <petkovbb@gmail.com>
3300 L: linux-ide@vger.kernel.org 3300 L: linux-ide@vger.kernel.org
3301 S: Maintained 3301 S: Maintained
3302 F: Documentation/cdrom/ide-cd 3302 F: Documentation/cdrom/ide-cd
3303 F: drivers/ide/ide-cd* 3303 F: drivers/ide/ide-cd*
3304 3304
3305 IDLE-I7300 3305 IDLE-I7300
3306 M: Andy Henroid <andrew.d.henroid@intel.com> 3306 M: Andy Henroid <andrew.d.henroid@intel.com>
3307 L: linux-pm@vger.kernel.org 3307 L: linux-pm@vger.kernel.org
3308 S: Supported 3308 S: Supported
3309 F: drivers/idle/i7300_idle.c 3309 F: drivers/idle/i7300_idle.c
3310 3310
3311 IEEE 802.15.4 SUBSYSTEM 3311 IEEE 802.15.4 SUBSYSTEM
3312 M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> 3312 M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
3313 M: Sergey Lapin <slapin@ossfans.org> 3313 M: Sergey Lapin <slapin@ossfans.org>
3314 L: linux-zigbee-devel@lists.sourceforge.net (moderated for non-subscribers) 3314 L: linux-zigbee-devel@lists.sourceforge.net (moderated for non-subscribers)
3315 W: http://apps.sourceforge.net/trac/linux-zigbee 3315 W: http://apps.sourceforge.net/trac/linux-zigbee
3316 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan.git 3316 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan.git
3317 S: Maintained 3317 S: Maintained
3318 F: net/ieee802154/ 3318 F: net/ieee802154/
3319 F: drivers/ieee802154/ 3319 F: drivers/ieee802154/
3320 3320
3321 IIO SUBSYSTEM AND DRIVERS 3321 IIO SUBSYSTEM AND DRIVERS
3322 M: Jonathan Cameron <jic23@cam.ac.uk> 3322 M: Jonathan Cameron <jic23@cam.ac.uk>
3323 L: linux-iio@vger.kernel.org 3323 L: linux-iio@vger.kernel.org
3324 S: Maintained 3324 S: Maintained
3325 F: drivers/staging/iio/ 3325 F: drivers/staging/iio/
3326 3326
3327 IKANOS/ADI EAGLE ADSL USB DRIVER 3327 IKANOS/ADI EAGLE ADSL USB DRIVER
3328 M: Matthieu Castet <castet.matthieu@free.fr> 3328 M: Matthieu Castet <castet.matthieu@free.fr>
3329 M: Stanislaw Gruszka <stf_xl@wp.pl> 3329 M: Stanislaw Gruszka <stf_xl@wp.pl>
3330 S: Maintained 3330 S: Maintained
3331 F: drivers/usb/atm/ueagle-atm.c 3331 F: drivers/usb/atm/ueagle-atm.c
3332 3332
3333 INTEGRITY MEASUREMENT ARCHITECTURE (IMA) 3333 INTEGRITY MEASUREMENT ARCHITECTURE (IMA)
3334 M: Mimi Zohar <zohar@us.ibm.com> 3334 M: Mimi Zohar <zohar@us.ibm.com>
3335 S: Supported 3335 S: Supported
3336 F: security/integrity/ima/ 3336 F: security/integrity/ima/
3337 3337
3338 IMS TWINTURBO FRAMEBUFFER DRIVER 3338 IMS TWINTURBO FRAMEBUFFER DRIVER
3339 L: linux-fbdev@vger.kernel.org 3339 L: linux-fbdev@vger.kernel.org
3340 S: Orphan 3340 S: Orphan
3341 F: drivers/video/imsttfb.c 3341 F: drivers/video/imsttfb.c
3342 3342
3343 INFINIBAND SUBSYSTEM 3343 INFINIBAND SUBSYSTEM
3344 M: Roland Dreier <roland@kernel.org> 3344 M: Roland Dreier <roland@kernel.org>
3345 M: Sean Hefty <sean.hefty@intel.com> 3345 M: Sean Hefty <sean.hefty@intel.com>
3346 M: Hal Rosenstock <hal.rosenstock@gmail.com> 3346 M: Hal Rosenstock <hal.rosenstock@gmail.com>
3347 L: linux-rdma@vger.kernel.org 3347 L: linux-rdma@vger.kernel.org
3348 W: http://www.openfabrics.org/ 3348 W: http://www.openfabrics.org/
3349 Q: http://patchwork.kernel.org/project/linux-rdma/list/ 3349 Q: http://patchwork.kernel.org/project/linux-rdma/list/
3350 T: git git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git 3350 T: git git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git
3351 S: Supported 3351 S: Supported
3352 F: Documentation/infiniband/ 3352 F: Documentation/infiniband/
3353 F: drivers/infiniband/ 3353 F: drivers/infiniband/
3354 F: include/linux/if_infiniband.h 3354 F: include/linux/if_infiniband.h
3355 3355
3356 INOTIFY 3356 INOTIFY
3357 M: John McCutchan <john@johnmccutchan.com> 3357 M: John McCutchan <john@johnmccutchan.com>
3358 M: Robert Love <rlove@rlove.org> 3358 M: Robert Love <rlove@rlove.org>
3359 M: Eric Paris <eparis@parisplace.org> 3359 M: Eric Paris <eparis@parisplace.org>
3360 S: Maintained 3360 S: Maintained
3361 F: Documentation/filesystems/inotify.txt 3361 F: Documentation/filesystems/inotify.txt
3362 F: fs/notify/inotify/ 3362 F: fs/notify/inotify/
3363 F: include/linux/inotify.h 3363 F: include/linux/inotify.h
3364 3364
3365 INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS 3365 INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS
3366 M: Dmitry Torokhov <dmitry.torokhov@gmail.com> 3366 M: Dmitry Torokhov <dmitry.torokhov@gmail.com>
3367 M: Dmitry Torokhov <dtor@mail.ru> 3367 M: Dmitry Torokhov <dtor@mail.ru>
3368 L: linux-input@vger.kernel.org 3368 L: linux-input@vger.kernel.org
3369 Q: http://patchwork.kernel.org/project/linux-input/list/ 3369 Q: http://patchwork.kernel.org/project/linux-input/list/
3370 T: git git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git 3370 T: git git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git
3371 S: Maintained 3371 S: Maintained
3372 F: drivers/input/ 3372 F: drivers/input/
3373 3373
3374 INPUT MULTITOUCH (MT) PROTOCOL 3374 INPUT MULTITOUCH (MT) PROTOCOL
3375 M: Henrik Rydberg <rydberg@euromail.se> 3375 M: Henrik Rydberg <rydberg@euromail.se>
3376 L: linux-input@vger.kernel.org 3376 L: linux-input@vger.kernel.org
3377 T: git git://git.kernel.org/pub/scm/linux/kernel/git/rydberg/input-mt.git 3377 T: git git://git.kernel.org/pub/scm/linux/kernel/git/rydberg/input-mt.git
3378 S: Maintained 3378 S: Maintained
3379 F: Documentation/input/multi-touch-protocol.txt 3379 F: Documentation/input/multi-touch-protocol.txt
3380 F: drivers/input/input-mt.c 3380 F: drivers/input/input-mt.c
3381 K: \b(ABS|SYN)_MT_ 3381 K: \b(ABS|SYN)_MT_
3382 3382
3383 INTEL C600 SERIES SAS CONTROLLER DRIVER 3383 INTEL C600 SERIES SAS CONTROLLER DRIVER
3384 M: Intel SCU Linux support <intel-linux-scu@intel.com> 3384 M: Intel SCU Linux support <intel-linux-scu@intel.com>
3385 M: Dan Williams <dan.j.williams@intel.com> 3385 M: Dan Williams <dan.j.williams@intel.com>
3386 M: Dave Jiang <dave.jiang@intel.com> 3386 M: Dave Jiang <dave.jiang@intel.com>
3387 M: Ed Nadolski <edmund.nadolski@intel.com> 3387 M: Ed Nadolski <edmund.nadolski@intel.com>
3388 L: linux-scsi@vger.kernel.org 3388 L: linux-scsi@vger.kernel.org
3389 T: git git://git.kernel.org/pub/scm/linux/kernel/git/djbw/isci.git 3389 T: git git://git.kernel.org/pub/scm/linux/kernel/git/djbw/isci.git
3390 S: Maintained 3390 S: Maintained
3391 F: drivers/scsi/isci/ 3391 F: drivers/scsi/isci/
3392 F: firmware/isci/ 3392 F: firmware/isci/
3393 3393
3394 INTEL IDLE DRIVER 3394 INTEL IDLE DRIVER
3395 M: Len Brown <lenb@kernel.org> 3395 M: Len Brown <lenb@kernel.org>
3396 L: linux-pm@vger.kernel.org 3396 L: linux-pm@vger.kernel.org
3397 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-idle-2.6.git 3397 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-idle-2.6.git
3398 S: Supported 3398 S: Supported
3399 F: drivers/idle/intel_idle.c 3399 F: drivers/idle/intel_idle.c
3400 3400
3401 INTEL FRAMEBUFFER DRIVER (excluding 810 and 815) 3401 INTEL FRAMEBUFFER DRIVER (excluding 810 and 815)
3402 M: Maik Broemme <mbroemme@plusserver.de> 3402 M: Maik Broemme <mbroemme@plusserver.de>
3403 L: linux-fbdev@vger.kernel.org 3403 L: linux-fbdev@vger.kernel.org
3404 S: Maintained 3404 S: Maintained
3405 F: Documentation/fb/intelfb.txt 3405 F: Documentation/fb/intelfb.txt
3406 F: drivers/video/intelfb/ 3406 F: drivers/video/intelfb/
3407 3407
3408 INTEL 810/815 FRAMEBUFFER DRIVER 3408 INTEL 810/815 FRAMEBUFFER DRIVER
3409 M: Antonino Daplas <adaplas@gmail.com> 3409 M: Antonino Daplas <adaplas@gmail.com>
3410 L: linux-fbdev@vger.kernel.org 3410 L: linux-fbdev@vger.kernel.org
3411 S: Maintained 3411 S: Maintained
3412 F: drivers/video/i810/ 3412 F: drivers/video/i810/
3413 3413
3414 INTEL MENLOW THERMAL DRIVER 3414 INTEL MENLOW THERMAL DRIVER
3415 M: Sujith Thomas <sujith.thomas@intel.com> 3415 M: Sujith Thomas <sujith.thomas@intel.com>
3416 L: platform-driver-x86@vger.kernel.org 3416 L: platform-driver-x86@vger.kernel.org
3417 W: http://www.lesswatts.org/projects/acpi/ 3417 W: http://www.lesswatts.org/projects/acpi/
3418 S: Supported 3418 S: Supported
3419 F: drivers/platform/x86/intel_menlow.c 3419 F: drivers/platform/x86/intel_menlow.c
3420 3420
3421 INTEL IA32 MICROCODE UPDATE SUPPORT 3421 INTEL IA32 MICROCODE UPDATE SUPPORT
3422 M: Tigran Aivazian <tigran@aivazian.fsnet.co.uk> 3422 M: Tigran Aivazian <tigran@aivazian.fsnet.co.uk>
3423 S: Maintained 3423 S: Maintained
3424 F: arch/x86/kernel/microcode_core.c 3424 F: arch/x86/kernel/microcode_core.c
3425 F: arch/x86/kernel/microcode_intel.c 3425 F: arch/x86/kernel/microcode_intel.c
3426 3426
3427 INTEL I/OAT DMA DRIVER 3427 INTEL I/OAT DMA DRIVER
3428 M: Dan Williams <dan.j.williams@intel.com> 3428 M: Dan Williams <dan.j.williams@intel.com>
3429 S: Supported 3429 S: Supported
3430 F: drivers/dma/ioat* 3430 F: drivers/dma/ioat*
3431 3431
3432 INTEL IOMMU (VT-d) 3432 INTEL IOMMU (VT-d)
3433 M: David Woodhouse <dwmw2@infradead.org> 3433 M: David Woodhouse <dwmw2@infradead.org>
3434 L: iommu@lists.linux-foundation.org 3434 L: iommu@lists.linux-foundation.org
3435 T: git git://git.infradead.org/iommu-2.6.git 3435 T: git git://git.infradead.org/iommu-2.6.git
3436 S: Supported 3436 S: Supported
3437 F: drivers/iommu/intel-iommu.c 3437 F: drivers/iommu/intel-iommu.c
3438 F: include/linux/intel-iommu.h 3438 F: include/linux/intel-iommu.h
3439 3439
3440 INTEL IOP-ADMA DMA DRIVER 3440 INTEL IOP-ADMA DMA DRIVER
3441 M: Dan Williams <dan.j.williams@intel.com> 3441 M: Dan Williams <dan.j.williams@intel.com>
3442 S: Maintained 3442 S: Maintained
3443 F: drivers/dma/iop-adma.c 3443 F: drivers/dma/iop-adma.c
3444 3444
3445 INTEL IXP4XX QMGR, NPE, ETHERNET and HSS SUPPORT 3445 INTEL IXP4XX QMGR, NPE, ETHERNET and HSS SUPPORT
3446 M: Krzysztof Halasa <khc@pm.waw.pl> 3446 M: Krzysztof Halasa <khc@pm.waw.pl>
3447 S: Maintained 3447 S: Maintained
3448 F: arch/arm/mach-ixp4xx/include/mach/qmgr.h 3448 F: arch/arm/mach-ixp4xx/include/mach/qmgr.h
3449 F: arch/arm/mach-ixp4xx/include/mach/npe.h 3449 F: arch/arm/mach-ixp4xx/include/mach/npe.h
3450 F: arch/arm/mach-ixp4xx/ixp4xx_qmgr.c 3450 F: arch/arm/mach-ixp4xx/ixp4xx_qmgr.c
3451 F: arch/arm/mach-ixp4xx/ixp4xx_npe.c 3451 F: arch/arm/mach-ixp4xx/ixp4xx_npe.c
3452 F: drivers/net/ethernet/xscale/ixp4xx_eth.c 3452 F: drivers/net/ethernet/xscale/ixp4xx_eth.c
3453 F: drivers/net/wan/ixp4xx_hss.c 3453 F: drivers/net/wan/ixp4xx_hss.c
3454 3454
3455 INTEL IXP4XX RANDOM NUMBER GENERATOR SUPPORT 3455 INTEL IXP4XX RANDOM NUMBER GENERATOR SUPPORT
3456 M: Deepak Saxena <dsaxena@plexity.net> 3456 M: Deepak Saxena <dsaxena@plexity.net>
3457 S: Maintained 3457 S: Maintained
3458 F: drivers/char/hw_random/ixp4xx-rng.c 3458 F: drivers/char/hw_random/ixp4xx-rng.c
3459 3459
3460 INTEL IXP2000 ETHERNET DRIVER 3460 INTEL IXP2000 ETHERNET DRIVER
3461 M: Lennert Buytenhek <kernel@wantstofly.org> 3461 M: Lennert Buytenhek <kernel@wantstofly.org>
3462 L: netdev@vger.kernel.org 3462 L: netdev@vger.kernel.org
3463 S: Maintained 3463 S: Maintained
3464 F: drivers/net/ethernet/xscale/ixp2000/ 3464 F: drivers/net/ethernet/xscale/ixp2000/
3465 3465
3466 INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf) 3466 INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf)
3467 M: Jeff Kirsher <jeffrey.t.kirsher@intel.com> 3467 M: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
3468 M: Jesse Brandeburg <jesse.brandeburg@intel.com> 3468 M: Jesse Brandeburg <jesse.brandeburg@intel.com>
3469 M: Bruce Allan <bruce.w.allan@intel.com> 3469 M: Bruce Allan <bruce.w.allan@intel.com>
3470 M: Carolyn Wyborny <carolyn.wyborny@intel.com> 3470 M: Carolyn Wyborny <carolyn.wyborny@intel.com>
3471 M: Don Skidmore <donald.c.skidmore@intel.com> 3471 M: Don Skidmore <donald.c.skidmore@intel.com>
3472 M: Greg Rose <gregory.v.rose@intel.com> 3472 M: Greg Rose <gregory.v.rose@intel.com>
3473 M: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> 3473 M: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
3474 M: Alex Duyck <alexander.h.duyck@intel.com> 3474 M: Alex Duyck <alexander.h.duyck@intel.com>
3475 M: John Ronciak <john.ronciak@intel.com> 3475 M: John Ronciak <john.ronciak@intel.com>
3476 L: e1000-devel@lists.sourceforge.net 3476 L: e1000-devel@lists.sourceforge.net
3477 W: http://e1000.sourceforge.net/ 3477 W: http://e1000.sourceforge.net/
3478 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net.git 3478 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net.git
3479 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next.git 3479 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next.git
3480 S: Supported 3480 S: Supported
3481 F: Documentation/networking/e100.txt 3481 F: Documentation/networking/e100.txt
3482 F: Documentation/networking/e1000.txt 3482 F: Documentation/networking/e1000.txt
3483 F: Documentation/networking/e1000e.txt 3483 F: Documentation/networking/e1000e.txt
3484 F: Documentation/networking/igb.txt 3484 F: Documentation/networking/igb.txt
3485 F: Documentation/networking/igbvf.txt 3485 F: Documentation/networking/igbvf.txt
3486 F: Documentation/networking/ixgb.txt 3486 F: Documentation/networking/ixgb.txt
3487 F: Documentation/networking/ixgbe.txt 3487 F: Documentation/networking/ixgbe.txt
3488 F: Documentation/networking/ixgbevf.txt 3488 F: Documentation/networking/ixgbevf.txt
3489 F: drivers/net/ethernet/intel/ 3489 F: drivers/net/ethernet/intel/
3490 3490
3491 INTEL MRST PMU DRIVER 3491 INTEL MRST PMU DRIVER
3492 M: Len Brown <len.brown@intel.com> 3492 M: Len Brown <len.brown@intel.com>
3493 L: linux-pm@vger.kernel.org 3493 L: linux-pm@vger.kernel.org
3494 S: Supported 3494 S: Supported
3495 F: arch/x86/platform/mrst/pmu.* 3495 F: arch/x86/platform/mrst/pmu.*
3496 3496
3497 INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT 3497 INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
3498 L: linux-wireless@vger.kernel.org 3498 L: linux-wireless@vger.kernel.org
3499 S: Orphan 3499 S: Orphan
3500 F: Documentation/networking/README.ipw2100 3500 F: Documentation/networking/README.ipw2100
3501 F: drivers/net/wireless/ipw2x00/ipw2100.* 3501 F: drivers/net/wireless/ipw2x00/ipw2100.*
3502 3502
3503 INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT 3503 INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
3504 L: linux-wireless@vger.kernel.org 3504 L: linux-wireless@vger.kernel.org
3505 S: Orphan 3505 S: Orphan
3506 F: Documentation/networking/README.ipw2200 3506 F: Documentation/networking/README.ipw2200
3507 F: drivers/net/wireless/ipw2x00/ipw2200.* 3507 F: drivers/net/wireless/ipw2x00/ipw2200.*
3508 3508
3509 INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT) 3509 INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT)
3510 M: Joseph Cihula <joseph.cihula@intel.com> 3510 M: Joseph Cihula <joseph.cihula@intel.com>
3511 M: Shane Wang <shane.wang@intel.com> 3511 M: Shane Wang <shane.wang@intel.com>
3512 L: tboot-devel@lists.sourceforge.net 3512 L: tboot-devel@lists.sourceforge.net
3513 W: http://tboot.sourceforge.net 3513 W: http://tboot.sourceforge.net
3514 T: Mercurial http://www.bughost.org/repos.hg/tboot.hg 3514 T: Mercurial http://www.bughost.org/repos.hg/tboot.hg
3515 S: Supported 3515 S: Supported
3516 F: Documentation/intel_txt.txt 3516 F: Documentation/intel_txt.txt
3517 F: include/linux/tboot.h 3517 F: include/linux/tboot.h
3518 F: arch/x86/kernel/tboot.c 3518 F: arch/x86/kernel/tboot.c
3519 3519
3520 INTEL WIRELESS WIMAX CONNECTION 2400 3520 INTEL WIRELESS WIMAX CONNECTION 2400
3521 M: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> 3521 M: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
3522 M: linux-wimax@intel.com 3522 M: linux-wimax@intel.com
3523 L: wimax@linuxwimax.org 3523 L: wimax@linuxwimax.org
3524 S: Supported 3524 S: Supported
3525 W: http://linuxwimax.org 3525 W: http://linuxwimax.org
3526 F: Documentation/wimax/README.i2400m 3526 F: Documentation/wimax/README.i2400m
3527 F: drivers/net/wimax/i2400m/ 3527 F: drivers/net/wimax/i2400m/
3528 F: include/linux/wimax/i2400m.h 3528 F: include/linux/wimax/i2400m.h
3529 3529
3530 INTEL WIRELESS 3945ABG/BG, 4965AGN (iwlegacy) 3530 INTEL WIRELESS 3945ABG/BG, 4965AGN (iwlegacy)
3531 M: Stanislaw Gruszka <sgruszka@redhat.com> 3531 M: Stanislaw Gruszka <sgruszka@redhat.com>
3532 L: linux-wireless@vger.kernel.org 3532 L: linux-wireless@vger.kernel.org
3533 S: Supported 3533 S: Supported
3534 F: drivers/net/wireless/iwlegacy/ 3534 F: drivers/net/wireless/iwlegacy/
3535 3535
3536 INTEL WIRELESS WIFI LINK (iwlwifi) 3536 INTEL WIRELESS WIFI LINK (iwlwifi)
3537 M: Wey-Yi Guy <wey-yi.w.guy@intel.com> 3537 M: Wey-Yi Guy <wey-yi.w.guy@intel.com>
3538 M: Intel Linux Wireless <ilw@linux.intel.com> 3538 M: Intel Linux Wireless <ilw@linux.intel.com>
3539 L: linux-wireless@vger.kernel.org 3539 L: linux-wireless@vger.kernel.org
3540 W: http://intellinuxwireless.org 3540 W: http://intellinuxwireless.org
3541 T: git git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi.git 3541 T: git git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi.git
3542 S: Supported 3542 S: Supported
3543 F: drivers/net/wireless/iwlwifi/ 3543 F: drivers/net/wireless/iwlwifi/
3544 3544
3545 INTEL WIRELESS MULTICOMM 3200 WIFI (iwmc3200wifi) 3545 INTEL WIRELESS MULTICOMM 3200 WIFI (iwmc3200wifi)
3546 M: Samuel Ortiz <samuel.ortiz@intel.com> 3546 M: Samuel Ortiz <samuel.ortiz@intel.com>
3547 M: Intel Linux Wireless <ilw@linux.intel.com> 3547 M: Intel Linux Wireless <ilw@linux.intel.com>
3548 L: linux-wireless@vger.kernel.org 3548 L: linux-wireless@vger.kernel.org
3549 S: Supported 3549 S: Supported
3550 W: http://wireless.kernel.org/en/users/Drivers/iwmc3200wifi 3550 W: http://wireless.kernel.org/en/users/Drivers/iwmc3200wifi
3551 F: drivers/net/wireless/iwmc3200wifi/ 3551 F: drivers/net/wireless/iwmc3200wifi/
3552 3552
3553 IOC3 ETHERNET DRIVER 3553 IOC3 ETHERNET DRIVER
3554 M: Ralf Baechle <ralf@linux-mips.org> 3554 M: Ralf Baechle <ralf@linux-mips.org>
3555 L: linux-mips@linux-mips.org 3555 L: linux-mips@linux-mips.org
3556 S: Maintained 3556 S: Maintained
3557 F: drivers/net/ethernet/sgi/ioc3-eth.c 3557 F: drivers/net/ethernet/sgi/ioc3-eth.c
3558 3558
3559 IOC3 SERIAL DRIVER 3559 IOC3 SERIAL DRIVER
3560 M: Pat Gefre <pfg@sgi.com> 3560 M: Pat Gefre <pfg@sgi.com>
3561 L: linux-serial@vger.kernel.org 3561 L: linux-serial@vger.kernel.org
3562 S: Maintained 3562 S: Maintained
3563 F: drivers/tty/serial/ioc3_serial.c 3563 F: drivers/tty/serial/ioc3_serial.c
3564 3564
3565 IP MASQUERADING 3565 IP MASQUERADING
3566 M: Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar> 3566 M: Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>
3567 S: Maintained 3567 S: Maintained
3568 F: net/ipv4/netfilter/ipt_MASQUERADE.c 3568 F: net/ipv4/netfilter/ipt_MASQUERADE.c
3569 3569
3570 IP1000A 10/100/1000 GIGABIT ETHERNET DRIVER 3570 IP1000A 10/100/1000 GIGABIT ETHERNET DRIVER
3571 M: Francois Romieu <romieu@fr.zoreil.com> 3571 M: Francois Romieu <romieu@fr.zoreil.com>
3572 M: Sorbica Shieh <sorbica@icplus.com.tw> 3572 M: Sorbica Shieh <sorbica@icplus.com.tw>
3573 L: netdev@vger.kernel.org 3573 L: netdev@vger.kernel.org
3574 S: Maintained 3574 S: Maintained
3575 F: drivers/net/ethernet/icplus/ipg.* 3575 F: drivers/net/ethernet/icplus/ipg.*
3576 3576
3577 IPATH DRIVER 3577 IPATH DRIVER
3578 M: Mike Marciniszyn <infinipath@qlogic.com> 3578 M: Mike Marciniszyn <infinipath@qlogic.com>
3579 L: linux-rdma@vger.kernel.org 3579 L: linux-rdma@vger.kernel.org
3580 S: Maintained 3580 S: Maintained
3581 F: drivers/infiniband/hw/ipath/ 3581 F: drivers/infiniband/hw/ipath/
3582 3582
3583 IPMI SUBSYSTEM 3583 IPMI SUBSYSTEM
3584 M: Corey Minyard <minyard@acm.org> 3584 M: Corey Minyard <minyard@acm.org>
3585 L: openipmi-developer@lists.sourceforge.net (moderated for non-subscribers) 3585 L: openipmi-developer@lists.sourceforge.net (moderated for non-subscribers)
3586 W: http://openipmi.sourceforge.net/ 3586 W: http://openipmi.sourceforge.net/
3587 S: Supported 3587 S: Supported
3588 F: Documentation/IPMI.txt 3588 F: Documentation/IPMI.txt
3589 F: drivers/char/ipmi/ 3589 F: drivers/char/ipmi/
3590 F: include/linux/ipmi* 3590 F: include/linux/ipmi*
3591 3591
3592 IPS SCSI RAID DRIVER 3592 IPS SCSI RAID DRIVER
3593 M: Adaptec OEM Raid Solutions <aacraid@adaptec.com> 3593 M: Adaptec OEM Raid Solutions <aacraid@adaptec.com>
3594 L: linux-scsi@vger.kernel.org 3594 L: linux-scsi@vger.kernel.org
3595 W: http://www.adaptec.com/ 3595 W: http://www.adaptec.com/
3596 S: Maintained 3596 S: Maintained
3597 F: drivers/scsi/ips* 3597 F: drivers/scsi/ips*
3598 3598
3599 IPVS 3599 IPVS
3600 M: Wensong Zhang <wensong@linux-vs.org> 3600 M: Wensong Zhang <wensong@linux-vs.org>
3601 M: Simon Horman <horms@verge.net.au> 3601 M: Simon Horman <horms@verge.net.au>
3602 M: Julian Anastasov <ja@ssi.bg> 3602 M: Julian Anastasov <ja@ssi.bg>
3603 L: netdev@vger.kernel.org 3603 L: netdev@vger.kernel.org
3604 L: lvs-devel@vger.kernel.org 3604 L: lvs-devel@vger.kernel.org
3605 S: Maintained 3605 S: Maintained
3606 F: Documentation/networking/ipvs-sysctl.txt 3606 F: Documentation/networking/ipvs-sysctl.txt
3607 F: include/net/ip_vs.h 3607 F: include/net/ip_vs.h
3608 F: include/linux/ip_vs.h 3608 F: include/linux/ip_vs.h
3609 F: net/netfilter/ipvs/ 3609 F: net/netfilter/ipvs/
3610 3610
3611 IPWIRELESS DRIVER 3611 IPWIRELESS DRIVER
3612 M: Jiri Kosina <jkosina@suse.cz> 3612 M: Jiri Kosina <jkosina@suse.cz>
3613 M: David Sterba <dsterba@suse.cz> 3613 M: David Sterba <dsterba@suse.cz>
3614 S: Odd Fixes 3614 S: Odd Fixes
3615 F: drivers/tty/ipwireless/ 3615 F: drivers/tty/ipwireless/
3616 3616
3617 IPX NETWORK LAYER 3617 IPX NETWORK LAYER
3618 M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> 3618 M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
3619 L: netdev@vger.kernel.org 3619 L: netdev@vger.kernel.org
3620 S: Maintained 3620 S: Maintained
3621 F: include/linux/ipx.h 3621 F: include/linux/ipx.h
3622 F: include/net/ipx.h 3622 F: include/net/ipx.h
3623 F: net/ipx/ 3623 F: net/ipx/
3624 3624
3625 IRDA SUBSYSTEM 3625 IRDA SUBSYSTEM
3626 M: Samuel Ortiz <samuel@sortiz.org> 3626 M: Samuel Ortiz <samuel@sortiz.org>
3627 L: irda-users@lists.sourceforge.net (subscribers-only) 3627 L: irda-users@lists.sourceforge.net (subscribers-only)
3628 L: netdev@vger.kernel.org 3628 L: netdev@vger.kernel.org
3629 W: http://irda.sourceforge.net/ 3629 W: http://irda.sourceforge.net/
3630 S: Maintained 3630 S: Maintained
3631 T: git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/irda-2.6.git 3631 T: git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/irda-2.6.git
3632 F: Documentation/networking/irda.txt 3632 F: Documentation/networking/irda.txt
3633 F: drivers/net/irda/ 3633 F: drivers/net/irda/
3634 F: include/net/irda/ 3634 F: include/net/irda/
3635 F: net/irda/ 3635 F: net/irda/
3636 3636
3637 IRQ SUBSYSTEM 3637 IRQ SUBSYSTEM
3638 M: Thomas Gleixner <tglx@linutronix.de> 3638 M: Thomas Gleixner <tglx@linutronix.de>
3639 S: Maintained 3639 S: Maintained
3640 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core 3640 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core
3641 F: kernel/irq/ 3641 F: kernel/irq/
3642 3642
3643 ISAPNP 3643 ISAPNP
3644 M: Jaroslav Kysela <perex@perex.cz> 3644 M: Jaroslav Kysela <perex@perex.cz>
3645 S: Maintained 3645 S: Maintained
3646 F: Documentation/isapnp.txt 3646 F: Documentation/isapnp.txt
3647 F: drivers/pnp/isapnp/ 3647 F: drivers/pnp/isapnp/
3648 F: include/linux/isapnp.h 3648 F: include/linux/isapnp.h
3649 3649
3650 iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER 3650 iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER
3651 M: Peter Jones <pjones@redhat.com> 3651 M: Peter Jones <pjones@redhat.com>
3652 M: Konrad Rzeszutek Wilk <konrad@kernel.org> 3652 M: Konrad Rzeszutek Wilk <konrad@kernel.org>
3653 S: Maintained 3653 S: Maintained
3654 F: drivers/firmware/iscsi_ibft* 3654 F: drivers/firmware/iscsi_ibft*
3655 3655
3656 ISCSI 3656 ISCSI
3657 M: Mike Christie <michaelc@cs.wisc.edu> 3657 M: Mike Christie <michaelc@cs.wisc.edu>
3658 L: open-iscsi@googlegroups.com 3658 L: open-iscsi@googlegroups.com
3659 W: www.open-iscsi.org 3659 W: www.open-iscsi.org
3660 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mnc/linux-2.6-iscsi.git 3660 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mnc/linux-2.6-iscsi.git
3661 S: Maintained 3661 S: Maintained
3662 F: drivers/scsi/*iscsi* 3662 F: drivers/scsi/*iscsi*
3663 F: include/scsi/*iscsi* 3663 F: include/scsi/*iscsi*
3664 3664
3665 ISDN SUBSYSTEM 3665 ISDN SUBSYSTEM
3666 M: Karsten Keil <isdn@linux-pingi.de> 3666 M: Karsten Keil <isdn@linux-pingi.de>
3667 L: isdn4linux@listserv.isdn4linux.de (subscribers-only) 3667 L: isdn4linux@listserv.isdn4linux.de (subscribers-only)
3668 L: netdev@vger.kernel.org 3668 L: netdev@vger.kernel.org
3669 W: http://www.isdn4linux.de 3669 W: http://www.isdn4linux.de
3670 T: git git://git.kernel.org/pub/scm/linux/kernel/git/kkeil/isdn-2.6.git 3670 T: git git://git.kernel.org/pub/scm/linux/kernel/git/kkeil/isdn-2.6.git
3671 S: Maintained 3671 S: Maintained
3672 F: Documentation/isdn/ 3672 F: Documentation/isdn/
3673 F: drivers/isdn/ 3673 F: drivers/isdn/
3674 F: include/linux/isdn.h 3674 F: include/linux/isdn.h
3675 F: include/linux/isdn/ 3675 F: include/linux/isdn/
3676 3676
3677 ISDN SUBSYSTEM (Eicon active card driver) 3677 ISDN SUBSYSTEM (Eicon active card driver)
3678 M: Armin Schindler <mac@melware.de> 3678 M: Armin Schindler <mac@melware.de>
3679 L: isdn4linux@listserv.isdn4linux.de (subscribers-only) 3679 L: isdn4linux@listserv.isdn4linux.de (subscribers-only)
3680 W: http://www.melware.de 3680 W: http://www.melware.de
3681 S: Maintained 3681 S: Maintained
3682 F: drivers/isdn/hardware/eicon/ 3682 F: drivers/isdn/hardware/eicon/
3683 3683
3684 IT87 HARDWARE MONITORING DRIVER 3684 IT87 HARDWARE MONITORING DRIVER
3685 M: Jean Delvare <khali@linux-fr.org> 3685 M: Jean Delvare <khali@linux-fr.org>
3686 L: lm-sensors@lm-sensors.org 3686 L: lm-sensors@lm-sensors.org
3687 S: Maintained 3687 S: Maintained
3688 F: Documentation/hwmon/it87 3688 F: Documentation/hwmon/it87
3689 F: drivers/hwmon/it87.c 3689 F: drivers/hwmon/it87.c
3690 3690
3691 IVTV VIDEO4LINUX DRIVER 3691 IVTV VIDEO4LINUX DRIVER
3692 M: Andy Walls <awalls@md.metrocast.net> 3692 M: Andy Walls <awalls@md.metrocast.net>
3693 L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers) 3693 L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
3694 L: linux-media@vger.kernel.org 3694 L: linux-media@vger.kernel.org
3695 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 3695 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
3696 W: http://www.ivtvdriver.org 3696 W: http://www.ivtvdriver.org
3697 S: Maintained 3697 S: Maintained
3698 F: Documentation/video4linux/*.ivtv 3698 F: Documentation/video4linux/*.ivtv
3699 F: drivers/media/video/ivtv/ 3699 F: drivers/media/video/ivtv/
3700 F: include/linux/ivtv* 3700 F: include/linux/ivtv*
3701 3701
3702 JC42.4 TEMPERATURE SENSOR DRIVER 3702 JC42.4 TEMPERATURE SENSOR DRIVER
3703 M: Guenter Roeck <linux@roeck-us.net> 3703 M: Guenter Roeck <linux@roeck-us.net>
3704 L: lm-sensors@lm-sensors.org 3704 L: lm-sensors@lm-sensors.org
3705 S: Maintained 3705 S: Maintained
3706 F: drivers/hwmon/jc42.c 3706 F: drivers/hwmon/jc42.c
3707 F: Documentation/hwmon/jc42 3707 F: Documentation/hwmon/jc42
3708 3708
3709 JFS FILESYSTEM 3709 JFS FILESYSTEM
3710 M: Dave Kleikamp <shaggy@kernel.org> 3710 M: Dave Kleikamp <shaggy@kernel.org>
3711 L: jfs-discussion@lists.sourceforge.net 3711 L: jfs-discussion@lists.sourceforge.net
3712 W: http://jfs.sourceforge.net/ 3712 W: http://jfs.sourceforge.net/
3713 T: git git://git.kernel.org/pub/scm/linux/kernel/git/shaggy/jfs-2.6.git 3713 T: git git://git.kernel.org/pub/scm/linux/kernel/git/shaggy/jfs-2.6.git
3714 S: Maintained 3714 S: Maintained
3715 F: Documentation/filesystems/jfs.txt 3715 F: Documentation/filesystems/jfs.txt
3716 F: fs/jfs/ 3716 F: fs/jfs/
3717 3717
3718 JME NETWORK DRIVER 3718 JME NETWORK DRIVER
3719 M: Guo-Fu Tseng <cooldavid@cooldavid.org> 3719 M: Guo-Fu Tseng <cooldavid@cooldavid.org>
3720 L: netdev@vger.kernel.org 3720 L: netdev@vger.kernel.org
3721 S: Maintained 3721 S: Maintained
3722 F: drivers/net/ethernet/jme.* 3722 F: drivers/net/ethernet/jme.*
3723 3723
3724 JOURNALLING FLASH FILE SYSTEM V2 (JFFS2) 3724 JOURNALLING FLASH FILE SYSTEM V2 (JFFS2)
3725 M: David Woodhouse <dwmw2@infradead.org> 3725 M: David Woodhouse <dwmw2@infradead.org>
3726 L: linux-mtd@lists.infradead.org 3726 L: linux-mtd@lists.infradead.org
3727 W: http://www.linux-mtd.infradead.org/doc/jffs2.html 3727 W: http://www.linux-mtd.infradead.org/doc/jffs2.html
3728 S: Maintained 3728 S: Maintained
3729 F: fs/jffs2/ 3729 F: fs/jffs2/
3730 F: include/linux/jffs2.h 3730 F: include/linux/jffs2.h
3731 3731
3732 JOURNALLING LAYER FOR BLOCK DEVICES (JBD) 3732 JOURNALLING LAYER FOR BLOCK DEVICES (JBD)
3733 M: Andrew Morton <akpm@linux-foundation.org> 3733 M: Andrew Morton <akpm@linux-foundation.org>
3734 M: Jan Kara <jack@suse.cz> 3734 M: Jan Kara <jack@suse.cz>
3735 L: linux-ext4@vger.kernel.org 3735 L: linux-ext4@vger.kernel.org
3736 S: Maintained 3736 S: Maintained
3737 F: fs/jbd/ 3737 F: fs/jbd/
3738 F: include/linux/ext3_jbd.h 3738 F: include/linux/ext3_jbd.h
3739 F: include/linux/jbd.h 3739 F: include/linux/jbd.h
3740 3740
3741 JOURNALLING LAYER FOR BLOCK DEVICES (JBD2) 3741 JOURNALLING LAYER FOR BLOCK DEVICES (JBD2)
3742 M: "Theodore Ts'o" <tytso@mit.edu> 3742 M: "Theodore Ts'o" <tytso@mit.edu>
3743 L: linux-ext4@vger.kernel.org 3743 L: linux-ext4@vger.kernel.org
3744 S: Maintained 3744 S: Maintained
3745 F: fs/jbd2/ 3745 F: fs/jbd2/
3746 F: include/linux/jbd2.h 3746 F: include/linux/jbd2.h
3747 3747
3748 JSM Neo PCI based serial card 3748 JSM Neo PCI based serial card
3749 M: Lucas Tavares <lucaskt@linux.vnet.ibm.com> 3749 M: Lucas Tavares <lucaskt@linux.vnet.ibm.com>
3750 L: linux-serial@vger.kernel.org 3750 L: linux-serial@vger.kernel.org
3751 S: Maintained 3751 S: Maintained
3752 F: drivers/tty/serial/jsm/ 3752 F: drivers/tty/serial/jsm/
3753 3753
3754 K10TEMP HARDWARE MONITORING DRIVER 3754 K10TEMP HARDWARE MONITORING DRIVER
3755 M: Clemens Ladisch <clemens@ladisch.de> 3755 M: Clemens Ladisch <clemens@ladisch.de>
3756 L: lm-sensors@lm-sensors.org 3756 L: lm-sensors@lm-sensors.org
3757 S: Maintained 3757 S: Maintained
3758 F: Documentation/hwmon/k10temp 3758 F: Documentation/hwmon/k10temp
3759 F: drivers/hwmon/k10temp.c 3759 F: drivers/hwmon/k10temp.c
3760 3760
3761 K8TEMP HARDWARE MONITORING DRIVER 3761 K8TEMP HARDWARE MONITORING DRIVER
3762 M: Rudolf Marek <r.marek@assembler.cz> 3762 M: Rudolf Marek <r.marek@assembler.cz>
3763 L: lm-sensors@lm-sensors.org 3763 L: lm-sensors@lm-sensors.org
3764 S: Maintained 3764 S: Maintained
3765 F: Documentation/hwmon/k8temp 3765 F: Documentation/hwmon/k8temp
3766 F: drivers/hwmon/k8temp.c 3766 F: drivers/hwmon/k8temp.c
3767 3767
3768 KCONFIG 3768 KCONFIG
3769 M: Michal Marek <mmarek@suse.cz> 3769 M: Michal Marek <mmarek@suse.cz>
3770 L: linux-kbuild@vger.kernel.org 3770 L: linux-kbuild@vger.kernel.org
3771 S: Odd Fixes 3771 S: Odd Fixes
3772 F: Documentation/kbuild/kconfig-language.txt 3772 F: Documentation/kbuild/kconfig-language.txt
3773 F: scripts/kconfig/ 3773 F: scripts/kconfig/
3774 3774
3775 KDUMP 3775 KDUMP
3776 M: Vivek Goyal <vgoyal@redhat.com> 3776 M: Vivek Goyal <vgoyal@redhat.com>
3777 M: Haren Myneni <hbabu@us.ibm.com> 3777 M: Haren Myneni <hbabu@us.ibm.com>
3778 L: kexec@lists.infradead.org 3778 L: kexec@lists.infradead.org
3779 W: http://lse.sourceforge.net/kdump/ 3779 W: http://lse.sourceforge.net/kdump/
3780 S: Maintained 3780 S: Maintained
3781 F: Documentation/kdump/ 3781 F: Documentation/kdump/
3782 3782
3783 KERNEL AUTOMOUNTER v4 (AUTOFS4) 3783 KERNEL AUTOMOUNTER v4 (AUTOFS4)
3784 M: Ian Kent <raven@themaw.net> 3784 M: Ian Kent <raven@themaw.net>
3785 L: autofs@linux.kernel.org 3785 L: autofs@linux.kernel.org
3786 S: Maintained 3786 S: Maintained
3787 F: fs/autofs4/ 3787 F: fs/autofs4/
3788 3788
3789 KERNEL BUILD + files below scripts/ (unless maintained elsewhere) 3789 KERNEL BUILD + files below scripts/ (unless maintained elsewhere)
3790 M: Michal Marek <mmarek@suse.cz> 3790 M: Michal Marek <mmarek@suse.cz>
3791 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6.git for-next 3791 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6.git for-next
3792 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6.git rc-fixes 3792 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6.git rc-fixes
3793 L: linux-kbuild@vger.kernel.org 3793 L: linux-kbuild@vger.kernel.org
3794 S: Maintained 3794 S: Maintained
3795 F: Documentation/kbuild/ 3795 F: Documentation/kbuild/
3796 F: Makefile 3796 F: Makefile
3797 F: scripts/Makefile.* 3797 F: scripts/Makefile.*
3798 F: scripts/basic/ 3798 F: scripts/basic/
3799 F: scripts/mk* 3799 F: scripts/mk*
3800 F: scripts/package/ 3800 F: scripts/package/
3801 3801
3802 KERNEL JANITORS 3802 KERNEL JANITORS
3803 L: kernel-janitors@vger.kernel.org 3803 L: kernel-janitors@vger.kernel.org
3804 W: http://kernelnewbies.org/KernelJanitors 3804 W: http://kernelnewbies.org/KernelJanitors
3805 S: Odd Fixes 3805 S: Odd Fixes
3806 3806
3807 KERNEL NFSD, SUNRPC, AND LOCKD SERVERS 3807 KERNEL NFSD, SUNRPC, AND LOCKD SERVERS
3808 M: "J. Bruce Fields" <bfields@fieldses.org> 3808 M: "J. Bruce Fields" <bfields@fieldses.org>
3809 L: linux-nfs@vger.kernel.org 3809 L: linux-nfs@vger.kernel.org
3810 W: http://nfs.sourceforge.net/ 3810 W: http://nfs.sourceforge.net/
3811 S: Supported 3811 S: Supported
3812 F: fs/nfsd/ 3812 F: fs/nfsd/
3813 F: include/linux/nfsd/ 3813 F: include/linux/nfsd/
3814 F: fs/lockd/ 3814 F: fs/lockd/
3815 F: fs/nfs_common/ 3815 F: fs/nfs_common/
3816 F: net/sunrpc/ 3816 F: net/sunrpc/
3817 F: include/linux/lockd/ 3817 F: include/linux/lockd/
3818 F: include/linux/sunrpc/ 3818 F: include/linux/sunrpc/
3819 3819
3820 KERNEL VIRTUAL MACHINE (KVM) 3820 KERNEL VIRTUAL MACHINE (KVM)
3821 M: Avi Kivity <avi@redhat.com> 3821 M: Avi Kivity <avi@redhat.com>
3822 M: Marcelo Tosatti <mtosatti@redhat.com> 3822 M: Marcelo Tosatti <mtosatti@redhat.com>
3823 L: kvm@vger.kernel.org 3823 L: kvm@vger.kernel.org
3824 W: http://kvm.qumranet.com 3824 W: http://kvm.qumranet.com
3825 S: Supported 3825 S: Supported
3826 F: Documentation/*/kvm.txt 3826 F: Documentation/*/kvm.txt
3827 F: arch/*/kvm/ 3827 F: arch/*/kvm/
3828 F: arch/*/include/asm/kvm* 3828 F: arch/*/include/asm/kvm*
3829 F: include/linux/kvm* 3829 F: include/linux/kvm*
3830 F: virt/kvm/ 3830 F: virt/kvm/
3831 3831
3832 KERNEL VIRTUAL MACHINE (KVM) FOR AMD-V 3832 KERNEL VIRTUAL MACHINE (KVM) FOR AMD-V
3833 M: Joerg Roedel <joerg.roedel@amd.com> 3833 M: Joerg Roedel <joerg.roedel@amd.com>
3834 L: kvm@vger.kernel.org 3834 L: kvm@vger.kernel.org
3835 W: http://kvm.qumranet.com 3835 W: http://kvm.qumranet.com
3836 S: Supported 3836 S: Supported
3837 F: arch/x86/include/asm/svm.h 3837 F: arch/x86/include/asm/svm.h
3838 F: arch/x86/kvm/svm.c 3838 F: arch/x86/kvm/svm.c
3839 3839
3840 KERNEL VIRTUAL MACHINE (KVM) FOR POWERPC 3840 KERNEL VIRTUAL MACHINE (KVM) FOR POWERPC
3841 M: Alexander Graf <agraf@suse.de> 3841 M: Alexander Graf <agraf@suse.de>
3842 L: kvm-ppc@vger.kernel.org 3842 L: kvm-ppc@vger.kernel.org
3843 W: http://kvm.qumranet.com 3843 W: http://kvm.qumranet.com
3844 S: Supported 3844 S: Supported
3845 F: arch/powerpc/include/asm/kvm* 3845 F: arch/powerpc/include/asm/kvm*
3846 F: arch/powerpc/kvm/ 3846 F: arch/powerpc/kvm/
3847 3847
3848 KERNEL VIRTUAL MACHINE For Itanium (KVM/IA64) 3848 KERNEL VIRTUAL MACHINE For Itanium (KVM/IA64)
3849 M: Xiantao Zhang <xiantao.zhang@intel.com> 3849 M: Xiantao Zhang <xiantao.zhang@intel.com>
3850 L: kvm-ia64@vger.kernel.org 3850 L: kvm-ia64@vger.kernel.org
3851 W: http://kvm.qumranet.com 3851 W: http://kvm.qumranet.com
3852 S: Supported 3852 S: Supported
3853 F: Documentation/ia64/kvm.txt 3853 F: Documentation/ia64/kvm.txt
3854 F: arch/ia64/include/asm/kvm* 3854 F: arch/ia64/include/asm/kvm*
3855 F: arch/ia64/kvm/ 3855 F: arch/ia64/kvm/
3856 3856
3857 KERNEL VIRTUAL MACHINE for s390 (KVM/s390) 3857 KERNEL VIRTUAL MACHINE for s390 (KVM/s390)
3858 M: Carsten Otte <cotte@de.ibm.com> 3858 M: Carsten Otte <cotte@de.ibm.com>
3859 M: Christian Borntraeger <borntraeger@de.ibm.com> 3859 M: Christian Borntraeger <borntraeger@de.ibm.com>
3860 M: linux390@de.ibm.com 3860 M: linux390@de.ibm.com
3861 L: linux-s390@vger.kernel.org 3861 L: linux-s390@vger.kernel.org
3862 W: http://www.ibm.com/developerworks/linux/linux390/ 3862 W: http://www.ibm.com/developerworks/linux/linux390/
3863 S: Supported 3863 S: Supported
3864 F: Documentation/s390/kvm.txt 3864 F: Documentation/s390/kvm.txt
3865 F: arch/s390/include/asm/kvm* 3865 F: arch/s390/include/asm/kvm*
3866 F: arch/s390/kvm/ 3866 F: arch/s390/kvm/
3867 F: drivers/s390/kvm/ 3867 F: drivers/s390/kvm/
3868 3868
3869 KEXEC 3869 KEXEC
3870 M: Eric Biederman <ebiederm@xmission.com> 3870 M: Eric Biederman <ebiederm@xmission.com>
3871 W: http://kernel.org/pub/linux/utils/kernel/kexec/ 3871 W: http://kernel.org/pub/linux/utils/kernel/kexec/
3872 L: kexec@lists.infradead.org 3872 L: kexec@lists.infradead.org
3873 S: Maintained 3873 S: Maintained
3874 F: include/linux/kexec.h 3874 F: include/linux/kexec.h
3875 F: kernel/kexec.c 3875 F: kernel/kexec.c
3876 3876
3877 KEYS/KEYRINGS: 3877 KEYS/KEYRINGS:
3878 M: David Howells <dhowells@redhat.com> 3878 M: David Howells <dhowells@redhat.com>
3879 L: keyrings@linux-nfs.org 3879 L: keyrings@linux-nfs.org
3880 S: Maintained 3880 S: Maintained
3881 F: Documentation/security/keys.txt 3881 F: Documentation/security/keys.txt
3882 F: include/linux/key.h 3882 F: include/linux/key.h
3883 F: include/linux/key-type.h 3883 F: include/linux/key-type.h
3884 F: include/keys/ 3884 F: include/keys/
3885 F: security/keys/ 3885 F: security/keys/
3886 3886
3887 KEYS-TRUSTED 3887 KEYS-TRUSTED
3888 M: David Safford <safford@watson.ibm.com> 3888 M: David Safford <safford@watson.ibm.com>
3889 M: Mimi Zohar <zohar@us.ibm.com> 3889 M: Mimi Zohar <zohar@us.ibm.com>
3890 L: linux-security-module@vger.kernel.org 3890 L: linux-security-module@vger.kernel.org
3891 L: keyrings@linux-nfs.org 3891 L: keyrings@linux-nfs.org
3892 S: Supported 3892 S: Supported
3893 F: Documentation/security/keys-trusted-encrypted.txt 3893 F: Documentation/security/keys-trusted-encrypted.txt
3894 F: include/keys/trusted-type.h 3894 F: include/keys/trusted-type.h
3895 F: security/keys/trusted.c 3895 F: security/keys/trusted.c
3896 F: security/keys/trusted.h 3896 F: security/keys/trusted.h
3897 3897
3898 KEYS-ENCRYPTED 3898 KEYS-ENCRYPTED
3899 M: Mimi Zohar <zohar@us.ibm.com> 3899 M: Mimi Zohar <zohar@us.ibm.com>
3900 M: David Safford <safford@watson.ibm.com> 3900 M: David Safford <safford@watson.ibm.com>
3901 L: linux-security-module@vger.kernel.org 3901 L: linux-security-module@vger.kernel.org
3902 L: keyrings@linux-nfs.org 3902 L: keyrings@linux-nfs.org
3903 S: Supported 3903 S: Supported
3904 F: Documentation/security/keys-trusted-encrypted.txt 3904 F: Documentation/security/keys-trusted-encrypted.txt
3905 F: include/keys/encrypted-type.h 3905 F: include/keys/encrypted-type.h
3906 F: security/keys/encrypted-keys/ 3906 F: security/keys/encrypted-keys/
3907 3907
3908 KGDB / KDB /debug_core 3908 KGDB / KDB /debug_core
3909 M: Jason Wessel <jason.wessel@windriver.com> 3909 M: Jason Wessel <jason.wessel@windriver.com>
3910 W: http://kgdb.wiki.kernel.org/ 3910 W: http://kgdb.wiki.kernel.org/
3911 L: kgdb-bugreport@lists.sourceforge.net 3911 L: kgdb-bugreport@lists.sourceforge.net
3912 S: Maintained 3912 S: Maintained
3913 F: Documentation/DocBook/kgdb.tmpl 3913 F: Documentation/DocBook/kgdb.tmpl
3914 F: drivers/misc/kgdbts.c 3914 F: drivers/misc/kgdbts.c
3915 F: drivers/tty/serial/kgdboc.c 3915 F: drivers/tty/serial/kgdboc.c
3916 F: include/linux/kdb.h 3916 F: include/linux/kdb.h
3917 F: include/linux/kgdb.h 3917 F: include/linux/kgdb.h
3918 F: kernel/debug/ 3918 F: kernel/debug/
3919 3919
3920 KMEMCHECK 3920 KMEMCHECK
3921 M: Vegard Nossum <vegardno@ifi.uio.no> 3921 M: Vegard Nossum <vegardno@ifi.uio.no>
3922 M: Pekka Enberg <penberg@kernel.org> 3922 M: Pekka Enberg <penberg@kernel.org>
3923 S: Maintained 3923 S: Maintained
3924 F: Documentation/kmemcheck.txt 3924 F: Documentation/kmemcheck.txt
3925 F: arch/x86/include/asm/kmemcheck.h 3925 F: arch/x86/include/asm/kmemcheck.h
3926 F: arch/x86/mm/kmemcheck/ 3926 F: arch/x86/mm/kmemcheck/
3927 F: include/linux/kmemcheck.h 3927 F: include/linux/kmemcheck.h
3928 F: mm/kmemcheck.c 3928 F: mm/kmemcheck.c
3929 3929
3930 KMEMLEAK 3930 KMEMLEAK
3931 M: Catalin Marinas <catalin.marinas@arm.com> 3931 M: Catalin Marinas <catalin.marinas@arm.com>
3932 S: Maintained 3932 S: Maintained
3933 F: Documentation/kmemleak.txt 3933 F: Documentation/kmemleak.txt
3934 F: include/linux/kmemleak.h 3934 F: include/linux/kmemleak.h
3935 F: mm/kmemleak.c 3935 F: mm/kmemleak.c
3936 F: mm/kmemleak-test.c 3936 F: mm/kmemleak-test.c
3937 3937
3938 KPROBES 3938 KPROBES
3939 M: Ananth N Mavinakayanahalli <ananth@in.ibm.com> 3939 M: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
3940 M: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com> 3940 M: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
3941 M: "David S. Miller" <davem@davemloft.net> 3941 M: "David S. Miller" <davem@davemloft.net>
3942 M: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> 3942 M: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
3943 S: Maintained 3943 S: Maintained
3944 F: Documentation/kprobes.txt 3944 F: Documentation/kprobes.txt
3945 F: include/linux/kprobes.h 3945 F: include/linux/kprobes.h
3946 F: kernel/kprobes.c 3946 F: kernel/kprobes.c
3947 3947
3948 KS0108 LCD CONTROLLER DRIVER 3948 KS0108 LCD CONTROLLER DRIVER
3949 M: Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com> 3949 M: Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
3950 W: http://miguelojeda.es/auxdisplay.htm 3950 W: http://miguelojeda.es/auxdisplay.htm
3951 W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm 3951 W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm
3952 S: Maintained 3952 S: Maintained
3953 F: Documentation/auxdisplay/ks0108 3953 F: Documentation/auxdisplay/ks0108
3954 F: drivers/auxdisplay/ks0108.c 3954 F: drivers/auxdisplay/ks0108.c
3955 F: include/linux/ks0108.h 3955 F: include/linux/ks0108.h
3956 3956
3957 LAPB module 3957 LAPB module
3958 L: linux-x25@vger.kernel.org 3958 L: linux-x25@vger.kernel.org
3959 S: Orphan 3959 S: Orphan
3960 F: Documentation/networking/lapb-module.txt 3960 F: Documentation/networking/lapb-module.txt
3961 F: include/*/lapb.h 3961 F: include/*/lapb.h
3962 F: net/lapb/ 3962 F: net/lapb/
3963 3963
3964 LASI 53c700 driver for PARISC 3964 LASI 53c700 driver for PARISC
3965 M: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com> 3965 M: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
3966 L: linux-scsi@vger.kernel.org 3966 L: linux-scsi@vger.kernel.org
3967 S: Maintained 3967 S: Maintained
3968 F: Documentation/scsi/53c700.txt 3968 F: Documentation/scsi/53c700.txt
3969 F: drivers/scsi/53c700* 3969 F: drivers/scsi/53c700*
3970 3970
3971 LED SUBSYSTEM 3971 LED SUBSYSTEM
3972 M: Richard Purdie <rpurdie@rpsys.net> 3972 M: Richard Purdie <rpurdie@rpsys.net>
3973 S: Maintained 3973 S: Maintained
3974 F: drivers/leds/ 3974 F: drivers/leds/
3975 F: include/linux/leds.h 3975 F: include/linux/leds.h
3976 3976
3977 LEGACY EEPROM DRIVER 3977 LEGACY EEPROM DRIVER
3978 M: Jean Delvare <khali@linux-fr.org> 3978 M: Jean Delvare <khali@linux-fr.org>
3979 S: Maintained 3979 S: Maintained
3980 F: Documentation/misc-devices/eeprom 3980 F: Documentation/misc-devices/eeprom
3981 F: drivers/misc/eeprom/eeprom.c 3981 F: drivers/misc/eeprom/eeprom.c
3982 3982
3983 LEGO USB Tower driver 3983 LEGO USB Tower driver
3984 M: Juergen Stuber <starblue@users.sourceforge.net> 3984 M: Juergen Stuber <starblue@users.sourceforge.net>
3985 L: legousb-devel@lists.sourceforge.net 3985 L: legousb-devel@lists.sourceforge.net
3986 W: http://legousb.sourceforge.net/ 3986 W: http://legousb.sourceforge.net/
3987 S: Maintained 3987 S: Maintained
3988 F: drivers/usb/misc/legousbtower.c 3988 F: drivers/usb/misc/legousbtower.c
3989 3989
3990 LGUEST 3990 LGUEST
3991 M: Rusty Russell <rusty@rustcorp.com.au> 3991 M: Rusty Russell <rusty@rustcorp.com.au>
3992 L: lguest@lists.ozlabs.org 3992 L: lguest@lists.ozlabs.org
3993 W: http://lguest.ozlabs.org/ 3993 W: http://lguest.ozlabs.org/
3994 S: Odd Fixes 3994 S: Odd Fixes
3995 F: arch/x86/include/asm/lguest*.h 3995 F: arch/x86/include/asm/lguest*.h
3996 F: arch/x86/lguest/ 3996 F: arch/x86/lguest/
3997 F: drivers/lguest/ 3997 F: drivers/lguest/
3998 F: include/linux/lguest*.h 3998 F: include/linux/lguest*.h
3999 F: tools/lguest/ 3999 F: tools/lguest/
4000 4000
4001 LINUX FOR IBM pSERIES (RS/6000) 4001 LINUX FOR IBM pSERIES (RS/6000)
4002 M: Paul Mackerras <paulus@au.ibm.com> 4002 M: Paul Mackerras <paulus@au.ibm.com>
4003 W: http://www.ibm.com/linux/ltc/projects/ppc 4003 W: http://www.ibm.com/linux/ltc/projects/ppc
4004 S: Supported 4004 S: Supported
4005 F: arch/powerpc/boot/rs6000.h 4005 F: arch/powerpc/boot/rs6000.h
4006 4006
4007 LINUX FOR POWERPC (32-BIT AND 64-BIT) 4007 LINUX FOR POWERPC (32-BIT AND 64-BIT)
4008 M: Benjamin Herrenschmidt <benh@kernel.crashing.org> 4008 M: Benjamin Herrenschmidt <benh@kernel.crashing.org>
4009 M: Paul Mackerras <paulus@samba.org> 4009 M: Paul Mackerras <paulus@samba.org>
4010 W: http://www.penguinppc.org/ 4010 W: http://www.penguinppc.org/
4011 L: linuxppc-dev@lists.ozlabs.org 4011 L: linuxppc-dev@lists.ozlabs.org
4012 Q: http://patchwork.ozlabs.org/project/linuxppc-dev/list/ 4012 Q: http://patchwork.ozlabs.org/project/linuxppc-dev/list/
4013 T: git git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc.git 4013 T: git git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc.git
4014 S: Supported 4014 S: Supported
4015 F: Documentation/powerpc/ 4015 F: Documentation/powerpc/
4016 F: arch/powerpc/ 4016 F: arch/powerpc/
4017 4017
4018 LINUX FOR POWER MACINTOSH 4018 LINUX FOR POWER MACINTOSH
4019 M: Benjamin Herrenschmidt <benh@kernel.crashing.org> 4019 M: Benjamin Herrenschmidt <benh@kernel.crashing.org>
4020 W: http://www.penguinppc.org/ 4020 W: http://www.penguinppc.org/
4021 L: linuxppc-dev@lists.ozlabs.org 4021 L: linuxppc-dev@lists.ozlabs.org
4022 S: Maintained 4022 S: Maintained
4023 F: arch/powerpc/platforms/powermac/ 4023 F: arch/powerpc/platforms/powermac/
4024 F: drivers/macintosh/ 4024 F: drivers/macintosh/
4025 4025
4026 LINUX FOR POWERPC EMBEDDED MPC5XXX 4026 LINUX FOR POWERPC EMBEDDED MPC5XXX
4027 M: Anatolij Gustschin <agust@denx.de> 4027 M: Anatolij Gustschin <agust@denx.de>
4028 L: linuxppc-dev@lists.ozlabs.org 4028 L: linuxppc-dev@lists.ozlabs.org
4029 T: git git://git.denx.de/linux-2.6-agust.git 4029 T: git git://git.denx.de/linux-2.6-agust.git
4030 S: Maintained 4030 S: Maintained
4031 F: arch/powerpc/platforms/512x/ 4031 F: arch/powerpc/platforms/512x/
4032 F: arch/powerpc/platforms/52xx/ 4032 F: arch/powerpc/platforms/52xx/
4033 4033
4034 LINUX FOR POWERPC EMBEDDED PPC4XX 4034 LINUX FOR POWERPC EMBEDDED PPC4XX
4035 M: Josh Boyer <jwboyer@gmail.com> 4035 M: Josh Boyer <jwboyer@gmail.com>
4036 M: Matt Porter <mporter@kernel.crashing.org> 4036 M: Matt Porter <mporter@kernel.crashing.org>
4037 W: http://www.penguinppc.org/ 4037 W: http://www.penguinppc.org/
4038 L: linuxppc-dev@lists.ozlabs.org 4038 L: linuxppc-dev@lists.ozlabs.org
4039 T: git git://git.infradead.org/users/jwboyer/powerpc-4xx.git 4039 T: git git://git.infradead.org/users/jwboyer/powerpc-4xx.git
4040 S: Maintained 4040 S: Maintained
4041 F: arch/powerpc/platforms/40x/ 4041 F: arch/powerpc/platforms/40x/
4042 F: arch/powerpc/platforms/44x/ 4042 F: arch/powerpc/platforms/44x/
4043 4043
4044 LINUX FOR POWERPC EMBEDDED XILINX VIRTEX 4044 LINUX FOR POWERPC EMBEDDED XILINX VIRTEX
4045 M: Grant Likely <grant.likely@secretlab.ca> 4045 M: Grant Likely <grant.likely@secretlab.ca>
4046 W: http://wiki.secretlab.ca/index.php/Linux_on_Xilinx_Virtex 4046 W: http://wiki.secretlab.ca/index.php/Linux_on_Xilinx_Virtex
4047 L: linuxppc-dev@lists.ozlabs.org 4047 L: linuxppc-dev@lists.ozlabs.org
4048 T: git git://git.secretlab.ca/git/linux-2.6.git 4048 T: git git://git.secretlab.ca/git/linux-2.6.git
4049 S: Maintained 4049 S: Maintained
4050 F: arch/powerpc/*/*virtex* 4050 F: arch/powerpc/*/*virtex*
4051 F: arch/powerpc/*/*/*virtex* 4051 F: arch/powerpc/*/*/*virtex*
4052 4052
4053 LINUX FOR POWERPC EMBEDDED PPC8XX 4053 LINUX FOR POWERPC EMBEDDED PPC8XX
4054 M: Vitaly Bordug <vitb@kernel.crashing.org> 4054 M: Vitaly Bordug <vitb@kernel.crashing.org>
4055 M: Marcelo Tosatti <marcelo@kvack.org> 4055 M: Marcelo Tosatti <marcelo@kvack.org>
4056 W: http://www.penguinppc.org/ 4056 W: http://www.penguinppc.org/
4057 L: linuxppc-dev@lists.ozlabs.org 4057 L: linuxppc-dev@lists.ozlabs.org
4058 S: Maintained 4058 S: Maintained
4059 F: arch/powerpc/platforms/8xx/ 4059 F: arch/powerpc/platforms/8xx/
4060 4060
4061 LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX 4061 LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX
4062 M: Kumar Gala <galak@kernel.crashing.org> 4062 M: Kumar Gala <galak@kernel.crashing.org>
4063 W: http://www.penguinppc.org/ 4063 W: http://www.penguinppc.org/
4064 L: linuxppc-dev@lists.ozlabs.org 4064 L: linuxppc-dev@lists.ozlabs.org
4065 S: Maintained 4065 S: Maintained
4066 F: arch/powerpc/platforms/83xx/ 4066 F: arch/powerpc/platforms/83xx/
4067 F: arch/powerpc/platforms/85xx/ 4067 F: arch/powerpc/platforms/85xx/
4068 4068
4069 LINUX FOR POWERPC PA SEMI PWRFICIENT 4069 LINUX FOR POWERPC PA SEMI PWRFICIENT
4070 M: Olof Johansson <olof@lixom.net> 4070 M: Olof Johansson <olof@lixom.net>
4071 L: linuxppc-dev@lists.ozlabs.org 4071 L: linuxppc-dev@lists.ozlabs.org
4072 S: Maintained 4072 S: Maintained
4073 F: arch/powerpc/platforms/pasemi/ 4073 F: arch/powerpc/platforms/pasemi/
4074 F: drivers/*/*pasemi* 4074 F: drivers/*/*pasemi*
4075 F: drivers/*/*/*pasemi* 4075 F: drivers/*/*/*pasemi*
4076 4076
4077 LINUX SECURITY MODULE (LSM) FRAMEWORK 4077 LINUX SECURITY MODULE (LSM) FRAMEWORK
4078 M: Chris Wright <chrisw@sous-sol.org> 4078 M: Chris Wright <chrisw@sous-sol.org>
4079 L: linux-security-module@vger.kernel.org 4079 L: linux-security-module@vger.kernel.org
4080 S: Supported 4080 S: Supported
4081 4081
4082 LIS3LV02D ACCELEROMETER DRIVER 4082 LIS3LV02D ACCELEROMETER DRIVER
4083 M: Eric Piel <eric.piel@tremplin-utc.net> 4083 M: Eric Piel <eric.piel@tremplin-utc.net>
4084 S: Maintained 4084 S: Maintained
4085 F: Documentation/misc-devices/lis3lv02d 4085 F: Documentation/misc-devices/lis3lv02d
4086 F: drivers/misc/lis3lv02d/ 4086 F: drivers/misc/lis3lv02d/
4087 F: drivers/platform/x86/hp_accel.c 4087 F: drivers/platform/x86/hp_accel.c
4088 4088
4089 LLC (802.2) 4089 LLC (802.2)
4090 M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> 4090 M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
4091 S: Maintained 4091 S: Maintained
4092 F: include/linux/llc.h 4092 F: include/linux/llc.h
4093 F: include/net/llc* 4093 F: include/net/llc*
4094 F: net/llc/ 4094 F: net/llc/
4095 4095
4096 LM73 HARDWARE MONITOR DRIVER 4096 LM73 HARDWARE MONITOR DRIVER
4097 M: Guillaume Ligneul <guillaume.ligneul@gmail.com> 4097 M: Guillaume Ligneul <guillaume.ligneul@gmail.com>
4098 L: lm-sensors@lm-sensors.org 4098 L: lm-sensors@lm-sensors.org
4099 S: Maintained 4099 S: Maintained
4100 F: drivers/hwmon/lm73.c 4100 F: drivers/hwmon/lm73.c
4101 4101
4102 LM78 HARDWARE MONITOR DRIVER 4102 LM78 HARDWARE MONITOR DRIVER
4103 M: Jean Delvare <khali@linux-fr.org> 4103 M: Jean Delvare <khali@linux-fr.org>
4104 L: lm-sensors@lm-sensors.org 4104 L: lm-sensors@lm-sensors.org
4105 S: Maintained 4105 S: Maintained
4106 F: Documentation/hwmon/lm78 4106 F: Documentation/hwmon/lm78
4107 F: drivers/hwmon/lm78.c 4107 F: drivers/hwmon/lm78.c
4108 4108
4109 LM83 HARDWARE MONITOR DRIVER 4109 LM83 HARDWARE MONITOR DRIVER
4110 M: Jean Delvare <khali@linux-fr.org> 4110 M: Jean Delvare <khali@linux-fr.org>
4111 L: lm-sensors@lm-sensors.org 4111 L: lm-sensors@lm-sensors.org
4112 S: Maintained 4112 S: Maintained
4113 F: Documentation/hwmon/lm83 4113 F: Documentation/hwmon/lm83
4114 F: drivers/hwmon/lm83.c 4114 F: drivers/hwmon/lm83.c
4115 4115
4116 LM90 HARDWARE MONITOR DRIVER 4116 LM90 HARDWARE MONITOR DRIVER
4117 M: Jean Delvare <khali@linux-fr.org> 4117 M: Jean Delvare <khali@linux-fr.org>
4118 L: lm-sensors@lm-sensors.org 4118 L: lm-sensors@lm-sensors.org
4119 S: Maintained 4119 S: Maintained
4120 F: Documentation/hwmon/lm90 4120 F: Documentation/hwmon/lm90
4121 F: drivers/hwmon/lm90.c 4121 F: drivers/hwmon/lm90.c
4122 4122
4123 LOCKDEP AND LOCKSTAT 4123 LOCKDEP AND LOCKSTAT
4124 M: Peter Zijlstra <peterz@infradead.org> 4124 M: Peter Zijlstra <peterz@infradead.org>
4125 M: Ingo Molnar <mingo@redhat.com> 4125 M: Ingo Molnar <mingo@redhat.com>
4126 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/locking 4126 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/locking
4127 S: Maintained 4127 S: Maintained
4128 F: Documentation/lockdep*.txt 4128 F: Documentation/lockdep*.txt
4129 F: Documentation/lockstat.txt 4129 F: Documentation/lockstat.txt
4130 F: include/linux/lockdep.h 4130 F: include/linux/lockdep.h
4131 F: kernel/lockdep* 4131 F: kernel/lockdep*
4132 4132
4133 LOGICAL DISK MANAGER SUPPORT (LDM, Windows 2000/XP/Vista Dynamic Disks) 4133 LOGICAL DISK MANAGER SUPPORT (LDM, Windows 2000/XP/Vista Dynamic Disks)
4134 M: "Richard Russon (FlatCap)" <ldm@flatcap.org> 4134 M: "Richard Russon (FlatCap)" <ldm@flatcap.org>
4135 L: linux-ntfs-dev@lists.sourceforge.net 4135 L: linux-ntfs-dev@lists.sourceforge.net
4136 W: http://www.linux-ntfs.org/content/view/19/37/ 4136 W: http://www.linux-ntfs.org/content/view/19/37/
4137 S: Maintained 4137 S: Maintained
4138 F: Documentation/ldm.txt 4138 F: Documentation/ldm.txt
4139 F: block/partitions/ldm.* 4139 F: block/partitions/ldm.*
4140 4140
4141 LogFS 4141 LogFS
4142 M: Joern Engel <joern@logfs.org> 4142 M: Joern Engel <joern@logfs.org>
4143 M: Prasad Joshi <prasadjoshi.linux@gmail.com> 4143 M: Prasad Joshi <prasadjoshi.linux@gmail.com>
4144 L: logfs@logfs.org 4144 L: logfs@logfs.org
4145 W: logfs.org 4145 W: logfs.org
4146 S: Maintained 4146 S: Maintained
4147 F: fs/logfs/ 4147 F: fs/logfs/
4148 4148
4149 LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI) 4149 LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
4150 M: Eric Moore <Eric.Moore@lsi.com> 4150 M: Eric Moore <Eric.Moore@lsi.com>
4151 M: support@lsi.com 4151 M: support@lsi.com
4152 L: DL-MPTFusionLinux@lsi.com 4152 L: DL-MPTFusionLinux@lsi.com
4153 L: linux-scsi@vger.kernel.org 4153 L: linux-scsi@vger.kernel.org
4154 W: http://www.lsilogic.com/support 4154 W: http://www.lsilogic.com/support
4155 S: Supported 4155 S: Supported
4156 F: drivers/message/fusion/ 4156 F: drivers/message/fusion/
4157 4157
4158 LSILOGIC/SYMBIOS/NCR 53C8XX and 53C1010 PCI-SCSI drivers 4158 LSILOGIC/SYMBIOS/NCR 53C8XX and 53C1010 PCI-SCSI drivers
4159 M: Matthew Wilcox <matthew@wil.cx> 4159 M: Matthew Wilcox <matthew@wil.cx>
4160 L: linux-scsi@vger.kernel.org 4160 L: linux-scsi@vger.kernel.org
4161 S: Maintained 4161 S: Maintained
4162 F: drivers/scsi/sym53c8xx_2/ 4162 F: drivers/scsi/sym53c8xx_2/
4163 4163
4164 LTC4261 HARDWARE MONITOR DRIVER 4164 LTC4261 HARDWARE MONITOR DRIVER
4165 M: Guenter Roeck <linux@roeck-us.net> 4165 M: Guenter Roeck <linux@roeck-us.net>
4166 L: lm-sensors@lm-sensors.org 4166 L: lm-sensors@lm-sensors.org
4167 S: Maintained 4167 S: Maintained
4168 F: Documentation/hwmon/ltc4261 4168 F: Documentation/hwmon/ltc4261
4169 F: drivers/hwmon/ltc4261.c 4169 F: drivers/hwmon/ltc4261.c
4170 4170
4171 LTP (Linux Test Project) 4171 LTP (Linux Test Project)
4172 M: Rishikesh K Rajak <risrajak@linux.vnet.ibm.com> 4172 M: Rishikesh K Rajak <risrajak@linux.vnet.ibm.com>
4173 M: Garrett Cooper <yanegomi@gmail.com> 4173 M: Garrett Cooper <yanegomi@gmail.com>
4174 M: Mike Frysinger <vapier@gentoo.org> 4174 M: Mike Frysinger <vapier@gentoo.org>
4175 M: Subrata Modak <subrata@linux.vnet.ibm.com> 4175 M: Subrata Modak <subrata@linux.vnet.ibm.com>
4176 L: ltp-list@lists.sourceforge.net (subscribers-only) 4176 L: ltp-list@lists.sourceforge.net (subscribers-only)
4177 W: http://ltp.sourceforge.net/ 4177 W: http://ltp.sourceforge.net/
4178 T: git git://ltp.git.sourceforge.net/gitroot/ltp/ltp-dev 4178 T: git git://ltp.git.sourceforge.net/gitroot/ltp/ltp-dev
4179 S: Maintained 4179 S: Maintained
4180 4180
4181 M32R ARCHITECTURE 4181 M32R ARCHITECTURE
4182 M: Hirokazu Takata <takata@linux-m32r.org> 4182 M: Hirokazu Takata <takata@linux-m32r.org>
4183 L: linux-m32r@ml.linux-m32r.org (moderated for non-subscribers) 4183 L: linux-m32r@ml.linux-m32r.org (moderated for non-subscribers)
4184 L: linux-m32r-ja@ml.linux-m32r.org (in Japanese) 4184 L: linux-m32r-ja@ml.linux-m32r.org (in Japanese)
4185 W: http://www.linux-m32r.org/ 4185 W: http://www.linux-m32r.org/
4186 S: Maintained 4186 S: Maintained
4187 F: arch/m32r/ 4187 F: arch/m32r/
4188 4188
4189 M68K ARCHITECTURE 4189 M68K ARCHITECTURE
4190 M: Geert Uytterhoeven <geert@linux-m68k.org> 4190 M: Geert Uytterhoeven <geert@linux-m68k.org>
4191 L: linux-m68k@lists.linux-m68k.org 4191 L: linux-m68k@lists.linux-m68k.org
4192 W: http://www.linux-m68k.org/ 4192 W: http://www.linux-m68k.org/
4193 T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k.git 4193 T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k.git
4194 S: Maintained 4194 S: Maintained
4195 F: arch/m68k/ 4195 F: arch/m68k/
4196 F: drivers/zorro/ 4196 F: drivers/zorro/
4197 4197
4198 M68K ON APPLE MACINTOSH 4198 M68K ON APPLE MACINTOSH
4199 M: Joshua Thompson <funaho@jurai.org> 4199 M: Joshua Thompson <funaho@jurai.org>
4200 W: http://www.mac.linux-m68k.org/ 4200 W: http://www.mac.linux-m68k.org/
4201 L: linux-m68k@lists.linux-m68k.org 4201 L: linux-m68k@lists.linux-m68k.org
4202 S: Maintained 4202 S: Maintained
4203 F: arch/m68k/mac/ 4203 F: arch/m68k/mac/
4204 4204
4205 M68K ON HP9000/300 4205 M68K ON HP9000/300
4206 M: Philip Blundell <philb@gnu.org> 4206 M: Philip Blundell <philb@gnu.org>
4207 W: http://www.tazenda.demon.co.uk/phil/linux-hp 4207 W: http://www.tazenda.demon.co.uk/phil/linux-hp
4208 S: Maintained 4208 S: Maintained
4209 F: arch/m68k/hp300/ 4209 F: arch/m68k/hp300/
4210 4210
4211 MAC80211 4211 MAC80211
4212 M: Johannes Berg <johannes@sipsolutions.net> 4212 M: Johannes Berg <johannes@sipsolutions.net>
4213 L: linux-wireless@vger.kernel.org 4213 L: linux-wireless@vger.kernel.org
4214 W: http://linuxwireless.org/ 4214 W: http://linuxwireless.org/
4215 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git 4215 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git
4216 S: Maintained 4216 S: Maintained
4217 F: Documentation/networking/mac80211-injection.txt 4217 F: Documentation/networking/mac80211-injection.txt
4218 F: include/net/mac80211.h 4218 F: include/net/mac80211.h
4219 F: net/mac80211/ 4219 F: net/mac80211/
4220 4220
4221 MAC80211 PID RATE CONTROL 4221 MAC80211 PID RATE CONTROL
4222 M: Stefano Brivio <stefano.brivio@polimi.it> 4222 M: Stefano Brivio <stefano.brivio@polimi.it>
4223 M: Mattias Nissler <mattias.nissler@gmx.de> 4223 M: Mattias Nissler <mattias.nissler@gmx.de>
4224 L: linux-wireless@vger.kernel.org 4224 L: linux-wireless@vger.kernel.org
4225 W: http://linuxwireless.org/en/developers/Documentation/mac80211/RateControl/PID 4225 W: http://linuxwireless.org/en/developers/Documentation/mac80211/RateControl/PID
4226 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git 4226 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git
4227 S: Maintained 4227 S: Maintained
4228 F: net/mac80211/rc80211_pid* 4228 F: net/mac80211/rc80211_pid*
4229 4229
4230 MACVLAN DRIVER 4230 MACVLAN DRIVER
4231 M: Patrick McHardy <kaber@trash.net> 4231 M: Patrick McHardy <kaber@trash.net>
4232 L: netdev@vger.kernel.org 4232 L: netdev@vger.kernel.org
4233 S: Maintained 4233 S: Maintained
4234 F: drivers/net/macvlan.c 4234 F: drivers/net/macvlan.c
4235 F: include/linux/if_macvlan.h 4235 F: include/linux/if_macvlan.h
4236 4236
4237 MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7 4237 MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7
4238 M: Michael Kerrisk <mtk.manpages@gmail.com> 4238 M: Michael Kerrisk <mtk.manpages@gmail.com>
4239 W: http://www.kernel.org/doc/man-pages 4239 W: http://www.kernel.org/doc/man-pages
4240 L: linux-man@vger.kernel.org 4240 L: linux-man@vger.kernel.org
4241 S: Maintained 4241 S: Maintained
4242 4242
4243 MARVELL LIBERTAS WIRELESS DRIVER 4243 MARVELL LIBERTAS WIRELESS DRIVER
4244 M: Dan Williams <dcbw@redhat.com> 4244 M: Dan Williams <dcbw@redhat.com>
4245 L: libertas-dev@lists.infradead.org 4245 L: libertas-dev@lists.infradead.org
4246 S: Maintained 4246 S: Maintained
4247 F: drivers/net/wireless/libertas/ 4247 F: drivers/net/wireless/libertas/
4248 4248
4249 MARVELL MV643XX ETHERNET DRIVER 4249 MARVELL MV643XX ETHERNET DRIVER
4250 M: Lennert Buytenhek <buytenh@wantstofly.org> 4250 M: Lennert Buytenhek <buytenh@wantstofly.org>
4251 L: netdev@vger.kernel.org 4251 L: netdev@vger.kernel.org
4252 S: Maintained 4252 S: Maintained
4253 F: drivers/net/ethernet/marvell/mv643xx_eth.* 4253 F: drivers/net/ethernet/marvell/mv643xx_eth.*
4254 F: include/linux/mv643xx.h 4254 F: include/linux/mv643xx.h
4255 4255
4256 MARVELL MWIFIEX WIRELESS DRIVER 4256 MARVELL MWIFIEX WIRELESS DRIVER
4257 M: Bing Zhao <bzhao@marvell.com> 4257 M: Bing Zhao <bzhao@marvell.com>
4258 L: linux-wireless@vger.kernel.org 4258 L: linux-wireless@vger.kernel.org
4259 S: Maintained 4259 S: Maintained
4260 F: drivers/net/wireless/mwifiex/ 4260 F: drivers/net/wireless/mwifiex/
4261 4261
4262 MARVELL MWL8K WIRELESS DRIVER 4262 MARVELL MWL8K WIRELESS DRIVER
4263 M: Lennert Buytenhek <buytenh@wantstofly.org> 4263 M: Lennert Buytenhek <buytenh@wantstofly.org>
4264 L: linux-wireless@vger.kernel.org 4264 L: linux-wireless@vger.kernel.org
4265 S: Odd Fixes 4265 S: Odd Fixes
4266 F: drivers/net/wireless/mwl8k.c 4266 F: drivers/net/wireless/mwl8k.c
4267 4267
4268 MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER 4268 MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER
4269 M: Nicolas Pitre <nico@fluxnic.net> 4269 M: Nicolas Pitre <nico@fluxnic.net>
4270 S: Odd Fixes 4270 S: Odd Fixes
4271 F: drivers/mmc/host/mvsdio.* 4271 F: drivers/mmc/host/mvsdio.*
4272 4272
4273 MARVELL YUKON / SYSKONNECT DRIVER 4273 MARVELL YUKON / SYSKONNECT DRIVER
4274 M: Mirko Lindner <mlindner@syskonnect.de> 4274 M: Mirko Lindner <mlindner@syskonnect.de>
4275 M: Ralph Roesler <rroesler@syskonnect.de> 4275 M: Ralph Roesler <rroesler@syskonnect.de>
4276 W: http://www.syskonnect.com 4276 W: http://www.syskonnect.com
4277 S: Supported 4277 S: Supported
4278 4278
4279 MATROX FRAMEBUFFER DRIVER 4279 MATROX FRAMEBUFFER DRIVER
4280 L: linux-fbdev@vger.kernel.org 4280 L: linux-fbdev@vger.kernel.org
4281 S: Orphan 4281 S: Orphan
4282 F: drivers/video/matrox/matroxfb_* 4282 F: drivers/video/matrox/matroxfb_*
4283 F: include/linux/matroxfb.h 4283 F: include/linux/matroxfb.h
4284 4284
4285 MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER 4285 MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
4286 M: "Hans J. Koch" <hjk@hansjkoch.de> 4286 M: "Hans J. Koch" <hjk@hansjkoch.de>
4287 L: lm-sensors@lm-sensors.org 4287 L: lm-sensors@lm-sensors.org
4288 S: Maintained 4288 S: Maintained
4289 F: Documentation/hwmon/max6650 4289 F: Documentation/hwmon/max6650
4290 F: drivers/hwmon/max6650.c 4290 F: drivers/hwmon/max6650.c
4291 4291
4292 MEDIA INPUT INFRASTRUCTURE (V4L/DVB) 4292 MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
4293 M: Mauro Carvalho Chehab <mchehab@infradead.org> 4293 M: Mauro Carvalho Chehab <mchehab@infradead.org>
4294 P: LinuxTV.org Project 4294 P: LinuxTV.org Project
4295 L: linux-media@vger.kernel.org 4295 L: linux-media@vger.kernel.org
4296 W: http://linuxtv.org 4296 W: http://linuxtv.org
4297 Q: http://patchwork.kernel.org/project/linux-media/list/ 4297 Q: http://patchwork.kernel.org/project/linux-media/list/
4298 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 4298 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
4299 S: Maintained 4299 S: Maintained
4300 F: Documentation/dvb/ 4300 F: Documentation/dvb/
4301 F: Documentation/video4linux/ 4301 F: Documentation/video4linux/
4302 F: Documentation/DocBook/media/ 4302 F: Documentation/DocBook/media/
4303 F: drivers/media/ 4303 F: drivers/media/
4304 F: drivers/staging/media/ 4304 F: drivers/staging/media/
4305 F: include/media/ 4305 F: include/media/
4306 F: include/linux/dvb/ 4306 F: include/linux/dvb/
4307 F: include/linux/videodev*.h 4307 F: include/linux/videodev*.h
4308 4308
4309 MEGARAID SCSI DRIVERS 4309 MEGARAID SCSI DRIVERS
4310 M: Neela Syam Kolli <megaraidlinux@lsi.com> 4310 M: Neela Syam Kolli <megaraidlinux@lsi.com>
4311 L: linux-scsi@vger.kernel.org 4311 L: linux-scsi@vger.kernel.org
4312 W: http://megaraid.lsilogic.com 4312 W: http://megaraid.lsilogic.com
4313 S: Maintained 4313 S: Maintained
4314 F: Documentation/scsi/megaraid.txt 4314 F: Documentation/scsi/megaraid.txt
4315 F: drivers/scsi/megaraid.* 4315 F: drivers/scsi/megaraid.*
4316 F: drivers/scsi/megaraid/ 4316 F: drivers/scsi/megaraid/
4317 4317
4318 MEMORY MANAGEMENT 4318 MEMORY MANAGEMENT
4319 L: linux-mm@kvack.org 4319 L: linux-mm@kvack.org
4320 W: http://www.linux-mm.org 4320 W: http://www.linux-mm.org
4321 S: Maintained 4321 S: Maintained
4322 F: include/linux/mm.h 4322 F: include/linux/mm.h
4323 F: mm/ 4323 F: mm/
4324 4324
4325 MEMORY RESOURCE CONTROLLER 4325 MEMORY RESOURCE CONTROLLER
4326 M: Johannes Weiner <hannes@cmpxchg.org> 4326 M: Johannes Weiner <hannes@cmpxchg.org>
4327 M: Michal Hocko <mhocko@suse.cz> 4327 M: Michal Hocko <mhocko@suse.cz>
4328 M: Balbir Singh <bsingharora@gmail.com> 4328 M: Balbir Singh <bsingharora@gmail.com>
4329 M: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> 4329 M: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
4330 L: cgroups@vger.kernel.org 4330 L: cgroups@vger.kernel.org
4331 L: linux-mm@kvack.org 4331 L: linux-mm@kvack.org
4332 S: Maintained 4332 S: Maintained
4333 F: mm/memcontrol.c 4333 F: mm/memcontrol.c
4334 F: mm/page_cgroup.c 4334 F: mm/page_cgroup.c
4335 4335
4336 MEMORY TECHNOLOGY DEVICES (MTD) 4336 MEMORY TECHNOLOGY DEVICES (MTD)
4337 M: David Woodhouse <dwmw2@infradead.org> 4337 M: David Woodhouse <dwmw2@infradead.org>
4338 L: linux-mtd@lists.infradead.org 4338 L: linux-mtd@lists.infradead.org
4339 W: http://www.linux-mtd.infradead.org/ 4339 W: http://www.linux-mtd.infradead.org/
4340 Q: http://patchwork.ozlabs.org/project/linux-mtd/list/ 4340 Q: http://patchwork.ozlabs.org/project/linux-mtd/list/
4341 T: git git://git.infradead.org/mtd-2.6.git 4341 T: git git://git.infradead.org/mtd-2.6.git
4342 S: Maintained 4342 S: Maintained
4343 F: drivers/mtd/ 4343 F: drivers/mtd/
4344 F: include/linux/mtd/ 4344 F: include/linux/mtd/
4345 F: include/mtd/ 4345 F: include/mtd/
4346 4346
4347 MICROBLAZE ARCHITECTURE 4347 MICROBLAZE ARCHITECTURE
4348 M: Michal Simek <monstr@monstr.eu> 4348 M: Michal Simek <monstr@monstr.eu>
4349 L: microblaze-uclinux@itee.uq.edu.au (moderated for non-subscribers) 4349 L: microblaze-uclinux@itee.uq.edu.au (moderated for non-subscribers)
4350 W: http://www.monstr.eu/fdt/ 4350 W: http://www.monstr.eu/fdt/
4351 T: git git://git.monstr.eu/linux-2.6-microblaze.git 4351 T: git git://git.monstr.eu/linux-2.6-microblaze.git
4352 S: Supported 4352 S: Supported
4353 F: arch/microblaze/ 4353 F: arch/microblaze/
4354 4354
4355 MICROTEK X6 SCANNER 4355 MICROTEK X6 SCANNER
4356 M: Oliver Neukum <oliver@neukum.name> 4356 M: Oliver Neukum <oliver@neukum.name>
4357 S: Maintained 4357 S: Maintained
4358 F: drivers/usb/image/microtek.* 4358 F: drivers/usb/image/microtek.*
4359 4359
4360 MIPS 4360 MIPS
4361 M: Ralf Baechle <ralf@linux-mips.org> 4361 M: Ralf Baechle <ralf@linux-mips.org>
4362 L: linux-mips@linux-mips.org 4362 L: linux-mips@linux-mips.org
4363 W: http://www.linux-mips.org/ 4363 W: http://www.linux-mips.org/
4364 T: git git://git.linux-mips.org/pub/scm/ralf/linux.git 4364 T: git git://git.linux-mips.org/pub/scm/ralf/linux.git
4365 Q: http://patchwork.linux-mips.org/project/linux-mips/list/ 4365 Q: http://patchwork.linux-mips.org/project/linux-mips/list/
4366 S: Supported 4366 S: Supported
4367 F: Documentation/mips/ 4367 F: Documentation/mips/
4368 F: arch/mips/ 4368 F: arch/mips/
4369 4369
4370 MISCELLANEOUS MCA-SUPPORT 4370 MISCELLANEOUS MCA-SUPPORT
4371 M: James Bottomley <James.Bottomley@HansenPartnership.com> 4371 M: James Bottomley <James.Bottomley@HansenPartnership.com>
4372 S: Maintained 4372 S: Maintained
4373 F: Documentation/ia64/mca.txt 4373 F: Documentation/ia64/mca.txt
4374 F: Documentation/mca.txt 4374 F: Documentation/mca.txt
4375 F: drivers/mca/ 4375 F: drivers/mca/
4376 F: include/linux/mca* 4376 F: include/linux/mca*
4377 4377
4378 MODULE SUPPORT 4378 MODULE SUPPORT
4379 M: Rusty Russell <rusty@rustcorp.com.au> 4379 M: Rusty Russell <rusty@rustcorp.com.au>
4380 S: Maintained 4380 S: Maintained
4381 F: include/linux/module.h 4381 F: include/linux/module.h
4382 F: kernel/module.c 4382 F: kernel/module.c
4383 4383
4384 MOTION EYE VAIO PICTUREBOOK CAMERA DRIVER 4384 MOTION EYE VAIO PICTUREBOOK CAMERA DRIVER
4385 W: http://popies.net/meye/ 4385 W: http://popies.net/meye/
4386 S: Orphan 4386 S: Orphan
4387 F: Documentation/video4linux/meye.txt 4387 F: Documentation/video4linux/meye.txt
4388 F: drivers/media/video/meye.* 4388 F: drivers/media/video/meye.*
4389 F: include/linux/meye.h 4389 F: include/linux/meye.h
4390 4390
4391 MOTOROLA IMX MMC/SD HOST CONTROLLER INTERFACE DRIVER 4391 MOTOROLA IMX MMC/SD HOST CONTROLLER INTERFACE DRIVER
4392 M: Pavel Pisa <ppisa@pikron.com> 4392 M: Pavel Pisa <ppisa@pikron.com>
4393 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 4393 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
4394 S: Maintained 4394 S: Maintained
4395 F: drivers/mmc/host/imxmmc.* 4395 F: drivers/mmc/host/imxmmc.*
4396 4396
4397 MOUSE AND MISC DEVICES [GENERAL] 4397 MOUSE AND MISC DEVICES [GENERAL]
4398 M: Alessandro Rubini <rubini@ipvvis.unipv.it> 4398 M: Alessandro Rubini <rubini@ipvvis.unipv.it>
4399 S: Maintained 4399 S: Maintained
4400 F: drivers/input/mouse/ 4400 F: drivers/input/mouse/
4401 F: include/linux/gpio_mouse.h 4401 F: include/linux/gpio_mouse.h
4402 4402
4403 MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD 4403 MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD
4404 M: Jiri Slaby <jirislaby@gmail.com> 4404 M: Jiri Slaby <jirislaby@gmail.com>
4405 S: Maintained 4405 S: Maintained
4406 F: Documentation/serial/moxa-smartio 4406 F: Documentation/serial/moxa-smartio
4407 F: drivers/tty/mxser.* 4407 F: drivers/tty/mxser.*
4408 4408
4409 MSI LAPTOP SUPPORT 4409 MSI LAPTOP SUPPORT
4410 M: "Lee, Chun-Yi" <jlee@novell.com> 4410 M: "Lee, Chun-Yi" <jlee@novell.com>
4411 L: platform-driver-x86@vger.kernel.org 4411 L: platform-driver-x86@vger.kernel.org
4412 S: Maintained 4412 S: Maintained
4413 F: drivers/platform/x86/msi-laptop.c 4413 F: drivers/platform/x86/msi-laptop.c
4414 4414
4415 MSI WMI SUPPORT 4415 MSI WMI SUPPORT
4416 M: Anisse Astier <anisse@astier.eu> 4416 M: Anisse Astier <anisse@astier.eu>
4417 L: platform-driver-x86@vger.kernel.org 4417 L: platform-driver-x86@vger.kernel.org
4418 S: Supported 4418 S: Supported
4419 F: drivers/platform/x86/msi-wmi.c 4419 F: drivers/platform/x86/msi-wmi.c
4420 4420
4421 MULTIFUNCTION DEVICES (MFD) 4421 MULTIFUNCTION DEVICES (MFD)
4422 M: Samuel Ortiz <sameo@linux.intel.com> 4422 M: Samuel Ortiz <sameo@linux.intel.com>
4423 T: git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6.git 4423 T: git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6.git
4424 S: Supported 4424 S: Supported
4425 F: drivers/mfd/ 4425 F: drivers/mfd/
4426 4426
4427 MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM 4427 MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM
4428 M: Chris Ball <cjb@laptop.org> 4428 M: Chris Ball <cjb@laptop.org>
4429 L: linux-mmc@vger.kernel.org 4429 L: linux-mmc@vger.kernel.org
4430 T: git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git 4430 T: git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git
4431 S: Maintained 4431 S: Maintained
4432 F: drivers/mmc/ 4432 F: drivers/mmc/
4433 F: include/linux/mmc/ 4433 F: include/linux/mmc/
4434 4434
4435 MULTIMEDIA CARD (MMC) ETC. OVER SPI 4435 MULTIMEDIA CARD (MMC) ETC. OVER SPI
4436 S: Orphan 4436 S: Orphan
4437 F: drivers/mmc/host/mmc_spi.c 4437 F: drivers/mmc/host/mmc_spi.c
4438 F: include/linux/spi/mmc_spi.h 4438 F: include/linux/spi/mmc_spi.h
4439 4439
4440 MULTISOUND SOUND DRIVER 4440 MULTISOUND SOUND DRIVER
4441 M: Andrew Veliath <andrewtv@usa.net> 4441 M: Andrew Veliath <andrewtv@usa.net>
4442 S: Maintained 4442 S: Maintained
4443 F: Documentation/sound/oss/MultiSound 4443 F: Documentation/sound/oss/MultiSound
4444 F: sound/oss/msnd* 4444 F: sound/oss/msnd*
4445 4445
4446 MULTITECH MULTIPORT CARD (ISICOM) 4446 MULTITECH MULTIPORT CARD (ISICOM)
4447 S: Orphan 4447 S: Orphan
4448 F: drivers/tty/isicom.c 4448 F: drivers/tty/isicom.c
4449 F: include/linux/isicom.h 4449 F: include/linux/isicom.h
4450 4450
4451 MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER 4451 MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER
4452 M: Felipe Balbi <balbi@ti.com> 4452 M: Felipe Balbi <balbi@ti.com>
4453 L: linux-usb@vger.kernel.org 4453 L: linux-usb@vger.kernel.org
4454 T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git 4454 T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git
4455 S: Maintained 4455 S: Maintained
4456 F: drivers/usb/musb/ 4456 F: drivers/usb/musb/
4457 4457
4458 MYRICOM MYRI-10G 10GbE DRIVER (MYRI10GE) 4458 MYRICOM MYRI-10G 10GbE DRIVER (MYRI10GE)
4459 M: Jon Mason <mason@myri.com> 4459 M: Jon Mason <mason@myri.com>
4460 M: Andrew Gallatin <gallatin@myri.com> 4460 M: Andrew Gallatin <gallatin@myri.com>
4461 L: netdev@vger.kernel.org 4461 L: netdev@vger.kernel.org
4462 W: http://www.myri.com/scs/download-Myri10GE.html 4462 W: http://www.myri.com/scs/download-Myri10GE.html
4463 S: Supported 4463 S: Supported
4464 F: drivers/net/ethernet/myricom/myri10ge/ 4464 F: drivers/net/ethernet/myricom/myri10ge/
4465 4465
4466 NATSEMI ETHERNET DRIVER (DP8381x) 4466 NATSEMI ETHERNET DRIVER (DP8381x)
4467 M: Tim Hockin <thockin@hockin.org> 4467 M: Tim Hockin <thockin@hockin.org>
4468 S: Maintained 4468 S: Maintained
4469 F: drivers/net/ethernet/natsemi/natsemi.c 4469 F: drivers/net/ethernet/natsemi/natsemi.c
4470 4470
4471 NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER 4471 NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER
4472 M: Daniel Mack <zonque@gmail.com> 4472 M: Daniel Mack <zonque@gmail.com>
4473 S: Maintained 4473 S: Maintained
4474 L: alsa-devel@alsa-project.org 4474 L: alsa-devel@alsa-project.org
4475 W: http://www.native-instruments.com 4475 W: http://www.native-instruments.com
4476 F: sound/usb/caiaq/ 4476 F: sound/usb/caiaq/
4477 4477
4478 NCP FILESYSTEM 4478 NCP FILESYSTEM
4479 M: Petr Vandrovec <petr@vandrovec.name> 4479 M: Petr Vandrovec <petr@vandrovec.name>
4480 S: Odd Fixes 4480 S: Odd Fixes
4481 F: fs/ncpfs/ 4481 F: fs/ncpfs/
4482 4482
4483 NCR DUAL 700 SCSI DRIVER (MICROCHANNEL) 4483 NCR DUAL 700 SCSI DRIVER (MICROCHANNEL)
4484 M: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com> 4484 M: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
4485 L: linux-scsi@vger.kernel.org 4485 L: linux-scsi@vger.kernel.org
4486 S: Maintained 4486 S: Maintained
4487 F: drivers/scsi/NCR_D700.* 4487 F: drivers/scsi/NCR_D700.*
4488 4488
4489 NETEFFECT IWARP RNIC DRIVER (IW_NES) 4489 NETEFFECT IWARP RNIC DRIVER (IW_NES)
4490 M: Faisal Latif <faisal.latif@intel.com> 4490 M: Faisal Latif <faisal.latif@intel.com>
4491 L: linux-rdma@vger.kernel.org 4491 L: linux-rdma@vger.kernel.org
4492 W: http://www.intel.com/Products/Server/Adapters/Server-Cluster/Server-Cluster-overview.htm 4492 W: http://www.intel.com/Products/Server/Adapters/Server-Cluster/Server-Cluster-overview.htm
4493 S: Supported 4493 S: Supported
4494 F: drivers/infiniband/hw/nes/ 4494 F: drivers/infiniband/hw/nes/
4495 4495
4496 NETEM NETWORK EMULATOR 4496 NETEM NETWORK EMULATOR
4497 M: Stephen Hemminger <shemminger@vyatta.com> 4497 M: Stephen Hemminger <shemminger@vyatta.com>
4498 L: netem@lists.linux-foundation.org 4498 L: netem@lists.linux-foundation.org
4499 S: Maintained 4499 S: Maintained
4500 F: net/sched/sch_netem.c 4500 F: net/sched/sch_netem.c
4501 4501
4502 NETERION 10GbE DRIVERS (s2io/vxge) 4502 NETERION 10GbE DRIVERS (s2io/vxge)
4503 M: Jon Mason <jdmason@kudzu.us> 4503 M: Jon Mason <jdmason@kudzu.us>
4504 L: netdev@vger.kernel.org 4504 L: netdev@vger.kernel.org
4505 W: http://trac.neterion.com/cgi-bin/trac.cgi/wiki/Linux?Anonymous 4505 W: http://trac.neterion.com/cgi-bin/trac.cgi/wiki/Linux?Anonymous
4506 W: http://trac.neterion.com/cgi-bin/trac.cgi/wiki/X3100Linux?Anonymous 4506 W: http://trac.neterion.com/cgi-bin/trac.cgi/wiki/X3100Linux?Anonymous
4507 S: Supported 4507 S: Supported
4508 F: Documentation/networking/s2io.txt 4508 F: Documentation/networking/s2io.txt
4509 F: Documentation/networking/vxge.txt 4509 F: Documentation/networking/vxge.txt
4510 F: drivers/net/ethernet/neterion/ 4510 F: drivers/net/ethernet/neterion/
4511 4511
4512 NETFILTER/IPTABLES/IPCHAINS 4512 NETFILTER/IPTABLES/IPCHAINS
4513 P: Harald Welte 4513 P: Harald Welte
4514 P: Jozsef Kadlecsik 4514 P: Jozsef Kadlecsik
4515 M: Pablo Neira Ayuso <pablo@netfilter.org> 4515 M: Pablo Neira Ayuso <pablo@netfilter.org>
4516 M: Patrick McHardy <kaber@trash.net> 4516 M: Patrick McHardy <kaber@trash.net>
4517 L: netfilter-devel@vger.kernel.org 4517 L: netfilter-devel@vger.kernel.org
4518 L: netfilter@vger.kernel.org 4518 L: netfilter@vger.kernel.org
4519 L: coreteam@netfilter.org 4519 L: coreteam@netfilter.org
4520 W: http://www.netfilter.org/ 4520 W: http://www.netfilter.org/
4521 W: http://www.iptables.org/ 4521 W: http://www.iptables.org/
4522 T: git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-2.6.git 4522 T: git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-2.6.git
4523 T: git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next-2.6.git 4523 T: git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next-2.6.git
4524 S: Supported 4524 S: Supported
4525 F: include/linux/netfilter* 4525 F: include/linux/netfilter*
4526 F: include/linux/netfilter/ 4526 F: include/linux/netfilter/
4527 F: include/net/netfilter/ 4527 F: include/net/netfilter/
4528 F: net/*/netfilter.c 4528 F: net/*/netfilter.c
4529 F: net/*/netfilter/ 4529 F: net/*/netfilter/
4530 F: net/netfilter/ 4530 F: net/netfilter/
4531 4531
4532 NETLABEL 4532 NETLABEL
4533 M: Paul Moore <paul@paul-moore.com> 4533 M: Paul Moore <paul@paul-moore.com>
4534 W: http://netlabel.sf.net 4534 W: http://netlabel.sf.net
4535 L: netdev@vger.kernel.org 4535 L: netdev@vger.kernel.org
4536 S: Maintained 4536 S: Maintained
4537 F: Documentation/netlabel/ 4537 F: Documentation/netlabel/
4538 F: include/net/netlabel.h 4538 F: include/net/netlabel.h
4539 F: net/netlabel/ 4539 F: net/netlabel/
4540 4540
4541 NETROM NETWORK LAYER 4541 NETROM NETWORK LAYER
4542 M: Ralf Baechle <ralf@linux-mips.org> 4542 M: Ralf Baechle <ralf@linux-mips.org>
4543 L: linux-hams@vger.kernel.org 4543 L: linux-hams@vger.kernel.org
4544 W: http://www.linux-ax25.org/ 4544 W: http://www.linux-ax25.org/
4545 S: Maintained 4545 S: Maintained
4546 F: include/linux/netrom.h 4546 F: include/linux/netrom.h
4547 F: include/net/netrom.h 4547 F: include/net/netrom.h
4548 F: net/netrom/ 4548 F: net/netrom/
4549 4549
4550 NETWORK BLOCK DEVICE (NBD) 4550 NETWORK BLOCK DEVICE (NBD)
4551 M: Paul Clements <Paul.Clements@steeleye.com> 4551 M: Paul Clements <Paul.Clements@steeleye.com>
4552 S: Maintained 4552 S: Maintained
4553 F: Documentation/blockdev/nbd.txt 4553 F: Documentation/blockdev/nbd.txt
4554 F: drivers/block/nbd.c 4554 F: drivers/block/nbd.c
4555 F: include/linux/nbd.h 4555 F: include/linux/nbd.h
4556 4556
4557 NETWORK DROP MONITOR 4557 NETWORK DROP MONITOR
4558 M: Neil Horman <nhorman@tuxdriver.com> 4558 M: Neil Horman <nhorman@tuxdriver.com>
4559 L: netdev@vger.kernel.org 4559 L: netdev@vger.kernel.org
4560 S: Maintained 4560 S: Maintained
4561 W: https://fedorahosted.org/dropwatch/ 4561 W: https://fedorahosted.org/dropwatch/
4562 F: net/core/drop_monitor.c 4562 F: net/core/drop_monitor.c
4563 4563
4564 NETWORKING [GENERAL] 4564 NETWORKING [GENERAL]
4565 M: "David S. Miller" <davem@davemloft.net> 4565 M: "David S. Miller" <davem@davemloft.net>
4566 L: netdev@vger.kernel.org 4566 L: netdev@vger.kernel.org
4567 W: http://www.linuxfoundation.org/en/Net 4567 W: http://www.linuxfoundation.org/en/Net
4568 W: http://patchwork.ozlabs.org/project/netdev/list/ 4568 W: http://patchwork.ozlabs.org/project/netdev/list/
4569 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git 4569 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
4570 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 4570 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
4571 S: Maintained 4571 S: Maintained
4572 F: net/ 4572 F: net/
4573 F: include/net/ 4573 F: include/net/
4574 F: include/linux/in.h 4574 F: include/linux/in.h
4575 F: include/linux/net.h 4575 F: include/linux/net.h
4576 F: include/linux/netdevice.h 4576 F: include/linux/netdevice.h
4577 4577
4578 NETWORKING [IPv4/IPv6] 4578 NETWORKING [IPv4/IPv6]
4579 M: "David S. Miller" <davem@davemloft.net> 4579 M: "David S. Miller" <davem@davemloft.net>
4580 M: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> 4580 M: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
4581 M: James Morris <jmorris@namei.org> 4581 M: James Morris <jmorris@namei.org>
4582 M: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org> 4582 M: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
4583 M: Patrick McHardy <kaber@trash.net> 4583 M: Patrick McHardy <kaber@trash.net>
4584 L: netdev@vger.kernel.org 4584 L: netdev@vger.kernel.org
4585 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git 4585 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git
4586 S: Maintained 4586 S: Maintained
4587 F: net/ipv4/ 4587 F: net/ipv4/
4588 F: net/ipv6/ 4588 F: net/ipv6/
4589 F: include/net/ip* 4589 F: include/net/ip*
4590 F: arch/x86/net/* 4590 F: arch/x86/net/*
4591 4591
4592 NETWORKING [LABELED] (NetLabel, CIPSO, Labeled IPsec, SECMARK) 4592 NETWORKING [LABELED] (NetLabel, CIPSO, Labeled IPsec, SECMARK)
4593 M: Paul Moore <paul@paul-moore.com> 4593 M: Paul Moore <paul@paul-moore.com>
4594 L: netdev@vger.kernel.org 4594 L: netdev@vger.kernel.org
4595 S: Maintained 4595 S: Maintained
4596 4596
4597 NETWORKING [WIRELESS] 4597 NETWORKING [WIRELESS]
4598 M: "John W. Linville" <linville@tuxdriver.com> 4598 M: "John W. Linville" <linville@tuxdriver.com>
4599 L: linux-wireless@vger.kernel.org 4599 L: linux-wireless@vger.kernel.org
4600 Q: http://patchwork.kernel.org/project/linux-wireless/list/ 4600 Q: http://patchwork.kernel.org/project/linux-wireless/list/
4601 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git 4601 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git
4602 S: Maintained 4602 S: Maintained
4603 F: net/mac80211/ 4603 F: net/mac80211/
4604 F: net/rfkill/ 4604 F: net/rfkill/
4605 F: net/wireless/ 4605 F: net/wireless/
4606 F: include/net/ieee80211* 4606 F: include/net/ieee80211*
4607 F: include/linux/wireless.h 4607 F: include/linux/wireless.h
4608 F: include/net/iw_handler.h 4608 F: include/net/iw_handler.h
4609 F: drivers/net/wireless/ 4609 F: drivers/net/wireless/
4610 4610
4611 NETWORKING DRIVERS 4611 NETWORKING DRIVERS
4612 L: netdev@vger.kernel.org 4612 L: netdev@vger.kernel.org
4613 W: http://www.linuxfoundation.org/en/Net 4613 W: http://www.linuxfoundation.org/en/Net
4614 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git 4614 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git
4615 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6.git 4615 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6.git
4616 S: Odd Fixes 4616 S: Odd Fixes
4617 F: drivers/net/ 4617 F: drivers/net/
4618 F: include/linux/if_* 4618 F: include/linux/if_*
4619 F: include/linux/*device.h 4619 F: include/linux/*device.h
4620 4620
4621 NETXEN (1/10) GbE SUPPORT 4621 NETXEN (1/10) GbE SUPPORT
4622 M: Sony Chacko <sony.chacko@qlogic.com> 4622 M: Sony Chacko <sony.chacko@qlogic.com>
4623 M: Rajesh Borundia <rajesh.borundia@qlogic.com> 4623 M: Rajesh Borundia <rajesh.borundia@qlogic.com>
4624 L: netdev@vger.kernel.org 4624 L: netdev@vger.kernel.org
4625 W: http://www.qlogic.com 4625 W: http://www.qlogic.com
4626 S: Supported 4626 S: Supported
4627 F: drivers/net/ethernet/qlogic/netxen/ 4627 F: drivers/net/ethernet/qlogic/netxen/
4628 4628
4629 NFC SUBSYSTEM 4629 NFC SUBSYSTEM
4630 M: Lauro Ramos Venancio <lauro.venancio@openbossa.org> 4630 M: Lauro Ramos Venancio <lauro.venancio@openbossa.org>
4631 M: Aloisio Almeida Jr <aloisio.almeida@openbossa.org> 4631 M: Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
4632 M: Samuel Ortiz <sameo@linux.intel.com> 4632 M: Samuel Ortiz <sameo@linux.intel.com>
4633 L: linux-wireless@vger.kernel.org 4633 L: linux-wireless@vger.kernel.org
4634 S: Maintained 4634 S: Maintained
4635 F: net/nfc/ 4635 F: net/nfc/
4636 F: include/linux/nfc.h 4636 F: include/linux/nfc.h
4637 F: include/net/nfc/ 4637 F: include/net/nfc/
4638 F: drivers/nfc/ 4638 F: drivers/nfc/
4639 4639
4640 NFS, SUNRPC, AND LOCKD CLIENTS 4640 NFS, SUNRPC, AND LOCKD CLIENTS
4641 M: Trond Myklebust <Trond.Myklebust@netapp.com> 4641 M: Trond Myklebust <Trond.Myklebust@netapp.com>
4642 L: linux-nfs@vger.kernel.org 4642 L: linux-nfs@vger.kernel.org
4643 W: http://client.linux-nfs.org 4643 W: http://client.linux-nfs.org
4644 T: git git://git.linux-nfs.org/pub/linux/nfs-2.6.git 4644 T: git git://git.linux-nfs.org/pub/linux/nfs-2.6.git
4645 S: Maintained 4645 S: Maintained
4646 F: fs/lockd/ 4646 F: fs/lockd/
4647 F: fs/nfs/ 4647 F: fs/nfs/
4648 F: fs/nfs_common/ 4648 F: fs/nfs_common/
4649 F: net/sunrpc/ 4649 F: net/sunrpc/
4650 F: include/linux/lockd/ 4650 F: include/linux/lockd/
4651 F: include/linux/nfs* 4651 F: include/linux/nfs*
4652 F: include/linux/sunrpc/ 4652 F: include/linux/sunrpc/
4653 4653
4654 NI5010 NETWORK DRIVER 4654 NI5010 NETWORK DRIVER
4655 M: Jan-Pascal van Best <janpascal@vanbest.org> 4655 M: Jan-Pascal van Best <janpascal@vanbest.org>
4656 M: Andreas Mohr <andi@lisas.de> 4656 M: Andreas Mohr <andi@lisas.de>
4657 L: netdev@vger.kernel.org 4657 L: netdev@vger.kernel.org
4658 S: Maintained 4658 S: Maintained
4659 F: drivers/net/ethernet/racal/ni5010.* 4659 F: drivers/net/ethernet/racal/ni5010.*
4660 4660
4661 NILFS2 FILESYSTEM 4661 NILFS2 FILESYSTEM
4662 M: KONISHI Ryusuke <konishi.ryusuke@lab.ntt.co.jp> 4662 M: KONISHI Ryusuke <konishi.ryusuke@lab.ntt.co.jp>
4663 L: linux-nilfs@vger.kernel.org 4663 L: linux-nilfs@vger.kernel.org
4664 W: http://www.nilfs.org/en/ 4664 W: http://www.nilfs.org/en/
4665 T: git git://git.kernel.org/pub/scm/linux/kernel/git/ryusuke/nilfs2.git 4665 T: git git://git.kernel.org/pub/scm/linux/kernel/git/ryusuke/nilfs2.git
4666 S: Supported 4666 S: Supported
4667 F: Documentation/filesystems/nilfs2.txt 4667 F: Documentation/filesystems/nilfs2.txt
4668 F: fs/nilfs2/ 4668 F: fs/nilfs2/
4669 F: include/linux/nilfs2_fs.h 4669 F: include/linux/nilfs2_fs.h
4670 4670
4671 NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER 4671 NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER
4672 M: YOKOTA Hiroshi <yokota@netlab.is.tsukuba.ac.jp> 4672 M: YOKOTA Hiroshi <yokota@netlab.is.tsukuba.ac.jp>
4673 W: http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/ninja/ 4673 W: http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/ninja/
4674 S: Maintained 4674 S: Maintained
4675 F: Documentation/scsi/NinjaSCSI.txt 4675 F: Documentation/scsi/NinjaSCSI.txt
4676 F: drivers/scsi/pcmcia/nsp_* 4676 F: drivers/scsi/pcmcia/nsp_*
4677 4677
4678 NINJA SCSI-32Bi/UDE PCI/CARDBUS SCSI HOST ADAPTER DRIVER 4678 NINJA SCSI-32Bi/UDE PCI/CARDBUS SCSI HOST ADAPTER DRIVER
4679 M: GOTO Masanori <gotom@debian.or.jp> 4679 M: GOTO Masanori <gotom@debian.or.jp>
4680 M: YOKOTA Hiroshi <yokota@netlab.is.tsukuba.ac.jp> 4680 M: YOKOTA Hiroshi <yokota@netlab.is.tsukuba.ac.jp>
4681 W: http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/ninja/ 4681 W: http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/ninja/
4682 S: Maintained 4682 S: Maintained
4683 F: Documentation/scsi/NinjaSCSI.txt 4683 F: Documentation/scsi/NinjaSCSI.txt
4684 F: drivers/scsi/nsp32* 4684 F: drivers/scsi/nsp32*
4685 4685
4686 NTFS FILESYSTEM 4686 NTFS FILESYSTEM
4687 M: Anton Altaparmakov <anton@tuxera.com> 4687 M: Anton Altaparmakov <anton@tuxera.com>
4688 L: linux-ntfs-dev@lists.sourceforge.net 4688 L: linux-ntfs-dev@lists.sourceforge.net
4689 W: http://www.tuxera.com/ 4689 W: http://www.tuxera.com/
4690 T: git git://git.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs-2.6.git 4690 T: git git://git.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs-2.6.git
4691 S: Supported 4691 S: Supported
4692 F: Documentation/filesystems/ntfs.txt 4692 F: Documentation/filesystems/ntfs.txt
4693 F: fs/ntfs/ 4693 F: fs/ntfs/
4694 4694
4695 NVIDIA (rivafb and nvidiafb) FRAMEBUFFER DRIVER 4695 NVIDIA (rivafb and nvidiafb) FRAMEBUFFER DRIVER
4696 M: Antonino Daplas <adaplas@gmail.com> 4696 M: Antonino Daplas <adaplas@gmail.com>
4697 L: linux-fbdev@vger.kernel.org 4697 L: linux-fbdev@vger.kernel.org
4698 S: Maintained 4698 S: Maintained
4699 F: drivers/video/riva/ 4699 F: drivers/video/riva/
4700 F: drivers/video/nvidia/ 4700 F: drivers/video/nvidia/
4701 4701
4702 OMAP SUPPORT 4702 OMAP SUPPORT
4703 M: Tony Lindgren <tony@atomide.com> 4703 M: Tony Lindgren <tony@atomide.com>
4704 L: linux-omap@vger.kernel.org 4704 L: linux-omap@vger.kernel.org
4705 W: http://www.muru.com/linux/omap/ 4705 W: http://www.muru.com/linux/omap/
4706 W: http://linux.omap.com/ 4706 W: http://linux.omap.com/
4707 Q: http://patchwork.kernel.org/project/linux-omap/list/ 4707 Q: http://patchwork.kernel.org/project/linux-omap/list/
4708 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git 4708 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git
4709 S: Maintained 4709 S: Maintained
4710 F: arch/arm/*omap*/ 4710 F: arch/arm/*omap*/
4711 F: drivers/i2c/busses/i2c-omap.c 4711 F: drivers/i2c/busses/i2c-omap.c
4712 F: include/linux/i2c-omap.h 4712 F: include/linux/i2c-omap.h
4713 4713
4714 OMAP CLOCK FRAMEWORK SUPPORT 4714 OMAP CLOCK FRAMEWORK SUPPORT
4715 M: Paul Walmsley <paul@pwsan.com> 4715 M: Paul Walmsley <paul@pwsan.com>
4716 L: linux-omap@vger.kernel.org 4716 L: linux-omap@vger.kernel.org
4717 S: Maintained 4717 S: Maintained
4718 F: arch/arm/*omap*/*clock* 4718 F: arch/arm/*omap*/*clock*
4719 4719
4720 OMAP POWER MANAGEMENT SUPPORT 4720 OMAP POWER MANAGEMENT SUPPORT
4721 M: Kevin Hilman <khilman@ti.com> 4721 M: Kevin Hilman <khilman@ti.com>
4722 L: linux-omap@vger.kernel.org 4722 L: linux-omap@vger.kernel.org
4723 S: Maintained 4723 S: Maintained
4724 F: arch/arm/*omap*/*pm* 4724 F: arch/arm/*omap*/*pm*
4725 4725
4726 OMAP POWERDOMAIN/CLOCKDOMAIN SOC ADAPTATION LAYER SUPPORT 4726 OMAP POWERDOMAIN/CLOCKDOMAIN SOC ADAPTATION LAYER SUPPORT
4727 M: Rajendra Nayak <rnayak@ti.com> 4727 M: Rajendra Nayak <rnayak@ti.com>
4728 M: Paul Walmsley <paul@pwsan.com> 4728 M: Paul Walmsley <paul@pwsan.com>
4729 L: linux-omap@vger.kernel.org 4729 L: linux-omap@vger.kernel.org
4730 S: Maintained 4730 S: Maintained
4731 F: arch/arm/mach-omap2/powerdomain2xxx_3xxx.c 4731 F: arch/arm/mach-omap2/powerdomain2xxx_3xxx.c
4732 F: arch/arm/mach-omap2/powerdomain44xx.c 4732 F: arch/arm/mach-omap2/powerdomain44xx.c
4733 F: arch/arm/mach-omap2/clockdomain2xxx_3xxx.c 4733 F: arch/arm/mach-omap2/clockdomain2xxx_3xxx.c
4734 F: arch/arm/mach-omap2/clockdomain44xx.c 4734 F: arch/arm/mach-omap2/clockdomain44xx.c
4735 4735
4736 OMAP AUDIO SUPPORT 4736 OMAP AUDIO SUPPORT
4737 M: Jarkko Nikula <jarkko.nikula@bitmer.com> 4737 M: Jarkko Nikula <jarkko.nikula@bitmer.com>
4738 L: alsa-devel@alsa-project.org (subscribers-only) 4738 L: alsa-devel@alsa-project.org (subscribers-only)
4739 L: linux-omap@vger.kernel.org 4739 L: linux-omap@vger.kernel.org
4740 S: Maintained 4740 S: Maintained
4741 F: sound/soc/omap/ 4741 F: sound/soc/omap/
4742 4742
4743 OMAP FRAMEBUFFER SUPPORT 4743 OMAP FRAMEBUFFER SUPPORT
4744 M: Tomi Valkeinen <tomi.valkeinen@ti.com> 4744 M: Tomi Valkeinen <tomi.valkeinen@ti.com>
4745 L: linux-fbdev@vger.kernel.org 4745 L: linux-fbdev@vger.kernel.org
4746 L: linux-omap@vger.kernel.org 4746 L: linux-omap@vger.kernel.org
4747 S: Maintained 4747 S: Maintained
4748 F: drivers/video/omap/ 4748 F: drivers/video/omap/
4749 4749
4750 OMAP DISPLAY SUBSYSTEM and FRAMEBUFFER SUPPORT (DSS2) 4750 OMAP DISPLAY SUBSYSTEM and FRAMEBUFFER SUPPORT (DSS2)
4751 M: Tomi Valkeinen <tomi.valkeinen@ti.com> 4751 M: Tomi Valkeinen <tomi.valkeinen@ti.com>
4752 L: linux-omap@vger.kernel.org 4752 L: linux-omap@vger.kernel.org
4753 L: linux-fbdev@vger.kernel.org 4753 L: linux-fbdev@vger.kernel.org
4754 S: Maintained 4754 S: Maintained
4755 F: drivers/video/omap2/ 4755 F: drivers/video/omap2/
4756 F: Documentation/arm/OMAP/DSS 4756 F: Documentation/arm/OMAP/DSS
4757 4757
4758 OMAP HARDWARE SPINLOCK SUPPORT 4758 OMAP HARDWARE SPINLOCK SUPPORT
4759 M: Ohad Ben-Cohen <ohad@wizery.com> 4759 M: Ohad Ben-Cohen <ohad@wizery.com>
4760 L: linux-omap@vger.kernel.org 4760 L: linux-omap@vger.kernel.org
4761 S: Maintained 4761 S: Maintained
4762 F: drivers/hwspinlock/omap_hwspinlock.c 4762 F: drivers/hwspinlock/omap_hwspinlock.c
4763 F: arch/arm/mach-omap2/hwspinlock.c 4763 F: arch/arm/mach-omap2/hwspinlock.c
4764 4764
4765 OMAP MMC SUPPORT 4765 OMAP MMC SUPPORT
4766 M: Jarkko Lavinen <jarkko.lavinen@nokia.com> 4766 M: Jarkko Lavinen <jarkko.lavinen@nokia.com>
4767 L: linux-omap@vger.kernel.org 4767 L: linux-omap@vger.kernel.org
4768 S: Maintained 4768 S: Maintained
4769 F: drivers/mmc/host/omap.c 4769 F: drivers/mmc/host/omap.c
4770 4770
4771 OMAP HS MMC SUPPORT 4771 OMAP HS MMC SUPPORT
4772 L: linux-omap@vger.kernel.org 4772 L: linux-omap@vger.kernel.org
4773 S: Orphan 4773 S: Orphan
4774 F: drivers/mmc/host/omap_hsmmc.c 4774 F: drivers/mmc/host/omap_hsmmc.c
4775 4775
4776 OMAP RANDOM NUMBER GENERATOR SUPPORT 4776 OMAP RANDOM NUMBER GENERATOR SUPPORT
4777 M: Deepak Saxena <dsaxena@plexity.net> 4777 M: Deepak Saxena <dsaxena@plexity.net>
4778 S: Maintained 4778 S: Maintained
4779 F: drivers/char/hw_random/omap-rng.c 4779 F: drivers/char/hw_random/omap-rng.c
4780 4780
4781 OMAP HWMOD SUPPORT 4781 OMAP HWMOD SUPPORT
4782 M: Benoรฎt Cousson <b-cousson@ti.com> 4782 M: Benoรฎt Cousson <b-cousson@ti.com>
4783 M: Paul Walmsley <paul@pwsan.com> 4783 M: Paul Walmsley <paul@pwsan.com>
4784 L: linux-omap@vger.kernel.org 4784 L: linux-omap@vger.kernel.org
4785 S: Maintained 4785 S: Maintained
4786 F: arch/arm/mach-omap2/omap_hwmod.c 4786 F: arch/arm/mach-omap2/omap_hwmod.c
4787 F: arch/arm/plat-omap/include/plat/omap_hwmod.h 4787 F: arch/arm/plat-omap/include/plat/omap_hwmod.h
4788 4788
4789 OMAP HWMOD DATA FOR OMAP4-BASED DEVICES 4789 OMAP HWMOD DATA FOR OMAP4-BASED DEVICES
4790 M: Benoรฎt Cousson <b-cousson@ti.com> 4790 M: Benoรฎt Cousson <b-cousson@ti.com>
4791 L: linux-omap@vger.kernel.org 4791 L: linux-omap@vger.kernel.org
4792 S: Maintained 4792 S: Maintained
4793 F: arch/arm/mach-omap2/omap_hwmod_44xx_data.c 4793 F: arch/arm/mach-omap2/omap_hwmod_44xx_data.c
4794 4794
4795 OMAP IMAGE SIGNAL PROCESSOR (ISP) 4795 OMAP IMAGE SIGNAL PROCESSOR (ISP)
4796 M: Laurent Pinchart <laurent.pinchart@ideasonboard.com> 4796 M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
4797 L: linux-media@vger.kernel.org 4797 L: linux-media@vger.kernel.org
4798 S: Maintained 4798 S: Maintained
4799 F: drivers/media/video/omap3isp/* 4799 F: drivers/media/video/omap3isp/*
4800 4800
4801 OMAP USB SUPPORT 4801 OMAP USB SUPPORT
4802 M: Felipe Balbi <balbi@ti.com> 4802 M: Felipe Balbi <balbi@ti.com>
4803 L: linux-usb@vger.kernel.org 4803 L: linux-usb@vger.kernel.org
4804 L: linux-omap@vger.kernel.org 4804 L: linux-omap@vger.kernel.org
4805 T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git 4805 T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git
4806 S: Maintained 4806 S: Maintained
4807 F: drivers/usb/*/*omap* 4807 F: drivers/usb/*/*omap*
4808 F: arch/arm/*omap*/usb* 4808 F: arch/arm/*omap*/usb*
4809 4809
4810 OMFS FILESYSTEM 4810 OMFS FILESYSTEM
4811 M: Bob Copeland <me@bobcopeland.com> 4811 M: Bob Copeland <me@bobcopeland.com>
4812 L: linux-karma-devel@lists.sourceforge.net 4812 L: linux-karma-devel@lists.sourceforge.net
4813 S: Maintained 4813 S: Maintained
4814 F: Documentation/filesystems/omfs.txt 4814 F: Documentation/filesystems/omfs.txt
4815 F: fs/omfs/ 4815 F: fs/omfs/
4816 4816
4817 OMNIKEY CARDMAN 4000 DRIVER 4817 OMNIKEY CARDMAN 4000 DRIVER
4818 M: Harald Welte <laforge@gnumonks.org> 4818 M: Harald Welte <laforge@gnumonks.org>
4819 S: Maintained 4819 S: Maintained
4820 F: drivers/char/pcmcia/cm4000_cs.c 4820 F: drivers/char/pcmcia/cm4000_cs.c
4821 F: include/linux/cm4000_cs.h 4821 F: include/linux/cm4000_cs.h
4822 4822
4823 OMNIKEY CARDMAN 4040 DRIVER 4823 OMNIKEY CARDMAN 4040 DRIVER
4824 M: Harald Welte <laforge@gnumonks.org> 4824 M: Harald Welte <laforge@gnumonks.org>
4825 S: Maintained 4825 S: Maintained
4826 F: drivers/char/pcmcia/cm4040_cs.* 4826 F: drivers/char/pcmcia/cm4040_cs.*
4827 4827
4828 OMNIVISION OV7670 SENSOR DRIVER 4828 OMNIVISION OV7670 SENSOR DRIVER
4829 M: Jonathan Corbet <corbet@lwn.net> 4829 M: Jonathan Corbet <corbet@lwn.net>
4830 L: linux-media@vger.kernel.org 4830 L: linux-media@vger.kernel.org
4831 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 4831 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
4832 S: Maintained 4832 S: Maintained
4833 F: drivers/media/video/ov7670.c 4833 F: drivers/media/video/ov7670.c
4834 4834
4835 ONENAND FLASH DRIVER 4835 ONENAND FLASH DRIVER
4836 M: Kyungmin Park <kyungmin.park@samsung.com> 4836 M: Kyungmin Park <kyungmin.park@samsung.com>
4837 L: linux-mtd@lists.infradead.org 4837 L: linux-mtd@lists.infradead.org
4838 S: Maintained 4838 S: Maintained
4839 F: drivers/mtd/onenand/ 4839 F: drivers/mtd/onenand/
4840 F: include/linux/mtd/onenand*.h 4840 F: include/linux/mtd/onenand*.h
4841 4841
4842 ONSTREAM SCSI TAPE DRIVER 4842 ONSTREAM SCSI TAPE DRIVER
4843 M: Willem Riede <osst@riede.org> 4843 M: Willem Riede <osst@riede.org>
4844 L: osst-users@lists.sourceforge.net 4844 L: osst-users@lists.sourceforge.net
4845 L: linux-scsi@vger.kernel.org 4845 L: linux-scsi@vger.kernel.org
4846 S: Maintained 4846 S: Maintained
4847 F: drivers/scsi/osst* 4847 F: drivers/scsi/osst*
4848 F: drivers/scsi/st* 4848 F: drivers/scsi/st*
4849 4849
4850 OPENCORES I2C BUS DRIVER 4850 OPENCORES I2C BUS DRIVER
4851 M: Peter Korsgaard <jacmet@sunsite.dk> 4851 M: Peter Korsgaard <jacmet@sunsite.dk>
4852 L: linux-i2c@vger.kernel.org 4852 L: linux-i2c@vger.kernel.org
4853 S: Maintained 4853 S: Maintained
4854 F: Documentation/i2c/busses/i2c-ocores 4854 F: Documentation/i2c/busses/i2c-ocores
4855 F: drivers/i2c/busses/i2c-ocores.c 4855 F: drivers/i2c/busses/i2c-ocores.c
4856 4856
4857 OPEN FIRMWARE AND FLATTENED DEVICE TREE 4857 OPEN FIRMWARE AND FLATTENED DEVICE TREE
4858 M: Grant Likely <grant.likely@secretlab.ca> 4858 M: Grant Likely <grant.likely@secretlab.ca>
4859 M: Rob Herring <rob.herring@calxeda.com> 4859 M: Rob Herring <rob.herring@calxeda.com>
4860 L: devicetree-discuss@lists.ozlabs.org (moderated for non-subscribers) 4860 L: devicetree-discuss@lists.ozlabs.org (moderated for non-subscribers)
4861 W: http://fdt.secretlab.ca 4861 W: http://fdt.secretlab.ca
4862 T: git git://git.secretlab.ca/git/linux-2.6.git 4862 T: git git://git.secretlab.ca/git/linux-2.6.git
4863 S: Maintained 4863 S: Maintained
4864 F: Documentation/devicetree 4864 F: Documentation/devicetree
4865 F: drivers/of 4865 F: drivers/of
4866 F: include/linux/of*.h 4866 F: include/linux/of*.h
4867 K: of_get_property 4867 K: of_get_property
4868 K: of_match_table 4868 K: of_match_table
4869 4869
4870 OPENRISC ARCHITECTURE 4870 OPENRISC ARCHITECTURE
4871 M: Jonas Bonn <jonas@southpole.se> 4871 M: Jonas Bonn <jonas@southpole.se>
4872 W: http://openrisc.net 4872 W: http://openrisc.net
4873 L: linux@lists.openrisc.net (moderated for non-subscribers) 4873 L: linux@lists.openrisc.net (moderated for non-subscribers)
4874 S: Maintained 4874 S: Maintained
4875 T: git git://openrisc.net/~jonas/linux 4875 T: git git://openrisc.net/~jonas/linux
4876 F: arch/openrisc 4876 F: arch/openrisc
4877 4877
4878 OPENVSWITCH 4878 OPENVSWITCH
4879 M: Jesse Gross <jesse@nicira.com> 4879 M: Jesse Gross <jesse@nicira.com>
4880 L: dev@openvswitch.org 4880 L: dev@openvswitch.org
4881 W: http://openvswitch.org 4881 W: http://openvswitch.org
4882 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jesse/openvswitch.git 4882 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jesse/openvswitch.git
4883 S: Maintained 4883 S: Maintained
4884 F: net/openvswitch/ 4884 F: net/openvswitch/
4885 4885
4886 OPL4 DRIVER 4886 OPL4 DRIVER
4887 M: Clemens Ladisch <clemens@ladisch.de> 4887 M: Clemens Ladisch <clemens@ladisch.de>
4888 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 4888 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
4889 T: git git://git.alsa-project.org/alsa-kernel.git 4889 T: git git://git.alsa-project.org/alsa-kernel.git
4890 S: Maintained 4890 S: Maintained
4891 F: sound/drivers/opl4/ 4891 F: sound/drivers/opl4/
4892 4892
4893 OPROFILE 4893 OPROFILE
4894 M: Robert Richter <robert.richter@amd.com> 4894 M: Robert Richter <robert.richter@amd.com>
4895 L: oprofile-list@lists.sf.net 4895 L: oprofile-list@lists.sf.net
4896 S: Maintained 4896 S: Maintained
4897 F: arch/*/include/asm/oprofile*.h 4897 F: arch/*/include/asm/oprofile*.h
4898 F: arch/*/oprofile/ 4898 F: arch/*/oprofile/
4899 F: drivers/oprofile/ 4899 F: drivers/oprofile/
4900 F: include/linux/oprofile.h 4900 F: include/linux/oprofile.h
4901 4901
4902 ORACLE CLUSTER FILESYSTEM 2 (OCFS2) 4902 ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
4903 M: Mark Fasheh <mfasheh@suse.com> 4903 M: Mark Fasheh <mfasheh@suse.com>
4904 M: Joel Becker <jlbec@evilplan.org> 4904 M: Joel Becker <jlbec@evilplan.org>
4905 L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers) 4905 L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
4906 W: http://oss.oracle.com/projects/ocfs2/ 4906 W: http://oss.oracle.com/projects/ocfs2/
4907 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2.git 4907 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2.git
4908 S: Supported 4908 S: Supported
4909 F: Documentation/filesystems/ocfs2.txt 4909 F: Documentation/filesystems/ocfs2.txt
4910 F: Documentation/filesystems/dlmfs.txt 4910 F: Documentation/filesystems/dlmfs.txt
4911 F: fs/ocfs2/ 4911 F: fs/ocfs2/
4912 4912
4913 ORINOCO DRIVER 4913 ORINOCO DRIVER
4914 L: linux-wireless@vger.kernel.org 4914 L: linux-wireless@vger.kernel.org
4915 L: orinoco-users@lists.sourceforge.net 4915 L: orinoco-users@lists.sourceforge.net
4916 L: orinoco-devel@lists.sourceforge.net 4916 L: orinoco-devel@lists.sourceforge.net
4917 W: http://linuxwireless.org/en/users/Drivers/orinoco 4917 W: http://linuxwireless.org/en/users/Drivers/orinoco
4918 W: http://www.nongnu.org/orinoco/ 4918 W: http://www.nongnu.org/orinoco/
4919 S: Orphan 4919 S: Orphan
4920 F: drivers/net/wireless/orinoco/ 4920 F: drivers/net/wireless/orinoco/
4921 4921
4922 OSD LIBRARY and FILESYSTEM 4922 OSD LIBRARY and FILESYSTEM
4923 M: Boaz Harrosh <bharrosh@panasas.com> 4923 M: Boaz Harrosh <bharrosh@panasas.com>
4924 M: Benny Halevy <bhalevy@tonian.com> 4924 M: Benny Halevy <bhalevy@tonian.com>
4925 L: osd-dev@open-osd.org 4925 L: osd-dev@open-osd.org
4926 W: http://open-osd.org 4926 W: http://open-osd.org
4927 T: git git://git.open-osd.org/open-osd.git 4927 T: git git://git.open-osd.org/open-osd.git
4928 S: Maintained 4928 S: Maintained
4929 F: drivers/scsi/osd/ 4929 F: drivers/scsi/osd/
4930 F: include/scsi/osd_* 4930 F: include/scsi/osd_*
4931 F: fs/exofs/ 4931 F: fs/exofs/
4932 4932
4933 P54 WIRELESS DRIVER 4933 P54 WIRELESS DRIVER
4934 M: Christian Lamparter <chunkeey@googlemail.com> 4934 M: Christian Lamparter <chunkeey@googlemail.com>
4935 L: linux-wireless@vger.kernel.org 4935 L: linux-wireless@vger.kernel.org
4936 W: http://wireless.kernel.org/en/users/Drivers/p54 4936 W: http://wireless.kernel.org/en/users/Drivers/p54
4937 S: Maintained 4937 S: Maintained
4938 F: drivers/net/wireless/p54/ 4938 F: drivers/net/wireless/p54/
4939 4939
4940 PA SEMI ETHERNET DRIVER 4940 PA SEMI ETHERNET DRIVER
4941 M: Olof Johansson <olof@lixom.net> 4941 M: Olof Johansson <olof@lixom.net>
4942 L: netdev@vger.kernel.org 4942 L: netdev@vger.kernel.org
4943 S: Maintained 4943 S: Maintained
4944 F: drivers/net/ethernet/pasemi/* 4944 F: drivers/net/ethernet/pasemi/*
4945 4945
4946 PA SEMI SMBUS DRIVER 4946 PA SEMI SMBUS DRIVER
4947 M: Olof Johansson <olof@lixom.net> 4947 M: Olof Johansson <olof@lixom.net>
4948 L: linux-i2c@vger.kernel.org 4948 L: linux-i2c@vger.kernel.org
4949 S: Maintained 4949 S: Maintained
4950 F: drivers/i2c/busses/i2c-pasemi.c 4950 F: drivers/i2c/busses/i2c-pasemi.c
4951 4951
4952 PADATA PARALLEL EXECUTION MECHANISM 4952 PADATA PARALLEL EXECUTION MECHANISM
4953 M: Steffen Klassert <steffen.klassert@secunet.com> 4953 M: Steffen Klassert <steffen.klassert@secunet.com>
4954 L: linux-crypto@vger.kernel.org 4954 L: linux-crypto@vger.kernel.org
4955 S: Maintained 4955 S: Maintained
4956 F: kernel/padata.c 4956 F: kernel/padata.c
4957 F: include/linux/padata.h 4957 F: include/linux/padata.h
4958 F: Documentation/padata.txt 4958 F: Documentation/padata.txt
4959 4959
4960 PANASONIC LAPTOP ACPI EXTRAS DRIVER 4960 PANASONIC LAPTOP ACPI EXTRAS DRIVER
4961 M: Harald Welte <laforge@gnumonks.org> 4961 M: Harald Welte <laforge@gnumonks.org>
4962 L: platform-driver-x86@vger.kernel.org 4962 L: platform-driver-x86@vger.kernel.org
4963 S: Maintained 4963 S: Maintained
4964 F: drivers/platform/x86/panasonic-laptop.c 4964 F: drivers/platform/x86/panasonic-laptop.c
4965 4965
4966 PANASONIC MN10300/AM33/AM34 PORT 4966 PANASONIC MN10300/AM33/AM34 PORT
4967 M: David Howells <dhowells@redhat.com> 4967 M: David Howells <dhowells@redhat.com>
4968 M: Koichi Yasutake <yasutake.koichi@jp.panasonic.com> 4968 M: Koichi Yasutake <yasutake.koichi@jp.panasonic.com>
4969 L: linux-am33-list@redhat.com (moderated for non-subscribers) 4969 L: linux-am33-list@redhat.com (moderated for non-subscribers)
4970 W: ftp://ftp.redhat.com/pub/redhat/gnupro/AM33/ 4970 W: ftp://ftp.redhat.com/pub/redhat/gnupro/AM33/
4971 S: Maintained 4971 S: Maintained
4972 F: Documentation/mn10300/ 4972 F: Documentation/mn10300/
4973 F: arch/mn10300/ 4973 F: arch/mn10300/
4974 4974
4975 PARALLEL PORT SUPPORT 4975 PARALLEL PORT SUPPORT
4976 L: linux-parport@lists.infradead.org (subscribers-only) 4976 L: linux-parport@lists.infradead.org (subscribers-only)
4977 S: Orphan 4977 S: Orphan
4978 F: drivers/parport/ 4978 F: drivers/parport/
4979 F: include/linux/parport*.h 4979 F: include/linux/parport*.h
4980 F: drivers/char/ppdev.c 4980 F: drivers/char/ppdev.c
4981 F: include/linux/ppdev.h 4981 F: include/linux/ppdev.h
4982 4982
4983 PARAVIRT_OPS INTERFACE 4983 PARAVIRT_OPS INTERFACE
4984 M: Jeremy Fitzhardinge <jeremy@goop.org> 4984 M: Jeremy Fitzhardinge <jeremy@goop.org>
4985 M: Chris Wright <chrisw@sous-sol.org> 4985 M: Chris Wright <chrisw@sous-sol.org>
4986 M: Alok Kataria <akataria@vmware.com> 4986 M: Alok Kataria <akataria@vmware.com>
4987 M: Rusty Russell <rusty@rustcorp.com.au> 4987 M: Rusty Russell <rusty@rustcorp.com.au>
4988 L: virtualization@lists.linux-foundation.org 4988 L: virtualization@lists.linux-foundation.org
4989 S: Supported 4989 S: Supported
4990 F: Documentation/ia64/paravirt_ops.txt 4990 F: Documentation/ia64/paravirt_ops.txt
4991 F: arch/*/kernel/paravirt* 4991 F: arch/*/kernel/paravirt*
4992 F: arch/*/include/asm/paravirt.h 4992 F: arch/*/include/asm/paravirt.h
4993 4993
4994 PARIDE DRIVERS FOR PARALLEL PORT IDE DEVICES 4994 PARIDE DRIVERS FOR PARALLEL PORT IDE DEVICES
4995 M: Tim Waugh <tim@cyberelk.net> 4995 M: Tim Waugh <tim@cyberelk.net>
4996 L: linux-parport@lists.infradead.org (subscribers-only) 4996 L: linux-parport@lists.infradead.org (subscribers-only)
4997 W: http://www.torque.net/linux-pp.html 4997 W: http://www.torque.net/linux-pp.html
4998 S: Maintained 4998 S: Maintained
4999 F: Documentation/blockdev/paride.txt 4999 F: Documentation/blockdev/paride.txt
5000 F: drivers/block/paride/ 5000 F: drivers/block/paride/
5001 5001
5002 PARISC ARCHITECTURE 5002 PARISC ARCHITECTURE
5003 M: Kyle McMartin <kyle@mcmartin.ca> 5003 M: Kyle McMartin <kyle@mcmartin.ca>
5004 M: Helge Deller <deller@gmx.de> 5004 M: Helge Deller <deller@gmx.de>
5005 M: "James E.J. Bottomley" <jejb@parisc-linux.org> 5005 M: "James E.J. Bottomley" <jejb@parisc-linux.org>
5006 L: linux-parisc@vger.kernel.org 5006 L: linux-parisc@vger.kernel.org
5007 W: http://www.parisc-linux.org/ 5007 W: http://www.parisc-linux.org/
5008 Q: http://patchwork.kernel.org/project/linux-parisc/list/ 5008 Q: http://patchwork.kernel.org/project/linux-parisc/list/
5009 T: git git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6.git 5009 T: git git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6.git
5010 S: Maintained 5010 S: Maintained
5011 F: arch/parisc/ 5011 F: arch/parisc/
5012 F: drivers/parisc/ 5012 F: drivers/parisc/
5013 5013
5014 PC87360 HARDWARE MONITORING DRIVER 5014 PC87360 HARDWARE MONITORING DRIVER
5015 M: Jim Cromie <jim.cromie@gmail.com> 5015 M: Jim Cromie <jim.cromie@gmail.com>
5016 L: lm-sensors@lm-sensors.org 5016 L: lm-sensors@lm-sensors.org
5017 S: Maintained 5017 S: Maintained
5018 F: Documentation/hwmon/pc87360 5018 F: Documentation/hwmon/pc87360
5019 F: drivers/hwmon/pc87360.c 5019 F: drivers/hwmon/pc87360.c
5020 5020
5021 PC8736x GPIO DRIVER 5021 PC8736x GPIO DRIVER
5022 M: Jim Cromie <jim.cromie@gmail.com> 5022 M: Jim Cromie <jim.cromie@gmail.com>
5023 S: Maintained 5023 S: Maintained
5024 F: drivers/char/pc8736x_gpio.c 5024 F: drivers/char/pc8736x_gpio.c
5025 5025
5026 PC87427 HARDWARE MONITORING DRIVER 5026 PC87427 HARDWARE MONITORING DRIVER
5027 M: Jean Delvare <khali@linux-fr.org> 5027 M: Jean Delvare <khali@linux-fr.org>
5028 L: lm-sensors@lm-sensors.org 5028 L: lm-sensors@lm-sensors.org
5029 S: Maintained 5029 S: Maintained
5030 F: Documentation/hwmon/pc87427 5030 F: Documentation/hwmon/pc87427
5031 F: drivers/hwmon/pc87427.c 5031 F: drivers/hwmon/pc87427.c
5032 5032
5033 PCA9532 LED DRIVER 5033 PCA9532 LED DRIVER
5034 M: Riku Voipio <riku.voipio@iki.fi> 5034 M: Riku Voipio <riku.voipio@iki.fi>
5035 S: Maintained 5035 S: Maintained
5036 F: drivers/leds/leds-pca9532.c 5036 F: drivers/leds/leds-pca9532.c
5037 F: include/linux/leds-pca9532.h 5037 F: include/linux/leds-pca9532.h
5038 5038
5039 PCA9541 I2C BUS MASTER SELECTOR DRIVER 5039 PCA9541 I2C BUS MASTER SELECTOR DRIVER
5040 M: Guenter Roeck <guenter.roeck@ericsson.com> 5040 M: Guenter Roeck <guenter.roeck@ericsson.com>
5041 L: linux-i2c@vger.kernel.org 5041 L: linux-i2c@vger.kernel.org
5042 S: Maintained 5042 S: Maintained
5043 F: drivers/i2c/muxes/pca9541.c 5043 F: drivers/i2c/muxes/pca9541.c
5044 5044
5045 PCA9564/PCA9665 I2C BUS DRIVER 5045 PCA9564/PCA9665 I2C BUS DRIVER
5046 M: Wolfram Sang <w.sang@pengutronix.de> 5046 M: Wolfram Sang <w.sang@pengutronix.de>
5047 L: linux-i2c@vger.kernel.org 5047 L: linux-i2c@vger.kernel.org
5048 S: Maintained 5048 S: Maintained
5049 F: drivers/i2c/algos/i2c-algo-pca.c 5049 F: drivers/i2c/algos/i2c-algo-pca.c
5050 F: drivers/i2c/busses/i2c-pca-* 5050 F: drivers/i2c/busses/i2c-pca-*
5051 F: include/linux/i2c-algo-pca.h 5051 F: include/linux/i2c-algo-pca.h
5052 F: include/linux/i2c-pca-platform.h 5052 F: include/linux/i2c-pca-platform.h
5053 5053
5054 PCI ERROR RECOVERY 5054 PCI ERROR RECOVERY
5055 M: Linas Vepstas <linasvepstas@gmail.com> 5055 M: Linas Vepstas <linasvepstas@gmail.com>
5056 L: linux-pci@vger.kernel.org 5056 L: linux-pci@vger.kernel.org
5057 S: Supported 5057 S: Supported
5058 F: Documentation/PCI/pci-error-recovery.txt 5058 F: Documentation/PCI/pci-error-recovery.txt
5059 F: Documentation/powerpc/eeh-pci-error-recovery.txt 5059 F: Documentation/powerpc/eeh-pci-error-recovery.txt
5060 5060
5061 PCI SUBSYSTEM 5061 PCI SUBSYSTEM
5062 M: Jesse Barnes <jbarnes@virtuousgeek.org> 5062 M: Jesse Barnes <jbarnes@virtuousgeek.org>
5063 L: linux-pci@vger.kernel.org 5063 L: linux-pci@vger.kernel.org
5064 Q: http://patchwork.kernel.org/project/linux-pci/list/ 5064 Q: http://patchwork.kernel.org/project/linux-pci/list/
5065 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6.git 5065 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6.git
5066 S: Supported 5066 S: Supported
5067 F: Documentation/PCI/ 5067 F: Documentation/PCI/
5068 F: drivers/pci/ 5068 F: drivers/pci/
5069 F: include/linux/pci* 5069 F: include/linux/pci*
5070 5070
5071 PCI HOTPLUG 5071 PCI HOTPLUG
5072 M: Jesse Barnes <jbarnes@virtuousgeek.org> 5072 M: Jesse Barnes <jbarnes@virtuousgeek.org>
5073 L: linux-pci@vger.kernel.org 5073 L: linux-pci@vger.kernel.org
5074 S: Supported 5074 S: Supported
5075 F: drivers/pci/hotplug 5075 F: drivers/pci/hotplug
5076 5076
5077 PCMCIA SUBSYSTEM 5077 PCMCIA SUBSYSTEM
5078 P: Linux PCMCIA Team 5078 P: Linux PCMCIA Team
5079 L: linux-pcmcia@lists.infradead.org 5079 L: linux-pcmcia@lists.infradead.org
5080 W: http://lists.infradead.org/mailman/listinfo/linux-pcmcia 5080 W: http://lists.infradead.org/mailman/listinfo/linux-pcmcia
5081 T: git git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git 5081 T: git git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git
5082 S: Maintained 5082 S: Maintained
5083 F: Documentation/pcmcia/ 5083 F: Documentation/pcmcia/
5084 F: drivers/pcmcia/ 5084 F: drivers/pcmcia/
5085 F: include/pcmcia/ 5085 F: include/pcmcia/
5086 5086
5087 PCNET32 NETWORK DRIVER 5087 PCNET32 NETWORK DRIVER
5088 M: Don Fry <pcnet32@frontier.com> 5088 M: Don Fry <pcnet32@frontier.com>
5089 L: netdev@vger.kernel.org 5089 L: netdev@vger.kernel.org
5090 S: Maintained 5090 S: Maintained
5091 F: drivers/net/ethernet/amd/pcnet32.c 5091 F: drivers/net/ethernet/amd/pcnet32.c
5092 5092
5093 PCRYPT PARALLEL CRYPTO ENGINE 5093 PCRYPT PARALLEL CRYPTO ENGINE
5094 M: Steffen Klassert <steffen.klassert@secunet.com> 5094 M: Steffen Klassert <steffen.klassert@secunet.com>
5095 L: linux-crypto@vger.kernel.org 5095 L: linux-crypto@vger.kernel.org
5096 S: Maintained 5096 S: Maintained
5097 F: crypto/pcrypt.c 5097 F: crypto/pcrypt.c
5098 F: include/crypto/pcrypt.h 5098 F: include/crypto/pcrypt.h
5099 5099
5100 PER-CPU MEMORY ALLOCATOR 5100 PER-CPU MEMORY ALLOCATOR
5101 M: Tejun Heo <tj@kernel.org> 5101 M: Tejun Heo <tj@kernel.org>
5102 M: Christoph Lameter <cl@linux-foundation.org> 5102 M: Christoph Lameter <cl@linux-foundation.org>
5103 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git 5103 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git
5104 S: Maintained 5104 S: Maintained
5105 F: include/linux/percpu*.h 5105 F: include/linux/percpu*.h
5106 F: mm/percpu*.c 5106 F: mm/percpu*.c
5107 F: arch/*/include/asm/percpu.h 5107 F: arch/*/include/asm/percpu.h
5108 5108
5109 PER-TASK DELAY ACCOUNTING 5109 PER-TASK DELAY ACCOUNTING
5110 M: Balbir Singh <bsingharora@gmail.com> 5110 M: Balbir Singh <bsingharora@gmail.com>
5111 S: Maintained 5111 S: Maintained
5112 F: include/linux/delayacct.h 5112 F: include/linux/delayacct.h
5113 F: kernel/delayacct.c 5113 F: kernel/delayacct.c
5114 5114
5115 PERFORMANCE EVENTS SUBSYSTEM 5115 PERFORMANCE EVENTS SUBSYSTEM
5116 M: Peter Zijlstra <a.p.zijlstra@chello.nl> 5116 M: Peter Zijlstra <a.p.zijlstra@chello.nl>
5117 M: Paul Mackerras <paulus@samba.org> 5117 M: Paul Mackerras <paulus@samba.org>
5118 M: Ingo Molnar <mingo@elte.hu> 5118 M: Ingo Molnar <mingo@elte.hu>
5119 M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> 5119 M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
5120 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core 5120 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
5121 S: Supported 5121 S: Supported
5122 F: kernel/events/* 5122 F: kernel/events/*
5123 F: include/linux/perf_event.h 5123 F: include/linux/perf_event.h
5124 F: arch/*/kernel/perf_event*.c 5124 F: arch/*/kernel/perf_event*.c
5125 F: arch/*/kernel/*/perf_event*.c 5125 F: arch/*/kernel/*/perf_event*.c
5126 F: arch/*/kernel/*/*/perf_event*.c 5126 F: arch/*/kernel/*/*/perf_event*.c
5127 F: arch/*/include/asm/perf_event.h 5127 F: arch/*/include/asm/perf_event.h
5128 F: arch/*/lib/perf_event*.c 5128 F: arch/*/lib/perf_event*.c
5129 F: arch/*/kernel/perf_callchain.c 5129 F: arch/*/kernel/perf_callchain.c
5130 F: tools/perf/ 5130 F: tools/perf/
5131 5131
5132 PERSONALITY HANDLING 5132 PERSONALITY HANDLING
5133 M: Christoph Hellwig <hch@infradead.org> 5133 M: Christoph Hellwig <hch@infradead.org>
5134 L: linux-abi-devel@lists.sourceforge.net 5134 L: linux-abi-devel@lists.sourceforge.net
5135 S: Maintained 5135 S: Maintained
5136 F: include/linux/personality.h 5136 F: include/linux/personality.h
5137 5137
5138 PHONET PROTOCOL 5138 PHONET PROTOCOL
5139 M: Remi Denis-Courmont <remi.denis-courmont@nokia.com> 5139 M: Remi Denis-Courmont <remi.denis-courmont@nokia.com>
5140 S: Supported 5140 S: Supported
5141 F: Documentation/networking/phonet.txt 5141 F: Documentation/networking/phonet.txt
5142 F: include/linux/phonet.h 5142 F: include/linux/phonet.h
5143 F: include/net/phonet/ 5143 F: include/net/phonet/
5144 F: net/phonet/ 5144 F: net/phonet/
5145 5145
5146 PHRAM MTD DRIVER 5146 PHRAM MTD DRIVER
5147 M: Joern Engel <joern@lazybastard.org> 5147 M: Joern Engel <joern@lazybastard.org>
5148 L: linux-mtd@lists.infradead.org 5148 L: linux-mtd@lists.infradead.org
5149 S: Maintained 5149 S: Maintained
5150 F: drivers/mtd/devices/phram.c 5150 F: drivers/mtd/devices/phram.c
5151 5151
5152 PICOXCELL SUPPORT 5152 PICOXCELL SUPPORT
5153 M: Jamie Iles <jamie@jamieiles.com> 5153 M: Jamie Iles <jamie@jamieiles.com>
5154 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 5154 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
5155 T: git git://github.com/jamieiles/linux-2.6-ji.git 5155 T: git git://github.com/jamieiles/linux-2.6-ji.git
5156 S: Supported 5156 S: Supported
5157 F: arch/arm/mach-picoxcell 5157 F: arch/arm/mach-picoxcell
5158 F: drivers/*/picoxcell* 5158 F: drivers/*/picoxcell*
5159 F: drivers/*/*/picoxcell* 5159 F: drivers/*/*/picoxcell*
5160 5160
5161 PIN CONTROL SUBSYSTEM 5161 PIN CONTROL SUBSYSTEM
5162 M: Linus Walleij <linus.walleij@linaro.org> 5162 M: Linus Walleij <linus.walleij@linaro.org>
5163 S: Maintained 5163 S: Maintained
5164 F: drivers/pinctrl/ 5164 F: drivers/pinctrl/
5165 5165
5166 PKTCDVD DRIVER 5166 PKTCDVD DRIVER
5167 M: Peter Osterlund <petero2@telia.com> 5167 M: Peter Osterlund <petero2@telia.com>
5168 S: Maintained 5168 S: Maintained
5169 F: drivers/block/pktcdvd.c 5169 F: drivers/block/pktcdvd.c
5170 F: include/linux/pktcdvd.h 5170 F: include/linux/pktcdvd.h
5171 5171
5172 PKUNITY SOC DRIVERS 5172 PKUNITY SOC DRIVERS
5173 M: Guan Xuetao <gxt@mprc.pku.edu.cn> 5173 M: Guan Xuetao <gxt@mprc.pku.edu.cn>
5174 W: http://mprc.pku.edu.cn/~guanxuetao/linux 5174 W: http://mprc.pku.edu.cn/~guanxuetao/linux
5175 S: Maintained 5175 S: Maintained
5176 T: git git://git.kernel.org/pub/scm/linux/kernel/git/epip/linux-2.6-unicore32.git 5176 T: git git://git.kernel.org/pub/scm/linux/kernel/git/epip/linux-2.6-unicore32.git
5177 F: drivers/input/serio/i8042-unicore32io.h 5177 F: drivers/input/serio/i8042-unicore32io.h
5178 F: drivers/i2c/busses/i2c-puv3.c 5178 F: drivers/i2c/busses/i2c-puv3.c
5179 F: drivers/video/fb-puv3.c 5179 F: drivers/video/fb-puv3.c
5180 F: drivers/rtc/rtc-puv3.c 5180 F: drivers/rtc/rtc-puv3.c
5181 5181
5182 PMBUS HARDWARE MONITORING DRIVERS 5182 PMBUS HARDWARE MONITORING DRIVERS
5183 M: Guenter Roeck <guenter.roeck@ericsson.com> 5183 M: Guenter Roeck <guenter.roeck@ericsson.com>
5184 L: lm-sensors@lm-sensors.org 5184 L: lm-sensors@lm-sensors.org
5185 W: http://www.lm-sensors.org/ 5185 W: http://www.lm-sensors.org/
5186 W: http://www.roeck-us.net/linux/drivers/ 5186 W: http://www.roeck-us.net/linux/drivers/
5187 T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git 5187 T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
5188 S: Maintained 5188 S: Maintained
5189 F: Documentation/hwmon/pmbus 5189 F: Documentation/hwmon/pmbus
5190 F: drivers/hwmon/pmbus/ 5190 F: drivers/hwmon/pmbus/
5191 F: include/linux/i2c/pmbus.h 5191 F: include/linux/i2c/pmbus.h
5192 5192
5193 PMC SIERRA MaxRAID DRIVER 5193 PMC SIERRA MaxRAID DRIVER
5194 M: Anil Ravindranath <anil_ravindranath@pmc-sierra.com> 5194 M: Anil Ravindranath <anil_ravindranath@pmc-sierra.com>
5195 L: linux-scsi@vger.kernel.org 5195 L: linux-scsi@vger.kernel.org
5196 W: http://www.pmc-sierra.com/ 5196 W: http://www.pmc-sierra.com/
5197 S: Supported 5197 S: Supported
5198 F: drivers/scsi/pmcraid.* 5198 F: drivers/scsi/pmcraid.*
5199 5199
5200 PMC SIERRA PM8001 DRIVER 5200 PMC SIERRA PM8001 DRIVER
5201 M: jack_wang@usish.com 5201 M: jack_wang@usish.com
5202 M: lindar_liu@usish.com 5202 M: lindar_liu@usish.com
5203 L: linux-scsi@vger.kernel.org 5203 L: linux-scsi@vger.kernel.org
5204 S: Supported 5204 S: Supported
5205 F: drivers/scsi/pm8001/ 5205 F: drivers/scsi/pm8001/
5206 5206
5207 POSIX CLOCKS and TIMERS 5207 POSIX CLOCKS and TIMERS
5208 M: Thomas Gleixner <tglx@linutronix.de> 5208 M: Thomas Gleixner <tglx@linutronix.de>
5209 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core 5209 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
5210 S: Supported 5210 S: Supported
5211 F: fs/timerfd.c 5211 F: fs/timerfd.c
5212 F: include/linux/timer* 5212 F: include/linux/timer*
5213 F: kernel/*timer* 5213 F: kernel/*timer*
5214 5214
5215 POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS 5215 POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS
5216 M: Anton Vorontsov <cbou@mail.ru> 5216 M: Anton Vorontsov <cbou@mail.ru>
5217 M: David Woodhouse <dwmw2@infradead.org> 5217 M: David Woodhouse <dwmw2@infradead.org>
5218 T: git git://git.infradead.org/battery-2.6.git 5218 T: git git://git.infradead.org/battery-2.6.git
5219 S: Maintained 5219 S: Maintained
5220 F: include/linux/power_supply.h 5220 F: include/linux/power_supply.h
5221 F: drivers/power/power_supply* 5221 F: drivers/power/power_supply*
5222 5222
5223 PNP SUPPORT 5223 PNP SUPPORT
5224 M: Adam Belay <abelay@mit.edu> 5224 M: Adam Belay <abelay@mit.edu>
5225 M: Bjorn Helgaas <bhelgaas@google.com> 5225 M: Bjorn Helgaas <bhelgaas@google.com>
5226 S: Maintained 5226 S: Maintained
5227 F: drivers/pnp/ 5227 F: drivers/pnp/
5228 5228
5229 PNXxxxx I2C DRIVER 5229 PNXxxxx I2C DRIVER
5230 M: Vitaly Wool <vitalywool@gmail.com> 5230 M: Vitaly Wool <vitalywool@gmail.com>
5231 L: linux-i2c@vger.kernel.org 5231 L: linux-i2c@vger.kernel.org
5232 S: Maintained 5232 S: Maintained
5233 F: drivers/i2c/busses/i2c-pnx.c 5233 F: drivers/i2c/busses/i2c-pnx.c
5234 5234
5235 PPP PROTOCOL DRIVERS AND COMPRESSORS 5235 PPP PROTOCOL DRIVERS AND COMPRESSORS
5236 M: Paul Mackerras <paulus@samba.org> 5236 M: Paul Mackerras <paulus@samba.org>
5237 L: linux-ppp@vger.kernel.org 5237 L: linux-ppp@vger.kernel.org
5238 S: Maintained 5238 S: Maintained
5239 F: drivers/net/ppp/ppp_* 5239 F: drivers/net/ppp/ppp_*
5240 5240
5241 PPP OVER ATM (RFC 2364) 5241 PPP OVER ATM (RFC 2364)
5242 M: Mitchell Blank Jr <mitch@sfgoth.com> 5242 M: Mitchell Blank Jr <mitch@sfgoth.com>
5243 S: Maintained 5243 S: Maintained
5244 F: net/atm/pppoatm.c 5244 F: net/atm/pppoatm.c
5245 F: include/linux/atmppp.h 5245 F: include/linux/atmppp.h
5246 5246
5247 PPP OVER ETHERNET 5247 PPP OVER ETHERNET
5248 M: Michal Ostrowski <mostrows@earthlink.net> 5248 M: Michal Ostrowski <mostrows@earthlink.net>
5249 S: Maintained 5249 S: Maintained
5250 F: drivers/net/ppp/pppoe.c 5250 F: drivers/net/ppp/pppoe.c
5251 F: drivers/net/ppp/pppox.c 5251 F: drivers/net/ppp/pppox.c
5252 5252
5253 PPP OVER L2TP 5253 PPP OVER L2TP
5254 M: James Chapman <jchapman@katalix.com> 5254 M: James Chapman <jchapman@katalix.com>
5255 S: Maintained 5255 S: Maintained
5256 F: net/l2tp/l2tp_ppp.c 5256 F: net/l2tp/l2tp_ppp.c
5257 F: include/linux/if_pppol2tp.h 5257 F: include/linux/if_pppol2tp.h
5258 5258
5259 PPS SUPPORT 5259 PPS SUPPORT
5260 M: Rodolfo Giometti <giometti@enneenne.com> 5260 M: Rodolfo Giometti <giometti@enneenne.com>
5261 W: http://wiki.enneenne.com/index.php/LinuxPPS_support 5261 W: http://wiki.enneenne.com/index.php/LinuxPPS_support
5262 L: linuxpps@ml.enneenne.com (subscribers-only) 5262 L: linuxpps@ml.enneenne.com (subscribers-only)
5263 S: Maintained 5263 S: Maintained
5264 F: Documentation/pps/ 5264 F: Documentation/pps/
5265 F: drivers/pps/ 5265 F: drivers/pps/
5266 F: include/linux/pps*.h 5266 F: include/linux/pps*.h
5267 5267
5268 PPTP DRIVER 5268 PPTP DRIVER
5269 M: Dmitry Kozlov <xeb@mail.ru> 5269 M: Dmitry Kozlov <xeb@mail.ru>
5270 L: netdev@vger.kernel.org 5270 L: netdev@vger.kernel.org
5271 S: Maintained 5271 S: Maintained
5272 F: drivers/net/ppp/pptp.c 5272 F: drivers/net/ppp/pptp.c
5273 W: http://sourceforge.net/projects/accel-pptp 5273 W: http://sourceforge.net/projects/accel-pptp
5274 5274
5275 PREEMPTIBLE KERNEL 5275 PREEMPTIBLE KERNEL
5276 M: Robert Love <rml@tech9.net> 5276 M: Robert Love <rml@tech9.net>
5277 L: kpreempt-tech@lists.sourceforge.net 5277 L: kpreempt-tech@lists.sourceforge.net
5278 W: ftp://ftp.kernel.org/pub/linux/kernel/people/rml/preempt-kernel 5278 W: ftp://ftp.kernel.org/pub/linux/kernel/people/rml/preempt-kernel
5279 S: Supported 5279 S: Supported
5280 F: Documentation/preempt-locking.txt 5280 F: Documentation/preempt-locking.txt
5281 F: include/linux/preempt.h 5281 F: include/linux/preempt.h
5282 5282
5283 PRISM54 WIRELESS DRIVER 5283 PRISM54 WIRELESS DRIVER
5284 M: "Luis R. Rodriguez" <mcgrof@gmail.com> 5284 M: "Luis R. Rodriguez" <mcgrof@gmail.com>
5285 L: linux-wireless@vger.kernel.org 5285 L: linux-wireless@vger.kernel.org
5286 W: http://wireless.kernel.org/en/users/Drivers/p54 5286 W: http://wireless.kernel.org/en/users/Drivers/p54
5287 S: Obsolete 5287 S: Obsolete
5288 F: drivers/net/wireless/prism54/ 5288 F: drivers/net/wireless/prism54/
5289 5289
5290 PROMISE SATA TX2/TX4 CONTROLLER LIBATA DRIVER 5290 PROMISE SATA TX2/TX4 CONTROLLER LIBATA DRIVER
5291 M: Mikael Pettersson <mikpe@it.uu.se> 5291 M: Mikael Pettersson <mikpe@it.uu.se>
5292 L: linux-ide@vger.kernel.org 5292 L: linux-ide@vger.kernel.org
5293 S: Maintained 5293 S: Maintained
5294 F: drivers/ata/sata_promise.* 5294 F: drivers/ata/sata_promise.*
5295 5295
5296 PS3 NETWORK SUPPORT 5296 PS3 NETWORK SUPPORT
5297 M: Geoff Levand <geoff@infradead.org> 5297 M: Geoff Levand <geoff@infradead.org>
5298 L: netdev@vger.kernel.org 5298 L: netdev@vger.kernel.org
5299 L: cbe-oss-dev@lists.ozlabs.org 5299 L: cbe-oss-dev@lists.ozlabs.org
5300 S: Maintained 5300 S: Maintained
5301 F: drivers/net/ethernet/toshiba/ps3_gelic_net.* 5301 F: drivers/net/ethernet/toshiba/ps3_gelic_net.*
5302 5302
5303 PS3 PLATFORM SUPPORT 5303 PS3 PLATFORM SUPPORT
5304 M: Geoff Levand <geoff@infradead.org> 5304 M: Geoff Levand <geoff@infradead.org>
5305 L: linuxppc-dev@lists.ozlabs.org 5305 L: linuxppc-dev@lists.ozlabs.org
5306 L: cbe-oss-dev@lists.ozlabs.org 5306 L: cbe-oss-dev@lists.ozlabs.org
5307 S: Maintained 5307 S: Maintained
5308 F: arch/powerpc/boot/ps3* 5308 F: arch/powerpc/boot/ps3*
5309 F: arch/powerpc/include/asm/lv1call.h 5309 F: arch/powerpc/include/asm/lv1call.h
5310 F: arch/powerpc/include/asm/ps3*.h 5310 F: arch/powerpc/include/asm/ps3*.h
5311 F: arch/powerpc/platforms/ps3/ 5311 F: arch/powerpc/platforms/ps3/
5312 F: drivers/*/ps3* 5312 F: drivers/*/ps3*
5313 F: drivers/ps3/ 5313 F: drivers/ps3/
5314 F: drivers/rtc/rtc-ps3.c 5314 F: drivers/rtc/rtc-ps3.c
5315 F: drivers/usb/host/*ps3.c 5315 F: drivers/usb/host/*ps3.c
5316 F: sound/ppc/snd_ps3* 5316 F: sound/ppc/snd_ps3*
5317 5317
5318 PS3VRAM DRIVER 5318 PS3VRAM DRIVER
5319 M: Jim Paris <jim@jtan.com> 5319 M: Jim Paris <jim@jtan.com>
5320 L: cbe-oss-dev@lists.ozlabs.org 5320 L: cbe-oss-dev@lists.ozlabs.org
5321 S: Maintained 5321 S: Maintained
5322 F: drivers/block/ps3vram.c 5322 F: drivers/block/ps3vram.c
5323 5323
5324 PTRACE SUPPORT 5324 PTRACE SUPPORT
5325 M: Roland McGrath <roland@redhat.com> 5325 M: Roland McGrath <roland@redhat.com>
5326 M: Oleg Nesterov <oleg@redhat.com> 5326 M: Oleg Nesterov <oleg@redhat.com>
5327 S: Maintained 5327 S: Maintained
5328 F: include/asm-generic/syscall.h 5328 F: include/asm-generic/syscall.h
5329 F: include/linux/ptrace.h 5329 F: include/linux/ptrace.h
5330 F: include/linux/regset.h 5330 F: include/linux/regset.h
5331 F: include/linux/tracehook.h 5331 F: include/linux/tracehook.h
5332 F: kernel/ptrace.c 5332 F: kernel/ptrace.c
5333 5333
5334 PVRUSB2 VIDEO4LINUX DRIVER 5334 PVRUSB2 VIDEO4LINUX DRIVER
5335 M: Mike Isely <isely@pobox.com> 5335 M: Mike Isely <isely@pobox.com>
5336 L: pvrusb2@isely.net (subscribers-only) 5336 L: pvrusb2@isely.net (subscribers-only)
5337 L: linux-media@vger.kernel.org 5337 L: linux-media@vger.kernel.org
5338 W: http://www.isely.net/pvrusb2/ 5338 W: http://www.isely.net/pvrusb2/
5339 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 5339 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
5340 S: Maintained 5340 S: Maintained
5341 F: Documentation/video4linux/README.pvrusb2 5341 F: Documentation/video4linux/README.pvrusb2
5342 F: drivers/media/video/pvrusb2/ 5342 F: drivers/media/video/pvrusb2/
5343 5343
5344 PXA2xx/PXA3xx SUPPORT 5344 PXA2xx/PXA3xx SUPPORT
5345 M: Eric Miao <eric.y.miao@gmail.com> 5345 M: Eric Miao <eric.y.miao@gmail.com>
5346 M: Russell King <linux@arm.linux.org.uk> 5346 M: Russell King <linux@arm.linux.org.uk>
5347 M: Haojian Zhuang <haojian.zhuang@marvell.com> 5347 M: Haojian Zhuang <haojian.zhuang@marvell.com>
5348 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 5348 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
5349 T: git git://github.com/hzhuang1/linux.git 5349 T: git git://github.com/hzhuang1/linux.git
5350 T: git git://git.linaro.org/people/ycmiao/pxa-linux.git 5350 T: git git://git.linaro.org/people/ycmiao/pxa-linux.git
5351 S: Maintained 5351 S: Maintained
5352 F: arch/arm/mach-pxa/ 5352 F: arch/arm/mach-pxa/
5353 F: drivers/pcmcia/pxa2xx* 5353 F: drivers/pcmcia/pxa2xx*
5354 F: drivers/spi/spi-pxa2xx* 5354 F: drivers/spi/spi-pxa2xx*
5355 F: drivers/usb/gadget/pxa2* 5355 F: drivers/usb/gadget/pxa2*
5356 F: include/sound/pxa2xx-lib.h 5356 F: include/sound/pxa2xx-lib.h
5357 F: sound/arm/pxa* 5357 F: sound/arm/pxa*
5358 F: sound/soc/pxa 5358 F: sound/soc/pxa
5359 5359
5360 MMP SUPPORT 5360 MMP SUPPORT
5361 M: Eric Miao <eric.y.miao@gmail.com> 5361 M: Eric Miao <eric.y.miao@gmail.com>
5362 M: Haojian Zhuang <haojian.zhuang@marvell.com> 5362 M: Haojian Zhuang <haojian.zhuang@marvell.com>
5363 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 5363 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
5364 T: git git://github.com/hzhuang1/linux.git 5364 T: git git://github.com/hzhuang1/linux.git
5365 T: git git://git.linaro.org/people/ycmiao/pxa-linux.git 5365 T: git git://git.linaro.org/people/ycmiao/pxa-linux.git
5366 S: Maintained 5366 S: Maintained
5367 F: arch/arm/mach-mmp/ 5367 F: arch/arm/mach-mmp/
5368 5368
5369 PXA MMCI DRIVER 5369 PXA MMCI DRIVER
5370 S: Orphan 5370 S: Orphan
5371 5371
5372 PXA RTC DRIVER 5372 PXA RTC DRIVER
5373 M: Robert Jarzmik <robert.jarzmik@free.fr> 5373 M: Robert Jarzmik <robert.jarzmik@free.fr>
5374 L: rtc-linux@googlegroups.com 5374 L: rtc-linux@googlegroups.com
5375 S: Maintained 5375 S: Maintained
5376 5376
5377 QIB DRIVER 5377 QIB DRIVER
5378 M: Mike Marciniszyn <infinipath@qlogic.com> 5378 M: Mike Marciniszyn <infinipath@qlogic.com>
5379 L: linux-rdma@vger.kernel.org 5379 L: linux-rdma@vger.kernel.org
5380 S: Supported 5380 S: Supported
5381 F: drivers/infiniband/hw/qib/ 5381 F: drivers/infiniband/hw/qib/
5382 5382
5383 QLOGIC QLA1280 SCSI DRIVER 5383 QLOGIC QLA1280 SCSI DRIVER
5384 M: Michael Reed <mdr@sgi.com> 5384 M: Michael Reed <mdr@sgi.com>
5385 L: linux-scsi@vger.kernel.org 5385 L: linux-scsi@vger.kernel.org
5386 S: Maintained 5386 S: Maintained
5387 F: drivers/scsi/qla1280.[ch] 5387 F: drivers/scsi/qla1280.[ch]
5388 5388
5389 QLOGIC QLA2XXX FC-SCSI DRIVER 5389 QLOGIC QLA2XXX FC-SCSI DRIVER
5390 M: Andrew Vasquez <andrew.vasquez@qlogic.com> 5390 M: Andrew Vasquez <andrew.vasquez@qlogic.com>
5391 M: linux-driver@qlogic.com 5391 M: linux-driver@qlogic.com
5392 L: linux-scsi@vger.kernel.org 5392 L: linux-scsi@vger.kernel.org
5393 S: Supported 5393 S: Supported
5394 F: Documentation/scsi/LICENSE.qla2xxx 5394 F: Documentation/scsi/LICENSE.qla2xxx
5395 F: drivers/scsi/qla2xxx/ 5395 F: drivers/scsi/qla2xxx/
5396 5396
5397 QLOGIC QLA4XXX iSCSI DRIVER 5397 QLOGIC QLA4XXX iSCSI DRIVER
5398 M: Ravi Anand <ravi.anand@qlogic.com> 5398 M: Ravi Anand <ravi.anand@qlogic.com>
5399 M: Vikas Chaudhary <vikas.chaudhary@qlogic.com> 5399 M: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
5400 M: iscsi-driver@qlogic.com 5400 M: iscsi-driver@qlogic.com
5401 L: linux-scsi@vger.kernel.org 5401 L: linux-scsi@vger.kernel.org
5402 S: Supported 5402 S: Supported
5403 F: drivers/scsi/qla4xxx/ 5403 F: drivers/scsi/qla4xxx/
5404 5404
5405 QLOGIC QLA3XXX NETWORK DRIVER 5405 QLOGIC QLA3XXX NETWORK DRIVER
5406 M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com> 5406 M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
5407 M: Ron Mercer <ron.mercer@qlogic.com> 5407 M: Ron Mercer <ron.mercer@qlogic.com>
5408 M: linux-driver@qlogic.com 5408 M: linux-driver@qlogic.com
5409 L: netdev@vger.kernel.org 5409 L: netdev@vger.kernel.org
5410 S: Supported 5410 S: Supported
5411 F: Documentation/networking/LICENSE.qla3xxx 5411 F: Documentation/networking/LICENSE.qla3xxx
5412 F: drivers/net/ethernet/qlogic/qla3xxx.* 5412 F: drivers/net/ethernet/qlogic/qla3xxx.*
5413 5413
5414 QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER 5414 QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
5415 M: Anirban Chakraborty <anirban.chakraborty@qlogic.com> 5415 M: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
5416 M: Sony Chacko <sony.chacko@qlogic.com> 5416 M: Sony Chacko <sony.chacko@qlogic.com>
5417 M: linux-driver@qlogic.com 5417 M: linux-driver@qlogic.com
5418 L: netdev@vger.kernel.org 5418 L: netdev@vger.kernel.org
5419 S: Supported 5419 S: Supported
5420 F: drivers/net/ethernet/qlogic/qlcnic/ 5420 F: drivers/net/ethernet/qlogic/qlcnic/
5421 5421
5422 QLOGIC QLGE 10Gb ETHERNET DRIVER 5422 QLOGIC QLGE 10Gb ETHERNET DRIVER
5423 M: Anirban Chakraborty <anirban.chakraborty@qlogic.com> 5423 M: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
5424 M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com> 5424 M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
5425 M: Ron Mercer <ron.mercer@qlogic.com> 5425 M: Ron Mercer <ron.mercer@qlogic.com>
5426 M: linux-driver@qlogic.com 5426 M: linux-driver@qlogic.com
5427 L: netdev@vger.kernel.org 5427 L: netdev@vger.kernel.org
5428 S: Supported 5428 S: Supported
5429 F: drivers/net/ethernet/qlogic/qlge/ 5429 F: drivers/net/ethernet/qlogic/qlge/
5430 5430
5431 QNX4 FILESYSTEM 5431 QNX4 FILESYSTEM
5432 M: Anders Larsen <al@alarsen.net> 5432 M: Anders Larsen <al@alarsen.net>
5433 W: http://www.alarsen.net/linux/qnx4fs/ 5433 W: http://www.alarsen.net/linux/qnx4fs/
5434 S: Maintained 5434 S: Maintained
5435 F: fs/qnx4/ 5435 F: fs/qnx4/
5436 F: include/linux/qnx4_fs.h 5436 F: include/linux/qnx4_fs.h
5437 F: include/linux/qnxtypes.h 5437 F: include/linux/qnxtypes.h
5438 5438
5439 QUALCOMM HEXAGON ARCHITECTURE 5439 QUALCOMM HEXAGON ARCHITECTURE
5440 M: Richard Kuo <rkuo@codeaurora.org> 5440 M: Richard Kuo <rkuo@codeaurora.org>
5441 L: linux-hexagon@vger.kernel.org 5441 L: linux-hexagon@vger.kernel.org
5442 S: Supported 5442 S: Supported
5443 F: arch/hexagon/ 5443 F: arch/hexagon/
5444 5444
5445 RADOS BLOCK DEVICE (RBD) 5445 RADOS BLOCK DEVICE (RBD)
5446 F: include/linux/qnxtypes.h 5446 F: include/linux/qnxtypes.h
5447 M: Yehuda Sadeh <yehuda@hq.newdream.net> 5447 M: Yehuda Sadeh <yehuda@hq.newdream.net>
5448 M: Sage Weil <sage@newdream.net> 5448 M: Sage Weil <sage@newdream.net>
5449 M: ceph-devel@vger.kernel.org 5449 M: ceph-devel@vger.kernel.org
5450 S: Supported 5450 S: Supported
5451 F: drivers/block/rbd.c 5451 F: drivers/block/rbd.c
5452 F: drivers/block/rbd_types.h 5452 F: drivers/block/rbd_types.h
5453 5453
5454 RADEON FRAMEBUFFER DISPLAY DRIVER 5454 RADEON FRAMEBUFFER DISPLAY DRIVER
5455 M: Benjamin Herrenschmidt <benh@kernel.crashing.org> 5455 M: Benjamin Herrenschmidt <benh@kernel.crashing.org>
5456 L: linux-fbdev@vger.kernel.org 5456 L: linux-fbdev@vger.kernel.org
5457 S: Maintained 5457 S: Maintained
5458 F: drivers/video/aty/radeon* 5458 F: drivers/video/aty/radeon*
5459 F: include/linux/radeonfb.h 5459 F: include/linux/radeonfb.h
5460 5460
5461 RAGE128 FRAMEBUFFER DISPLAY DRIVER 5461 RAGE128 FRAMEBUFFER DISPLAY DRIVER
5462 M: Paul Mackerras <paulus@samba.org> 5462 M: Paul Mackerras <paulus@samba.org>
5463 L: linux-fbdev@vger.kernel.org 5463 L: linux-fbdev@vger.kernel.org
5464 S: Maintained 5464 S: Maintained
5465 F: drivers/video/aty/aty128fb.c 5465 F: drivers/video/aty/aty128fb.c
5466 5466
5467 RALINK RT2X00 WIRELESS LAN DRIVER 5467 RALINK RT2X00 WIRELESS LAN DRIVER
5468 P: rt2x00 project 5468 P: rt2x00 project
5469 M: Ivo van Doorn <IvDoorn@gmail.com> 5469 M: Ivo van Doorn <IvDoorn@gmail.com>
5470 M: Gertjan van Wingerde <gwingerde@gmail.com> 5470 M: Gertjan van Wingerde <gwingerde@gmail.com>
5471 M: Helmut Schaa <helmut.schaa@googlemail.com> 5471 M: Helmut Schaa <helmut.schaa@googlemail.com>
5472 L: linux-wireless@vger.kernel.org 5472 L: linux-wireless@vger.kernel.org
5473 L: users@rt2x00.serialmonkey.com (moderated for non-subscribers) 5473 L: users@rt2x00.serialmonkey.com (moderated for non-subscribers)
5474 W: http://rt2x00.serialmonkey.com/ 5474 W: http://rt2x00.serialmonkey.com/
5475 S: Maintained 5475 S: Maintained
5476 T: git git://git.kernel.org/pub/scm/linux/kernel/git/ivd/rt2x00.git 5476 T: git git://git.kernel.org/pub/scm/linux/kernel/git/ivd/rt2x00.git
5477 F: drivers/net/wireless/rt2x00/ 5477 F: drivers/net/wireless/rt2x00/
5478 5478
5479 RAMDISK RAM BLOCK DEVICE DRIVER 5479 RAMDISK RAM BLOCK DEVICE DRIVER
5480 M: Nick Piggin <npiggin@kernel.dk> 5480 M: Nick Piggin <npiggin@kernel.dk>
5481 S: Maintained 5481 S: Maintained
5482 F: Documentation/blockdev/ramdisk.txt 5482 F: Documentation/blockdev/ramdisk.txt
5483 F: drivers/block/brd.c 5483 F: drivers/block/brd.c
5484 5484
5485 RANDOM NUMBER DRIVER 5485 RANDOM NUMBER DRIVER
5486 M: Matt Mackall <mpm@selenic.com> 5486 M: Matt Mackall <mpm@selenic.com>
5487 S: Maintained 5487 S: Maintained
5488 F: drivers/char/random.c 5488 F: drivers/char/random.c
5489 5489
5490 RAPIDIO SUBSYSTEM 5490 RAPIDIO SUBSYSTEM
5491 M: Matt Porter <mporter@kernel.crashing.org> 5491 M: Matt Porter <mporter@kernel.crashing.org>
5492 M: Alexandre Bounine <alexandre.bounine@idt.com> 5492 M: Alexandre Bounine <alexandre.bounine@idt.com>
5493 S: Maintained 5493 S: Maintained
5494 F: drivers/rapidio/ 5494 F: drivers/rapidio/
5495 5495
5496 RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER 5496 RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER
5497 L: linux-wireless@vger.kernel.org 5497 L: linux-wireless@vger.kernel.org
5498 S: Orphan 5498 S: Orphan
5499 F: drivers/net/wireless/ray* 5499 F: drivers/net/wireless/ray*
5500 5500
5501 RCUTORTURE MODULE 5501 RCUTORTURE MODULE
5502 M: Josh Triplett <josh@freedesktop.org> 5502 M: Josh Triplett <josh@freedesktop.org>
5503 M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> 5503 M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
5504 S: Supported 5504 S: Supported
5505 T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git 5505 T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git
5506 F: Documentation/RCU/torture.txt 5506 F: Documentation/RCU/torture.txt
5507 F: kernel/rcutorture.c 5507 F: kernel/rcutorture.c
5508 5508
5509 RDC R-321X SoC 5509 RDC R-321X SoC
5510 M: Florian Fainelli <florian@openwrt.org> 5510 M: Florian Fainelli <florian@openwrt.org>
5511 S: Maintained 5511 S: Maintained
5512 5512
5513 RDC R6040 FAST ETHERNET DRIVER 5513 RDC R6040 FAST ETHERNET DRIVER
5514 M: Florian Fainelli <florian@openwrt.org> 5514 M: Florian Fainelli <florian@openwrt.org>
5515 L: netdev@vger.kernel.org 5515 L: netdev@vger.kernel.org
5516 S: Maintained 5516 S: Maintained
5517 F: drivers/net/ethernet/rdc/r6040.c 5517 F: drivers/net/ethernet/rdc/r6040.c
5518 5518
5519 RDS - RELIABLE DATAGRAM SOCKETS 5519 RDS - RELIABLE DATAGRAM SOCKETS
5520 M: Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com> 5520 M: Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com>
5521 L: rds-devel@oss.oracle.com (moderated for non-subscribers) 5521 L: rds-devel@oss.oracle.com (moderated for non-subscribers)
5522 S: Supported 5522 S: Supported
5523 F: net/rds/ 5523 F: net/rds/
5524 5524
5525 READ-COPY UPDATE (RCU) 5525 READ-COPY UPDATE (RCU)
5526 M: Dipankar Sarma <dipankar@in.ibm.com> 5526 M: Dipankar Sarma <dipankar@in.ibm.com>
5527 M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> 5527 M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
5528 W: http://www.rdrop.com/users/paulmck/rclock/ 5528 W: http://www.rdrop.com/users/paulmck/rclock/
5529 S: Supported 5529 S: Supported
5530 T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git 5530 T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git
5531 F: Documentation/RCU/ 5531 F: Documentation/RCU/
5532 F: include/linux/rcu* 5532 F: include/linux/rcu*
5533 F: include/linux/srcu* 5533 F: include/linux/srcu*
5534 F: kernel/rcu* 5534 F: kernel/rcu*
5535 F: kernel/srcu* 5535 F: kernel/srcu*
5536 X: kernel/rcutorture.c 5536 X: kernel/rcutorture.c
5537 5537
5538 REAL TIME CLOCK (RTC) SUBSYSTEM 5538 REAL TIME CLOCK (RTC) SUBSYSTEM
5539 M: Alessandro Zummo <a.zummo@towertech.it> 5539 M: Alessandro Zummo <a.zummo@towertech.it>
5540 L: rtc-linux@googlegroups.com 5540 L: rtc-linux@googlegroups.com
5541 Q: http://patchwork.ozlabs.org/project/rtc-linux/list/ 5541 Q: http://patchwork.ozlabs.org/project/rtc-linux/list/
5542 S: Maintained 5542 S: Maintained
5543 F: Documentation/rtc.txt 5543 F: Documentation/rtc.txt
5544 F: drivers/rtc/ 5544 F: drivers/rtc/
5545 F: include/linux/rtc.h 5545 F: include/linux/rtc.h
5546 5546
5547 REISERFS FILE SYSTEM 5547 REISERFS FILE SYSTEM
5548 L: reiserfs-devel@vger.kernel.org 5548 L: reiserfs-devel@vger.kernel.org
5549 S: Supported 5549 S: Supported
5550 F: fs/reiserfs/ 5550 F: fs/reiserfs/
5551 5551
5552 REGISTER MAP ABSTRACTION 5552 REGISTER MAP ABSTRACTION
5553 M: Mark Brown <broonie@opensource.wolfsonmicro.com> 5553 M: Mark Brown <broonie@opensource.wolfsonmicro.com>
5554 T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git 5554 T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git
5555 S: Supported 5555 S: Supported
5556 F: drivers/base/regmap/ 5556 F: drivers/base/regmap/
5557 F: include/linux/regmap.h 5557 F: include/linux/regmap.h
5558 5558
5559 RFKILL 5559 RFKILL
5560 M: Johannes Berg <johannes@sipsolutions.net> 5560 M: Johannes Berg <johannes@sipsolutions.net>
5561 L: linux-wireless@vger.kernel.org 5561 L: linux-wireless@vger.kernel.org
5562 S: Maintained 5562 S: Maintained
5563 F: Documentation/rfkill.txt 5563 F: Documentation/rfkill.txt
5564 F: net/rfkill/ 5564 F: net/rfkill/
5565 5565
5566 RICOH SMARTMEDIA/XD DRIVER 5566 RICOH SMARTMEDIA/XD DRIVER
5567 M: Maxim Levitsky <maximlevitsky@gmail.com> 5567 M: Maxim Levitsky <maximlevitsky@gmail.com>
5568 S: Maintained 5568 S: Maintained
5569 F: drivers/mtd/nand/r852.c 5569 F: drivers/mtd/nand/r852.c
5570 F: drivers/mtd/nand/r852.h 5570 F: drivers/mtd/nand/r852.h
5571 5571
5572 RICOH R5C592 MEMORYSTICK DRIVER 5572 RICOH R5C592 MEMORYSTICK DRIVER
5573 M: Maxim Levitsky <maximlevitsky@gmail.com> 5573 M: Maxim Levitsky <maximlevitsky@gmail.com>
5574 S: Maintained 5574 S: Maintained
5575 F: drivers/memstick/host/r592.* 5575 F: drivers/memstick/host/r592.*
5576 5576
5577 ROCKETPORT DRIVER 5577 ROCKETPORT DRIVER
5578 P: Comtrol Corp. 5578 P: Comtrol Corp.
5579 W: http://www.comtrol.com 5579 W: http://www.comtrol.com
5580 S: Maintained 5580 S: Maintained
5581 F: Documentation/serial/rocket.txt 5581 F: Documentation/serial/rocket.txt
5582 F: drivers/tty/rocket* 5582 F: drivers/tty/rocket*
5583 5583
5584 ROSE NETWORK LAYER 5584 ROSE NETWORK LAYER
5585 M: Ralf Baechle <ralf@linux-mips.org> 5585 M: Ralf Baechle <ralf@linux-mips.org>
5586 L: linux-hams@vger.kernel.org 5586 L: linux-hams@vger.kernel.org
5587 W: http://www.linux-ax25.org/ 5587 W: http://www.linux-ax25.org/
5588 S: Maintained 5588 S: Maintained
5589 F: include/linux/rose.h 5589 F: include/linux/rose.h
5590 F: include/net/rose.h 5590 F: include/net/rose.h
5591 F: net/rose/ 5591 F: net/rose/
5592 5592
5593 RTL8180 WIRELESS DRIVER 5593 RTL8180 WIRELESS DRIVER
5594 M: "John W. Linville" <linville@tuxdriver.com> 5594 M: "John W. Linville" <linville@tuxdriver.com>
5595 L: linux-wireless@vger.kernel.org 5595 L: linux-wireless@vger.kernel.org
5596 W: http://linuxwireless.org/ 5596 W: http://linuxwireless.org/
5597 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git 5597 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
5598 S: Maintained 5598 S: Maintained
5599 F: drivers/net/wireless/rtl818x/rtl8180/ 5599 F: drivers/net/wireless/rtl818x/rtl8180/
5600 5600
5601 RTL8187 WIRELESS DRIVER 5601 RTL8187 WIRELESS DRIVER
5602 M: Herton Ronaldo Krzesinski <herton@canonical.com> 5602 M: Herton Ronaldo Krzesinski <herton@canonical.com>
5603 M: Hin-Tak Leung <htl10@users.sourceforge.net> 5603 M: Hin-Tak Leung <htl10@users.sourceforge.net>
5604 M: Larry Finger <Larry.Finger@lwfinger.net> 5604 M: Larry Finger <Larry.Finger@lwfinger.net>
5605 L: linux-wireless@vger.kernel.org 5605 L: linux-wireless@vger.kernel.org
5606 W: http://linuxwireless.org/ 5606 W: http://linuxwireless.org/
5607 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git 5607 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
5608 S: Maintained 5608 S: Maintained
5609 F: drivers/net/wireless/rtl818x/rtl8187/ 5609 F: drivers/net/wireless/rtl818x/rtl8187/
5610 5610
5611 RTL8192CE WIRELESS DRIVER 5611 RTL8192CE WIRELESS DRIVER
5612 M: Larry Finger <Larry.Finger@lwfinger.net> 5612 M: Larry Finger <Larry.Finger@lwfinger.net>
5613 M: Chaoming Li <chaoming_li@realsil.com.cn> 5613 M: Chaoming Li <chaoming_li@realsil.com.cn>
5614 L: linux-wireless@vger.kernel.org 5614 L: linux-wireless@vger.kernel.org
5615 W: http://linuxwireless.org/ 5615 W: http://linuxwireless.org/
5616 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git 5616 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
5617 S: Maintained 5617 S: Maintained
5618 F: drivers/net/wireless/rtlwifi/ 5618 F: drivers/net/wireless/rtlwifi/
5619 F: drivers/net/wireless/rtlwifi/rtl8192ce/ 5619 F: drivers/net/wireless/rtlwifi/rtl8192ce/
5620 5620
5621 S3 SAVAGE FRAMEBUFFER DRIVER 5621 S3 SAVAGE FRAMEBUFFER DRIVER
5622 M: Antonino Daplas <adaplas@gmail.com> 5622 M: Antonino Daplas <adaplas@gmail.com>
5623 L: linux-fbdev@vger.kernel.org 5623 L: linux-fbdev@vger.kernel.org
5624 S: Maintained 5624 S: Maintained
5625 F: drivers/video/savage/ 5625 F: drivers/video/savage/
5626 5626
5627 S390 5627 S390
5628 M: Martin Schwidefsky <schwidefsky@de.ibm.com> 5628 M: Martin Schwidefsky <schwidefsky@de.ibm.com>
5629 M: Heiko Carstens <heiko.carstens@de.ibm.com> 5629 M: Heiko Carstens <heiko.carstens@de.ibm.com>
5630 M: linux390@de.ibm.com 5630 M: linux390@de.ibm.com
5631 L: linux-s390@vger.kernel.org 5631 L: linux-s390@vger.kernel.org
5632 W: http://www.ibm.com/developerworks/linux/linux390/ 5632 W: http://www.ibm.com/developerworks/linux/linux390/
5633 S: Supported 5633 S: Supported
5634 F: arch/s390/ 5634 F: arch/s390/
5635 F: drivers/s390/ 5635 F: drivers/s390/
5636 F: block/partitions/ibm.c 5636 F: block/partitions/ibm.c
5637 F: Documentation/s390/ 5637 F: Documentation/s390/
5638 F: Documentation/DocBook/s390* 5638 F: Documentation/DocBook/s390*
5639 5639
5640 S390 NETWORK DRIVERS 5640 S390 NETWORK DRIVERS
5641 M: Ursula Braun <ursula.braun@de.ibm.com> 5641 M: Ursula Braun <ursula.braun@de.ibm.com>
5642 M: Frank Blaschka <blaschka@linux.vnet.ibm.com> 5642 M: Frank Blaschka <blaschka@linux.vnet.ibm.com>
5643 M: linux390@de.ibm.com 5643 M: linux390@de.ibm.com
5644 L: linux-s390@vger.kernel.org 5644 L: linux-s390@vger.kernel.org
5645 W: http://www.ibm.com/developerworks/linux/linux390/ 5645 W: http://www.ibm.com/developerworks/linux/linux390/
5646 S: Supported 5646 S: Supported
5647 F: drivers/s390/net/ 5647 F: drivers/s390/net/
5648 5648
5649 S390 ZCRYPT DRIVER 5649 S390 ZCRYPT DRIVER
5650 M: Holger Dengler <hd@linux.vnet.ibm.com> 5650 M: Holger Dengler <hd@linux.vnet.ibm.com>
5651 M: linux390@de.ibm.com 5651 M: linux390@de.ibm.com
5652 L: linux-s390@vger.kernel.org 5652 L: linux-s390@vger.kernel.org
5653 W: http://www.ibm.com/developerworks/linux/linux390/ 5653 W: http://www.ibm.com/developerworks/linux/linux390/
5654 S: Supported 5654 S: Supported
5655 F: drivers/s390/crypto/ 5655 F: drivers/s390/crypto/
5656 5656
5657 S390 ZFCP DRIVER 5657 S390 ZFCP DRIVER
5658 M: Steffen Maier <maier@linux.vnet.ibm.com> 5658 M: Steffen Maier <maier@linux.vnet.ibm.com>
5659 M: linux390@de.ibm.com 5659 M: linux390@de.ibm.com
5660 L: linux-s390@vger.kernel.org 5660 L: linux-s390@vger.kernel.org
5661 W: http://www.ibm.com/developerworks/linux/linux390/ 5661 W: http://www.ibm.com/developerworks/linux/linux390/
5662 S: Supported 5662 S: Supported
5663 F: drivers/s390/scsi/zfcp_* 5663 F: drivers/s390/scsi/zfcp_*
5664 5664
5665 S390 IUCV NETWORK LAYER 5665 S390 IUCV NETWORK LAYER
5666 M: Ursula Braun <ursula.braun@de.ibm.com> 5666 M: Ursula Braun <ursula.braun@de.ibm.com>
5667 M: linux390@de.ibm.com 5667 M: linux390@de.ibm.com
5668 L: linux-s390@vger.kernel.org 5668 L: linux-s390@vger.kernel.org
5669 W: http://www.ibm.com/developerworks/linux/linux390/ 5669 W: http://www.ibm.com/developerworks/linux/linux390/
5670 S: Supported 5670 S: Supported
5671 F: drivers/s390/net/*iucv* 5671 F: drivers/s390/net/*iucv*
5672 F: include/net/iucv/ 5672 F: include/net/iucv/
5673 F: net/iucv/ 5673 F: net/iucv/
5674 5674
5675 S3C24XX SD/MMC Driver 5675 S3C24XX SD/MMC Driver
5676 M: Ben Dooks <ben-linux@fluff.org> 5676 M: Ben Dooks <ben-linux@fluff.org>
5677 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 5677 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
5678 S: Supported 5678 S: Supported
5679 F: drivers/mmc/host/s3cmci.* 5679 F: drivers/mmc/host/s3cmci.*
5680 5680
5681 SAA7146 VIDEO4LINUX-2 DRIVER 5681 SAA7146 VIDEO4LINUX-2 DRIVER
5682 M: Michael Hunold <michael@mihu.de> 5682 M: Michael Hunold <michael@mihu.de>
5683 L: linux-media@vger.kernel.org 5683 L: linux-media@vger.kernel.org
5684 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 5684 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
5685 W: http://www.mihu.de/linux/saa7146 5685 W: http://www.mihu.de/linux/saa7146
5686 S: Maintained 5686 S: Maintained
5687 F: drivers/media/common/saa7146* 5687 F: drivers/media/common/saa7146*
5688 F: drivers/media/video/*7146* 5688 F: drivers/media/video/*7146*
5689 F: include/media/*7146* 5689 F: include/media/*7146*
5690 5690
5691 SAMSUNG AUDIO (ASoC) DRIVERS 5691 SAMSUNG AUDIO (ASoC) DRIVERS
5692 M: Sangbeom Kim <sbkim73@samsung.com> 5692 M: Sangbeom Kim <sbkim73@samsung.com>
5693 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 5693 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
5694 S: Supported 5694 S: Supported
5695 F: sound/soc/samsung 5695 F: sound/soc/samsung
5696 5696
5697 SAMSUNG FRAMEBUFFER DRIVER 5697 SAMSUNG FRAMEBUFFER DRIVER
5698 M: Jingoo Han <jg1.han@samsung.com> 5698 M: Jingoo Han <jg1.han@samsung.com>
5699 L: linux-fbdev@vger.kernel.org 5699 L: linux-fbdev@vger.kernel.org
5700 S: Maintained 5700 S: Maintained
5701 F: drivers/video/s3c-fb.c 5701 F: drivers/video/s3c-fb.c
5702 5702
5703 SERIAL DRIVERS 5703 SERIAL DRIVERS
5704 M: Alan Cox <alan@linux.intel.com> 5704 M: Alan Cox <alan@linux.intel.com>
5705 L: linux-serial@vger.kernel.org 5705 L: linux-serial@vger.kernel.org
5706 S: Maintained 5706 S: Maintained
5707 F: drivers/tty/serial 5707 F: drivers/tty/serial
5708 5708
5709 SYNOPSYS DESIGNWARE DMAC DRIVER 5709 SYNOPSYS DESIGNWARE DMAC DRIVER
5710 M: Viresh Kumar <viresh.kumar@st.com> 5710 M: Viresh Kumar <viresh.kumar@st.com>
5711 S: Maintained 5711 S: Maintained
5712 F: include/linux/dw_dmac.h 5712 F: include/linux/dw_dmac.h
5713 F: drivers/dma/dw_dmac_regs.h 5713 F: drivers/dma/dw_dmac_regs.h
5714 F: drivers/dma/dw_dmac.c 5714 F: drivers/dma/dw_dmac.c
5715 5715
5716 TIMEKEEPING, NTP 5716 TIMEKEEPING, NTP
5717 M: John Stultz <johnstul@us.ibm.com> 5717 M: John Stultz <johnstul@us.ibm.com>
5718 M: Thomas Gleixner <tglx@linutronix.de> 5718 M: Thomas Gleixner <tglx@linutronix.de>
5719 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core 5719 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
5720 S: Supported 5720 S: Supported
5721 F: include/linux/clocksource.h 5721 F: include/linux/clocksource.h
5722 F: include/linux/time.h 5722 F: include/linux/time.h
5723 F: include/linux/timex.h 5723 F: include/linux/timex.h
5724 F: kernel/time/clocksource.c 5724 F: kernel/time/clocksource.c
5725 F: kernel/time/time*.c 5725 F: kernel/time/time*.c
5726 F: kernel/time/ntp.c 5726 F: kernel/time/ntp.c
5727 F: drivers/clocksource 5727 F: drivers/clocksource
5728 5728
5729 TLG2300 VIDEO4LINUX-2 DRIVER 5729 TLG2300 VIDEO4LINUX-2 DRIVER
5730 M: Huang Shijie <shijie8@gmail.com> 5730 M: Huang Shijie <shijie8@gmail.com>
5731 M: Kang Yong <kangyong@telegent.com> 5731 M: Kang Yong <kangyong@telegent.com>
5732 M: Zhang Xiaobing <xbzhang@telegent.com> 5732 M: Zhang Xiaobing <xbzhang@telegent.com>
5733 S: Supported 5733 S: Supported
5734 F: drivers/media/video/tlg2300 5734 F: drivers/media/video/tlg2300
5735 5735
5736 SC1200 WDT DRIVER 5736 SC1200 WDT DRIVER
5737 M: Zwane Mwaikambo <zwane@arm.linux.org.uk> 5737 M: Zwane Mwaikambo <zwane@arm.linux.org.uk>
5738 S: Maintained 5738 S: Maintained
5739 F: drivers/watchdog/sc1200wdt.c 5739 F: drivers/watchdog/sc1200wdt.c
5740 5740
5741 SCHEDULER 5741 SCHEDULER
5742 M: Ingo Molnar <mingo@elte.hu> 5742 M: Ingo Molnar <mingo@elte.hu>
5743 M: Peter Zijlstra <peterz@infradead.org> 5743 M: Peter Zijlstra <peterz@infradead.org>
5744 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core 5744 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core
5745 S: Maintained 5745 S: Maintained
5746 F: kernel/sched* 5746 F: kernel/sched*
5747 F: include/linux/sched.h 5747 F: include/linux/sched.h
5748 5748
5749 SCORE ARCHITECTURE 5749 SCORE ARCHITECTURE
5750 M: Chen Liqin <liqin.chen@sunplusct.com> 5750 M: Chen Liqin <liqin.chen@sunplusct.com>
5751 M: Lennox Wu <lennox.wu@gmail.com> 5751 M: Lennox Wu <lennox.wu@gmail.com>
5752 W: http://www.sunplusct.com 5752 W: http://www.sunplusct.com
5753 S: Supported 5753 S: Supported
5754 F: arch/score/ 5754 F: arch/score/
5755 5755
5756 SCSI CDROM DRIVER 5756 SCSI CDROM DRIVER
5757 M: Jens Axboe <axboe@kernel.dk> 5757 M: Jens Axboe <axboe@kernel.dk>
5758 L: linux-scsi@vger.kernel.org 5758 L: linux-scsi@vger.kernel.org
5759 W: http://www.kernel.dk 5759 W: http://www.kernel.dk
5760 S: Maintained 5760 S: Maintained
5761 F: drivers/scsi/sr* 5761 F: drivers/scsi/sr*
5762 5762
5763 SCSI RDMA PROTOCOL (SRP) INITIATOR 5763 SCSI RDMA PROTOCOL (SRP) INITIATOR
5764 M: David Dillow <dillowda@ornl.gov> 5764 M: David Dillow <dillowda@ornl.gov>
5765 L: linux-rdma@vger.kernel.org 5765 L: linux-rdma@vger.kernel.org
5766 S: Supported 5766 S: Supported
5767 W: http://www.openfabrics.org 5767 W: http://www.openfabrics.org
5768 Q: http://patchwork.kernel.org/project/linux-rdma/list/ 5768 Q: http://patchwork.kernel.org/project/linux-rdma/list/
5769 T: git git://git.kernel.org/pub/scm/linux/kernel/git/dad/srp-initiator.git 5769 T: git git://git.kernel.org/pub/scm/linux/kernel/git/dad/srp-initiator.git
5770 F: drivers/infiniband/ulp/srp/ 5770 F: drivers/infiniband/ulp/srp/
5771 F: include/scsi/srp.h 5771 F: include/scsi/srp.h
5772 5772
5773 SCSI SG DRIVER 5773 SCSI SG DRIVER
5774 M: Doug Gilbert <dgilbert@interlog.com> 5774 M: Doug Gilbert <dgilbert@interlog.com>
5775 L: linux-scsi@vger.kernel.org 5775 L: linux-scsi@vger.kernel.org
5776 W: http://www.torque.net/sg 5776 W: http://www.torque.net/sg
5777 S: Maintained 5777 S: Maintained
5778 F: drivers/scsi/sg.c 5778 F: drivers/scsi/sg.c
5779 F: include/scsi/sg.h 5779 F: include/scsi/sg.h
5780 5780
5781 SCSI SUBSYSTEM 5781 SCSI SUBSYSTEM
5782 M: "James E.J. Bottomley" <JBottomley@parallels.com> 5782 M: "James E.J. Bottomley" <JBottomley@parallels.com>
5783 L: linux-scsi@vger.kernel.org 5783 L: linux-scsi@vger.kernel.org
5784 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git 5784 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
5785 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6.git 5785 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6.git
5786 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-pending-2.6.git 5786 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-pending-2.6.git
5787 S: Maintained 5787 S: Maintained
5788 F: drivers/scsi/ 5788 F: drivers/scsi/
5789 F: include/scsi/ 5789 F: include/scsi/
5790 5790
5791 SCSI TAPE DRIVER 5791 SCSI TAPE DRIVER
5792 M: Kai Mรคkisara <Kai.Makisara@kolumbus.fi> 5792 M: Kai Mรคkisara <Kai.Makisara@kolumbus.fi>
5793 L: linux-scsi@vger.kernel.org 5793 L: linux-scsi@vger.kernel.org
5794 S: Maintained 5794 S: Maintained
5795 F: Documentation/scsi/st.txt 5795 F: Documentation/scsi/st.txt
5796 F: drivers/scsi/st* 5796 F: drivers/scsi/st*
5797 5797
5798 SCTP PROTOCOL 5798 SCTP PROTOCOL
5799 M: Vlad Yasevich <vladislav.yasevich@hp.com> 5799 M: Vlad Yasevich <vladislav.yasevich@hp.com>
5800 M: Sridhar Samudrala <sri@us.ibm.com> 5800 M: Sridhar Samudrala <sri@us.ibm.com>
5801 L: linux-sctp@vger.kernel.org 5801 L: linux-sctp@vger.kernel.org
5802 W: http://lksctp.sourceforge.net 5802 W: http://lksctp.sourceforge.net
5803 S: Supported 5803 S: Supported
5804 F: Documentation/networking/sctp.txt 5804 F: Documentation/networking/sctp.txt
5805 F: include/linux/sctp.h 5805 F: include/linux/sctp.h
5806 F: include/net/sctp/ 5806 F: include/net/sctp/
5807 F: net/sctp/ 5807 F: net/sctp/
5808 5808
5809 SCx200 CPU SUPPORT 5809 SCx200 CPU SUPPORT
5810 M: Jim Cromie <jim.cromie@gmail.com> 5810 M: Jim Cromie <jim.cromie@gmail.com>
5811 S: Odd Fixes 5811 S: Odd Fixes
5812 F: Documentation/i2c/busses/scx200_acb 5812 F: Documentation/i2c/busses/scx200_acb
5813 F: arch/x86/platform/scx200/ 5813 F: arch/x86/platform/scx200/
5814 F: drivers/watchdog/scx200_wdt.c 5814 F: drivers/watchdog/scx200_wdt.c
5815 F: drivers/i2c/busses/scx200* 5815 F: drivers/i2c/busses/scx200*
5816 F: drivers/mtd/maps/scx200_docflash.c 5816 F: drivers/mtd/maps/scx200_docflash.c
5817 F: include/linux/scx200.h 5817 F: include/linux/scx200.h
5818 5818
5819 SCx200 GPIO DRIVER 5819 SCx200 GPIO DRIVER
5820 M: Jim Cromie <jim.cromie@gmail.com> 5820 M: Jim Cromie <jim.cromie@gmail.com>
5821 S: Maintained 5821 S: Maintained
5822 F: drivers/char/scx200_gpio.c 5822 F: drivers/char/scx200_gpio.c
5823 F: include/linux/scx200_gpio.h 5823 F: include/linux/scx200_gpio.h
5824 5824
5825 SCx200 HRT CLOCKSOURCE DRIVER 5825 SCx200 HRT CLOCKSOURCE DRIVER
5826 M: Jim Cromie <jim.cromie@gmail.com> 5826 M: Jim Cromie <jim.cromie@gmail.com>
5827 S: Maintained 5827 S: Maintained
5828 F: drivers/clocksource/scx200_hrt.c 5828 F: drivers/clocksource/scx200_hrt.c
5829 5829
5830 SDRICOH_CS MMC/SD HOST CONTROLLER INTERFACE DRIVER 5830 SDRICOH_CS MMC/SD HOST CONTROLLER INTERFACE DRIVER
5831 M: Sascha Sommer <saschasommer@freenet.de> 5831 M: Sascha Sommer <saschasommer@freenet.de>
5832 L: sdricohcs-devel@lists.sourceforge.net (subscribers-only) 5832 L: sdricohcs-devel@lists.sourceforge.net (subscribers-only)
5833 S: Maintained 5833 S: Maintained
5834 F: drivers/mmc/host/sdricoh_cs.c 5834 F: drivers/mmc/host/sdricoh_cs.c
5835 5835
5836 SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) DRIVER 5836 SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) DRIVER
5837 M: Chris Ball <cjb@laptop.org> 5837 M: Chris Ball <cjb@laptop.org>
5838 L: linux-mmc@vger.kernel.org 5838 L: linux-mmc@vger.kernel.org
5839 T: git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git 5839 T: git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git
5840 S: Maintained 5840 S: Maintained
5841 F: drivers/mmc/host/sdhci.* 5841 F: drivers/mmc/host/sdhci.*
5842 F: drivers/mmc/host/sdhci-pltfm.[ch] 5842 F: drivers/mmc/host/sdhci-pltfm.[ch]
5843 5843
5844 SECURE DIGITAL HOST CONTROLLER INTERFACE, OPEN FIRMWARE BINDINGS (SDHCI-OF) 5844 SECURE DIGITAL HOST CONTROLLER INTERFACE, OPEN FIRMWARE BINDINGS (SDHCI-OF)
5845 M: Anton Vorontsov <avorontsov@ru.mvista.com> 5845 M: Anton Vorontsov <avorontsov@ru.mvista.com>
5846 L: linuxppc-dev@lists.ozlabs.org 5846 L: linuxppc-dev@lists.ozlabs.org
5847 L: linux-mmc@vger.kernel.org 5847 L: linux-mmc@vger.kernel.org
5848 S: Maintained 5848 S: Maintained
5849 F: drivers/mmc/host/sdhci-pltfm.[ch] 5849 F: drivers/mmc/host/sdhci-pltfm.[ch]
5850 5850
5851 SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) SAMSUNG DRIVER 5851 SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) SAMSUNG DRIVER
5852 M: Ben Dooks <ben-linux@fluff.org> 5852 M: Ben Dooks <ben-linux@fluff.org>
5853 L: linux-mmc@vger.kernel.org 5853 L: linux-mmc@vger.kernel.org
5854 S: Maintained 5854 S: Maintained
5855 F: drivers/mmc/host/sdhci-s3c.c 5855 F: drivers/mmc/host/sdhci-s3c.c
5856 5856
5857 SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) ST SPEAR DRIVER 5857 SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) ST SPEAR DRIVER
5858 M: Viresh Kumar <viresh.kumar@st.com> 5858 M: Viresh Kumar <viresh.kumar@st.com>
5859 L: linux-mmc@vger.kernel.org 5859 L: linux-mmc@vger.kernel.org
5860 S: Maintained 5860 S: Maintained
5861 F: drivers/mmc/host/sdhci-spear.c 5861 F: drivers/mmc/host/sdhci-spear.c
5862 5862
5863 SECURITY SUBSYSTEM 5863 SECURITY SUBSYSTEM
5864 M: James Morris <jmorris@namei.org> 5864 M: James Morris <jmorris@namei.org>
5865 L: linux-security-module@vger.kernel.org (suggested Cc:) 5865 L: linux-security-module@vger.kernel.org (suggested Cc:)
5866 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git 5866 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
5867 W: http://security.wiki.kernel.org/ 5867 W: http://security.wiki.kernel.org/
5868 S: Supported 5868 S: Supported
5869 F: security/ 5869 F: security/
5870 5870
5871 SECURITY CONTACT 5871 SECURITY CONTACT
5872 M: Security Officers <security@kernel.org> 5872 M: Security Officers <security@kernel.org>
5873 S: Supported 5873 S: Supported
5874 5874
5875 SELINUX SECURITY MODULE 5875 SELINUX SECURITY MODULE
5876 M: Stephen Smalley <sds@tycho.nsa.gov> 5876 M: Stephen Smalley <sds@tycho.nsa.gov>
5877 M: James Morris <jmorris@namei.org> 5877 M: James Morris <jmorris@namei.org>
5878 M: Eric Paris <eparis@parisplace.org> 5878 M: Eric Paris <eparis@parisplace.org>
5879 L: selinux@tycho.nsa.gov (subscribers-only, general discussion) 5879 L: selinux@tycho.nsa.gov (subscribers-only, general discussion)
5880 W: http://selinuxproject.org 5880 W: http://selinuxproject.org
5881 T: git git://git.infradead.org/users/eparis/selinux.git 5881 T: git git://git.infradead.org/users/eparis/selinux.git
5882 S: Supported 5882 S: Supported
5883 F: include/linux/selinux* 5883 F: include/linux/selinux*
5884 F: security/selinux/ 5884 F: security/selinux/
5885 F: scripts/selinux/ 5885 F: scripts/selinux/
5886 5886
5887 APPARMOR SECURITY MODULE 5887 APPARMOR SECURITY MODULE
5888 M: John Johansen <john.johansen@canonical.com> 5888 M: John Johansen <john.johansen@canonical.com>
5889 L: apparmor@lists.ubuntu.com (subscribers-only, general discussion) 5889 L: apparmor@lists.ubuntu.com (subscribers-only, general discussion)
5890 W: apparmor.wiki.kernel.org 5890 W: apparmor.wiki.kernel.org
5891 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jj/apparmor-dev.git 5891 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jj/apparmor-dev.git
5892 S: Supported 5892 S: Supported
5893 F: security/apparmor/ 5893 F: security/apparmor/
5894 5894
5895 SENSABLE PHANTOM 5895 SENSABLE PHANTOM
5896 M: Jiri Slaby <jirislaby@gmail.com> 5896 M: Jiri Slaby <jirislaby@gmail.com>
5897 S: Maintained 5897 S: Maintained
5898 F: drivers/misc/phantom.c 5898 F: drivers/misc/phantom.c
5899 F: include/linux/phantom.h 5899 F: include/linux/phantom.h
5900 5900
5901 SERIAL ATA (SATA) SUBSYSTEM 5901 SERIAL ATA (SATA) SUBSYSTEM
5902 M: Jeff Garzik <jgarzik@pobox.com> 5902 M: Jeff Garzik <jgarzik@pobox.com>
5903 L: linux-ide@vger.kernel.org 5903 L: linux-ide@vger.kernel.org
5904 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev.git 5904 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev.git
5905 S: Supported 5905 S: Supported
5906 F: drivers/ata/ 5906 F: drivers/ata/
5907 F: include/linux/ata.h 5907 F: include/linux/ata.h
5908 F: include/linux/libata.h 5908 F: include/linux/libata.h
5909 5909
5910 SERVER ENGINES 10Gbps iSCSI - BladeEngine 2 DRIVER 5910 SERVER ENGINES 10Gbps iSCSI - BladeEngine 2 DRIVER
5911 M: Jayamohan Kallickal <jayamohan.kallickal@emulex.com> 5911 M: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
5912 L: linux-scsi@vger.kernel.org 5912 L: linux-scsi@vger.kernel.org
5913 W: http://www.emulex.com 5913 W: http://www.emulex.com
5914 S: Supported 5914 S: Supported
5915 F: drivers/scsi/be2iscsi/ 5915 F: drivers/scsi/be2iscsi/
5916 5916
5917 SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER 5917 SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER
5918 M: Sathya Perla <sathya.perla@emulex.com> 5918 M: Sathya Perla <sathya.perla@emulex.com>
5919 M: Subbu Seetharaman <subbu.seetharaman@emulex.com> 5919 M: Subbu Seetharaman <subbu.seetharaman@emulex.com>
5920 M: Ajit Khaparde <ajit.khaparde@emulex.com> 5920 M: Ajit Khaparde <ajit.khaparde@emulex.com>
5921 L: netdev@vger.kernel.org 5921 L: netdev@vger.kernel.org
5922 W: http://www.emulex.com 5922 W: http://www.emulex.com
5923 S: Supported 5923 S: Supported
5924 F: drivers/net/ethernet/emulex/benet/ 5924 F: drivers/net/ethernet/emulex/benet/
5925 5925
5926 SFC NETWORK DRIVER 5926 SFC NETWORK DRIVER
5927 M: Solarflare linux maintainers <linux-net-drivers@solarflare.com> 5927 M: Solarflare linux maintainers <linux-net-drivers@solarflare.com>
5928 M: Ben Hutchings <bhutchings@solarflare.com> 5928 M: Ben Hutchings <bhutchings@solarflare.com>
5929 L: netdev@vger.kernel.org 5929 L: netdev@vger.kernel.org
5930 S: Supported 5930 S: Supported
5931 F: drivers/net/ethernet/sfc/ 5931 F: drivers/net/ethernet/sfc/
5932 5932
5933 SGI GRU DRIVER 5933 SGI GRU DRIVER
5934 M: Jack Steiner <steiner@sgi.com> 5934 M: Jack Steiner <steiner@sgi.com>
5935 S: Maintained 5935 S: Maintained
5936 F: drivers/misc/sgi-gru/ 5936 F: drivers/misc/sgi-gru/
5937 5937
5938 SGI SN-IA64 (Altix) SERIAL CONSOLE DRIVER 5938 SGI SN-IA64 (Altix) SERIAL CONSOLE DRIVER
5939 M: Pat Gefre <pfg@sgi.com> 5939 M: Pat Gefre <pfg@sgi.com>
5940 L: linux-ia64@vger.kernel.org 5940 L: linux-ia64@vger.kernel.org
5941 S: Supported 5941 S: Supported
5942 F: Documentation/ia64/serial.txt 5942 F: Documentation/ia64/serial.txt
5943 F: drivers/tty/serial/ioc?_serial.c 5943 F: drivers/tty/serial/ioc?_serial.c
5944 F: include/linux/ioc?.h 5944 F: include/linux/ioc?.h
5945 5945
5946 SGI VISUAL WORKSTATION 320 AND 540 5946 SGI VISUAL WORKSTATION 320 AND 540
5947 M: Andrey Panin <pazke@donpac.ru> 5947 M: Andrey Panin <pazke@donpac.ru>
5948 L: linux-visws-devel@lists.sf.net 5948 L: linux-visws-devel@lists.sf.net
5949 W: http://linux-visws.sf.net 5949 W: http://linux-visws.sf.net
5950 S: Maintained for 2.6. 5950 S: Maintained for 2.6.
5951 F: Documentation/sgi-visws.txt 5951 F: Documentation/sgi-visws.txt
5952 5952
5953 SGI XP/XPC/XPNET DRIVER 5953 SGI XP/XPC/XPNET DRIVER
5954 M: Robin Holt <holt@sgi.com> 5954 M: Robin Holt <holt@sgi.com>
5955 S: Maintained 5955 S: Maintained
5956 F: drivers/misc/sgi-xp/ 5956 F: drivers/misc/sgi-xp/
5957 5957
5958 SIMPLE FIRMWARE INTERFACE (SFI) 5958 SIMPLE FIRMWARE INTERFACE (SFI)
5959 M: Len Brown <lenb@kernel.org> 5959 M: Len Brown <lenb@kernel.org>
5960 L: sfi-devel@simplefirmware.org 5960 L: sfi-devel@simplefirmware.org
5961 W: http://simplefirmware.org/ 5961 W: http://simplefirmware.org/
5962 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-sfi-2.6.git 5962 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-sfi-2.6.git
5963 S: Supported 5963 S: Supported
5964 F: arch/x86/platform/sfi/ 5964 F: arch/x86/platform/sfi/
5965 F: drivers/sfi/ 5965 F: drivers/sfi/
5966 F: include/linux/sfi*.h 5966 F: include/linux/sfi*.h
5967 5967
5968 SIMTEC EB110ATX (Chalice CATS) 5968 SIMTEC EB110ATX (Chalice CATS)
5969 P: Ben Dooks 5969 P: Ben Dooks
5970 P: Vincent Sanders <vince@simtec.co.uk> 5970 P: Vincent Sanders <vince@simtec.co.uk>
5971 M: Simtec Linux Team <linux@simtec.co.uk> 5971 M: Simtec Linux Team <linux@simtec.co.uk>
5972 W: http://www.simtec.co.uk/products/EB110ATX/ 5972 W: http://www.simtec.co.uk/products/EB110ATX/
5973 S: Supported 5973 S: Supported
5974 5974
5975 SIMTEC EB2410ITX (BAST) 5975 SIMTEC EB2410ITX (BAST)
5976 P: Ben Dooks 5976 P: Ben Dooks
5977 P: Vincent Sanders <vince@simtec.co.uk> 5977 P: Vincent Sanders <vince@simtec.co.uk>
5978 M: Simtec Linux Team <linux@simtec.co.uk> 5978 M: Simtec Linux Team <linux@simtec.co.uk>
5979 W: http://www.simtec.co.uk/products/EB2410ITX/ 5979 W: http://www.simtec.co.uk/products/EB2410ITX/
5980 S: Supported 5980 S: Supported
5981 F: arch/arm/mach-s3c2410/mach-bast.c 5981 F: arch/arm/mach-s3c2410/mach-bast.c
5982 F: arch/arm/mach-s3c2410/bast-ide.c 5982 F: arch/arm/mach-s3c2410/bast-ide.c
5983 F: arch/arm/mach-s3c2410/bast-irq.c 5983 F: arch/arm/mach-s3c2410/bast-irq.c
5984 5984
5985 TI DAVINCI MACHINE SUPPORT 5985 TI DAVINCI MACHINE SUPPORT
5986 M: Sekhar Nori <nsekhar@ti.com> 5986 M: Sekhar Nori <nsekhar@ti.com>
5987 M: Kevin Hilman <khilman@ti.com> 5987 M: Kevin Hilman <khilman@ti.com>
5988 L: davinci-linux-open-source@linux.davincidsp.com (subscribers-only) 5988 L: davinci-linux-open-source@linux.davincidsp.com (subscribers-only)
5989 Q: http://patchwork.kernel.org/project/linux-davinci/list/ 5989 Q: http://patchwork.kernel.org/project/linux-davinci/list/
5990 S: Supported 5990 S: Supported
5991 F: arch/arm/mach-davinci 5991 F: arch/arm/mach-davinci
5992 F: drivers/i2c/busses/i2c-davinci.c 5992 F: drivers/i2c/busses/i2c-davinci.c
5993 5993
5994 SIS 190 ETHERNET DRIVER 5994 SIS 190 ETHERNET DRIVER
5995 M: Francois Romieu <romieu@fr.zoreil.com> 5995 M: Francois Romieu <romieu@fr.zoreil.com>
5996 L: netdev@vger.kernel.org 5996 L: netdev@vger.kernel.org
5997 S: Maintained 5997 S: Maintained
5998 F: drivers/net/ethernet/sis/sis190.c 5998 F: drivers/net/ethernet/sis/sis190.c
5999 5999
6000 SIS 900/7016 FAST ETHERNET DRIVER 6000 SIS 900/7016 FAST ETHERNET DRIVER
6001 M: Daniele Venzano <venza@brownhat.org> 6001 M: Daniele Venzano <venza@brownhat.org>
6002 W: http://www.brownhat.org/sis900.html 6002 W: http://www.brownhat.org/sis900.html
6003 L: netdev@vger.kernel.org 6003 L: netdev@vger.kernel.org
6004 S: Maintained 6004 S: Maintained
6005 F: drivers/net/ethernet/sis/sis900.* 6005 F: drivers/net/ethernet/sis/sis900.*
6006 6006
6007 SIS 96X I2C/SMBUS DRIVER 6007 SIS 96X I2C/SMBUS DRIVER
6008 M: "Mark M. Hoffman" <mhoffman@lightlink.com> 6008 M: "Mark M. Hoffman" <mhoffman@lightlink.com>
6009 L: linux-i2c@vger.kernel.org 6009 L: linux-i2c@vger.kernel.org
6010 S: Maintained 6010 S: Maintained
6011 F: Documentation/i2c/busses/i2c-sis96x 6011 F: Documentation/i2c/busses/i2c-sis96x
6012 F: drivers/i2c/busses/i2c-sis96x.c 6012 F: drivers/i2c/busses/i2c-sis96x.c
6013 6013
6014 SIS FRAMEBUFFER DRIVER 6014 SIS FRAMEBUFFER DRIVER
6015 M: Thomas Winischhofer <thomas@winischhofer.net> 6015 M: Thomas Winischhofer <thomas@winischhofer.net>
6016 W: http://www.winischhofer.net/linuxsisvga.shtml 6016 W: http://www.winischhofer.net/linuxsisvga.shtml
6017 S: Maintained 6017 S: Maintained
6018 F: Documentation/fb/sisfb.txt 6018 F: Documentation/fb/sisfb.txt
6019 F: drivers/video/sis/ 6019 F: drivers/video/sis/
6020 F: include/video/sisfb.h 6020 F: include/video/sisfb.h
6021 6021
6022 SIS USB2VGA DRIVER 6022 SIS USB2VGA DRIVER
6023 M: Thomas Winischhofer <thomas@winischhofer.net> 6023 M: Thomas Winischhofer <thomas@winischhofer.net>
6024 W: http://www.winischhofer.at/linuxsisusbvga.shtml 6024 W: http://www.winischhofer.at/linuxsisusbvga.shtml
6025 S: Maintained 6025 S: Maintained
6026 F: drivers/usb/misc/sisusbvga/ 6026 F: drivers/usb/misc/sisusbvga/
6027 6027
6028 SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS 6028 SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
6029 M: Stephen Hemminger <shemminger@vyatta.com> 6029 M: Stephen Hemminger <shemminger@vyatta.com>
6030 L: netdev@vger.kernel.org 6030 L: netdev@vger.kernel.org
6031 S: Maintained 6031 S: Maintained
6032 F: drivers/net/ethernet/marvell/sk* 6032 F: drivers/net/ethernet/marvell/sk*
6033 6033
6034 SLAB ALLOCATOR 6034 SLAB ALLOCATOR
6035 M: Christoph Lameter <cl@linux-foundation.org> 6035 M: Christoph Lameter <cl@linux-foundation.org>
6036 M: Pekka Enberg <penberg@kernel.org> 6036 M: Pekka Enberg <penberg@kernel.org>
6037 M: Matt Mackall <mpm@selenic.com> 6037 M: Matt Mackall <mpm@selenic.com>
6038 L: linux-mm@kvack.org 6038 L: linux-mm@kvack.org
6039 S: Maintained 6039 S: Maintained
6040 F: include/linux/sl?b*.h 6040 F: include/linux/sl?b*.h
6041 F: mm/sl?b.c 6041 F: mm/sl?b.c
6042 6042
6043 SMC91x ETHERNET DRIVER 6043 SMC91x ETHERNET DRIVER
6044 M: Nicolas Pitre <nico@fluxnic.net> 6044 M: Nicolas Pitre <nico@fluxnic.net>
6045 S: Odd Fixes 6045 S: Odd Fixes
6046 F: drivers/net/ethernet/smsc/smc91x.* 6046 F: drivers/net/ethernet/smsc/smc91x.*
6047 6047
6048 SMM665 HARDWARE MONITOR DRIVER 6048 SMM665 HARDWARE MONITOR DRIVER
6049 M: Guenter Roeck <linux@roeck-us.net> 6049 M: Guenter Roeck <linux@roeck-us.net>
6050 L: lm-sensors@lm-sensors.org 6050 L: lm-sensors@lm-sensors.org
6051 S: Maintained 6051 S: Maintained
6052 F: Documentation/hwmon/smm665 6052 F: Documentation/hwmon/smm665
6053 F: drivers/hwmon/smm665.c 6053 F: drivers/hwmon/smm665.c
6054 6054
6055 SMSC EMC2103 HARDWARE MONITOR DRIVER 6055 SMSC EMC2103 HARDWARE MONITOR DRIVER
6056 M: Steve Glendinning <steve.glendinning@smsc.com> 6056 M: Steve Glendinning <steve.glendinning@smsc.com>
6057 L: lm-sensors@lm-sensors.org 6057 L: lm-sensors@lm-sensors.org
6058 S: Supported 6058 S: Supported
6059 F: Documentation/hwmon/emc2103 6059 F: Documentation/hwmon/emc2103
6060 F: drivers/hwmon/emc2103.c 6060 F: drivers/hwmon/emc2103.c
6061 6061
6062 SMSC SCH5627 HARDWARE MONITOR DRIVER 6062 SMSC SCH5627 HARDWARE MONITOR DRIVER
6063 M: Hans de Goede <hdegoede@redhat.com> 6063 M: Hans de Goede <hdegoede@redhat.com>
6064 L: lm-sensors@lm-sensors.org 6064 L: lm-sensors@lm-sensors.org
6065 S: Supported 6065 S: Supported
6066 F: Documentation/hwmon/sch5627 6066 F: Documentation/hwmon/sch5627
6067 F: drivers/hwmon/sch5627.c 6067 F: drivers/hwmon/sch5627.c
6068 6068
6069 SMSC47B397 HARDWARE MONITOR DRIVER 6069 SMSC47B397 HARDWARE MONITOR DRIVER
6070 M: "Mark M. Hoffman" <mhoffman@lightlink.com> 6070 M: "Mark M. Hoffman" <mhoffman@lightlink.com>
6071 L: lm-sensors@lm-sensors.org 6071 L: lm-sensors@lm-sensors.org
6072 S: Maintained 6072 S: Maintained
6073 F: Documentation/hwmon/smsc47b397 6073 F: Documentation/hwmon/smsc47b397
6074 F: drivers/hwmon/smsc47b397.c 6074 F: drivers/hwmon/smsc47b397.c
6075 6075
6076 SMSC911x ETHERNET DRIVER 6076 SMSC911x ETHERNET DRIVER
6077 M: Steve Glendinning <steve.glendinning@smsc.com> 6077 M: Steve Glendinning <steve.glendinning@smsc.com>
6078 L: netdev@vger.kernel.org 6078 L: netdev@vger.kernel.org
6079 S: Supported 6079 S: Supported
6080 F: include/linux/smsc911x.h 6080 F: include/linux/smsc911x.h
6081 F: drivers/net/ethernet/smsc/smsc911x.* 6081 F: drivers/net/ethernet/smsc/smsc911x.*
6082 6082
6083 SMSC9420 PCI ETHERNET DRIVER 6083 SMSC9420 PCI ETHERNET DRIVER
6084 M: Steve Glendinning <steve.glendinning@smsc.com> 6084 M: Steve Glendinning <steve.glendinning@smsc.com>
6085 L: netdev@vger.kernel.org 6085 L: netdev@vger.kernel.org
6086 S: Supported 6086 S: Supported
6087 F: drivers/net/ethernet/smsc/smsc9420.* 6087 F: drivers/net/ethernet/smsc/smsc9420.*
6088 6088
6089 SMSC UFX6000 and UFX7000 USB to VGA DRIVER 6089 SMSC UFX6000 and UFX7000 USB to VGA DRIVER
6090 M: Steve Glendinning <steve.glendinning@smsc.com> 6090 M: Steve Glendinning <steve.glendinning@smsc.com>
6091 L: linux-fbdev@vger.kernel.org 6091 L: linux-fbdev@vger.kernel.org
6092 S: Supported 6092 S: Supported
6093 F: drivers/video/smscufx.c 6093 F: drivers/video/smscufx.c
6094 6094
6095 SN-IA64 (Itanium) SUB-PLATFORM 6095 SN-IA64 (Itanium) SUB-PLATFORM
6096 M: Jes Sorensen <jes@sgi.com> 6096 M: Jes Sorensen <jes@sgi.com>
6097 L: linux-altix@sgi.com 6097 L: linux-altix@sgi.com
6098 L: linux-ia64@vger.kernel.org 6098 L: linux-ia64@vger.kernel.org
6099 W: http://www.sgi.com/altix 6099 W: http://www.sgi.com/altix
6100 S: Maintained 6100 S: Maintained
6101 F: arch/ia64/sn/ 6101 F: arch/ia64/sn/
6102 6102
6103 SOC-CAMERA V4L2 SUBSYSTEM 6103 SOC-CAMERA V4L2 SUBSYSTEM
6104 M: Guennadi Liakhovetski <g.liakhovetski@gmx.de> 6104 M: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
6105 L: linux-media@vger.kernel.org 6105 L: linux-media@vger.kernel.org
6106 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 6106 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
6107 S: Maintained 6107 S: Maintained
6108 F: include/media/v4l2* 6108 F: include/media/v4l2*
6109 F: drivers/media/video/v4l2* 6109 F: drivers/media/video/v4l2*
6110 6110
6111 SOEKRIS NET48XX LED SUPPORT 6111 SOEKRIS NET48XX LED SUPPORT
6112 M: Chris Boot <bootc@bootc.net> 6112 M: Chris Boot <bootc@bootc.net>
6113 S: Maintained 6113 S: Maintained
6114 F: drivers/leds/leds-net48xx.c 6114 F: drivers/leds/leds-net48xx.c
6115 6115
6116 SOFTWARE RAID (Multiple Disks) SUPPORT 6116 SOFTWARE RAID (Multiple Disks) SUPPORT
6117 M: Neil Brown <neilb@suse.de> 6117 M: Neil Brown <neilb@suse.de>
6118 L: linux-raid@vger.kernel.org 6118 L: linux-raid@vger.kernel.org
6119 S: Supported 6119 S: Supported
6120 F: drivers/md/ 6120 F: drivers/md/
6121 F: include/linux/raid/ 6121 F: include/linux/raid/
6122 6122
6123 SONIC NETWORK DRIVER 6123 SONIC NETWORK DRIVER
6124 M: Thomas Bogendoerfer <tsbogend@alpha.franken.de> 6124 M: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
6125 L: netdev@vger.kernel.org 6125 L: netdev@vger.kernel.org
6126 S: Maintained 6126 S: Maintained
6127 F: drivers/net/ethernet/natsemi/sonic.* 6127 F: drivers/net/ethernet/natsemi/sonic.*
6128 6128
6129 SONICS SILICON BACKPLANE DRIVER (SSB) 6129 SONICS SILICON BACKPLANE DRIVER (SSB)
6130 M: Michael Buesch <m@bues.ch> 6130 M: Michael Buesch <m@bues.ch>
6131 L: netdev@vger.kernel.org 6131 L: netdev@vger.kernel.org
6132 S: Maintained 6132 S: Maintained
6133 F: drivers/ssb/ 6133 F: drivers/ssb/
6134 F: include/linux/ssb/ 6134 F: include/linux/ssb/
6135 6135
6136 SONY VAIO CONTROL DEVICE DRIVER 6136 SONY VAIO CONTROL DEVICE DRIVER
6137 M: Mattia Dongili <malattia@linux.it> 6137 M: Mattia Dongili <malattia@linux.it>
6138 L: platform-driver-x86@vger.kernel.org 6138 L: platform-driver-x86@vger.kernel.org
6139 W: http://www.linux.it/~malattia/wiki/index.php/Sony_drivers 6139 W: http://www.linux.it/~malattia/wiki/index.php/Sony_drivers
6140 S: Maintained 6140 S: Maintained
6141 F: Documentation/laptops/sony-laptop.txt 6141 F: Documentation/laptops/sony-laptop.txt
6142 F: drivers/char/sonypi.c 6142 F: drivers/char/sonypi.c
6143 F: drivers/platform/x86/sony-laptop.c 6143 F: drivers/platform/x86/sony-laptop.c
6144 F: include/linux/sony-laptop.h 6144 F: include/linux/sony-laptop.h
6145 6145
6146 SONY MEMORYSTICK CARD SUPPORT 6146 SONY MEMORYSTICK CARD SUPPORT
6147 M: Alex Dubov <oakad@yahoo.com> 6147 M: Alex Dubov <oakad@yahoo.com>
6148 W: http://tifmxx.berlios.de/ 6148 W: http://tifmxx.berlios.de/
6149 S: Maintained 6149 S: Maintained
6150 F: drivers/memstick/host/tifm_ms.c 6150 F: drivers/memstick/host/tifm_ms.c
6151 6151
6152 SOUND 6152 SOUND
6153 M: Jaroslav Kysela <perex@perex.cz> 6153 M: Jaroslav Kysela <perex@perex.cz>
6154 M: Takashi Iwai <tiwai@suse.de> 6154 M: Takashi Iwai <tiwai@suse.de>
6155 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 6155 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
6156 W: http://www.alsa-project.org/ 6156 W: http://www.alsa-project.org/
6157 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git 6157 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
6158 T: git git://git.alsa-project.org/alsa-kernel.git 6158 T: git git://git.alsa-project.org/alsa-kernel.git
6159 S: Maintained 6159 S: Maintained
6160 F: Documentation/sound/ 6160 F: Documentation/sound/
6161 F: include/sound/ 6161 F: include/sound/
6162 F: sound/ 6162 F: sound/
6163 6163
6164 SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC) 6164 SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC)
6165 M: Liam Girdwood <lrg@ti.com> 6165 M: Liam Girdwood <lrg@ti.com>
6166 M: Mark Brown <broonie@opensource.wolfsonmicro.com> 6166 M: Mark Brown <broonie@opensource.wolfsonmicro.com>
6167 T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 6167 T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
6168 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 6168 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
6169 W: http://alsa-project.org/main/index.php/ASoC 6169 W: http://alsa-project.org/main/index.php/ASoC
6170 S: Supported 6170 S: Supported
6171 F: sound/soc/ 6171 F: sound/soc/
6172 F: include/sound/soc* 6172 F: include/sound/soc*
6173 6173
6174 SPARC + UltraSPARC (sparc/sparc64) 6174 SPARC + UltraSPARC (sparc/sparc64)
6175 M: "David S. Miller" <davem@davemloft.net> 6175 M: "David S. Miller" <davem@davemloft.net>
6176 L: sparclinux@vger.kernel.org 6176 L: sparclinux@vger.kernel.org
6177 Q: http://patchwork.ozlabs.org/project/sparclinux/list/ 6177 Q: http://patchwork.ozlabs.org/project/sparclinux/list/
6178 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git 6178 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git
6179 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git 6179 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git
6180 S: Maintained 6180 S: Maintained
6181 F: arch/sparc/ 6181 F: arch/sparc/
6182 F: drivers/sbus/ 6182 F: drivers/sbus/
6183 6183
6184 SPARC SERIAL DRIVERS 6184 SPARC SERIAL DRIVERS
6185 M: "David S. Miller" <davem@davemloft.net> 6185 M: "David S. Miller" <davem@davemloft.net>
6186 L: sparclinux@vger.kernel.org 6186 L: sparclinux@vger.kernel.org
6187 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git 6187 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git
6188 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git 6188 T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git
6189 S: Maintained 6189 S: Maintained
6190 F: include/linux/sunserialcore.h
6190 F: drivers/tty/serial/suncore.c 6191 F: drivers/tty/serial/suncore.c
6191 F: drivers/tty/serial/suncore.h
6192 F: drivers/tty/serial/sunhv.c 6192 F: drivers/tty/serial/sunhv.c
6193 F: drivers/tty/serial/sunsab.c 6193 F: drivers/tty/serial/sunsab.c
6194 F: drivers/tty/serial/sunsab.h 6194 F: drivers/tty/serial/sunsab.h
6195 F: drivers/tty/serial/sunsu.c 6195 F: drivers/tty/serial/sunsu.c
6196 F: drivers/tty/serial/sunzilog.c 6196 F: drivers/tty/serial/sunzilog.c
6197 F: drivers/tty/serial/sunzilog.h 6197 F: drivers/tty/serial/sunzilog.h
6198 6198
6199 SPEAR PLATFORM SUPPORT 6199 SPEAR PLATFORM SUPPORT
6200 M: Viresh Kumar <viresh.kumar@st.com> 6200 M: Viresh Kumar <viresh.kumar@st.com>
6201 W: http://www.st.com/spear 6201 W: http://www.st.com/spear
6202 S: Maintained 6202 S: Maintained
6203 F: arch/arm/plat-spear/ 6203 F: arch/arm/plat-spear/
6204 6204
6205 SPEAR3XX MACHINE SUPPORT 6205 SPEAR3XX MACHINE SUPPORT
6206 M: Viresh Kumar <viresh.kumar@st.com> 6206 M: Viresh Kumar <viresh.kumar@st.com>
6207 W: http://www.st.com/spear 6207 W: http://www.st.com/spear
6208 S: Maintained 6208 S: Maintained
6209 F: arch/arm/mach-spear3xx/ 6209 F: arch/arm/mach-spear3xx/
6210 6210
6211 SPEAR6XX MACHINE SUPPORT 6211 SPEAR6XX MACHINE SUPPORT
6212 M: Rajeev Kumar <rajeev-dlh.kumar@st.com> 6212 M: Rajeev Kumar <rajeev-dlh.kumar@st.com>
6213 W: http://www.st.com/spear 6213 W: http://www.st.com/spear
6214 S: Maintained 6214 S: Maintained
6215 F: arch/arm/mach-spear6xx/ 6215 F: arch/arm/mach-spear6xx/
6216 6216
6217 SPEAR CLOCK FRAMEWORK SUPPORT 6217 SPEAR CLOCK FRAMEWORK SUPPORT
6218 M: Viresh Kumar <viresh.kumar@st.com> 6218 M: Viresh Kumar <viresh.kumar@st.com>
6219 W: http://www.st.com/spear 6219 W: http://www.st.com/spear
6220 S: Maintained 6220 S: Maintained
6221 F: arch/arm/mach-spear*/clock.c 6221 F: arch/arm/mach-spear*/clock.c
6222 F: arch/arm/plat-spear/clock.c 6222 F: arch/arm/plat-spear/clock.c
6223 F: arch/arm/plat-spear/include/plat/clock.h 6223 F: arch/arm/plat-spear/include/plat/clock.h
6224 6224
6225 SPEAR PAD MULTIPLEXING SUPPORT 6225 SPEAR PAD MULTIPLEXING SUPPORT
6226 M: Viresh Kumar <viresh.kumar@st.com> 6226 M: Viresh Kumar <viresh.kumar@st.com>
6227 W: http://www.st.com/spear 6227 W: http://www.st.com/spear
6228 S: Maintained 6228 S: Maintained
6229 F: arch/arm/plat-spear/include/plat/padmux.h 6229 F: arch/arm/plat-spear/include/plat/padmux.h
6230 F: arch/arm/plat-spear/padmux.c 6230 F: arch/arm/plat-spear/padmux.c
6231 F: arch/arm/mach-spear*/spear*xx.c 6231 F: arch/arm/mach-spear*/spear*xx.c
6232 F: arch/arm/mach-spear*/include/mach/generic.h 6232 F: arch/arm/mach-spear*/include/mach/generic.h
6233 F: arch/arm/mach-spear3xx/spear3*0.c 6233 F: arch/arm/mach-spear3xx/spear3*0.c
6234 F: arch/arm/mach-spear3xx/spear3*0_evb.c 6234 F: arch/arm/mach-spear3xx/spear3*0_evb.c
6235 F: arch/arm/mach-spear6xx/spear600.c 6235 F: arch/arm/mach-spear6xx/spear600.c
6236 F: arch/arm/mach-spear6xx/spear600_evb.c 6236 F: arch/arm/mach-spear6xx/spear600_evb.c
6237 6237
6238 SPI SUBSYSTEM 6238 SPI SUBSYSTEM
6239 M: Grant Likely <grant.likely@secretlab.ca> 6239 M: Grant Likely <grant.likely@secretlab.ca>
6240 L: spi-devel-general@lists.sourceforge.net 6240 L: spi-devel-general@lists.sourceforge.net
6241 Q: http://patchwork.kernel.org/project/spi-devel-general/list/ 6241 Q: http://patchwork.kernel.org/project/spi-devel-general/list/
6242 T: git git://git.secretlab.ca/git/linux-2.6.git 6242 T: git git://git.secretlab.ca/git/linux-2.6.git
6243 S: Maintained 6243 S: Maintained
6244 F: Documentation/spi/ 6244 F: Documentation/spi/
6245 F: drivers/spi/ 6245 F: drivers/spi/
6246 F: include/linux/spi/ 6246 F: include/linux/spi/
6247 6247
6248 SPIDERNET NETWORK DRIVER for CELL 6248 SPIDERNET NETWORK DRIVER for CELL
6249 M: Ishizaki Kou <kou.ishizaki@toshiba.co.jp> 6249 M: Ishizaki Kou <kou.ishizaki@toshiba.co.jp>
6250 M: Jens Osterkamp <jens@de.ibm.com> 6250 M: Jens Osterkamp <jens@de.ibm.com>
6251 L: netdev@vger.kernel.org 6251 L: netdev@vger.kernel.org
6252 S: Supported 6252 S: Supported
6253 F: Documentation/networking/spider_net.txt 6253 F: Documentation/networking/spider_net.txt
6254 F: drivers/net/ethernet/toshiba/spider_net* 6254 F: drivers/net/ethernet/toshiba/spider_net*
6255 6255
6256 SPU FILE SYSTEM 6256 SPU FILE SYSTEM
6257 M: Jeremy Kerr <jk@ozlabs.org> 6257 M: Jeremy Kerr <jk@ozlabs.org>
6258 L: linuxppc-dev@lists.ozlabs.org 6258 L: linuxppc-dev@lists.ozlabs.org
6259 L: cbe-oss-dev@lists.ozlabs.org 6259 L: cbe-oss-dev@lists.ozlabs.org
6260 W: http://www.ibm.com/developerworks/power/cell/ 6260 W: http://www.ibm.com/developerworks/power/cell/
6261 S: Supported 6261 S: Supported
6262 F: Documentation/filesystems/spufs.txt 6262 F: Documentation/filesystems/spufs.txt
6263 F: arch/powerpc/platforms/cell/spufs/ 6263 F: arch/powerpc/platforms/cell/spufs/
6264 6264
6265 SQUASHFS FILE SYSTEM 6265 SQUASHFS FILE SYSTEM
6266 M: Phillip Lougher <phillip@squashfs.org.uk> 6266 M: Phillip Lougher <phillip@squashfs.org.uk>
6267 L: squashfs-devel@lists.sourceforge.net (subscribers-only) 6267 L: squashfs-devel@lists.sourceforge.net (subscribers-only)
6268 W: http://squashfs.org.uk 6268 W: http://squashfs.org.uk
6269 S: Maintained 6269 S: Maintained
6270 F: Documentation/filesystems/squashfs.txt 6270 F: Documentation/filesystems/squashfs.txt
6271 F: fs/squashfs/ 6271 F: fs/squashfs/
6272 6272
6273 SRM (Alpha) environment access 6273 SRM (Alpha) environment access
6274 M: Jan-Benedict Glaw <jbglaw@lug-owl.de> 6274 M: Jan-Benedict Glaw <jbglaw@lug-owl.de>
6275 S: Maintained 6275 S: Maintained
6276 F: arch/alpha/kernel/srm_env.c 6276 F: arch/alpha/kernel/srm_env.c
6277 6277
6278 STABLE BRANCH 6278 STABLE BRANCH
6279 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> 6279 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
6280 L: stable@vger.kernel.org 6280 L: stable@vger.kernel.org
6281 S: Supported 6281 S: Supported
6282 6282
6283 STAGING SUBSYSTEM 6283 STAGING SUBSYSTEM
6284 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> 6284 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
6285 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git 6285 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
6286 L: devel@driverdev.osuosl.org 6286 L: devel@driverdev.osuosl.org
6287 S: Supported 6287 S: Supported
6288 F: drivers/staging/ 6288 F: drivers/staging/
6289 6289
6290 STAGING - AGERE HERMES II and II.5 WIRELESS DRIVERS 6290 STAGING - AGERE HERMES II and II.5 WIRELESS DRIVERS
6291 M: Henk de Groot <pe1dnn@amsat.org> 6291 M: Henk de Groot <pe1dnn@amsat.org>
6292 S: Odd Fixes 6292 S: Odd Fixes
6293 F: drivers/staging/wlags49_h2/ 6293 F: drivers/staging/wlags49_h2/
6294 F: drivers/staging/wlags49_h25/ 6294 F: drivers/staging/wlags49_h25/
6295 6295
6296 STAGING - ASUS OLED 6296 STAGING - ASUS OLED
6297 M: Jakub Schmidtke <sjakub@gmail.com> 6297 M: Jakub Schmidtke <sjakub@gmail.com>
6298 S: Odd Fixes 6298 S: Odd Fixes
6299 F: drivers/staging/asus_oled/ 6299 F: drivers/staging/asus_oled/
6300 6300
6301 STAGING - COMEDI 6301 STAGING - COMEDI
6302 M: Ian Abbott <abbotti@mev.co.uk> 6302 M: Ian Abbott <abbotti@mev.co.uk>
6303 M: Mori Hess <fmhess@users.sourceforge.net> 6303 M: Mori Hess <fmhess@users.sourceforge.net>
6304 S: Odd Fixes 6304 S: Odd Fixes
6305 F: drivers/staging/comedi/ 6305 F: drivers/staging/comedi/
6306 6306
6307 STAGING - CRYSTAL HD VIDEO DECODER 6307 STAGING - CRYSTAL HD VIDEO DECODER
6308 M: Naren Sankar <nsankar@broadcom.com> 6308 M: Naren Sankar <nsankar@broadcom.com>
6309 M: Jarod Wilson <jarod@wilsonet.com> 6309 M: Jarod Wilson <jarod@wilsonet.com>
6310 M: Scott Davilla <davilla@4pi.com> 6310 M: Scott Davilla <davilla@4pi.com>
6311 M: Manu Abraham <abraham.manu@gmail.com> 6311 M: Manu Abraham <abraham.manu@gmail.com>
6312 S: Odd Fixes 6312 S: Odd Fixes
6313 F: drivers/staging/crystalhd/ 6313 F: drivers/staging/crystalhd/
6314 6314
6315 STAGING - ECHO CANCELLER 6315 STAGING - ECHO CANCELLER
6316 M: Steve Underwood <steveu@coppice.org> 6316 M: Steve Underwood <steveu@coppice.org>
6317 M: David Rowe <david@rowetel.com> 6317 M: David Rowe <david@rowetel.com>
6318 S: Odd Fixes 6318 S: Odd Fixes
6319 F: drivers/staging/echo/ 6319 F: drivers/staging/echo/
6320 6320
6321 STAGING - ET131X NETWORK DRIVER 6321 STAGING - ET131X NETWORK DRIVER
6322 M: Mark Einon <mark.einon@gmail.com> 6322 M: Mark Einon <mark.einon@gmail.com>
6323 S: Odd Fixes 6323 S: Odd Fixes
6324 F: drivers/staging/et131x/ 6324 F: drivers/staging/et131x/
6325 6325
6326 STAGING - FLARION FT1000 DRIVERS 6326 STAGING - FLARION FT1000 DRIVERS
6327 M: Marek Belisko <marek.belisko@gmail.com> 6327 M: Marek Belisko <marek.belisko@gmail.com>
6328 S: Odd Fixes 6328 S: Odd Fixes
6329 F: drivers/staging/ft1000/ 6329 F: drivers/staging/ft1000/
6330 6330
6331 STAGING - FRONTIER TRANZPORT AND ALPHATRACK 6331 STAGING - FRONTIER TRANZPORT AND ALPHATRACK
6332 M: David Tรคht <d@teklibre.com> 6332 M: David Tรคht <d@teklibre.com>
6333 S: Odd Fixes 6333 S: Odd Fixes
6334 F: drivers/staging/frontier/ 6334 F: drivers/staging/frontier/
6335 6335
6336 STAGING - INDUSTRIAL IO 6336 STAGING - INDUSTRIAL IO
6337 M: Jonathan Cameron <jic23@cam.ac.uk> 6337 M: Jonathan Cameron <jic23@cam.ac.uk>
6338 L: linux-iio@vger.kernel.org 6338 L: linux-iio@vger.kernel.org
6339 S: Odd Fixes 6339 S: Odd Fixes
6340 F: drivers/staging/iio/ 6340 F: drivers/staging/iio/
6341 6341
6342 STAGING - LIRC (LINUX INFRARED REMOTE CONTROL) DRIVERS 6342 STAGING - LIRC (LINUX INFRARED REMOTE CONTROL) DRIVERS
6343 M: Jarod Wilson <jarod@wilsonet.com> 6343 M: Jarod Wilson <jarod@wilsonet.com>
6344 W: http://www.lirc.org/ 6344 W: http://www.lirc.org/
6345 S: Odd Fixes 6345 S: Odd Fixes
6346 F: drivers/staging/media/lirc/ 6346 F: drivers/staging/media/lirc/
6347 6347
6348 STAGING - NVIDIA COMPLIANT EMBEDDED CONTROLLER INTERFACE (nvec) 6348 STAGING - NVIDIA COMPLIANT EMBEDDED CONTROLLER INTERFACE (nvec)
6349 M: Julian Andres Klode <jak@jak-linux.org> 6349 M: Julian Andres Klode <jak@jak-linux.org>
6350 M: Marc Dietrich <marvin24@gmx.de> 6350 M: Marc Dietrich <marvin24@gmx.de>
6351 L: ac100@lists.launchpad.net (moderated for non-subscribers) 6351 L: ac100@lists.launchpad.net (moderated for non-subscribers)
6352 S: Maintained 6352 S: Maintained
6353 F: drivers/staging/nvec/ 6353 F: drivers/staging/nvec/
6354 6354
6355 STAGING - OLPC SECONDARY DISPLAY CONTROLLER (DCON) 6355 STAGING - OLPC SECONDARY DISPLAY CONTROLLER (DCON)
6356 M: Andres Salomon <dilinger@queued.net> 6356 M: Andres Salomon <dilinger@queued.net>
6357 M: Chris Ball <cjb@laptop.org> 6357 M: Chris Ball <cjb@laptop.org>
6358 M: Jon Nettleton <jon.nettleton@gmail.com> 6358 M: Jon Nettleton <jon.nettleton@gmail.com>
6359 W: http://wiki.laptop.org/go/DCON 6359 W: http://wiki.laptop.org/go/DCON
6360 S: Odd Fixes 6360 S: Odd Fixes
6361 F: drivers/staging/olpc_dcon/ 6361 F: drivers/staging/olpc_dcon/
6362 6362
6363 STAGING - PARALLEL LCD/KEYPAD PANEL DRIVER 6363 STAGING - PARALLEL LCD/KEYPAD PANEL DRIVER
6364 M: Willy Tarreau <willy@meta-x.org> 6364 M: Willy Tarreau <willy@meta-x.org>
6365 S: Odd Fixes 6365 S: Odd Fixes
6366 F: drivers/staging/panel/ 6366 F: drivers/staging/panel/
6367 6367
6368 STAGING - REALTEK RTL8712U DRIVERS 6368 STAGING - REALTEK RTL8712U DRIVERS
6369 M: Larry Finger <Larry.Finger@lwfinger.net> 6369 M: Larry Finger <Larry.Finger@lwfinger.net>
6370 M: Florian Schilhabel <florian.c.schilhabel@googlemail.com>. 6370 M: Florian Schilhabel <florian.c.schilhabel@googlemail.com>.
6371 S: Odd Fixes 6371 S: Odd Fixes
6372 F: drivers/staging/rtl8712/ 6372 F: drivers/staging/rtl8712/
6373 6373
6374 STAGING - SILICON MOTION SM7XX FRAME BUFFER DRIVER 6374 STAGING - SILICON MOTION SM7XX FRAME BUFFER DRIVER
6375 M: Teddy Wang <teddy.wang@siliconmotion.com.cn> 6375 M: Teddy Wang <teddy.wang@siliconmotion.com.cn>
6376 S: Odd Fixes 6376 S: Odd Fixes
6377 F: drivers/staging/sm7xx/ 6377 F: drivers/staging/sm7xx/
6378 6378
6379 STAGING - SOFTLOGIC 6x10 MPEG CODEC 6379 STAGING - SOFTLOGIC 6x10 MPEG CODEC
6380 M: Ben Collins <bcollins@bluecherry.net> 6380 M: Ben Collins <bcollins@bluecherry.net>
6381 S: Odd Fixes 6381 S: Odd Fixes
6382 F: drivers/staging/media/solo6x10/ 6382 F: drivers/staging/media/solo6x10/
6383 6383
6384 STAGING - SPEAKUP CONSOLE SPEECH DRIVER 6384 STAGING - SPEAKUP CONSOLE SPEECH DRIVER
6385 M: William Hubbs <w.d.hubbs@gmail.com> 6385 M: William Hubbs <w.d.hubbs@gmail.com>
6386 M: Chris Brannon <chris@the-brannons.com> 6386 M: Chris Brannon <chris@the-brannons.com>
6387 M: Kirk Reiser <kirk@braille.uwo.ca> 6387 M: Kirk Reiser <kirk@braille.uwo.ca>
6388 M: Samuel Thibault <samuel.thibault@ens-lyon.org> 6388 M: Samuel Thibault <samuel.thibault@ens-lyon.org>
6389 L: speakup@braille.uwo.ca 6389 L: speakup@braille.uwo.ca
6390 W: http://www.linux-speakup.org/ 6390 W: http://www.linux-speakup.org/
6391 S: Odd Fixes 6391 S: Odd Fixes
6392 F: drivers/staging/speakup/ 6392 F: drivers/staging/speakup/
6393 6393
6394 STAGING - TI DSP BRIDGE DRIVERS 6394 STAGING - TI DSP BRIDGE DRIVERS
6395 M: Omar Ramirez Luna <omar.ramirez@ti.com> 6395 M: Omar Ramirez Luna <omar.ramirez@ti.com>
6396 S: Odd Fixes 6396 S: Odd Fixes
6397 F: drivers/staging/tidspbridge/ 6397 F: drivers/staging/tidspbridge/
6398 6398
6399 STAGING - USB ENE SM/MS CARD READER DRIVER 6399 STAGING - USB ENE SM/MS CARD READER DRIVER
6400 M: Al Cho <acho@novell.com> 6400 M: Al Cho <acho@novell.com>
6401 S: Odd Fixes 6401 S: Odd Fixes
6402 F: drivers/staging/keucr/ 6402 F: drivers/staging/keucr/
6403 6403
6404 STAGING - VIA VT665X DRIVERS 6404 STAGING - VIA VT665X DRIVERS
6405 M: Forest Bond <forest@alittletooquiet.net> 6405 M: Forest Bond <forest@alittletooquiet.net>
6406 S: Odd Fixes 6406 S: Odd Fixes
6407 F: drivers/staging/vt665?/ 6407 F: drivers/staging/vt665?/
6408 6408
6409 STAGING - WINBOND IS89C35 WLAN USB DRIVER 6409 STAGING - WINBOND IS89C35 WLAN USB DRIVER
6410 M: Pavel Machek <pavel@ucw.cz> 6410 M: Pavel Machek <pavel@ucw.cz>
6411 S: Odd Fixes 6411 S: Odd Fixes
6412 F: drivers/staging/winbond/ 6412 F: drivers/staging/winbond/
6413 6413
6414 STAGING - XGI Z7,Z9,Z11 PCI DISPLAY DRIVER 6414 STAGING - XGI Z7,Z9,Z11 PCI DISPLAY DRIVER
6415 M: Arnaud Patard <arnaud.patard@rtp-net.org> 6415 M: Arnaud Patard <arnaud.patard@rtp-net.org>
6416 S: Odd Fixes 6416 S: Odd Fixes
6417 F: drivers/staging/xgifb/ 6417 F: drivers/staging/xgifb/
6418 6418
6419 STARFIRE/DURALAN NETWORK DRIVER 6419 STARFIRE/DURALAN NETWORK DRIVER
6420 M: Ion Badulescu <ionut@badula.org> 6420 M: Ion Badulescu <ionut@badula.org>
6421 S: Odd Fixes 6421 S: Odd Fixes
6422 F: drivers/net/ethernet/adaptec/starfire* 6422 F: drivers/net/ethernet/adaptec/starfire*
6423 6423
6424 SUN3/3X 6424 SUN3/3X
6425 M: Sam Creasey <sammy@sammy.net> 6425 M: Sam Creasey <sammy@sammy.net>
6426 W: http://sammy.net/sun3/ 6426 W: http://sammy.net/sun3/
6427 S: Maintained 6427 S: Maintained
6428 F: arch/m68k/kernel/*sun3* 6428 F: arch/m68k/kernel/*sun3*
6429 F: arch/m68k/sun3*/ 6429 F: arch/m68k/sun3*/
6430 F: arch/m68k/include/asm/sun3* 6430 F: arch/m68k/include/asm/sun3*
6431 F: drivers/net/ethernet/i825xx/sun3* 6431 F: drivers/net/ethernet/i825xx/sun3*
6432 6432
6433 SUPERH 6433 SUPERH
6434 M: Paul Mundt <lethal@linux-sh.org> 6434 M: Paul Mundt <lethal@linux-sh.org>
6435 L: linux-sh@vger.kernel.org 6435 L: linux-sh@vger.kernel.org
6436 W: http://www.linux-sh.org 6436 W: http://www.linux-sh.org
6437 Q: http://patchwork.kernel.org/project/linux-sh/list/ 6437 Q: http://patchwork.kernel.org/project/linux-sh/list/
6438 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git sh-latest 6438 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git sh-latest
6439 S: Supported 6439 S: Supported
6440 F: Documentation/sh/ 6440 F: Documentation/sh/
6441 F: arch/sh/ 6441 F: arch/sh/
6442 F: drivers/sh/ 6442 F: drivers/sh/
6443 6443
6444 SUSPEND TO RAM 6444 SUSPEND TO RAM
6445 M: Len Brown <len.brown@intel.com> 6445 M: Len Brown <len.brown@intel.com>
6446 M: Pavel Machek <pavel@ucw.cz> 6446 M: Pavel Machek <pavel@ucw.cz>
6447 M: "Rafael J. Wysocki" <rjw@sisk.pl> 6447 M: "Rafael J. Wysocki" <rjw@sisk.pl>
6448 L: linux-pm@vger.kernel.org 6448 L: linux-pm@vger.kernel.org
6449 S: Supported 6449 S: Supported
6450 F: Documentation/power/ 6450 F: Documentation/power/
6451 F: arch/x86/kernel/acpi/ 6451 F: arch/x86/kernel/acpi/
6452 F: drivers/base/power/ 6452 F: drivers/base/power/
6453 F: kernel/power/ 6453 F: kernel/power/
6454 F: include/linux/suspend.h 6454 F: include/linux/suspend.h
6455 F: include/linux/freezer.h 6455 F: include/linux/freezer.h
6456 F: include/linux/pm.h 6456 F: include/linux/pm.h
6457 6457
6458 SVGA HANDLING 6458 SVGA HANDLING
6459 M: Martin Mares <mj@ucw.cz> 6459 M: Martin Mares <mj@ucw.cz>
6460 L: linux-video@atrey.karlin.mff.cuni.cz 6460 L: linux-video@atrey.karlin.mff.cuni.cz
6461 S: Maintained 6461 S: Maintained
6462 F: Documentation/svga.txt 6462 F: Documentation/svga.txt
6463 F: arch/x86/boot/video* 6463 F: arch/x86/boot/video*
6464 6464
6465 SYSV FILESYSTEM 6465 SYSV FILESYSTEM
6466 M: Christoph Hellwig <hch@infradead.org> 6466 M: Christoph Hellwig <hch@infradead.org>
6467 S: Maintained 6467 S: Maintained
6468 F: Documentation/filesystems/sysv-fs.txt 6468 F: Documentation/filesystems/sysv-fs.txt
6469 F: fs/sysv/ 6469 F: fs/sysv/
6470 F: include/linux/sysv_fs.h 6470 F: include/linux/sysv_fs.h
6471 6471
6472 TARGET SUBSYSTEM 6472 TARGET SUBSYSTEM
6473 M: Nicholas A. Bellinger <nab@linux-iscsi.org> 6473 M: Nicholas A. Bellinger <nab@linux-iscsi.org>
6474 L: linux-scsi@vger.kernel.org 6474 L: linux-scsi@vger.kernel.org
6475 L: target-devel@vger.kernel.org 6475 L: target-devel@vger.kernel.org
6476 L: http://groups.google.com/group/linux-iscsi-target-dev 6476 L: http://groups.google.com/group/linux-iscsi-target-dev
6477 W: http://www.linux-iscsi.org 6477 W: http://www.linux-iscsi.org
6478 T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/lio-core-2.6.git master 6478 T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/lio-core-2.6.git master
6479 S: Supported 6479 S: Supported
6480 F: drivers/target/ 6480 F: drivers/target/
6481 F: include/target/ 6481 F: include/target/
6482 F: Documentation/target/ 6482 F: Documentation/target/
6483 6483
6484 TASKSTATS STATISTICS INTERFACE 6484 TASKSTATS STATISTICS INTERFACE
6485 M: Balbir Singh <bsingharora@gmail.com> 6485 M: Balbir Singh <bsingharora@gmail.com>
6486 S: Maintained 6486 S: Maintained
6487 F: Documentation/accounting/taskstats* 6487 F: Documentation/accounting/taskstats*
6488 F: include/linux/taskstats* 6488 F: include/linux/taskstats*
6489 F: kernel/taskstats.c 6489 F: kernel/taskstats.c
6490 6490
6491 TC CLASSIFIER 6491 TC CLASSIFIER
6492 M: Jamal Hadi Salim <hadi@cyberus.ca> 6492 M: Jamal Hadi Salim <hadi@cyberus.ca>
6493 L: netdev@vger.kernel.org 6493 L: netdev@vger.kernel.org
6494 S: Maintained 6494 S: Maintained
6495 F: include/linux/pkt_cls.h 6495 F: include/linux/pkt_cls.h
6496 F: include/net/pkt_cls.h 6496 F: include/net/pkt_cls.h
6497 F: net/sched/ 6497 F: net/sched/
6498 6498
6499 TCP LOW PRIORITY MODULE 6499 TCP LOW PRIORITY MODULE
6500 M: "Wong Hoi Sing, Edison" <hswong3i@gmail.com> 6500 M: "Wong Hoi Sing, Edison" <hswong3i@gmail.com>
6501 M: "Hung Hing Lun, Mike" <hlhung3i@gmail.com> 6501 M: "Hung Hing Lun, Mike" <hlhung3i@gmail.com>
6502 W: http://tcp-lp-mod.sourceforge.net/ 6502 W: http://tcp-lp-mod.sourceforge.net/
6503 S: Maintained 6503 S: Maintained
6504 F: net/ipv4/tcp_lp.c 6504 F: net/ipv4/tcp_lp.c
6505 6505
6506 TEAM DRIVER 6506 TEAM DRIVER
6507 M: Jiri Pirko <jpirko@redhat.com> 6507 M: Jiri Pirko <jpirko@redhat.com>
6508 L: netdev@vger.kernel.org 6508 L: netdev@vger.kernel.org
6509 S: Supported 6509 S: Supported
6510 F: drivers/net/team/ 6510 F: drivers/net/team/
6511 F: include/linux/if_team.h 6511 F: include/linux/if_team.h
6512 6512
6513 TEGRA SUPPORT 6513 TEGRA SUPPORT
6514 M: Colin Cross <ccross@android.com> 6514 M: Colin Cross <ccross@android.com>
6515 M: Olof Johansson <olof@lixom.net> 6515 M: Olof Johansson <olof@lixom.net>
6516 M: Stephen Warren <swarren@nvidia.com> 6516 M: Stephen Warren <swarren@nvidia.com>
6517 L: linux-tegra@vger.kernel.org 6517 L: linux-tegra@vger.kernel.org
6518 T: git git://git.kernel.org/pub/scm/linux/kernel/git/olof/tegra.git 6518 T: git git://git.kernel.org/pub/scm/linux/kernel/git/olof/tegra.git
6519 S: Supported 6519 S: Supported
6520 F: arch/arm/mach-tegra 6520 F: arch/arm/mach-tegra
6521 6521
6522 TEHUTI ETHERNET DRIVER 6522 TEHUTI ETHERNET DRIVER
6523 M: Andy Gospodarek <andy@greyhouse.net> 6523 M: Andy Gospodarek <andy@greyhouse.net>
6524 L: netdev@vger.kernel.org 6524 L: netdev@vger.kernel.org
6525 S: Supported 6525 S: Supported
6526 F: drivers/net/ethernet/tehuti/* 6526 F: drivers/net/ethernet/tehuti/*
6527 6527
6528 Telecom Clock Driver for MCPL0010 6528 Telecom Clock Driver for MCPL0010
6529 M: Mark Gross <mark.gross@intel.com> 6529 M: Mark Gross <mark.gross@intel.com>
6530 S: Supported 6530 S: Supported
6531 F: drivers/char/tlclk.c 6531 F: drivers/char/tlclk.c
6532 6532
6533 TENSILICA XTENSA PORT (xtensa) 6533 TENSILICA XTENSA PORT (xtensa)
6534 M: Chris Zankel <chris@zankel.net> 6534 M: Chris Zankel <chris@zankel.net>
6535 S: Maintained 6535 S: Maintained
6536 F: arch/xtensa/ 6536 F: arch/xtensa/
6537 6537
6538 THINKPAD ACPI EXTRAS DRIVER 6538 THINKPAD ACPI EXTRAS DRIVER
6539 M: Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br> 6539 M: Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>
6540 L: ibm-acpi-devel@lists.sourceforge.net 6540 L: ibm-acpi-devel@lists.sourceforge.net
6541 L: platform-driver-x86@vger.kernel.org 6541 L: platform-driver-x86@vger.kernel.org
6542 W: http://ibm-acpi.sourceforge.net 6542 W: http://ibm-acpi.sourceforge.net
6543 W: http://thinkwiki.org/wiki/Ibm-acpi 6543 W: http://thinkwiki.org/wiki/Ibm-acpi
6544 T: git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git 6544 T: git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git
6545 S: Maintained 6545 S: Maintained
6546 F: drivers/platform/x86/thinkpad_acpi.c 6546 F: drivers/platform/x86/thinkpad_acpi.c
6547 6547
6548 TI FLASH MEDIA INTERFACE DRIVER 6548 TI FLASH MEDIA INTERFACE DRIVER
6549 M: Alex Dubov <oakad@yahoo.com> 6549 M: Alex Dubov <oakad@yahoo.com>
6550 S: Maintained 6550 S: Maintained
6551 F: drivers/misc/tifm* 6551 F: drivers/misc/tifm*
6552 F: drivers/mmc/host/tifm_sd.c 6552 F: drivers/mmc/host/tifm_sd.c
6553 F: include/linux/tifm.h 6553 F: include/linux/tifm.h
6554 6554
6555 TI TWL4030 SERIES SOC CODEC DRIVER 6555 TI TWL4030 SERIES SOC CODEC DRIVER
6556 M: Peter Ujfalusi <peter.ujfalusi@ti.com> 6556 M: Peter Ujfalusi <peter.ujfalusi@ti.com>
6557 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 6557 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
6558 S: Maintained 6558 S: Maintained
6559 F: sound/soc/codecs/twl4030* 6559 F: sound/soc/codecs/twl4030*
6560 6560
6561 TIPC NETWORK LAYER 6561 TIPC NETWORK LAYER
6562 M: Jon Maloy <jon.maloy@ericsson.com> 6562 M: Jon Maloy <jon.maloy@ericsson.com>
6563 M: Allan Stephens <allan.stephens@windriver.com> 6563 M: Allan Stephens <allan.stephens@windriver.com>
6564 L: netdev@vger.kernel.org (core kernel code) 6564 L: netdev@vger.kernel.org (core kernel code)
6565 L: tipc-discussion@lists.sourceforge.net (user apps, general discussion) 6565 L: tipc-discussion@lists.sourceforge.net (user apps, general discussion)
6566 W: http://tipc.sourceforge.net/ 6566 W: http://tipc.sourceforge.net/
6567 S: Maintained 6567 S: Maintained
6568 F: include/linux/tipc*.h 6568 F: include/linux/tipc*.h
6569 F: net/tipc/ 6569 F: net/tipc/
6570 6570
6571 TILE ARCHITECTURE 6571 TILE ARCHITECTURE
6572 M: Chris Metcalf <cmetcalf@tilera.com> 6572 M: Chris Metcalf <cmetcalf@tilera.com>
6573 W: http://www.tilera.com/scm/ 6573 W: http://www.tilera.com/scm/
6574 S: Supported 6574 S: Supported
6575 F: arch/tile/ 6575 F: arch/tile/
6576 F: drivers/tty/hvc/hvc_tile.c 6576 F: drivers/tty/hvc/hvc_tile.c
6577 F: drivers/net/ethernet/tile/ 6577 F: drivers/net/ethernet/tile/
6578 F: drivers/edac/tile_edac.c 6578 F: drivers/edac/tile_edac.c
6579 6579
6580 TLAN NETWORK DRIVER 6580 TLAN NETWORK DRIVER
6581 M: Samuel Chessman <chessman@tux.org> 6581 M: Samuel Chessman <chessman@tux.org>
6582 L: tlan-devel@lists.sourceforge.net (subscribers-only) 6582 L: tlan-devel@lists.sourceforge.net (subscribers-only)
6583 W: http://sourceforge.net/projects/tlan/ 6583 W: http://sourceforge.net/projects/tlan/
6584 S: Maintained 6584 S: Maintained
6585 F: Documentation/networking/tlan.txt 6585 F: Documentation/networking/tlan.txt
6586 F: drivers/net/ethernet/ti/tlan.* 6586 F: drivers/net/ethernet/ti/tlan.*
6587 6587
6588 TOMOYO SECURITY MODULE 6588 TOMOYO SECURITY MODULE
6589 M: Kentaro Takeda <takedakn@nttdata.co.jp> 6589 M: Kentaro Takeda <takedakn@nttdata.co.jp>
6590 M: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> 6590 M: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
6591 L: tomoyo-dev-en@lists.sourceforge.jp (subscribers-only, for developers in English) 6591 L: tomoyo-dev-en@lists.sourceforge.jp (subscribers-only, for developers in English)
6592 L: tomoyo-users-en@lists.sourceforge.jp (subscribers-only, for users in English) 6592 L: tomoyo-users-en@lists.sourceforge.jp (subscribers-only, for users in English)
6593 L: tomoyo-dev@lists.sourceforge.jp (subscribers-only, for developers in Japanese) 6593 L: tomoyo-dev@lists.sourceforge.jp (subscribers-only, for developers in Japanese)
6594 L: tomoyo-users@lists.sourceforge.jp (subscribers-only, for users in Japanese) 6594 L: tomoyo-users@lists.sourceforge.jp (subscribers-only, for users in Japanese)
6595 W: http://tomoyo.sourceforge.jp/ 6595 W: http://tomoyo.sourceforge.jp/
6596 T: quilt http://svn.sourceforge.jp/svnroot/tomoyo/trunk/2.5.x/tomoyo-lsm/patches/ 6596 T: quilt http://svn.sourceforge.jp/svnroot/tomoyo/trunk/2.5.x/tomoyo-lsm/patches/
6597 S: Maintained 6597 S: Maintained
6598 F: security/tomoyo/ 6598 F: security/tomoyo/
6599 6599
6600 TOPSTAR LAPTOP EXTRAS DRIVER 6600 TOPSTAR LAPTOP EXTRAS DRIVER
6601 M: Herton Ronaldo Krzesinski <herton@canonical.com> 6601 M: Herton Ronaldo Krzesinski <herton@canonical.com>
6602 L: platform-driver-x86@vger.kernel.org 6602 L: platform-driver-x86@vger.kernel.org
6603 S: Maintained 6603 S: Maintained
6604 F: drivers/platform/x86/topstar-laptop.c 6604 F: drivers/platform/x86/topstar-laptop.c
6605 6605
6606 TOSHIBA ACPI EXTRAS DRIVER 6606 TOSHIBA ACPI EXTRAS DRIVER
6607 L: platform-driver-x86@vger.kernel.org 6607 L: platform-driver-x86@vger.kernel.org
6608 S: Orphan 6608 S: Orphan
6609 F: drivers/platform/x86/toshiba_acpi.c 6609 F: drivers/platform/x86/toshiba_acpi.c
6610 6610
6611 TOSHIBA SMM DRIVER 6611 TOSHIBA SMM DRIVER
6612 M: Jonathan Buzzard <jonathan@buzzard.org.uk> 6612 M: Jonathan Buzzard <jonathan@buzzard.org.uk>
6613 L: tlinux-users@tce.toshiba-dme.co.jp 6613 L: tlinux-users@tce.toshiba-dme.co.jp
6614 W: http://www.buzzard.org.uk/toshiba/ 6614 W: http://www.buzzard.org.uk/toshiba/
6615 S: Maintained 6615 S: Maintained
6616 F: drivers/char/toshiba.c 6616 F: drivers/char/toshiba.c
6617 F: include/linux/toshiba.h 6617 F: include/linux/toshiba.h
6618 6618
6619 TMIO MMC DRIVER 6619 TMIO MMC DRIVER
6620 M: Guennadi Liakhovetski <g.liakhovetski@gmx.de> 6620 M: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
6621 M: Ian Molton <ian@mnementh.co.uk> 6621 M: Ian Molton <ian@mnementh.co.uk>
6622 L: linux-mmc@vger.kernel.org 6622 L: linux-mmc@vger.kernel.org
6623 S: Maintained 6623 S: Maintained
6624 F: drivers/mmc/host/tmio_mmc* 6624 F: drivers/mmc/host/tmio_mmc*
6625 F: drivers/mmc/host/sh_mobile_sdhi.c 6625 F: drivers/mmc/host/sh_mobile_sdhi.c
6626 F: include/linux/mmc/tmio.h 6626 F: include/linux/mmc/tmio.h
6627 F: include/linux/mmc/sh_mobile_sdhi.h 6627 F: include/linux/mmc/sh_mobile_sdhi.h
6628 6628
6629 TMPFS (SHMEM FILESYSTEM) 6629 TMPFS (SHMEM FILESYSTEM)
6630 M: Hugh Dickins <hughd@google.com> 6630 M: Hugh Dickins <hughd@google.com>
6631 L: linux-mm@kvack.org 6631 L: linux-mm@kvack.org
6632 S: Maintained 6632 S: Maintained
6633 F: include/linux/shmem_fs.h 6633 F: include/linux/shmem_fs.h
6634 F: mm/shmem.c 6634 F: mm/shmem.c
6635 6635
6636 TPM DEVICE DRIVER 6636 TPM DEVICE DRIVER
6637 M: Debora Velarde <debora@linux.vnet.ibm.com> 6637 M: Debora Velarde <debora@linux.vnet.ibm.com>
6638 M: Rajiv Andrade <srajiv@linux.vnet.ibm.com> 6638 M: Rajiv Andrade <srajiv@linux.vnet.ibm.com>
6639 W: http://tpmdd.sourceforge.net 6639 W: http://tpmdd.sourceforge.net
6640 M: Marcel Selhorst <m.selhorst@sirrix.com> 6640 M: Marcel Selhorst <m.selhorst@sirrix.com>
6641 W: http://www.sirrix.com 6641 W: http://www.sirrix.com
6642 L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers) 6642 L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers)
6643 S: Maintained 6643 S: Maintained
6644 F: drivers/char/tpm/ 6644 F: drivers/char/tpm/
6645 6645
6646 TRACING 6646 TRACING
6647 M: Steven Rostedt <rostedt@goodmis.org> 6647 M: Steven Rostedt <rostedt@goodmis.org>
6648 M: Frederic Weisbecker <fweisbec@gmail.com> 6648 M: Frederic Weisbecker <fweisbec@gmail.com>
6649 M: Ingo Molnar <mingo@redhat.com> 6649 M: Ingo Molnar <mingo@redhat.com>
6650 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core 6650 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
6651 S: Maintained 6651 S: Maintained
6652 F: Documentation/trace/ftrace.txt 6652 F: Documentation/trace/ftrace.txt
6653 F: arch/*/*/*/ftrace.h 6653 F: arch/*/*/*/ftrace.h
6654 F: arch/*/kernel/ftrace.c 6654 F: arch/*/kernel/ftrace.c
6655 F: include/*/ftrace.h 6655 F: include/*/ftrace.h
6656 F: include/linux/trace*.h 6656 F: include/linux/trace*.h
6657 F: include/trace/ 6657 F: include/trace/
6658 F: kernel/trace/ 6658 F: kernel/trace/
6659 6659
6660 TRIVIAL PATCHES 6660 TRIVIAL PATCHES
6661 M: Jiri Kosina <trivial@kernel.org> 6661 M: Jiri Kosina <trivial@kernel.org>
6662 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial.git 6662 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial.git
6663 S: Maintained 6663 S: Maintained
6664 K: ^Subject:.*(?i)trivial 6664 K: ^Subject:.*(?i)trivial
6665 6665
6666 TTY LAYER 6666 TTY LAYER
6667 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> 6667 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
6668 S: Supported 6668 S: Supported
6669 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6.git 6669 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6.git
6670 F: drivers/tty/ 6670 F: drivers/tty/
6671 F: drivers/tty/serial/serial_core.c 6671 F: drivers/tty/serial/serial_core.c
6672 F: include/linux/serial_core.h 6672 F: include/linux/serial_core.h
6673 F: include/linux/serial.h 6673 F: include/linux/serial.h
6674 F: include/linux/tty.h 6674 F: include/linux/tty.h
6675 6675
6676 TULIP NETWORK DRIVERS 6676 TULIP NETWORK DRIVERS
6677 M: Grant Grundler <grundler@parisc-linux.org> 6677 M: Grant Grundler <grundler@parisc-linux.org>
6678 L: netdev@vger.kernel.org 6678 L: netdev@vger.kernel.org
6679 S: Maintained 6679 S: Maintained
6680 F: drivers/net/ethernet/dec/tulip/ 6680 F: drivers/net/ethernet/dec/tulip/
6681 6681
6682 TUN/TAP driver 6682 TUN/TAP driver
6683 M: Maxim Krasnyansky <maxk@qualcomm.com> 6683 M: Maxim Krasnyansky <maxk@qualcomm.com>
6684 L: vtun@office.satix.net 6684 L: vtun@office.satix.net
6685 W: http://vtun.sourceforge.net/tun 6685 W: http://vtun.sourceforge.net/tun
6686 S: Maintained 6686 S: Maintained
6687 F: Documentation/networking/tuntap.txt 6687 F: Documentation/networking/tuntap.txt
6688 F: arch/um/os-Linux/drivers/ 6688 F: arch/um/os-Linux/drivers/
6689 6689
6690 TURBOCHANNEL SUBSYSTEM 6690 TURBOCHANNEL SUBSYSTEM
6691 M: "Maciej W. Rozycki" <macro@linux-mips.org> 6691 M: "Maciej W. Rozycki" <macro@linux-mips.org>
6692 S: Maintained 6692 S: Maintained
6693 F: drivers/tc/ 6693 F: drivers/tc/
6694 F: include/linux/tc.h 6694 F: include/linux/tc.h
6695 6695
6696 U14-34F SCSI DRIVER 6696 U14-34F SCSI DRIVER
6697 M: Dario Ballabio <ballabio_dario@emc.com> 6697 M: Dario Ballabio <ballabio_dario@emc.com>
6698 L: linux-scsi@vger.kernel.org 6698 L: linux-scsi@vger.kernel.org
6699 S: Maintained 6699 S: Maintained
6700 F: drivers/scsi/u14-34f.c 6700 F: drivers/scsi/u14-34f.c
6701 6701
6702 UBI FILE SYSTEM (UBIFS) 6702 UBI FILE SYSTEM (UBIFS)
6703 M: Artem Bityutskiy <dedekind1@gmail.com> 6703 M: Artem Bityutskiy <dedekind1@gmail.com>
6704 M: Adrian Hunter <adrian.hunter@intel.com> 6704 M: Adrian Hunter <adrian.hunter@intel.com>
6705 L: linux-mtd@lists.infradead.org 6705 L: linux-mtd@lists.infradead.org
6706 T: git git://git.infradead.org/ubifs-2.6.git 6706 T: git git://git.infradead.org/ubifs-2.6.git
6707 W: http://www.linux-mtd.infradead.org/doc/ubifs.html 6707 W: http://www.linux-mtd.infradead.org/doc/ubifs.html
6708 S: Maintained 6708 S: Maintained
6709 F: Documentation/filesystems/ubifs.txt 6709 F: Documentation/filesystems/ubifs.txt
6710 F: fs/ubifs/ 6710 F: fs/ubifs/
6711 6711
6712 UCLINUX (AND M68KNOMMU) 6712 UCLINUX (AND M68KNOMMU)
6713 M: Greg Ungerer <gerg@uclinux.org> 6713 M: Greg Ungerer <gerg@uclinux.org>
6714 W: http://www.uclinux.org/ 6714 W: http://www.uclinux.org/
6715 L: uclinux-dev@uclinux.org (subscribers-only) 6715 L: uclinux-dev@uclinux.org (subscribers-only)
6716 S: Maintained 6716 S: Maintained
6717 F: arch/m68k/*/*_no.* 6717 F: arch/m68k/*/*_no.*
6718 F: arch/m68k/include/asm/*_no.* 6718 F: arch/m68k/include/asm/*_no.*
6719 6719
6720 UCLINUX FOR RENESAS H8/300 (H8300) 6720 UCLINUX FOR RENESAS H8/300 (H8300)
6721 M: Yoshinori Sato <ysato@users.sourceforge.jp> 6721 M: Yoshinori Sato <ysato@users.sourceforge.jp>
6722 W: http://uclinux-h8.sourceforge.jp/ 6722 W: http://uclinux-h8.sourceforge.jp/
6723 S: Supported 6723 S: Supported
6724 F: arch/h8300/ 6724 F: arch/h8300/
6725 F: drivers/ide/ide-h8300.c 6725 F: drivers/ide/ide-h8300.c
6726 F: drivers/net/ethernet/8390/ne-h8300.c 6726 F: drivers/net/ethernet/8390/ne-h8300.c
6727 6727
6728 UDF FILESYSTEM 6728 UDF FILESYSTEM
6729 M: Jan Kara <jack@suse.cz> 6729 M: Jan Kara <jack@suse.cz>
6730 S: Maintained 6730 S: Maintained
6731 F: Documentation/filesystems/udf.txt 6731 F: Documentation/filesystems/udf.txt
6732 F: fs/udf/ 6732 F: fs/udf/
6733 6733
6734 UFS FILESYSTEM 6734 UFS FILESYSTEM
6735 M: Evgeniy Dushistov <dushistov@mail.ru> 6735 M: Evgeniy Dushistov <dushistov@mail.ru>
6736 S: Maintained 6736 S: Maintained
6737 F: Documentation/filesystems/ufs.txt 6737 F: Documentation/filesystems/ufs.txt
6738 F: fs/ufs/ 6738 F: fs/ufs/
6739 6739
6740 ULTRA-WIDEBAND (UWB) SUBSYSTEM: 6740 ULTRA-WIDEBAND (UWB) SUBSYSTEM:
6741 L: linux-usb@vger.kernel.org 6741 L: linux-usb@vger.kernel.org
6742 S: Orphan 6742 S: Orphan
6743 F: drivers/uwb/ 6743 F: drivers/uwb/
6744 F: include/linux/uwb.h 6744 F: include/linux/uwb.h
6745 F: include/linux/uwb/ 6745 F: include/linux/uwb/
6746 6746
6747 UNICORE32 ARCHITECTURE: 6747 UNICORE32 ARCHITECTURE:
6748 M: Guan Xuetao <gxt@mprc.pku.edu.cn> 6748 M: Guan Xuetao <gxt@mprc.pku.edu.cn>
6749 W: http://mprc.pku.edu.cn/~guanxuetao/linux 6749 W: http://mprc.pku.edu.cn/~guanxuetao/linux
6750 S: Maintained 6750 S: Maintained
6751 T: git git://git.kernel.org/pub/scm/linux/kernel/git/epip/linux-2.6-unicore32.git 6751 T: git git://git.kernel.org/pub/scm/linux/kernel/git/epip/linux-2.6-unicore32.git
6752 F: arch/unicore32/ 6752 F: arch/unicore32/
6753 6753
6754 UNIFDEF 6754 UNIFDEF
6755 M: Tony Finch <dot@dotat.at> 6755 M: Tony Finch <dot@dotat.at>
6756 W: http://dotat.at/prog/unifdef 6756 W: http://dotat.at/prog/unifdef
6757 S: Maintained 6757 S: Maintained
6758 F: scripts/unifdef.c 6758 F: scripts/unifdef.c
6759 6759
6760 UNIFORM CDROM DRIVER 6760 UNIFORM CDROM DRIVER
6761 M: Jens Axboe <axboe@kernel.dk> 6761 M: Jens Axboe <axboe@kernel.dk>
6762 W: http://www.kernel.dk 6762 W: http://www.kernel.dk
6763 S: Maintained 6763 S: Maintained
6764 F: Documentation/cdrom/ 6764 F: Documentation/cdrom/
6765 F: drivers/cdrom/cdrom.c 6765 F: drivers/cdrom/cdrom.c
6766 F: include/linux/cdrom.h 6766 F: include/linux/cdrom.h
6767 6767
6768 UNSORTED BLOCK IMAGES (UBI) 6768 UNSORTED BLOCK IMAGES (UBI)
6769 M: Artem Bityutskiy <dedekind1@gmail.com> 6769 M: Artem Bityutskiy <dedekind1@gmail.com>
6770 W: http://www.linux-mtd.infradead.org/ 6770 W: http://www.linux-mtd.infradead.org/
6771 L: linux-mtd@lists.infradead.org 6771 L: linux-mtd@lists.infradead.org
6772 T: git git://git.infradead.org/ubi-2.6.git 6772 T: git git://git.infradead.org/ubi-2.6.git
6773 S: Maintained 6773 S: Maintained
6774 F: drivers/mtd/ubi/ 6774 F: drivers/mtd/ubi/
6775 F: include/linux/mtd/ubi.h 6775 F: include/linux/mtd/ubi.h
6776 F: include/mtd/ubi-user.h 6776 F: include/mtd/ubi-user.h
6777 6777
6778 USB ACM DRIVER 6778 USB ACM DRIVER
6779 M: Oliver Neukum <oliver@neukum.name> 6779 M: Oliver Neukum <oliver@neukum.name>
6780 L: linux-usb@vger.kernel.org 6780 L: linux-usb@vger.kernel.org
6781 S: Maintained 6781 S: Maintained
6782 F: Documentation/usb/acm.txt 6782 F: Documentation/usb/acm.txt
6783 F: drivers/usb/class/cdc-acm.* 6783 F: drivers/usb/class/cdc-acm.*
6784 6784
6785 USB ATTACHED SCSI 6785 USB ATTACHED SCSI
6786 M: Matthew Wilcox <willy@linux.intel.com> 6786 M: Matthew Wilcox <willy@linux.intel.com>
6787 M: Sarah Sharp <sarah.a.sharp@linux.intel.com> 6787 M: Sarah Sharp <sarah.a.sharp@linux.intel.com>
6788 L: linux-usb@vger.kernel.org 6788 L: linux-usb@vger.kernel.org
6789 L: linux-scsi@vger.kernel.org 6789 L: linux-scsi@vger.kernel.org
6790 S: Supported 6790 S: Supported
6791 F: drivers/usb/storage/uas.c 6791 F: drivers/usb/storage/uas.c
6792 6792
6793 USB BLOCK DRIVER (UB ub) 6793 USB BLOCK DRIVER (UB ub)
6794 M: Pete Zaitcev <zaitcev@redhat.com> 6794 M: Pete Zaitcev <zaitcev@redhat.com>
6795 L: linux-usb@vger.kernel.org 6795 L: linux-usb@vger.kernel.org
6796 S: Supported 6796 S: Supported
6797 F: drivers/block/ub.c 6797 F: drivers/block/ub.c
6798 6798
6799 USB CDC ETHERNET DRIVER 6799 USB CDC ETHERNET DRIVER
6800 M: Oliver Neukum <oliver@neukum.name> 6800 M: Oliver Neukum <oliver@neukum.name>
6801 L: linux-usb@vger.kernel.org 6801 L: linux-usb@vger.kernel.org
6802 S: Maintained 6802 S: Maintained
6803 F: drivers/net/usb/cdc_*.c 6803 F: drivers/net/usb/cdc_*.c
6804 F: include/linux/usb/cdc.h 6804 F: include/linux/usb/cdc.h
6805 6805
6806 USB CYPRESS C67X00 DRIVER 6806 USB CYPRESS C67X00 DRIVER
6807 M: Peter Korsgaard <jacmet@sunsite.dk> 6807 M: Peter Korsgaard <jacmet@sunsite.dk>
6808 L: linux-usb@vger.kernel.org 6808 L: linux-usb@vger.kernel.org
6809 S: Maintained 6809 S: Maintained
6810 F: drivers/usb/c67x00/ 6810 F: drivers/usb/c67x00/
6811 6811
6812 USB DAVICOM DM9601 DRIVER 6812 USB DAVICOM DM9601 DRIVER
6813 M: Peter Korsgaard <jacmet@sunsite.dk> 6813 M: Peter Korsgaard <jacmet@sunsite.dk>
6814 L: netdev@vger.kernel.org 6814 L: netdev@vger.kernel.org
6815 W: http://www.linux-usb.org/usbnet 6815 W: http://www.linux-usb.org/usbnet
6816 S: Maintained 6816 S: Maintained
6817 F: drivers/net/usb/dm9601.c 6817 F: drivers/net/usb/dm9601.c
6818 6818
6819 USB DIAMOND RIO500 DRIVER 6819 USB DIAMOND RIO500 DRIVER
6820 M: Cesar Miquel <miquel@df.uba.ar> 6820 M: Cesar Miquel <miquel@df.uba.ar>
6821 L: rio500-users@lists.sourceforge.net 6821 L: rio500-users@lists.sourceforge.net
6822 W: http://rio500.sourceforge.net 6822 W: http://rio500.sourceforge.net
6823 S: Maintained 6823 S: Maintained
6824 F: drivers/usb/misc/rio500* 6824 F: drivers/usb/misc/rio500*
6825 6825
6826 USB EHCI DRIVER 6826 USB EHCI DRIVER
6827 M: Alan Stern <stern@rowland.harvard.edu> 6827 M: Alan Stern <stern@rowland.harvard.edu>
6828 L: linux-usb@vger.kernel.org 6828 L: linux-usb@vger.kernel.org
6829 S: Maintained 6829 S: Maintained
6830 F: Documentation/usb/ehci.txt 6830 F: Documentation/usb/ehci.txt
6831 F: drivers/usb/host/ehci* 6831 F: drivers/usb/host/ehci*
6832 6832
6833 USB ET61X[12]51 DRIVER 6833 USB ET61X[12]51 DRIVER
6834 M: Luca Risolia <luca.risolia@studio.unibo.it> 6834 M: Luca Risolia <luca.risolia@studio.unibo.it>
6835 L: linux-usb@vger.kernel.org 6835 L: linux-usb@vger.kernel.org
6836 L: linux-media@vger.kernel.org 6836 L: linux-media@vger.kernel.org
6837 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 6837 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
6838 W: http://www.linux-projects.org 6838 W: http://www.linux-projects.org
6839 S: Maintained 6839 S: Maintained
6840 F: drivers/media/video/et61x251/ 6840 F: drivers/media/video/et61x251/
6841 6841
6842 USB GADGET/PERIPHERAL SUBSYSTEM 6842 USB GADGET/PERIPHERAL SUBSYSTEM
6843 M: Felipe Balbi <balbi@ti.com> 6843 M: Felipe Balbi <balbi@ti.com>
6844 L: linux-usb@vger.kernel.org 6844 L: linux-usb@vger.kernel.org
6845 W: http://www.linux-usb.org/gadget 6845 W: http://www.linux-usb.org/gadget
6846 T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git 6846 T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git
6847 S: Maintained 6847 S: Maintained
6848 F: drivers/usb/gadget/ 6848 F: drivers/usb/gadget/
6849 F: include/linux/usb/gadget* 6849 F: include/linux/usb/gadget*
6850 6850
6851 USB HID/HIDBP DRIVERS (USB KEYBOARDS, MICE, REMOTE CONTROLS, ...) 6851 USB HID/HIDBP DRIVERS (USB KEYBOARDS, MICE, REMOTE CONTROLS, ...)
6852 M: Jiri Kosina <jkosina@suse.cz> 6852 M: Jiri Kosina <jkosina@suse.cz>
6853 L: linux-usb@vger.kernel.org 6853 L: linux-usb@vger.kernel.org
6854 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git 6854 T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git
6855 S: Maintained 6855 S: Maintained
6856 F: Documentation/hid/hiddev.txt 6856 F: Documentation/hid/hiddev.txt
6857 F: drivers/hid/usbhid/ 6857 F: drivers/hid/usbhid/
6858 6858
6859 USB/IP DRIVERS 6859 USB/IP DRIVERS
6860 M: Matt Mooney <mfm@muteddisk.com> 6860 M: Matt Mooney <mfm@muteddisk.com>
6861 L: linux-usb@vger.kernel.org 6861 L: linux-usb@vger.kernel.org
6862 S: Maintained 6862 S: Maintained
6863 F: drivers/staging/usbip/ 6863 F: drivers/staging/usbip/
6864 6864
6865 USB ISP116X DRIVER 6865 USB ISP116X DRIVER
6866 M: Olav Kongas <ok@artecdesign.ee> 6866 M: Olav Kongas <ok@artecdesign.ee>
6867 L: linux-usb@vger.kernel.org 6867 L: linux-usb@vger.kernel.org
6868 S: Maintained 6868 S: Maintained
6869 F: drivers/usb/host/isp116x* 6869 F: drivers/usb/host/isp116x*
6870 F: include/linux/usb/isp116x.h 6870 F: include/linux/usb/isp116x.h
6871 6871
6872 USB KAWASAKI LSI DRIVER 6872 USB KAWASAKI LSI DRIVER
6873 M: Oliver Neukum <oliver@neukum.name> 6873 M: Oliver Neukum <oliver@neukum.name>
6874 L: linux-usb@vger.kernel.org 6874 L: linux-usb@vger.kernel.org
6875 S: Maintained 6875 S: Maintained
6876 F: drivers/usb/serial/kl5kusb105.* 6876 F: drivers/usb/serial/kl5kusb105.*
6877 6877
6878 USB MASS STORAGE DRIVER 6878 USB MASS STORAGE DRIVER
6879 M: Matthew Dharm <mdharm-usb@one-eyed-alien.net> 6879 M: Matthew Dharm <mdharm-usb@one-eyed-alien.net>
6880 L: linux-usb@vger.kernel.org 6880 L: linux-usb@vger.kernel.org
6881 L: usb-storage@lists.one-eyed-alien.net 6881 L: usb-storage@lists.one-eyed-alien.net
6882 S: Maintained 6882 S: Maintained
6883 W: http://www.one-eyed-alien.net/~mdharm/linux-usb/ 6883 W: http://www.one-eyed-alien.net/~mdharm/linux-usb/
6884 F: drivers/usb/storage/ 6884 F: drivers/usb/storage/
6885 6885
6886 USB MIDI DRIVER 6886 USB MIDI DRIVER
6887 M: Clemens Ladisch <clemens@ladisch.de> 6887 M: Clemens Ladisch <clemens@ladisch.de>
6888 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 6888 L: alsa-devel@alsa-project.org (moderated for non-subscribers)
6889 T: git git://git.alsa-project.org/alsa-kernel.git 6889 T: git git://git.alsa-project.org/alsa-kernel.git
6890 S: Maintained 6890 S: Maintained
6891 F: sound/usb/midi.* 6891 F: sound/usb/midi.*
6892 6892
6893 USB OHCI DRIVER 6893 USB OHCI DRIVER
6894 M: Alan Stern <stern@rowland.harvard.edu> 6894 M: Alan Stern <stern@rowland.harvard.edu>
6895 L: linux-usb@vger.kernel.org 6895 L: linux-usb@vger.kernel.org
6896 S: Maintained 6896 S: Maintained
6897 F: Documentation/usb/ohci.txt 6897 F: Documentation/usb/ohci.txt
6898 F: drivers/usb/host/ohci* 6898 F: drivers/usb/host/ohci*
6899 6899
6900 USB OPTION-CARD DRIVER 6900 USB OPTION-CARD DRIVER
6901 M: Matthias Urlichs <smurf@smurf.noris.de> 6901 M: Matthias Urlichs <smurf@smurf.noris.de>
6902 L: linux-usb@vger.kernel.org 6902 L: linux-usb@vger.kernel.org
6903 S: Maintained 6903 S: Maintained
6904 F: drivers/usb/serial/option.c 6904 F: drivers/usb/serial/option.c
6905 6905
6906 USB PEGASUS DRIVER 6906 USB PEGASUS DRIVER
6907 M: Petko Manolov <petkan@users.sourceforge.net> 6907 M: Petko Manolov <petkan@users.sourceforge.net>
6908 L: linux-usb@vger.kernel.org 6908 L: linux-usb@vger.kernel.org
6909 L: netdev@vger.kernel.org 6909 L: netdev@vger.kernel.org
6910 W: http://pegasus2.sourceforge.net/ 6910 W: http://pegasus2.sourceforge.net/
6911 S: Maintained 6911 S: Maintained
6912 F: drivers/net/usb/pegasus.* 6912 F: drivers/net/usb/pegasus.*
6913 6913
6914 USB PRINTER DRIVER (usblp) 6914 USB PRINTER DRIVER (usblp)
6915 M: Pete Zaitcev <zaitcev@redhat.com> 6915 M: Pete Zaitcev <zaitcev@redhat.com>
6916 L: linux-usb@vger.kernel.org 6916 L: linux-usb@vger.kernel.org
6917 S: Supported 6917 S: Supported
6918 F: drivers/usb/class/usblp.c 6918 F: drivers/usb/class/usblp.c
6919 6919
6920 USB RTL8150 DRIVER 6920 USB RTL8150 DRIVER
6921 M: Petko Manolov <petkan@users.sourceforge.net> 6921 M: Petko Manolov <petkan@users.sourceforge.net>
6922 L: linux-usb@vger.kernel.org 6922 L: linux-usb@vger.kernel.org
6923 L: netdev@vger.kernel.org 6923 L: netdev@vger.kernel.org
6924 W: http://pegasus2.sourceforge.net/ 6924 W: http://pegasus2.sourceforge.net/
6925 S: Maintained 6925 S: Maintained
6926 F: drivers/net/usb/rtl8150.c 6926 F: drivers/net/usb/rtl8150.c
6927 6927
6928 USB SERIAL BELKIN F5U103 DRIVER 6928 USB SERIAL BELKIN F5U103 DRIVER
6929 M: William Greathouse <wgreathouse@smva.com> 6929 M: William Greathouse <wgreathouse@smva.com>
6930 L: linux-usb@vger.kernel.org 6930 L: linux-usb@vger.kernel.org
6931 S: Maintained 6931 S: Maintained
6932 F: drivers/usb/serial/belkin_sa.* 6932 F: drivers/usb/serial/belkin_sa.*
6933 6933
6934 USB SERIAL CYPRESS M8 DRIVER 6934 USB SERIAL CYPRESS M8 DRIVER
6935 M: Lonnie Mendez <dignome@gmail.com> 6935 M: Lonnie Mendez <dignome@gmail.com>
6936 L: linux-usb@vger.kernel.org 6936 L: linux-usb@vger.kernel.org
6937 S: Maintained 6937 S: Maintained
6938 W: http://geocities.com/i0xox0i 6938 W: http://geocities.com/i0xox0i
6939 W: http://firstlight.net/cvs 6939 W: http://firstlight.net/cvs
6940 F: drivers/usb/serial/cypress_m8.* 6940 F: drivers/usb/serial/cypress_m8.*
6941 6941
6942 USB SERIAL CYBERJACK DRIVER 6942 USB SERIAL CYBERJACK DRIVER
6943 M: Matthias Bruestle and Harald Welte <support@reiner-sct.com> 6943 M: Matthias Bruestle and Harald Welte <support@reiner-sct.com>
6944 W: http://www.reiner-sct.de/support/treiber_cyberjack.php 6944 W: http://www.reiner-sct.de/support/treiber_cyberjack.php
6945 S: Maintained 6945 S: Maintained
6946 F: drivers/usb/serial/cyberjack.c 6946 F: drivers/usb/serial/cyberjack.c
6947 6947
6948 USB SERIAL DIGI ACCELEPORT DRIVER 6948 USB SERIAL DIGI ACCELEPORT DRIVER
6949 M: Peter Berger <pberger@brimson.com> 6949 M: Peter Berger <pberger@brimson.com>
6950 M: Al Borchers <alborchers@steinerpoint.com> 6950 M: Al Borchers <alborchers@steinerpoint.com>
6951 L: linux-usb@vger.kernel.org 6951 L: linux-usb@vger.kernel.org
6952 S: Maintained 6952 S: Maintained
6953 F: drivers/usb/serial/digi_acceleport.c 6953 F: drivers/usb/serial/digi_acceleport.c
6954 6954
6955 USB SERIAL DRIVER 6955 USB SERIAL DRIVER
6956 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> 6956 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
6957 L: linux-usb@vger.kernel.org 6957 L: linux-usb@vger.kernel.org
6958 S: Supported 6958 S: Supported
6959 F: Documentation/usb/usb-serial.txt 6959 F: Documentation/usb/usb-serial.txt
6960 F: drivers/usb/serial/generic.c 6960 F: drivers/usb/serial/generic.c
6961 F: drivers/usb/serial/usb-serial.c 6961 F: drivers/usb/serial/usb-serial.c
6962 F: include/linux/usb/serial.h 6962 F: include/linux/usb/serial.h
6963 6963
6964 USB SERIAL EMPEG EMPEG-CAR MARK I/II DRIVER 6964 USB SERIAL EMPEG EMPEG-CAR MARK I/II DRIVER
6965 M: Gary Brubaker <xavyer@ix.netcom.com> 6965 M: Gary Brubaker <xavyer@ix.netcom.com>
6966 L: linux-usb@vger.kernel.org 6966 L: linux-usb@vger.kernel.org
6967 S: Maintained 6967 S: Maintained
6968 F: drivers/usb/serial/empeg.c 6968 F: drivers/usb/serial/empeg.c
6969 6969
6970 USB SERIAL KEYSPAN DRIVER 6970 USB SERIAL KEYSPAN DRIVER
6971 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> 6971 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
6972 L: linux-usb@vger.kernel.org 6972 L: linux-usb@vger.kernel.org
6973 S: Maintained 6973 S: Maintained
6974 F: drivers/usb/serial/*keyspan* 6974 F: drivers/usb/serial/*keyspan*
6975 6975
6976 USB SERIAL WHITEHEAT DRIVER 6976 USB SERIAL WHITEHEAT DRIVER
6977 M: Support Department <support@connecttech.com> 6977 M: Support Department <support@connecttech.com>
6978 L: linux-usb@vger.kernel.org 6978 L: linux-usb@vger.kernel.org
6979 W: http://www.connecttech.com 6979 W: http://www.connecttech.com
6980 S: Supported 6980 S: Supported
6981 F: drivers/usb/serial/whiteheat* 6981 F: drivers/usb/serial/whiteheat*
6982 6982
6983 USB SMSC95XX ETHERNET DRIVER 6983 USB SMSC95XX ETHERNET DRIVER
6984 M: Steve Glendinning <steve.glendinning@smsc.com> 6984 M: Steve Glendinning <steve.glendinning@smsc.com>
6985 L: netdev@vger.kernel.org 6985 L: netdev@vger.kernel.org
6986 S: Supported 6986 S: Supported
6987 F: drivers/net/usb/smsc95xx.* 6987 F: drivers/net/usb/smsc95xx.*
6988 6988
6989 USB SN9C1xx DRIVER 6989 USB SN9C1xx DRIVER
6990 M: Luca Risolia <luca.risolia@studio.unibo.it> 6990 M: Luca Risolia <luca.risolia@studio.unibo.it>
6991 L: linux-usb@vger.kernel.org 6991 L: linux-usb@vger.kernel.org
6992 L: linux-media@vger.kernel.org 6992 L: linux-media@vger.kernel.org
6993 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 6993 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
6994 W: http://www.linux-projects.org 6994 W: http://www.linux-projects.org
6995 S: Maintained 6995 S: Maintained
6996 F: Documentation/video4linux/sn9c102.txt 6996 F: Documentation/video4linux/sn9c102.txt
6997 F: drivers/media/video/sn9c102/ 6997 F: drivers/media/video/sn9c102/
6998 6998
6999 USB SUBSYSTEM 6999 USB SUBSYSTEM
7000 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> 7000 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
7001 L: linux-usb@vger.kernel.org 7001 L: linux-usb@vger.kernel.org
7002 W: http://www.linux-usb.org 7002 W: http://www.linux-usb.org
7003 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6.git 7003 T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6.git
7004 S: Supported 7004 S: Supported
7005 F: Documentation/usb/ 7005 F: Documentation/usb/
7006 F: drivers/net/usb/ 7006 F: drivers/net/usb/
7007 F: drivers/usb/ 7007 F: drivers/usb/
7008 F: include/linux/usb.h 7008 F: include/linux/usb.h
7009 F: include/linux/usb/ 7009 F: include/linux/usb/
7010 7010
7011 USB UHCI DRIVER 7011 USB UHCI DRIVER
7012 M: Alan Stern <stern@rowland.harvard.edu> 7012 M: Alan Stern <stern@rowland.harvard.edu>
7013 L: linux-usb@vger.kernel.org 7013 L: linux-usb@vger.kernel.org
7014 S: Maintained 7014 S: Maintained
7015 F: drivers/usb/host/uhci* 7015 F: drivers/usb/host/uhci*
7016 7016
7017 USB "USBNET" DRIVER FRAMEWORK 7017 USB "USBNET" DRIVER FRAMEWORK
7018 M: Oliver Neukum <oneukum@suse.de> 7018 M: Oliver Neukum <oneukum@suse.de>
7019 L: netdev@vger.kernel.org 7019 L: netdev@vger.kernel.org
7020 W: http://www.linux-usb.org/usbnet 7020 W: http://www.linux-usb.org/usbnet
7021 S: Maintained 7021 S: Maintained
7022 F: drivers/net/usb/usbnet.c 7022 F: drivers/net/usb/usbnet.c
7023 F: include/linux/usb/usbnet.h 7023 F: include/linux/usb/usbnet.h
7024 7024
7025 USB VIDEO CLASS 7025 USB VIDEO CLASS
7026 M: Laurent Pinchart <laurent.pinchart@ideasonboard.com> 7026 M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
7027 L: linux-uvc-devel@lists.berlios.de (subscribers-only) 7027 L: linux-uvc-devel@lists.berlios.de (subscribers-only)
7028 L: linux-media@vger.kernel.org 7028 L: linux-media@vger.kernel.org
7029 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 7029 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
7030 W: http://www.ideasonboard.org/uvc/ 7030 W: http://www.ideasonboard.org/uvc/
7031 S: Maintained 7031 S: Maintained
7032 F: drivers/media/video/uvc/ 7032 F: drivers/media/video/uvc/
7033 7033
7034 USB W996[87]CF DRIVER 7034 USB W996[87]CF DRIVER
7035 M: Luca Risolia <luca.risolia@studio.unibo.it> 7035 M: Luca Risolia <luca.risolia@studio.unibo.it>
7036 L: linux-usb@vger.kernel.org 7036 L: linux-usb@vger.kernel.org
7037 L: linux-media@vger.kernel.org 7037 L: linux-media@vger.kernel.org
7038 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 7038 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
7039 W: http://www.linux-projects.org 7039 W: http://www.linux-projects.org
7040 S: Maintained 7040 S: Maintained
7041 F: Documentation/video4linux/w9968cf.txt 7041 F: Documentation/video4linux/w9968cf.txt
7042 F: drivers/media/video/w996* 7042 F: drivers/media/video/w996*
7043 7043
7044 USB WIRELESS RNDIS DRIVER (rndis_wlan) 7044 USB WIRELESS RNDIS DRIVER (rndis_wlan)
7045 M: Jussi Kivilinna <jussi.kivilinna@mbnet.fi> 7045 M: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
7046 L: linux-wireless@vger.kernel.org 7046 L: linux-wireless@vger.kernel.org
7047 S: Maintained 7047 S: Maintained
7048 F: drivers/net/wireless/rndis_wlan.c 7048 F: drivers/net/wireless/rndis_wlan.c
7049 7049
7050 USB XHCI DRIVER 7050 USB XHCI DRIVER
7051 M: Sarah Sharp <sarah.a.sharp@linux.intel.com> 7051 M: Sarah Sharp <sarah.a.sharp@linux.intel.com>
7052 L: linux-usb@vger.kernel.org 7052 L: linux-usb@vger.kernel.org
7053 S: Supported 7053 S: Supported
7054 F: drivers/usb/host/xhci* 7054 F: drivers/usb/host/xhci*
7055 F: drivers/usb/host/pci-quirks* 7055 F: drivers/usb/host/pci-quirks*
7056 7056
7057 USB ZD1201 DRIVER 7057 USB ZD1201 DRIVER
7058 L: linux-wireless@vger.kernel.org 7058 L: linux-wireless@vger.kernel.org
7059 W: http://linux-lc100020.sourceforge.net 7059 W: http://linux-lc100020.sourceforge.net
7060 S: Orphan 7060 S: Orphan
7061 F: drivers/net/wireless/zd1201.* 7061 F: drivers/net/wireless/zd1201.*
7062 7062
7063 USB ZR364XX DRIVER 7063 USB ZR364XX DRIVER
7064 M: Antoine Jacquet <royale@zerezo.com> 7064 M: Antoine Jacquet <royale@zerezo.com>
7065 L: linux-usb@vger.kernel.org 7065 L: linux-usb@vger.kernel.org
7066 L: linux-media@vger.kernel.org 7066 L: linux-media@vger.kernel.org
7067 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git 7067 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
7068 W: http://royale.zerezo.com/zr364xx/ 7068 W: http://royale.zerezo.com/zr364xx/
7069 S: Maintained 7069 S: Maintained
7070 F: Documentation/video4linux/zr364xx.txt 7070 F: Documentation/video4linux/zr364xx.txt
7071 F: drivers/media/video/zr364xx.c 7071 F: drivers/media/video/zr364xx.c
7072 7072
7073 USER-MODE LINUX (UML) 7073 USER-MODE LINUX (UML)
7074 M: Jeff Dike <jdike@addtoit.com> 7074 M: Jeff Dike <jdike@addtoit.com>
7075 M: Richard Weinberger <richard@nod.at> 7075 M: Richard Weinberger <richard@nod.at>
7076 L: user-mode-linux-devel@lists.sourceforge.net 7076 L: user-mode-linux-devel@lists.sourceforge.net
7077 L: user-mode-linux-user@lists.sourceforge.net 7077 L: user-mode-linux-user@lists.sourceforge.net
7078 W: http://user-mode-linux.sourceforge.net 7078 W: http://user-mode-linux.sourceforge.net
7079 S: Maintained 7079 S: Maintained
7080 F: Documentation/virtual/uml/ 7080 F: Documentation/virtual/uml/
7081 F: arch/um/ 7081 F: arch/um/
7082 F: fs/hostfs/ 7082 F: fs/hostfs/
7083 F: fs/hppfs/ 7083 F: fs/hppfs/
7084 7084
7085 USERSPACE I/O (UIO) 7085 USERSPACE I/O (UIO)
7086 M: "Hans J. Koch" <hjk@hansjkoch.de> 7086 M: "Hans J. Koch" <hjk@hansjkoch.de>
7087 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> 7087 M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
7088 S: Maintained 7088 S: Maintained
7089 F: Documentation/DocBook/uio-howto.tmpl 7089 F: Documentation/DocBook/uio-howto.tmpl
7090 F: drivers/uio/ 7090 F: drivers/uio/
7091 F: include/linux/uio*.h 7091 F: include/linux/uio*.h
7092 7092
7093 UTIL-LINUX-NG PACKAGE 7093 UTIL-LINUX-NG PACKAGE
7094 M: Karel Zak <kzak@redhat.com> 7094 M: Karel Zak <kzak@redhat.com>
7095 L: util-linux-ng@vger.kernel.org 7095 L: util-linux-ng@vger.kernel.org
7096 W: http://kernel.org/~kzak/util-linux-ng/ 7096 W: http://kernel.org/~kzak/util-linux-ng/
7097 T: git git://git.kernel.org/pub/scm/utils/util-linux-ng/util-linux-ng.git 7097 T: git git://git.kernel.org/pub/scm/utils/util-linux-ng/util-linux-ng.git
7098 S: Maintained 7098 S: Maintained
7099 7099
7100 UVESAFB DRIVER 7100 UVESAFB DRIVER
7101 M: Michal Januszewski <spock@gentoo.org> 7101 M: Michal Januszewski <spock@gentoo.org>
7102 L: linux-fbdev@vger.kernel.org 7102 L: linux-fbdev@vger.kernel.org
7103 W: http://dev.gentoo.org/~spock/projects/uvesafb/ 7103 W: http://dev.gentoo.org/~spock/projects/uvesafb/
7104 S: Maintained 7104 S: Maintained
7105 F: Documentation/fb/uvesafb.txt 7105 F: Documentation/fb/uvesafb.txt
7106 F: drivers/video/uvesafb.* 7106 F: drivers/video/uvesafb.*
7107 7107
7108 VFAT/FAT/MSDOS FILESYSTEM 7108 VFAT/FAT/MSDOS FILESYSTEM
7109 M: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> 7109 M: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
7110 S: Maintained 7110 S: Maintained
7111 F: Documentation/filesystems/vfat.txt 7111 F: Documentation/filesystems/vfat.txt
7112 F: fs/fat/ 7112 F: fs/fat/
7113 7113
7114 VIDEOBUF2 FRAMEWORK 7114 VIDEOBUF2 FRAMEWORK
7115 M: Pawel Osciak <pawel@osciak.com> 7115 M: Pawel Osciak <pawel@osciak.com>
7116 M: Marek Szyprowski <m.szyprowski@samsung.com> 7116 M: Marek Szyprowski <m.szyprowski@samsung.com>
7117 M: Kyungmin Park <kyungmin.park@samsung.com> 7117 M: Kyungmin Park <kyungmin.park@samsung.com>
7118 L: linux-media@vger.kernel.org 7118 L: linux-media@vger.kernel.org
7119 S: Maintained 7119 S: Maintained
7120 F: drivers/media/video/videobuf2-* 7120 F: drivers/media/video/videobuf2-*
7121 F: include/media/videobuf2-* 7121 F: include/media/videobuf2-*
7122 7122
7123 VIRTIO CONSOLE DRIVER 7123 VIRTIO CONSOLE DRIVER
7124 M: Amit Shah <amit.shah@redhat.com> 7124 M: Amit Shah <amit.shah@redhat.com>
7125 L: virtualization@lists.linux-foundation.org 7125 L: virtualization@lists.linux-foundation.org
7126 S: Maintained 7126 S: Maintained
7127 F: drivers/char/virtio_console.c 7127 F: drivers/char/virtio_console.c
7128 F: include/linux/virtio_console.h 7128 F: include/linux/virtio_console.h
7129 7129
7130 VIRTIO CORE, NET AND BLOCK DRIVERS 7130 VIRTIO CORE, NET AND BLOCK DRIVERS
7131 M: Rusty Russell <rusty@rustcorp.com.au> 7131 M: Rusty Russell <rusty@rustcorp.com.au>
7132 M: "Michael S. Tsirkin" <mst@redhat.com> 7132 M: "Michael S. Tsirkin" <mst@redhat.com>
7133 L: virtualization@lists.linux-foundation.org 7133 L: virtualization@lists.linux-foundation.org
7134 S: Maintained 7134 S: Maintained
7135 F: drivers/virtio/ 7135 F: drivers/virtio/
7136 F: drivers/net/virtio_net.c 7136 F: drivers/net/virtio_net.c
7137 F: drivers/block/virtio_blk.c 7137 F: drivers/block/virtio_blk.c
7138 F: include/linux/virtio_*.h 7138 F: include/linux/virtio_*.h
7139 7139
7140 VIRTIO HOST (VHOST) 7140 VIRTIO HOST (VHOST)
7141 M: "Michael S. Tsirkin" <mst@redhat.com> 7141 M: "Michael S. Tsirkin" <mst@redhat.com>
7142 L: kvm@vger.kernel.org 7142 L: kvm@vger.kernel.org
7143 L: virtualization@lists.linux-foundation.org 7143 L: virtualization@lists.linux-foundation.org
7144 L: netdev@vger.kernel.org 7144 L: netdev@vger.kernel.org
7145 S: Maintained 7145 S: Maintained
7146 F: drivers/vhost/ 7146 F: drivers/vhost/
7147 F: include/linux/vhost.h 7147 F: include/linux/vhost.h
7148 7148
7149 VIA RHINE NETWORK DRIVER 7149 VIA RHINE NETWORK DRIVER
7150 M: Roger Luethi <rl@hellgate.ch> 7150 M: Roger Luethi <rl@hellgate.ch>
7151 S: Maintained 7151 S: Maintained
7152 F: drivers/net/ethernet/via/via-rhine.c 7152 F: drivers/net/ethernet/via/via-rhine.c
7153 7153
7154 VIAPRO SMBUS DRIVER 7154 VIAPRO SMBUS DRIVER
7155 M: Jean Delvare <khali@linux-fr.org> 7155 M: Jean Delvare <khali@linux-fr.org>
7156 L: linux-i2c@vger.kernel.org 7156 L: linux-i2c@vger.kernel.org
7157 S: Maintained 7157 S: Maintained
7158 F: Documentation/i2c/busses/i2c-viapro 7158 F: Documentation/i2c/busses/i2c-viapro
7159 F: drivers/i2c/busses/i2c-viapro.c 7159 F: drivers/i2c/busses/i2c-viapro.c
7160 7160
7161 VIA SD/MMC CARD CONTROLLER DRIVER 7161 VIA SD/MMC CARD CONTROLLER DRIVER
7162 M: Bruce Chang <brucechang@via.com.tw> 7162 M: Bruce Chang <brucechang@via.com.tw>
7163 M: Harald Welte <HaraldWelte@viatech.com> 7163 M: Harald Welte <HaraldWelte@viatech.com>
7164 S: Maintained 7164 S: Maintained
7165 F: drivers/mmc/host/via-sdmmc.c 7165 F: drivers/mmc/host/via-sdmmc.c
7166 7166
7167 VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER 7167 VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER
7168 M: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> 7168 M: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
7169 L: linux-fbdev@vger.kernel.org 7169 L: linux-fbdev@vger.kernel.org
7170 S: Maintained 7170 S: Maintained
7171 F: include/linux/via-core.h 7171 F: include/linux/via-core.h
7172 F: include/linux/via-gpio.h 7172 F: include/linux/via-gpio.h
7173 F: include/linux/via_i2c.h 7173 F: include/linux/via_i2c.h
7174 F: drivers/video/via/ 7174 F: drivers/video/via/
7175 7175
7176 VIA VELOCITY NETWORK DRIVER 7176 VIA VELOCITY NETWORK DRIVER
7177 M: Francois Romieu <romieu@fr.zoreil.com> 7177 M: Francois Romieu <romieu@fr.zoreil.com>
7178 L: netdev@vger.kernel.org 7178 L: netdev@vger.kernel.org
7179 S: Maintained 7179 S: Maintained
7180 F: drivers/net/ethernet/via/via-velocity.* 7180 F: drivers/net/ethernet/via/via-velocity.*
7181 7181
7182 VLAN (802.1Q) 7182 VLAN (802.1Q)
7183 M: Patrick McHardy <kaber@trash.net> 7183 M: Patrick McHardy <kaber@trash.net>
7184 L: netdev@vger.kernel.org 7184 L: netdev@vger.kernel.org
7185 S: Maintained 7185 S: Maintained
7186 F: drivers/net/macvlan.c 7186 F: drivers/net/macvlan.c
7187 F: include/linux/if_*vlan.h 7187 F: include/linux/if_*vlan.h
7188 F: net/8021q/ 7188 F: net/8021q/
7189 7189
7190 VLYNQ BUS 7190 VLYNQ BUS
7191 M: Florian Fainelli <florian@openwrt.org> 7191 M: Florian Fainelli <florian@openwrt.org>
7192 L: openwrt-devel@lists.openwrt.org (subscribers-only) 7192 L: openwrt-devel@lists.openwrt.org (subscribers-only)
7193 S: Maintained 7193 S: Maintained
7194 F: drivers/vlynq/vlynq.c 7194 F: drivers/vlynq/vlynq.c
7195 F: include/linux/vlynq.h 7195 F: include/linux/vlynq.h
7196 7196
7197 VMWARE VMXNET3 ETHERNET DRIVER 7197 VMWARE VMXNET3 ETHERNET DRIVER
7198 M: Shreyas Bhatewara <sbhatewara@vmware.com> 7198 M: Shreyas Bhatewara <sbhatewara@vmware.com>
7199 M: "VMware, Inc." <pv-drivers@vmware.com> 7199 M: "VMware, Inc." <pv-drivers@vmware.com>
7200 L: netdev@vger.kernel.org 7200 L: netdev@vger.kernel.org
7201 S: Maintained 7201 S: Maintained
7202 F: drivers/net/vmxnet3/ 7202 F: drivers/net/vmxnet3/
7203 7203
7204 VMware PVSCSI driver 7204 VMware PVSCSI driver
7205 M: Arvind Kumar <arvindkumar@vmware.com> 7205 M: Arvind Kumar <arvindkumar@vmware.com>
7206 M: VMware PV-Drivers <pv-drivers@vmware.com> 7206 M: VMware PV-Drivers <pv-drivers@vmware.com>
7207 L: linux-scsi@vger.kernel.org 7207 L: linux-scsi@vger.kernel.org
7208 S: Maintained 7208 S: Maintained
7209 F: drivers/scsi/vmw_pvscsi.c 7209 F: drivers/scsi/vmw_pvscsi.c
7210 F: drivers/scsi/vmw_pvscsi.h 7210 F: drivers/scsi/vmw_pvscsi.h
7211 7211
7212 VOLTAGE AND CURRENT REGULATOR FRAMEWORK 7212 VOLTAGE AND CURRENT REGULATOR FRAMEWORK
7213 M: Liam Girdwood <lrg@ti.com> 7213 M: Liam Girdwood <lrg@ti.com>
7214 M: Mark Brown <broonie@opensource.wolfsonmicro.com> 7214 M: Mark Brown <broonie@opensource.wolfsonmicro.com>
7215 W: http://opensource.wolfsonmicro.com/node/15 7215 W: http://opensource.wolfsonmicro.com/node/15
7216 W: http://www.slimlogic.co.uk/?p=48 7216 W: http://www.slimlogic.co.uk/?p=48
7217 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lrg/voltage-2.6.git 7217 T: git git://git.kernel.org/pub/scm/linux/kernel/git/lrg/voltage-2.6.git
7218 S: Supported 7218 S: Supported
7219 F: drivers/regulator/ 7219 F: drivers/regulator/
7220 F: include/linux/regulator/ 7220 F: include/linux/regulator/
7221 7221
7222 VT1211 HARDWARE MONITOR DRIVER 7222 VT1211 HARDWARE MONITOR DRIVER
7223 M: Juerg Haefliger <juergh@gmail.com> 7223 M: Juerg Haefliger <juergh@gmail.com>
7224 L: lm-sensors@lm-sensors.org 7224 L: lm-sensors@lm-sensors.org
7225 S: Maintained 7225 S: Maintained
7226 F: Documentation/hwmon/vt1211 7226 F: Documentation/hwmon/vt1211
7227 F: drivers/hwmon/vt1211.c 7227 F: drivers/hwmon/vt1211.c
7228 7228
7229 VT8231 HARDWARE MONITOR DRIVER 7229 VT8231 HARDWARE MONITOR DRIVER
7230 M: Roger Lucas <vt8231@hiddenengine.co.uk> 7230 M: Roger Lucas <vt8231@hiddenengine.co.uk>
7231 L: lm-sensors@lm-sensors.org 7231 L: lm-sensors@lm-sensors.org
7232 S: Maintained 7232 S: Maintained
7233 F: drivers/hwmon/vt8231.c 7233 F: drivers/hwmon/vt8231.c
7234 7234
7235 VUB300 USB to SDIO/SD/MMC bridge chip 7235 VUB300 USB to SDIO/SD/MMC bridge chip
7236 M: Tony Olech <tony.olech@elandigitalsystems.com> 7236 M: Tony Olech <tony.olech@elandigitalsystems.com>
7237 L: linux-mmc@vger.kernel.org 7237 L: linux-mmc@vger.kernel.org
7238 L: linux-usb@vger.kernel.org 7238 L: linux-usb@vger.kernel.org
7239 S: Supported 7239 S: Supported
7240 F: drivers/mmc/host/vub300.c 7240 F: drivers/mmc/host/vub300.c
7241 7241
7242 W1 DALLAS'S 1-WIRE BUS 7242 W1 DALLAS'S 1-WIRE BUS
7243 M: Evgeniy Polyakov <zbr@ioremap.net> 7243 M: Evgeniy Polyakov <zbr@ioremap.net>
7244 S: Maintained 7244 S: Maintained
7245 F: Documentation/w1/ 7245 F: Documentation/w1/
7246 F: drivers/w1/ 7246 F: drivers/w1/
7247 7247
7248 W83791D HARDWARE MONITORING DRIVER 7248 W83791D HARDWARE MONITORING DRIVER
7249 M: Marc Hulsman <m.hulsman@tudelft.nl> 7249 M: Marc Hulsman <m.hulsman@tudelft.nl>
7250 L: lm-sensors@lm-sensors.org 7250 L: lm-sensors@lm-sensors.org
7251 S: Maintained 7251 S: Maintained
7252 F: Documentation/hwmon/w83791d 7252 F: Documentation/hwmon/w83791d
7253 F: drivers/hwmon/w83791d.c 7253 F: drivers/hwmon/w83791d.c
7254 7254
7255 W83793 HARDWARE MONITORING DRIVER 7255 W83793 HARDWARE MONITORING DRIVER
7256 M: Rudolf Marek <r.marek@assembler.cz> 7256 M: Rudolf Marek <r.marek@assembler.cz>
7257 L: lm-sensors@lm-sensors.org 7257 L: lm-sensors@lm-sensors.org
7258 S: Maintained 7258 S: Maintained
7259 F: Documentation/hwmon/w83793 7259 F: Documentation/hwmon/w83793
7260 F: drivers/hwmon/w83793.c 7260 F: drivers/hwmon/w83793.c
7261 7261
7262 W83795 HARDWARE MONITORING DRIVER 7262 W83795 HARDWARE MONITORING DRIVER
7263 M: Jean Delvare <khali@linux-fr.org> 7263 M: Jean Delvare <khali@linux-fr.org>
7264 L: lm-sensors@lm-sensors.org 7264 L: lm-sensors@lm-sensors.org
7265 S: Maintained 7265 S: Maintained
7266 F: drivers/hwmon/w83795.c 7266 F: drivers/hwmon/w83795.c
7267 7267
7268 W83L51xD SD/MMC CARD INTERFACE DRIVER 7268 W83L51xD SD/MMC CARD INTERFACE DRIVER
7269 M: Pierre Ossman <pierre@ossman.eu> 7269 M: Pierre Ossman <pierre@ossman.eu>
7270 S: Maintained 7270 S: Maintained
7271 F: drivers/mmc/host/wbsd.* 7271 F: drivers/mmc/host/wbsd.*
7272 7272
7273 WATCHDOG DEVICE DRIVERS 7273 WATCHDOG DEVICE DRIVERS
7274 M: Wim Van Sebroeck <wim@iguana.be> 7274 M: Wim Van Sebroeck <wim@iguana.be>
7275 L: linux-watchdog@vger.kernel.org 7275 L: linux-watchdog@vger.kernel.org
7276 W: http://www.linux-watchdog.org/ 7276 W: http://www.linux-watchdog.org/
7277 T: git git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog.git 7277 T: git git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog.git
7278 S: Maintained 7278 S: Maintained
7279 F: Documentation/watchdog/ 7279 F: Documentation/watchdog/
7280 F: drivers/watchdog/ 7280 F: drivers/watchdog/
7281 F: include/linux/watchdog.h 7281 F: include/linux/watchdog.h
7282 7282
7283 WD7000 SCSI DRIVER 7283 WD7000 SCSI DRIVER
7284 M: Miroslav Zagorac <zaga@fly.cc.fer.hr> 7284 M: Miroslav Zagorac <zaga@fly.cc.fer.hr>
7285 L: linux-scsi@vger.kernel.org 7285 L: linux-scsi@vger.kernel.org
7286 S: Maintained 7286 S: Maintained
7287 F: drivers/scsi/wd7000.c 7287 F: drivers/scsi/wd7000.c
7288 7288
7289 WIIMOTE HID DRIVER 7289 WIIMOTE HID DRIVER
7290 M: David Herrmann <dh.herrmann@googlemail.com> 7290 M: David Herrmann <dh.herrmann@googlemail.com>
7291 L: linux-input@vger.kernel.org 7291 L: linux-input@vger.kernel.org
7292 S: Maintained 7292 S: Maintained
7293 F: drivers/hid/hid-wiimote* 7293 F: drivers/hid/hid-wiimote*
7294 7294
7295 WINBOND CIR DRIVER 7295 WINBOND CIR DRIVER
7296 M: David Hรคrdeman <david@hardeman.nu> 7296 M: David Hรคrdeman <david@hardeman.nu>
7297 S: Maintained 7297 S: Maintained
7298 F: drivers/media/rc/winbond-cir.c 7298 F: drivers/media/rc/winbond-cir.c
7299 7299
7300 WIMAX STACK 7300 WIMAX STACK
7301 M: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> 7301 M: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
7302 M: linux-wimax@intel.com 7302 M: linux-wimax@intel.com
7303 L: wimax@linuxwimax.org 7303 L: wimax@linuxwimax.org
7304 S: Supported 7304 S: Supported
7305 W: http://linuxwimax.org 7305 W: http://linuxwimax.org
7306 F: Documentation/wimax/README.wimax 7306 F: Documentation/wimax/README.wimax
7307 F: include/linux/wimax.h 7307 F: include/linux/wimax.h
7308 F: include/linux/wimax/debug.h 7308 F: include/linux/wimax/debug.h
7309 F: include/net/wimax.h 7309 F: include/net/wimax.h
7310 F: net/wimax/ 7310 F: net/wimax/
7311 7311
7312 WISTRON LAPTOP BUTTON DRIVER 7312 WISTRON LAPTOP BUTTON DRIVER
7313 M: Miloslav Trmac <mitr@volny.cz> 7313 M: Miloslav Trmac <mitr@volny.cz>
7314 S: Maintained 7314 S: Maintained
7315 F: drivers/input/misc/wistron_btns.c 7315 F: drivers/input/misc/wistron_btns.c
7316 7316
7317 WL1251 WIRELESS DRIVER 7317 WL1251 WIRELESS DRIVER
7318 M: Luciano Coelho <coelho@ti.com> 7318 M: Luciano Coelho <coelho@ti.com>
7319 L: linux-wireless@vger.kernel.org 7319 L: linux-wireless@vger.kernel.org
7320 W: http://wireless.kernel.org/en/users/Drivers/wl1251 7320 W: http://wireless.kernel.org/en/users/Drivers/wl1251
7321 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git 7321 T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
7322 S: Maintained 7322 S: Maintained
7323 F: drivers/net/wireless/wl1251/* 7323 F: drivers/net/wireless/wl1251/*
7324 7324
7325 WL1271 WIRELESS DRIVER 7325 WL1271 WIRELESS DRIVER
7326 M: Luciano Coelho <coelho@ti.com> 7326 M: Luciano Coelho <coelho@ti.com>
7327 L: linux-wireless@vger.kernel.org 7327 L: linux-wireless@vger.kernel.org
7328 W: http://wireless.kernel.org/en/users/Drivers/wl12xx 7328 W: http://wireless.kernel.org/en/users/Drivers/wl12xx
7329 T: git git://git.kernel.org/pub/scm/linux/kernel/git/luca/wl12xx.git 7329 T: git git://git.kernel.org/pub/scm/linux/kernel/git/luca/wl12xx.git
7330 S: Maintained 7330 S: Maintained
7331 F: drivers/net/wireless/wl12xx/ 7331 F: drivers/net/wireless/wl12xx/
7332 F: include/linux/wl12xx.h 7332 F: include/linux/wl12xx.h
7333 7333
7334 WL3501 WIRELESS PCMCIA CARD DRIVER 7334 WL3501 WIRELESS PCMCIA CARD DRIVER
7335 M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> 7335 M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
7336 L: linux-wireless@vger.kernel.org 7336 L: linux-wireless@vger.kernel.org
7337 W: http://oops.ghostprotocols.net:81/blog 7337 W: http://oops.ghostprotocols.net:81/blog
7338 S: Maintained 7338 S: Maintained
7339 F: drivers/net/wireless/wl3501* 7339 F: drivers/net/wireless/wl3501*
7340 7340
7341 WM97XX TOUCHSCREEN DRIVERS 7341 WM97XX TOUCHSCREEN DRIVERS
7342 M: Mark Brown <broonie@opensource.wolfsonmicro.com> 7342 M: Mark Brown <broonie@opensource.wolfsonmicro.com>
7343 M: Liam Girdwood <lrg@slimlogic.co.uk> 7343 M: Liam Girdwood <lrg@slimlogic.co.uk>
7344 L: linux-input@vger.kernel.org 7344 L: linux-input@vger.kernel.org
7345 T: git git://opensource.wolfsonmicro.com/linux-2.6-touch 7345 T: git git://opensource.wolfsonmicro.com/linux-2.6-touch
7346 W: http://opensource.wolfsonmicro.com/node/7 7346 W: http://opensource.wolfsonmicro.com/node/7
7347 S: Supported 7347 S: Supported
7348 F: drivers/input/touchscreen/*wm97* 7348 F: drivers/input/touchscreen/*wm97*
7349 F: include/linux/wm97xx.h 7349 F: include/linux/wm97xx.h
7350 7350
7351 WOLFSON MICROELECTRONICS DRIVERS 7351 WOLFSON MICROELECTRONICS DRIVERS
7352 M: Mark Brown <broonie@opensource.wolfsonmicro.com> 7352 M: Mark Brown <broonie@opensource.wolfsonmicro.com>
7353 M: Ian Lartey <ian@opensource.wolfsonmicro.com> 7353 M: Ian Lartey <ian@opensource.wolfsonmicro.com>
7354 M: Dimitris Papastamos <dp@opensource.wolfsonmicro.com> 7354 M: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
7355 T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc 7355 T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc
7356 T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus 7356 T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus
7357 W: http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices 7357 W: http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices
7358 S: Supported 7358 S: Supported
7359 F: Documentation/hwmon/wm83?? 7359 F: Documentation/hwmon/wm83??
7360 F: arch/arm/mach-s3c64xx/mach-crag6410* 7360 F: arch/arm/mach-s3c64xx/mach-crag6410*
7361 F: drivers/leds/leds-wm83*.c 7361 F: drivers/leds/leds-wm83*.c
7362 F: drivers/hwmon/wm83??-hwmon.c 7362 F: drivers/hwmon/wm83??-hwmon.c
7363 F: drivers/input/misc/wm831x-on.c 7363 F: drivers/input/misc/wm831x-on.c
7364 F: drivers/input/touchscreen/wm831x-ts.c 7364 F: drivers/input/touchscreen/wm831x-ts.c
7365 F: drivers/input/touchscreen/wm97*.c 7365 F: drivers/input/touchscreen/wm97*.c
7366 F: drivers/mfd/wm8*.c 7366 F: drivers/mfd/wm8*.c
7367 F: drivers/power/wm83*.c 7367 F: drivers/power/wm83*.c
7368 F: drivers/rtc/rtc-wm83*.c 7368 F: drivers/rtc/rtc-wm83*.c
7369 F: drivers/regulator/wm8*.c 7369 F: drivers/regulator/wm8*.c
7370 F: drivers/video/backlight/wm83*_bl.c 7370 F: drivers/video/backlight/wm83*_bl.c
7371 F: drivers/watchdog/wm83*_wdt.c 7371 F: drivers/watchdog/wm83*_wdt.c
7372 F: include/linux/mfd/wm831x/ 7372 F: include/linux/mfd/wm831x/
7373 F: include/linux/mfd/wm8350/ 7373 F: include/linux/mfd/wm8350/
7374 F: include/linux/mfd/wm8400* 7374 F: include/linux/mfd/wm8400*
7375 F: include/linux/wm97xx.h 7375 F: include/linux/wm97xx.h
7376 F: include/sound/wm????.h 7376 F: include/sound/wm????.h
7377 F: sound/soc/codecs/wm* 7377 F: sound/soc/codecs/wm*
7378 7378
7379 WORKQUEUE 7379 WORKQUEUE
7380 M: Tejun Heo <tj@kernel.org> 7380 M: Tejun Heo <tj@kernel.org>
7381 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git 7381 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git
7382 S: Maintained 7382 S: Maintained
7383 F: include/linux/workqueue.h 7383 F: include/linux/workqueue.h
7384 F: kernel/workqueue.c 7384 F: kernel/workqueue.c
7385 F: Documentation/workqueue.txt 7385 F: Documentation/workqueue.txt
7386 7386
7387 X.25 NETWORK LAYER 7387 X.25 NETWORK LAYER
7388 M: Andrew Hendry <andrew.hendry@gmail.com> 7388 M: Andrew Hendry <andrew.hendry@gmail.com>
7389 L: linux-x25@vger.kernel.org 7389 L: linux-x25@vger.kernel.org
7390 S: Odd Fixes 7390 S: Odd Fixes
7391 F: Documentation/networking/x25* 7391 F: Documentation/networking/x25*
7392 F: include/net/x25* 7392 F: include/net/x25*
7393 F: net/x25/ 7393 F: net/x25/
7394 7394
7395 X86 ARCHITECTURE (32-BIT AND 64-BIT) 7395 X86 ARCHITECTURE (32-BIT AND 64-BIT)
7396 M: Thomas Gleixner <tglx@linutronix.de> 7396 M: Thomas Gleixner <tglx@linutronix.de>
7397 M: Ingo Molnar <mingo@redhat.com> 7397 M: Ingo Molnar <mingo@redhat.com>
7398 M: "H. Peter Anvin" <hpa@zytor.com> 7398 M: "H. Peter Anvin" <hpa@zytor.com>
7399 M: x86@kernel.org 7399 M: x86@kernel.org
7400 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core 7400 T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core
7401 S: Maintained 7401 S: Maintained
7402 F: Documentation/x86/ 7402 F: Documentation/x86/
7403 F: arch/x86/ 7403 F: arch/x86/
7404 7404
7405 X86 PLATFORM DRIVERS 7405 X86 PLATFORM DRIVERS
7406 M: Matthew Garrett <mjg@redhat.com> 7406 M: Matthew Garrett <mjg@redhat.com>
7407 L: platform-driver-x86@vger.kernel.org 7407 L: platform-driver-x86@vger.kernel.org
7408 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86.git 7408 T: git git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86.git
7409 S: Maintained 7409 S: Maintained
7410 F: drivers/platform/x86 7410 F: drivers/platform/x86
7411 7411
7412 X86 MCE INFRASTRUCTURE 7412 X86 MCE INFRASTRUCTURE
7413 M: Tony Luck <tony.luck@intel.com> 7413 M: Tony Luck <tony.luck@intel.com>
7414 M: Borislav Petkov <bp@amd64.org> 7414 M: Borislav Petkov <bp@amd64.org>
7415 L: linux-edac@vger.kernel.org 7415 L: linux-edac@vger.kernel.org
7416 S: Maintained 7416 S: Maintained
7417 F: arch/x86/kernel/cpu/mcheck/* 7417 F: arch/x86/kernel/cpu/mcheck/*
7418 7418
7419 XEN HYPERVISOR INTERFACE 7419 XEN HYPERVISOR INTERFACE
7420 M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> 7420 M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
7421 M: Jeremy Fitzhardinge <jeremy@goop.org> 7421 M: Jeremy Fitzhardinge <jeremy@goop.org>
7422 L: xen-devel@lists.xensource.com (moderated for non-subscribers) 7422 L: xen-devel@lists.xensource.com (moderated for non-subscribers)
7423 L: virtualization@lists.linux-foundation.org 7423 L: virtualization@lists.linux-foundation.org
7424 S: Supported 7424 S: Supported
7425 F: arch/x86/xen/ 7425 F: arch/x86/xen/
7426 F: drivers/*/xen-*front.c 7426 F: drivers/*/xen-*front.c
7427 F: drivers/xen/ 7427 F: drivers/xen/
7428 F: arch/x86/include/asm/xen/ 7428 F: arch/x86/include/asm/xen/
7429 F: include/xen/ 7429 F: include/xen/
7430 7430
7431 XEN NETWORK BACKEND DRIVER 7431 XEN NETWORK BACKEND DRIVER
7432 M: Ian Campbell <ian.campbell@citrix.com> 7432 M: Ian Campbell <ian.campbell@citrix.com>
7433 L: xen-devel@lists.xensource.com (moderated for non-subscribers) 7433 L: xen-devel@lists.xensource.com (moderated for non-subscribers)
7434 L: netdev@vger.kernel.org 7434 L: netdev@vger.kernel.org
7435 S: Supported 7435 S: Supported
7436 F: drivers/net/xen-netback/* 7436 F: drivers/net/xen-netback/*
7437 7437
7438 XEN PCI SUBSYSTEM 7438 XEN PCI SUBSYSTEM
7439 M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> 7439 M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
7440 L: xen-devel@lists.xensource.com (moderated for non-subscribers) 7440 L: xen-devel@lists.xensource.com (moderated for non-subscribers)
7441 S: Supported 7441 S: Supported
7442 F: arch/x86/pci/*xen* 7442 F: arch/x86/pci/*xen*
7443 F: drivers/pci/*xen* 7443 F: drivers/pci/*xen*
7444 7444
7445 XEN SWIOTLB SUBSYSTEM 7445 XEN SWIOTLB SUBSYSTEM
7446 M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> 7446 M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
7447 L: xen-devel@lists.xensource.com (moderated for non-subscribers) 7447 L: xen-devel@lists.xensource.com (moderated for non-subscribers)
7448 S: Supported 7448 S: Supported
7449 F: arch/x86/xen/*swiotlb* 7449 F: arch/x86/xen/*swiotlb*
7450 F: drivers/xen/*swiotlb* 7450 F: drivers/xen/*swiotlb*
7451 7451
7452 XFS FILESYSTEM 7452 XFS FILESYSTEM
7453 P: Silicon Graphics Inc 7453 P: Silicon Graphics Inc
7454 M: Ben Myers <bpm@sgi.com> 7454 M: Ben Myers <bpm@sgi.com>
7455 M: Alex Elder <elder@kernel.org> 7455 M: Alex Elder <elder@kernel.org>
7456 M: xfs-masters@oss.sgi.com 7456 M: xfs-masters@oss.sgi.com
7457 L: xfs@oss.sgi.com 7457 L: xfs@oss.sgi.com
7458 W: http://oss.sgi.com/projects/xfs 7458 W: http://oss.sgi.com/projects/xfs
7459 T: git git://oss.sgi.com/xfs/xfs.git 7459 T: git git://oss.sgi.com/xfs/xfs.git
7460 S: Supported 7460 S: Supported
7461 F: Documentation/filesystems/xfs.txt 7461 F: Documentation/filesystems/xfs.txt
7462 F: fs/xfs/ 7462 F: fs/xfs/
7463 7463
7464 XILINX SYSTEMACE DRIVER 7464 XILINX SYSTEMACE DRIVER
7465 M: Grant Likely <grant.likely@secretlab.ca> 7465 M: Grant Likely <grant.likely@secretlab.ca>
7466 W: http://www.secretlab.ca/ 7466 W: http://www.secretlab.ca/
7467 S: Maintained 7467 S: Maintained
7468 F: drivers/block/xsysace.c 7468 F: drivers/block/xsysace.c
7469 7469
7470 XILINX UARTLITE SERIAL DRIVER 7470 XILINX UARTLITE SERIAL DRIVER
7471 M: Peter Korsgaard <jacmet@sunsite.dk> 7471 M: Peter Korsgaard <jacmet@sunsite.dk>
7472 L: linux-serial@vger.kernel.org 7472 L: linux-serial@vger.kernel.org
7473 S: Maintained 7473 S: Maintained
7474 F: drivers/tty/serial/uartlite.c 7474 F: drivers/tty/serial/uartlite.c
7475 7475
7476 YAM DRIVER FOR AX.25 7476 YAM DRIVER FOR AX.25
7477 M: Jean-Paul Roubelat <jpr@f6fbb.org> 7477 M: Jean-Paul Roubelat <jpr@f6fbb.org>
7478 L: linux-hams@vger.kernel.org 7478 L: linux-hams@vger.kernel.org
7479 S: Maintained 7479 S: Maintained
7480 F: drivers/net/hamradio/yam* 7480 F: drivers/net/hamradio/yam*
7481 F: include/linux/yam.h 7481 F: include/linux/yam.h
7482 7482
7483 YEALINK PHONE DRIVER 7483 YEALINK PHONE DRIVER
7484 M: Henk Vergonet <Henk.Vergonet@gmail.com> 7484 M: Henk Vergonet <Henk.Vergonet@gmail.com>
7485 L: usbb2k-api-dev@nongnu.org 7485 L: usbb2k-api-dev@nongnu.org
7486 S: Maintained 7486 S: Maintained
7487 F: Documentation/input/yealink.txt 7487 F: Documentation/input/yealink.txt
7488 F: drivers/input/misc/yealink.* 7488 F: drivers/input/misc/yealink.*
7489 7489
7490 Z8530 DRIVER FOR AX.25 7490 Z8530 DRIVER FOR AX.25
7491 M: Joerg Reuter <jreuter@yaina.de> 7491 M: Joerg Reuter <jreuter@yaina.de>
7492 W: http://yaina.de/jreuter/ 7492 W: http://yaina.de/jreuter/
7493 W: http://www.qsl.net/dl1bke/ 7493 W: http://www.qsl.net/dl1bke/
7494 L: linux-hams@vger.kernel.org 7494 L: linux-hams@vger.kernel.org
7495 S: Maintained 7495 S: Maintained
7496 F: Documentation/networking/z8530drv.txt 7496 F: Documentation/networking/z8530drv.txt
7497 F: drivers/net/hamradio/*scc.c 7497 F: drivers/net/hamradio/*scc.c
7498 F: drivers/net/hamradio/z8530.h 7498 F: drivers/net/hamradio/z8530.h
7499 7499
7500 ZD1211RW WIRELESS DRIVER 7500 ZD1211RW WIRELESS DRIVER
7501 M: Daniel Drake <dsd@gentoo.org> 7501 M: Daniel Drake <dsd@gentoo.org>
7502 M: Ulrich Kunitz <kune@deine-taler.de> 7502 M: Ulrich Kunitz <kune@deine-taler.de>
7503 W: http://zd1211.ath.cx/wiki/DriverRewrite 7503 W: http://zd1211.ath.cx/wiki/DriverRewrite
7504 L: linux-wireless@vger.kernel.org 7504 L: linux-wireless@vger.kernel.org
7505 L: zd1211-devs@lists.sourceforge.net (subscribers-only) 7505 L: zd1211-devs@lists.sourceforge.net (subscribers-only)
7506 S: Maintained 7506 S: Maintained
7507 F: drivers/net/wireless/zd1211rw/ 7507 F: drivers/net/wireless/zd1211rw/
7508 7508
7509 ZR36067 VIDEO FOR LINUX DRIVER 7509 ZR36067 VIDEO FOR LINUX DRIVER
7510 L: mjpeg-users@lists.sourceforge.net 7510 L: mjpeg-users@lists.sourceforge.net
7511 L: linux-media@vger.kernel.org 7511 L: linux-media@vger.kernel.org
7512 W: http://mjpeg.sourceforge.net/driver-zoran/ 7512 W: http://mjpeg.sourceforge.net/driver-zoran/
7513 T: Mercurial http://linuxtv.org/hg/v4l-dvb 7513 T: Mercurial http://linuxtv.org/hg/v4l-dvb
7514 S: Odd Fixes 7514 S: Odd Fixes
7515 F: drivers/media/video/zoran/ 7515 F: drivers/media/video/zoran/
7516 7516
7517 ZS DECSTATION Z85C30 SERIAL DRIVER 7517 ZS DECSTATION Z85C30 SERIAL DRIVER
7518 M: "Maciej W. Rozycki" <macro@linux-mips.org> 7518 M: "Maciej W. Rozycki" <macro@linux-mips.org>
7519 S: Maintained 7519 S: Maintained
7520 F: drivers/tty/serial/zs.* 7520 F: drivers/tty/serial/zs.*
7521 7521
7522 THE REST 7522 THE REST
7523 M: Linus Torvalds <torvalds@linux-foundation.org> 7523 M: Linus Torvalds <torvalds@linux-foundation.org>
7524 L: linux-kernel@vger.kernel.org 7524 L: linux-kernel@vger.kernel.org
7525 Q: http://patchwork.kernel.org/project/LKML/list/ 7525 Q: http://patchwork.kernel.org/project/LKML/list/
7526 T: git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 7526 T: git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
7527 S: Buried alive in reporters 7527 S: Buried alive in reporters
7528 F: * 7528 F: *
7529 F: */ 7529 F: */
drivers/tty/serial/8250/8250.c
1 /* 1 /*
2 * Driver for 8250/16550-type serial ports 2 * Driver for 8250/16550-type serial ports
3 * 3 *
4 * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o. 4 * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
5 * 5 *
6 * Copyright (C) 2001 Russell King. 6 * Copyright (C) 2001 Russell King.
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify 8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or 10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version. 11 * (at your option) any later version.
12 * 12 *
13 * A note about mapbase / membase 13 * A note about mapbase / membase
14 * 14 *
15 * mapbase is the physical address of the IO port. 15 * mapbase is the physical address of the IO port.
16 * membase is an 'ioremapped' cookie. 16 * membase is an 'ioremapped' cookie.
17 */ 17 */
18 18
19 #if defined(CONFIG_SERIAL_8250_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) 19 #if defined(CONFIG_SERIAL_8250_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
20 #define SUPPORT_SYSRQ 20 #define SUPPORT_SYSRQ
21 #endif 21 #endif
22 22
23 #include <linux/module.h> 23 #include <linux/module.h>
24 #include <linux/moduleparam.h> 24 #include <linux/moduleparam.h>
25 #include <linux/ioport.h> 25 #include <linux/ioport.h>
26 #include <linux/init.h> 26 #include <linux/init.h>
27 #include <linux/console.h> 27 #include <linux/console.h>
28 #include <linux/sysrq.h> 28 #include <linux/sysrq.h>
29 #include <linux/delay.h> 29 #include <linux/delay.h>
30 #include <linux/platform_device.h> 30 #include <linux/platform_device.h>
31 #include <linux/tty.h> 31 #include <linux/tty.h>
32 #include <linux/ratelimit.h> 32 #include <linux/ratelimit.h>
33 #include <linux/tty_flip.h> 33 #include <linux/tty_flip.h>
34 #include <linux/serial_reg.h> 34 #include <linux/serial_reg.h>
35 #include <linux/serial_core.h> 35 #include <linux/serial_core.h>
36 #include <linux/serial.h> 36 #include <linux/serial.h>
37 #include <linux/serial_8250.h> 37 #include <linux/serial_8250.h>
38 #include <linux/nmi.h> 38 #include <linux/nmi.h>
39 #include <linux/mutex.h> 39 #include <linux/mutex.h>
40 #include <linux/slab.h> 40 #include <linux/slab.h>
41 #ifdef CONFIG_SPARC
42 #include <linux/sunserialcore.h>
43 #endif
41 44
42 #include <asm/io.h> 45 #include <asm/io.h>
43 #include <asm/irq.h> 46 #include <asm/irq.h>
44 47
45 #include "8250.h" 48 #include "8250.h"
46
47 #ifdef CONFIG_SPARC
48 #include "../suncore.h"
49 #endif
50 49
51 /* 50 /*
52 * Configuration: 51 * Configuration:
53 * share_irqs - whether we pass IRQF_SHARED to request_irq(). This option 52 * share_irqs - whether we pass IRQF_SHARED to request_irq(). This option
54 * is unsafe when used on edge-triggered interrupts. 53 * is unsafe when used on edge-triggered interrupts.
55 */ 54 */
56 static unsigned int share_irqs = SERIAL8250_SHARE_IRQS; 55 static unsigned int share_irqs = SERIAL8250_SHARE_IRQS;
57 56
58 static unsigned int nr_uarts = CONFIG_SERIAL_8250_RUNTIME_UARTS; 57 static unsigned int nr_uarts = CONFIG_SERIAL_8250_RUNTIME_UARTS;
59 58
60 static struct uart_driver serial8250_reg; 59 static struct uart_driver serial8250_reg;
61 60
62 static int serial_index(struct uart_port *port) 61 static int serial_index(struct uart_port *port)
63 { 62 {
64 return (serial8250_reg.minor - 64) + port->line; 63 return (serial8250_reg.minor - 64) + port->line;
65 } 64 }
66 65
67 static unsigned int skip_txen_test; /* force skip of txen test at init time */ 66 static unsigned int skip_txen_test; /* force skip of txen test at init time */
68 67
69 /* 68 /*
70 * Debugging. 69 * Debugging.
71 */ 70 */
72 #if 0 71 #if 0
73 #define DEBUG_AUTOCONF(fmt...) printk(fmt) 72 #define DEBUG_AUTOCONF(fmt...) printk(fmt)
74 #else 73 #else
75 #define DEBUG_AUTOCONF(fmt...) do { } while (0) 74 #define DEBUG_AUTOCONF(fmt...) do { } while (0)
76 #endif 75 #endif
77 76
78 #if 0 77 #if 0
79 #define DEBUG_INTR(fmt...) printk(fmt) 78 #define DEBUG_INTR(fmt...) printk(fmt)
80 #else 79 #else
81 #define DEBUG_INTR(fmt...) do { } while (0) 80 #define DEBUG_INTR(fmt...) do { } while (0)
82 #endif 81 #endif
83 82
84 #define PASS_LIMIT 512 83 #define PASS_LIMIT 512
85 84
86 #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE) 85 #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
87 86
88 87
89 #ifdef CONFIG_SERIAL_8250_DETECT_IRQ 88 #ifdef CONFIG_SERIAL_8250_DETECT_IRQ
90 #define CONFIG_SERIAL_DETECT_IRQ 1 89 #define CONFIG_SERIAL_DETECT_IRQ 1
91 #endif 90 #endif
92 #ifdef CONFIG_SERIAL_8250_MANY_PORTS 91 #ifdef CONFIG_SERIAL_8250_MANY_PORTS
93 #define CONFIG_SERIAL_MANY_PORTS 1 92 #define CONFIG_SERIAL_MANY_PORTS 1
94 #endif 93 #endif
95 94
96 /* 95 /*
97 * HUB6 is always on. This will be removed once the header 96 * HUB6 is always on. This will be removed once the header
98 * files have been cleaned. 97 * files have been cleaned.
99 */ 98 */
100 #define CONFIG_HUB6 1 99 #define CONFIG_HUB6 1
101 100
102 #include <asm/serial.h> 101 #include <asm/serial.h>
103 /* 102 /*
104 * SERIAL_PORT_DFNS tells us about built-in ports that have no 103 * SERIAL_PORT_DFNS tells us about built-in ports that have no
105 * standard enumeration mechanism. Platforms that can find all 104 * standard enumeration mechanism. Platforms that can find all
106 * serial ports via mechanisms like ACPI or PCI need not supply it. 105 * serial ports via mechanisms like ACPI or PCI need not supply it.
107 */ 106 */
108 #ifndef SERIAL_PORT_DFNS 107 #ifndef SERIAL_PORT_DFNS
109 #define SERIAL_PORT_DFNS 108 #define SERIAL_PORT_DFNS
110 #endif 109 #endif
111 110
112 static const struct old_serial_port old_serial_port[] = { 111 static const struct old_serial_port old_serial_port[] = {
113 SERIAL_PORT_DFNS /* defined in asm/serial.h */ 112 SERIAL_PORT_DFNS /* defined in asm/serial.h */
114 }; 113 };
115 114
116 #define UART_NR CONFIG_SERIAL_8250_NR_UARTS 115 #define UART_NR CONFIG_SERIAL_8250_NR_UARTS
117 116
118 #ifdef CONFIG_SERIAL_8250_RSA 117 #ifdef CONFIG_SERIAL_8250_RSA
119 118
120 #define PORT_RSA_MAX 4 119 #define PORT_RSA_MAX 4
121 static unsigned long probe_rsa[PORT_RSA_MAX]; 120 static unsigned long probe_rsa[PORT_RSA_MAX];
122 static unsigned int probe_rsa_count; 121 static unsigned int probe_rsa_count;
123 #endif /* CONFIG_SERIAL_8250_RSA */ 122 #endif /* CONFIG_SERIAL_8250_RSA */
124 123
125 struct irq_info { 124 struct irq_info {
126 struct hlist_node node; 125 struct hlist_node node;
127 int irq; 126 int irq;
128 spinlock_t lock; /* Protects list not the hash */ 127 spinlock_t lock; /* Protects list not the hash */
129 struct list_head *head; 128 struct list_head *head;
130 }; 129 };
131 130
132 #define NR_IRQ_HASH 32 /* Can be adjusted later */ 131 #define NR_IRQ_HASH 32 /* Can be adjusted later */
133 static struct hlist_head irq_lists[NR_IRQ_HASH]; 132 static struct hlist_head irq_lists[NR_IRQ_HASH];
134 static DEFINE_MUTEX(hash_mutex); /* Used to walk the hash */ 133 static DEFINE_MUTEX(hash_mutex); /* Used to walk the hash */
135 134
136 /* 135 /*
137 * Here we define the default xmit fifo size used for each type of UART. 136 * Here we define the default xmit fifo size used for each type of UART.
138 */ 137 */
139 static const struct serial8250_config uart_config[] = { 138 static const struct serial8250_config uart_config[] = {
140 [PORT_UNKNOWN] = { 139 [PORT_UNKNOWN] = {
141 .name = "unknown", 140 .name = "unknown",
142 .fifo_size = 1, 141 .fifo_size = 1,
143 .tx_loadsz = 1, 142 .tx_loadsz = 1,
144 }, 143 },
145 [PORT_8250] = { 144 [PORT_8250] = {
146 .name = "8250", 145 .name = "8250",
147 .fifo_size = 1, 146 .fifo_size = 1,
148 .tx_loadsz = 1, 147 .tx_loadsz = 1,
149 }, 148 },
150 [PORT_16450] = { 149 [PORT_16450] = {
151 .name = "16450", 150 .name = "16450",
152 .fifo_size = 1, 151 .fifo_size = 1,
153 .tx_loadsz = 1, 152 .tx_loadsz = 1,
154 }, 153 },
155 [PORT_16550] = { 154 [PORT_16550] = {
156 .name = "16550", 155 .name = "16550",
157 .fifo_size = 1, 156 .fifo_size = 1,
158 .tx_loadsz = 1, 157 .tx_loadsz = 1,
159 }, 158 },
160 [PORT_16550A] = { 159 [PORT_16550A] = {
161 .name = "16550A", 160 .name = "16550A",
162 .fifo_size = 16, 161 .fifo_size = 16,
163 .tx_loadsz = 16, 162 .tx_loadsz = 16,
164 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, 163 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
165 .flags = UART_CAP_FIFO, 164 .flags = UART_CAP_FIFO,
166 }, 165 },
167 [PORT_CIRRUS] = { 166 [PORT_CIRRUS] = {
168 .name = "Cirrus", 167 .name = "Cirrus",
169 .fifo_size = 1, 168 .fifo_size = 1,
170 .tx_loadsz = 1, 169 .tx_loadsz = 1,
171 }, 170 },
172 [PORT_16650] = { 171 [PORT_16650] = {
173 .name = "ST16650", 172 .name = "ST16650",
174 .fifo_size = 1, 173 .fifo_size = 1,
175 .tx_loadsz = 1, 174 .tx_loadsz = 1,
176 .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP, 175 .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
177 }, 176 },
178 [PORT_16650V2] = { 177 [PORT_16650V2] = {
179 .name = "ST16650V2", 178 .name = "ST16650V2",
180 .fifo_size = 32, 179 .fifo_size = 32,
181 .tx_loadsz = 16, 180 .tx_loadsz = 16,
182 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 | 181 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 |
183 UART_FCR_T_TRIG_00, 182 UART_FCR_T_TRIG_00,
184 .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP, 183 .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
185 }, 184 },
186 [PORT_16750] = { 185 [PORT_16750] = {
187 .name = "TI16750", 186 .name = "TI16750",
188 .fifo_size = 64, 187 .fifo_size = 64,
189 .tx_loadsz = 64, 188 .tx_loadsz = 64,
190 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 | 189 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 |
191 UART_FCR7_64BYTE, 190 UART_FCR7_64BYTE,
192 .flags = UART_CAP_FIFO | UART_CAP_SLEEP | UART_CAP_AFE, 191 .flags = UART_CAP_FIFO | UART_CAP_SLEEP | UART_CAP_AFE,
193 }, 192 },
194 [PORT_STARTECH] = { 193 [PORT_STARTECH] = {
195 .name = "Startech", 194 .name = "Startech",
196 .fifo_size = 1, 195 .fifo_size = 1,
197 .tx_loadsz = 1, 196 .tx_loadsz = 1,
198 }, 197 },
199 [PORT_16C950] = { 198 [PORT_16C950] = {
200 .name = "16C950/954", 199 .name = "16C950/954",
201 .fifo_size = 128, 200 .fifo_size = 128,
202 .tx_loadsz = 128, 201 .tx_loadsz = 128,
203 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, 202 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
204 /* UART_CAP_EFR breaks billionon CF bluetooth card. */ 203 /* UART_CAP_EFR breaks billionon CF bluetooth card. */
205 .flags = UART_CAP_FIFO | UART_CAP_SLEEP, 204 .flags = UART_CAP_FIFO | UART_CAP_SLEEP,
206 }, 205 },
207 [PORT_16654] = { 206 [PORT_16654] = {
208 .name = "ST16654", 207 .name = "ST16654",
209 .fifo_size = 64, 208 .fifo_size = 64,
210 .tx_loadsz = 32, 209 .tx_loadsz = 32,
211 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 | 210 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 |
212 UART_FCR_T_TRIG_10, 211 UART_FCR_T_TRIG_10,
213 .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP, 212 .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
214 }, 213 },
215 [PORT_16850] = { 214 [PORT_16850] = {
216 .name = "XR16850", 215 .name = "XR16850",
217 .fifo_size = 128, 216 .fifo_size = 128,
218 .tx_loadsz = 128, 217 .tx_loadsz = 128,
219 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, 218 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
220 .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP, 219 .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
221 }, 220 },
222 [PORT_RSA] = { 221 [PORT_RSA] = {
223 .name = "RSA", 222 .name = "RSA",
224 .fifo_size = 2048, 223 .fifo_size = 2048,
225 .tx_loadsz = 2048, 224 .tx_loadsz = 2048,
226 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_11, 225 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_11,
227 .flags = UART_CAP_FIFO, 226 .flags = UART_CAP_FIFO,
228 }, 227 },
229 [PORT_NS16550A] = { 228 [PORT_NS16550A] = {
230 .name = "NS16550A", 229 .name = "NS16550A",
231 .fifo_size = 16, 230 .fifo_size = 16,
232 .tx_loadsz = 16, 231 .tx_loadsz = 16,
233 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, 232 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
234 .flags = UART_CAP_FIFO | UART_NATSEMI, 233 .flags = UART_CAP_FIFO | UART_NATSEMI,
235 }, 234 },
236 [PORT_XSCALE] = { 235 [PORT_XSCALE] = {
237 .name = "XScale", 236 .name = "XScale",
238 .fifo_size = 32, 237 .fifo_size = 32,
239 .tx_loadsz = 32, 238 .tx_loadsz = 32,
240 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, 239 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
241 .flags = UART_CAP_FIFO | UART_CAP_UUE | UART_CAP_RTOIE, 240 .flags = UART_CAP_FIFO | UART_CAP_UUE | UART_CAP_RTOIE,
242 }, 241 },
243 [PORT_RM9000] = { 242 [PORT_RM9000] = {
244 .name = "RM9000", 243 .name = "RM9000",
245 .fifo_size = 16, 244 .fifo_size = 16,
246 .tx_loadsz = 16, 245 .tx_loadsz = 16,
247 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, 246 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
248 .flags = UART_CAP_FIFO, 247 .flags = UART_CAP_FIFO,
249 }, 248 },
250 [PORT_OCTEON] = { 249 [PORT_OCTEON] = {
251 .name = "OCTEON", 250 .name = "OCTEON",
252 .fifo_size = 64, 251 .fifo_size = 64,
253 .tx_loadsz = 64, 252 .tx_loadsz = 64,
254 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, 253 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
255 .flags = UART_CAP_FIFO, 254 .flags = UART_CAP_FIFO,
256 }, 255 },
257 [PORT_AR7] = { 256 [PORT_AR7] = {
258 .name = "AR7", 257 .name = "AR7",
259 .fifo_size = 16, 258 .fifo_size = 16,
260 .tx_loadsz = 16, 259 .tx_loadsz = 16,
261 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_00, 260 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_00,
262 .flags = UART_CAP_FIFO | UART_CAP_AFE, 261 .flags = UART_CAP_FIFO | UART_CAP_AFE,
263 }, 262 },
264 [PORT_U6_16550A] = { 263 [PORT_U6_16550A] = {
265 .name = "U6_16550A", 264 .name = "U6_16550A",
266 .fifo_size = 64, 265 .fifo_size = 64,
267 .tx_loadsz = 64, 266 .tx_loadsz = 64,
268 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, 267 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
269 .flags = UART_CAP_FIFO | UART_CAP_AFE, 268 .flags = UART_CAP_FIFO | UART_CAP_AFE,
270 }, 269 },
271 [PORT_TEGRA] = { 270 [PORT_TEGRA] = {
272 .name = "Tegra", 271 .name = "Tegra",
273 .fifo_size = 32, 272 .fifo_size = 32,
274 .tx_loadsz = 8, 273 .tx_loadsz = 8,
275 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 | 274 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 |
276 UART_FCR_T_TRIG_01, 275 UART_FCR_T_TRIG_01,
277 .flags = UART_CAP_FIFO | UART_CAP_RTOIE, 276 .flags = UART_CAP_FIFO | UART_CAP_RTOIE,
278 }, 277 },
279 [PORT_XR17D15X] = { 278 [PORT_XR17D15X] = {
280 .name = "XR17D15X", 279 .name = "XR17D15X",
281 .fifo_size = 64, 280 .fifo_size = 64,
282 .tx_loadsz = 64, 281 .tx_loadsz = 64,
283 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, 282 .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
284 .flags = UART_CAP_FIFO | UART_CAP_AFE | UART_CAP_EFR, 283 .flags = UART_CAP_FIFO | UART_CAP_AFE | UART_CAP_EFR,
285 }, 284 },
286 }; 285 };
287 286
288 #if defined(CONFIG_MIPS_ALCHEMY) 287 #if defined(CONFIG_MIPS_ALCHEMY)
289 288
290 /* Au1x00 UART hardware has a weird register layout */ 289 /* Au1x00 UART hardware has a weird register layout */
291 static const u8 au_io_in_map[] = { 290 static const u8 au_io_in_map[] = {
292 [UART_RX] = 0, 291 [UART_RX] = 0,
293 [UART_IER] = 2, 292 [UART_IER] = 2,
294 [UART_IIR] = 3, 293 [UART_IIR] = 3,
295 [UART_LCR] = 5, 294 [UART_LCR] = 5,
296 [UART_MCR] = 6, 295 [UART_MCR] = 6,
297 [UART_LSR] = 7, 296 [UART_LSR] = 7,
298 [UART_MSR] = 8, 297 [UART_MSR] = 8,
299 }; 298 };
300 299
301 static const u8 au_io_out_map[] = { 300 static const u8 au_io_out_map[] = {
302 [UART_TX] = 1, 301 [UART_TX] = 1,
303 [UART_IER] = 2, 302 [UART_IER] = 2,
304 [UART_FCR] = 4, 303 [UART_FCR] = 4,
305 [UART_LCR] = 5, 304 [UART_LCR] = 5,
306 [UART_MCR] = 6, 305 [UART_MCR] = 6,
307 }; 306 };
308 307
309 /* sane hardware needs no mapping */ 308 /* sane hardware needs no mapping */
310 static inline int map_8250_in_reg(struct uart_port *p, int offset) 309 static inline int map_8250_in_reg(struct uart_port *p, int offset)
311 { 310 {
312 if (p->iotype != UPIO_AU) 311 if (p->iotype != UPIO_AU)
313 return offset; 312 return offset;
314 return au_io_in_map[offset]; 313 return au_io_in_map[offset];
315 } 314 }
316 315
317 static inline int map_8250_out_reg(struct uart_port *p, int offset) 316 static inline int map_8250_out_reg(struct uart_port *p, int offset)
318 { 317 {
319 if (p->iotype != UPIO_AU) 318 if (p->iotype != UPIO_AU)
320 return offset; 319 return offset;
321 return au_io_out_map[offset]; 320 return au_io_out_map[offset];
322 } 321 }
323 322
324 #elif defined(CONFIG_SERIAL_8250_RM9K) 323 #elif defined(CONFIG_SERIAL_8250_RM9K)
325 324
326 static const u8 325 static const u8
327 regmap_in[8] = { 326 regmap_in[8] = {
328 [UART_RX] = 0x00, 327 [UART_RX] = 0x00,
329 [UART_IER] = 0x0c, 328 [UART_IER] = 0x0c,
330 [UART_IIR] = 0x14, 329 [UART_IIR] = 0x14,
331 [UART_LCR] = 0x1c, 330 [UART_LCR] = 0x1c,
332 [UART_MCR] = 0x20, 331 [UART_MCR] = 0x20,
333 [UART_LSR] = 0x24, 332 [UART_LSR] = 0x24,
334 [UART_MSR] = 0x28, 333 [UART_MSR] = 0x28,
335 [UART_SCR] = 0x2c 334 [UART_SCR] = 0x2c
336 }, 335 },
337 regmap_out[8] = { 336 regmap_out[8] = {
338 [UART_TX] = 0x04, 337 [UART_TX] = 0x04,
339 [UART_IER] = 0x0c, 338 [UART_IER] = 0x0c,
340 [UART_FCR] = 0x18, 339 [UART_FCR] = 0x18,
341 [UART_LCR] = 0x1c, 340 [UART_LCR] = 0x1c,
342 [UART_MCR] = 0x20, 341 [UART_MCR] = 0x20,
343 [UART_LSR] = 0x24, 342 [UART_LSR] = 0x24,
344 [UART_MSR] = 0x28, 343 [UART_MSR] = 0x28,
345 [UART_SCR] = 0x2c 344 [UART_SCR] = 0x2c
346 }; 345 };
347 346
348 static inline int map_8250_in_reg(struct uart_port *p, int offset) 347 static inline int map_8250_in_reg(struct uart_port *p, int offset)
349 { 348 {
350 if (p->iotype != UPIO_RM9000) 349 if (p->iotype != UPIO_RM9000)
351 return offset; 350 return offset;
352 return regmap_in[offset]; 351 return regmap_in[offset];
353 } 352 }
354 353
355 static inline int map_8250_out_reg(struct uart_port *p, int offset) 354 static inline int map_8250_out_reg(struct uart_port *p, int offset)
356 { 355 {
357 if (p->iotype != UPIO_RM9000) 356 if (p->iotype != UPIO_RM9000)
358 return offset; 357 return offset;
359 return regmap_out[offset]; 358 return regmap_out[offset];
360 } 359 }
361 360
362 #else 361 #else
363 362
364 /* sane hardware needs no mapping */ 363 /* sane hardware needs no mapping */
365 #define map_8250_in_reg(up, offset) (offset) 364 #define map_8250_in_reg(up, offset) (offset)
366 #define map_8250_out_reg(up, offset) (offset) 365 #define map_8250_out_reg(up, offset) (offset)
367 366
368 #endif 367 #endif
369 368
370 static unsigned int hub6_serial_in(struct uart_port *p, int offset) 369 static unsigned int hub6_serial_in(struct uart_port *p, int offset)
371 { 370 {
372 offset = map_8250_in_reg(p, offset) << p->regshift; 371 offset = map_8250_in_reg(p, offset) << p->regshift;
373 outb(p->hub6 - 1 + offset, p->iobase); 372 outb(p->hub6 - 1 + offset, p->iobase);
374 return inb(p->iobase + 1); 373 return inb(p->iobase + 1);
375 } 374 }
376 375
377 static void hub6_serial_out(struct uart_port *p, int offset, int value) 376 static void hub6_serial_out(struct uart_port *p, int offset, int value)
378 { 377 {
379 offset = map_8250_out_reg(p, offset) << p->regshift; 378 offset = map_8250_out_reg(p, offset) << p->regshift;
380 outb(p->hub6 - 1 + offset, p->iobase); 379 outb(p->hub6 - 1 + offset, p->iobase);
381 outb(value, p->iobase + 1); 380 outb(value, p->iobase + 1);
382 } 381 }
383 382
384 static unsigned int mem_serial_in(struct uart_port *p, int offset) 383 static unsigned int mem_serial_in(struct uart_port *p, int offset)
385 { 384 {
386 offset = map_8250_in_reg(p, offset) << p->regshift; 385 offset = map_8250_in_reg(p, offset) << p->regshift;
387 return readb(p->membase + offset); 386 return readb(p->membase + offset);
388 } 387 }
389 388
390 static void mem_serial_out(struct uart_port *p, int offset, int value) 389 static void mem_serial_out(struct uart_port *p, int offset, int value)
391 { 390 {
392 offset = map_8250_out_reg(p, offset) << p->regshift; 391 offset = map_8250_out_reg(p, offset) << p->regshift;
393 writeb(value, p->membase + offset); 392 writeb(value, p->membase + offset);
394 } 393 }
395 394
396 static void mem32_serial_out(struct uart_port *p, int offset, int value) 395 static void mem32_serial_out(struct uart_port *p, int offset, int value)
397 { 396 {
398 offset = map_8250_out_reg(p, offset) << p->regshift; 397 offset = map_8250_out_reg(p, offset) << p->regshift;
399 writel(value, p->membase + offset); 398 writel(value, p->membase + offset);
400 } 399 }
401 400
402 static unsigned int mem32_serial_in(struct uart_port *p, int offset) 401 static unsigned int mem32_serial_in(struct uart_port *p, int offset)
403 { 402 {
404 offset = map_8250_in_reg(p, offset) << p->regshift; 403 offset = map_8250_in_reg(p, offset) << p->regshift;
405 return readl(p->membase + offset); 404 return readl(p->membase + offset);
406 } 405 }
407 406
408 static unsigned int au_serial_in(struct uart_port *p, int offset) 407 static unsigned int au_serial_in(struct uart_port *p, int offset)
409 { 408 {
410 offset = map_8250_in_reg(p, offset) << p->regshift; 409 offset = map_8250_in_reg(p, offset) << p->regshift;
411 return __raw_readl(p->membase + offset); 410 return __raw_readl(p->membase + offset);
412 } 411 }
413 412
414 static void au_serial_out(struct uart_port *p, int offset, int value) 413 static void au_serial_out(struct uart_port *p, int offset, int value)
415 { 414 {
416 offset = map_8250_out_reg(p, offset) << p->regshift; 415 offset = map_8250_out_reg(p, offset) << p->regshift;
417 __raw_writel(value, p->membase + offset); 416 __raw_writel(value, p->membase + offset);
418 } 417 }
419 418
420 static unsigned int io_serial_in(struct uart_port *p, int offset) 419 static unsigned int io_serial_in(struct uart_port *p, int offset)
421 { 420 {
422 offset = map_8250_in_reg(p, offset) << p->regshift; 421 offset = map_8250_in_reg(p, offset) << p->regshift;
423 return inb(p->iobase + offset); 422 return inb(p->iobase + offset);
424 } 423 }
425 424
426 static void io_serial_out(struct uart_port *p, int offset, int value) 425 static void io_serial_out(struct uart_port *p, int offset, int value)
427 { 426 {
428 offset = map_8250_out_reg(p, offset) << p->regshift; 427 offset = map_8250_out_reg(p, offset) << p->regshift;
429 outb(value, p->iobase + offset); 428 outb(value, p->iobase + offset);
430 } 429 }
431 430
432 static int serial8250_default_handle_irq(struct uart_port *port); 431 static int serial8250_default_handle_irq(struct uart_port *port);
433 432
434 static void set_io_from_upio(struct uart_port *p) 433 static void set_io_from_upio(struct uart_port *p)
435 { 434 {
436 struct uart_8250_port *up = 435 struct uart_8250_port *up =
437 container_of(p, struct uart_8250_port, port); 436 container_of(p, struct uart_8250_port, port);
438 switch (p->iotype) { 437 switch (p->iotype) {
439 case UPIO_HUB6: 438 case UPIO_HUB6:
440 p->serial_in = hub6_serial_in; 439 p->serial_in = hub6_serial_in;
441 p->serial_out = hub6_serial_out; 440 p->serial_out = hub6_serial_out;
442 break; 441 break;
443 442
444 case UPIO_MEM: 443 case UPIO_MEM:
445 p->serial_in = mem_serial_in; 444 p->serial_in = mem_serial_in;
446 p->serial_out = mem_serial_out; 445 p->serial_out = mem_serial_out;
447 break; 446 break;
448 447
449 case UPIO_RM9000: 448 case UPIO_RM9000:
450 case UPIO_MEM32: 449 case UPIO_MEM32:
451 p->serial_in = mem32_serial_in; 450 p->serial_in = mem32_serial_in;
452 p->serial_out = mem32_serial_out; 451 p->serial_out = mem32_serial_out;
453 break; 452 break;
454 453
455 case UPIO_AU: 454 case UPIO_AU:
456 p->serial_in = au_serial_in; 455 p->serial_in = au_serial_in;
457 p->serial_out = au_serial_out; 456 p->serial_out = au_serial_out;
458 break; 457 break;
459 458
460 default: 459 default:
461 p->serial_in = io_serial_in; 460 p->serial_in = io_serial_in;
462 p->serial_out = io_serial_out; 461 p->serial_out = io_serial_out;
463 break; 462 break;
464 } 463 }
465 /* Remember loaded iotype */ 464 /* Remember loaded iotype */
466 up->cur_iotype = p->iotype; 465 up->cur_iotype = p->iotype;
467 p->handle_irq = serial8250_default_handle_irq; 466 p->handle_irq = serial8250_default_handle_irq;
468 } 467 }
469 468
470 static void 469 static void
471 serial_out_sync(struct uart_8250_port *up, int offset, int value) 470 serial_out_sync(struct uart_8250_port *up, int offset, int value)
472 { 471 {
473 struct uart_port *p = &up->port; 472 struct uart_port *p = &up->port;
474 switch (p->iotype) { 473 switch (p->iotype) {
475 case UPIO_MEM: 474 case UPIO_MEM:
476 case UPIO_MEM32: 475 case UPIO_MEM32:
477 case UPIO_AU: 476 case UPIO_AU:
478 p->serial_out(p, offset, value); 477 p->serial_out(p, offset, value);
479 p->serial_in(p, UART_LCR); /* safe, no side-effects */ 478 p->serial_in(p, UART_LCR); /* safe, no side-effects */
480 break; 479 break;
481 default: 480 default:
482 p->serial_out(p, offset, value); 481 p->serial_out(p, offset, value);
483 } 482 }
484 } 483 }
485 484
486 #define serial_in(up, offset) \ 485 #define serial_in(up, offset) \
487 (up->port.serial_in(&(up)->port, (offset))) 486 (up->port.serial_in(&(up)->port, (offset)))
488 #define serial_out(up, offset, value) \ 487 #define serial_out(up, offset, value) \
489 (up->port.serial_out(&(up)->port, (offset), (value))) 488 (up->port.serial_out(&(up)->port, (offset), (value)))
490 /* 489 /*
491 * We used to support using pause I/O for certain machines. We 490 * We used to support using pause I/O for certain machines. We
492 * haven't supported this for a while, but just in case it's badly 491 * haven't supported this for a while, but just in case it's badly
493 * needed for certain old 386 machines, I've left these #define's 492 * needed for certain old 386 machines, I've left these #define's
494 * in.... 493 * in....
495 */ 494 */
496 #define serial_inp(up, offset) serial_in(up, offset) 495 #define serial_inp(up, offset) serial_in(up, offset)
497 #define serial_outp(up, offset, value) serial_out(up, offset, value) 496 #define serial_outp(up, offset, value) serial_out(up, offset, value)
498 497
499 /* Uart divisor latch read */ 498 /* Uart divisor latch read */
500 static inline int _serial_dl_read(struct uart_8250_port *up) 499 static inline int _serial_dl_read(struct uart_8250_port *up)
501 { 500 {
502 return serial_inp(up, UART_DLL) | serial_inp(up, UART_DLM) << 8; 501 return serial_inp(up, UART_DLL) | serial_inp(up, UART_DLM) << 8;
503 } 502 }
504 503
505 /* Uart divisor latch write */ 504 /* Uart divisor latch write */
506 static inline void _serial_dl_write(struct uart_8250_port *up, int value) 505 static inline void _serial_dl_write(struct uart_8250_port *up, int value)
507 { 506 {
508 serial_outp(up, UART_DLL, value & 0xff); 507 serial_outp(up, UART_DLL, value & 0xff);
509 serial_outp(up, UART_DLM, value >> 8 & 0xff); 508 serial_outp(up, UART_DLM, value >> 8 & 0xff);
510 } 509 }
511 510
512 #if defined(CONFIG_MIPS_ALCHEMY) 511 #if defined(CONFIG_MIPS_ALCHEMY)
513 /* Au1x00 haven't got a standard divisor latch */ 512 /* Au1x00 haven't got a standard divisor latch */
514 static int serial_dl_read(struct uart_8250_port *up) 513 static int serial_dl_read(struct uart_8250_port *up)
515 { 514 {
516 if (up->port.iotype == UPIO_AU) 515 if (up->port.iotype == UPIO_AU)
517 return __raw_readl(up->port.membase + 0x28); 516 return __raw_readl(up->port.membase + 0x28);
518 else 517 else
519 return _serial_dl_read(up); 518 return _serial_dl_read(up);
520 } 519 }
521 520
522 static void serial_dl_write(struct uart_8250_port *up, int value) 521 static void serial_dl_write(struct uart_8250_port *up, int value)
523 { 522 {
524 if (up->port.iotype == UPIO_AU) 523 if (up->port.iotype == UPIO_AU)
525 __raw_writel(value, up->port.membase + 0x28); 524 __raw_writel(value, up->port.membase + 0x28);
526 else 525 else
527 _serial_dl_write(up, value); 526 _serial_dl_write(up, value);
528 } 527 }
529 #elif defined(CONFIG_SERIAL_8250_RM9K) 528 #elif defined(CONFIG_SERIAL_8250_RM9K)
530 static int serial_dl_read(struct uart_8250_port *up) 529 static int serial_dl_read(struct uart_8250_port *up)
531 { 530 {
532 return (up->port.iotype == UPIO_RM9000) ? 531 return (up->port.iotype == UPIO_RM9000) ?
533 (((__raw_readl(up->port.membase + 0x10) << 8) | 532 (((__raw_readl(up->port.membase + 0x10) << 8) |
534 (__raw_readl(up->port.membase + 0x08) & 0xff)) & 0xffff) : 533 (__raw_readl(up->port.membase + 0x08) & 0xff)) & 0xffff) :
535 _serial_dl_read(up); 534 _serial_dl_read(up);
536 } 535 }
537 536
538 static void serial_dl_write(struct uart_8250_port *up, int value) 537 static void serial_dl_write(struct uart_8250_port *up, int value)
539 { 538 {
540 if (up->port.iotype == UPIO_RM9000) { 539 if (up->port.iotype == UPIO_RM9000) {
541 __raw_writel(value, up->port.membase + 0x08); 540 __raw_writel(value, up->port.membase + 0x08);
542 __raw_writel(value >> 8, up->port.membase + 0x10); 541 __raw_writel(value >> 8, up->port.membase + 0x10);
543 } else { 542 } else {
544 _serial_dl_write(up, value); 543 _serial_dl_write(up, value);
545 } 544 }
546 } 545 }
547 #else 546 #else
548 #define serial_dl_read(up) _serial_dl_read(up) 547 #define serial_dl_read(up) _serial_dl_read(up)
549 #define serial_dl_write(up, value) _serial_dl_write(up, value) 548 #define serial_dl_write(up, value) _serial_dl_write(up, value)
550 #endif 549 #endif
551 550
552 /* 551 /*
553 * For the 16C950 552 * For the 16C950
554 */ 553 */
555 static void serial_icr_write(struct uart_8250_port *up, int offset, int value) 554 static void serial_icr_write(struct uart_8250_port *up, int offset, int value)
556 { 555 {
557 serial_out(up, UART_SCR, offset); 556 serial_out(up, UART_SCR, offset);
558 serial_out(up, UART_ICR, value); 557 serial_out(up, UART_ICR, value);
559 } 558 }
560 559
561 static unsigned int serial_icr_read(struct uart_8250_port *up, int offset) 560 static unsigned int serial_icr_read(struct uart_8250_port *up, int offset)
562 { 561 {
563 unsigned int value; 562 unsigned int value;
564 563
565 serial_icr_write(up, UART_ACR, up->acr | UART_ACR_ICRRD); 564 serial_icr_write(up, UART_ACR, up->acr | UART_ACR_ICRRD);
566 serial_out(up, UART_SCR, offset); 565 serial_out(up, UART_SCR, offset);
567 value = serial_in(up, UART_ICR); 566 value = serial_in(up, UART_ICR);
568 serial_icr_write(up, UART_ACR, up->acr); 567 serial_icr_write(up, UART_ACR, up->acr);
569 568
570 return value; 569 return value;
571 } 570 }
572 571
573 /* 572 /*
574 * FIFO support. 573 * FIFO support.
575 */ 574 */
576 static void serial8250_clear_fifos(struct uart_8250_port *p) 575 static void serial8250_clear_fifos(struct uart_8250_port *p)
577 { 576 {
578 if (p->capabilities & UART_CAP_FIFO) { 577 if (p->capabilities & UART_CAP_FIFO) {
579 serial_outp(p, UART_FCR, UART_FCR_ENABLE_FIFO); 578 serial_outp(p, UART_FCR, UART_FCR_ENABLE_FIFO);
580 serial_outp(p, UART_FCR, UART_FCR_ENABLE_FIFO | 579 serial_outp(p, UART_FCR, UART_FCR_ENABLE_FIFO |
581 UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT); 580 UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
582 serial_outp(p, UART_FCR, 0); 581 serial_outp(p, UART_FCR, 0);
583 } 582 }
584 } 583 }
585 584
586 /* 585 /*
587 * IER sleep support. UARTs which have EFRs need the "extended 586 * IER sleep support. UARTs which have EFRs need the "extended
588 * capability" bit enabled. Note that on XR16C850s, we need to 587 * capability" bit enabled. Note that on XR16C850s, we need to
589 * reset LCR to write to IER. 588 * reset LCR to write to IER.
590 */ 589 */
591 static void serial8250_set_sleep(struct uart_8250_port *p, int sleep) 590 static void serial8250_set_sleep(struct uart_8250_port *p, int sleep)
592 { 591 {
593 if (p->capabilities & UART_CAP_SLEEP) { 592 if (p->capabilities & UART_CAP_SLEEP) {
594 if (p->capabilities & UART_CAP_EFR) { 593 if (p->capabilities & UART_CAP_EFR) {
595 serial_outp(p, UART_LCR, UART_LCR_CONF_MODE_B); 594 serial_outp(p, UART_LCR, UART_LCR_CONF_MODE_B);
596 serial_outp(p, UART_EFR, UART_EFR_ECB); 595 serial_outp(p, UART_EFR, UART_EFR_ECB);
597 serial_outp(p, UART_LCR, 0); 596 serial_outp(p, UART_LCR, 0);
598 } 597 }
599 serial_outp(p, UART_IER, sleep ? UART_IERX_SLEEP : 0); 598 serial_outp(p, UART_IER, sleep ? UART_IERX_SLEEP : 0);
600 if (p->capabilities & UART_CAP_EFR) { 599 if (p->capabilities & UART_CAP_EFR) {
601 serial_outp(p, UART_LCR, UART_LCR_CONF_MODE_B); 600 serial_outp(p, UART_LCR, UART_LCR_CONF_MODE_B);
602 serial_outp(p, UART_EFR, 0); 601 serial_outp(p, UART_EFR, 0);
603 serial_outp(p, UART_LCR, 0); 602 serial_outp(p, UART_LCR, 0);
604 } 603 }
605 } 604 }
606 } 605 }
607 606
608 #ifdef CONFIG_SERIAL_8250_RSA 607 #ifdef CONFIG_SERIAL_8250_RSA
609 /* 608 /*
610 * Attempts to turn on the RSA FIFO. Returns zero on failure. 609 * Attempts to turn on the RSA FIFO. Returns zero on failure.
611 * We set the port uart clock rate if we succeed. 610 * We set the port uart clock rate if we succeed.
612 */ 611 */
613 static int __enable_rsa(struct uart_8250_port *up) 612 static int __enable_rsa(struct uart_8250_port *up)
614 { 613 {
615 unsigned char mode; 614 unsigned char mode;
616 int result; 615 int result;
617 616
618 mode = serial_inp(up, UART_RSA_MSR); 617 mode = serial_inp(up, UART_RSA_MSR);
619 result = mode & UART_RSA_MSR_FIFO; 618 result = mode & UART_RSA_MSR_FIFO;
620 619
621 if (!result) { 620 if (!result) {
622 serial_outp(up, UART_RSA_MSR, mode | UART_RSA_MSR_FIFO); 621 serial_outp(up, UART_RSA_MSR, mode | UART_RSA_MSR_FIFO);
623 mode = serial_inp(up, UART_RSA_MSR); 622 mode = serial_inp(up, UART_RSA_MSR);
624 result = mode & UART_RSA_MSR_FIFO; 623 result = mode & UART_RSA_MSR_FIFO;
625 } 624 }
626 625
627 if (result) 626 if (result)
628 up->port.uartclk = SERIAL_RSA_BAUD_BASE * 16; 627 up->port.uartclk = SERIAL_RSA_BAUD_BASE * 16;
629 628
630 return result; 629 return result;
631 } 630 }
632 631
633 static void enable_rsa(struct uart_8250_port *up) 632 static void enable_rsa(struct uart_8250_port *up)
634 { 633 {
635 if (up->port.type == PORT_RSA) { 634 if (up->port.type == PORT_RSA) {
636 if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) { 635 if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) {
637 spin_lock_irq(&up->port.lock); 636 spin_lock_irq(&up->port.lock);
638 __enable_rsa(up); 637 __enable_rsa(up);
639 spin_unlock_irq(&up->port.lock); 638 spin_unlock_irq(&up->port.lock);
640 } 639 }
641 if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) 640 if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16)
642 serial_outp(up, UART_RSA_FRR, 0); 641 serial_outp(up, UART_RSA_FRR, 0);
643 } 642 }
644 } 643 }
645 644
646 /* 645 /*
647 * Attempts to turn off the RSA FIFO. Returns zero on failure. 646 * Attempts to turn off the RSA FIFO. Returns zero on failure.
648 * It is unknown why interrupts were disabled in here. However, 647 * It is unknown why interrupts were disabled in here. However,
649 * the caller is expected to preserve this behaviour by grabbing 648 * the caller is expected to preserve this behaviour by grabbing
650 * the spinlock before calling this function. 649 * the spinlock before calling this function.
651 */ 650 */
652 static void disable_rsa(struct uart_8250_port *up) 651 static void disable_rsa(struct uart_8250_port *up)
653 { 652 {
654 unsigned char mode; 653 unsigned char mode;
655 int result; 654 int result;
656 655
657 if (up->port.type == PORT_RSA && 656 if (up->port.type == PORT_RSA &&
658 up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) { 657 up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) {
659 spin_lock_irq(&up->port.lock); 658 spin_lock_irq(&up->port.lock);
660 659
661 mode = serial_inp(up, UART_RSA_MSR); 660 mode = serial_inp(up, UART_RSA_MSR);
662 result = !(mode & UART_RSA_MSR_FIFO); 661 result = !(mode & UART_RSA_MSR_FIFO);
663 662
664 if (!result) { 663 if (!result) {
665 serial_outp(up, UART_RSA_MSR, mode & ~UART_RSA_MSR_FIFO); 664 serial_outp(up, UART_RSA_MSR, mode & ~UART_RSA_MSR_FIFO);
666 mode = serial_inp(up, UART_RSA_MSR); 665 mode = serial_inp(up, UART_RSA_MSR);
667 result = !(mode & UART_RSA_MSR_FIFO); 666 result = !(mode & UART_RSA_MSR_FIFO);
668 } 667 }
669 668
670 if (result) 669 if (result)
671 up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16; 670 up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16;
672 spin_unlock_irq(&up->port.lock); 671 spin_unlock_irq(&up->port.lock);
673 } 672 }
674 } 673 }
675 #endif /* CONFIG_SERIAL_8250_RSA */ 674 #endif /* CONFIG_SERIAL_8250_RSA */
676 675
677 /* 676 /*
678 * This is a quickie test to see how big the FIFO is. 677 * This is a quickie test to see how big the FIFO is.
679 * It doesn't work at all the time, more's the pity. 678 * It doesn't work at all the time, more's the pity.
680 */ 679 */
681 static int size_fifo(struct uart_8250_port *up) 680 static int size_fifo(struct uart_8250_port *up)
682 { 681 {
683 unsigned char old_fcr, old_mcr, old_lcr; 682 unsigned char old_fcr, old_mcr, old_lcr;
684 unsigned short old_dl; 683 unsigned short old_dl;
685 int count; 684 int count;
686 685
687 old_lcr = serial_inp(up, UART_LCR); 686 old_lcr = serial_inp(up, UART_LCR);
688 serial_outp(up, UART_LCR, 0); 687 serial_outp(up, UART_LCR, 0);
689 old_fcr = serial_inp(up, UART_FCR); 688 old_fcr = serial_inp(up, UART_FCR);
690 old_mcr = serial_inp(up, UART_MCR); 689 old_mcr = serial_inp(up, UART_MCR);
691 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO | 690 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO |
692 UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT); 691 UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
693 serial_outp(up, UART_MCR, UART_MCR_LOOP); 692 serial_outp(up, UART_MCR, UART_MCR_LOOP);
694 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_A); 693 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_A);
695 old_dl = serial_dl_read(up); 694 old_dl = serial_dl_read(up);
696 serial_dl_write(up, 0x0001); 695 serial_dl_write(up, 0x0001);
697 serial_outp(up, UART_LCR, 0x03); 696 serial_outp(up, UART_LCR, 0x03);
698 for (count = 0; count < 256; count++) 697 for (count = 0; count < 256; count++)
699 serial_outp(up, UART_TX, count); 698 serial_outp(up, UART_TX, count);
700 mdelay(20);/* FIXME - schedule_timeout */ 699 mdelay(20);/* FIXME - schedule_timeout */
701 for (count = 0; (serial_inp(up, UART_LSR) & UART_LSR_DR) && 700 for (count = 0; (serial_inp(up, UART_LSR) & UART_LSR_DR) &&
702 (count < 256); count++) 701 (count < 256); count++)
703 serial_inp(up, UART_RX); 702 serial_inp(up, UART_RX);
704 serial_outp(up, UART_FCR, old_fcr); 703 serial_outp(up, UART_FCR, old_fcr);
705 serial_outp(up, UART_MCR, old_mcr); 704 serial_outp(up, UART_MCR, old_mcr);
706 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_A); 705 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_A);
707 serial_dl_write(up, old_dl); 706 serial_dl_write(up, old_dl);
708 serial_outp(up, UART_LCR, old_lcr); 707 serial_outp(up, UART_LCR, old_lcr);
709 708
710 return count; 709 return count;
711 } 710 }
712 711
713 /* 712 /*
714 * Read UART ID using the divisor method - set DLL and DLM to zero 713 * Read UART ID using the divisor method - set DLL and DLM to zero
715 * and the revision will be in DLL and device type in DLM. We 714 * and the revision will be in DLL and device type in DLM. We
716 * preserve the device state across this. 715 * preserve the device state across this.
717 */ 716 */
718 static unsigned int autoconfig_read_divisor_id(struct uart_8250_port *p) 717 static unsigned int autoconfig_read_divisor_id(struct uart_8250_port *p)
719 { 718 {
720 unsigned char old_dll, old_dlm, old_lcr; 719 unsigned char old_dll, old_dlm, old_lcr;
721 unsigned int id; 720 unsigned int id;
722 721
723 old_lcr = serial_inp(p, UART_LCR); 722 old_lcr = serial_inp(p, UART_LCR);
724 serial_outp(p, UART_LCR, UART_LCR_CONF_MODE_A); 723 serial_outp(p, UART_LCR, UART_LCR_CONF_MODE_A);
725 724
726 old_dll = serial_inp(p, UART_DLL); 725 old_dll = serial_inp(p, UART_DLL);
727 old_dlm = serial_inp(p, UART_DLM); 726 old_dlm = serial_inp(p, UART_DLM);
728 727
729 serial_outp(p, UART_DLL, 0); 728 serial_outp(p, UART_DLL, 0);
730 serial_outp(p, UART_DLM, 0); 729 serial_outp(p, UART_DLM, 0);
731 730
732 id = serial_inp(p, UART_DLL) | serial_inp(p, UART_DLM) << 8; 731 id = serial_inp(p, UART_DLL) | serial_inp(p, UART_DLM) << 8;
733 732
734 serial_outp(p, UART_DLL, old_dll); 733 serial_outp(p, UART_DLL, old_dll);
735 serial_outp(p, UART_DLM, old_dlm); 734 serial_outp(p, UART_DLM, old_dlm);
736 serial_outp(p, UART_LCR, old_lcr); 735 serial_outp(p, UART_LCR, old_lcr);
737 736
738 return id; 737 return id;
739 } 738 }
740 739
741 /* 740 /*
742 * This is a helper routine to autodetect StarTech/Exar/Oxsemi UART's. 741 * This is a helper routine to autodetect StarTech/Exar/Oxsemi UART's.
743 * When this function is called we know it is at least a StarTech 742 * When this function is called we know it is at least a StarTech
744 * 16650 V2, but it might be one of several StarTech UARTs, or one of 743 * 16650 V2, but it might be one of several StarTech UARTs, or one of
745 * its clones. (We treat the broken original StarTech 16650 V1 as a 744 * its clones. (We treat the broken original StarTech 16650 V1 as a
746 * 16550, and why not? Startech doesn't seem to even acknowledge its 745 * 16550, and why not? Startech doesn't seem to even acknowledge its
747 * existence.) 746 * existence.)
748 * 747 *
749 * What evil have men's minds wrought... 748 * What evil have men's minds wrought...
750 */ 749 */
751 static void autoconfig_has_efr(struct uart_8250_port *up) 750 static void autoconfig_has_efr(struct uart_8250_port *up)
752 { 751 {
753 unsigned int id1, id2, id3, rev; 752 unsigned int id1, id2, id3, rev;
754 753
755 /* 754 /*
756 * Everything with an EFR has SLEEP 755 * Everything with an EFR has SLEEP
757 */ 756 */
758 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP; 757 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP;
759 758
760 /* 759 /*
761 * First we check to see if it's an Oxford Semiconductor UART. 760 * First we check to see if it's an Oxford Semiconductor UART.
762 * 761 *
763 * If we have to do this here because some non-National 762 * If we have to do this here because some non-National
764 * Semiconductor clone chips lock up if you try writing to the 763 * Semiconductor clone chips lock up if you try writing to the
765 * LSR register (which serial_icr_read does) 764 * LSR register (which serial_icr_read does)
766 */ 765 */
767 766
768 /* 767 /*
769 * Check for Oxford Semiconductor 16C950. 768 * Check for Oxford Semiconductor 16C950.
770 * 769 *
771 * EFR [4] must be set else this test fails. 770 * EFR [4] must be set else this test fails.
772 * 771 *
773 * This shouldn't be necessary, but Mike Hudson (Exoray@isys.ca) 772 * This shouldn't be necessary, but Mike Hudson (Exoray@isys.ca)
774 * claims that it's needed for 952 dual UART's (which are not 773 * claims that it's needed for 952 dual UART's (which are not
775 * recommended for new designs). 774 * recommended for new designs).
776 */ 775 */
777 up->acr = 0; 776 up->acr = 0;
778 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); 777 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
779 serial_out(up, UART_EFR, UART_EFR_ECB); 778 serial_out(up, UART_EFR, UART_EFR_ECB);
780 serial_out(up, UART_LCR, 0x00); 779 serial_out(up, UART_LCR, 0x00);
781 id1 = serial_icr_read(up, UART_ID1); 780 id1 = serial_icr_read(up, UART_ID1);
782 id2 = serial_icr_read(up, UART_ID2); 781 id2 = serial_icr_read(up, UART_ID2);
783 id3 = serial_icr_read(up, UART_ID3); 782 id3 = serial_icr_read(up, UART_ID3);
784 rev = serial_icr_read(up, UART_REV); 783 rev = serial_icr_read(up, UART_REV);
785 784
786 DEBUG_AUTOCONF("950id=%02x:%02x:%02x:%02x ", id1, id2, id3, rev); 785 DEBUG_AUTOCONF("950id=%02x:%02x:%02x:%02x ", id1, id2, id3, rev);
787 786
788 if (id1 == 0x16 && id2 == 0xC9 && 787 if (id1 == 0x16 && id2 == 0xC9 &&
789 (id3 == 0x50 || id3 == 0x52 || id3 == 0x54)) { 788 (id3 == 0x50 || id3 == 0x52 || id3 == 0x54)) {
790 up->port.type = PORT_16C950; 789 up->port.type = PORT_16C950;
791 790
792 /* 791 /*
793 * Enable work around for the Oxford Semiconductor 952 rev B 792 * Enable work around for the Oxford Semiconductor 952 rev B
794 * chip which causes it to seriously miscalculate baud rates 793 * chip which causes it to seriously miscalculate baud rates
795 * when DLL is 0. 794 * when DLL is 0.
796 */ 795 */
797 if (id3 == 0x52 && rev == 0x01) 796 if (id3 == 0x52 && rev == 0x01)
798 up->bugs |= UART_BUG_QUOT; 797 up->bugs |= UART_BUG_QUOT;
799 return; 798 return;
800 } 799 }
801 800
802 /* 801 /*
803 * We check for a XR16C850 by setting DLL and DLM to 0, and then 802 * We check for a XR16C850 by setting DLL and DLM to 0, and then
804 * reading back DLL and DLM. The chip type depends on the DLM 803 * reading back DLL and DLM. The chip type depends on the DLM
805 * value read back: 804 * value read back:
806 * 0x10 - XR16C850 and the DLL contains the chip revision. 805 * 0x10 - XR16C850 and the DLL contains the chip revision.
807 * 0x12 - XR16C2850. 806 * 0x12 - XR16C2850.
808 * 0x14 - XR16C854. 807 * 0x14 - XR16C854.
809 */ 808 */
810 id1 = autoconfig_read_divisor_id(up); 809 id1 = autoconfig_read_divisor_id(up);
811 DEBUG_AUTOCONF("850id=%04x ", id1); 810 DEBUG_AUTOCONF("850id=%04x ", id1);
812 811
813 id2 = id1 >> 8; 812 id2 = id1 >> 8;
814 if (id2 == 0x10 || id2 == 0x12 || id2 == 0x14) { 813 if (id2 == 0x10 || id2 == 0x12 || id2 == 0x14) {
815 up->port.type = PORT_16850; 814 up->port.type = PORT_16850;
816 return; 815 return;
817 } 816 }
818 817
819 /* 818 /*
820 * It wasn't an XR16C850. 819 * It wasn't an XR16C850.
821 * 820 *
822 * We distinguish between the '654 and the '650 by counting 821 * We distinguish between the '654 and the '650 by counting
823 * how many bytes are in the FIFO. I'm using this for now, 822 * how many bytes are in the FIFO. I'm using this for now,
824 * since that's the technique that was sent to me in the 823 * since that's the technique that was sent to me in the
825 * serial driver update, but I'm not convinced this works. 824 * serial driver update, but I'm not convinced this works.
826 * I've had problems doing this in the past. -TYT 825 * I've had problems doing this in the past. -TYT
827 */ 826 */
828 if (size_fifo(up) == 64) 827 if (size_fifo(up) == 64)
829 up->port.type = PORT_16654; 828 up->port.type = PORT_16654;
830 else 829 else
831 up->port.type = PORT_16650V2; 830 up->port.type = PORT_16650V2;
832 } 831 }
833 832
834 /* 833 /*
835 * We detected a chip without a FIFO. Only two fall into 834 * We detected a chip without a FIFO. Only two fall into
836 * this category - the original 8250 and the 16450. The 835 * this category - the original 8250 and the 16450. The
837 * 16450 has a scratch register (accessible with LCR=0) 836 * 16450 has a scratch register (accessible with LCR=0)
838 */ 837 */
839 static void autoconfig_8250(struct uart_8250_port *up) 838 static void autoconfig_8250(struct uart_8250_port *up)
840 { 839 {
841 unsigned char scratch, status1, status2; 840 unsigned char scratch, status1, status2;
842 841
843 up->port.type = PORT_8250; 842 up->port.type = PORT_8250;
844 843
845 scratch = serial_in(up, UART_SCR); 844 scratch = serial_in(up, UART_SCR);
846 serial_outp(up, UART_SCR, 0xa5); 845 serial_outp(up, UART_SCR, 0xa5);
847 status1 = serial_in(up, UART_SCR); 846 status1 = serial_in(up, UART_SCR);
848 serial_outp(up, UART_SCR, 0x5a); 847 serial_outp(up, UART_SCR, 0x5a);
849 status2 = serial_in(up, UART_SCR); 848 status2 = serial_in(up, UART_SCR);
850 serial_outp(up, UART_SCR, scratch); 849 serial_outp(up, UART_SCR, scratch);
851 850
852 if (status1 == 0xa5 && status2 == 0x5a) 851 if (status1 == 0xa5 && status2 == 0x5a)
853 up->port.type = PORT_16450; 852 up->port.type = PORT_16450;
854 } 853 }
855 854
856 static int broken_efr(struct uart_8250_port *up) 855 static int broken_efr(struct uart_8250_port *up)
857 { 856 {
858 /* 857 /*
859 * Exar ST16C2550 "A2" devices incorrectly detect as 858 * Exar ST16C2550 "A2" devices incorrectly detect as
860 * having an EFR, and report an ID of 0x0201. See 859 * having an EFR, and report an ID of 0x0201. See
861 * http://linux.derkeiler.com/Mailing-Lists/Kernel/2004-11/4812.html 860 * http://linux.derkeiler.com/Mailing-Lists/Kernel/2004-11/4812.html
862 */ 861 */
863 if (autoconfig_read_divisor_id(up) == 0x0201 && size_fifo(up) == 16) 862 if (autoconfig_read_divisor_id(up) == 0x0201 && size_fifo(up) == 16)
864 return 1; 863 return 1;
865 864
866 return 0; 865 return 0;
867 } 866 }
868 867
869 static inline int ns16550a_goto_highspeed(struct uart_8250_port *up) 868 static inline int ns16550a_goto_highspeed(struct uart_8250_port *up)
870 { 869 {
871 unsigned char status; 870 unsigned char status;
872 871
873 status = serial_in(up, 0x04); /* EXCR2 */ 872 status = serial_in(up, 0x04); /* EXCR2 */
874 #define PRESL(x) ((x) & 0x30) 873 #define PRESL(x) ((x) & 0x30)
875 if (PRESL(status) == 0x10) { 874 if (PRESL(status) == 0x10) {
876 /* already in high speed mode */ 875 /* already in high speed mode */
877 return 0; 876 return 0;
878 } else { 877 } else {
879 status &= ~0xB0; /* Disable LOCK, mask out PRESL[01] */ 878 status &= ~0xB0; /* Disable LOCK, mask out PRESL[01] */
880 status |= 0x10; /* 1.625 divisor for baud_base --> 921600 */ 879 status |= 0x10; /* 1.625 divisor for baud_base --> 921600 */
881 serial_outp(up, 0x04, status); 880 serial_outp(up, 0x04, status);
882 } 881 }
883 return 1; 882 return 1;
884 } 883 }
885 884
886 /* 885 /*
887 * We know that the chip has FIFOs. Does it have an EFR? The 886 * We know that the chip has FIFOs. Does it have an EFR? The
888 * EFR is located in the same register position as the IIR and 887 * EFR is located in the same register position as the IIR and
889 * we know the top two bits of the IIR are currently set. The 888 * we know the top two bits of the IIR are currently set. The
890 * EFR should contain zero. Try to read the EFR. 889 * EFR should contain zero. Try to read the EFR.
891 */ 890 */
892 static void autoconfig_16550a(struct uart_8250_port *up) 891 static void autoconfig_16550a(struct uart_8250_port *up)
893 { 892 {
894 unsigned char status1, status2; 893 unsigned char status1, status2;
895 unsigned int iersave; 894 unsigned int iersave;
896 895
897 up->port.type = PORT_16550A; 896 up->port.type = PORT_16550A;
898 up->capabilities |= UART_CAP_FIFO; 897 up->capabilities |= UART_CAP_FIFO;
899 898
900 /* 899 /*
901 * Check for presence of the EFR when DLAB is set. 900 * Check for presence of the EFR when DLAB is set.
902 * Only ST16C650V1 UARTs pass this test. 901 * Only ST16C650V1 UARTs pass this test.
903 */ 902 */
904 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_A); 903 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_A);
905 if (serial_in(up, UART_EFR) == 0) { 904 if (serial_in(up, UART_EFR) == 0) {
906 serial_outp(up, UART_EFR, 0xA8); 905 serial_outp(up, UART_EFR, 0xA8);
907 if (serial_in(up, UART_EFR) != 0) { 906 if (serial_in(up, UART_EFR) != 0) {
908 DEBUG_AUTOCONF("EFRv1 "); 907 DEBUG_AUTOCONF("EFRv1 ");
909 up->port.type = PORT_16650; 908 up->port.type = PORT_16650;
910 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP; 909 up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP;
911 } else { 910 } else {
912 DEBUG_AUTOCONF("Motorola 8xxx DUART "); 911 DEBUG_AUTOCONF("Motorola 8xxx DUART ");
913 } 912 }
914 serial_outp(up, UART_EFR, 0); 913 serial_outp(up, UART_EFR, 0);
915 return; 914 return;
916 } 915 }
917 916
918 /* 917 /*
919 * Maybe it requires 0xbf to be written to the LCR. 918 * Maybe it requires 0xbf to be written to the LCR.
920 * (other ST16C650V2 UARTs, TI16C752A, etc) 919 * (other ST16C650V2 UARTs, TI16C752A, etc)
921 */ 920 */
922 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_B); 921 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_B);
923 if (serial_in(up, UART_EFR) == 0 && !broken_efr(up)) { 922 if (serial_in(up, UART_EFR) == 0 && !broken_efr(up)) {
924 DEBUG_AUTOCONF("EFRv2 "); 923 DEBUG_AUTOCONF("EFRv2 ");
925 autoconfig_has_efr(up); 924 autoconfig_has_efr(up);
926 return; 925 return;
927 } 926 }
928 927
929 /* 928 /*
930 * Check for a National Semiconductor SuperIO chip. 929 * Check for a National Semiconductor SuperIO chip.
931 * Attempt to switch to bank 2, read the value of the LOOP bit 930 * Attempt to switch to bank 2, read the value of the LOOP bit
932 * from EXCR1. Switch back to bank 0, change it in MCR. Then 931 * from EXCR1. Switch back to bank 0, change it in MCR. Then
933 * switch back to bank 2, read it from EXCR1 again and check 932 * switch back to bank 2, read it from EXCR1 again and check
934 * it's changed. If so, set baud_base in EXCR2 to 921600. -- dwmw2 933 * it's changed. If so, set baud_base in EXCR2 to 921600. -- dwmw2
935 */ 934 */
936 serial_outp(up, UART_LCR, 0); 935 serial_outp(up, UART_LCR, 0);
937 status1 = serial_in(up, UART_MCR); 936 status1 = serial_in(up, UART_MCR);
938 serial_outp(up, UART_LCR, 0xE0); 937 serial_outp(up, UART_LCR, 0xE0);
939 status2 = serial_in(up, 0x02); /* EXCR1 */ 938 status2 = serial_in(up, 0x02); /* EXCR1 */
940 939
941 if (!((status2 ^ status1) & UART_MCR_LOOP)) { 940 if (!((status2 ^ status1) & UART_MCR_LOOP)) {
942 serial_outp(up, UART_LCR, 0); 941 serial_outp(up, UART_LCR, 0);
943 serial_outp(up, UART_MCR, status1 ^ UART_MCR_LOOP); 942 serial_outp(up, UART_MCR, status1 ^ UART_MCR_LOOP);
944 serial_outp(up, UART_LCR, 0xE0); 943 serial_outp(up, UART_LCR, 0xE0);
945 status2 = serial_in(up, 0x02); /* EXCR1 */ 944 status2 = serial_in(up, 0x02); /* EXCR1 */
946 serial_outp(up, UART_LCR, 0); 945 serial_outp(up, UART_LCR, 0);
947 serial_outp(up, UART_MCR, status1); 946 serial_outp(up, UART_MCR, status1);
948 947
949 if ((status2 ^ status1) & UART_MCR_LOOP) { 948 if ((status2 ^ status1) & UART_MCR_LOOP) {
950 unsigned short quot; 949 unsigned short quot;
951 950
952 serial_outp(up, UART_LCR, 0xE0); 951 serial_outp(up, UART_LCR, 0xE0);
953 952
954 quot = serial_dl_read(up); 953 quot = serial_dl_read(up);
955 quot <<= 3; 954 quot <<= 3;
956 955
957 if (ns16550a_goto_highspeed(up)) 956 if (ns16550a_goto_highspeed(up))
958 serial_dl_write(up, quot); 957 serial_dl_write(up, quot);
959 958
960 serial_outp(up, UART_LCR, 0); 959 serial_outp(up, UART_LCR, 0);
961 960
962 up->port.uartclk = 921600*16; 961 up->port.uartclk = 921600*16;
963 up->port.type = PORT_NS16550A; 962 up->port.type = PORT_NS16550A;
964 up->capabilities |= UART_NATSEMI; 963 up->capabilities |= UART_NATSEMI;
965 return; 964 return;
966 } 965 }
967 } 966 }
968 967
969 /* 968 /*
970 * No EFR. Try to detect a TI16750, which only sets bit 5 of 969 * No EFR. Try to detect a TI16750, which only sets bit 5 of
971 * the IIR when 64 byte FIFO mode is enabled when DLAB is set. 970 * the IIR when 64 byte FIFO mode is enabled when DLAB is set.
972 * Try setting it with and without DLAB set. Cheap clones 971 * Try setting it with and without DLAB set. Cheap clones
973 * set bit 5 without DLAB set. 972 * set bit 5 without DLAB set.
974 */ 973 */
975 serial_outp(up, UART_LCR, 0); 974 serial_outp(up, UART_LCR, 0);
976 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE); 975 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
977 status1 = serial_in(up, UART_IIR) >> 5; 976 status1 = serial_in(up, UART_IIR) >> 5;
978 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO); 977 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
979 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_A); 978 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_A);
980 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE); 979 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
981 status2 = serial_in(up, UART_IIR) >> 5; 980 status2 = serial_in(up, UART_IIR) >> 5;
982 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO); 981 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
983 serial_outp(up, UART_LCR, 0); 982 serial_outp(up, UART_LCR, 0);
984 983
985 DEBUG_AUTOCONF("iir1=%d iir2=%d ", status1, status2); 984 DEBUG_AUTOCONF("iir1=%d iir2=%d ", status1, status2);
986 985
987 if (status1 == 6 && status2 == 7) { 986 if (status1 == 6 && status2 == 7) {
988 up->port.type = PORT_16750; 987 up->port.type = PORT_16750;
989 up->capabilities |= UART_CAP_AFE | UART_CAP_SLEEP; 988 up->capabilities |= UART_CAP_AFE | UART_CAP_SLEEP;
990 return; 989 return;
991 } 990 }
992 991
993 /* 992 /*
994 * Try writing and reading the UART_IER_UUE bit (b6). 993 * Try writing and reading the UART_IER_UUE bit (b6).
995 * If it works, this is probably one of the Xscale platform's 994 * If it works, this is probably one of the Xscale platform's
996 * internal UARTs. 995 * internal UARTs.
997 * We're going to explicitly set the UUE bit to 0 before 996 * We're going to explicitly set the UUE bit to 0 before
998 * trying to write and read a 1 just to make sure it's not 997 * trying to write and read a 1 just to make sure it's not
999 * already a 1 and maybe locked there before we even start start. 998 * already a 1 and maybe locked there before we even start start.
1000 */ 999 */
1001 iersave = serial_in(up, UART_IER); 1000 iersave = serial_in(up, UART_IER);
1002 serial_outp(up, UART_IER, iersave & ~UART_IER_UUE); 1001 serial_outp(up, UART_IER, iersave & ~UART_IER_UUE);
1003 if (!(serial_in(up, UART_IER) & UART_IER_UUE)) { 1002 if (!(serial_in(up, UART_IER) & UART_IER_UUE)) {
1004 /* 1003 /*
1005 * OK it's in a known zero state, try writing and reading 1004 * OK it's in a known zero state, try writing and reading
1006 * without disturbing the current state of the other bits. 1005 * without disturbing the current state of the other bits.
1007 */ 1006 */
1008 serial_outp(up, UART_IER, iersave | UART_IER_UUE); 1007 serial_outp(up, UART_IER, iersave | UART_IER_UUE);
1009 if (serial_in(up, UART_IER) & UART_IER_UUE) { 1008 if (serial_in(up, UART_IER) & UART_IER_UUE) {
1010 /* 1009 /*
1011 * It's an Xscale. 1010 * It's an Xscale.
1012 * We'll leave the UART_IER_UUE bit set to 1 (enabled). 1011 * We'll leave the UART_IER_UUE bit set to 1 (enabled).
1013 */ 1012 */
1014 DEBUG_AUTOCONF("Xscale "); 1013 DEBUG_AUTOCONF("Xscale ");
1015 up->port.type = PORT_XSCALE; 1014 up->port.type = PORT_XSCALE;
1016 up->capabilities |= UART_CAP_UUE | UART_CAP_RTOIE; 1015 up->capabilities |= UART_CAP_UUE | UART_CAP_RTOIE;
1017 return; 1016 return;
1018 } 1017 }
1019 } else { 1018 } else {
1020 /* 1019 /*
1021 * If we got here we couldn't force the IER_UUE bit to 0. 1020 * If we got here we couldn't force the IER_UUE bit to 0.
1022 * Log it and continue. 1021 * Log it and continue.
1023 */ 1022 */
1024 DEBUG_AUTOCONF("Couldn't force IER_UUE to 0 "); 1023 DEBUG_AUTOCONF("Couldn't force IER_UUE to 0 ");
1025 } 1024 }
1026 serial_outp(up, UART_IER, iersave); 1025 serial_outp(up, UART_IER, iersave);
1027 1026
1028 /* 1027 /*
1029 * Exar uarts have EFR in a weird location 1028 * Exar uarts have EFR in a weird location
1030 */ 1029 */
1031 if (up->port.flags & UPF_EXAR_EFR) { 1030 if (up->port.flags & UPF_EXAR_EFR) {
1032 up->port.type = PORT_XR17D15X; 1031 up->port.type = PORT_XR17D15X;
1033 up->capabilities |= UART_CAP_AFE | UART_CAP_EFR; 1032 up->capabilities |= UART_CAP_AFE | UART_CAP_EFR;
1034 } 1033 }
1035 1034
1036 /* 1035 /*
1037 * We distinguish between 16550A and U6 16550A by counting 1036 * We distinguish between 16550A and U6 16550A by counting
1038 * how many bytes are in the FIFO. 1037 * how many bytes are in the FIFO.
1039 */ 1038 */
1040 if (up->port.type == PORT_16550A && size_fifo(up) == 64) { 1039 if (up->port.type == PORT_16550A && size_fifo(up) == 64) {
1041 up->port.type = PORT_U6_16550A; 1040 up->port.type = PORT_U6_16550A;
1042 up->capabilities |= UART_CAP_AFE; 1041 up->capabilities |= UART_CAP_AFE;
1043 } 1042 }
1044 } 1043 }
1045 1044
1046 /* 1045 /*
1047 * This routine is called by rs_init() to initialize a specific serial 1046 * This routine is called by rs_init() to initialize a specific serial
1048 * port. It determines what type of UART chip this serial port is 1047 * port. It determines what type of UART chip this serial port is
1049 * using: 8250, 16450, 16550, 16550A. The important question is 1048 * using: 8250, 16450, 16550, 16550A. The important question is
1050 * whether or not this UART is a 16550A or not, since this will 1049 * whether or not this UART is a 16550A or not, since this will
1051 * determine whether or not we can use its FIFO features or not. 1050 * determine whether or not we can use its FIFO features or not.
1052 */ 1051 */
1053 static void autoconfig(struct uart_8250_port *up, unsigned int probeflags) 1052 static void autoconfig(struct uart_8250_port *up, unsigned int probeflags)
1054 { 1053 {
1055 unsigned char status1, scratch, scratch2, scratch3; 1054 unsigned char status1, scratch, scratch2, scratch3;
1056 unsigned char save_lcr, save_mcr; 1055 unsigned char save_lcr, save_mcr;
1057 unsigned long flags; 1056 unsigned long flags;
1058 1057
1059 if (!up->port.iobase && !up->port.mapbase && !up->port.membase) 1058 if (!up->port.iobase && !up->port.mapbase && !up->port.membase)
1060 return; 1059 return;
1061 1060
1062 DEBUG_AUTOCONF("ttyS%d: autoconf (0x%04lx, 0x%p): ", 1061 DEBUG_AUTOCONF("ttyS%d: autoconf (0x%04lx, 0x%p): ",
1063 serial_index(&up->port), up->port.iobase, up->port.membase); 1062 serial_index(&up->port), up->port.iobase, up->port.membase);
1064 1063
1065 /* 1064 /*
1066 * We really do need global IRQs disabled here - we're going to 1065 * We really do need global IRQs disabled here - we're going to
1067 * be frobbing the chips IRQ enable register to see if it exists. 1066 * be frobbing the chips IRQ enable register to see if it exists.
1068 */ 1067 */
1069 spin_lock_irqsave(&up->port.lock, flags); 1068 spin_lock_irqsave(&up->port.lock, flags);
1070 1069
1071 up->capabilities = 0; 1070 up->capabilities = 0;
1072 up->bugs = 0; 1071 up->bugs = 0;
1073 1072
1074 if (!(up->port.flags & UPF_BUGGY_UART)) { 1073 if (!(up->port.flags & UPF_BUGGY_UART)) {
1075 /* 1074 /*
1076 * Do a simple existence test first; if we fail this, 1075 * Do a simple existence test first; if we fail this,
1077 * there's no point trying anything else. 1076 * there's no point trying anything else.
1078 * 1077 *
1079 * 0x80 is used as a nonsense port to prevent against 1078 * 0x80 is used as a nonsense port to prevent against
1080 * false positives due to ISA bus float. The 1079 * false positives due to ISA bus float. The
1081 * assumption is that 0x80 is a non-existent port; 1080 * assumption is that 0x80 is a non-existent port;
1082 * which should be safe since include/asm/io.h also 1081 * which should be safe since include/asm/io.h also
1083 * makes this assumption. 1082 * makes this assumption.
1084 * 1083 *
1085 * Note: this is safe as long as MCR bit 4 is clear 1084 * Note: this is safe as long as MCR bit 4 is clear
1086 * and the device is in "PC" mode. 1085 * and the device is in "PC" mode.
1087 */ 1086 */
1088 scratch = serial_inp(up, UART_IER); 1087 scratch = serial_inp(up, UART_IER);
1089 serial_outp(up, UART_IER, 0); 1088 serial_outp(up, UART_IER, 0);
1090 #ifdef __i386__ 1089 #ifdef __i386__
1091 outb(0xff, 0x080); 1090 outb(0xff, 0x080);
1092 #endif 1091 #endif
1093 /* 1092 /*
1094 * Mask out IER[7:4] bits for test as some UARTs (e.g. TL 1093 * Mask out IER[7:4] bits for test as some UARTs (e.g. TL
1095 * 16C754B) allow only to modify them if an EFR bit is set. 1094 * 16C754B) allow only to modify them if an EFR bit is set.
1096 */ 1095 */
1097 scratch2 = serial_inp(up, UART_IER) & 0x0f; 1096 scratch2 = serial_inp(up, UART_IER) & 0x0f;
1098 serial_outp(up, UART_IER, 0x0F); 1097 serial_outp(up, UART_IER, 0x0F);
1099 #ifdef __i386__ 1098 #ifdef __i386__
1100 outb(0, 0x080); 1099 outb(0, 0x080);
1101 #endif 1100 #endif
1102 scratch3 = serial_inp(up, UART_IER) & 0x0f; 1101 scratch3 = serial_inp(up, UART_IER) & 0x0f;
1103 serial_outp(up, UART_IER, scratch); 1102 serial_outp(up, UART_IER, scratch);
1104 if (scratch2 != 0 || scratch3 != 0x0F) { 1103 if (scratch2 != 0 || scratch3 != 0x0F) {
1105 /* 1104 /*
1106 * We failed; there's nothing here 1105 * We failed; there's nothing here
1107 */ 1106 */
1108 DEBUG_AUTOCONF("IER test failed (%02x, %02x) ", 1107 DEBUG_AUTOCONF("IER test failed (%02x, %02x) ",
1109 scratch2, scratch3); 1108 scratch2, scratch3);
1110 goto out; 1109 goto out;
1111 } 1110 }
1112 } 1111 }
1113 1112
1114 save_mcr = serial_in(up, UART_MCR); 1113 save_mcr = serial_in(up, UART_MCR);
1115 save_lcr = serial_in(up, UART_LCR); 1114 save_lcr = serial_in(up, UART_LCR);
1116 1115
1117 /* 1116 /*
1118 * Check to see if a UART is really there. Certain broken 1117 * Check to see if a UART is really there. Certain broken
1119 * internal modems based on the Rockwell chipset fail this 1118 * internal modems based on the Rockwell chipset fail this
1120 * test, because they apparently don't implement the loopback 1119 * test, because they apparently don't implement the loopback
1121 * test mode. So this test is skipped on the COM 1 through 1120 * test mode. So this test is skipped on the COM 1 through
1122 * COM 4 ports. This *should* be safe, since no board 1121 * COM 4 ports. This *should* be safe, since no board
1123 * manufacturer would be stupid enough to design a board 1122 * manufacturer would be stupid enough to design a board
1124 * that conflicts with COM 1-4 --- we hope! 1123 * that conflicts with COM 1-4 --- we hope!
1125 */ 1124 */
1126 if (!(up->port.flags & UPF_SKIP_TEST)) { 1125 if (!(up->port.flags & UPF_SKIP_TEST)) {
1127 serial_outp(up, UART_MCR, UART_MCR_LOOP | 0x0A); 1126 serial_outp(up, UART_MCR, UART_MCR_LOOP | 0x0A);
1128 status1 = serial_inp(up, UART_MSR) & 0xF0; 1127 status1 = serial_inp(up, UART_MSR) & 0xF0;
1129 serial_outp(up, UART_MCR, save_mcr); 1128 serial_outp(up, UART_MCR, save_mcr);
1130 if (status1 != 0x90) { 1129 if (status1 != 0x90) {
1131 DEBUG_AUTOCONF("LOOP test failed (%02x) ", 1130 DEBUG_AUTOCONF("LOOP test failed (%02x) ",
1132 status1); 1131 status1);
1133 goto out; 1132 goto out;
1134 } 1133 }
1135 } 1134 }
1136 1135
1137 /* 1136 /*
1138 * We're pretty sure there's a port here. Lets find out what 1137 * We're pretty sure there's a port here. Lets find out what
1139 * type of port it is. The IIR top two bits allows us to find 1138 * type of port it is. The IIR top two bits allows us to find
1140 * out if it's 8250 or 16450, 16550, 16550A or later. This 1139 * out if it's 8250 or 16450, 16550, 16550A or later. This
1141 * determines what we test for next. 1140 * determines what we test for next.
1142 * 1141 *
1143 * We also initialise the EFR (if any) to zero for later. The 1142 * We also initialise the EFR (if any) to zero for later. The
1144 * EFR occupies the same register location as the FCR and IIR. 1143 * EFR occupies the same register location as the FCR and IIR.
1145 */ 1144 */
1146 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_B); 1145 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_B);
1147 serial_outp(up, UART_EFR, 0); 1146 serial_outp(up, UART_EFR, 0);
1148 serial_outp(up, UART_LCR, 0); 1147 serial_outp(up, UART_LCR, 0);
1149 1148
1150 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO); 1149 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
1151 scratch = serial_in(up, UART_IIR) >> 6; 1150 scratch = serial_in(up, UART_IIR) >> 6;
1152 1151
1153 DEBUG_AUTOCONF("iir=%d ", scratch); 1152 DEBUG_AUTOCONF("iir=%d ", scratch);
1154 1153
1155 switch (scratch) { 1154 switch (scratch) {
1156 case 0: 1155 case 0:
1157 autoconfig_8250(up); 1156 autoconfig_8250(up);
1158 break; 1157 break;
1159 case 1: 1158 case 1:
1160 up->port.type = PORT_UNKNOWN; 1159 up->port.type = PORT_UNKNOWN;
1161 break; 1160 break;
1162 case 2: 1161 case 2:
1163 up->port.type = PORT_16550; 1162 up->port.type = PORT_16550;
1164 break; 1163 break;
1165 case 3: 1164 case 3:
1166 autoconfig_16550a(up); 1165 autoconfig_16550a(up);
1167 break; 1166 break;
1168 } 1167 }
1169 1168
1170 #ifdef CONFIG_SERIAL_8250_RSA 1169 #ifdef CONFIG_SERIAL_8250_RSA
1171 /* 1170 /*
1172 * Only probe for RSA ports if we got the region. 1171 * Only probe for RSA ports if we got the region.
1173 */ 1172 */
1174 if (up->port.type == PORT_16550A && probeflags & PROBE_RSA) { 1173 if (up->port.type == PORT_16550A && probeflags & PROBE_RSA) {
1175 int i; 1174 int i;
1176 1175
1177 for (i = 0 ; i < probe_rsa_count; ++i) { 1176 for (i = 0 ; i < probe_rsa_count; ++i) {
1178 if (probe_rsa[i] == up->port.iobase && 1177 if (probe_rsa[i] == up->port.iobase &&
1179 __enable_rsa(up)) { 1178 __enable_rsa(up)) {
1180 up->port.type = PORT_RSA; 1179 up->port.type = PORT_RSA;
1181 break; 1180 break;
1182 } 1181 }
1183 } 1182 }
1184 } 1183 }
1185 #endif 1184 #endif
1186 1185
1187 serial_outp(up, UART_LCR, save_lcr); 1186 serial_outp(up, UART_LCR, save_lcr);
1188 1187
1189 if (up->capabilities != uart_config[up->port.type].flags) { 1188 if (up->capabilities != uart_config[up->port.type].flags) {
1190 printk(KERN_WARNING 1189 printk(KERN_WARNING
1191 "ttyS%d: detected caps %08x should be %08x\n", 1190 "ttyS%d: detected caps %08x should be %08x\n",
1192 serial_index(&up->port), up->capabilities, 1191 serial_index(&up->port), up->capabilities,
1193 uart_config[up->port.type].flags); 1192 uart_config[up->port.type].flags);
1194 } 1193 }
1195 1194
1196 up->port.fifosize = uart_config[up->port.type].fifo_size; 1195 up->port.fifosize = uart_config[up->port.type].fifo_size;
1197 up->capabilities = uart_config[up->port.type].flags; 1196 up->capabilities = uart_config[up->port.type].flags;
1198 up->tx_loadsz = uart_config[up->port.type].tx_loadsz; 1197 up->tx_loadsz = uart_config[up->port.type].tx_loadsz;
1199 1198
1200 if (up->port.type == PORT_UNKNOWN) 1199 if (up->port.type == PORT_UNKNOWN)
1201 goto out; 1200 goto out;
1202 1201
1203 /* 1202 /*
1204 * Reset the UART. 1203 * Reset the UART.
1205 */ 1204 */
1206 #ifdef CONFIG_SERIAL_8250_RSA 1205 #ifdef CONFIG_SERIAL_8250_RSA
1207 if (up->port.type == PORT_RSA) 1206 if (up->port.type == PORT_RSA)
1208 serial_outp(up, UART_RSA_FRR, 0); 1207 serial_outp(up, UART_RSA_FRR, 0);
1209 #endif 1208 #endif
1210 serial_outp(up, UART_MCR, save_mcr); 1209 serial_outp(up, UART_MCR, save_mcr);
1211 serial8250_clear_fifos(up); 1210 serial8250_clear_fifos(up);
1212 serial_in(up, UART_RX); 1211 serial_in(up, UART_RX);
1213 if (up->capabilities & UART_CAP_UUE) 1212 if (up->capabilities & UART_CAP_UUE)
1214 serial_outp(up, UART_IER, UART_IER_UUE); 1213 serial_outp(up, UART_IER, UART_IER_UUE);
1215 else 1214 else
1216 serial_outp(up, UART_IER, 0); 1215 serial_outp(up, UART_IER, 0);
1217 1216
1218 out: 1217 out:
1219 spin_unlock_irqrestore(&up->port.lock, flags); 1218 spin_unlock_irqrestore(&up->port.lock, flags);
1220 DEBUG_AUTOCONF("type=%s\n", uart_config[up->port.type].name); 1219 DEBUG_AUTOCONF("type=%s\n", uart_config[up->port.type].name);
1221 } 1220 }
1222 1221
1223 static void autoconfig_irq(struct uart_8250_port *up) 1222 static void autoconfig_irq(struct uart_8250_port *up)
1224 { 1223 {
1225 unsigned char save_mcr, save_ier; 1224 unsigned char save_mcr, save_ier;
1226 unsigned char save_ICP = 0; 1225 unsigned char save_ICP = 0;
1227 unsigned int ICP = 0; 1226 unsigned int ICP = 0;
1228 unsigned long irqs; 1227 unsigned long irqs;
1229 int irq; 1228 int irq;
1230 1229
1231 if (up->port.flags & UPF_FOURPORT) { 1230 if (up->port.flags & UPF_FOURPORT) {
1232 ICP = (up->port.iobase & 0xfe0) | 0x1f; 1231 ICP = (up->port.iobase & 0xfe0) | 0x1f;
1233 save_ICP = inb_p(ICP); 1232 save_ICP = inb_p(ICP);
1234 outb_p(0x80, ICP); 1233 outb_p(0x80, ICP);
1235 (void) inb_p(ICP); 1234 (void) inb_p(ICP);
1236 } 1235 }
1237 1236
1238 /* forget possible initially masked and pending IRQ */ 1237 /* forget possible initially masked and pending IRQ */
1239 probe_irq_off(probe_irq_on()); 1238 probe_irq_off(probe_irq_on());
1240 save_mcr = serial_inp(up, UART_MCR); 1239 save_mcr = serial_inp(up, UART_MCR);
1241 save_ier = serial_inp(up, UART_IER); 1240 save_ier = serial_inp(up, UART_IER);
1242 serial_outp(up, UART_MCR, UART_MCR_OUT1 | UART_MCR_OUT2); 1241 serial_outp(up, UART_MCR, UART_MCR_OUT1 | UART_MCR_OUT2);
1243 1242
1244 irqs = probe_irq_on(); 1243 irqs = probe_irq_on();
1245 serial_outp(up, UART_MCR, 0); 1244 serial_outp(up, UART_MCR, 0);
1246 udelay(10); 1245 udelay(10);
1247 if (up->port.flags & UPF_FOURPORT) { 1246 if (up->port.flags & UPF_FOURPORT) {
1248 serial_outp(up, UART_MCR, 1247 serial_outp(up, UART_MCR,
1249 UART_MCR_DTR | UART_MCR_RTS); 1248 UART_MCR_DTR | UART_MCR_RTS);
1250 } else { 1249 } else {
1251 serial_outp(up, UART_MCR, 1250 serial_outp(up, UART_MCR,
1252 UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2); 1251 UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2);
1253 } 1252 }
1254 serial_outp(up, UART_IER, 0x0f); /* enable all intrs */ 1253 serial_outp(up, UART_IER, 0x0f); /* enable all intrs */
1255 (void)serial_inp(up, UART_LSR); 1254 (void)serial_inp(up, UART_LSR);
1256 (void)serial_inp(up, UART_RX); 1255 (void)serial_inp(up, UART_RX);
1257 (void)serial_inp(up, UART_IIR); 1256 (void)serial_inp(up, UART_IIR);
1258 (void)serial_inp(up, UART_MSR); 1257 (void)serial_inp(up, UART_MSR);
1259 serial_outp(up, UART_TX, 0xFF); 1258 serial_outp(up, UART_TX, 0xFF);
1260 udelay(20); 1259 udelay(20);
1261 irq = probe_irq_off(irqs); 1260 irq = probe_irq_off(irqs);
1262 1261
1263 serial_outp(up, UART_MCR, save_mcr); 1262 serial_outp(up, UART_MCR, save_mcr);
1264 serial_outp(up, UART_IER, save_ier); 1263 serial_outp(up, UART_IER, save_ier);
1265 1264
1266 if (up->port.flags & UPF_FOURPORT) 1265 if (up->port.flags & UPF_FOURPORT)
1267 outb_p(save_ICP, ICP); 1266 outb_p(save_ICP, ICP);
1268 1267
1269 up->port.irq = (irq > 0) ? irq : 0; 1268 up->port.irq = (irq > 0) ? irq : 0;
1270 } 1269 }
1271 1270
1272 static inline void __stop_tx(struct uart_8250_port *p) 1271 static inline void __stop_tx(struct uart_8250_port *p)
1273 { 1272 {
1274 if (p->ier & UART_IER_THRI) { 1273 if (p->ier & UART_IER_THRI) {
1275 p->ier &= ~UART_IER_THRI; 1274 p->ier &= ~UART_IER_THRI;
1276 serial_out(p, UART_IER, p->ier); 1275 serial_out(p, UART_IER, p->ier);
1277 } 1276 }
1278 } 1277 }
1279 1278
1280 static void serial8250_stop_tx(struct uart_port *port) 1279 static void serial8250_stop_tx(struct uart_port *port)
1281 { 1280 {
1282 struct uart_8250_port *up = 1281 struct uart_8250_port *up =
1283 container_of(port, struct uart_8250_port, port); 1282 container_of(port, struct uart_8250_port, port);
1284 1283
1285 __stop_tx(up); 1284 __stop_tx(up);
1286 1285
1287 /* 1286 /*
1288 * We really want to stop the transmitter from sending. 1287 * We really want to stop the transmitter from sending.
1289 */ 1288 */
1290 if (up->port.type == PORT_16C950) { 1289 if (up->port.type == PORT_16C950) {
1291 up->acr |= UART_ACR_TXDIS; 1290 up->acr |= UART_ACR_TXDIS;
1292 serial_icr_write(up, UART_ACR, up->acr); 1291 serial_icr_write(up, UART_ACR, up->acr);
1293 } 1292 }
1294 } 1293 }
1295 1294
1296 static void serial8250_start_tx(struct uart_port *port) 1295 static void serial8250_start_tx(struct uart_port *port)
1297 { 1296 {
1298 struct uart_8250_port *up = 1297 struct uart_8250_port *up =
1299 container_of(port, struct uart_8250_port, port); 1298 container_of(port, struct uart_8250_port, port);
1300 1299
1301 if (!(up->ier & UART_IER_THRI)) { 1300 if (!(up->ier & UART_IER_THRI)) {
1302 up->ier |= UART_IER_THRI; 1301 up->ier |= UART_IER_THRI;
1303 serial_out(up, UART_IER, up->ier); 1302 serial_out(up, UART_IER, up->ier);
1304 1303
1305 if (up->bugs & UART_BUG_TXEN) { 1304 if (up->bugs & UART_BUG_TXEN) {
1306 unsigned char lsr; 1305 unsigned char lsr;
1307 lsr = serial_in(up, UART_LSR); 1306 lsr = serial_in(up, UART_LSR);
1308 up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; 1307 up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;
1309 if ((up->port.type == PORT_RM9000) ? 1308 if ((up->port.type == PORT_RM9000) ?
1310 (lsr & UART_LSR_THRE) : 1309 (lsr & UART_LSR_THRE) :
1311 (lsr & UART_LSR_TEMT)) 1310 (lsr & UART_LSR_TEMT))
1312 serial8250_tx_chars(up); 1311 serial8250_tx_chars(up);
1313 } 1312 }
1314 } 1313 }
1315 1314
1316 /* 1315 /*
1317 * Re-enable the transmitter if we disabled it. 1316 * Re-enable the transmitter if we disabled it.
1318 */ 1317 */
1319 if (up->port.type == PORT_16C950 && up->acr & UART_ACR_TXDIS) { 1318 if (up->port.type == PORT_16C950 && up->acr & UART_ACR_TXDIS) {
1320 up->acr &= ~UART_ACR_TXDIS; 1319 up->acr &= ~UART_ACR_TXDIS;
1321 serial_icr_write(up, UART_ACR, up->acr); 1320 serial_icr_write(up, UART_ACR, up->acr);
1322 } 1321 }
1323 } 1322 }
1324 1323
1325 static void serial8250_stop_rx(struct uart_port *port) 1324 static void serial8250_stop_rx(struct uart_port *port)
1326 { 1325 {
1327 struct uart_8250_port *up = 1326 struct uart_8250_port *up =
1328 container_of(port, struct uart_8250_port, port); 1327 container_of(port, struct uart_8250_port, port);
1329 1328
1330 up->ier &= ~UART_IER_RLSI; 1329 up->ier &= ~UART_IER_RLSI;
1331 up->port.read_status_mask &= ~UART_LSR_DR; 1330 up->port.read_status_mask &= ~UART_LSR_DR;
1332 serial_out(up, UART_IER, up->ier); 1331 serial_out(up, UART_IER, up->ier);
1333 } 1332 }
1334 1333
1335 static void serial8250_enable_ms(struct uart_port *port) 1334 static void serial8250_enable_ms(struct uart_port *port)
1336 { 1335 {
1337 struct uart_8250_port *up = 1336 struct uart_8250_port *up =
1338 container_of(port, struct uart_8250_port, port); 1337 container_of(port, struct uart_8250_port, port);
1339 1338
1340 /* no MSR capabilities */ 1339 /* no MSR capabilities */
1341 if (up->bugs & UART_BUG_NOMSR) 1340 if (up->bugs & UART_BUG_NOMSR)
1342 return; 1341 return;
1343 1342
1344 up->ier |= UART_IER_MSI; 1343 up->ier |= UART_IER_MSI;
1345 serial_out(up, UART_IER, up->ier); 1344 serial_out(up, UART_IER, up->ier);
1346 } 1345 }
1347 1346
1348 /* 1347 /*
1349 * Clear the Tegra rx fifo after a break 1348 * Clear the Tegra rx fifo after a break
1350 * 1349 *
1351 * FIXME: This needs to become a port specific callback once we have a 1350 * FIXME: This needs to become a port specific callback once we have a
1352 * framework for this 1351 * framework for this
1353 */ 1352 */
1354 static void clear_rx_fifo(struct uart_8250_port *up) 1353 static void clear_rx_fifo(struct uart_8250_port *up)
1355 { 1354 {
1356 unsigned int status, tmout = 10000; 1355 unsigned int status, tmout = 10000;
1357 do { 1356 do {
1358 status = serial_in(up, UART_LSR); 1357 status = serial_in(up, UART_LSR);
1359 if (status & (UART_LSR_FIFOE | UART_LSR_BRK_ERROR_BITS)) 1358 if (status & (UART_LSR_FIFOE | UART_LSR_BRK_ERROR_BITS))
1360 status = serial_in(up, UART_RX); 1359 status = serial_in(up, UART_RX);
1361 else 1360 else
1362 break; 1361 break;
1363 if (--tmout == 0) 1362 if (--tmout == 0)
1364 break; 1363 break;
1365 udelay(1); 1364 udelay(1);
1366 } while (1); 1365 } while (1);
1367 } 1366 }
1368 1367
1369 /* 1368 /*
1370 * serial8250_rx_chars: processes according to the passed in LSR 1369 * serial8250_rx_chars: processes according to the passed in LSR
1371 * value, and returns the remaining LSR bits not handled 1370 * value, and returns the remaining LSR bits not handled
1372 * by this Rx routine. 1371 * by this Rx routine.
1373 */ 1372 */
1374 unsigned char 1373 unsigned char
1375 serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr) 1374 serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr)
1376 { 1375 {
1377 struct tty_struct *tty = up->port.state->port.tty; 1376 struct tty_struct *tty = up->port.state->port.tty;
1378 unsigned char ch; 1377 unsigned char ch;
1379 int max_count = 256; 1378 int max_count = 256;
1380 char flag; 1379 char flag;
1381 1380
1382 do { 1381 do {
1383 if (likely(lsr & UART_LSR_DR)) 1382 if (likely(lsr & UART_LSR_DR))
1384 ch = serial_inp(up, UART_RX); 1383 ch = serial_inp(up, UART_RX);
1385 else 1384 else
1386 /* 1385 /*
1387 * Intel 82571 has a Serial Over Lan device that will 1386 * Intel 82571 has a Serial Over Lan device that will
1388 * set UART_LSR_BI without setting UART_LSR_DR when 1387 * set UART_LSR_BI without setting UART_LSR_DR when
1389 * it receives a break. To avoid reading from the 1388 * it receives a break. To avoid reading from the
1390 * receive buffer without UART_LSR_DR bit set, we 1389 * receive buffer without UART_LSR_DR bit set, we
1391 * just force the read character to be 0 1390 * just force the read character to be 0
1392 */ 1391 */
1393 ch = 0; 1392 ch = 0;
1394 1393
1395 flag = TTY_NORMAL; 1394 flag = TTY_NORMAL;
1396 up->port.icount.rx++; 1395 up->port.icount.rx++;
1397 1396
1398 lsr |= up->lsr_saved_flags; 1397 lsr |= up->lsr_saved_flags;
1399 up->lsr_saved_flags = 0; 1398 up->lsr_saved_flags = 0;
1400 1399
1401 if (unlikely(lsr & UART_LSR_BRK_ERROR_BITS)) { 1400 if (unlikely(lsr & UART_LSR_BRK_ERROR_BITS)) {
1402 /* 1401 /*
1403 * For statistics only 1402 * For statistics only
1404 */ 1403 */
1405 if (lsr & UART_LSR_BI) { 1404 if (lsr & UART_LSR_BI) {
1406 lsr &= ~(UART_LSR_FE | UART_LSR_PE); 1405 lsr &= ~(UART_LSR_FE | UART_LSR_PE);
1407 up->port.icount.brk++; 1406 up->port.icount.brk++;
1408 /* 1407 /*
1409 * If tegra port then clear the rx fifo to 1408 * If tegra port then clear the rx fifo to
1410 * accept another break/character. 1409 * accept another break/character.
1411 */ 1410 */
1412 if (up->port.type == PORT_TEGRA) 1411 if (up->port.type == PORT_TEGRA)
1413 clear_rx_fifo(up); 1412 clear_rx_fifo(up);
1414 1413
1415 /* 1414 /*
1416 * We do the SysRQ and SAK checking 1415 * We do the SysRQ and SAK checking
1417 * here because otherwise the break 1416 * here because otherwise the break
1418 * may get masked by ignore_status_mask 1417 * may get masked by ignore_status_mask
1419 * or read_status_mask. 1418 * or read_status_mask.
1420 */ 1419 */
1421 if (uart_handle_break(&up->port)) 1420 if (uart_handle_break(&up->port))
1422 goto ignore_char; 1421 goto ignore_char;
1423 } else if (lsr & UART_LSR_PE) 1422 } else if (lsr & UART_LSR_PE)
1424 up->port.icount.parity++; 1423 up->port.icount.parity++;
1425 else if (lsr & UART_LSR_FE) 1424 else if (lsr & UART_LSR_FE)
1426 up->port.icount.frame++; 1425 up->port.icount.frame++;
1427 if (lsr & UART_LSR_OE) 1426 if (lsr & UART_LSR_OE)
1428 up->port.icount.overrun++; 1427 up->port.icount.overrun++;
1429 1428
1430 /* 1429 /*
1431 * Mask off conditions which should be ignored. 1430 * Mask off conditions which should be ignored.
1432 */ 1431 */
1433 lsr &= up->port.read_status_mask; 1432 lsr &= up->port.read_status_mask;
1434 1433
1435 if (lsr & UART_LSR_BI) { 1434 if (lsr & UART_LSR_BI) {
1436 DEBUG_INTR("handling break...."); 1435 DEBUG_INTR("handling break....");
1437 flag = TTY_BREAK; 1436 flag = TTY_BREAK;
1438 } else if (lsr & UART_LSR_PE) 1437 } else if (lsr & UART_LSR_PE)
1439 flag = TTY_PARITY; 1438 flag = TTY_PARITY;
1440 else if (lsr & UART_LSR_FE) 1439 else if (lsr & UART_LSR_FE)
1441 flag = TTY_FRAME; 1440 flag = TTY_FRAME;
1442 } 1441 }
1443 if (uart_handle_sysrq_char(&up->port, ch)) 1442 if (uart_handle_sysrq_char(&up->port, ch))
1444 goto ignore_char; 1443 goto ignore_char;
1445 1444
1446 uart_insert_char(&up->port, lsr, UART_LSR_OE, ch, flag); 1445 uart_insert_char(&up->port, lsr, UART_LSR_OE, ch, flag);
1447 1446
1448 ignore_char: 1447 ignore_char:
1449 lsr = serial_inp(up, UART_LSR); 1448 lsr = serial_inp(up, UART_LSR);
1450 } while ((lsr & (UART_LSR_DR | UART_LSR_BI)) && (max_count-- > 0)); 1449 } while ((lsr & (UART_LSR_DR | UART_LSR_BI)) && (max_count-- > 0));
1451 spin_unlock(&up->port.lock); 1450 spin_unlock(&up->port.lock);
1452 tty_flip_buffer_push(tty); 1451 tty_flip_buffer_push(tty);
1453 spin_lock(&up->port.lock); 1452 spin_lock(&up->port.lock);
1454 return lsr; 1453 return lsr;
1455 } 1454 }
1456 EXPORT_SYMBOL_GPL(serial8250_rx_chars); 1455 EXPORT_SYMBOL_GPL(serial8250_rx_chars);
1457 1456
1458 void serial8250_tx_chars(struct uart_8250_port *up) 1457 void serial8250_tx_chars(struct uart_8250_port *up)
1459 { 1458 {
1460 struct circ_buf *xmit = &up->port.state->xmit; 1459 struct circ_buf *xmit = &up->port.state->xmit;
1461 int count; 1460 int count;
1462 1461
1463 if (up->port.x_char) { 1462 if (up->port.x_char) {
1464 serial_outp(up, UART_TX, up->port.x_char); 1463 serial_outp(up, UART_TX, up->port.x_char);
1465 up->port.icount.tx++; 1464 up->port.icount.tx++;
1466 up->port.x_char = 0; 1465 up->port.x_char = 0;
1467 return; 1466 return;
1468 } 1467 }
1469 if (uart_tx_stopped(&up->port)) { 1468 if (uart_tx_stopped(&up->port)) {
1470 serial8250_stop_tx(&up->port); 1469 serial8250_stop_tx(&up->port);
1471 return; 1470 return;
1472 } 1471 }
1473 if (uart_circ_empty(xmit)) { 1472 if (uart_circ_empty(xmit)) {
1474 __stop_tx(up); 1473 __stop_tx(up);
1475 return; 1474 return;
1476 } 1475 }
1477 1476
1478 count = up->tx_loadsz; 1477 count = up->tx_loadsz;
1479 do { 1478 do {
1480 serial_out(up, UART_TX, xmit->buf[xmit->tail]); 1479 serial_out(up, UART_TX, xmit->buf[xmit->tail]);
1481 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); 1480 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
1482 up->port.icount.tx++; 1481 up->port.icount.tx++;
1483 if (uart_circ_empty(xmit)) 1482 if (uart_circ_empty(xmit))
1484 break; 1483 break;
1485 } while (--count > 0); 1484 } while (--count > 0);
1486 1485
1487 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) 1486 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
1488 uart_write_wakeup(&up->port); 1487 uart_write_wakeup(&up->port);
1489 1488
1490 DEBUG_INTR("THRE..."); 1489 DEBUG_INTR("THRE...");
1491 1490
1492 if (uart_circ_empty(xmit)) 1491 if (uart_circ_empty(xmit))
1493 __stop_tx(up); 1492 __stop_tx(up);
1494 } 1493 }
1495 EXPORT_SYMBOL_GPL(serial8250_tx_chars); 1494 EXPORT_SYMBOL_GPL(serial8250_tx_chars);
1496 1495
1497 unsigned int serial8250_modem_status(struct uart_8250_port *up) 1496 unsigned int serial8250_modem_status(struct uart_8250_port *up)
1498 { 1497 {
1499 unsigned int status = serial_in(up, UART_MSR); 1498 unsigned int status = serial_in(up, UART_MSR);
1500 1499
1501 status |= up->msr_saved_flags; 1500 status |= up->msr_saved_flags;
1502 up->msr_saved_flags = 0; 1501 up->msr_saved_flags = 0;
1503 if (status & UART_MSR_ANY_DELTA && up->ier & UART_IER_MSI && 1502 if (status & UART_MSR_ANY_DELTA && up->ier & UART_IER_MSI &&
1504 up->port.state != NULL) { 1503 up->port.state != NULL) {
1505 if (status & UART_MSR_TERI) 1504 if (status & UART_MSR_TERI)
1506 up->port.icount.rng++; 1505 up->port.icount.rng++;
1507 if (status & UART_MSR_DDSR) 1506 if (status & UART_MSR_DDSR)
1508 up->port.icount.dsr++; 1507 up->port.icount.dsr++;
1509 if (status & UART_MSR_DDCD) 1508 if (status & UART_MSR_DDCD)
1510 uart_handle_dcd_change(&up->port, status & UART_MSR_DCD); 1509 uart_handle_dcd_change(&up->port, status & UART_MSR_DCD);
1511 if (status & UART_MSR_DCTS) 1510 if (status & UART_MSR_DCTS)
1512 uart_handle_cts_change(&up->port, status & UART_MSR_CTS); 1511 uart_handle_cts_change(&up->port, status & UART_MSR_CTS);
1513 1512
1514 wake_up_interruptible(&up->port.state->port.delta_msr_wait); 1513 wake_up_interruptible(&up->port.state->port.delta_msr_wait);
1515 } 1514 }
1516 1515
1517 return status; 1516 return status;
1518 } 1517 }
1519 EXPORT_SYMBOL_GPL(serial8250_modem_status); 1518 EXPORT_SYMBOL_GPL(serial8250_modem_status);
1520 1519
1521 /* 1520 /*
1522 * This handles the interrupt from one port. 1521 * This handles the interrupt from one port.
1523 */ 1522 */
1524 int serial8250_handle_irq(struct uart_port *port, unsigned int iir) 1523 int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
1525 { 1524 {
1526 unsigned char status; 1525 unsigned char status;
1527 unsigned long flags; 1526 unsigned long flags;
1528 struct uart_8250_port *up = 1527 struct uart_8250_port *up =
1529 container_of(port, struct uart_8250_port, port); 1528 container_of(port, struct uart_8250_port, port);
1530 1529
1531 if (iir & UART_IIR_NO_INT) 1530 if (iir & UART_IIR_NO_INT)
1532 return 0; 1531 return 0;
1533 1532
1534 spin_lock_irqsave(&up->port.lock, flags); 1533 spin_lock_irqsave(&up->port.lock, flags);
1535 1534
1536 status = serial_inp(up, UART_LSR); 1535 status = serial_inp(up, UART_LSR);
1537 1536
1538 DEBUG_INTR("status = %x...", status); 1537 DEBUG_INTR("status = %x...", status);
1539 1538
1540 if (status & (UART_LSR_DR | UART_LSR_BI)) 1539 if (status & (UART_LSR_DR | UART_LSR_BI))
1541 status = serial8250_rx_chars(up, status); 1540 status = serial8250_rx_chars(up, status);
1542 serial8250_modem_status(up); 1541 serial8250_modem_status(up);
1543 if (status & UART_LSR_THRE) 1542 if (status & UART_LSR_THRE)
1544 serial8250_tx_chars(up); 1543 serial8250_tx_chars(up);
1545 1544
1546 spin_unlock_irqrestore(&up->port.lock, flags); 1545 spin_unlock_irqrestore(&up->port.lock, flags);
1547 return 1; 1546 return 1;
1548 } 1547 }
1549 EXPORT_SYMBOL_GPL(serial8250_handle_irq); 1548 EXPORT_SYMBOL_GPL(serial8250_handle_irq);
1550 1549
1551 static int serial8250_default_handle_irq(struct uart_port *port) 1550 static int serial8250_default_handle_irq(struct uart_port *port)
1552 { 1551 {
1553 struct uart_8250_port *up = 1552 struct uart_8250_port *up =
1554 container_of(port, struct uart_8250_port, port); 1553 container_of(port, struct uart_8250_port, port);
1555 unsigned int iir = serial_in(up, UART_IIR); 1554 unsigned int iir = serial_in(up, UART_IIR);
1556 1555
1557 return serial8250_handle_irq(port, iir); 1556 return serial8250_handle_irq(port, iir);
1558 } 1557 }
1559 1558
1560 /* 1559 /*
1561 * This is the serial driver's interrupt routine. 1560 * This is the serial driver's interrupt routine.
1562 * 1561 *
1563 * Arjan thinks the old way was overly complex, so it got simplified. 1562 * Arjan thinks the old way was overly complex, so it got simplified.
1564 * Alan disagrees, saying that need the complexity to handle the weird 1563 * Alan disagrees, saying that need the complexity to handle the weird
1565 * nature of ISA shared interrupts. (This is a special exception.) 1564 * nature of ISA shared interrupts. (This is a special exception.)
1566 * 1565 *
1567 * In order to handle ISA shared interrupts properly, we need to check 1566 * In order to handle ISA shared interrupts properly, we need to check
1568 * that all ports have been serviced, and therefore the ISA interrupt 1567 * that all ports have been serviced, and therefore the ISA interrupt
1569 * line has been de-asserted. 1568 * line has been de-asserted.
1570 * 1569 *
1571 * This means we need to loop through all ports. checking that they 1570 * This means we need to loop through all ports. checking that they
1572 * don't have an interrupt pending. 1571 * don't have an interrupt pending.
1573 */ 1572 */
1574 static irqreturn_t serial8250_interrupt(int irq, void *dev_id) 1573 static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
1575 { 1574 {
1576 struct irq_info *i = dev_id; 1575 struct irq_info *i = dev_id;
1577 struct list_head *l, *end = NULL; 1576 struct list_head *l, *end = NULL;
1578 int pass_counter = 0, handled = 0; 1577 int pass_counter = 0, handled = 0;
1579 1578
1580 DEBUG_INTR("serial8250_interrupt(%d)...", irq); 1579 DEBUG_INTR("serial8250_interrupt(%d)...", irq);
1581 1580
1582 spin_lock(&i->lock); 1581 spin_lock(&i->lock);
1583 1582
1584 l = i->head; 1583 l = i->head;
1585 do { 1584 do {
1586 struct uart_8250_port *up; 1585 struct uart_8250_port *up;
1587 struct uart_port *port; 1586 struct uart_port *port;
1588 bool skip; 1587 bool skip;
1589 1588
1590 up = list_entry(l, struct uart_8250_port, list); 1589 up = list_entry(l, struct uart_8250_port, list);
1591 port = &up->port; 1590 port = &up->port;
1592 skip = pass_counter && up->port.flags & UPF_IIR_ONCE; 1591 skip = pass_counter && up->port.flags & UPF_IIR_ONCE;
1593 1592
1594 if (!skip && port->handle_irq(port)) { 1593 if (!skip && port->handle_irq(port)) {
1595 handled = 1; 1594 handled = 1;
1596 end = NULL; 1595 end = NULL;
1597 } else if (end == NULL) 1596 } else if (end == NULL)
1598 end = l; 1597 end = l;
1599 1598
1600 l = l->next; 1599 l = l->next;
1601 1600
1602 if (l == i->head && pass_counter++ > PASS_LIMIT) { 1601 if (l == i->head && pass_counter++ > PASS_LIMIT) {
1603 /* If we hit this, we're dead. */ 1602 /* If we hit this, we're dead. */
1604 printk_ratelimited(KERN_ERR 1603 printk_ratelimited(KERN_ERR
1605 "serial8250: too much work for irq%d\n", irq); 1604 "serial8250: too much work for irq%d\n", irq);
1606 break; 1605 break;
1607 } 1606 }
1608 } while (l != end); 1607 } while (l != end);
1609 1608
1610 spin_unlock(&i->lock); 1609 spin_unlock(&i->lock);
1611 1610
1612 DEBUG_INTR("end.\n"); 1611 DEBUG_INTR("end.\n");
1613 1612
1614 return IRQ_RETVAL(handled); 1613 return IRQ_RETVAL(handled);
1615 } 1614 }
1616 1615
1617 /* 1616 /*
1618 * To support ISA shared interrupts, we need to have one interrupt 1617 * To support ISA shared interrupts, we need to have one interrupt
1619 * handler that ensures that the IRQ line has been deasserted 1618 * handler that ensures that the IRQ line has been deasserted
1620 * before returning. Failing to do this will result in the IRQ 1619 * before returning. Failing to do this will result in the IRQ
1621 * line being stuck active, and, since ISA irqs are edge triggered, 1620 * line being stuck active, and, since ISA irqs are edge triggered,
1622 * no more IRQs will be seen. 1621 * no more IRQs will be seen.
1623 */ 1622 */
1624 static void serial_do_unlink(struct irq_info *i, struct uart_8250_port *up) 1623 static void serial_do_unlink(struct irq_info *i, struct uart_8250_port *up)
1625 { 1624 {
1626 spin_lock_irq(&i->lock); 1625 spin_lock_irq(&i->lock);
1627 1626
1628 if (!list_empty(i->head)) { 1627 if (!list_empty(i->head)) {
1629 if (i->head == &up->list) 1628 if (i->head == &up->list)
1630 i->head = i->head->next; 1629 i->head = i->head->next;
1631 list_del(&up->list); 1630 list_del(&up->list);
1632 } else { 1631 } else {
1633 BUG_ON(i->head != &up->list); 1632 BUG_ON(i->head != &up->list);
1634 i->head = NULL; 1633 i->head = NULL;
1635 } 1634 }
1636 spin_unlock_irq(&i->lock); 1635 spin_unlock_irq(&i->lock);
1637 /* List empty so throw away the hash node */ 1636 /* List empty so throw away the hash node */
1638 if (i->head == NULL) { 1637 if (i->head == NULL) {
1639 hlist_del(&i->node); 1638 hlist_del(&i->node);
1640 kfree(i); 1639 kfree(i);
1641 } 1640 }
1642 } 1641 }
1643 1642
1644 static int serial_link_irq_chain(struct uart_8250_port *up) 1643 static int serial_link_irq_chain(struct uart_8250_port *up)
1645 { 1644 {
1646 struct hlist_head *h; 1645 struct hlist_head *h;
1647 struct hlist_node *n; 1646 struct hlist_node *n;
1648 struct irq_info *i; 1647 struct irq_info *i;
1649 int ret, irq_flags = up->port.flags & UPF_SHARE_IRQ ? IRQF_SHARED : 0; 1648 int ret, irq_flags = up->port.flags & UPF_SHARE_IRQ ? IRQF_SHARED : 0;
1650 1649
1651 mutex_lock(&hash_mutex); 1650 mutex_lock(&hash_mutex);
1652 1651
1653 h = &irq_lists[up->port.irq % NR_IRQ_HASH]; 1652 h = &irq_lists[up->port.irq % NR_IRQ_HASH];
1654 1653
1655 hlist_for_each(n, h) { 1654 hlist_for_each(n, h) {
1656 i = hlist_entry(n, struct irq_info, node); 1655 i = hlist_entry(n, struct irq_info, node);
1657 if (i->irq == up->port.irq) 1656 if (i->irq == up->port.irq)
1658 break; 1657 break;
1659 } 1658 }
1660 1659
1661 if (n == NULL) { 1660 if (n == NULL) {
1662 i = kzalloc(sizeof(struct irq_info), GFP_KERNEL); 1661 i = kzalloc(sizeof(struct irq_info), GFP_KERNEL);
1663 if (i == NULL) { 1662 if (i == NULL) {
1664 mutex_unlock(&hash_mutex); 1663 mutex_unlock(&hash_mutex);
1665 return -ENOMEM; 1664 return -ENOMEM;
1666 } 1665 }
1667 spin_lock_init(&i->lock); 1666 spin_lock_init(&i->lock);
1668 i->irq = up->port.irq; 1667 i->irq = up->port.irq;
1669 hlist_add_head(&i->node, h); 1668 hlist_add_head(&i->node, h);
1670 } 1669 }
1671 mutex_unlock(&hash_mutex); 1670 mutex_unlock(&hash_mutex);
1672 1671
1673 spin_lock_irq(&i->lock); 1672 spin_lock_irq(&i->lock);
1674 1673
1675 if (i->head) { 1674 if (i->head) {
1676 list_add(&up->list, i->head); 1675 list_add(&up->list, i->head);
1677 spin_unlock_irq(&i->lock); 1676 spin_unlock_irq(&i->lock);
1678 1677
1679 ret = 0; 1678 ret = 0;
1680 } else { 1679 } else {
1681 INIT_LIST_HEAD(&up->list); 1680 INIT_LIST_HEAD(&up->list);
1682 i->head = &up->list; 1681 i->head = &up->list;
1683 spin_unlock_irq(&i->lock); 1682 spin_unlock_irq(&i->lock);
1684 irq_flags |= up->port.irqflags; 1683 irq_flags |= up->port.irqflags;
1685 ret = request_irq(up->port.irq, serial8250_interrupt, 1684 ret = request_irq(up->port.irq, serial8250_interrupt,
1686 irq_flags, "serial", i); 1685 irq_flags, "serial", i);
1687 if (ret < 0) 1686 if (ret < 0)
1688 serial_do_unlink(i, up); 1687 serial_do_unlink(i, up);
1689 } 1688 }
1690 1689
1691 return ret; 1690 return ret;
1692 } 1691 }
1693 1692
1694 static void serial_unlink_irq_chain(struct uart_8250_port *up) 1693 static void serial_unlink_irq_chain(struct uart_8250_port *up)
1695 { 1694 {
1696 struct irq_info *i; 1695 struct irq_info *i;
1697 struct hlist_node *n; 1696 struct hlist_node *n;
1698 struct hlist_head *h; 1697 struct hlist_head *h;
1699 1698
1700 mutex_lock(&hash_mutex); 1699 mutex_lock(&hash_mutex);
1701 1700
1702 h = &irq_lists[up->port.irq % NR_IRQ_HASH]; 1701 h = &irq_lists[up->port.irq % NR_IRQ_HASH];
1703 1702
1704 hlist_for_each(n, h) { 1703 hlist_for_each(n, h) {
1705 i = hlist_entry(n, struct irq_info, node); 1704 i = hlist_entry(n, struct irq_info, node);
1706 if (i->irq == up->port.irq) 1705 if (i->irq == up->port.irq)
1707 break; 1706 break;
1708 } 1707 }
1709 1708
1710 BUG_ON(n == NULL); 1709 BUG_ON(n == NULL);
1711 BUG_ON(i->head == NULL); 1710 BUG_ON(i->head == NULL);
1712 1711
1713 if (list_empty(i->head)) 1712 if (list_empty(i->head))
1714 free_irq(up->port.irq, i); 1713 free_irq(up->port.irq, i);
1715 1714
1716 serial_do_unlink(i, up); 1715 serial_do_unlink(i, up);
1717 mutex_unlock(&hash_mutex); 1716 mutex_unlock(&hash_mutex);
1718 } 1717 }
1719 1718
1720 /* 1719 /*
1721 * This function is used to handle ports that do not have an 1720 * This function is used to handle ports that do not have an
1722 * interrupt. This doesn't work very well for 16450's, but gives 1721 * interrupt. This doesn't work very well for 16450's, but gives
1723 * barely passable results for a 16550A. (Although at the expense 1722 * barely passable results for a 16550A. (Although at the expense
1724 * of much CPU overhead). 1723 * of much CPU overhead).
1725 */ 1724 */
1726 static void serial8250_timeout(unsigned long data) 1725 static void serial8250_timeout(unsigned long data)
1727 { 1726 {
1728 struct uart_8250_port *up = (struct uart_8250_port *)data; 1727 struct uart_8250_port *up = (struct uart_8250_port *)data;
1729 1728
1730 up->port.handle_irq(&up->port); 1729 up->port.handle_irq(&up->port);
1731 mod_timer(&up->timer, jiffies + uart_poll_timeout(&up->port)); 1730 mod_timer(&up->timer, jiffies + uart_poll_timeout(&up->port));
1732 } 1731 }
1733 1732
1734 static void serial8250_backup_timeout(unsigned long data) 1733 static void serial8250_backup_timeout(unsigned long data)
1735 { 1734 {
1736 struct uart_8250_port *up = (struct uart_8250_port *)data; 1735 struct uart_8250_port *up = (struct uart_8250_port *)data;
1737 unsigned int iir, ier = 0, lsr; 1736 unsigned int iir, ier = 0, lsr;
1738 unsigned long flags; 1737 unsigned long flags;
1739 1738
1740 spin_lock_irqsave(&up->port.lock, flags); 1739 spin_lock_irqsave(&up->port.lock, flags);
1741 1740
1742 /* 1741 /*
1743 * Must disable interrupts or else we risk racing with the interrupt 1742 * Must disable interrupts or else we risk racing with the interrupt
1744 * based handler. 1743 * based handler.
1745 */ 1744 */
1746 if (up->port.irq) { 1745 if (up->port.irq) {
1747 ier = serial_in(up, UART_IER); 1746 ier = serial_in(up, UART_IER);
1748 serial_out(up, UART_IER, 0); 1747 serial_out(up, UART_IER, 0);
1749 } 1748 }
1750 1749
1751 iir = serial_in(up, UART_IIR); 1750 iir = serial_in(up, UART_IIR);
1752 1751
1753 /* 1752 /*
1754 * This should be a safe test for anyone who doesn't trust the 1753 * This should be a safe test for anyone who doesn't trust the
1755 * IIR bits on their UART, but it's specifically designed for 1754 * IIR bits on their UART, but it's specifically designed for
1756 * the "Diva" UART used on the management processor on many HP 1755 * the "Diva" UART used on the management processor on many HP
1757 * ia64 and parisc boxes. 1756 * ia64 and parisc boxes.
1758 */ 1757 */
1759 lsr = serial_in(up, UART_LSR); 1758 lsr = serial_in(up, UART_LSR);
1760 up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; 1759 up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;
1761 if ((iir & UART_IIR_NO_INT) && (up->ier & UART_IER_THRI) && 1760 if ((iir & UART_IIR_NO_INT) && (up->ier & UART_IER_THRI) &&
1762 (!uart_circ_empty(&up->port.state->xmit) || up->port.x_char) && 1761 (!uart_circ_empty(&up->port.state->xmit) || up->port.x_char) &&
1763 (lsr & UART_LSR_THRE)) { 1762 (lsr & UART_LSR_THRE)) {
1764 iir &= ~(UART_IIR_ID | UART_IIR_NO_INT); 1763 iir &= ~(UART_IIR_ID | UART_IIR_NO_INT);
1765 iir |= UART_IIR_THRI; 1764 iir |= UART_IIR_THRI;
1766 } 1765 }
1767 1766
1768 if (!(iir & UART_IIR_NO_INT)) 1767 if (!(iir & UART_IIR_NO_INT))
1769 serial8250_tx_chars(up); 1768 serial8250_tx_chars(up);
1770 1769
1771 if (up->port.irq) 1770 if (up->port.irq)
1772 serial_out(up, UART_IER, ier); 1771 serial_out(up, UART_IER, ier);
1773 1772
1774 spin_unlock_irqrestore(&up->port.lock, flags); 1773 spin_unlock_irqrestore(&up->port.lock, flags);
1775 1774
1776 /* Standard timer interval plus 0.2s to keep the port running */ 1775 /* Standard timer interval plus 0.2s to keep the port running */
1777 mod_timer(&up->timer, 1776 mod_timer(&up->timer,
1778 jiffies + uart_poll_timeout(&up->port) + HZ / 5); 1777 jiffies + uart_poll_timeout(&up->port) + HZ / 5);
1779 } 1778 }
1780 1779
1781 static unsigned int serial8250_tx_empty(struct uart_port *port) 1780 static unsigned int serial8250_tx_empty(struct uart_port *port)
1782 { 1781 {
1783 struct uart_8250_port *up = 1782 struct uart_8250_port *up =
1784 container_of(port, struct uart_8250_port, port); 1783 container_of(port, struct uart_8250_port, port);
1785 unsigned long flags; 1784 unsigned long flags;
1786 unsigned int lsr; 1785 unsigned int lsr;
1787 1786
1788 spin_lock_irqsave(&up->port.lock, flags); 1787 spin_lock_irqsave(&up->port.lock, flags);
1789 lsr = serial_in(up, UART_LSR); 1788 lsr = serial_in(up, UART_LSR);
1790 up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; 1789 up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;
1791 spin_unlock_irqrestore(&up->port.lock, flags); 1790 spin_unlock_irqrestore(&up->port.lock, flags);
1792 1791
1793 return (lsr & BOTH_EMPTY) == BOTH_EMPTY ? TIOCSER_TEMT : 0; 1792 return (lsr & BOTH_EMPTY) == BOTH_EMPTY ? TIOCSER_TEMT : 0;
1794 } 1793 }
1795 1794
1796 static unsigned int serial8250_get_mctrl(struct uart_port *port) 1795 static unsigned int serial8250_get_mctrl(struct uart_port *port)
1797 { 1796 {
1798 struct uart_8250_port *up = 1797 struct uart_8250_port *up =
1799 container_of(port, struct uart_8250_port, port); 1798 container_of(port, struct uart_8250_port, port);
1800 unsigned int status; 1799 unsigned int status;
1801 unsigned int ret; 1800 unsigned int ret;
1802 1801
1803 status = serial8250_modem_status(up); 1802 status = serial8250_modem_status(up);
1804 1803
1805 ret = 0; 1804 ret = 0;
1806 if (status & UART_MSR_DCD) 1805 if (status & UART_MSR_DCD)
1807 ret |= TIOCM_CAR; 1806 ret |= TIOCM_CAR;
1808 if (status & UART_MSR_RI) 1807 if (status & UART_MSR_RI)
1809 ret |= TIOCM_RNG; 1808 ret |= TIOCM_RNG;
1810 if (status & UART_MSR_DSR) 1809 if (status & UART_MSR_DSR)
1811 ret |= TIOCM_DSR; 1810 ret |= TIOCM_DSR;
1812 if (status & UART_MSR_CTS) 1811 if (status & UART_MSR_CTS)
1813 ret |= TIOCM_CTS; 1812 ret |= TIOCM_CTS;
1814 return ret; 1813 return ret;
1815 } 1814 }
1816 1815
1817 static void serial8250_set_mctrl(struct uart_port *port, unsigned int mctrl) 1816 static void serial8250_set_mctrl(struct uart_port *port, unsigned int mctrl)
1818 { 1817 {
1819 struct uart_8250_port *up = 1818 struct uart_8250_port *up =
1820 container_of(port, struct uart_8250_port, port); 1819 container_of(port, struct uart_8250_port, port);
1821 unsigned char mcr = 0; 1820 unsigned char mcr = 0;
1822 1821
1823 if (mctrl & TIOCM_RTS) 1822 if (mctrl & TIOCM_RTS)
1824 mcr |= UART_MCR_RTS; 1823 mcr |= UART_MCR_RTS;
1825 if (mctrl & TIOCM_DTR) 1824 if (mctrl & TIOCM_DTR)
1826 mcr |= UART_MCR_DTR; 1825 mcr |= UART_MCR_DTR;
1827 if (mctrl & TIOCM_OUT1) 1826 if (mctrl & TIOCM_OUT1)
1828 mcr |= UART_MCR_OUT1; 1827 mcr |= UART_MCR_OUT1;
1829 if (mctrl & TIOCM_OUT2) 1828 if (mctrl & TIOCM_OUT2)
1830 mcr |= UART_MCR_OUT2; 1829 mcr |= UART_MCR_OUT2;
1831 if (mctrl & TIOCM_LOOP) 1830 if (mctrl & TIOCM_LOOP)
1832 mcr |= UART_MCR_LOOP; 1831 mcr |= UART_MCR_LOOP;
1833 1832
1834 mcr = (mcr & up->mcr_mask) | up->mcr_force | up->mcr; 1833 mcr = (mcr & up->mcr_mask) | up->mcr_force | up->mcr;
1835 1834
1836 serial_out(up, UART_MCR, mcr); 1835 serial_out(up, UART_MCR, mcr);
1837 } 1836 }
1838 1837
1839 static void serial8250_break_ctl(struct uart_port *port, int break_state) 1838 static void serial8250_break_ctl(struct uart_port *port, int break_state)
1840 { 1839 {
1841 struct uart_8250_port *up = 1840 struct uart_8250_port *up =
1842 container_of(port, struct uart_8250_port, port); 1841 container_of(port, struct uart_8250_port, port);
1843 unsigned long flags; 1842 unsigned long flags;
1844 1843
1845 spin_lock_irqsave(&up->port.lock, flags); 1844 spin_lock_irqsave(&up->port.lock, flags);
1846 if (break_state == -1) 1845 if (break_state == -1)
1847 up->lcr |= UART_LCR_SBC; 1846 up->lcr |= UART_LCR_SBC;
1848 else 1847 else
1849 up->lcr &= ~UART_LCR_SBC; 1848 up->lcr &= ~UART_LCR_SBC;
1850 serial_out(up, UART_LCR, up->lcr); 1849 serial_out(up, UART_LCR, up->lcr);
1851 spin_unlock_irqrestore(&up->port.lock, flags); 1850 spin_unlock_irqrestore(&up->port.lock, flags);
1852 } 1851 }
1853 1852
1854 /* 1853 /*
1855 * Wait for transmitter & holding register to empty 1854 * Wait for transmitter & holding register to empty
1856 */ 1855 */
1857 static void wait_for_xmitr(struct uart_8250_port *up, int bits) 1856 static void wait_for_xmitr(struct uart_8250_port *up, int bits)
1858 { 1857 {
1859 unsigned int status, tmout = 10000; 1858 unsigned int status, tmout = 10000;
1860 1859
1861 /* Wait up to 10ms for the character(s) to be sent. */ 1860 /* Wait up to 10ms for the character(s) to be sent. */
1862 for (;;) { 1861 for (;;) {
1863 status = serial_in(up, UART_LSR); 1862 status = serial_in(up, UART_LSR);
1864 1863
1865 up->lsr_saved_flags |= status & LSR_SAVE_FLAGS; 1864 up->lsr_saved_flags |= status & LSR_SAVE_FLAGS;
1866 1865
1867 if ((status & bits) == bits) 1866 if ((status & bits) == bits)
1868 break; 1867 break;
1869 if (--tmout == 0) 1868 if (--tmout == 0)
1870 break; 1869 break;
1871 udelay(1); 1870 udelay(1);
1872 } 1871 }
1873 1872
1874 /* Wait up to 1s for flow control if necessary */ 1873 /* Wait up to 1s for flow control if necessary */
1875 if (up->port.flags & UPF_CONS_FLOW) { 1874 if (up->port.flags & UPF_CONS_FLOW) {
1876 unsigned int tmout; 1875 unsigned int tmout;
1877 for (tmout = 1000000; tmout; tmout--) { 1876 for (tmout = 1000000; tmout; tmout--) {
1878 unsigned int msr = serial_in(up, UART_MSR); 1877 unsigned int msr = serial_in(up, UART_MSR);
1879 up->msr_saved_flags |= msr & MSR_SAVE_FLAGS; 1878 up->msr_saved_flags |= msr & MSR_SAVE_FLAGS;
1880 if (msr & UART_MSR_CTS) 1879 if (msr & UART_MSR_CTS)
1881 break; 1880 break;
1882 udelay(1); 1881 udelay(1);
1883 touch_nmi_watchdog(); 1882 touch_nmi_watchdog();
1884 } 1883 }
1885 } 1884 }
1886 } 1885 }
1887 1886
1888 #ifdef CONFIG_CONSOLE_POLL 1887 #ifdef CONFIG_CONSOLE_POLL
1889 /* 1888 /*
1890 * Console polling routines for writing and reading from the uart while 1889 * Console polling routines for writing and reading from the uart while
1891 * in an interrupt or debug context. 1890 * in an interrupt or debug context.
1892 */ 1891 */
1893 1892
1894 static int serial8250_get_poll_char(struct uart_port *port) 1893 static int serial8250_get_poll_char(struct uart_port *port)
1895 { 1894 {
1896 struct uart_8250_port *up = 1895 struct uart_8250_port *up =
1897 container_of(port, struct uart_8250_port, port); 1896 container_of(port, struct uart_8250_port, port);
1898 unsigned char lsr = serial_inp(up, UART_LSR); 1897 unsigned char lsr = serial_inp(up, UART_LSR);
1899 1898
1900 if (!(lsr & UART_LSR_DR)) 1899 if (!(lsr & UART_LSR_DR))
1901 return NO_POLL_CHAR; 1900 return NO_POLL_CHAR;
1902 1901
1903 return serial_inp(up, UART_RX); 1902 return serial_inp(up, UART_RX);
1904 } 1903 }
1905 1904
1906 1905
1907 static void serial8250_put_poll_char(struct uart_port *port, 1906 static void serial8250_put_poll_char(struct uart_port *port,
1908 unsigned char c) 1907 unsigned char c)
1909 { 1908 {
1910 unsigned int ier; 1909 unsigned int ier;
1911 struct uart_8250_port *up = 1910 struct uart_8250_port *up =
1912 container_of(port, struct uart_8250_port, port); 1911 container_of(port, struct uart_8250_port, port);
1913 1912
1914 /* 1913 /*
1915 * First save the IER then disable the interrupts 1914 * First save the IER then disable the interrupts
1916 */ 1915 */
1917 ier = serial_in(up, UART_IER); 1916 ier = serial_in(up, UART_IER);
1918 if (up->capabilities & UART_CAP_UUE) 1917 if (up->capabilities & UART_CAP_UUE)
1919 serial_out(up, UART_IER, UART_IER_UUE); 1918 serial_out(up, UART_IER, UART_IER_UUE);
1920 else 1919 else
1921 serial_out(up, UART_IER, 0); 1920 serial_out(up, UART_IER, 0);
1922 1921
1923 wait_for_xmitr(up, BOTH_EMPTY); 1922 wait_for_xmitr(up, BOTH_EMPTY);
1924 /* 1923 /*
1925 * Send the character out. 1924 * Send the character out.
1926 * If a LF, also do CR... 1925 * If a LF, also do CR...
1927 */ 1926 */
1928 serial_out(up, UART_TX, c); 1927 serial_out(up, UART_TX, c);
1929 if (c == 10) { 1928 if (c == 10) {
1930 wait_for_xmitr(up, BOTH_EMPTY); 1929 wait_for_xmitr(up, BOTH_EMPTY);
1931 serial_out(up, UART_TX, 13); 1930 serial_out(up, UART_TX, 13);
1932 } 1931 }
1933 1932
1934 /* 1933 /*
1935 * Finally, wait for transmitter to become empty 1934 * Finally, wait for transmitter to become empty
1936 * and restore the IER 1935 * and restore the IER
1937 */ 1936 */
1938 wait_for_xmitr(up, BOTH_EMPTY); 1937 wait_for_xmitr(up, BOTH_EMPTY);
1939 serial_out(up, UART_IER, ier); 1938 serial_out(up, UART_IER, ier);
1940 } 1939 }
1941 1940
1942 #endif /* CONFIG_CONSOLE_POLL */ 1941 #endif /* CONFIG_CONSOLE_POLL */
1943 1942
1944 static int serial8250_startup(struct uart_port *port) 1943 static int serial8250_startup(struct uart_port *port)
1945 { 1944 {
1946 struct uart_8250_port *up = 1945 struct uart_8250_port *up =
1947 container_of(port, struct uart_8250_port, port); 1946 container_of(port, struct uart_8250_port, port);
1948 unsigned long flags; 1947 unsigned long flags;
1949 unsigned char lsr, iir; 1948 unsigned char lsr, iir;
1950 int retval; 1949 int retval;
1951 1950
1952 up->port.fifosize = uart_config[up->port.type].fifo_size; 1951 up->port.fifosize = uart_config[up->port.type].fifo_size;
1953 up->tx_loadsz = uart_config[up->port.type].tx_loadsz; 1952 up->tx_loadsz = uart_config[up->port.type].tx_loadsz;
1954 up->capabilities = uart_config[up->port.type].flags; 1953 up->capabilities = uart_config[up->port.type].flags;
1955 up->mcr = 0; 1954 up->mcr = 0;
1956 1955
1957 if (up->port.iotype != up->cur_iotype) 1956 if (up->port.iotype != up->cur_iotype)
1958 set_io_from_upio(port); 1957 set_io_from_upio(port);
1959 1958
1960 if (up->port.type == PORT_16C950) { 1959 if (up->port.type == PORT_16C950) {
1961 /* Wake up and initialize UART */ 1960 /* Wake up and initialize UART */
1962 up->acr = 0; 1961 up->acr = 0;
1963 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_B); 1962 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_B);
1964 serial_outp(up, UART_EFR, UART_EFR_ECB); 1963 serial_outp(up, UART_EFR, UART_EFR_ECB);
1965 serial_outp(up, UART_IER, 0); 1964 serial_outp(up, UART_IER, 0);
1966 serial_outp(up, UART_LCR, 0); 1965 serial_outp(up, UART_LCR, 0);
1967 serial_icr_write(up, UART_CSR, 0); /* Reset the UART */ 1966 serial_icr_write(up, UART_CSR, 0); /* Reset the UART */
1968 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_B); 1967 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_B);
1969 serial_outp(up, UART_EFR, UART_EFR_ECB); 1968 serial_outp(up, UART_EFR, UART_EFR_ECB);
1970 serial_outp(up, UART_LCR, 0); 1969 serial_outp(up, UART_LCR, 0);
1971 } 1970 }
1972 1971
1973 #ifdef CONFIG_SERIAL_8250_RSA 1972 #ifdef CONFIG_SERIAL_8250_RSA
1974 /* 1973 /*
1975 * If this is an RSA port, see if we can kick it up to the 1974 * If this is an RSA port, see if we can kick it up to the
1976 * higher speed clock. 1975 * higher speed clock.
1977 */ 1976 */
1978 enable_rsa(up); 1977 enable_rsa(up);
1979 #endif 1978 #endif
1980 1979
1981 /* 1980 /*
1982 * Clear the FIFO buffers and disable them. 1981 * Clear the FIFO buffers and disable them.
1983 * (they will be reenabled in set_termios()) 1982 * (they will be reenabled in set_termios())
1984 */ 1983 */
1985 serial8250_clear_fifos(up); 1984 serial8250_clear_fifos(up);
1986 1985
1987 /* 1986 /*
1988 * Clear the interrupt registers. 1987 * Clear the interrupt registers.
1989 */ 1988 */
1990 (void) serial_inp(up, UART_LSR); 1989 (void) serial_inp(up, UART_LSR);
1991 (void) serial_inp(up, UART_RX); 1990 (void) serial_inp(up, UART_RX);
1992 (void) serial_inp(up, UART_IIR); 1991 (void) serial_inp(up, UART_IIR);
1993 (void) serial_inp(up, UART_MSR); 1992 (void) serial_inp(up, UART_MSR);
1994 1993
1995 /* 1994 /*
1996 * At this point, there's no way the LSR could still be 0xff; 1995 * At this point, there's no way the LSR could still be 0xff;
1997 * if it is, then bail out, because there's likely no UART 1996 * if it is, then bail out, because there's likely no UART
1998 * here. 1997 * here.
1999 */ 1998 */
2000 if (!(up->port.flags & UPF_BUGGY_UART) && 1999 if (!(up->port.flags & UPF_BUGGY_UART) &&
2001 (serial_inp(up, UART_LSR) == 0xff)) { 2000 (serial_inp(up, UART_LSR) == 0xff)) {
2002 printk_ratelimited(KERN_INFO "ttyS%d: LSR safety check engaged!\n", 2001 printk_ratelimited(KERN_INFO "ttyS%d: LSR safety check engaged!\n",
2003 serial_index(&up->port)); 2002 serial_index(&up->port));
2004 return -ENODEV; 2003 return -ENODEV;
2005 } 2004 }
2006 2005
2007 /* 2006 /*
2008 * For a XR16C850, we need to set the trigger levels 2007 * For a XR16C850, we need to set the trigger levels
2009 */ 2008 */
2010 if (up->port.type == PORT_16850) { 2009 if (up->port.type == PORT_16850) {
2011 unsigned char fctr; 2010 unsigned char fctr;
2012 2011
2013 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_B); 2012 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_B);
2014 2013
2015 fctr = serial_inp(up, UART_FCTR) & ~(UART_FCTR_RX|UART_FCTR_TX); 2014 fctr = serial_inp(up, UART_FCTR) & ~(UART_FCTR_RX|UART_FCTR_TX);
2016 serial_outp(up, UART_FCTR, fctr | UART_FCTR_TRGD | UART_FCTR_RX); 2015 serial_outp(up, UART_FCTR, fctr | UART_FCTR_TRGD | UART_FCTR_RX);
2017 serial_outp(up, UART_TRG, UART_TRG_96); 2016 serial_outp(up, UART_TRG, UART_TRG_96);
2018 serial_outp(up, UART_FCTR, fctr | UART_FCTR_TRGD | UART_FCTR_TX); 2017 serial_outp(up, UART_FCTR, fctr | UART_FCTR_TRGD | UART_FCTR_TX);
2019 serial_outp(up, UART_TRG, UART_TRG_96); 2018 serial_outp(up, UART_TRG, UART_TRG_96);
2020 2019
2021 serial_outp(up, UART_LCR, 0); 2020 serial_outp(up, UART_LCR, 0);
2022 } 2021 }
2023 2022
2024 if (up->port.irq) { 2023 if (up->port.irq) {
2025 unsigned char iir1; 2024 unsigned char iir1;
2026 /* 2025 /*
2027 * Test for UARTs that do not reassert THRE when the 2026 * Test for UARTs that do not reassert THRE when the
2028 * transmitter is idle and the interrupt has already 2027 * transmitter is idle and the interrupt has already
2029 * been cleared. Real 16550s should always reassert 2028 * been cleared. Real 16550s should always reassert
2030 * this interrupt whenever the transmitter is idle and 2029 * this interrupt whenever the transmitter is idle and
2031 * the interrupt is enabled. Delays are necessary to 2030 * the interrupt is enabled. Delays are necessary to
2032 * allow register changes to become visible. 2031 * allow register changes to become visible.
2033 */ 2032 */
2034 spin_lock_irqsave(&up->port.lock, flags); 2033 spin_lock_irqsave(&up->port.lock, flags);
2035 if (up->port.irqflags & IRQF_SHARED) 2034 if (up->port.irqflags & IRQF_SHARED)
2036 disable_irq_nosync(up->port.irq); 2035 disable_irq_nosync(up->port.irq);
2037 2036
2038 wait_for_xmitr(up, UART_LSR_THRE); 2037 wait_for_xmitr(up, UART_LSR_THRE);
2039 serial_out_sync(up, UART_IER, UART_IER_THRI); 2038 serial_out_sync(up, UART_IER, UART_IER_THRI);
2040 udelay(1); /* allow THRE to set */ 2039 udelay(1); /* allow THRE to set */
2041 iir1 = serial_in(up, UART_IIR); 2040 iir1 = serial_in(up, UART_IIR);
2042 serial_out(up, UART_IER, 0); 2041 serial_out(up, UART_IER, 0);
2043 serial_out_sync(up, UART_IER, UART_IER_THRI); 2042 serial_out_sync(up, UART_IER, UART_IER_THRI);
2044 udelay(1); /* allow a working UART time to re-assert THRE */ 2043 udelay(1); /* allow a working UART time to re-assert THRE */
2045 iir = serial_in(up, UART_IIR); 2044 iir = serial_in(up, UART_IIR);
2046 serial_out(up, UART_IER, 0); 2045 serial_out(up, UART_IER, 0);
2047 2046
2048 if (up->port.irqflags & IRQF_SHARED) 2047 if (up->port.irqflags & IRQF_SHARED)
2049 enable_irq(up->port.irq); 2048 enable_irq(up->port.irq);
2050 spin_unlock_irqrestore(&up->port.lock, flags); 2049 spin_unlock_irqrestore(&up->port.lock, flags);
2051 2050
2052 /* 2051 /*
2053 * If the interrupt is not reasserted, setup a timer to 2052 * If the interrupt is not reasserted, setup a timer to
2054 * kick the UART on a regular basis. 2053 * kick the UART on a regular basis.
2055 */ 2054 */
2056 if (!(iir1 & UART_IIR_NO_INT) && (iir & UART_IIR_NO_INT)) { 2055 if (!(iir1 & UART_IIR_NO_INT) && (iir & UART_IIR_NO_INT)) {
2057 up->bugs |= UART_BUG_THRE; 2056 up->bugs |= UART_BUG_THRE;
2058 pr_debug("ttyS%d - using backup timer\n", 2057 pr_debug("ttyS%d - using backup timer\n",
2059 serial_index(port)); 2058 serial_index(port));
2060 } 2059 }
2061 } 2060 }
2062 2061
2063 /* 2062 /*
2064 * The above check will only give an accurate result the first time 2063 * The above check will only give an accurate result the first time
2065 * the port is opened so this value needs to be preserved. 2064 * the port is opened so this value needs to be preserved.
2066 */ 2065 */
2067 if (up->bugs & UART_BUG_THRE) { 2066 if (up->bugs & UART_BUG_THRE) {
2068 up->timer.function = serial8250_backup_timeout; 2067 up->timer.function = serial8250_backup_timeout;
2069 up->timer.data = (unsigned long)up; 2068 up->timer.data = (unsigned long)up;
2070 mod_timer(&up->timer, jiffies + 2069 mod_timer(&up->timer, jiffies +
2071 uart_poll_timeout(port) + HZ / 5); 2070 uart_poll_timeout(port) + HZ / 5);
2072 } 2071 }
2073 2072
2074 /* 2073 /*
2075 * If the "interrupt" for this port doesn't correspond with any 2074 * If the "interrupt" for this port doesn't correspond with any
2076 * hardware interrupt, we use a timer-based system. The original 2075 * hardware interrupt, we use a timer-based system. The original
2077 * driver used to do this with IRQ0. 2076 * driver used to do this with IRQ0.
2078 */ 2077 */
2079 if (!up->port.irq) { 2078 if (!up->port.irq) {
2080 up->timer.data = (unsigned long)up; 2079 up->timer.data = (unsigned long)up;
2081 mod_timer(&up->timer, jiffies + uart_poll_timeout(port)); 2080 mod_timer(&up->timer, jiffies + uart_poll_timeout(port));
2082 } else { 2081 } else {
2083 retval = serial_link_irq_chain(up); 2082 retval = serial_link_irq_chain(up);
2084 if (retval) 2083 if (retval)
2085 return retval; 2084 return retval;
2086 } 2085 }
2087 2086
2088 /* 2087 /*
2089 * Now, initialize the UART 2088 * Now, initialize the UART
2090 */ 2089 */
2091 serial_outp(up, UART_LCR, UART_LCR_WLEN8); 2090 serial_outp(up, UART_LCR, UART_LCR_WLEN8);
2092 2091
2093 spin_lock_irqsave(&up->port.lock, flags); 2092 spin_lock_irqsave(&up->port.lock, flags);
2094 if (up->port.flags & UPF_FOURPORT) { 2093 if (up->port.flags & UPF_FOURPORT) {
2095 if (!up->port.irq) 2094 if (!up->port.irq)
2096 up->port.mctrl |= TIOCM_OUT1; 2095 up->port.mctrl |= TIOCM_OUT1;
2097 } else 2096 } else
2098 /* 2097 /*
2099 * Most PC uarts need OUT2 raised to enable interrupts. 2098 * Most PC uarts need OUT2 raised to enable interrupts.
2100 */ 2099 */
2101 if (up->port.irq) 2100 if (up->port.irq)
2102 up->port.mctrl |= TIOCM_OUT2; 2101 up->port.mctrl |= TIOCM_OUT2;
2103 2102
2104 serial8250_set_mctrl(&up->port, up->port.mctrl); 2103 serial8250_set_mctrl(&up->port, up->port.mctrl);
2105 2104
2106 /* Serial over Lan (SoL) hack: 2105 /* Serial over Lan (SoL) hack:
2107 Intel 8257x Gigabit ethernet chips have a 2106 Intel 8257x Gigabit ethernet chips have a
2108 16550 emulation, to be used for Serial Over Lan. 2107 16550 emulation, to be used for Serial Over Lan.
2109 Those chips take a longer time than a normal 2108 Those chips take a longer time than a normal
2110 serial device to signalize that a transmission 2109 serial device to signalize that a transmission
2111 data was queued. Due to that, the above test generally 2110 data was queued. Due to that, the above test generally
2112 fails. One solution would be to delay the reading of 2111 fails. One solution would be to delay the reading of
2113 iir. However, this is not reliable, since the timeout 2112 iir. However, this is not reliable, since the timeout
2114 is variable. So, let's just don't test if we receive 2113 is variable. So, let's just don't test if we receive
2115 TX irq. This way, we'll never enable UART_BUG_TXEN. 2114 TX irq. This way, we'll never enable UART_BUG_TXEN.
2116 */ 2115 */
2117 if (skip_txen_test || up->port.flags & UPF_NO_TXEN_TEST) 2116 if (skip_txen_test || up->port.flags & UPF_NO_TXEN_TEST)
2118 goto dont_test_tx_en; 2117 goto dont_test_tx_en;
2119 2118
2120 /* 2119 /*
2121 * Do a quick test to see if we receive an 2120 * Do a quick test to see if we receive an
2122 * interrupt when we enable the TX irq. 2121 * interrupt when we enable the TX irq.
2123 */ 2122 */
2124 serial_outp(up, UART_IER, UART_IER_THRI); 2123 serial_outp(up, UART_IER, UART_IER_THRI);
2125 lsr = serial_in(up, UART_LSR); 2124 lsr = serial_in(up, UART_LSR);
2126 iir = serial_in(up, UART_IIR); 2125 iir = serial_in(up, UART_IIR);
2127 serial_outp(up, UART_IER, 0); 2126 serial_outp(up, UART_IER, 0);
2128 2127
2129 if (lsr & UART_LSR_TEMT && iir & UART_IIR_NO_INT) { 2128 if (lsr & UART_LSR_TEMT && iir & UART_IIR_NO_INT) {
2130 if (!(up->bugs & UART_BUG_TXEN)) { 2129 if (!(up->bugs & UART_BUG_TXEN)) {
2131 up->bugs |= UART_BUG_TXEN; 2130 up->bugs |= UART_BUG_TXEN;
2132 pr_debug("ttyS%d - enabling bad tx status workarounds\n", 2131 pr_debug("ttyS%d - enabling bad tx status workarounds\n",
2133 serial_index(port)); 2132 serial_index(port));
2134 } 2133 }
2135 } else { 2134 } else {
2136 up->bugs &= ~UART_BUG_TXEN; 2135 up->bugs &= ~UART_BUG_TXEN;
2137 } 2136 }
2138 2137
2139 dont_test_tx_en: 2138 dont_test_tx_en:
2140 spin_unlock_irqrestore(&up->port.lock, flags); 2139 spin_unlock_irqrestore(&up->port.lock, flags);
2141 2140
2142 /* 2141 /*
2143 * Clear the interrupt registers again for luck, and clear the 2142 * Clear the interrupt registers again for luck, and clear the
2144 * saved flags to avoid getting false values from polling 2143 * saved flags to avoid getting false values from polling
2145 * routines or the previous session. 2144 * routines or the previous session.
2146 */ 2145 */
2147 serial_inp(up, UART_LSR); 2146 serial_inp(up, UART_LSR);
2148 serial_inp(up, UART_RX); 2147 serial_inp(up, UART_RX);
2149 serial_inp(up, UART_IIR); 2148 serial_inp(up, UART_IIR);
2150 serial_inp(up, UART_MSR); 2149 serial_inp(up, UART_MSR);
2151 up->lsr_saved_flags = 0; 2150 up->lsr_saved_flags = 0;
2152 up->msr_saved_flags = 0; 2151 up->msr_saved_flags = 0;
2153 2152
2154 /* 2153 /*
2155 * Finally, enable interrupts. Note: Modem status interrupts 2154 * Finally, enable interrupts. Note: Modem status interrupts
2156 * are set via set_termios(), which will be occurring imminently 2155 * are set via set_termios(), which will be occurring imminently
2157 * anyway, so we don't enable them here. 2156 * anyway, so we don't enable them here.
2158 */ 2157 */
2159 up->ier = UART_IER_RLSI | UART_IER_RDI; 2158 up->ier = UART_IER_RLSI | UART_IER_RDI;
2160 serial_outp(up, UART_IER, up->ier); 2159 serial_outp(up, UART_IER, up->ier);
2161 2160
2162 if (up->port.flags & UPF_FOURPORT) { 2161 if (up->port.flags & UPF_FOURPORT) {
2163 unsigned int icp; 2162 unsigned int icp;
2164 /* 2163 /*
2165 * Enable interrupts on the AST Fourport board 2164 * Enable interrupts on the AST Fourport board
2166 */ 2165 */
2167 icp = (up->port.iobase & 0xfe0) | 0x01f; 2166 icp = (up->port.iobase & 0xfe0) | 0x01f;
2168 outb_p(0x80, icp); 2167 outb_p(0x80, icp);
2169 (void) inb_p(icp); 2168 (void) inb_p(icp);
2170 } 2169 }
2171 2170
2172 return 0; 2171 return 0;
2173 } 2172 }
2174 2173
2175 static void serial8250_shutdown(struct uart_port *port) 2174 static void serial8250_shutdown(struct uart_port *port)
2176 { 2175 {
2177 struct uart_8250_port *up = 2176 struct uart_8250_port *up =
2178 container_of(port, struct uart_8250_port, port); 2177 container_of(port, struct uart_8250_port, port);
2179 unsigned long flags; 2178 unsigned long flags;
2180 2179
2181 /* 2180 /*
2182 * Disable interrupts from this port 2181 * Disable interrupts from this port
2183 */ 2182 */
2184 up->ier = 0; 2183 up->ier = 0;
2185 serial_outp(up, UART_IER, 0); 2184 serial_outp(up, UART_IER, 0);
2186 2185
2187 spin_lock_irqsave(&up->port.lock, flags); 2186 spin_lock_irqsave(&up->port.lock, flags);
2188 if (up->port.flags & UPF_FOURPORT) { 2187 if (up->port.flags & UPF_FOURPORT) {
2189 /* reset interrupts on the AST Fourport board */ 2188 /* reset interrupts on the AST Fourport board */
2190 inb((up->port.iobase & 0xfe0) | 0x1f); 2189 inb((up->port.iobase & 0xfe0) | 0x1f);
2191 up->port.mctrl |= TIOCM_OUT1; 2190 up->port.mctrl |= TIOCM_OUT1;
2192 } else 2191 } else
2193 up->port.mctrl &= ~TIOCM_OUT2; 2192 up->port.mctrl &= ~TIOCM_OUT2;
2194 2193
2195 serial8250_set_mctrl(&up->port, up->port.mctrl); 2194 serial8250_set_mctrl(&up->port, up->port.mctrl);
2196 spin_unlock_irqrestore(&up->port.lock, flags); 2195 spin_unlock_irqrestore(&up->port.lock, flags);
2197 2196
2198 /* 2197 /*
2199 * Disable break condition and FIFOs 2198 * Disable break condition and FIFOs
2200 */ 2199 */
2201 serial_out(up, UART_LCR, serial_inp(up, UART_LCR) & ~UART_LCR_SBC); 2200 serial_out(up, UART_LCR, serial_inp(up, UART_LCR) & ~UART_LCR_SBC);
2202 serial8250_clear_fifos(up); 2201 serial8250_clear_fifos(up);
2203 2202
2204 #ifdef CONFIG_SERIAL_8250_RSA 2203 #ifdef CONFIG_SERIAL_8250_RSA
2205 /* 2204 /*
2206 * Reset the RSA board back to 115kbps compat mode. 2205 * Reset the RSA board back to 115kbps compat mode.
2207 */ 2206 */
2208 disable_rsa(up); 2207 disable_rsa(up);
2209 #endif 2208 #endif
2210 2209
2211 /* 2210 /*
2212 * Read data port to reset things, and then unlink from 2211 * Read data port to reset things, and then unlink from
2213 * the IRQ chain. 2212 * the IRQ chain.
2214 */ 2213 */
2215 (void) serial_in(up, UART_RX); 2214 (void) serial_in(up, UART_RX);
2216 2215
2217 del_timer_sync(&up->timer); 2216 del_timer_sync(&up->timer);
2218 up->timer.function = serial8250_timeout; 2217 up->timer.function = serial8250_timeout;
2219 if (up->port.irq) 2218 if (up->port.irq)
2220 serial_unlink_irq_chain(up); 2219 serial_unlink_irq_chain(up);
2221 } 2220 }
2222 2221
2223 static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud) 2222 static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud)
2224 { 2223 {
2225 unsigned int quot; 2224 unsigned int quot;
2226 2225
2227 /* 2226 /*
2228 * Handle magic divisors for baud rates above baud_base on 2227 * Handle magic divisors for baud rates above baud_base on
2229 * SMSC SuperIO chips. 2228 * SMSC SuperIO chips.
2230 */ 2229 */
2231 if ((port->flags & UPF_MAGIC_MULTIPLIER) && 2230 if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
2232 baud == (port->uartclk/4)) 2231 baud == (port->uartclk/4))
2233 quot = 0x8001; 2232 quot = 0x8001;
2234 else if ((port->flags & UPF_MAGIC_MULTIPLIER) && 2233 else if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
2235 baud == (port->uartclk/8)) 2234 baud == (port->uartclk/8))
2236 quot = 0x8002; 2235 quot = 0x8002;
2237 else 2236 else
2238 quot = uart_get_divisor(port, baud); 2237 quot = uart_get_divisor(port, baud);
2239 2238
2240 return quot; 2239 return quot;
2241 } 2240 }
2242 2241
2243 void 2242 void
2244 serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, 2243 serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios,
2245 struct ktermios *old) 2244 struct ktermios *old)
2246 { 2245 {
2247 struct uart_8250_port *up = 2246 struct uart_8250_port *up =
2248 container_of(port, struct uart_8250_port, port); 2247 container_of(port, struct uart_8250_port, port);
2249 unsigned char cval, fcr = 0; 2248 unsigned char cval, fcr = 0;
2250 unsigned long flags; 2249 unsigned long flags;
2251 unsigned int baud, quot; 2250 unsigned int baud, quot;
2252 2251
2253 switch (termios->c_cflag & CSIZE) { 2252 switch (termios->c_cflag & CSIZE) {
2254 case CS5: 2253 case CS5:
2255 cval = UART_LCR_WLEN5; 2254 cval = UART_LCR_WLEN5;
2256 break; 2255 break;
2257 case CS6: 2256 case CS6:
2258 cval = UART_LCR_WLEN6; 2257 cval = UART_LCR_WLEN6;
2259 break; 2258 break;
2260 case CS7: 2259 case CS7:
2261 cval = UART_LCR_WLEN7; 2260 cval = UART_LCR_WLEN7;
2262 break; 2261 break;
2263 default: 2262 default:
2264 case CS8: 2263 case CS8:
2265 cval = UART_LCR_WLEN8; 2264 cval = UART_LCR_WLEN8;
2266 break; 2265 break;
2267 } 2266 }
2268 2267
2269 if (termios->c_cflag & CSTOPB) 2268 if (termios->c_cflag & CSTOPB)
2270 cval |= UART_LCR_STOP; 2269 cval |= UART_LCR_STOP;
2271 if (termios->c_cflag & PARENB) 2270 if (termios->c_cflag & PARENB)
2272 cval |= UART_LCR_PARITY; 2271 cval |= UART_LCR_PARITY;
2273 if (!(termios->c_cflag & PARODD)) 2272 if (!(termios->c_cflag & PARODD))
2274 cval |= UART_LCR_EPAR; 2273 cval |= UART_LCR_EPAR;
2275 #ifdef CMSPAR 2274 #ifdef CMSPAR
2276 if (termios->c_cflag & CMSPAR) 2275 if (termios->c_cflag & CMSPAR)
2277 cval |= UART_LCR_SPAR; 2276 cval |= UART_LCR_SPAR;
2278 #endif 2277 #endif
2279 2278
2280 /* 2279 /*
2281 * Ask the core to calculate the divisor for us. 2280 * Ask the core to calculate the divisor for us.
2282 */ 2281 */
2283 baud = uart_get_baud_rate(port, termios, old, 2282 baud = uart_get_baud_rate(port, termios, old,
2284 port->uartclk / 16 / 0xffff, 2283 port->uartclk / 16 / 0xffff,
2285 port->uartclk / 16); 2284 port->uartclk / 16);
2286 quot = serial8250_get_divisor(port, baud); 2285 quot = serial8250_get_divisor(port, baud);
2287 2286
2288 /* 2287 /*
2289 * Oxford Semi 952 rev B workaround 2288 * Oxford Semi 952 rev B workaround
2290 */ 2289 */
2291 if (up->bugs & UART_BUG_QUOT && (quot & 0xff) == 0) 2290 if (up->bugs & UART_BUG_QUOT && (quot & 0xff) == 0)
2292 quot++; 2291 quot++;
2293 2292
2294 if (up->capabilities & UART_CAP_FIFO && up->port.fifosize > 1) { 2293 if (up->capabilities & UART_CAP_FIFO && up->port.fifosize > 1) {
2295 if (baud < 2400) 2294 if (baud < 2400)
2296 fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1; 2295 fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1;
2297 else 2296 else
2298 fcr = uart_config[up->port.type].fcr; 2297 fcr = uart_config[up->port.type].fcr;
2299 } 2298 }
2300 2299
2301 /* 2300 /*
2302 * MCR-based auto flow control. When AFE is enabled, RTS will be 2301 * MCR-based auto flow control. When AFE is enabled, RTS will be
2303 * deasserted when the receive FIFO contains more characters than 2302 * deasserted when the receive FIFO contains more characters than
2304 * the trigger, or the MCR RTS bit is cleared. In the case where 2303 * the trigger, or the MCR RTS bit is cleared. In the case where
2305 * the remote UART is not using CTS auto flow control, we must 2304 * the remote UART is not using CTS auto flow control, we must
2306 * have sufficient FIFO entries for the latency of the remote 2305 * have sufficient FIFO entries for the latency of the remote
2307 * UART to respond. IOW, at least 32 bytes of FIFO. 2306 * UART to respond. IOW, at least 32 bytes of FIFO.
2308 */ 2307 */
2309 if (up->capabilities & UART_CAP_AFE && up->port.fifosize >= 32) { 2308 if (up->capabilities & UART_CAP_AFE && up->port.fifosize >= 32) {
2310 up->mcr &= ~UART_MCR_AFE; 2309 up->mcr &= ~UART_MCR_AFE;
2311 if (termios->c_cflag & CRTSCTS) 2310 if (termios->c_cflag & CRTSCTS)
2312 up->mcr |= UART_MCR_AFE; 2311 up->mcr |= UART_MCR_AFE;
2313 } 2312 }
2314 2313
2315 /* 2314 /*
2316 * Ok, we're now changing the port state. Do it with 2315 * Ok, we're now changing the port state. Do it with
2317 * interrupts disabled. 2316 * interrupts disabled.
2318 */ 2317 */
2319 spin_lock_irqsave(&up->port.lock, flags); 2318 spin_lock_irqsave(&up->port.lock, flags);
2320 2319
2321 /* 2320 /*
2322 * Update the per-port timeout. 2321 * Update the per-port timeout.
2323 */ 2322 */
2324 uart_update_timeout(port, termios->c_cflag, baud); 2323 uart_update_timeout(port, termios->c_cflag, baud);
2325 2324
2326 up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; 2325 up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
2327 if (termios->c_iflag & INPCK) 2326 if (termios->c_iflag & INPCK)
2328 up->port.read_status_mask |= UART_LSR_FE | UART_LSR_PE; 2327 up->port.read_status_mask |= UART_LSR_FE | UART_LSR_PE;
2329 if (termios->c_iflag & (BRKINT | PARMRK)) 2328 if (termios->c_iflag & (BRKINT | PARMRK))
2330 up->port.read_status_mask |= UART_LSR_BI; 2329 up->port.read_status_mask |= UART_LSR_BI;
2331 2330
2332 /* 2331 /*
2333 * Characteres to ignore 2332 * Characteres to ignore
2334 */ 2333 */
2335 up->port.ignore_status_mask = 0; 2334 up->port.ignore_status_mask = 0;
2336 if (termios->c_iflag & IGNPAR) 2335 if (termios->c_iflag & IGNPAR)
2337 up->port.ignore_status_mask |= UART_LSR_PE | UART_LSR_FE; 2336 up->port.ignore_status_mask |= UART_LSR_PE | UART_LSR_FE;
2338 if (termios->c_iflag & IGNBRK) { 2337 if (termios->c_iflag & IGNBRK) {
2339 up->port.ignore_status_mask |= UART_LSR_BI; 2338 up->port.ignore_status_mask |= UART_LSR_BI;
2340 /* 2339 /*
2341 * If we're ignoring parity and break indicators, 2340 * If we're ignoring parity and break indicators,
2342 * ignore overruns too (for real raw support). 2341 * ignore overruns too (for real raw support).
2343 */ 2342 */
2344 if (termios->c_iflag & IGNPAR) 2343 if (termios->c_iflag & IGNPAR)
2345 up->port.ignore_status_mask |= UART_LSR_OE; 2344 up->port.ignore_status_mask |= UART_LSR_OE;
2346 } 2345 }
2347 2346
2348 /* 2347 /*
2349 * ignore all characters if CREAD is not set 2348 * ignore all characters if CREAD is not set
2350 */ 2349 */
2351 if ((termios->c_cflag & CREAD) == 0) 2350 if ((termios->c_cflag & CREAD) == 0)
2352 up->port.ignore_status_mask |= UART_LSR_DR; 2351 up->port.ignore_status_mask |= UART_LSR_DR;
2353 2352
2354 /* 2353 /*
2355 * CTS flow control flag and modem status interrupts 2354 * CTS flow control flag and modem status interrupts
2356 */ 2355 */
2357 up->ier &= ~UART_IER_MSI; 2356 up->ier &= ~UART_IER_MSI;
2358 if (!(up->bugs & UART_BUG_NOMSR) && 2357 if (!(up->bugs & UART_BUG_NOMSR) &&
2359 UART_ENABLE_MS(&up->port, termios->c_cflag)) 2358 UART_ENABLE_MS(&up->port, termios->c_cflag))
2360 up->ier |= UART_IER_MSI; 2359 up->ier |= UART_IER_MSI;
2361 if (up->capabilities & UART_CAP_UUE) 2360 if (up->capabilities & UART_CAP_UUE)
2362 up->ier |= UART_IER_UUE; 2361 up->ier |= UART_IER_UUE;
2363 if (up->capabilities & UART_CAP_RTOIE) 2362 if (up->capabilities & UART_CAP_RTOIE)
2364 up->ier |= UART_IER_RTOIE; 2363 up->ier |= UART_IER_RTOIE;
2365 2364
2366 serial_out(up, UART_IER, up->ier); 2365 serial_out(up, UART_IER, up->ier);
2367 2366
2368 if (up->capabilities & UART_CAP_EFR) { 2367 if (up->capabilities & UART_CAP_EFR) {
2369 unsigned char efr = 0; 2368 unsigned char efr = 0;
2370 /* 2369 /*
2371 * TI16C752/Startech hardware flow control. FIXME: 2370 * TI16C752/Startech hardware flow control. FIXME:
2372 * - TI16C752 requires control thresholds to be set. 2371 * - TI16C752 requires control thresholds to be set.
2373 * - UART_MCR_RTS is ineffective if auto-RTS mode is enabled. 2372 * - UART_MCR_RTS is ineffective if auto-RTS mode is enabled.
2374 */ 2373 */
2375 if (termios->c_cflag & CRTSCTS) 2374 if (termios->c_cflag & CRTSCTS)
2376 efr |= UART_EFR_CTS; 2375 efr |= UART_EFR_CTS;
2377 2376
2378 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_B); 2377 serial_outp(up, UART_LCR, UART_LCR_CONF_MODE_B);
2379 if (up->port.flags & UPF_EXAR_EFR) 2378 if (up->port.flags & UPF_EXAR_EFR)
2380 serial_outp(up, UART_XR_EFR, efr); 2379 serial_outp(up, UART_XR_EFR, efr);
2381 else 2380 else
2382 serial_outp(up, UART_EFR, efr); 2381 serial_outp(up, UART_EFR, efr);
2383 } 2382 }
2384 2383
2385 #ifdef CONFIG_ARCH_OMAP 2384 #ifdef CONFIG_ARCH_OMAP
2386 /* Workaround to enable 115200 baud on OMAP1510 internal ports */ 2385 /* Workaround to enable 115200 baud on OMAP1510 internal ports */
2387 if (cpu_is_omap1510() && is_omap_port(up)) { 2386 if (cpu_is_omap1510() && is_omap_port(up)) {
2388 if (baud == 115200) { 2387 if (baud == 115200) {
2389 quot = 1; 2388 quot = 1;
2390 serial_out(up, UART_OMAP_OSC_12M_SEL, 1); 2389 serial_out(up, UART_OMAP_OSC_12M_SEL, 1);
2391 } else 2390 } else
2392 serial_out(up, UART_OMAP_OSC_12M_SEL, 0); 2391 serial_out(up, UART_OMAP_OSC_12M_SEL, 0);
2393 } 2392 }
2394 #endif 2393 #endif
2395 2394
2396 if (up->capabilities & UART_NATSEMI) { 2395 if (up->capabilities & UART_NATSEMI) {
2397 /* Switch to bank 2 not bank 1, to avoid resetting EXCR2 */ 2396 /* Switch to bank 2 not bank 1, to avoid resetting EXCR2 */
2398 serial_outp(up, UART_LCR, 0xe0); 2397 serial_outp(up, UART_LCR, 0xe0);
2399 } else { 2398 } else {
2400 serial_outp(up, UART_LCR, cval | UART_LCR_DLAB);/* set DLAB */ 2399 serial_outp(up, UART_LCR, cval | UART_LCR_DLAB);/* set DLAB */
2401 } 2400 }
2402 2401
2403 serial_dl_write(up, quot); 2402 serial_dl_write(up, quot);
2404 2403
2405 /* 2404 /*
2406 * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR 2405 * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
2407 * is written without DLAB set, this mode will be disabled. 2406 * is written without DLAB set, this mode will be disabled.
2408 */ 2407 */
2409 if (up->port.type == PORT_16750) 2408 if (up->port.type == PORT_16750)
2410 serial_outp(up, UART_FCR, fcr); 2409 serial_outp(up, UART_FCR, fcr);
2411 2410
2412 serial_outp(up, UART_LCR, cval); /* reset DLAB */ 2411 serial_outp(up, UART_LCR, cval); /* reset DLAB */
2413 up->lcr = cval; /* Save LCR */ 2412 up->lcr = cval; /* Save LCR */
2414 if (up->port.type != PORT_16750) { 2413 if (up->port.type != PORT_16750) {
2415 if (fcr & UART_FCR_ENABLE_FIFO) { 2414 if (fcr & UART_FCR_ENABLE_FIFO) {
2416 /* emulated UARTs (Lucent Venus 167x) need two steps */ 2415 /* emulated UARTs (Lucent Venus 167x) need two steps */
2417 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO); 2416 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
2418 } 2417 }
2419 serial_outp(up, UART_FCR, fcr); /* set fcr */ 2418 serial_outp(up, UART_FCR, fcr); /* set fcr */
2420 } 2419 }
2421 serial8250_set_mctrl(&up->port, up->port.mctrl); 2420 serial8250_set_mctrl(&up->port, up->port.mctrl);
2422 spin_unlock_irqrestore(&up->port.lock, flags); 2421 spin_unlock_irqrestore(&up->port.lock, flags);
2423 /* Don't rewrite B0 */ 2422 /* Don't rewrite B0 */
2424 if (tty_termios_baud_rate(termios)) 2423 if (tty_termios_baud_rate(termios))
2425 tty_termios_encode_baud_rate(termios, baud, baud); 2424 tty_termios_encode_baud_rate(termios, baud, baud);
2426 } 2425 }
2427 EXPORT_SYMBOL(serial8250_do_set_termios); 2426 EXPORT_SYMBOL(serial8250_do_set_termios);
2428 2427
2429 static void 2428 static void
2430 serial8250_set_termios(struct uart_port *port, struct ktermios *termios, 2429 serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
2431 struct ktermios *old) 2430 struct ktermios *old)
2432 { 2431 {
2433 if (port->set_termios) 2432 if (port->set_termios)
2434 port->set_termios(port, termios, old); 2433 port->set_termios(port, termios, old);
2435 else 2434 else
2436 serial8250_do_set_termios(port, termios, old); 2435 serial8250_do_set_termios(port, termios, old);
2437 } 2436 }
2438 2437
2439 static void 2438 static void
2440 serial8250_set_ldisc(struct uart_port *port, int new) 2439 serial8250_set_ldisc(struct uart_port *port, int new)
2441 { 2440 {
2442 if (new == N_PPS) { 2441 if (new == N_PPS) {
2443 port->flags |= UPF_HARDPPS_CD; 2442 port->flags |= UPF_HARDPPS_CD;
2444 serial8250_enable_ms(port); 2443 serial8250_enable_ms(port);
2445 } else 2444 } else
2446 port->flags &= ~UPF_HARDPPS_CD; 2445 port->flags &= ~UPF_HARDPPS_CD;
2447 } 2446 }
2448 2447
2449 2448
2450 void serial8250_do_pm(struct uart_port *port, unsigned int state, 2449 void serial8250_do_pm(struct uart_port *port, unsigned int state,
2451 unsigned int oldstate) 2450 unsigned int oldstate)
2452 { 2451 {
2453 struct uart_8250_port *p = 2452 struct uart_8250_port *p =
2454 container_of(port, struct uart_8250_port, port); 2453 container_of(port, struct uart_8250_port, port);
2455 2454
2456 serial8250_set_sleep(p, state != 0); 2455 serial8250_set_sleep(p, state != 0);
2457 } 2456 }
2458 EXPORT_SYMBOL(serial8250_do_pm); 2457 EXPORT_SYMBOL(serial8250_do_pm);
2459 2458
2460 static void 2459 static void
2461 serial8250_pm(struct uart_port *port, unsigned int state, 2460 serial8250_pm(struct uart_port *port, unsigned int state,
2462 unsigned int oldstate) 2461 unsigned int oldstate)
2463 { 2462 {
2464 if (port->pm) 2463 if (port->pm)
2465 port->pm(port, state, oldstate); 2464 port->pm(port, state, oldstate);
2466 else 2465 else
2467 serial8250_do_pm(port, state, oldstate); 2466 serial8250_do_pm(port, state, oldstate);
2468 } 2467 }
2469 2468
2470 static unsigned int serial8250_port_size(struct uart_8250_port *pt) 2469 static unsigned int serial8250_port_size(struct uart_8250_port *pt)
2471 { 2470 {
2472 if (pt->port.iotype == UPIO_AU) 2471 if (pt->port.iotype == UPIO_AU)
2473 return 0x1000; 2472 return 0x1000;
2474 #ifdef CONFIG_ARCH_OMAP 2473 #ifdef CONFIG_ARCH_OMAP
2475 if (is_omap_port(pt)) 2474 if (is_omap_port(pt))
2476 return 0x16 << pt->port.regshift; 2475 return 0x16 << pt->port.regshift;
2477 #endif 2476 #endif
2478 return 8 << pt->port.regshift; 2477 return 8 << pt->port.regshift;
2479 } 2478 }
2480 2479
2481 /* 2480 /*
2482 * Resource handling. 2481 * Resource handling.
2483 */ 2482 */
2484 static int serial8250_request_std_resource(struct uart_8250_port *up) 2483 static int serial8250_request_std_resource(struct uart_8250_port *up)
2485 { 2484 {
2486 unsigned int size = serial8250_port_size(up); 2485 unsigned int size = serial8250_port_size(up);
2487 int ret = 0; 2486 int ret = 0;
2488 2487
2489 switch (up->port.iotype) { 2488 switch (up->port.iotype) {
2490 case UPIO_AU: 2489 case UPIO_AU:
2491 case UPIO_TSI: 2490 case UPIO_TSI:
2492 case UPIO_MEM32: 2491 case UPIO_MEM32:
2493 case UPIO_MEM: 2492 case UPIO_MEM:
2494 if (!up->port.mapbase) 2493 if (!up->port.mapbase)
2495 break; 2494 break;
2496 2495
2497 if (!request_mem_region(up->port.mapbase, size, "serial")) { 2496 if (!request_mem_region(up->port.mapbase, size, "serial")) {
2498 ret = -EBUSY; 2497 ret = -EBUSY;
2499 break; 2498 break;
2500 } 2499 }
2501 2500
2502 if (up->port.flags & UPF_IOREMAP) { 2501 if (up->port.flags & UPF_IOREMAP) {
2503 up->port.membase = ioremap_nocache(up->port.mapbase, 2502 up->port.membase = ioremap_nocache(up->port.mapbase,
2504 size); 2503 size);
2505 if (!up->port.membase) { 2504 if (!up->port.membase) {
2506 release_mem_region(up->port.mapbase, size); 2505 release_mem_region(up->port.mapbase, size);
2507 ret = -ENOMEM; 2506 ret = -ENOMEM;
2508 } 2507 }
2509 } 2508 }
2510 break; 2509 break;
2511 2510
2512 case UPIO_HUB6: 2511 case UPIO_HUB6:
2513 case UPIO_PORT: 2512 case UPIO_PORT:
2514 if (!request_region(up->port.iobase, size, "serial")) 2513 if (!request_region(up->port.iobase, size, "serial"))
2515 ret = -EBUSY; 2514 ret = -EBUSY;
2516 break; 2515 break;
2517 } 2516 }
2518 return ret; 2517 return ret;
2519 } 2518 }
2520 2519
2521 static void serial8250_release_std_resource(struct uart_8250_port *up) 2520 static void serial8250_release_std_resource(struct uart_8250_port *up)
2522 { 2521 {
2523 unsigned int size = serial8250_port_size(up); 2522 unsigned int size = serial8250_port_size(up);
2524 2523
2525 switch (up->port.iotype) { 2524 switch (up->port.iotype) {
2526 case UPIO_AU: 2525 case UPIO_AU:
2527 case UPIO_TSI: 2526 case UPIO_TSI:
2528 case UPIO_MEM32: 2527 case UPIO_MEM32:
2529 case UPIO_MEM: 2528 case UPIO_MEM:
2530 if (!up->port.mapbase) 2529 if (!up->port.mapbase)
2531 break; 2530 break;
2532 2531
2533 if (up->port.flags & UPF_IOREMAP) { 2532 if (up->port.flags & UPF_IOREMAP) {
2534 iounmap(up->port.membase); 2533 iounmap(up->port.membase);
2535 up->port.membase = NULL; 2534 up->port.membase = NULL;
2536 } 2535 }
2537 2536
2538 release_mem_region(up->port.mapbase, size); 2537 release_mem_region(up->port.mapbase, size);
2539 break; 2538 break;
2540 2539
2541 case UPIO_HUB6: 2540 case UPIO_HUB6:
2542 case UPIO_PORT: 2541 case UPIO_PORT:
2543 release_region(up->port.iobase, size); 2542 release_region(up->port.iobase, size);
2544 break; 2543 break;
2545 } 2544 }
2546 } 2545 }
2547 2546
2548 static int serial8250_request_rsa_resource(struct uart_8250_port *up) 2547 static int serial8250_request_rsa_resource(struct uart_8250_port *up)
2549 { 2548 {
2550 unsigned long start = UART_RSA_BASE << up->port.regshift; 2549 unsigned long start = UART_RSA_BASE << up->port.regshift;
2551 unsigned int size = 8 << up->port.regshift; 2550 unsigned int size = 8 << up->port.regshift;
2552 int ret = -EINVAL; 2551 int ret = -EINVAL;
2553 2552
2554 switch (up->port.iotype) { 2553 switch (up->port.iotype) {
2555 case UPIO_HUB6: 2554 case UPIO_HUB6:
2556 case UPIO_PORT: 2555 case UPIO_PORT:
2557 start += up->port.iobase; 2556 start += up->port.iobase;
2558 if (request_region(start, size, "serial-rsa")) 2557 if (request_region(start, size, "serial-rsa"))
2559 ret = 0; 2558 ret = 0;
2560 else 2559 else
2561 ret = -EBUSY; 2560 ret = -EBUSY;
2562 break; 2561 break;
2563 } 2562 }
2564 2563
2565 return ret; 2564 return ret;
2566 } 2565 }
2567 2566
2568 static void serial8250_release_rsa_resource(struct uart_8250_port *up) 2567 static void serial8250_release_rsa_resource(struct uart_8250_port *up)
2569 { 2568 {
2570 unsigned long offset = UART_RSA_BASE << up->port.regshift; 2569 unsigned long offset = UART_RSA_BASE << up->port.regshift;
2571 unsigned int size = 8 << up->port.regshift; 2570 unsigned int size = 8 << up->port.regshift;
2572 2571
2573 switch (up->port.iotype) { 2572 switch (up->port.iotype) {
2574 case UPIO_HUB6: 2573 case UPIO_HUB6:
2575 case UPIO_PORT: 2574 case UPIO_PORT:
2576 release_region(up->port.iobase + offset, size); 2575 release_region(up->port.iobase + offset, size);
2577 break; 2576 break;
2578 } 2577 }
2579 } 2578 }
2580 2579
2581 static void serial8250_release_port(struct uart_port *port) 2580 static void serial8250_release_port(struct uart_port *port)
2582 { 2581 {
2583 struct uart_8250_port *up = 2582 struct uart_8250_port *up =
2584 container_of(port, struct uart_8250_port, port); 2583 container_of(port, struct uart_8250_port, port);
2585 2584
2586 serial8250_release_std_resource(up); 2585 serial8250_release_std_resource(up);
2587 if (up->port.type == PORT_RSA) 2586 if (up->port.type == PORT_RSA)
2588 serial8250_release_rsa_resource(up); 2587 serial8250_release_rsa_resource(up);
2589 } 2588 }
2590 2589
2591 static int serial8250_request_port(struct uart_port *port) 2590 static int serial8250_request_port(struct uart_port *port)
2592 { 2591 {
2593 struct uart_8250_port *up = 2592 struct uart_8250_port *up =
2594 container_of(port, struct uart_8250_port, port); 2593 container_of(port, struct uart_8250_port, port);
2595 int ret = 0; 2594 int ret = 0;
2596 2595
2597 ret = serial8250_request_std_resource(up); 2596 ret = serial8250_request_std_resource(up);
2598 if (ret == 0 && up->port.type == PORT_RSA) { 2597 if (ret == 0 && up->port.type == PORT_RSA) {
2599 ret = serial8250_request_rsa_resource(up); 2598 ret = serial8250_request_rsa_resource(up);
2600 if (ret < 0) 2599 if (ret < 0)
2601 serial8250_release_std_resource(up); 2600 serial8250_release_std_resource(up);
2602 } 2601 }
2603 2602
2604 return ret; 2603 return ret;
2605 } 2604 }
2606 2605
2607 static void serial8250_config_port(struct uart_port *port, int flags) 2606 static void serial8250_config_port(struct uart_port *port, int flags)
2608 { 2607 {
2609 struct uart_8250_port *up = 2608 struct uart_8250_port *up =
2610 container_of(port, struct uart_8250_port, port); 2609 container_of(port, struct uart_8250_port, port);
2611 int probeflags = PROBE_ANY; 2610 int probeflags = PROBE_ANY;
2612 int ret; 2611 int ret;
2613 2612
2614 /* 2613 /*
2615 * Find the region that we can probe for. This in turn 2614 * Find the region that we can probe for. This in turn
2616 * tells us whether we can probe for the type of port. 2615 * tells us whether we can probe for the type of port.
2617 */ 2616 */
2618 ret = serial8250_request_std_resource(up); 2617 ret = serial8250_request_std_resource(up);
2619 if (ret < 0) 2618 if (ret < 0)
2620 return; 2619 return;
2621 2620
2622 ret = serial8250_request_rsa_resource(up); 2621 ret = serial8250_request_rsa_resource(up);
2623 if (ret < 0) 2622 if (ret < 0)
2624 probeflags &= ~PROBE_RSA; 2623 probeflags &= ~PROBE_RSA;
2625 2624
2626 if (up->port.iotype != up->cur_iotype) 2625 if (up->port.iotype != up->cur_iotype)
2627 set_io_from_upio(port); 2626 set_io_from_upio(port);
2628 2627
2629 if (flags & UART_CONFIG_TYPE) 2628 if (flags & UART_CONFIG_TYPE)
2630 autoconfig(up, probeflags); 2629 autoconfig(up, probeflags);
2631 2630
2632 /* if access method is AU, it is a 16550 with a quirk */ 2631 /* if access method is AU, it is a 16550 with a quirk */
2633 if (up->port.type == PORT_16550A && up->port.iotype == UPIO_AU) 2632 if (up->port.type == PORT_16550A && up->port.iotype == UPIO_AU)
2634 up->bugs |= UART_BUG_NOMSR; 2633 up->bugs |= UART_BUG_NOMSR;
2635 2634
2636 if (up->port.type != PORT_UNKNOWN && flags & UART_CONFIG_IRQ) 2635 if (up->port.type != PORT_UNKNOWN && flags & UART_CONFIG_IRQ)
2637 autoconfig_irq(up); 2636 autoconfig_irq(up);
2638 2637
2639 if (up->port.type != PORT_RSA && probeflags & PROBE_RSA) 2638 if (up->port.type != PORT_RSA && probeflags & PROBE_RSA)
2640 serial8250_release_rsa_resource(up); 2639 serial8250_release_rsa_resource(up);
2641 if (up->port.type == PORT_UNKNOWN) 2640 if (up->port.type == PORT_UNKNOWN)
2642 serial8250_release_std_resource(up); 2641 serial8250_release_std_resource(up);
2643 } 2642 }
2644 2643
2645 static int 2644 static int
2646 serial8250_verify_port(struct uart_port *port, struct serial_struct *ser) 2645 serial8250_verify_port(struct uart_port *port, struct serial_struct *ser)
2647 { 2646 {
2648 if (ser->irq >= nr_irqs || ser->irq < 0 || 2647 if (ser->irq >= nr_irqs || ser->irq < 0 ||
2649 ser->baud_base < 9600 || ser->type < PORT_UNKNOWN || 2648 ser->baud_base < 9600 || ser->type < PORT_UNKNOWN ||
2650 ser->type >= ARRAY_SIZE(uart_config) || ser->type == PORT_CIRRUS || 2649 ser->type >= ARRAY_SIZE(uart_config) || ser->type == PORT_CIRRUS ||
2651 ser->type == PORT_STARTECH) 2650 ser->type == PORT_STARTECH)
2652 return -EINVAL; 2651 return -EINVAL;
2653 return 0; 2652 return 0;
2654 } 2653 }
2655 2654
2656 static const char * 2655 static const char *
2657 serial8250_type(struct uart_port *port) 2656 serial8250_type(struct uart_port *port)
2658 { 2657 {
2659 int type = port->type; 2658 int type = port->type;
2660 2659
2661 if (type >= ARRAY_SIZE(uart_config)) 2660 if (type >= ARRAY_SIZE(uart_config))
2662 type = 0; 2661 type = 0;
2663 return uart_config[type].name; 2662 return uart_config[type].name;
2664 } 2663 }
2665 2664
2666 static struct uart_ops serial8250_pops = { 2665 static struct uart_ops serial8250_pops = {
2667 .tx_empty = serial8250_tx_empty, 2666 .tx_empty = serial8250_tx_empty,
2668 .set_mctrl = serial8250_set_mctrl, 2667 .set_mctrl = serial8250_set_mctrl,
2669 .get_mctrl = serial8250_get_mctrl, 2668 .get_mctrl = serial8250_get_mctrl,
2670 .stop_tx = serial8250_stop_tx, 2669 .stop_tx = serial8250_stop_tx,
2671 .start_tx = serial8250_start_tx, 2670 .start_tx = serial8250_start_tx,
2672 .stop_rx = serial8250_stop_rx, 2671 .stop_rx = serial8250_stop_rx,
2673 .enable_ms = serial8250_enable_ms, 2672 .enable_ms = serial8250_enable_ms,
2674 .break_ctl = serial8250_break_ctl, 2673 .break_ctl = serial8250_break_ctl,
2675 .startup = serial8250_startup, 2674 .startup = serial8250_startup,
2676 .shutdown = serial8250_shutdown, 2675 .shutdown = serial8250_shutdown,
2677 .set_termios = serial8250_set_termios, 2676 .set_termios = serial8250_set_termios,
2678 .set_ldisc = serial8250_set_ldisc, 2677 .set_ldisc = serial8250_set_ldisc,
2679 .pm = serial8250_pm, 2678 .pm = serial8250_pm,
2680 .type = serial8250_type, 2679 .type = serial8250_type,
2681 .release_port = serial8250_release_port, 2680 .release_port = serial8250_release_port,
2682 .request_port = serial8250_request_port, 2681 .request_port = serial8250_request_port,
2683 .config_port = serial8250_config_port, 2682 .config_port = serial8250_config_port,
2684 .verify_port = serial8250_verify_port, 2683 .verify_port = serial8250_verify_port,
2685 #ifdef CONFIG_CONSOLE_POLL 2684 #ifdef CONFIG_CONSOLE_POLL
2686 .poll_get_char = serial8250_get_poll_char, 2685 .poll_get_char = serial8250_get_poll_char,
2687 .poll_put_char = serial8250_put_poll_char, 2686 .poll_put_char = serial8250_put_poll_char,
2688 #endif 2687 #endif
2689 }; 2688 };
2690 2689
2691 static struct uart_8250_port serial8250_ports[UART_NR]; 2690 static struct uart_8250_port serial8250_ports[UART_NR];
2692 2691
2693 static void (*serial8250_isa_config)(int port, struct uart_port *up, 2692 static void (*serial8250_isa_config)(int port, struct uart_port *up,
2694 unsigned short *capabilities); 2693 unsigned short *capabilities);
2695 2694
2696 void serial8250_set_isa_configurator( 2695 void serial8250_set_isa_configurator(
2697 void (*v)(int port, struct uart_port *up, unsigned short *capabilities)) 2696 void (*v)(int port, struct uart_port *up, unsigned short *capabilities))
2698 { 2697 {
2699 serial8250_isa_config = v; 2698 serial8250_isa_config = v;
2700 } 2699 }
2701 EXPORT_SYMBOL(serial8250_set_isa_configurator); 2700 EXPORT_SYMBOL(serial8250_set_isa_configurator);
2702 2701
2703 static void __init serial8250_isa_init_ports(void) 2702 static void __init serial8250_isa_init_ports(void)
2704 { 2703 {
2705 struct uart_8250_port *up; 2704 struct uart_8250_port *up;
2706 static int first = 1; 2705 static int first = 1;
2707 int i, irqflag = 0; 2706 int i, irqflag = 0;
2708 2707
2709 if (!first) 2708 if (!first)
2710 return; 2709 return;
2711 first = 0; 2710 first = 0;
2712 2711
2713 for (i = 0; i < nr_uarts; i++) { 2712 for (i = 0; i < nr_uarts; i++) {
2714 struct uart_8250_port *up = &serial8250_ports[i]; 2713 struct uart_8250_port *up = &serial8250_ports[i];
2715 2714
2716 up->port.line = i; 2715 up->port.line = i;
2717 spin_lock_init(&up->port.lock); 2716 spin_lock_init(&up->port.lock);
2718 2717
2719 init_timer(&up->timer); 2718 init_timer(&up->timer);
2720 up->timer.function = serial8250_timeout; 2719 up->timer.function = serial8250_timeout;
2721 2720
2722 /* 2721 /*
2723 * ALPHA_KLUDGE_MCR needs to be killed. 2722 * ALPHA_KLUDGE_MCR needs to be killed.
2724 */ 2723 */
2725 up->mcr_mask = ~ALPHA_KLUDGE_MCR; 2724 up->mcr_mask = ~ALPHA_KLUDGE_MCR;
2726 up->mcr_force = ALPHA_KLUDGE_MCR; 2725 up->mcr_force = ALPHA_KLUDGE_MCR;
2727 2726
2728 up->port.ops = &serial8250_pops; 2727 up->port.ops = &serial8250_pops;
2729 } 2728 }
2730 2729
2731 if (share_irqs) 2730 if (share_irqs)
2732 irqflag = IRQF_SHARED; 2731 irqflag = IRQF_SHARED;
2733 2732
2734 for (i = 0, up = serial8250_ports; 2733 for (i = 0, up = serial8250_ports;
2735 i < ARRAY_SIZE(old_serial_port) && i < nr_uarts; 2734 i < ARRAY_SIZE(old_serial_port) && i < nr_uarts;
2736 i++, up++) { 2735 i++, up++) {
2737 up->port.iobase = old_serial_port[i].port; 2736 up->port.iobase = old_serial_port[i].port;
2738 up->port.irq = irq_canonicalize(old_serial_port[i].irq); 2737 up->port.irq = irq_canonicalize(old_serial_port[i].irq);
2739 up->port.irqflags = old_serial_port[i].irqflags; 2738 up->port.irqflags = old_serial_port[i].irqflags;
2740 up->port.uartclk = old_serial_port[i].baud_base * 16; 2739 up->port.uartclk = old_serial_port[i].baud_base * 16;
2741 up->port.flags = old_serial_port[i].flags; 2740 up->port.flags = old_serial_port[i].flags;
2742 up->port.hub6 = old_serial_port[i].hub6; 2741 up->port.hub6 = old_serial_port[i].hub6;
2743 up->port.membase = old_serial_port[i].iomem_base; 2742 up->port.membase = old_serial_port[i].iomem_base;
2744 up->port.iotype = old_serial_port[i].io_type; 2743 up->port.iotype = old_serial_port[i].io_type;
2745 up->port.regshift = old_serial_port[i].iomem_reg_shift; 2744 up->port.regshift = old_serial_port[i].iomem_reg_shift;
2746 set_io_from_upio(&up->port); 2745 set_io_from_upio(&up->port);
2747 up->port.irqflags |= irqflag; 2746 up->port.irqflags |= irqflag;
2748 if (serial8250_isa_config != NULL) 2747 if (serial8250_isa_config != NULL)
2749 serial8250_isa_config(i, &up->port, &up->capabilities); 2748 serial8250_isa_config(i, &up->port, &up->capabilities);
2750 2749
2751 } 2750 }
2752 } 2751 }
2753 2752
2754 static void 2753 static void
2755 serial8250_init_fixed_type_port(struct uart_8250_port *up, unsigned int type) 2754 serial8250_init_fixed_type_port(struct uart_8250_port *up, unsigned int type)
2756 { 2755 {
2757 up->port.type = type; 2756 up->port.type = type;
2758 up->port.fifosize = uart_config[type].fifo_size; 2757 up->port.fifosize = uart_config[type].fifo_size;
2759 up->capabilities = uart_config[type].flags; 2758 up->capabilities = uart_config[type].flags;
2760 up->tx_loadsz = uart_config[type].tx_loadsz; 2759 up->tx_loadsz = uart_config[type].tx_loadsz;
2761 } 2760 }
2762 2761
2763 static void __init 2762 static void __init
2764 serial8250_register_ports(struct uart_driver *drv, struct device *dev) 2763 serial8250_register_ports(struct uart_driver *drv, struct device *dev)
2765 { 2764 {
2766 int i; 2765 int i;
2767 2766
2768 for (i = 0; i < nr_uarts; i++) { 2767 for (i = 0; i < nr_uarts; i++) {
2769 struct uart_8250_port *up = &serial8250_ports[i]; 2768 struct uart_8250_port *up = &serial8250_ports[i];
2770 up->cur_iotype = 0xFF; 2769 up->cur_iotype = 0xFF;
2771 } 2770 }
2772 2771
2773 serial8250_isa_init_ports(); 2772 serial8250_isa_init_ports();
2774 2773
2775 for (i = 0; i < nr_uarts; i++) { 2774 for (i = 0; i < nr_uarts; i++) {
2776 struct uart_8250_port *up = &serial8250_ports[i]; 2775 struct uart_8250_port *up = &serial8250_ports[i];
2777 2776
2778 up->port.dev = dev; 2777 up->port.dev = dev;
2779 2778
2780 if (up->port.flags & UPF_FIXED_TYPE) 2779 if (up->port.flags & UPF_FIXED_TYPE)
2781 serial8250_init_fixed_type_port(up, up->port.type); 2780 serial8250_init_fixed_type_port(up, up->port.type);
2782 2781
2783 uart_add_one_port(drv, &up->port); 2782 uart_add_one_port(drv, &up->port);
2784 } 2783 }
2785 } 2784 }
2786 2785
2787 #ifdef CONFIG_SERIAL_8250_CONSOLE 2786 #ifdef CONFIG_SERIAL_8250_CONSOLE
2788 2787
2789 static void serial8250_console_putchar(struct uart_port *port, int ch) 2788 static void serial8250_console_putchar(struct uart_port *port, int ch)
2790 { 2789 {
2791 struct uart_8250_port *up = 2790 struct uart_8250_port *up =
2792 container_of(port, struct uart_8250_port, port); 2791 container_of(port, struct uart_8250_port, port);
2793 2792
2794 wait_for_xmitr(up, UART_LSR_THRE); 2793 wait_for_xmitr(up, UART_LSR_THRE);
2795 serial_out(up, UART_TX, ch); 2794 serial_out(up, UART_TX, ch);
2796 } 2795 }
2797 2796
2798 /* 2797 /*
2799 * Print a string to the serial port trying not to disturb 2798 * Print a string to the serial port trying not to disturb
2800 * any possible real use of the port... 2799 * any possible real use of the port...
2801 * 2800 *
2802 * The console_lock must be held when we get here. 2801 * The console_lock must be held when we get here.
2803 */ 2802 */
2804 static void 2803 static void
2805 serial8250_console_write(struct console *co, const char *s, unsigned int count) 2804 serial8250_console_write(struct console *co, const char *s, unsigned int count)
2806 { 2805 {
2807 struct uart_8250_port *up = &serial8250_ports[co->index]; 2806 struct uart_8250_port *up = &serial8250_ports[co->index];
2808 unsigned long flags; 2807 unsigned long flags;
2809 unsigned int ier; 2808 unsigned int ier;
2810 int locked = 1; 2809 int locked = 1;
2811 2810
2812 touch_nmi_watchdog(); 2811 touch_nmi_watchdog();
2813 2812
2814 local_irq_save(flags); 2813 local_irq_save(flags);
2815 if (up->port.sysrq) { 2814 if (up->port.sysrq) {
2816 /* serial8250_handle_irq() already took the lock */ 2815 /* serial8250_handle_irq() already took the lock */
2817 locked = 0; 2816 locked = 0;
2818 } else if (oops_in_progress) { 2817 } else if (oops_in_progress) {
2819 locked = spin_trylock(&up->port.lock); 2818 locked = spin_trylock(&up->port.lock);
2820 } else 2819 } else
2821 spin_lock(&up->port.lock); 2820 spin_lock(&up->port.lock);
2822 2821
2823 /* 2822 /*
2824 * First save the IER then disable the interrupts 2823 * First save the IER then disable the interrupts
2825 */ 2824 */
2826 ier = serial_in(up, UART_IER); 2825 ier = serial_in(up, UART_IER);
2827 2826
2828 if (up->capabilities & UART_CAP_UUE) 2827 if (up->capabilities & UART_CAP_UUE)
2829 serial_out(up, UART_IER, UART_IER_UUE); 2828 serial_out(up, UART_IER, UART_IER_UUE);
2830 else 2829 else
2831 serial_out(up, UART_IER, 0); 2830 serial_out(up, UART_IER, 0);
2832 2831
2833 uart_console_write(&up->port, s, count, serial8250_console_putchar); 2832 uart_console_write(&up->port, s, count, serial8250_console_putchar);
2834 2833
2835 /* 2834 /*
2836 * Finally, wait for transmitter to become empty 2835 * Finally, wait for transmitter to become empty
2837 * and restore the IER 2836 * and restore the IER
2838 */ 2837 */
2839 wait_for_xmitr(up, BOTH_EMPTY); 2838 wait_for_xmitr(up, BOTH_EMPTY);
2840 serial_out(up, UART_IER, ier); 2839 serial_out(up, UART_IER, ier);
2841 2840
2842 /* 2841 /*
2843 * The receive handling will happen properly because the 2842 * The receive handling will happen properly because the
2844 * receive ready bit will still be set; it is not cleared 2843 * receive ready bit will still be set; it is not cleared
2845 * on read. However, modem control will not, we must 2844 * on read. However, modem control will not, we must
2846 * call it if we have saved something in the saved flags 2845 * call it if we have saved something in the saved flags
2847 * while processing with interrupts off. 2846 * while processing with interrupts off.
2848 */ 2847 */
2849 if (up->msr_saved_flags) 2848 if (up->msr_saved_flags)
2850 serial8250_modem_status(up); 2849 serial8250_modem_status(up);
2851 2850
2852 if (locked) 2851 if (locked)
2853 spin_unlock(&up->port.lock); 2852 spin_unlock(&up->port.lock);
2854 local_irq_restore(flags); 2853 local_irq_restore(flags);
2855 } 2854 }
2856 2855
2857 static int __init serial8250_console_setup(struct console *co, char *options) 2856 static int __init serial8250_console_setup(struct console *co, char *options)
2858 { 2857 {
2859 struct uart_port *port; 2858 struct uart_port *port;
2860 int baud = 9600; 2859 int baud = 9600;
2861 int bits = 8; 2860 int bits = 8;
2862 int parity = 'n'; 2861 int parity = 'n';
2863 int flow = 'n'; 2862 int flow = 'n';
2864 2863
2865 /* 2864 /*
2866 * Check whether an invalid uart number has been specified, and 2865 * Check whether an invalid uart number has been specified, and
2867 * if so, search for the first available port that does have 2866 * if so, search for the first available port that does have
2868 * console support. 2867 * console support.
2869 */ 2868 */
2870 if (co->index >= nr_uarts) 2869 if (co->index >= nr_uarts)
2871 co->index = 0; 2870 co->index = 0;
2872 port = &serial8250_ports[co->index].port; 2871 port = &serial8250_ports[co->index].port;
2873 if (!port->iobase && !port->membase) 2872 if (!port->iobase && !port->membase)
2874 return -ENODEV; 2873 return -ENODEV;
2875 2874
2876 if (options) 2875 if (options)
2877 uart_parse_options(options, &baud, &parity, &bits, &flow); 2876 uart_parse_options(options, &baud, &parity, &bits, &flow);
2878 2877
2879 return uart_set_options(port, co, baud, parity, bits, flow); 2878 return uart_set_options(port, co, baud, parity, bits, flow);
2880 } 2879 }
2881 2880
2882 static int serial8250_console_early_setup(void) 2881 static int serial8250_console_early_setup(void)
2883 { 2882 {
2884 return serial8250_find_port_for_earlycon(); 2883 return serial8250_find_port_for_earlycon();
2885 } 2884 }
2886 2885
2887 static struct console serial8250_console = { 2886 static struct console serial8250_console = {
2888 .name = "ttyS", 2887 .name = "ttyS",
2889 .write = serial8250_console_write, 2888 .write = serial8250_console_write,
2890 .device = uart_console_device, 2889 .device = uart_console_device,
2891 .setup = serial8250_console_setup, 2890 .setup = serial8250_console_setup,
2892 .early_setup = serial8250_console_early_setup, 2891 .early_setup = serial8250_console_early_setup,
2893 .flags = CON_PRINTBUFFER | CON_ANYTIME, 2892 .flags = CON_PRINTBUFFER | CON_ANYTIME,
2894 .index = -1, 2893 .index = -1,
2895 .data = &serial8250_reg, 2894 .data = &serial8250_reg,
2896 }; 2895 };
2897 2896
2898 static int __init serial8250_console_init(void) 2897 static int __init serial8250_console_init(void)
2899 { 2898 {
2900 if (nr_uarts > UART_NR) 2899 if (nr_uarts > UART_NR)
2901 nr_uarts = UART_NR; 2900 nr_uarts = UART_NR;
2902 2901
2903 serial8250_isa_init_ports(); 2902 serial8250_isa_init_ports();
2904 register_console(&serial8250_console); 2903 register_console(&serial8250_console);
2905 return 0; 2904 return 0;
2906 } 2905 }
2907 console_initcall(serial8250_console_init); 2906 console_initcall(serial8250_console_init);
2908 2907
2909 int serial8250_find_port(struct uart_port *p) 2908 int serial8250_find_port(struct uart_port *p)
2910 { 2909 {
2911 int line; 2910 int line;
2912 struct uart_port *port; 2911 struct uart_port *port;
2913 2912
2914 for (line = 0; line < nr_uarts; line++) { 2913 for (line = 0; line < nr_uarts; line++) {
2915 port = &serial8250_ports[line].port; 2914 port = &serial8250_ports[line].port;
2916 if (uart_match_port(p, port)) 2915 if (uart_match_port(p, port))
2917 return line; 2916 return line;
2918 } 2917 }
2919 return -ENODEV; 2918 return -ENODEV;
2920 } 2919 }
2921 2920
2922 #define SERIAL8250_CONSOLE &serial8250_console 2921 #define SERIAL8250_CONSOLE &serial8250_console
2923 #else 2922 #else
2924 #define SERIAL8250_CONSOLE NULL 2923 #define SERIAL8250_CONSOLE NULL
2925 #endif 2924 #endif
2926 2925
2927 static struct uart_driver serial8250_reg = { 2926 static struct uart_driver serial8250_reg = {
2928 .owner = THIS_MODULE, 2927 .owner = THIS_MODULE,
2929 .driver_name = "serial", 2928 .driver_name = "serial",
2930 .dev_name = "ttyS", 2929 .dev_name = "ttyS",
2931 .major = TTY_MAJOR, 2930 .major = TTY_MAJOR,
2932 .minor = 64, 2931 .minor = 64,
2933 .cons = SERIAL8250_CONSOLE, 2932 .cons = SERIAL8250_CONSOLE,
2934 }; 2933 };
2935 2934
2936 /* 2935 /*
2937 * early_serial_setup - early registration for 8250 ports 2936 * early_serial_setup - early registration for 8250 ports
2938 * 2937 *
2939 * Setup an 8250 port structure prior to console initialisation. Use 2938 * Setup an 8250 port structure prior to console initialisation. Use
2940 * after console initialisation will cause undefined behaviour. 2939 * after console initialisation will cause undefined behaviour.
2941 */ 2940 */
2942 int __init early_serial_setup(struct uart_port *port) 2941 int __init early_serial_setup(struct uart_port *port)
2943 { 2942 {
2944 struct uart_port *p; 2943 struct uart_port *p;
2945 2944
2946 if (port->line >= ARRAY_SIZE(serial8250_ports)) 2945 if (port->line >= ARRAY_SIZE(serial8250_ports))
2947 return -ENODEV; 2946 return -ENODEV;
2948 2947
2949 serial8250_isa_init_ports(); 2948 serial8250_isa_init_ports();
2950 p = &serial8250_ports[port->line].port; 2949 p = &serial8250_ports[port->line].port;
2951 p->iobase = port->iobase; 2950 p->iobase = port->iobase;
2952 p->membase = port->membase; 2951 p->membase = port->membase;
2953 p->irq = port->irq; 2952 p->irq = port->irq;
2954 p->irqflags = port->irqflags; 2953 p->irqflags = port->irqflags;
2955 p->uartclk = port->uartclk; 2954 p->uartclk = port->uartclk;
2956 p->fifosize = port->fifosize; 2955 p->fifosize = port->fifosize;
2957 p->regshift = port->regshift; 2956 p->regshift = port->regshift;
2958 p->iotype = port->iotype; 2957 p->iotype = port->iotype;
2959 p->flags = port->flags; 2958 p->flags = port->flags;
2960 p->mapbase = port->mapbase; 2959 p->mapbase = port->mapbase;
2961 p->private_data = port->private_data; 2960 p->private_data = port->private_data;
2962 p->type = port->type; 2961 p->type = port->type;
2963 p->line = port->line; 2962 p->line = port->line;
2964 2963
2965 set_io_from_upio(p); 2964 set_io_from_upio(p);
2966 if (port->serial_in) 2965 if (port->serial_in)
2967 p->serial_in = port->serial_in; 2966 p->serial_in = port->serial_in;
2968 if (port->serial_out) 2967 if (port->serial_out)
2969 p->serial_out = port->serial_out; 2968 p->serial_out = port->serial_out;
2970 if (port->handle_irq) 2969 if (port->handle_irq)
2971 p->handle_irq = port->handle_irq; 2970 p->handle_irq = port->handle_irq;
2972 else 2971 else
2973 p->handle_irq = serial8250_default_handle_irq; 2972 p->handle_irq = serial8250_default_handle_irq;
2974 2973
2975 return 0; 2974 return 0;
2976 } 2975 }
2977 2976
2978 /** 2977 /**
2979 * serial8250_suspend_port - suspend one serial port 2978 * serial8250_suspend_port - suspend one serial port
2980 * @line: serial line number 2979 * @line: serial line number
2981 * 2980 *
2982 * Suspend one serial port. 2981 * Suspend one serial port.
2983 */ 2982 */
2984 void serial8250_suspend_port(int line) 2983 void serial8250_suspend_port(int line)
2985 { 2984 {
2986 uart_suspend_port(&serial8250_reg, &serial8250_ports[line].port); 2985 uart_suspend_port(&serial8250_reg, &serial8250_ports[line].port);
2987 } 2986 }
2988 2987
2989 /** 2988 /**
2990 * serial8250_resume_port - resume one serial port 2989 * serial8250_resume_port - resume one serial port
2991 * @line: serial line number 2990 * @line: serial line number
2992 * 2991 *
2993 * Resume one serial port. 2992 * Resume one serial port.
2994 */ 2993 */
2995 void serial8250_resume_port(int line) 2994 void serial8250_resume_port(int line)
2996 { 2995 {
2997 struct uart_8250_port *up = &serial8250_ports[line]; 2996 struct uart_8250_port *up = &serial8250_ports[line];
2998 2997
2999 if (up->capabilities & UART_NATSEMI) { 2998 if (up->capabilities & UART_NATSEMI) {
3000 /* Ensure it's still in high speed mode */ 2999 /* Ensure it's still in high speed mode */
3001 serial_outp(up, UART_LCR, 0xE0); 3000 serial_outp(up, UART_LCR, 0xE0);
3002 3001
3003 ns16550a_goto_highspeed(up); 3002 ns16550a_goto_highspeed(up);
3004 3003
3005 serial_outp(up, UART_LCR, 0); 3004 serial_outp(up, UART_LCR, 0);
3006 up->port.uartclk = 921600*16; 3005 up->port.uartclk = 921600*16;
3007 } 3006 }
3008 uart_resume_port(&serial8250_reg, &up->port); 3007 uart_resume_port(&serial8250_reg, &up->port);
3009 } 3008 }
3010 3009
3011 /* 3010 /*
3012 * Register a set of serial devices attached to a platform device. The 3011 * Register a set of serial devices attached to a platform device. The
3013 * list is terminated with a zero flags entry, which means we expect 3012 * list is terminated with a zero flags entry, which means we expect
3014 * all entries to have at least UPF_BOOT_AUTOCONF set. 3013 * all entries to have at least UPF_BOOT_AUTOCONF set.
3015 */ 3014 */
3016 static int __devinit serial8250_probe(struct platform_device *dev) 3015 static int __devinit serial8250_probe(struct platform_device *dev)
3017 { 3016 {
3018 struct plat_serial8250_port *p = dev->dev.platform_data; 3017 struct plat_serial8250_port *p = dev->dev.platform_data;
3019 struct uart_port port; 3018 struct uart_port port;
3020 int ret, i, irqflag = 0; 3019 int ret, i, irqflag = 0;
3021 3020
3022 memset(&port, 0, sizeof(struct uart_port)); 3021 memset(&port, 0, sizeof(struct uart_port));
3023 3022
3024 if (share_irqs) 3023 if (share_irqs)
3025 irqflag = IRQF_SHARED; 3024 irqflag = IRQF_SHARED;
3026 3025
3027 for (i = 0; p && p->flags != 0; p++, i++) { 3026 for (i = 0; p && p->flags != 0; p++, i++) {
3028 port.iobase = p->iobase; 3027 port.iobase = p->iobase;
3029 port.membase = p->membase; 3028 port.membase = p->membase;
3030 port.irq = p->irq; 3029 port.irq = p->irq;
3031 port.irqflags = p->irqflags; 3030 port.irqflags = p->irqflags;
3032 port.uartclk = p->uartclk; 3031 port.uartclk = p->uartclk;
3033 port.regshift = p->regshift; 3032 port.regshift = p->regshift;
3034 port.iotype = p->iotype; 3033 port.iotype = p->iotype;
3035 port.flags = p->flags; 3034 port.flags = p->flags;
3036 port.mapbase = p->mapbase; 3035 port.mapbase = p->mapbase;
3037 port.hub6 = p->hub6; 3036 port.hub6 = p->hub6;
3038 port.private_data = p->private_data; 3037 port.private_data = p->private_data;
3039 port.type = p->type; 3038 port.type = p->type;
3040 port.serial_in = p->serial_in; 3039 port.serial_in = p->serial_in;
3041 port.serial_out = p->serial_out; 3040 port.serial_out = p->serial_out;
3042 port.handle_irq = p->handle_irq; 3041 port.handle_irq = p->handle_irq;
3043 port.set_termios = p->set_termios; 3042 port.set_termios = p->set_termios;
3044 port.pm = p->pm; 3043 port.pm = p->pm;
3045 port.dev = &dev->dev; 3044 port.dev = &dev->dev;
3046 port.irqflags |= irqflag; 3045 port.irqflags |= irqflag;
3047 ret = serial8250_register_port(&port); 3046 ret = serial8250_register_port(&port);
3048 if (ret < 0) { 3047 if (ret < 0) {
3049 dev_err(&dev->dev, "unable to register port at index %d " 3048 dev_err(&dev->dev, "unable to register port at index %d "
3050 "(IO%lx MEM%llx IRQ%d): %d\n", i, 3049 "(IO%lx MEM%llx IRQ%d): %d\n", i,
3051 p->iobase, (unsigned long long)p->mapbase, 3050 p->iobase, (unsigned long long)p->mapbase,
3052 p->irq, ret); 3051 p->irq, ret);
3053 } 3052 }
3054 } 3053 }
3055 return 0; 3054 return 0;
3056 } 3055 }
3057 3056
3058 /* 3057 /*
3059 * Remove serial ports registered against a platform device. 3058 * Remove serial ports registered against a platform device.
3060 */ 3059 */
3061 static int __devexit serial8250_remove(struct platform_device *dev) 3060 static int __devexit serial8250_remove(struct platform_device *dev)
3062 { 3061 {
3063 int i; 3062 int i;
3064 3063
3065 for (i = 0; i < nr_uarts; i++) { 3064 for (i = 0; i < nr_uarts; i++) {
3066 struct uart_8250_port *up = &serial8250_ports[i]; 3065 struct uart_8250_port *up = &serial8250_ports[i];
3067 3066
3068 if (up->port.dev == &dev->dev) 3067 if (up->port.dev == &dev->dev)
3069 serial8250_unregister_port(i); 3068 serial8250_unregister_port(i);
3070 } 3069 }
3071 return 0; 3070 return 0;
3072 } 3071 }
3073 3072
3074 static int serial8250_suspend(struct platform_device *dev, pm_message_t state) 3073 static int serial8250_suspend(struct platform_device *dev, pm_message_t state)
3075 { 3074 {
3076 int i; 3075 int i;
3077 3076
3078 for (i = 0; i < UART_NR; i++) { 3077 for (i = 0; i < UART_NR; i++) {
3079 struct uart_8250_port *up = &serial8250_ports[i]; 3078 struct uart_8250_port *up = &serial8250_ports[i];
3080 3079
3081 if (up->port.type != PORT_UNKNOWN && up->port.dev == &dev->dev) 3080 if (up->port.type != PORT_UNKNOWN && up->port.dev == &dev->dev)
3082 uart_suspend_port(&serial8250_reg, &up->port); 3081 uart_suspend_port(&serial8250_reg, &up->port);
3083 } 3082 }
3084 3083
3085 return 0; 3084 return 0;
3086 } 3085 }
3087 3086
3088 static int serial8250_resume(struct platform_device *dev) 3087 static int serial8250_resume(struct platform_device *dev)
3089 { 3088 {
3090 int i; 3089 int i;
3091 3090
3092 for (i = 0; i < UART_NR; i++) { 3091 for (i = 0; i < UART_NR; i++) {
3093 struct uart_8250_port *up = &serial8250_ports[i]; 3092 struct uart_8250_port *up = &serial8250_ports[i];
3094 3093
3095 if (up->port.type != PORT_UNKNOWN && up->port.dev == &dev->dev) 3094 if (up->port.type != PORT_UNKNOWN && up->port.dev == &dev->dev)
3096 serial8250_resume_port(i); 3095 serial8250_resume_port(i);
3097 } 3096 }
3098 3097
3099 return 0; 3098 return 0;
3100 } 3099 }
3101 3100
3102 static struct platform_driver serial8250_isa_driver = { 3101 static struct platform_driver serial8250_isa_driver = {
3103 .probe = serial8250_probe, 3102 .probe = serial8250_probe,
3104 .remove = __devexit_p(serial8250_remove), 3103 .remove = __devexit_p(serial8250_remove),
3105 .suspend = serial8250_suspend, 3104 .suspend = serial8250_suspend,
3106 .resume = serial8250_resume, 3105 .resume = serial8250_resume,
3107 .driver = { 3106 .driver = {
3108 .name = "serial8250", 3107 .name = "serial8250",
3109 .owner = THIS_MODULE, 3108 .owner = THIS_MODULE,
3110 }, 3109 },
3111 }; 3110 };
3112 3111
3113 /* 3112 /*
3114 * This "device" covers _all_ ISA 8250-compatible serial devices listed 3113 * This "device" covers _all_ ISA 8250-compatible serial devices listed
3115 * in the table in include/asm/serial.h 3114 * in the table in include/asm/serial.h
3116 */ 3115 */
3117 static struct platform_device *serial8250_isa_devs; 3116 static struct platform_device *serial8250_isa_devs;
3118 3117
3119 /* 3118 /*
3120 * serial8250_register_port and serial8250_unregister_port allows for 3119 * serial8250_register_port and serial8250_unregister_port allows for
3121 * 16x50 serial ports to be configured at run-time, to support PCMCIA 3120 * 16x50 serial ports to be configured at run-time, to support PCMCIA
3122 * modems and PCI multiport cards. 3121 * modems and PCI multiport cards.
3123 */ 3122 */
3124 static DEFINE_MUTEX(serial_mutex); 3123 static DEFINE_MUTEX(serial_mutex);
3125 3124
3126 static struct uart_8250_port *serial8250_find_match_or_unused(struct uart_port *port) 3125 static struct uart_8250_port *serial8250_find_match_or_unused(struct uart_port *port)
3127 { 3126 {
3128 int i; 3127 int i;
3129 3128
3130 /* 3129 /*
3131 * First, find a port entry which matches. 3130 * First, find a port entry which matches.
3132 */ 3131 */
3133 for (i = 0; i < nr_uarts; i++) 3132 for (i = 0; i < nr_uarts; i++)
3134 if (uart_match_port(&serial8250_ports[i].port, port)) 3133 if (uart_match_port(&serial8250_ports[i].port, port))
3135 return &serial8250_ports[i]; 3134 return &serial8250_ports[i];
3136 3135
3137 /* 3136 /*
3138 * We didn't find a matching entry, so look for the first 3137 * We didn't find a matching entry, so look for the first
3139 * free entry. We look for one which hasn't been previously 3138 * free entry. We look for one which hasn't been previously
3140 * used (indicated by zero iobase). 3139 * used (indicated by zero iobase).
3141 */ 3140 */
3142 for (i = 0; i < nr_uarts; i++) 3141 for (i = 0; i < nr_uarts; i++)
3143 if (serial8250_ports[i].port.type == PORT_UNKNOWN && 3142 if (serial8250_ports[i].port.type == PORT_UNKNOWN &&
3144 serial8250_ports[i].port.iobase == 0) 3143 serial8250_ports[i].port.iobase == 0)
3145 return &serial8250_ports[i]; 3144 return &serial8250_ports[i];
3146 3145
3147 /* 3146 /*
3148 * That also failed. Last resort is to find any entry which 3147 * That also failed. Last resort is to find any entry which
3149 * doesn't have a real port associated with it. 3148 * doesn't have a real port associated with it.
3150 */ 3149 */
3151 for (i = 0; i < nr_uarts; i++) 3150 for (i = 0; i < nr_uarts; i++)
3152 if (serial8250_ports[i].port.type == PORT_UNKNOWN) 3151 if (serial8250_ports[i].port.type == PORT_UNKNOWN)
3153 return &serial8250_ports[i]; 3152 return &serial8250_ports[i];
3154 3153
3155 return NULL; 3154 return NULL;
3156 } 3155 }
3157 3156
3158 /** 3157 /**
3159 * serial8250_register_port - register a serial port 3158 * serial8250_register_port - register a serial port
3160 * @port: serial port template 3159 * @port: serial port template
3161 * 3160 *
3162 * Configure the serial port specified by the request. If the 3161 * Configure the serial port specified by the request. If the
3163 * port exists and is in use, it is hung up and unregistered 3162 * port exists and is in use, it is hung up and unregistered
3164 * first. 3163 * first.
3165 * 3164 *
3166 * The port is then probed and if necessary the IRQ is autodetected 3165 * The port is then probed and if necessary the IRQ is autodetected
3167 * If this fails an error is returned. 3166 * If this fails an error is returned.
3168 * 3167 *
3169 * On success the port is ready to use and the line number is returned. 3168 * On success the port is ready to use and the line number is returned.
3170 */ 3169 */
3171 int serial8250_register_port(struct uart_port *port) 3170 int serial8250_register_port(struct uart_port *port)
3172 { 3171 {
3173 struct uart_8250_port *uart; 3172 struct uart_8250_port *uart;
3174 int ret = -ENOSPC; 3173 int ret = -ENOSPC;
3175 3174
3176 if (port->uartclk == 0) 3175 if (port->uartclk == 0)
3177 return -EINVAL; 3176 return -EINVAL;
3178 3177
3179 mutex_lock(&serial_mutex); 3178 mutex_lock(&serial_mutex);
3180 3179
3181 uart = serial8250_find_match_or_unused(port); 3180 uart = serial8250_find_match_or_unused(port);
3182 if (uart) { 3181 if (uart) {
3183 uart_remove_one_port(&serial8250_reg, &uart->port); 3182 uart_remove_one_port(&serial8250_reg, &uart->port);
3184 3183
3185 uart->port.iobase = port->iobase; 3184 uart->port.iobase = port->iobase;
3186 uart->port.membase = port->membase; 3185 uart->port.membase = port->membase;
3187 uart->port.irq = port->irq; 3186 uart->port.irq = port->irq;
3188 uart->port.irqflags = port->irqflags; 3187 uart->port.irqflags = port->irqflags;
3189 uart->port.uartclk = port->uartclk; 3188 uart->port.uartclk = port->uartclk;
3190 uart->port.fifosize = port->fifosize; 3189 uart->port.fifosize = port->fifosize;
3191 uart->port.regshift = port->regshift; 3190 uart->port.regshift = port->regshift;
3192 uart->port.iotype = port->iotype; 3191 uart->port.iotype = port->iotype;
3193 uart->port.flags = port->flags | UPF_BOOT_AUTOCONF; 3192 uart->port.flags = port->flags | UPF_BOOT_AUTOCONF;
3194 uart->port.mapbase = port->mapbase; 3193 uart->port.mapbase = port->mapbase;
3195 uart->port.private_data = port->private_data; 3194 uart->port.private_data = port->private_data;
3196 if (port->dev) 3195 if (port->dev)
3197 uart->port.dev = port->dev; 3196 uart->port.dev = port->dev;
3198 3197
3199 if (port->flags & UPF_FIXED_TYPE) 3198 if (port->flags & UPF_FIXED_TYPE)
3200 serial8250_init_fixed_type_port(uart, port->type); 3199 serial8250_init_fixed_type_port(uart, port->type);
3201 3200
3202 set_io_from_upio(&uart->port); 3201 set_io_from_upio(&uart->port);
3203 /* Possibly override default I/O functions. */ 3202 /* Possibly override default I/O functions. */
3204 if (port->serial_in) 3203 if (port->serial_in)
3205 uart->port.serial_in = port->serial_in; 3204 uart->port.serial_in = port->serial_in;
3206 if (port->serial_out) 3205 if (port->serial_out)
3207 uart->port.serial_out = port->serial_out; 3206 uart->port.serial_out = port->serial_out;
3208 if (port->handle_irq) 3207 if (port->handle_irq)
3209 uart->port.handle_irq = port->handle_irq; 3208 uart->port.handle_irq = port->handle_irq;
3210 /* Possibly override set_termios call */ 3209 /* Possibly override set_termios call */
3211 if (port->set_termios) 3210 if (port->set_termios)
3212 uart->port.set_termios = port->set_termios; 3211 uart->port.set_termios = port->set_termios;
3213 if (port->pm) 3212 if (port->pm)
3214 uart->port.pm = port->pm; 3213 uart->port.pm = port->pm;
3215 3214
3216 if (serial8250_isa_config != NULL) 3215 if (serial8250_isa_config != NULL)
3217 serial8250_isa_config(0, &uart->port, 3216 serial8250_isa_config(0, &uart->port,
3218 &uart->capabilities); 3217 &uart->capabilities);
3219 3218
3220 ret = uart_add_one_port(&serial8250_reg, &uart->port); 3219 ret = uart_add_one_port(&serial8250_reg, &uart->port);
3221 if (ret == 0) 3220 if (ret == 0)
3222 ret = uart->port.line; 3221 ret = uart->port.line;
3223 } 3222 }
3224 mutex_unlock(&serial_mutex); 3223 mutex_unlock(&serial_mutex);
3225 3224
3226 return ret; 3225 return ret;
3227 } 3226 }
3228 EXPORT_SYMBOL(serial8250_register_port); 3227 EXPORT_SYMBOL(serial8250_register_port);
3229 3228
3230 /** 3229 /**
3231 * serial8250_unregister_port - remove a 16x50 serial port at runtime 3230 * serial8250_unregister_port - remove a 16x50 serial port at runtime
3232 * @line: serial line number 3231 * @line: serial line number
3233 * 3232 *
3234 * Remove one serial port. This may not be called from interrupt 3233 * Remove one serial port. This may not be called from interrupt
3235 * context. We hand the port back to the our control. 3234 * context. We hand the port back to the our control.
3236 */ 3235 */
3237 void serial8250_unregister_port(int line) 3236 void serial8250_unregister_port(int line)
3238 { 3237 {
3239 struct uart_8250_port *uart = &serial8250_ports[line]; 3238 struct uart_8250_port *uart = &serial8250_ports[line];
3240 3239
3241 mutex_lock(&serial_mutex); 3240 mutex_lock(&serial_mutex);
3242 uart_remove_one_port(&serial8250_reg, &uart->port); 3241 uart_remove_one_port(&serial8250_reg, &uart->port);
3243 if (serial8250_isa_devs) { 3242 if (serial8250_isa_devs) {
3244 uart->port.flags &= ~UPF_BOOT_AUTOCONF; 3243 uart->port.flags &= ~UPF_BOOT_AUTOCONF;
3245 uart->port.type = PORT_UNKNOWN; 3244 uart->port.type = PORT_UNKNOWN;
3246 uart->port.dev = &serial8250_isa_devs->dev; 3245 uart->port.dev = &serial8250_isa_devs->dev;
3247 uart->capabilities = uart_config[uart->port.type].flags; 3246 uart->capabilities = uart_config[uart->port.type].flags;
3248 uart_add_one_port(&serial8250_reg, &uart->port); 3247 uart_add_one_port(&serial8250_reg, &uart->port);
3249 } else { 3248 } else {
3250 uart->port.dev = NULL; 3249 uart->port.dev = NULL;
3251 } 3250 }
3252 mutex_unlock(&serial_mutex); 3251 mutex_unlock(&serial_mutex);
3253 } 3252 }
3254 EXPORT_SYMBOL(serial8250_unregister_port); 3253 EXPORT_SYMBOL(serial8250_unregister_port);
3255 3254
3256 static int __init serial8250_init(void) 3255 static int __init serial8250_init(void)
3257 { 3256 {
3258 int ret; 3257 int ret;
3259 3258
3260 if (nr_uarts > UART_NR) 3259 if (nr_uarts > UART_NR)
3261 nr_uarts = UART_NR; 3260 nr_uarts = UART_NR;
3262 3261
3263 printk(KERN_INFO "Serial: 8250/16550 driver, " 3262 printk(KERN_INFO "Serial: 8250/16550 driver, "
3264 "%d ports, IRQ sharing %sabled\n", nr_uarts, 3263 "%d ports, IRQ sharing %sabled\n", nr_uarts,
3265 share_irqs ? "en" : "dis"); 3264 share_irqs ? "en" : "dis");
3266 3265
3267 #ifdef CONFIG_SPARC 3266 #ifdef CONFIG_SPARC
3268 ret = sunserial_register_minors(&serial8250_reg, UART_NR); 3267 ret = sunserial_register_minors(&serial8250_reg, UART_NR);
3269 #else 3268 #else
3270 serial8250_reg.nr = UART_NR; 3269 serial8250_reg.nr = UART_NR;
3271 ret = uart_register_driver(&serial8250_reg); 3270 ret = uart_register_driver(&serial8250_reg);
3272 #endif 3271 #endif
3273 if (ret) 3272 if (ret)
3274 goto out; 3273 goto out;
3275 3274
3276 serial8250_isa_devs = platform_device_alloc("serial8250", 3275 serial8250_isa_devs = platform_device_alloc("serial8250",
3277 PLAT8250_DEV_LEGACY); 3276 PLAT8250_DEV_LEGACY);
3278 if (!serial8250_isa_devs) { 3277 if (!serial8250_isa_devs) {
3279 ret = -ENOMEM; 3278 ret = -ENOMEM;
3280 goto unreg_uart_drv; 3279 goto unreg_uart_drv;
3281 } 3280 }
3282 3281
3283 ret = platform_device_add(serial8250_isa_devs); 3282 ret = platform_device_add(serial8250_isa_devs);
3284 if (ret) 3283 if (ret)
3285 goto put_dev; 3284 goto put_dev;
3286 3285
3287 serial8250_register_ports(&serial8250_reg, &serial8250_isa_devs->dev); 3286 serial8250_register_ports(&serial8250_reg, &serial8250_isa_devs->dev);
3288 3287
3289 ret = platform_driver_register(&serial8250_isa_driver); 3288 ret = platform_driver_register(&serial8250_isa_driver);
3290 if (ret == 0) 3289 if (ret == 0)
3291 goto out; 3290 goto out;
3292 3291
3293 platform_device_del(serial8250_isa_devs); 3292 platform_device_del(serial8250_isa_devs);
3294 put_dev: 3293 put_dev:
3295 platform_device_put(serial8250_isa_devs); 3294 platform_device_put(serial8250_isa_devs);
3296 unreg_uart_drv: 3295 unreg_uart_drv:
3297 #ifdef CONFIG_SPARC 3296 #ifdef CONFIG_SPARC
3298 sunserial_unregister_minors(&serial8250_reg, UART_NR); 3297 sunserial_unregister_minors(&serial8250_reg, UART_NR);
3299 #else 3298 #else
3300 uart_unregister_driver(&serial8250_reg); 3299 uart_unregister_driver(&serial8250_reg);
3301 #endif 3300 #endif
3302 out: 3301 out:
3303 return ret; 3302 return ret;
3304 } 3303 }
3305 3304
3306 static void __exit serial8250_exit(void) 3305 static void __exit serial8250_exit(void)
3307 { 3306 {
3308 struct platform_device *isa_dev = serial8250_isa_devs; 3307 struct platform_device *isa_dev = serial8250_isa_devs;
3309 3308
3310 /* 3309 /*
3311 * This tells serial8250_unregister_port() not to re-register 3310 * This tells serial8250_unregister_port() not to re-register
3312 * the ports (thereby making serial8250_isa_driver permanently 3311 * the ports (thereby making serial8250_isa_driver permanently
3313 * in use.) 3312 * in use.)
3314 */ 3313 */
3315 serial8250_isa_devs = NULL; 3314 serial8250_isa_devs = NULL;
3316 3315
3317 platform_driver_unregister(&serial8250_isa_driver); 3316 platform_driver_unregister(&serial8250_isa_driver);
3318 platform_device_unregister(isa_dev); 3317 platform_device_unregister(isa_dev);
3319 3318
3320 #ifdef CONFIG_SPARC 3319 #ifdef CONFIG_SPARC
3321 sunserial_unregister_minors(&serial8250_reg, UART_NR); 3320 sunserial_unregister_minors(&serial8250_reg, UART_NR);
3322 #else 3321 #else
3323 uart_unregister_driver(&serial8250_reg); 3322 uart_unregister_driver(&serial8250_reg);
3324 #endif 3323 #endif
3325 } 3324 }
3326 3325
3327 module_init(serial8250_init); 3326 module_init(serial8250_init);
3328 module_exit(serial8250_exit); 3327 module_exit(serial8250_exit);
3329 3328
3330 EXPORT_SYMBOL(serial8250_suspend_port); 3329 EXPORT_SYMBOL(serial8250_suspend_port);
3331 EXPORT_SYMBOL(serial8250_resume_port); 3330 EXPORT_SYMBOL(serial8250_resume_port);
3332 3331
3333 MODULE_LICENSE("GPL"); 3332 MODULE_LICENSE("GPL");
3334 MODULE_DESCRIPTION("Generic 8250/16x50 serial driver"); 3333 MODULE_DESCRIPTION("Generic 8250/16x50 serial driver");
3335 3334
3336 module_param(share_irqs, uint, 0644); 3335 module_param(share_irqs, uint, 0644);
3337 MODULE_PARM_DESC(share_irqs, "Share IRQs with other non-8250/16x50 devices" 3336 MODULE_PARM_DESC(share_irqs, "Share IRQs with other non-8250/16x50 devices"
3338 " (unsafe)"); 3337 " (unsafe)");
3339 3338
3340 module_param(nr_uarts, uint, 0644); 3339 module_param(nr_uarts, uint, 0644);
3341 MODULE_PARM_DESC(nr_uarts, "Maximum number of UARTs supported. (1-" __MODULE_STRING(CONFIG_SERIAL_8250_NR_UARTS) ")"); 3340 MODULE_PARM_DESC(nr_uarts, "Maximum number of UARTs supported. (1-" __MODULE_STRING(CONFIG_SERIAL_8250_NR_UARTS) ")");
3342 3341
3343 module_param(skip_txen_test, uint, 0644); 3342 module_param(skip_txen_test, uint, 0644);
3344 MODULE_PARM_DESC(skip_txen_test, "Skip checking for the TXEN bug at init time"); 3343 MODULE_PARM_DESC(skip_txen_test, "Skip checking for the TXEN bug at init time");
3345 3344
3346 #ifdef CONFIG_SERIAL_8250_RSA 3345 #ifdef CONFIG_SERIAL_8250_RSA
3347 module_param_array(probe_rsa, ulong, &probe_rsa_count, 0444); 3346 module_param_array(probe_rsa, ulong, &probe_rsa_count, 0444);
3348 MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA"); 3347 MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA");
drivers/tty/serial/suncore.c
1 /* suncore.c 1 /* suncore.c
2 * 2 *
3 * Common SUN serial routines. Based entirely 3 * Common SUN serial routines. Based entirely
4 * upon drivers/sbus/char/sunserial.c which is: 4 * upon drivers/sbus/char/sunserial.c which is:
5 * 5 *
6 * Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be) 6 * Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be)
7 * 7 *
8 * Adaptation to new UART layer is: 8 * Adaptation to new UART layer is:
9 * 9 *
10 * Copyright (C) 2002 David S. Miller (davem@redhat.com) 10 * Copyright (C) 2002 David S. Miller (davem@redhat.com)
11 */ 11 */
12 12
13 #include <linux/module.h> 13 #include <linux/module.h>
14 #include <linux/kernel.h> 14 #include <linux/kernel.h>
15 #include <linux/console.h> 15 #include <linux/console.h>
16 #include <linux/tty.h> 16 #include <linux/tty.h>
17 #include <linux/errno.h> 17 #include <linux/errno.h>
18 #include <linux/string.h> 18 #include <linux/string.h>
19 #include <linux/serial_core.h> 19 #include <linux/serial_core.h>
20 #include <linux/sunserialcore.h>
20 #include <linux/init.h> 21 #include <linux/init.h>
21 22
22 #include <asm/prom.h> 23 #include <asm/prom.h>
23 24
24 #include "suncore.h"
25 25
26 static int sunserial_current_minor = 64; 26 static int sunserial_current_minor = 64;
27 27
28 int sunserial_register_minors(struct uart_driver *drv, int count) 28 int sunserial_register_minors(struct uart_driver *drv, int count)
29 { 29 {
30 int err = 0; 30 int err = 0;
31 31
32 drv->minor = sunserial_current_minor; 32 drv->minor = sunserial_current_minor;
33 drv->nr += count; 33 drv->nr += count;
34 /* Register the driver on the first call */ 34 /* Register the driver on the first call */
35 if (drv->nr == count) 35 if (drv->nr == count)
36 err = uart_register_driver(drv); 36 err = uart_register_driver(drv);
37 if (err == 0) { 37 if (err == 0) {
38 sunserial_current_minor += count; 38 sunserial_current_minor += count;
39 drv->tty_driver->name_base = drv->minor - 64; 39 drv->tty_driver->name_base = drv->minor - 64;
40 } 40 }
41 return err; 41 return err;
42 } 42 }
43 EXPORT_SYMBOL(sunserial_register_minors); 43 EXPORT_SYMBOL(sunserial_register_minors);
44 44
45 void sunserial_unregister_minors(struct uart_driver *drv, int count) 45 void sunserial_unregister_minors(struct uart_driver *drv, int count)
46 { 46 {
47 drv->nr -= count; 47 drv->nr -= count;
48 sunserial_current_minor -= count; 48 sunserial_current_minor -= count;
49 49
50 if (drv->nr == 0) 50 if (drv->nr == 0)
51 uart_unregister_driver(drv); 51 uart_unregister_driver(drv);
52 } 52 }
53 EXPORT_SYMBOL(sunserial_unregister_minors); 53 EXPORT_SYMBOL(sunserial_unregister_minors);
54 54
55 int sunserial_console_match(struct console *con, struct device_node *dp, 55 int sunserial_console_match(struct console *con, struct device_node *dp,
56 struct uart_driver *drv, int line, bool ignore_line) 56 struct uart_driver *drv, int line, bool ignore_line)
57 { 57 {
58 if (!con) 58 if (!con)
59 return 0; 59 return 0;
60 60
61 drv->cons = con; 61 drv->cons = con;
62 62
63 if (of_console_device != dp) 63 if (of_console_device != dp)
64 return 0; 64 return 0;
65 65
66 if (!ignore_line) { 66 if (!ignore_line) {
67 int off = 0; 67 int off = 0;
68 68
69 if (of_console_options && 69 if (of_console_options &&
70 *of_console_options == 'b') 70 *of_console_options == 'b')
71 off = 1; 71 off = 1;
72 72
73 if ((line & 1) != off) 73 if ((line & 1) != off)
74 return 0; 74 return 0;
75 } 75 }
76 76
77 if (!console_set_on_cmdline) { 77 if (!console_set_on_cmdline) {
78 con->index = line; 78 con->index = line;
79 add_preferred_console(con->name, line, NULL); 79 add_preferred_console(con->name, line, NULL);
80 } 80 }
81 return 1; 81 return 1;
82 } 82 }
83 EXPORT_SYMBOL(sunserial_console_match); 83 EXPORT_SYMBOL(sunserial_console_match);
84 84
85 void sunserial_console_termios(struct console *con, struct device_node *uart_dp) 85 void sunserial_console_termios(struct console *con, struct device_node *uart_dp)
86 { 86 {
87 const char *mode, *s; 87 const char *mode, *s;
88 char mode_prop[] = "ttyX-mode"; 88 char mode_prop[] = "ttyX-mode";
89 int baud, bits, stop, cflag; 89 int baud, bits, stop, cflag;
90 char parity; 90 char parity;
91 91
92 if (!strcmp(uart_dp->name, "rsc") || 92 if (!strcmp(uart_dp->name, "rsc") ||
93 !strcmp(uart_dp->name, "rsc-console") || 93 !strcmp(uart_dp->name, "rsc-console") ||
94 !strcmp(uart_dp->name, "rsc-control")) { 94 !strcmp(uart_dp->name, "rsc-control")) {
95 mode = of_get_property(uart_dp, 95 mode = of_get_property(uart_dp,
96 "ssp-console-modes", NULL); 96 "ssp-console-modes", NULL);
97 if (!mode) 97 if (!mode)
98 mode = "115200,8,n,1,-"; 98 mode = "115200,8,n,1,-";
99 } else if (!strcmp(uart_dp->name, "lom-console")) { 99 } else if (!strcmp(uart_dp->name, "lom-console")) {
100 mode = "9600,8,n,1,-"; 100 mode = "9600,8,n,1,-";
101 } else { 101 } else {
102 struct device_node *dp; 102 struct device_node *dp;
103 char c; 103 char c;
104 104
105 c = 'a'; 105 c = 'a';
106 if (of_console_options) 106 if (of_console_options)
107 c = *of_console_options; 107 c = *of_console_options;
108 108
109 mode_prop[3] = c; 109 mode_prop[3] = c;
110 110
111 dp = of_find_node_by_path("/options"); 111 dp = of_find_node_by_path("/options");
112 mode = of_get_property(dp, mode_prop, NULL); 112 mode = of_get_property(dp, mode_prop, NULL);
113 if (!mode) 113 if (!mode)
114 mode = "9600,8,n,1,-"; 114 mode = "9600,8,n,1,-";
115 } 115 }
116 116
117 cflag = CREAD | HUPCL | CLOCAL; 117 cflag = CREAD | HUPCL | CLOCAL;
118 118
119 s = mode; 119 s = mode;
120 baud = simple_strtoul(s, NULL, 0); 120 baud = simple_strtoul(s, NULL, 0);
121 s = strchr(s, ','); 121 s = strchr(s, ',');
122 bits = simple_strtoul(++s, NULL, 0); 122 bits = simple_strtoul(++s, NULL, 0);
123 s = strchr(s, ','); 123 s = strchr(s, ',');
124 parity = *(++s); 124 parity = *(++s);
125 s = strchr(s, ','); 125 s = strchr(s, ',');
126 stop = simple_strtoul(++s, NULL, 0); 126 stop = simple_strtoul(++s, NULL, 0);
127 s = strchr(s, ','); 127 s = strchr(s, ',');
128 /* XXX handshake is not handled here. */ 128 /* XXX handshake is not handled here. */
129 129
130 switch (baud) { 130 switch (baud) {
131 case 150: cflag |= B150; break; 131 case 150: cflag |= B150; break;
132 case 300: cflag |= B300; break; 132 case 300: cflag |= B300; break;
133 case 600: cflag |= B600; break; 133 case 600: cflag |= B600; break;
134 case 1200: cflag |= B1200; break; 134 case 1200: cflag |= B1200; break;
135 case 2400: cflag |= B2400; break; 135 case 2400: cflag |= B2400; break;
136 case 4800: cflag |= B4800; break; 136 case 4800: cflag |= B4800; break;
137 case 9600: cflag |= B9600; break; 137 case 9600: cflag |= B9600; break;
138 case 19200: cflag |= B19200; break; 138 case 19200: cflag |= B19200; break;
139 case 38400: cflag |= B38400; break; 139 case 38400: cflag |= B38400; break;
140 case 57600: cflag |= B57600; break; 140 case 57600: cflag |= B57600; break;
141 case 115200: cflag |= B115200; break; 141 case 115200: cflag |= B115200; break;
142 case 230400: cflag |= B230400; break; 142 case 230400: cflag |= B230400; break;
143 case 460800: cflag |= B460800; break; 143 case 460800: cflag |= B460800; break;
144 default: baud = 9600; cflag |= B9600; break; 144 default: baud = 9600; cflag |= B9600; break;
145 } 145 }
146 146
147 switch (bits) { 147 switch (bits) {
148 case 5: cflag |= CS5; break; 148 case 5: cflag |= CS5; break;
149 case 6: cflag |= CS6; break; 149 case 6: cflag |= CS6; break;
150 case 7: cflag |= CS7; break; 150 case 7: cflag |= CS7; break;
151 case 8: cflag |= CS8; break; 151 case 8: cflag |= CS8; break;
152 default: cflag |= CS8; break; 152 default: cflag |= CS8; break;
153 } 153 }
154 154
155 switch (parity) { 155 switch (parity) {
156 case 'o': cflag |= (PARENB | PARODD); break; 156 case 'o': cflag |= (PARENB | PARODD); break;
157 case 'e': cflag |= PARENB; break; 157 case 'e': cflag |= PARENB; break;
158 case 'n': default: break; 158 case 'n': default: break;
159 } 159 }
160 160
161 switch (stop) { 161 switch (stop) {
162 case 2: cflag |= CSTOPB; break; 162 case 2: cflag |= CSTOPB; break;
163 case 1: default: break; 163 case 1: default: break;
164 } 164 }
165 165
166 con->cflag = cflag; 166 con->cflag = cflag;
167 } 167 }
168 168
169 /* Sun serial MOUSE auto baud rate detection. */ 169 /* Sun serial MOUSE auto baud rate detection. */
170 static struct mouse_baud_cflag { 170 static struct mouse_baud_cflag {
171 int baud; 171 int baud;
172 unsigned int cflag; 172 unsigned int cflag;
173 } mouse_baud_table[] = { 173 } mouse_baud_table[] = {
174 { 1200, B1200 }, 174 { 1200, B1200 },
175 { 2400, B2400 }, 175 { 2400, B2400 },
176 { 4800, B4800 }, 176 { 4800, B4800 },
177 { 9600, B9600 }, 177 { 9600, B9600 },
178 { -1, ~0 }, 178 { -1, ~0 },
179 { -1, ~0 }, 179 { -1, ~0 },
180 }; 180 };
181 181
182 unsigned int suncore_mouse_baud_cflag_next(unsigned int cflag, int *new_baud) 182 unsigned int suncore_mouse_baud_cflag_next(unsigned int cflag, int *new_baud)
183 { 183 {
184 int i; 184 int i;
185 185
186 for (i = 0; mouse_baud_table[i].baud != -1; i++) 186 for (i = 0; mouse_baud_table[i].baud != -1; i++)
187 if (mouse_baud_table[i].cflag == (cflag & CBAUD)) 187 if (mouse_baud_table[i].cflag == (cflag & CBAUD))
188 break; 188 break;
189 189
190 i += 1; 190 i += 1;
191 if (mouse_baud_table[i].baud == -1) 191 if (mouse_baud_table[i].baud == -1)
192 i = 0; 192 i = 0;
193 193
194 *new_baud = mouse_baud_table[i].baud; 194 *new_baud = mouse_baud_table[i].baud;
195 return mouse_baud_table[i].cflag; 195 return mouse_baud_table[i].cflag;
196 } 196 }
197 197
198 EXPORT_SYMBOL(suncore_mouse_baud_cflag_next); 198 EXPORT_SYMBOL(suncore_mouse_baud_cflag_next);
199 199
200 /* Basically, when the baud rate is wrong the mouse spits out 200 /* Basically, when the baud rate is wrong the mouse spits out
201 * breaks to us. 201 * breaks to us.
202 */ 202 */
203 int suncore_mouse_baud_detection(unsigned char ch, int is_break) 203 int suncore_mouse_baud_detection(unsigned char ch, int is_break)
204 { 204 {
205 static int mouse_got_break = 0; 205 static int mouse_got_break = 0;
206 static int ctr = 0; 206 static int ctr = 0;
207 207
208 if (is_break) { 208 if (is_break) {
209 /* Let a few normal bytes go by before we jump the gun 209 /* Let a few normal bytes go by before we jump the gun
210 * and say we need to try another baud rate. 210 * and say we need to try another baud rate.
211 */ 211 */
212 if (mouse_got_break && ctr < 8) 212 if (mouse_got_break && ctr < 8)
213 return 1; 213 return 1;
214 214
215 /* Ok, we need to try another baud. */ 215 /* Ok, we need to try another baud. */
216 ctr = 0; 216 ctr = 0;
217 mouse_got_break = 1; 217 mouse_got_break = 1;
218 return 2; 218 return 2;
219 } 219 }
220 if (mouse_got_break) { 220 if (mouse_got_break) {
221 ctr++; 221 ctr++;
222 if (ch == 0x87) { 222 if (ch == 0x87) {
223 /* Correct baud rate determined. */ 223 /* Correct baud rate determined. */
224 mouse_got_break = 0; 224 mouse_got_break = 0;
225 } 225 }
226 return 1; 226 return 1;
227 } 227 }
228 return 0; 228 return 0;
229 } 229 }
230 230
231 EXPORT_SYMBOL(suncore_mouse_baud_detection); 231 EXPORT_SYMBOL(suncore_mouse_baud_detection);
232 232
233 static int __init suncore_init(void) 233 static int __init suncore_init(void)
234 { 234 {
235 return 0; 235 return 0;
236 } 236 }
237 237
238 static void __exit suncore_exit(void) 238 static void __exit suncore_exit(void)
239 { 239 {
240 } 240 }
241 241
242 module_init(suncore_init); 242 module_init(suncore_init);
243 module_exit(suncore_exit); 243 module_exit(suncore_exit);
244 244
245 MODULE_AUTHOR("Eddie C. Dost, David S. Miller"); 245 MODULE_AUTHOR("Eddie C. Dost, David S. Miller");
246 MODULE_DESCRIPTION("Sun serial common layer"); 246 MODULE_DESCRIPTION("Sun serial common layer");
247 MODULE_LICENSE("GPL"); 247 MODULE_LICENSE("GPL");
drivers/tty/serial/suncore.h
1 /* suncore.h File was deleted
2 *
3 * Generic SUN serial/kbd/ms layer. Based entirely
4 * upon drivers/sbus/char/sunserial.h which is:
5 *
6 * Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be)
7 *
8 * Port to new UART layer is:
9 *
10 * Copyright (C) 2002 David S. Miller (davem@redhat.com)
11 */
12
13 #ifndef _SERIAL_SUN_H
14 #define _SERIAL_SUN_H
15
16 /* Serial keyboard defines for L1-A processing... */
17 #define SUNKBD_RESET 0xff
18 #define SUNKBD_L1 0x01
19 #define SUNKBD_UP 0x80
20 #define SUNKBD_A 0x4d
21
22 extern unsigned int suncore_mouse_baud_cflag_next(unsigned int, int *);
23 extern int suncore_mouse_baud_detection(unsigned char, int);
24
25 extern int sunserial_register_minors(struct uart_driver *, int);
26 extern void sunserial_unregister_minors(struct uart_driver *, int);
27
28 extern int sunserial_console_match(struct console *, struct device_node *,
29 struct uart_driver *, int, bool);
30 extern void sunserial_console_termios(struct console *,
31 struct device_node *);
32
33 #endif /* !(_SERIAL_SUN_H) */
34 1 /* suncore.h
drivers/tty/serial/sunhv.c
1 /* sunhv.c: Serial driver for SUN4V hypervisor console. 1 /* sunhv.c: Serial driver for SUN4V hypervisor console.
2 * 2 *
3 * Copyright (C) 2006, 2007 David S. Miller (davem@davemloft.net) 3 * Copyright (C) 2006, 2007 David S. Miller (davem@davemloft.net)
4 */ 4 */
5 5
6 #include <linux/module.h> 6 #include <linux/module.h>
7 #include <linux/kernel.h> 7 #include <linux/kernel.h>
8 #include <linux/errno.h> 8 #include <linux/errno.h>
9 #include <linux/tty.h> 9 #include <linux/tty.h>
10 #include <linux/tty_flip.h> 10 #include <linux/tty_flip.h>
11 #include <linux/major.h> 11 #include <linux/major.h>
12 #include <linux/circ_buf.h> 12 #include <linux/circ_buf.h>
13 #include <linux/serial.h> 13 #include <linux/serial.h>
14 #include <linux/sysrq.h> 14 #include <linux/sysrq.h>
15 #include <linux/console.h> 15 #include <linux/console.h>
16 #include <linux/spinlock.h> 16 #include <linux/spinlock.h>
17 #include <linux/slab.h> 17 #include <linux/slab.h>
18 #include <linux/delay.h> 18 #include <linux/delay.h>
19 #include <linux/init.h> 19 #include <linux/init.h>
20 #include <linux/of_device.h> 20 #include <linux/of_device.h>
21 21
22 #include <asm/hypervisor.h> 22 #include <asm/hypervisor.h>
23 #include <asm/spitfire.h> 23 #include <asm/spitfire.h>
24 #include <asm/prom.h> 24 #include <asm/prom.h>
25 #include <asm/irq.h> 25 #include <asm/irq.h>
26 26
27 #if defined(CONFIG_MAGIC_SYSRQ) 27 #if defined(CONFIG_MAGIC_SYSRQ)
28 #define SUPPORT_SYSRQ 28 #define SUPPORT_SYSRQ
29 #endif 29 #endif
30 30
31 #include <linux/serial_core.h> 31 #include <linux/serial_core.h>
32 32 #include <linux/sunserialcore.h>
33 #include "suncore.h"
34 33
35 #define CON_BREAK ((long)-1) 34 #define CON_BREAK ((long)-1)
36 #define CON_HUP ((long)-2) 35 #define CON_HUP ((long)-2)
37 36
38 #define IGNORE_BREAK 0x1 37 #define IGNORE_BREAK 0x1
39 #define IGNORE_ALL 0x2 38 #define IGNORE_ALL 0x2
40 39
41 static char *con_write_page; 40 static char *con_write_page;
42 static char *con_read_page; 41 static char *con_read_page;
43 42
44 static int hung_up = 0; 43 static int hung_up = 0;
45 44
46 static void transmit_chars_putchar(struct uart_port *port, struct circ_buf *xmit) 45 static void transmit_chars_putchar(struct uart_port *port, struct circ_buf *xmit)
47 { 46 {
48 while (!uart_circ_empty(xmit)) { 47 while (!uart_circ_empty(xmit)) {
49 long status = sun4v_con_putchar(xmit->buf[xmit->tail]); 48 long status = sun4v_con_putchar(xmit->buf[xmit->tail]);
50 49
51 if (status != HV_EOK) 50 if (status != HV_EOK)
52 break; 51 break;
53 52
54 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); 53 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
55 port->icount.tx++; 54 port->icount.tx++;
56 } 55 }
57 } 56 }
58 57
59 static void transmit_chars_write(struct uart_port *port, struct circ_buf *xmit) 58 static void transmit_chars_write(struct uart_port *port, struct circ_buf *xmit)
60 { 59 {
61 while (!uart_circ_empty(xmit)) { 60 while (!uart_circ_empty(xmit)) {
62 unsigned long ra = __pa(xmit->buf + xmit->tail); 61 unsigned long ra = __pa(xmit->buf + xmit->tail);
63 unsigned long len, status, sent; 62 unsigned long len, status, sent;
64 63
65 len = CIRC_CNT_TO_END(xmit->head, xmit->tail, 64 len = CIRC_CNT_TO_END(xmit->head, xmit->tail,
66 UART_XMIT_SIZE); 65 UART_XMIT_SIZE);
67 status = sun4v_con_write(ra, len, &sent); 66 status = sun4v_con_write(ra, len, &sent);
68 if (status != HV_EOK) 67 if (status != HV_EOK)
69 break; 68 break;
70 xmit->tail = (xmit->tail + sent) & (UART_XMIT_SIZE - 1); 69 xmit->tail = (xmit->tail + sent) & (UART_XMIT_SIZE - 1);
71 port->icount.tx += sent; 70 port->icount.tx += sent;
72 } 71 }
73 } 72 }
74 73
75 static int receive_chars_getchar(struct uart_port *port, struct tty_struct *tty) 74 static int receive_chars_getchar(struct uart_port *port, struct tty_struct *tty)
76 { 75 {
77 int saw_console_brk = 0; 76 int saw_console_brk = 0;
78 int limit = 10000; 77 int limit = 10000;
79 78
80 while (limit-- > 0) { 79 while (limit-- > 0) {
81 long status; 80 long status;
82 long c = sun4v_con_getchar(&status); 81 long c = sun4v_con_getchar(&status);
83 82
84 if (status == HV_EWOULDBLOCK) 83 if (status == HV_EWOULDBLOCK)
85 break; 84 break;
86 85
87 if (c == CON_BREAK) { 86 if (c == CON_BREAK) {
88 if (uart_handle_break(port)) 87 if (uart_handle_break(port))
89 continue; 88 continue;
90 saw_console_brk = 1; 89 saw_console_brk = 1;
91 c = 0; 90 c = 0;
92 } 91 }
93 92
94 if (c == CON_HUP) { 93 if (c == CON_HUP) {
95 hung_up = 1; 94 hung_up = 1;
96 uart_handle_dcd_change(port, 0); 95 uart_handle_dcd_change(port, 0);
97 } else if (hung_up) { 96 } else if (hung_up) {
98 hung_up = 0; 97 hung_up = 0;
99 uart_handle_dcd_change(port, 1); 98 uart_handle_dcd_change(port, 1);
100 } 99 }
101 100
102 if (tty == NULL) { 101 if (tty == NULL) {
103 uart_handle_sysrq_char(port, c); 102 uart_handle_sysrq_char(port, c);
104 continue; 103 continue;
105 } 104 }
106 105
107 port->icount.rx++; 106 port->icount.rx++;
108 107
109 if (uart_handle_sysrq_char(port, c)) 108 if (uart_handle_sysrq_char(port, c))
110 continue; 109 continue;
111 110
112 tty_insert_flip_char(tty, c, TTY_NORMAL); 111 tty_insert_flip_char(tty, c, TTY_NORMAL);
113 } 112 }
114 113
115 return saw_console_brk; 114 return saw_console_brk;
116 } 115 }
117 116
118 static int receive_chars_read(struct uart_port *port, struct tty_struct *tty) 117 static int receive_chars_read(struct uart_port *port, struct tty_struct *tty)
119 { 118 {
120 int saw_console_brk = 0; 119 int saw_console_brk = 0;
121 int limit = 10000; 120 int limit = 10000;
122 121
123 while (limit-- > 0) { 122 while (limit-- > 0) {
124 unsigned long ra = __pa(con_read_page); 123 unsigned long ra = __pa(con_read_page);
125 unsigned long bytes_read, i; 124 unsigned long bytes_read, i;
126 long stat = sun4v_con_read(ra, PAGE_SIZE, &bytes_read); 125 long stat = sun4v_con_read(ra, PAGE_SIZE, &bytes_read);
127 126
128 if (stat != HV_EOK) { 127 if (stat != HV_EOK) {
129 bytes_read = 0; 128 bytes_read = 0;
130 129
131 if (stat == CON_BREAK) { 130 if (stat == CON_BREAK) {
132 if (uart_handle_break(port)) 131 if (uart_handle_break(port))
133 continue; 132 continue;
134 saw_console_brk = 1; 133 saw_console_brk = 1;
135 *con_read_page = 0; 134 *con_read_page = 0;
136 bytes_read = 1; 135 bytes_read = 1;
137 } else if (stat == CON_HUP) { 136 } else if (stat == CON_HUP) {
138 hung_up = 1; 137 hung_up = 1;
139 uart_handle_dcd_change(port, 0); 138 uart_handle_dcd_change(port, 0);
140 continue; 139 continue;
141 } else { 140 } else {
142 /* HV_EWOULDBLOCK, etc. */ 141 /* HV_EWOULDBLOCK, etc. */
143 break; 142 break;
144 } 143 }
145 } 144 }
146 145
147 if (hung_up) { 146 if (hung_up) {
148 hung_up = 0; 147 hung_up = 0;
149 uart_handle_dcd_change(port, 1); 148 uart_handle_dcd_change(port, 1);
150 } 149 }
151 150
152 for (i = 0; i < bytes_read; i++) 151 for (i = 0; i < bytes_read; i++)
153 uart_handle_sysrq_char(port, con_read_page[i]); 152 uart_handle_sysrq_char(port, con_read_page[i]);
154 153
155 if (tty == NULL) 154 if (tty == NULL)
156 continue; 155 continue;
157 156
158 port->icount.rx += bytes_read; 157 port->icount.rx += bytes_read;
159 158
160 tty_insert_flip_string(tty, con_read_page, bytes_read); 159 tty_insert_flip_string(tty, con_read_page, bytes_read);
161 } 160 }
162 161
163 return saw_console_brk; 162 return saw_console_brk;
164 } 163 }
165 164
166 struct sunhv_ops { 165 struct sunhv_ops {
167 void (*transmit_chars)(struct uart_port *port, struct circ_buf *xmit); 166 void (*transmit_chars)(struct uart_port *port, struct circ_buf *xmit);
168 int (*receive_chars)(struct uart_port *port, struct tty_struct *tty); 167 int (*receive_chars)(struct uart_port *port, struct tty_struct *tty);
169 }; 168 };
170 169
171 static struct sunhv_ops bychar_ops = { 170 static struct sunhv_ops bychar_ops = {
172 .transmit_chars = transmit_chars_putchar, 171 .transmit_chars = transmit_chars_putchar,
173 .receive_chars = receive_chars_getchar, 172 .receive_chars = receive_chars_getchar,
174 }; 173 };
175 174
176 static struct sunhv_ops bywrite_ops = { 175 static struct sunhv_ops bywrite_ops = {
177 .transmit_chars = transmit_chars_write, 176 .transmit_chars = transmit_chars_write,
178 .receive_chars = receive_chars_read, 177 .receive_chars = receive_chars_read,
179 }; 178 };
180 179
181 static struct sunhv_ops *sunhv_ops = &bychar_ops; 180 static struct sunhv_ops *sunhv_ops = &bychar_ops;
182 181
183 static struct tty_struct *receive_chars(struct uart_port *port) 182 static struct tty_struct *receive_chars(struct uart_port *port)
184 { 183 {
185 struct tty_struct *tty = NULL; 184 struct tty_struct *tty = NULL;
186 185
187 if (port->state != NULL) /* Unopened serial console */ 186 if (port->state != NULL) /* Unopened serial console */
188 tty = port->state->port.tty; 187 tty = port->state->port.tty;
189 188
190 if (sunhv_ops->receive_chars(port, tty)) 189 if (sunhv_ops->receive_chars(port, tty))
191 sun_do_break(); 190 sun_do_break();
192 191
193 return tty; 192 return tty;
194 } 193 }
195 194
196 static void transmit_chars(struct uart_port *port) 195 static void transmit_chars(struct uart_port *port)
197 { 196 {
198 struct circ_buf *xmit; 197 struct circ_buf *xmit;
199 198
200 if (!port->state) 199 if (!port->state)
201 return; 200 return;
202 201
203 xmit = &port->state->xmit; 202 xmit = &port->state->xmit;
204 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) 203 if (uart_circ_empty(xmit) || uart_tx_stopped(port))
205 return; 204 return;
206 205
207 sunhv_ops->transmit_chars(port, xmit); 206 sunhv_ops->transmit_chars(port, xmit);
208 207
209 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) 208 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
210 uart_write_wakeup(port); 209 uart_write_wakeup(port);
211 } 210 }
212 211
213 static irqreturn_t sunhv_interrupt(int irq, void *dev_id) 212 static irqreturn_t sunhv_interrupt(int irq, void *dev_id)
214 { 213 {
215 struct uart_port *port = dev_id; 214 struct uart_port *port = dev_id;
216 struct tty_struct *tty; 215 struct tty_struct *tty;
217 unsigned long flags; 216 unsigned long flags;
218 217
219 spin_lock_irqsave(&port->lock, flags); 218 spin_lock_irqsave(&port->lock, flags);
220 tty = receive_chars(port); 219 tty = receive_chars(port);
221 transmit_chars(port); 220 transmit_chars(port);
222 spin_unlock_irqrestore(&port->lock, flags); 221 spin_unlock_irqrestore(&port->lock, flags);
223 222
224 if (tty) 223 if (tty)
225 tty_flip_buffer_push(tty); 224 tty_flip_buffer_push(tty);
226 225
227 return IRQ_HANDLED; 226 return IRQ_HANDLED;
228 } 227 }
229 228
230 /* port->lock is not held. */ 229 /* port->lock is not held. */
231 static unsigned int sunhv_tx_empty(struct uart_port *port) 230 static unsigned int sunhv_tx_empty(struct uart_port *port)
232 { 231 {
233 /* Transmitter is always empty for us. If the circ buffer 232 /* Transmitter is always empty for us. If the circ buffer
234 * is non-empty or there is an x_char pending, our caller 233 * is non-empty or there is an x_char pending, our caller
235 * will do the right thing and ignore what we return here. 234 * will do the right thing and ignore what we return here.
236 */ 235 */
237 return TIOCSER_TEMT; 236 return TIOCSER_TEMT;
238 } 237 }
239 238
240 /* port->lock held by caller. */ 239 /* port->lock held by caller. */
241 static void sunhv_set_mctrl(struct uart_port *port, unsigned int mctrl) 240 static void sunhv_set_mctrl(struct uart_port *port, unsigned int mctrl)
242 { 241 {
243 return; 242 return;
244 } 243 }
245 244
246 /* port->lock is held by caller and interrupts are disabled. */ 245 /* port->lock is held by caller and interrupts are disabled. */
247 static unsigned int sunhv_get_mctrl(struct uart_port *port) 246 static unsigned int sunhv_get_mctrl(struct uart_port *port)
248 { 247 {
249 return TIOCM_DSR | TIOCM_CAR | TIOCM_CTS; 248 return TIOCM_DSR | TIOCM_CAR | TIOCM_CTS;
250 } 249 }
251 250
252 /* port->lock held by caller. */ 251 /* port->lock held by caller. */
253 static void sunhv_stop_tx(struct uart_port *port) 252 static void sunhv_stop_tx(struct uart_port *port)
254 { 253 {
255 return; 254 return;
256 } 255 }
257 256
258 /* port->lock held by caller. */ 257 /* port->lock held by caller. */
259 static void sunhv_start_tx(struct uart_port *port) 258 static void sunhv_start_tx(struct uart_port *port)
260 { 259 {
261 transmit_chars(port); 260 transmit_chars(port);
262 } 261 }
263 262
264 /* port->lock is not held. */ 263 /* port->lock is not held. */
265 static void sunhv_send_xchar(struct uart_port *port, char ch) 264 static void sunhv_send_xchar(struct uart_port *port, char ch)
266 { 265 {
267 unsigned long flags; 266 unsigned long flags;
268 int limit = 10000; 267 int limit = 10000;
269 268
270 spin_lock_irqsave(&port->lock, flags); 269 spin_lock_irqsave(&port->lock, flags);
271 270
272 while (limit-- > 0) { 271 while (limit-- > 0) {
273 long status = sun4v_con_putchar(ch); 272 long status = sun4v_con_putchar(ch);
274 if (status == HV_EOK) 273 if (status == HV_EOK)
275 break; 274 break;
276 udelay(1); 275 udelay(1);
277 } 276 }
278 277
279 spin_unlock_irqrestore(&port->lock, flags); 278 spin_unlock_irqrestore(&port->lock, flags);
280 } 279 }
281 280
282 /* port->lock held by caller. */ 281 /* port->lock held by caller. */
283 static void sunhv_stop_rx(struct uart_port *port) 282 static void sunhv_stop_rx(struct uart_port *port)
284 { 283 {
285 } 284 }
286 285
287 /* port->lock held by caller. */ 286 /* port->lock held by caller. */
288 static void sunhv_enable_ms(struct uart_port *port) 287 static void sunhv_enable_ms(struct uart_port *port)
289 { 288 {
290 } 289 }
291 290
292 /* port->lock is not held. */ 291 /* port->lock is not held. */
293 static void sunhv_break_ctl(struct uart_port *port, int break_state) 292 static void sunhv_break_ctl(struct uart_port *port, int break_state)
294 { 293 {
295 if (break_state) { 294 if (break_state) {
296 unsigned long flags; 295 unsigned long flags;
297 int limit = 10000; 296 int limit = 10000;
298 297
299 spin_lock_irqsave(&port->lock, flags); 298 spin_lock_irqsave(&port->lock, flags);
300 299
301 while (limit-- > 0) { 300 while (limit-- > 0) {
302 long status = sun4v_con_putchar(CON_BREAK); 301 long status = sun4v_con_putchar(CON_BREAK);
303 if (status == HV_EOK) 302 if (status == HV_EOK)
304 break; 303 break;
305 udelay(1); 304 udelay(1);
306 } 305 }
307 306
308 spin_unlock_irqrestore(&port->lock, flags); 307 spin_unlock_irqrestore(&port->lock, flags);
309 } 308 }
310 } 309 }
311 310
312 /* port->lock is not held. */ 311 /* port->lock is not held. */
313 static int sunhv_startup(struct uart_port *port) 312 static int sunhv_startup(struct uart_port *port)
314 { 313 {
315 return 0; 314 return 0;
316 } 315 }
317 316
318 /* port->lock is not held. */ 317 /* port->lock is not held. */
319 static void sunhv_shutdown(struct uart_port *port) 318 static void sunhv_shutdown(struct uart_port *port)
320 { 319 {
321 } 320 }
322 321
323 /* port->lock is not held. */ 322 /* port->lock is not held. */
324 static void sunhv_set_termios(struct uart_port *port, struct ktermios *termios, 323 static void sunhv_set_termios(struct uart_port *port, struct ktermios *termios,
325 struct ktermios *old) 324 struct ktermios *old)
326 { 325 {
327 unsigned int baud = uart_get_baud_rate(port, termios, old, 0, 4000000); 326 unsigned int baud = uart_get_baud_rate(port, termios, old, 0, 4000000);
328 unsigned int quot = uart_get_divisor(port, baud); 327 unsigned int quot = uart_get_divisor(port, baud);
329 unsigned int iflag, cflag; 328 unsigned int iflag, cflag;
330 unsigned long flags; 329 unsigned long flags;
331 330
332 spin_lock_irqsave(&port->lock, flags); 331 spin_lock_irqsave(&port->lock, flags);
333 332
334 iflag = termios->c_iflag; 333 iflag = termios->c_iflag;
335 cflag = termios->c_cflag; 334 cflag = termios->c_cflag;
336 335
337 port->ignore_status_mask = 0; 336 port->ignore_status_mask = 0;
338 if (iflag & IGNBRK) 337 if (iflag & IGNBRK)
339 port->ignore_status_mask |= IGNORE_BREAK; 338 port->ignore_status_mask |= IGNORE_BREAK;
340 if ((cflag & CREAD) == 0) 339 if ((cflag & CREAD) == 0)
341 port->ignore_status_mask |= IGNORE_ALL; 340 port->ignore_status_mask |= IGNORE_ALL;
342 341
343 /* XXX */ 342 /* XXX */
344 uart_update_timeout(port, cflag, 343 uart_update_timeout(port, cflag,
345 (port->uartclk / (16 * quot))); 344 (port->uartclk / (16 * quot)));
346 345
347 spin_unlock_irqrestore(&port->lock, flags); 346 spin_unlock_irqrestore(&port->lock, flags);
348 } 347 }
349 348
350 static const char *sunhv_type(struct uart_port *port) 349 static const char *sunhv_type(struct uart_port *port)
351 { 350 {
352 return "SUN4V HCONS"; 351 return "SUN4V HCONS";
353 } 352 }
354 353
355 static void sunhv_release_port(struct uart_port *port) 354 static void sunhv_release_port(struct uart_port *port)
356 { 355 {
357 } 356 }
358 357
359 static int sunhv_request_port(struct uart_port *port) 358 static int sunhv_request_port(struct uart_port *port)
360 { 359 {
361 return 0; 360 return 0;
362 } 361 }
363 362
364 static void sunhv_config_port(struct uart_port *port, int flags) 363 static void sunhv_config_port(struct uart_port *port, int flags)
365 { 364 {
366 } 365 }
367 366
368 static int sunhv_verify_port(struct uart_port *port, struct serial_struct *ser) 367 static int sunhv_verify_port(struct uart_port *port, struct serial_struct *ser)
369 { 368 {
370 return -EINVAL; 369 return -EINVAL;
371 } 370 }
372 371
373 static struct uart_ops sunhv_pops = { 372 static struct uart_ops sunhv_pops = {
374 .tx_empty = sunhv_tx_empty, 373 .tx_empty = sunhv_tx_empty,
375 .set_mctrl = sunhv_set_mctrl, 374 .set_mctrl = sunhv_set_mctrl,
376 .get_mctrl = sunhv_get_mctrl, 375 .get_mctrl = sunhv_get_mctrl,
377 .stop_tx = sunhv_stop_tx, 376 .stop_tx = sunhv_stop_tx,
378 .start_tx = sunhv_start_tx, 377 .start_tx = sunhv_start_tx,
379 .send_xchar = sunhv_send_xchar, 378 .send_xchar = sunhv_send_xchar,
380 .stop_rx = sunhv_stop_rx, 379 .stop_rx = sunhv_stop_rx,
381 .enable_ms = sunhv_enable_ms, 380 .enable_ms = sunhv_enable_ms,
382 .break_ctl = sunhv_break_ctl, 381 .break_ctl = sunhv_break_ctl,
383 .startup = sunhv_startup, 382 .startup = sunhv_startup,
384 .shutdown = sunhv_shutdown, 383 .shutdown = sunhv_shutdown,
385 .set_termios = sunhv_set_termios, 384 .set_termios = sunhv_set_termios,
386 .type = sunhv_type, 385 .type = sunhv_type,
387 .release_port = sunhv_release_port, 386 .release_port = sunhv_release_port,
388 .request_port = sunhv_request_port, 387 .request_port = sunhv_request_port,
389 .config_port = sunhv_config_port, 388 .config_port = sunhv_config_port,
390 .verify_port = sunhv_verify_port, 389 .verify_port = sunhv_verify_port,
391 }; 390 };
392 391
393 static struct uart_driver sunhv_reg = { 392 static struct uart_driver sunhv_reg = {
394 .owner = THIS_MODULE, 393 .owner = THIS_MODULE,
395 .driver_name = "sunhv", 394 .driver_name = "sunhv",
396 .dev_name = "ttyS", 395 .dev_name = "ttyS",
397 .major = TTY_MAJOR, 396 .major = TTY_MAJOR,
398 }; 397 };
399 398
400 static struct uart_port *sunhv_port; 399 static struct uart_port *sunhv_port;
401 400
402 /* Copy 's' into the con_write_page, decoding "\n" into 401 /* Copy 's' into the con_write_page, decoding "\n" into
403 * "\r\n" along the way. We have to return two lengths 402 * "\r\n" along the way. We have to return two lengths
404 * because the caller needs to know how much to advance 403 * because the caller needs to know how much to advance
405 * 's' and also how many bytes to output via con_write_page. 404 * 's' and also how many bytes to output via con_write_page.
406 */ 405 */
407 static int fill_con_write_page(const char *s, unsigned int n, 406 static int fill_con_write_page(const char *s, unsigned int n,
408 unsigned long *page_bytes) 407 unsigned long *page_bytes)
409 { 408 {
410 const char *orig_s = s; 409 const char *orig_s = s;
411 char *p = con_write_page; 410 char *p = con_write_page;
412 int left = PAGE_SIZE; 411 int left = PAGE_SIZE;
413 412
414 while (n--) { 413 while (n--) {
415 if (*s == '\n') { 414 if (*s == '\n') {
416 if (left < 2) 415 if (left < 2)
417 break; 416 break;
418 *p++ = '\r'; 417 *p++ = '\r';
419 left--; 418 left--;
420 } else if (left < 1) 419 } else if (left < 1)
421 break; 420 break;
422 *p++ = *s++; 421 *p++ = *s++;
423 left--; 422 left--;
424 } 423 }
425 *page_bytes = p - con_write_page; 424 *page_bytes = p - con_write_page;
426 return s - orig_s; 425 return s - orig_s;
427 } 426 }
428 427
429 static void sunhv_console_write_paged(struct console *con, const char *s, unsigned n) 428 static void sunhv_console_write_paged(struct console *con, const char *s, unsigned n)
430 { 429 {
431 struct uart_port *port = sunhv_port; 430 struct uart_port *port = sunhv_port;
432 unsigned long flags; 431 unsigned long flags;
433 int locked = 1; 432 int locked = 1;
434 433
435 local_irq_save(flags); 434 local_irq_save(flags);
436 if (port->sysrq) { 435 if (port->sysrq) {
437 locked = 0; 436 locked = 0;
438 } else if (oops_in_progress) { 437 } else if (oops_in_progress) {
439 locked = spin_trylock(&port->lock); 438 locked = spin_trylock(&port->lock);
440 } else 439 } else
441 spin_lock(&port->lock); 440 spin_lock(&port->lock);
442 441
443 while (n > 0) { 442 while (n > 0) {
444 unsigned long ra = __pa(con_write_page); 443 unsigned long ra = __pa(con_write_page);
445 unsigned long page_bytes; 444 unsigned long page_bytes;
446 unsigned int cpy = fill_con_write_page(s, n, 445 unsigned int cpy = fill_con_write_page(s, n,
447 &page_bytes); 446 &page_bytes);
448 447
449 n -= cpy; 448 n -= cpy;
450 s += cpy; 449 s += cpy;
451 while (page_bytes > 0) { 450 while (page_bytes > 0) {
452 unsigned long written; 451 unsigned long written;
453 int limit = 1000000; 452 int limit = 1000000;
454 453
455 while (limit--) { 454 while (limit--) {
456 unsigned long stat; 455 unsigned long stat;
457 456
458 stat = sun4v_con_write(ra, page_bytes, 457 stat = sun4v_con_write(ra, page_bytes,
459 &written); 458 &written);
460 if (stat == HV_EOK) 459 if (stat == HV_EOK)
461 break; 460 break;
462 udelay(1); 461 udelay(1);
463 } 462 }
464 if (limit < 0) 463 if (limit < 0)
465 break; 464 break;
466 page_bytes -= written; 465 page_bytes -= written;
467 ra += written; 466 ra += written;
468 } 467 }
469 } 468 }
470 469
471 if (locked) 470 if (locked)
472 spin_unlock(&port->lock); 471 spin_unlock(&port->lock);
473 local_irq_restore(flags); 472 local_irq_restore(flags);
474 } 473 }
475 474
476 static inline void sunhv_console_putchar(struct uart_port *port, char c) 475 static inline void sunhv_console_putchar(struct uart_port *port, char c)
477 { 476 {
478 int limit = 1000000; 477 int limit = 1000000;
479 478
480 while (limit-- > 0) { 479 while (limit-- > 0) {
481 long status = sun4v_con_putchar(c); 480 long status = sun4v_con_putchar(c);
482 if (status == HV_EOK) 481 if (status == HV_EOK)
483 break; 482 break;
484 udelay(1); 483 udelay(1);
485 } 484 }
486 } 485 }
487 486
488 static void sunhv_console_write_bychar(struct console *con, const char *s, unsigned n) 487 static void sunhv_console_write_bychar(struct console *con, const char *s, unsigned n)
489 { 488 {
490 struct uart_port *port = sunhv_port; 489 struct uart_port *port = sunhv_port;
491 unsigned long flags; 490 unsigned long flags;
492 int i, locked = 1; 491 int i, locked = 1;
493 492
494 local_irq_save(flags); 493 local_irq_save(flags);
495 if (port->sysrq) { 494 if (port->sysrq) {
496 locked = 0; 495 locked = 0;
497 } else if (oops_in_progress) { 496 } else if (oops_in_progress) {
498 locked = spin_trylock(&port->lock); 497 locked = spin_trylock(&port->lock);
499 } else 498 } else
500 spin_lock(&port->lock); 499 spin_lock(&port->lock);
501 500
502 for (i = 0; i < n; i++) { 501 for (i = 0; i < n; i++) {
503 if (*s == '\n') 502 if (*s == '\n')
504 sunhv_console_putchar(port, '\r'); 503 sunhv_console_putchar(port, '\r');
505 sunhv_console_putchar(port, *s++); 504 sunhv_console_putchar(port, *s++);
506 } 505 }
507 506
508 if (locked) 507 if (locked)
509 spin_unlock(&port->lock); 508 spin_unlock(&port->lock);
510 local_irq_restore(flags); 509 local_irq_restore(flags);
511 } 510 }
512 511
513 static struct console sunhv_console = { 512 static struct console sunhv_console = {
514 .name = "ttyHV", 513 .name = "ttyHV",
515 .write = sunhv_console_write_bychar, 514 .write = sunhv_console_write_bychar,
516 .device = uart_console_device, 515 .device = uart_console_device,
517 .flags = CON_PRINTBUFFER, 516 .flags = CON_PRINTBUFFER,
518 .index = -1, 517 .index = -1,
519 .data = &sunhv_reg, 518 .data = &sunhv_reg,
520 }; 519 };
521 520
522 static int __devinit hv_probe(struct platform_device *op) 521 static int __devinit hv_probe(struct platform_device *op)
523 { 522 {
524 struct uart_port *port; 523 struct uart_port *port;
525 unsigned long minor; 524 unsigned long minor;
526 int err; 525 int err;
527 526
528 if (op->archdata.irqs[0] == 0xffffffff) 527 if (op->archdata.irqs[0] == 0xffffffff)
529 return -ENODEV; 528 return -ENODEV;
530 529
531 port = kzalloc(sizeof(struct uart_port), GFP_KERNEL); 530 port = kzalloc(sizeof(struct uart_port), GFP_KERNEL);
532 if (unlikely(!port)) 531 if (unlikely(!port))
533 return -ENOMEM; 532 return -ENOMEM;
534 533
535 minor = 1; 534 minor = 1;
536 if (sun4v_hvapi_register(HV_GRP_CORE, 1, &minor) == 0 && 535 if (sun4v_hvapi_register(HV_GRP_CORE, 1, &minor) == 0 &&
537 minor >= 1) { 536 minor >= 1) {
538 err = -ENOMEM; 537 err = -ENOMEM;
539 con_write_page = kzalloc(PAGE_SIZE, GFP_KERNEL); 538 con_write_page = kzalloc(PAGE_SIZE, GFP_KERNEL);
540 if (!con_write_page) 539 if (!con_write_page)
541 goto out_free_port; 540 goto out_free_port;
542 541
543 con_read_page = kzalloc(PAGE_SIZE, GFP_KERNEL); 542 con_read_page = kzalloc(PAGE_SIZE, GFP_KERNEL);
544 if (!con_read_page) 543 if (!con_read_page)
545 goto out_free_con_write_page; 544 goto out_free_con_write_page;
546 545
547 sunhv_console.write = sunhv_console_write_paged; 546 sunhv_console.write = sunhv_console_write_paged;
548 sunhv_ops = &bywrite_ops; 547 sunhv_ops = &bywrite_ops;
549 } 548 }
550 549
551 sunhv_port = port; 550 sunhv_port = port;
552 551
553 port->line = 0; 552 port->line = 0;
554 port->ops = &sunhv_pops; 553 port->ops = &sunhv_pops;
555 port->type = PORT_SUNHV; 554 port->type = PORT_SUNHV;
556 port->uartclk = ( 29491200 / 16 ); /* arbitrary */ 555 port->uartclk = ( 29491200 / 16 ); /* arbitrary */
557 556
558 port->membase = (unsigned char __iomem *) __pa(port); 557 port->membase = (unsigned char __iomem *) __pa(port);
559 558
560 port->irq = op->archdata.irqs[0]; 559 port->irq = op->archdata.irqs[0];
561 560
562 port->dev = &op->dev; 561 port->dev = &op->dev;
563 562
564 err = sunserial_register_minors(&sunhv_reg, 1); 563 err = sunserial_register_minors(&sunhv_reg, 1);
565 if (err) 564 if (err)
566 goto out_free_con_read_page; 565 goto out_free_con_read_page;
567 566
568 sunserial_console_match(&sunhv_console, op->dev.of_node, 567 sunserial_console_match(&sunhv_console, op->dev.of_node,
569 &sunhv_reg, port->line, false); 568 &sunhv_reg, port->line, false);
570 569
571 err = uart_add_one_port(&sunhv_reg, port); 570 err = uart_add_one_port(&sunhv_reg, port);
572 if (err) 571 if (err)
573 goto out_unregister_driver; 572 goto out_unregister_driver;
574 573
575 err = request_irq(port->irq, sunhv_interrupt, 0, "hvcons", port); 574 err = request_irq(port->irq, sunhv_interrupt, 0, "hvcons", port);
576 if (err) 575 if (err)
577 goto out_remove_port; 576 goto out_remove_port;
578 577
579 dev_set_drvdata(&op->dev, port); 578 dev_set_drvdata(&op->dev, port);
580 579
581 return 0; 580 return 0;
582 581
583 out_remove_port: 582 out_remove_port:
584 uart_remove_one_port(&sunhv_reg, port); 583 uart_remove_one_port(&sunhv_reg, port);
585 584
586 out_unregister_driver: 585 out_unregister_driver:
587 sunserial_unregister_minors(&sunhv_reg, 1); 586 sunserial_unregister_minors(&sunhv_reg, 1);
588 587
589 out_free_con_read_page: 588 out_free_con_read_page:
590 kfree(con_read_page); 589 kfree(con_read_page);
591 590
592 out_free_con_write_page: 591 out_free_con_write_page:
593 kfree(con_write_page); 592 kfree(con_write_page);
594 593
595 out_free_port: 594 out_free_port:
596 kfree(port); 595 kfree(port);
597 sunhv_port = NULL; 596 sunhv_port = NULL;
598 return err; 597 return err;
599 } 598 }
600 599
601 static int __devexit hv_remove(struct platform_device *dev) 600 static int __devexit hv_remove(struct platform_device *dev)
602 { 601 {
603 struct uart_port *port = dev_get_drvdata(&dev->dev); 602 struct uart_port *port = dev_get_drvdata(&dev->dev);
604 603
605 free_irq(port->irq, port); 604 free_irq(port->irq, port);
606 605
607 uart_remove_one_port(&sunhv_reg, port); 606 uart_remove_one_port(&sunhv_reg, port);
608 607
609 sunserial_unregister_minors(&sunhv_reg, 1); 608 sunserial_unregister_minors(&sunhv_reg, 1);
610 609
611 kfree(port); 610 kfree(port);
612 sunhv_port = NULL; 611 sunhv_port = NULL;
613 612
614 dev_set_drvdata(&dev->dev, NULL); 613 dev_set_drvdata(&dev->dev, NULL);
615 614
616 return 0; 615 return 0;
617 } 616 }
618 617
619 static const struct of_device_id hv_match[] = { 618 static const struct of_device_id hv_match[] = {
620 { 619 {
621 .name = "console", 620 .name = "console",
622 .compatible = "qcn", 621 .compatible = "qcn",
623 }, 622 },
624 { 623 {
625 .name = "console", 624 .name = "console",
626 .compatible = "SUNW,sun4v-console", 625 .compatible = "SUNW,sun4v-console",
627 }, 626 },
628 {}, 627 {},
629 }; 628 };
630 MODULE_DEVICE_TABLE(of, hv_match); 629 MODULE_DEVICE_TABLE(of, hv_match);
631 630
632 static struct platform_driver hv_driver = { 631 static struct platform_driver hv_driver = {
633 .driver = { 632 .driver = {
634 .name = "hv", 633 .name = "hv",
635 .owner = THIS_MODULE, 634 .owner = THIS_MODULE,
636 .of_match_table = hv_match, 635 .of_match_table = hv_match,
637 }, 636 },
638 .probe = hv_probe, 637 .probe = hv_probe,
639 .remove = __devexit_p(hv_remove), 638 .remove = __devexit_p(hv_remove),
640 }; 639 };
641 640
642 static int __init sunhv_init(void) 641 static int __init sunhv_init(void)
643 { 642 {
644 if (tlb_type != hypervisor) 643 if (tlb_type != hypervisor)
645 return -ENODEV; 644 return -ENODEV;
646 645
647 return platform_driver_register(&hv_driver); 646 return platform_driver_register(&hv_driver);
648 } 647 }
649 648
650 static void __exit sunhv_exit(void) 649 static void __exit sunhv_exit(void)
651 { 650 {
652 platform_driver_unregister(&hv_driver); 651 platform_driver_unregister(&hv_driver);
653 } 652 }
654 653
655 module_init(sunhv_init); 654 module_init(sunhv_init);
656 module_exit(sunhv_exit); 655 module_exit(sunhv_exit);
657 656
658 MODULE_AUTHOR("David S. Miller"); 657 MODULE_AUTHOR("David S. Miller");
659 MODULE_DESCRIPTION("SUN4V Hypervisor console driver"); 658 MODULE_DESCRIPTION("SUN4V Hypervisor console driver");
660 MODULE_VERSION("2.0"); 659 MODULE_VERSION("2.0");
661 MODULE_LICENSE("GPL"); 660 MODULE_LICENSE("GPL");
662 661
drivers/tty/serial/sunsab.c
1 /* sunsab.c: ASYNC Driver for the SIEMENS SAB82532 DUSCC. 1 /* sunsab.c: ASYNC Driver for the SIEMENS SAB82532 DUSCC.
2 * 2 *
3 * Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be) 3 * Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be)
4 * Copyright (C) 2002, 2006 David S. Miller (davem@davemloft.net) 4 * Copyright (C) 2002, 2006 David S. Miller (davem@davemloft.net)
5 * 5 *
6 * Rewrote buffer handling to use CIRC(Circular Buffer) macros. 6 * Rewrote buffer handling to use CIRC(Circular Buffer) macros.
7 * Maxim Krasnyanskiy <maxk@qualcomm.com> 7 * Maxim Krasnyanskiy <maxk@qualcomm.com>
8 * 8 *
9 * Fixed to use tty_get_baud_rate, and to allow for arbitrary baud 9 * Fixed to use tty_get_baud_rate, and to allow for arbitrary baud
10 * rates to be programmed into the UART. Also eliminated a lot of 10 * rates to be programmed into the UART. Also eliminated a lot of
11 * duplicated code in the console setup. 11 * duplicated code in the console setup.
12 * Theodore Ts'o <tytso@mit.edu>, 2001-Oct-12 12 * Theodore Ts'o <tytso@mit.edu>, 2001-Oct-12
13 * 13 *
14 * Ported to new 2.5.x UART layer. 14 * Ported to new 2.5.x UART layer.
15 * David S. Miller <davem@davemloft.net> 15 * David S. Miller <davem@davemloft.net>
16 */ 16 */
17 17
18 #include <linux/module.h> 18 #include <linux/module.h>
19 #include <linux/kernel.h> 19 #include <linux/kernel.h>
20 #include <linux/errno.h> 20 #include <linux/errno.h>
21 #include <linux/tty.h> 21 #include <linux/tty.h>
22 #include <linux/tty_flip.h> 22 #include <linux/tty_flip.h>
23 #include <linux/major.h> 23 #include <linux/major.h>
24 #include <linux/string.h> 24 #include <linux/string.h>
25 #include <linux/ptrace.h> 25 #include <linux/ptrace.h>
26 #include <linux/ioport.h> 26 #include <linux/ioport.h>
27 #include <linux/circ_buf.h> 27 #include <linux/circ_buf.h>
28 #include <linux/serial.h> 28 #include <linux/serial.h>
29 #include <linux/sysrq.h> 29 #include <linux/sysrq.h>
30 #include <linux/console.h> 30 #include <linux/console.h>
31 #include <linux/spinlock.h> 31 #include <linux/spinlock.h>
32 #include <linux/slab.h> 32 #include <linux/slab.h>
33 #include <linux/delay.h> 33 #include <linux/delay.h>
34 #include <linux/init.h> 34 #include <linux/init.h>
35 #include <linux/of_device.h> 35 #include <linux/of_device.h>
36 36
37 #include <asm/io.h> 37 #include <asm/io.h>
38 #include <asm/irq.h> 38 #include <asm/irq.h>
39 #include <asm/prom.h> 39 #include <asm/prom.h>
40 40
41 #if defined(CONFIG_SERIAL_SUNSAB_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) 41 #if defined(CONFIG_SERIAL_SUNSAB_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
42 #define SUPPORT_SYSRQ 42 #define SUPPORT_SYSRQ
43 #endif 43 #endif
44 44
45 #include <linux/serial_core.h> 45 #include <linux/serial_core.h>
46 #include <linux/sunserialcore.h>
46 47
47 #include "suncore.h"
48 #include "sunsab.h" 48 #include "sunsab.h"
49 49
50 struct uart_sunsab_port { 50 struct uart_sunsab_port {
51 struct uart_port port; /* Generic UART port */ 51 struct uart_port port; /* Generic UART port */
52 union sab82532_async_regs __iomem *regs; /* Chip registers */ 52 union sab82532_async_regs __iomem *regs; /* Chip registers */
53 unsigned long irqflags; /* IRQ state flags */ 53 unsigned long irqflags; /* IRQ state flags */
54 int dsr; /* Current DSR state */ 54 int dsr; /* Current DSR state */
55 unsigned int cec_timeout; /* Chip poll timeout... */ 55 unsigned int cec_timeout; /* Chip poll timeout... */
56 unsigned int tec_timeout; /* likewise */ 56 unsigned int tec_timeout; /* likewise */
57 unsigned char interrupt_mask0;/* ISR0 masking */ 57 unsigned char interrupt_mask0;/* ISR0 masking */
58 unsigned char interrupt_mask1;/* ISR1 masking */ 58 unsigned char interrupt_mask1;/* ISR1 masking */
59 unsigned char pvr_dtr_bit; /* Which PVR bit is DTR */ 59 unsigned char pvr_dtr_bit; /* Which PVR bit is DTR */
60 unsigned char pvr_dsr_bit; /* Which PVR bit is DSR */ 60 unsigned char pvr_dsr_bit; /* Which PVR bit is DSR */
61 unsigned int gis_shift; 61 unsigned int gis_shift;
62 int type; /* SAB82532 version */ 62 int type; /* SAB82532 version */
63 63
64 /* Setting configuration bits while the transmitter is active 64 /* Setting configuration bits while the transmitter is active
65 * can cause garbage characters to get emitted by the chip. 65 * can cause garbage characters to get emitted by the chip.
66 * Therefore, we cache such writes here and do the real register 66 * Therefore, we cache such writes here and do the real register
67 * write the next time the transmitter becomes idle. 67 * write the next time the transmitter becomes idle.
68 */ 68 */
69 unsigned int cached_ebrg; 69 unsigned int cached_ebrg;
70 unsigned char cached_mode; 70 unsigned char cached_mode;
71 unsigned char cached_pvr; 71 unsigned char cached_pvr;
72 unsigned char cached_dafo; 72 unsigned char cached_dafo;
73 }; 73 };
74 74
75 /* 75 /*
76 * This assumes you have a 29.4912 MHz clock for your UART. 76 * This assumes you have a 29.4912 MHz clock for your UART.
77 */ 77 */
78 #define SAB_BASE_BAUD ( 29491200 / 16 ) 78 #define SAB_BASE_BAUD ( 29491200 / 16 )
79 79
80 static char *sab82532_version[16] = { 80 static char *sab82532_version[16] = {
81 "V1.0", "V2.0", "V3.2", "V(0x03)", 81 "V1.0", "V2.0", "V3.2", "V(0x03)",
82 "V(0x04)", "V(0x05)", "V(0x06)", "V(0x07)", 82 "V(0x04)", "V(0x05)", "V(0x06)", "V(0x07)",
83 "V(0x08)", "V(0x09)", "V(0x0a)", "V(0x0b)", 83 "V(0x08)", "V(0x09)", "V(0x0a)", "V(0x0b)",
84 "V(0x0c)", "V(0x0d)", "V(0x0e)", "V(0x0f)" 84 "V(0x0c)", "V(0x0d)", "V(0x0e)", "V(0x0f)"
85 }; 85 };
86 86
87 #define SAB82532_MAX_TEC_TIMEOUT 200000 /* 1 character time (at 50 baud) */ 87 #define SAB82532_MAX_TEC_TIMEOUT 200000 /* 1 character time (at 50 baud) */
88 #define SAB82532_MAX_CEC_TIMEOUT 50000 /* 2.5 TX CLKs (at 50 baud) */ 88 #define SAB82532_MAX_CEC_TIMEOUT 50000 /* 2.5 TX CLKs (at 50 baud) */
89 89
90 #define SAB82532_RECV_FIFO_SIZE 32 /* Standard async fifo sizes */ 90 #define SAB82532_RECV_FIFO_SIZE 32 /* Standard async fifo sizes */
91 #define SAB82532_XMIT_FIFO_SIZE 32 91 #define SAB82532_XMIT_FIFO_SIZE 32
92 92
93 static __inline__ void sunsab_tec_wait(struct uart_sunsab_port *up) 93 static __inline__ void sunsab_tec_wait(struct uart_sunsab_port *up)
94 { 94 {
95 int timeout = up->tec_timeout; 95 int timeout = up->tec_timeout;
96 96
97 while ((readb(&up->regs->r.star) & SAB82532_STAR_TEC) && --timeout) 97 while ((readb(&up->regs->r.star) & SAB82532_STAR_TEC) && --timeout)
98 udelay(1); 98 udelay(1);
99 } 99 }
100 100
101 static __inline__ void sunsab_cec_wait(struct uart_sunsab_port *up) 101 static __inline__ void sunsab_cec_wait(struct uart_sunsab_port *up)
102 { 102 {
103 int timeout = up->cec_timeout; 103 int timeout = up->cec_timeout;
104 104
105 while ((readb(&up->regs->r.star) & SAB82532_STAR_CEC) && --timeout) 105 while ((readb(&up->regs->r.star) & SAB82532_STAR_CEC) && --timeout)
106 udelay(1); 106 udelay(1);
107 } 107 }
108 108
109 static struct tty_struct * 109 static struct tty_struct *
110 receive_chars(struct uart_sunsab_port *up, 110 receive_chars(struct uart_sunsab_port *up,
111 union sab82532_irq_status *stat) 111 union sab82532_irq_status *stat)
112 { 112 {
113 struct tty_struct *tty = NULL; 113 struct tty_struct *tty = NULL;
114 unsigned char buf[32]; 114 unsigned char buf[32];
115 int saw_console_brk = 0; 115 int saw_console_brk = 0;
116 int free_fifo = 0; 116 int free_fifo = 0;
117 int count = 0; 117 int count = 0;
118 int i; 118 int i;
119 119
120 if (up->port.state != NULL) /* Unopened serial console */ 120 if (up->port.state != NULL) /* Unopened serial console */
121 tty = up->port.state->port.tty; 121 tty = up->port.state->port.tty;
122 122
123 /* Read number of BYTES (Character + Status) available. */ 123 /* Read number of BYTES (Character + Status) available. */
124 if (stat->sreg.isr0 & SAB82532_ISR0_RPF) { 124 if (stat->sreg.isr0 & SAB82532_ISR0_RPF) {
125 count = SAB82532_RECV_FIFO_SIZE; 125 count = SAB82532_RECV_FIFO_SIZE;
126 free_fifo++; 126 free_fifo++;
127 } 127 }
128 128
129 if (stat->sreg.isr0 & SAB82532_ISR0_TCD) { 129 if (stat->sreg.isr0 & SAB82532_ISR0_TCD) {
130 count = readb(&up->regs->r.rbcl) & (SAB82532_RECV_FIFO_SIZE - 1); 130 count = readb(&up->regs->r.rbcl) & (SAB82532_RECV_FIFO_SIZE - 1);
131 free_fifo++; 131 free_fifo++;
132 } 132 }
133 133
134 /* Issue a FIFO read command in case we where idle. */ 134 /* Issue a FIFO read command in case we where idle. */
135 if (stat->sreg.isr0 & SAB82532_ISR0_TIME) { 135 if (stat->sreg.isr0 & SAB82532_ISR0_TIME) {
136 sunsab_cec_wait(up); 136 sunsab_cec_wait(up);
137 writeb(SAB82532_CMDR_RFRD, &up->regs->w.cmdr); 137 writeb(SAB82532_CMDR_RFRD, &up->regs->w.cmdr);
138 return tty; 138 return tty;
139 } 139 }
140 140
141 if (stat->sreg.isr0 & SAB82532_ISR0_RFO) 141 if (stat->sreg.isr0 & SAB82532_ISR0_RFO)
142 free_fifo++; 142 free_fifo++;
143 143
144 /* Read the FIFO. */ 144 /* Read the FIFO. */
145 for (i = 0; i < count; i++) 145 for (i = 0; i < count; i++)
146 buf[i] = readb(&up->regs->r.rfifo[i]); 146 buf[i] = readb(&up->regs->r.rfifo[i]);
147 147
148 /* Issue Receive Message Complete command. */ 148 /* Issue Receive Message Complete command. */
149 if (free_fifo) { 149 if (free_fifo) {
150 sunsab_cec_wait(up); 150 sunsab_cec_wait(up);
151 writeb(SAB82532_CMDR_RMC, &up->regs->w.cmdr); 151 writeb(SAB82532_CMDR_RMC, &up->regs->w.cmdr);
152 } 152 }
153 153
154 /* Count may be zero for BRK, so we check for it here */ 154 /* Count may be zero for BRK, so we check for it here */
155 if ((stat->sreg.isr1 & SAB82532_ISR1_BRK) && 155 if ((stat->sreg.isr1 & SAB82532_ISR1_BRK) &&
156 (up->port.line == up->port.cons->index)) 156 (up->port.line == up->port.cons->index))
157 saw_console_brk = 1; 157 saw_console_brk = 1;
158 158
159 for (i = 0; i < count; i++) { 159 for (i = 0; i < count; i++) {
160 unsigned char ch = buf[i], flag; 160 unsigned char ch = buf[i], flag;
161 161
162 if (tty == NULL) { 162 if (tty == NULL) {
163 uart_handle_sysrq_char(&up->port, ch); 163 uart_handle_sysrq_char(&up->port, ch);
164 continue; 164 continue;
165 } 165 }
166 166
167 flag = TTY_NORMAL; 167 flag = TTY_NORMAL;
168 up->port.icount.rx++; 168 up->port.icount.rx++;
169 169
170 if (unlikely(stat->sreg.isr0 & (SAB82532_ISR0_PERR | 170 if (unlikely(stat->sreg.isr0 & (SAB82532_ISR0_PERR |
171 SAB82532_ISR0_FERR | 171 SAB82532_ISR0_FERR |
172 SAB82532_ISR0_RFO)) || 172 SAB82532_ISR0_RFO)) ||
173 unlikely(stat->sreg.isr1 & SAB82532_ISR1_BRK)) { 173 unlikely(stat->sreg.isr1 & SAB82532_ISR1_BRK)) {
174 /* 174 /*
175 * For statistics only 175 * For statistics only
176 */ 176 */
177 if (stat->sreg.isr1 & SAB82532_ISR1_BRK) { 177 if (stat->sreg.isr1 & SAB82532_ISR1_BRK) {
178 stat->sreg.isr0 &= ~(SAB82532_ISR0_PERR | 178 stat->sreg.isr0 &= ~(SAB82532_ISR0_PERR |
179 SAB82532_ISR0_FERR); 179 SAB82532_ISR0_FERR);
180 up->port.icount.brk++; 180 up->port.icount.brk++;
181 /* 181 /*
182 * We do the SysRQ and SAK checking 182 * We do the SysRQ and SAK checking
183 * here because otherwise the break 183 * here because otherwise the break
184 * may get masked by ignore_status_mask 184 * may get masked by ignore_status_mask
185 * or read_status_mask. 185 * or read_status_mask.
186 */ 186 */
187 if (uart_handle_break(&up->port)) 187 if (uart_handle_break(&up->port))
188 continue; 188 continue;
189 } else if (stat->sreg.isr0 & SAB82532_ISR0_PERR) 189 } else if (stat->sreg.isr0 & SAB82532_ISR0_PERR)
190 up->port.icount.parity++; 190 up->port.icount.parity++;
191 else if (stat->sreg.isr0 & SAB82532_ISR0_FERR) 191 else if (stat->sreg.isr0 & SAB82532_ISR0_FERR)
192 up->port.icount.frame++; 192 up->port.icount.frame++;
193 if (stat->sreg.isr0 & SAB82532_ISR0_RFO) 193 if (stat->sreg.isr0 & SAB82532_ISR0_RFO)
194 up->port.icount.overrun++; 194 up->port.icount.overrun++;
195 195
196 /* 196 /*
197 * Mask off conditions which should be ingored. 197 * Mask off conditions which should be ingored.
198 */ 198 */
199 stat->sreg.isr0 &= (up->port.read_status_mask & 0xff); 199 stat->sreg.isr0 &= (up->port.read_status_mask & 0xff);
200 stat->sreg.isr1 &= ((up->port.read_status_mask >> 8) & 0xff); 200 stat->sreg.isr1 &= ((up->port.read_status_mask >> 8) & 0xff);
201 201
202 if (stat->sreg.isr1 & SAB82532_ISR1_BRK) { 202 if (stat->sreg.isr1 & SAB82532_ISR1_BRK) {
203 flag = TTY_BREAK; 203 flag = TTY_BREAK;
204 } else if (stat->sreg.isr0 & SAB82532_ISR0_PERR) 204 } else if (stat->sreg.isr0 & SAB82532_ISR0_PERR)
205 flag = TTY_PARITY; 205 flag = TTY_PARITY;
206 else if (stat->sreg.isr0 & SAB82532_ISR0_FERR) 206 else if (stat->sreg.isr0 & SAB82532_ISR0_FERR)
207 flag = TTY_FRAME; 207 flag = TTY_FRAME;
208 } 208 }
209 209
210 if (uart_handle_sysrq_char(&up->port, ch)) 210 if (uart_handle_sysrq_char(&up->port, ch))
211 continue; 211 continue;
212 212
213 if ((stat->sreg.isr0 & (up->port.ignore_status_mask & 0xff)) == 0 && 213 if ((stat->sreg.isr0 & (up->port.ignore_status_mask & 0xff)) == 0 &&
214 (stat->sreg.isr1 & ((up->port.ignore_status_mask >> 8) & 0xff)) == 0) 214 (stat->sreg.isr1 & ((up->port.ignore_status_mask >> 8) & 0xff)) == 0)
215 tty_insert_flip_char(tty, ch, flag); 215 tty_insert_flip_char(tty, ch, flag);
216 if (stat->sreg.isr0 & SAB82532_ISR0_RFO) 216 if (stat->sreg.isr0 & SAB82532_ISR0_RFO)
217 tty_insert_flip_char(tty, 0, TTY_OVERRUN); 217 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
218 } 218 }
219 219
220 if (saw_console_brk) 220 if (saw_console_brk)
221 sun_do_break(); 221 sun_do_break();
222 222
223 return tty; 223 return tty;
224 } 224 }
225 225
226 static void sunsab_stop_tx(struct uart_port *); 226 static void sunsab_stop_tx(struct uart_port *);
227 static void sunsab_tx_idle(struct uart_sunsab_port *); 227 static void sunsab_tx_idle(struct uart_sunsab_port *);
228 228
229 static void transmit_chars(struct uart_sunsab_port *up, 229 static void transmit_chars(struct uart_sunsab_port *up,
230 union sab82532_irq_status *stat) 230 union sab82532_irq_status *stat)
231 { 231 {
232 struct circ_buf *xmit = &up->port.state->xmit; 232 struct circ_buf *xmit = &up->port.state->xmit;
233 int i; 233 int i;
234 234
235 if (stat->sreg.isr1 & SAB82532_ISR1_ALLS) { 235 if (stat->sreg.isr1 & SAB82532_ISR1_ALLS) {
236 up->interrupt_mask1 |= SAB82532_IMR1_ALLS; 236 up->interrupt_mask1 |= SAB82532_IMR1_ALLS;
237 writeb(up->interrupt_mask1, &up->regs->w.imr1); 237 writeb(up->interrupt_mask1, &up->regs->w.imr1);
238 set_bit(SAB82532_ALLS, &up->irqflags); 238 set_bit(SAB82532_ALLS, &up->irqflags);
239 } 239 }
240 240
241 #if 0 /* bde@nwlink.com says this check causes problems */ 241 #if 0 /* bde@nwlink.com says this check causes problems */
242 if (!(stat->sreg.isr1 & SAB82532_ISR1_XPR)) 242 if (!(stat->sreg.isr1 & SAB82532_ISR1_XPR))
243 return; 243 return;
244 #endif 244 #endif
245 245
246 if (!(readb(&up->regs->r.star) & SAB82532_STAR_XFW)) 246 if (!(readb(&up->regs->r.star) & SAB82532_STAR_XFW))
247 return; 247 return;
248 248
249 set_bit(SAB82532_XPR, &up->irqflags); 249 set_bit(SAB82532_XPR, &up->irqflags);
250 sunsab_tx_idle(up); 250 sunsab_tx_idle(up);
251 251
252 if (uart_circ_empty(xmit) || uart_tx_stopped(&up->port)) { 252 if (uart_circ_empty(xmit) || uart_tx_stopped(&up->port)) {
253 up->interrupt_mask1 |= SAB82532_IMR1_XPR; 253 up->interrupt_mask1 |= SAB82532_IMR1_XPR;
254 writeb(up->interrupt_mask1, &up->regs->w.imr1); 254 writeb(up->interrupt_mask1, &up->regs->w.imr1);
255 return; 255 return;
256 } 256 }
257 257
258 up->interrupt_mask1 &= ~(SAB82532_IMR1_ALLS|SAB82532_IMR1_XPR); 258 up->interrupt_mask1 &= ~(SAB82532_IMR1_ALLS|SAB82532_IMR1_XPR);
259 writeb(up->interrupt_mask1, &up->regs->w.imr1); 259 writeb(up->interrupt_mask1, &up->regs->w.imr1);
260 clear_bit(SAB82532_ALLS, &up->irqflags); 260 clear_bit(SAB82532_ALLS, &up->irqflags);
261 261
262 /* Stuff 32 bytes into Transmit FIFO. */ 262 /* Stuff 32 bytes into Transmit FIFO. */
263 clear_bit(SAB82532_XPR, &up->irqflags); 263 clear_bit(SAB82532_XPR, &up->irqflags);
264 for (i = 0; i < up->port.fifosize; i++) { 264 for (i = 0; i < up->port.fifosize; i++) {
265 writeb(xmit->buf[xmit->tail], 265 writeb(xmit->buf[xmit->tail],
266 &up->regs->w.xfifo[i]); 266 &up->regs->w.xfifo[i]);
267 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); 267 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
268 up->port.icount.tx++; 268 up->port.icount.tx++;
269 if (uart_circ_empty(xmit)) 269 if (uart_circ_empty(xmit))
270 break; 270 break;
271 } 271 }
272 272
273 /* Issue a Transmit Frame command. */ 273 /* Issue a Transmit Frame command. */
274 sunsab_cec_wait(up); 274 sunsab_cec_wait(up);
275 writeb(SAB82532_CMDR_XF, &up->regs->w.cmdr); 275 writeb(SAB82532_CMDR_XF, &up->regs->w.cmdr);
276 276
277 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) 277 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
278 uart_write_wakeup(&up->port); 278 uart_write_wakeup(&up->port);
279 279
280 if (uart_circ_empty(xmit)) 280 if (uart_circ_empty(xmit))
281 sunsab_stop_tx(&up->port); 281 sunsab_stop_tx(&up->port);
282 } 282 }
283 283
284 static void check_status(struct uart_sunsab_port *up, 284 static void check_status(struct uart_sunsab_port *up,
285 union sab82532_irq_status *stat) 285 union sab82532_irq_status *stat)
286 { 286 {
287 if (stat->sreg.isr0 & SAB82532_ISR0_CDSC) 287 if (stat->sreg.isr0 & SAB82532_ISR0_CDSC)
288 uart_handle_dcd_change(&up->port, 288 uart_handle_dcd_change(&up->port,
289 !(readb(&up->regs->r.vstr) & SAB82532_VSTR_CD)); 289 !(readb(&up->regs->r.vstr) & SAB82532_VSTR_CD));
290 290
291 if (stat->sreg.isr1 & SAB82532_ISR1_CSC) 291 if (stat->sreg.isr1 & SAB82532_ISR1_CSC)
292 uart_handle_cts_change(&up->port, 292 uart_handle_cts_change(&up->port,
293 (readb(&up->regs->r.star) & SAB82532_STAR_CTS)); 293 (readb(&up->regs->r.star) & SAB82532_STAR_CTS));
294 294
295 if ((readb(&up->regs->r.pvr) & up->pvr_dsr_bit) ^ up->dsr) { 295 if ((readb(&up->regs->r.pvr) & up->pvr_dsr_bit) ^ up->dsr) {
296 up->dsr = (readb(&up->regs->r.pvr) & up->pvr_dsr_bit) ? 0 : 1; 296 up->dsr = (readb(&up->regs->r.pvr) & up->pvr_dsr_bit) ? 0 : 1;
297 up->port.icount.dsr++; 297 up->port.icount.dsr++;
298 } 298 }
299 299
300 wake_up_interruptible(&up->port.state->port.delta_msr_wait); 300 wake_up_interruptible(&up->port.state->port.delta_msr_wait);
301 } 301 }
302 302
303 static irqreturn_t sunsab_interrupt(int irq, void *dev_id) 303 static irqreturn_t sunsab_interrupt(int irq, void *dev_id)
304 { 304 {
305 struct uart_sunsab_port *up = dev_id; 305 struct uart_sunsab_port *up = dev_id;
306 struct tty_struct *tty; 306 struct tty_struct *tty;
307 union sab82532_irq_status status; 307 union sab82532_irq_status status;
308 unsigned long flags; 308 unsigned long flags;
309 unsigned char gis; 309 unsigned char gis;
310 310
311 spin_lock_irqsave(&up->port.lock, flags); 311 spin_lock_irqsave(&up->port.lock, flags);
312 312
313 status.stat = 0; 313 status.stat = 0;
314 gis = readb(&up->regs->r.gis) >> up->gis_shift; 314 gis = readb(&up->regs->r.gis) >> up->gis_shift;
315 if (gis & 1) 315 if (gis & 1)
316 status.sreg.isr0 = readb(&up->regs->r.isr0); 316 status.sreg.isr0 = readb(&up->regs->r.isr0);
317 if (gis & 2) 317 if (gis & 2)
318 status.sreg.isr1 = readb(&up->regs->r.isr1); 318 status.sreg.isr1 = readb(&up->regs->r.isr1);
319 319
320 tty = NULL; 320 tty = NULL;
321 if (status.stat) { 321 if (status.stat) {
322 if ((status.sreg.isr0 & (SAB82532_ISR0_TCD | SAB82532_ISR0_TIME | 322 if ((status.sreg.isr0 & (SAB82532_ISR0_TCD | SAB82532_ISR0_TIME |
323 SAB82532_ISR0_RFO | SAB82532_ISR0_RPF)) || 323 SAB82532_ISR0_RFO | SAB82532_ISR0_RPF)) ||
324 (status.sreg.isr1 & SAB82532_ISR1_BRK)) 324 (status.sreg.isr1 & SAB82532_ISR1_BRK))
325 tty = receive_chars(up, &status); 325 tty = receive_chars(up, &status);
326 if ((status.sreg.isr0 & SAB82532_ISR0_CDSC) || 326 if ((status.sreg.isr0 & SAB82532_ISR0_CDSC) ||
327 (status.sreg.isr1 & SAB82532_ISR1_CSC)) 327 (status.sreg.isr1 & SAB82532_ISR1_CSC))
328 check_status(up, &status); 328 check_status(up, &status);
329 if (status.sreg.isr1 & (SAB82532_ISR1_ALLS | SAB82532_ISR1_XPR)) 329 if (status.sreg.isr1 & (SAB82532_ISR1_ALLS | SAB82532_ISR1_XPR))
330 transmit_chars(up, &status); 330 transmit_chars(up, &status);
331 } 331 }
332 332
333 spin_unlock_irqrestore(&up->port.lock, flags); 333 spin_unlock_irqrestore(&up->port.lock, flags);
334 334
335 if (tty) 335 if (tty)
336 tty_flip_buffer_push(tty); 336 tty_flip_buffer_push(tty);
337 337
338 return IRQ_HANDLED; 338 return IRQ_HANDLED;
339 } 339 }
340 340
341 /* port->lock is not held. */ 341 /* port->lock is not held. */
342 static unsigned int sunsab_tx_empty(struct uart_port *port) 342 static unsigned int sunsab_tx_empty(struct uart_port *port)
343 { 343 {
344 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port; 344 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port;
345 int ret; 345 int ret;
346 346
347 /* Do not need a lock for a state test like this. */ 347 /* Do not need a lock for a state test like this. */
348 if (test_bit(SAB82532_ALLS, &up->irqflags)) 348 if (test_bit(SAB82532_ALLS, &up->irqflags))
349 ret = TIOCSER_TEMT; 349 ret = TIOCSER_TEMT;
350 else 350 else
351 ret = 0; 351 ret = 0;
352 352
353 return ret; 353 return ret;
354 } 354 }
355 355
356 /* port->lock held by caller. */ 356 /* port->lock held by caller. */
357 static void sunsab_set_mctrl(struct uart_port *port, unsigned int mctrl) 357 static void sunsab_set_mctrl(struct uart_port *port, unsigned int mctrl)
358 { 358 {
359 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port; 359 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port;
360 360
361 if (mctrl & TIOCM_RTS) { 361 if (mctrl & TIOCM_RTS) {
362 up->cached_mode &= ~SAB82532_MODE_FRTS; 362 up->cached_mode &= ~SAB82532_MODE_FRTS;
363 up->cached_mode |= SAB82532_MODE_RTS; 363 up->cached_mode |= SAB82532_MODE_RTS;
364 } else { 364 } else {
365 up->cached_mode |= (SAB82532_MODE_FRTS | 365 up->cached_mode |= (SAB82532_MODE_FRTS |
366 SAB82532_MODE_RTS); 366 SAB82532_MODE_RTS);
367 } 367 }
368 if (mctrl & TIOCM_DTR) { 368 if (mctrl & TIOCM_DTR) {
369 up->cached_pvr &= ~(up->pvr_dtr_bit); 369 up->cached_pvr &= ~(up->pvr_dtr_bit);
370 } else { 370 } else {
371 up->cached_pvr |= up->pvr_dtr_bit; 371 up->cached_pvr |= up->pvr_dtr_bit;
372 } 372 }
373 373
374 set_bit(SAB82532_REGS_PENDING, &up->irqflags); 374 set_bit(SAB82532_REGS_PENDING, &up->irqflags);
375 if (test_bit(SAB82532_XPR, &up->irqflags)) 375 if (test_bit(SAB82532_XPR, &up->irqflags))
376 sunsab_tx_idle(up); 376 sunsab_tx_idle(up);
377 } 377 }
378 378
379 /* port->lock is held by caller and interrupts are disabled. */ 379 /* port->lock is held by caller and interrupts are disabled. */
380 static unsigned int sunsab_get_mctrl(struct uart_port *port) 380 static unsigned int sunsab_get_mctrl(struct uart_port *port)
381 { 381 {
382 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port; 382 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port;
383 unsigned char val; 383 unsigned char val;
384 unsigned int result; 384 unsigned int result;
385 385
386 result = 0; 386 result = 0;
387 387
388 val = readb(&up->regs->r.pvr); 388 val = readb(&up->regs->r.pvr);
389 result |= (val & up->pvr_dsr_bit) ? 0 : TIOCM_DSR; 389 result |= (val & up->pvr_dsr_bit) ? 0 : TIOCM_DSR;
390 390
391 val = readb(&up->regs->r.vstr); 391 val = readb(&up->regs->r.vstr);
392 result |= (val & SAB82532_VSTR_CD) ? 0 : TIOCM_CAR; 392 result |= (val & SAB82532_VSTR_CD) ? 0 : TIOCM_CAR;
393 393
394 val = readb(&up->regs->r.star); 394 val = readb(&up->regs->r.star);
395 result |= (val & SAB82532_STAR_CTS) ? TIOCM_CTS : 0; 395 result |= (val & SAB82532_STAR_CTS) ? TIOCM_CTS : 0;
396 396
397 return result; 397 return result;
398 } 398 }
399 399
400 /* port->lock held by caller. */ 400 /* port->lock held by caller. */
401 static void sunsab_stop_tx(struct uart_port *port) 401 static void sunsab_stop_tx(struct uart_port *port)
402 { 402 {
403 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port; 403 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port;
404 404
405 up->interrupt_mask1 |= SAB82532_IMR1_XPR; 405 up->interrupt_mask1 |= SAB82532_IMR1_XPR;
406 writeb(up->interrupt_mask1, &up->regs->w.imr1); 406 writeb(up->interrupt_mask1, &up->regs->w.imr1);
407 } 407 }
408 408
409 /* port->lock held by caller. */ 409 /* port->lock held by caller. */
410 static void sunsab_tx_idle(struct uart_sunsab_port *up) 410 static void sunsab_tx_idle(struct uart_sunsab_port *up)
411 { 411 {
412 if (test_bit(SAB82532_REGS_PENDING, &up->irqflags)) { 412 if (test_bit(SAB82532_REGS_PENDING, &up->irqflags)) {
413 u8 tmp; 413 u8 tmp;
414 414
415 clear_bit(SAB82532_REGS_PENDING, &up->irqflags); 415 clear_bit(SAB82532_REGS_PENDING, &up->irqflags);
416 writeb(up->cached_mode, &up->regs->rw.mode); 416 writeb(up->cached_mode, &up->regs->rw.mode);
417 writeb(up->cached_pvr, &up->regs->rw.pvr); 417 writeb(up->cached_pvr, &up->regs->rw.pvr);
418 writeb(up->cached_dafo, &up->regs->w.dafo); 418 writeb(up->cached_dafo, &up->regs->w.dafo);
419 419
420 writeb(up->cached_ebrg & 0xff, &up->regs->w.bgr); 420 writeb(up->cached_ebrg & 0xff, &up->regs->w.bgr);
421 tmp = readb(&up->regs->rw.ccr2); 421 tmp = readb(&up->regs->rw.ccr2);
422 tmp &= ~0xc0; 422 tmp &= ~0xc0;
423 tmp |= (up->cached_ebrg >> 2) & 0xc0; 423 tmp |= (up->cached_ebrg >> 2) & 0xc0;
424 writeb(tmp, &up->regs->rw.ccr2); 424 writeb(tmp, &up->regs->rw.ccr2);
425 } 425 }
426 } 426 }
427 427
428 /* port->lock held by caller. */ 428 /* port->lock held by caller. */
429 static void sunsab_start_tx(struct uart_port *port) 429 static void sunsab_start_tx(struct uart_port *port)
430 { 430 {
431 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port; 431 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port;
432 struct circ_buf *xmit = &up->port.state->xmit; 432 struct circ_buf *xmit = &up->port.state->xmit;
433 int i; 433 int i;
434 434
435 up->interrupt_mask1 &= ~(SAB82532_IMR1_ALLS|SAB82532_IMR1_XPR); 435 up->interrupt_mask1 &= ~(SAB82532_IMR1_ALLS|SAB82532_IMR1_XPR);
436 writeb(up->interrupt_mask1, &up->regs->w.imr1); 436 writeb(up->interrupt_mask1, &up->regs->w.imr1);
437 437
438 if (!test_bit(SAB82532_XPR, &up->irqflags)) 438 if (!test_bit(SAB82532_XPR, &up->irqflags))
439 return; 439 return;
440 440
441 clear_bit(SAB82532_ALLS, &up->irqflags); 441 clear_bit(SAB82532_ALLS, &up->irqflags);
442 clear_bit(SAB82532_XPR, &up->irqflags); 442 clear_bit(SAB82532_XPR, &up->irqflags);
443 443
444 for (i = 0; i < up->port.fifosize; i++) { 444 for (i = 0; i < up->port.fifosize; i++) {
445 writeb(xmit->buf[xmit->tail], 445 writeb(xmit->buf[xmit->tail],
446 &up->regs->w.xfifo[i]); 446 &up->regs->w.xfifo[i]);
447 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); 447 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
448 up->port.icount.tx++; 448 up->port.icount.tx++;
449 if (uart_circ_empty(xmit)) 449 if (uart_circ_empty(xmit))
450 break; 450 break;
451 } 451 }
452 452
453 /* Issue a Transmit Frame command. */ 453 /* Issue a Transmit Frame command. */
454 sunsab_cec_wait(up); 454 sunsab_cec_wait(up);
455 writeb(SAB82532_CMDR_XF, &up->regs->w.cmdr); 455 writeb(SAB82532_CMDR_XF, &up->regs->w.cmdr);
456 } 456 }
457 457
458 /* port->lock is not held. */ 458 /* port->lock is not held. */
459 static void sunsab_send_xchar(struct uart_port *port, char ch) 459 static void sunsab_send_xchar(struct uart_port *port, char ch)
460 { 460 {
461 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port; 461 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port;
462 unsigned long flags; 462 unsigned long flags;
463 463
464 spin_lock_irqsave(&up->port.lock, flags); 464 spin_lock_irqsave(&up->port.lock, flags);
465 465
466 sunsab_tec_wait(up); 466 sunsab_tec_wait(up);
467 writeb(ch, &up->regs->w.tic); 467 writeb(ch, &up->regs->w.tic);
468 468
469 spin_unlock_irqrestore(&up->port.lock, flags); 469 spin_unlock_irqrestore(&up->port.lock, flags);
470 } 470 }
471 471
472 /* port->lock held by caller. */ 472 /* port->lock held by caller. */
473 static void sunsab_stop_rx(struct uart_port *port) 473 static void sunsab_stop_rx(struct uart_port *port)
474 { 474 {
475 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port; 475 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port;
476 476
477 up->interrupt_mask0 |= SAB82532_IMR0_TCD; 477 up->interrupt_mask0 |= SAB82532_IMR0_TCD;
478 writeb(up->interrupt_mask1, &up->regs->w.imr0); 478 writeb(up->interrupt_mask1, &up->regs->w.imr0);
479 } 479 }
480 480
481 /* port->lock held by caller. */ 481 /* port->lock held by caller. */
482 static void sunsab_enable_ms(struct uart_port *port) 482 static void sunsab_enable_ms(struct uart_port *port)
483 { 483 {
484 /* For now we always receive these interrupts. */ 484 /* For now we always receive these interrupts. */
485 } 485 }
486 486
487 /* port->lock is not held. */ 487 /* port->lock is not held. */
488 static void sunsab_break_ctl(struct uart_port *port, int break_state) 488 static void sunsab_break_ctl(struct uart_port *port, int break_state)
489 { 489 {
490 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port; 490 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port;
491 unsigned long flags; 491 unsigned long flags;
492 unsigned char val; 492 unsigned char val;
493 493
494 spin_lock_irqsave(&up->port.lock, flags); 494 spin_lock_irqsave(&up->port.lock, flags);
495 495
496 val = up->cached_dafo; 496 val = up->cached_dafo;
497 if (break_state) 497 if (break_state)
498 val |= SAB82532_DAFO_XBRK; 498 val |= SAB82532_DAFO_XBRK;
499 else 499 else
500 val &= ~SAB82532_DAFO_XBRK; 500 val &= ~SAB82532_DAFO_XBRK;
501 up->cached_dafo = val; 501 up->cached_dafo = val;
502 502
503 set_bit(SAB82532_REGS_PENDING, &up->irqflags); 503 set_bit(SAB82532_REGS_PENDING, &up->irqflags);
504 if (test_bit(SAB82532_XPR, &up->irqflags)) 504 if (test_bit(SAB82532_XPR, &up->irqflags))
505 sunsab_tx_idle(up); 505 sunsab_tx_idle(up);
506 506
507 spin_unlock_irqrestore(&up->port.lock, flags); 507 spin_unlock_irqrestore(&up->port.lock, flags);
508 } 508 }
509 509
510 /* port->lock is not held. */ 510 /* port->lock is not held. */
511 static int sunsab_startup(struct uart_port *port) 511 static int sunsab_startup(struct uart_port *port)
512 { 512 {
513 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port; 513 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port;
514 unsigned long flags; 514 unsigned long flags;
515 unsigned char tmp; 515 unsigned char tmp;
516 int err = request_irq(up->port.irq, sunsab_interrupt, 516 int err = request_irq(up->port.irq, sunsab_interrupt,
517 IRQF_SHARED, "sab", up); 517 IRQF_SHARED, "sab", up);
518 if (err) 518 if (err)
519 return err; 519 return err;
520 520
521 spin_lock_irqsave(&up->port.lock, flags); 521 spin_lock_irqsave(&up->port.lock, flags);
522 522
523 /* 523 /*
524 * Wait for any commands or immediate characters 524 * Wait for any commands or immediate characters
525 */ 525 */
526 sunsab_cec_wait(up); 526 sunsab_cec_wait(up);
527 sunsab_tec_wait(up); 527 sunsab_tec_wait(up);
528 528
529 /* 529 /*
530 * Clear the FIFO buffers. 530 * Clear the FIFO buffers.
531 */ 531 */
532 writeb(SAB82532_CMDR_RRES, &up->regs->w.cmdr); 532 writeb(SAB82532_CMDR_RRES, &up->regs->w.cmdr);
533 sunsab_cec_wait(up); 533 sunsab_cec_wait(up);
534 writeb(SAB82532_CMDR_XRES, &up->regs->w.cmdr); 534 writeb(SAB82532_CMDR_XRES, &up->regs->w.cmdr);
535 535
536 /* 536 /*
537 * Clear the interrupt registers. 537 * Clear the interrupt registers.
538 */ 538 */
539 (void) readb(&up->regs->r.isr0); 539 (void) readb(&up->regs->r.isr0);
540 (void) readb(&up->regs->r.isr1); 540 (void) readb(&up->regs->r.isr1);
541 541
542 /* 542 /*
543 * Now, initialize the UART 543 * Now, initialize the UART
544 */ 544 */
545 writeb(0, &up->regs->w.ccr0); /* power-down */ 545 writeb(0, &up->regs->w.ccr0); /* power-down */
546 writeb(SAB82532_CCR0_MCE | SAB82532_CCR0_SC_NRZ | 546 writeb(SAB82532_CCR0_MCE | SAB82532_CCR0_SC_NRZ |
547 SAB82532_CCR0_SM_ASYNC, &up->regs->w.ccr0); 547 SAB82532_CCR0_SM_ASYNC, &up->regs->w.ccr0);
548 writeb(SAB82532_CCR1_ODS | SAB82532_CCR1_BCR | 7, &up->regs->w.ccr1); 548 writeb(SAB82532_CCR1_ODS | SAB82532_CCR1_BCR | 7, &up->regs->w.ccr1);
549 writeb(SAB82532_CCR2_BDF | SAB82532_CCR2_SSEL | 549 writeb(SAB82532_CCR2_BDF | SAB82532_CCR2_SSEL |
550 SAB82532_CCR2_TOE, &up->regs->w.ccr2); 550 SAB82532_CCR2_TOE, &up->regs->w.ccr2);
551 writeb(0, &up->regs->w.ccr3); 551 writeb(0, &up->regs->w.ccr3);
552 writeb(SAB82532_CCR4_MCK4 | SAB82532_CCR4_EBRG, &up->regs->w.ccr4); 552 writeb(SAB82532_CCR4_MCK4 | SAB82532_CCR4_EBRG, &up->regs->w.ccr4);
553 up->cached_mode = (SAB82532_MODE_RTS | SAB82532_MODE_FCTS | 553 up->cached_mode = (SAB82532_MODE_RTS | SAB82532_MODE_FCTS |
554 SAB82532_MODE_RAC); 554 SAB82532_MODE_RAC);
555 writeb(up->cached_mode, &up->regs->w.mode); 555 writeb(up->cached_mode, &up->regs->w.mode);
556 writeb(SAB82532_RFC_DPS|SAB82532_RFC_RFTH_32, &up->regs->w.rfc); 556 writeb(SAB82532_RFC_DPS|SAB82532_RFC_RFTH_32, &up->regs->w.rfc);
557 557
558 tmp = readb(&up->regs->rw.ccr0); 558 tmp = readb(&up->regs->rw.ccr0);
559 tmp |= SAB82532_CCR0_PU; /* power-up */ 559 tmp |= SAB82532_CCR0_PU; /* power-up */
560 writeb(tmp, &up->regs->rw.ccr0); 560 writeb(tmp, &up->regs->rw.ccr0);
561 561
562 /* 562 /*
563 * Finally, enable interrupts 563 * Finally, enable interrupts
564 */ 564 */
565 up->interrupt_mask0 = (SAB82532_IMR0_PERR | SAB82532_IMR0_FERR | 565 up->interrupt_mask0 = (SAB82532_IMR0_PERR | SAB82532_IMR0_FERR |
566 SAB82532_IMR0_PLLA); 566 SAB82532_IMR0_PLLA);
567 writeb(up->interrupt_mask0, &up->regs->w.imr0); 567 writeb(up->interrupt_mask0, &up->regs->w.imr0);
568 up->interrupt_mask1 = (SAB82532_IMR1_BRKT | SAB82532_IMR1_ALLS | 568 up->interrupt_mask1 = (SAB82532_IMR1_BRKT | SAB82532_IMR1_ALLS |
569 SAB82532_IMR1_XOFF | SAB82532_IMR1_TIN | 569 SAB82532_IMR1_XOFF | SAB82532_IMR1_TIN |
570 SAB82532_IMR1_CSC | SAB82532_IMR1_XON | 570 SAB82532_IMR1_CSC | SAB82532_IMR1_XON |
571 SAB82532_IMR1_XPR); 571 SAB82532_IMR1_XPR);
572 writeb(up->interrupt_mask1, &up->regs->w.imr1); 572 writeb(up->interrupt_mask1, &up->regs->w.imr1);
573 set_bit(SAB82532_ALLS, &up->irqflags); 573 set_bit(SAB82532_ALLS, &up->irqflags);
574 set_bit(SAB82532_XPR, &up->irqflags); 574 set_bit(SAB82532_XPR, &up->irqflags);
575 575
576 spin_unlock_irqrestore(&up->port.lock, flags); 576 spin_unlock_irqrestore(&up->port.lock, flags);
577 577
578 return 0; 578 return 0;
579 } 579 }
580 580
581 /* port->lock is not held. */ 581 /* port->lock is not held. */
582 static void sunsab_shutdown(struct uart_port *port) 582 static void sunsab_shutdown(struct uart_port *port)
583 { 583 {
584 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port; 584 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port;
585 unsigned long flags; 585 unsigned long flags;
586 586
587 spin_lock_irqsave(&up->port.lock, flags); 587 spin_lock_irqsave(&up->port.lock, flags);
588 588
589 /* Disable Interrupts */ 589 /* Disable Interrupts */
590 up->interrupt_mask0 = 0xff; 590 up->interrupt_mask0 = 0xff;
591 writeb(up->interrupt_mask0, &up->regs->w.imr0); 591 writeb(up->interrupt_mask0, &up->regs->w.imr0);
592 up->interrupt_mask1 = 0xff; 592 up->interrupt_mask1 = 0xff;
593 writeb(up->interrupt_mask1, &up->regs->w.imr1); 593 writeb(up->interrupt_mask1, &up->regs->w.imr1);
594 594
595 /* Disable break condition */ 595 /* Disable break condition */
596 up->cached_dafo = readb(&up->regs->rw.dafo); 596 up->cached_dafo = readb(&up->regs->rw.dafo);
597 up->cached_dafo &= ~SAB82532_DAFO_XBRK; 597 up->cached_dafo &= ~SAB82532_DAFO_XBRK;
598 writeb(up->cached_dafo, &up->regs->rw.dafo); 598 writeb(up->cached_dafo, &up->regs->rw.dafo);
599 599
600 /* Disable Receiver */ 600 /* Disable Receiver */
601 up->cached_mode &= ~SAB82532_MODE_RAC; 601 up->cached_mode &= ~SAB82532_MODE_RAC;
602 writeb(up->cached_mode, &up->regs->rw.mode); 602 writeb(up->cached_mode, &up->regs->rw.mode);
603 603
604 /* 604 /*
605 * XXX FIXME 605 * XXX FIXME
606 * 606 *
607 * If the chip is powered down here the system hangs/crashes during 607 * If the chip is powered down here the system hangs/crashes during
608 * reboot or shutdown. This needs to be investigated further, 608 * reboot or shutdown. This needs to be investigated further,
609 * similar behaviour occurs in 2.4 when the driver is configured 609 * similar behaviour occurs in 2.4 when the driver is configured
610 * as a module only. One hint may be that data is sometimes 610 * as a module only. One hint may be that data is sometimes
611 * transmitted at 9600 baud during shutdown (regardless of the 611 * transmitted at 9600 baud during shutdown (regardless of the
612 * speed the chip was configured for when the port was open). 612 * speed the chip was configured for when the port was open).
613 */ 613 */
614 #if 0 614 #if 0
615 /* Power Down */ 615 /* Power Down */
616 tmp = readb(&up->regs->rw.ccr0); 616 tmp = readb(&up->regs->rw.ccr0);
617 tmp &= ~SAB82532_CCR0_PU; 617 tmp &= ~SAB82532_CCR0_PU;
618 writeb(tmp, &up->regs->rw.ccr0); 618 writeb(tmp, &up->regs->rw.ccr0);
619 #endif 619 #endif
620 620
621 spin_unlock_irqrestore(&up->port.lock, flags); 621 spin_unlock_irqrestore(&up->port.lock, flags);
622 free_irq(up->port.irq, up); 622 free_irq(up->port.irq, up);
623 } 623 }
624 624
625 /* 625 /*
626 * This is used to figure out the divisor speeds. 626 * This is used to figure out the divisor speeds.
627 * 627 *
628 * The formula is: Baud = SAB_BASE_BAUD / ((N + 1) * (1 << M)), 628 * The formula is: Baud = SAB_BASE_BAUD / ((N + 1) * (1 << M)),
629 * 629 *
630 * with 0 <= N < 64 and 0 <= M < 16 630 * with 0 <= N < 64 and 0 <= M < 16
631 */ 631 */
632 632
633 static void calc_ebrg(int baud, int *n_ret, int *m_ret) 633 static void calc_ebrg(int baud, int *n_ret, int *m_ret)
634 { 634 {
635 int n, m; 635 int n, m;
636 636
637 if (baud == 0) { 637 if (baud == 0) {
638 *n_ret = 0; 638 *n_ret = 0;
639 *m_ret = 0; 639 *m_ret = 0;
640 return; 640 return;
641 } 641 }
642 642
643 /* 643 /*
644 * We scale numbers by 10 so that we get better accuracy 644 * We scale numbers by 10 so that we get better accuracy
645 * without having to use floating point. Here we increment m 645 * without having to use floating point. Here we increment m
646 * until n is within the valid range. 646 * until n is within the valid range.
647 */ 647 */
648 n = (SAB_BASE_BAUD * 10) / baud; 648 n = (SAB_BASE_BAUD * 10) / baud;
649 m = 0; 649 m = 0;
650 while (n >= 640) { 650 while (n >= 640) {
651 n = n / 2; 651 n = n / 2;
652 m++; 652 m++;
653 } 653 }
654 n = (n+5) / 10; 654 n = (n+5) / 10;
655 /* 655 /*
656 * We try very hard to avoid speeds with M == 0 since they may 656 * We try very hard to avoid speeds with M == 0 since they may
657 * not work correctly for XTAL frequences above 10 MHz. 657 * not work correctly for XTAL frequences above 10 MHz.
658 */ 658 */
659 if ((m == 0) && ((n & 1) == 0)) { 659 if ((m == 0) && ((n & 1) == 0)) {
660 n = n / 2; 660 n = n / 2;
661 m++; 661 m++;
662 } 662 }
663 *n_ret = n - 1; 663 *n_ret = n - 1;
664 *m_ret = m; 664 *m_ret = m;
665 } 665 }
666 666
667 /* Internal routine, port->lock is held and local interrupts are disabled. */ 667 /* Internal routine, port->lock is held and local interrupts are disabled. */
668 static void sunsab_convert_to_sab(struct uart_sunsab_port *up, unsigned int cflag, 668 static void sunsab_convert_to_sab(struct uart_sunsab_port *up, unsigned int cflag,
669 unsigned int iflag, unsigned int baud, 669 unsigned int iflag, unsigned int baud,
670 unsigned int quot) 670 unsigned int quot)
671 { 671 {
672 unsigned char dafo; 672 unsigned char dafo;
673 int bits, n, m; 673 int bits, n, m;
674 674
675 /* Byte size and parity */ 675 /* Byte size and parity */
676 switch (cflag & CSIZE) { 676 switch (cflag & CSIZE) {
677 case CS5: dafo = SAB82532_DAFO_CHL5; bits = 7; break; 677 case CS5: dafo = SAB82532_DAFO_CHL5; bits = 7; break;
678 case CS6: dafo = SAB82532_DAFO_CHL6; bits = 8; break; 678 case CS6: dafo = SAB82532_DAFO_CHL6; bits = 8; break;
679 case CS7: dafo = SAB82532_DAFO_CHL7; bits = 9; break; 679 case CS7: dafo = SAB82532_DAFO_CHL7; bits = 9; break;
680 case CS8: dafo = SAB82532_DAFO_CHL8; bits = 10; break; 680 case CS8: dafo = SAB82532_DAFO_CHL8; bits = 10; break;
681 /* Never happens, but GCC is too dumb to figure it out */ 681 /* Never happens, but GCC is too dumb to figure it out */
682 default: dafo = SAB82532_DAFO_CHL5; bits = 7; break; 682 default: dafo = SAB82532_DAFO_CHL5; bits = 7; break;
683 } 683 }
684 684
685 if (cflag & CSTOPB) { 685 if (cflag & CSTOPB) {
686 dafo |= SAB82532_DAFO_STOP; 686 dafo |= SAB82532_DAFO_STOP;
687 bits++; 687 bits++;
688 } 688 }
689 689
690 if (cflag & PARENB) { 690 if (cflag & PARENB) {
691 dafo |= SAB82532_DAFO_PARE; 691 dafo |= SAB82532_DAFO_PARE;
692 bits++; 692 bits++;
693 } 693 }
694 694
695 if (cflag & PARODD) { 695 if (cflag & PARODD) {
696 dafo |= SAB82532_DAFO_PAR_ODD; 696 dafo |= SAB82532_DAFO_PAR_ODD;
697 } else { 697 } else {
698 dafo |= SAB82532_DAFO_PAR_EVEN; 698 dafo |= SAB82532_DAFO_PAR_EVEN;
699 } 699 }
700 up->cached_dafo = dafo; 700 up->cached_dafo = dafo;
701 701
702 calc_ebrg(baud, &n, &m); 702 calc_ebrg(baud, &n, &m);
703 703
704 up->cached_ebrg = n | (m << 6); 704 up->cached_ebrg = n | (m << 6);
705 705
706 up->tec_timeout = (10 * 1000000) / baud; 706 up->tec_timeout = (10 * 1000000) / baud;
707 up->cec_timeout = up->tec_timeout >> 2; 707 up->cec_timeout = up->tec_timeout >> 2;
708 708
709 /* CTS flow control flags */ 709 /* CTS flow control flags */
710 /* We encode read_status_mask and ignore_status_mask like so: 710 /* We encode read_status_mask and ignore_status_mask like so:
711 * 711 *
712 * --------------------- 712 * ---------------------
713 * | ... | ISR1 | ISR0 | 713 * | ... | ISR1 | ISR0 |
714 * --------------------- 714 * ---------------------
715 * .. 15 8 7 0 715 * .. 15 8 7 0
716 */ 716 */
717 717
718 up->port.read_status_mask = (SAB82532_ISR0_TCD | SAB82532_ISR0_TIME | 718 up->port.read_status_mask = (SAB82532_ISR0_TCD | SAB82532_ISR0_TIME |
719 SAB82532_ISR0_RFO | SAB82532_ISR0_RPF | 719 SAB82532_ISR0_RFO | SAB82532_ISR0_RPF |
720 SAB82532_ISR0_CDSC); 720 SAB82532_ISR0_CDSC);
721 up->port.read_status_mask |= (SAB82532_ISR1_CSC | 721 up->port.read_status_mask |= (SAB82532_ISR1_CSC |
722 SAB82532_ISR1_ALLS | 722 SAB82532_ISR1_ALLS |
723 SAB82532_ISR1_XPR) << 8; 723 SAB82532_ISR1_XPR) << 8;
724 if (iflag & INPCK) 724 if (iflag & INPCK)
725 up->port.read_status_mask |= (SAB82532_ISR0_PERR | 725 up->port.read_status_mask |= (SAB82532_ISR0_PERR |
726 SAB82532_ISR0_FERR); 726 SAB82532_ISR0_FERR);
727 if (iflag & (BRKINT | PARMRK)) 727 if (iflag & (BRKINT | PARMRK))
728 up->port.read_status_mask |= (SAB82532_ISR1_BRK << 8); 728 up->port.read_status_mask |= (SAB82532_ISR1_BRK << 8);
729 729
730 /* 730 /*
731 * Characteres to ignore 731 * Characteres to ignore
732 */ 732 */
733 up->port.ignore_status_mask = 0; 733 up->port.ignore_status_mask = 0;
734 if (iflag & IGNPAR) 734 if (iflag & IGNPAR)
735 up->port.ignore_status_mask |= (SAB82532_ISR0_PERR | 735 up->port.ignore_status_mask |= (SAB82532_ISR0_PERR |
736 SAB82532_ISR0_FERR); 736 SAB82532_ISR0_FERR);
737 if (iflag & IGNBRK) { 737 if (iflag & IGNBRK) {
738 up->port.ignore_status_mask |= (SAB82532_ISR1_BRK << 8); 738 up->port.ignore_status_mask |= (SAB82532_ISR1_BRK << 8);
739 /* 739 /*
740 * If we're ignoring parity and break indicators, 740 * If we're ignoring parity and break indicators,
741 * ignore overruns too (for real raw support). 741 * ignore overruns too (for real raw support).
742 */ 742 */
743 if (iflag & IGNPAR) 743 if (iflag & IGNPAR)
744 up->port.ignore_status_mask |= SAB82532_ISR0_RFO; 744 up->port.ignore_status_mask |= SAB82532_ISR0_RFO;
745 } 745 }
746 746
747 /* 747 /*
748 * ignore all characters if CREAD is not set 748 * ignore all characters if CREAD is not set
749 */ 749 */
750 if ((cflag & CREAD) == 0) 750 if ((cflag & CREAD) == 0)
751 up->port.ignore_status_mask |= (SAB82532_ISR0_RPF | 751 up->port.ignore_status_mask |= (SAB82532_ISR0_RPF |
752 SAB82532_ISR0_TCD); 752 SAB82532_ISR0_TCD);
753 753
754 uart_update_timeout(&up->port, cflag, 754 uart_update_timeout(&up->port, cflag,
755 (up->port.uartclk / (16 * quot))); 755 (up->port.uartclk / (16 * quot)));
756 756
757 /* Now schedule a register update when the chip's 757 /* Now schedule a register update when the chip's
758 * transmitter is idle. 758 * transmitter is idle.
759 */ 759 */
760 up->cached_mode |= SAB82532_MODE_RAC; 760 up->cached_mode |= SAB82532_MODE_RAC;
761 set_bit(SAB82532_REGS_PENDING, &up->irqflags); 761 set_bit(SAB82532_REGS_PENDING, &up->irqflags);
762 if (test_bit(SAB82532_XPR, &up->irqflags)) 762 if (test_bit(SAB82532_XPR, &up->irqflags))
763 sunsab_tx_idle(up); 763 sunsab_tx_idle(up);
764 } 764 }
765 765
766 /* port->lock is not held. */ 766 /* port->lock is not held. */
767 static void sunsab_set_termios(struct uart_port *port, struct ktermios *termios, 767 static void sunsab_set_termios(struct uart_port *port, struct ktermios *termios,
768 struct ktermios *old) 768 struct ktermios *old)
769 { 769 {
770 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port; 770 struct uart_sunsab_port *up = (struct uart_sunsab_port *) port;
771 unsigned long flags; 771 unsigned long flags;
772 unsigned int baud = uart_get_baud_rate(port, termios, old, 0, 4000000); 772 unsigned int baud = uart_get_baud_rate(port, termios, old, 0, 4000000);
773 unsigned int quot = uart_get_divisor(port, baud); 773 unsigned int quot = uart_get_divisor(port, baud);
774 774
775 spin_lock_irqsave(&up->port.lock, flags); 775 spin_lock_irqsave(&up->port.lock, flags);
776 sunsab_convert_to_sab(up, termios->c_cflag, termios->c_iflag, baud, quot); 776 sunsab_convert_to_sab(up, termios->c_cflag, termios->c_iflag, baud, quot);
777 spin_unlock_irqrestore(&up->port.lock, flags); 777 spin_unlock_irqrestore(&up->port.lock, flags);
778 } 778 }
779 779
780 static const char *sunsab_type(struct uart_port *port) 780 static const char *sunsab_type(struct uart_port *port)
781 { 781 {
782 struct uart_sunsab_port *up = (void *)port; 782 struct uart_sunsab_port *up = (void *)port;
783 static char buf[36]; 783 static char buf[36];
784 784
785 sprintf(buf, "SAB82532 %s", sab82532_version[up->type]); 785 sprintf(buf, "SAB82532 %s", sab82532_version[up->type]);
786 return buf; 786 return buf;
787 } 787 }
788 788
789 static void sunsab_release_port(struct uart_port *port) 789 static void sunsab_release_port(struct uart_port *port)
790 { 790 {
791 } 791 }
792 792
793 static int sunsab_request_port(struct uart_port *port) 793 static int sunsab_request_port(struct uart_port *port)
794 { 794 {
795 return 0; 795 return 0;
796 } 796 }
797 797
798 static void sunsab_config_port(struct uart_port *port, int flags) 798 static void sunsab_config_port(struct uart_port *port, int flags)
799 { 799 {
800 } 800 }
801 801
802 static int sunsab_verify_port(struct uart_port *port, struct serial_struct *ser) 802 static int sunsab_verify_port(struct uart_port *port, struct serial_struct *ser)
803 { 803 {
804 return -EINVAL; 804 return -EINVAL;
805 } 805 }
806 806
807 static struct uart_ops sunsab_pops = { 807 static struct uart_ops sunsab_pops = {
808 .tx_empty = sunsab_tx_empty, 808 .tx_empty = sunsab_tx_empty,
809 .set_mctrl = sunsab_set_mctrl, 809 .set_mctrl = sunsab_set_mctrl,
810 .get_mctrl = sunsab_get_mctrl, 810 .get_mctrl = sunsab_get_mctrl,
811 .stop_tx = sunsab_stop_tx, 811 .stop_tx = sunsab_stop_tx,
812 .start_tx = sunsab_start_tx, 812 .start_tx = sunsab_start_tx,
813 .send_xchar = sunsab_send_xchar, 813 .send_xchar = sunsab_send_xchar,
814 .stop_rx = sunsab_stop_rx, 814 .stop_rx = sunsab_stop_rx,
815 .enable_ms = sunsab_enable_ms, 815 .enable_ms = sunsab_enable_ms,
816 .break_ctl = sunsab_break_ctl, 816 .break_ctl = sunsab_break_ctl,
817 .startup = sunsab_startup, 817 .startup = sunsab_startup,
818 .shutdown = sunsab_shutdown, 818 .shutdown = sunsab_shutdown,
819 .set_termios = sunsab_set_termios, 819 .set_termios = sunsab_set_termios,
820 .type = sunsab_type, 820 .type = sunsab_type,
821 .release_port = sunsab_release_port, 821 .release_port = sunsab_release_port,
822 .request_port = sunsab_request_port, 822 .request_port = sunsab_request_port,
823 .config_port = sunsab_config_port, 823 .config_port = sunsab_config_port,
824 .verify_port = sunsab_verify_port, 824 .verify_port = sunsab_verify_port,
825 }; 825 };
826 826
827 static struct uart_driver sunsab_reg = { 827 static struct uart_driver sunsab_reg = {
828 .owner = THIS_MODULE, 828 .owner = THIS_MODULE,
829 .driver_name = "sunsab", 829 .driver_name = "sunsab",
830 .dev_name = "ttyS", 830 .dev_name = "ttyS",
831 .major = TTY_MAJOR, 831 .major = TTY_MAJOR,
832 }; 832 };
833 833
834 static struct uart_sunsab_port *sunsab_ports; 834 static struct uart_sunsab_port *sunsab_ports;
835 835
836 #ifdef CONFIG_SERIAL_SUNSAB_CONSOLE 836 #ifdef CONFIG_SERIAL_SUNSAB_CONSOLE
837 837
838 static void sunsab_console_putchar(struct uart_port *port, int c) 838 static void sunsab_console_putchar(struct uart_port *port, int c)
839 { 839 {
840 struct uart_sunsab_port *up = (struct uart_sunsab_port *)port; 840 struct uart_sunsab_port *up = (struct uart_sunsab_port *)port;
841 841
842 sunsab_tec_wait(up); 842 sunsab_tec_wait(up);
843 writeb(c, &up->regs->w.tic); 843 writeb(c, &up->regs->w.tic);
844 } 844 }
845 845
846 static void sunsab_console_write(struct console *con, const char *s, unsigned n) 846 static void sunsab_console_write(struct console *con, const char *s, unsigned n)
847 { 847 {
848 struct uart_sunsab_port *up = &sunsab_ports[con->index]; 848 struct uart_sunsab_port *up = &sunsab_ports[con->index];
849 unsigned long flags; 849 unsigned long flags;
850 int locked = 1; 850 int locked = 1;
851 851
852 local_irq_save(flags); 852 local_irq_save(flags);
853 if (up->port.sysrq) { 853 if (up->port.sysrq) {
854 locked = 0; 854 locked = 0;
855 } else if (oops_in_progress) { 855 } else if (oops_in_progress) {
856 locked = spin_trylock(&up->port.lock); 856 locked = spin_trylock(&up->port.lock);
857 } else 857 } else
858 spin_lock(&up->port.lock); 858 spin_lock(&up->port.lock);
859 859
860 uart_console_write(&up->port, s, n, sunsab_console_putchar); 860 uart_console_write(&up->port, s, n, sunsab_console_putchar);
861 sunsab_tec_wait(up); 861 sunsab_tec_wait(up);
862 862
863 if (locked) 863 if (locked)
864 spin_unlock(&up->port.lock); 864 spin_unlock(&up->port.lock);
865 local_irq_restore(flags); 865 local_irq_restore(flags);
866 } 866 }
867 867
868 static int sunsab_console_setup(struct console *con, char *options) 868 static int sunsab_console_setup(struct console *con, char *options)
869 { 869 {
870 struct uart_sunsab_port *up = &sunsab_ports[con->index]; 870 struct uart_sunsab_port *up = &sunsab_ports[con->index];
871 unsigned long flags; 871 unsigned long flags;
872 unsigned int baud, quot; 872 unsigned int baud, quot;
873 873
874 /* 874 /*
875 * The console framework calls us for each and every port 875 * The console framework calls us for each and every port
876 * registered. Defer the console setup until the requested 876 * registered. Defer the console setup until the requested
877 * port has been properly discovered. A bit of a hack, 877 * port has been properly discovered. A bit of a hack,
878 * though... 878 * though...
879 */ 879 */
880 if (up->port.type != PORT_SUNSAB) 880 if (up->port.type != PORT_SUNSAB)
881 return -1; 881 return -1;
882 882
883 printk("Console: ttyS%d (SAB82532)\n", 883 printk("Console: ttyS%d (SAB82532)\n",
884 (sunsab_reg.minor - 64) + con->index); 884 (sunsab_reg.minor - 64) + con->index);
885 885
886 sunserial_console_termios(con, up->port.dev->of_node); 886 sunserial_console_termios(con, up->port.dev->of_node);
887 887
888 switch (con->cflag & CBAUD) { 888 switch (con->cflag & CBAUD) {
889 case B150: baud = 150; break; 889 case B150: baud = 150; break;
890 case B300: baud = 300; break; 890 case B300: baud = 300; break;
891 case B600: baud = 600; break; 891 case B600: baud = 600; break;
892 case B1200: baud = 1200; break; 892 case B1200: baud = 1200; break;
893 case B2400: baud = 2400; break; 893 case B2400: baud = 2400; break;
894 case B4800: baud = 4800; break; 894 case B4800: baud = 4800; break;
895 default: case B9600: baud = 9600; break; 895 default: case B9600: baud = 9600; break;
896 case B19200: baud = 19200; break; 896 case B19200: baud = 19200; break;
897 case B38400: baud = 38400; break; 897 case B38400: baud = 38400; break;
898 case B57600: baud = 57600; break; 898 case B57600: baud = 57600; break;
899 case B115200: baud = 115200; break; 899 case B115200: baud = 115200; break;
900 case B230400: baud = 230400; break; 900 case B230400: baud = 230400; break;
901 case B460800: baud = 460800; break; 901 case B460800: baud = 460800; break;
902 }; 902 };
903 903
904 /* 904 /*
905 * Temporary fix. 905 * Temporary fix.
906 */ 906 */
907 spin_lock_init(&up->port.lock); 907 spin_lock_init(&up->port.lock);
908 908
909 /* 909 /*
910 * Initialize the hardware 910 * Initialize the hardware
911 */ 911 */
912 sunsab_startup(&up->port); 912 sunsab_startup(&up->port);
913 913
914 spin_lock_irqsave(&up->port.lock, flags); 914 spin_lock_irqsave(&up->port.lock, flags);
915 915
916 /* 916 /*
917 * Finally, enable interrupts 917 * Finally, enable interrupts
918 */ 918 */
919 up->interrupt_mask0 = SAB82532_IMR0_PERR | SAB82532_IMR0_FERR | 919 up->interrupt_mask0 = SAB82532_IMR0_PERR | SAB82532_IMR0_FERR |
920 SAB82532_IMR0_PLLA | SAB82532_IMR0_CDSC; 920 SAB82532_IMR0_PLLA | SAB82532_IMR0_CDSC;
921 writeb(up->interrupt_mask0, &up->regs->w.imr0); 921 writeb(up->interrupt_mask0, &up->regs->w.imr0);
922 up->interrupt_mask1 = SAB82532_IMR1_BRKT | SAB82532_IMR1_ALLS | 922 up->interrupt_mask1 = SAB82532_IMR1_BRKT | SAB82532_IMR1_ALLS |
923 SAB82532_IMR1_XOFF | SAB82532_IMR1_TIN | 923 SAB82532_IMR1_XOFF | SAB82532_IMR1_TIN |
924 SAB82532_IMR1_CSC | SAB82532_IMR1_XON | 924 SAB82532_IMR1_CSC | SAB82532_IMR1_XON |
925 SAB82532_IMR1_XPR; 925 SAB82532_IMR1_XPR;
926 writeb(up->interrupt_mask1, &up->regs->w.imr1); 926 writeb(up->interrupt_mask1, &up->regs->w.imr1);
927 927
928 quot = uart_get_divisor(&up->port, baud); 928 quot = uart_get_divisor(&up->port, baud);
929 sunsab_convert_to_sab(up, con->cflag, 0, baud, quot); 929 sunsab_convert_to_sab(up, con->cflag, 0, baud, quot);
930 sunsab_set_mctrl(&up->port, TIOCM_DTR | TIOCM_RTS); 930 sunsab_set_mctrl(&up->port, TIOCM_DTR | TIOCM_RTS);
931 931
932 spin_unlock_irqrestore(&up->port.lock, flags); 932 spin_unlock_irqrestore(&up->port.lock, flags);
933 933
934 return 0; 934 return 0;
935 } 935 }
936 936
937 static struct console sunsab_console = { 937 static struct console sunsab_console = {
938 .name = "ttyS", 938 .name = "ttyS",
939 .write = sunsab_console_write, 939 .write = sunsab_console_write,
940 .device = uart_console_device, 940 .device = uart_console_device,
941 .setup = sunsab_console_setup, 941 .setup = sunsab_console_setup,
942 .flags = CON_PRINTBUFFER, 942 .flags = CON_PRINTBUFFER,
943 .index = -1, 943 .index = -1,
944 .data = &sunsab_reg, 944 .data = &sunsab_reg,
945 }; 945 };
946 946
947 static inline struct console *SUNSAB_CONSOLE(void) 947 static inline struct console *SUNSAB_CONSOLE(void)
948 { 948 {
949 return &sunsab_console; 949 return &sunsab_console;
950 } 950 }
951 #else 951 #else
952 #define SUNSAB_CONSOLE() (NULL) 952 #define SUNSAB_CONSOLE() (NULL)
953 #define sunsab_console_init() do { } while (0) 953 #define sunsab_console_init() do { } while (0)
954 #endif 954 #endif
955 955
956 static int __devinit sunsab_init_one(struct uart_sunsab_port *up, 956 static int __devinit sunsab_init_one(struct uart_sunsab_port *up,
957 struct platform_device *op, 957 struct platform_device *op,
958 unsigned long offset, 958 unsigned long offset,
959 int line) 959 int line)
960 { 960 {
961 up->port.line = line; 961 up->port.line = line;
962 up->port.dev = &op->dev; 962 up->port.dev = &op->dev;
963 963
964 up->port.mapbase = op->resource[0].start + offset; 964 up->port.mapbase = op->resource[0].start + offset;
965 up->port.membase = of_ioremap(&op->resource[0], offset, 965 up->port.membase = of_ioremap(&op->resource[0], offset,
966 sizeof(union sab82532_async_regs), 966 sizeof(union sab82532_async_regs),
967 "sab"); 967 "sab");
968 if (!up->port.membase) 968 if (!up->port.membase)
969 return -ENOMEM; 969 return -ENOMEM;
970 up->regs = (union sab82532_async_regs __iomem *) up->port.membase; 970 up->regs = (union sab82532_async_regs __iomem *) up->port.membase;
971 971
972 up->port.irq = op->archdata.irqs[0]; 972 up->port.irq = op->archdata.irqs[0];
973 973
974 up->port.fifosize = SAB82532_XMIT_FIFO_SIZE; 974 up->port.fifosize = SAB82532_XMIT_FIFO_SIZE;
975 up->port.iotype = UPIO_MEM; 975 up->port.iotype = UPIO_MEM;
976 976
977 writeb(SAB82532_IPC_IC_ACT_LOW, &up->regs->w.ipc); 977 writeb(SAB82532_IPC_IC_ACT_LOW, &up->regs->w.ipc);
978 978
979 up->port.ops = &sunsab_pops; 979 up->port.ops = &sunsab_pops;
980 up->port.type = PORT_SUNSAB; 980 up->port.type = PORT_SUNSAB;
981 up->port.uartclk = SAB_BASE_BAUD; 981 up->port.uartclk = SAB_BASE_BAUD;
982 982
983 up->type = readb(&up->regs->r.vstr) & 0x0f; 983 up->type = readb(&up->regs->r.vstr) & 0x0f;
984 writeb(~((1 << 1) | (1 << 2) | (1 << 4)), &up->regs->w.pcr); 984 writeb(~((1 << 1) | (1 << 2) | (1 << 4)), &up->regs->w.pcr);
985 writeb(0xff, &up->regs->w.pim); 985 writeb(0xff, &up->regs->w.pim);
986 if ((up->port.line & 0x1) == 0) { 986 if ((up->port.line & 0x1) == 0) {
987 up->pvr_dsr_bit = (1 << 0); 987 up->pvr_dsr_bit = (1 << 0);
988 up->pvr_dtr_bit = (1 << 1); 988 up->pvr_dtr_bit = (1 << 1);
989 up->gis_shift = 2; 989 up->gis_shift = 2;
990 } else { 990 } else {
991 up->pvr_dsr_bit = (1 << 3); 991 up->pvr_dsr_bit = (1 << 3);
992 up->pvr_dtr_bit = (1 << 2); 992 up->pvr_dtr_bit = (1 << 2);
993 up->gis_shift = 0; 993 up->gis_shift = 0;
994 } 994 }
995 up->cached_pvr = (1 << 1) | (1 << 2) | (1 << 4); 995 up->cached_pvr = (1 << 1) | (1 << 2) | (1 << 4);
996 writeb(up->cached_pvr, &up->regs->w.pvr); 996 writeb(up->cached_pvr, &up->regs->w.pvr);
997 up->cached_mode = readb(&up->regs->rw.mode); 997 up->cached_mode = readb(&up->regs->rw.mode);
998 up->cached_mode |= SAB82532_MODE_FRTS; 998 up->cached_mode |= SAB82532_MODE_FRTS;
999 writeb(up->cached_mode, &up->regs->rw.mode); 999 writeb(up->cached_mode, &up->regs->rw.mode);
1000 up->cached_mode |= SAB82532_MODE_RTS; 1000 up->cached_mode |= SAB82532_MODE_RTS;
1001 writeb(up->cached_mode, &up->regs->rw.mode); 1001 writeb(up->cached_mode, &up->regs->rw.mode);
1002 1002
1003 up->tec_timeout = SAB82532_MAX_TEC_TIMEOUT; 1003 up->tec_timeout = SAB82532_MAX_TEC_TIMEOUT;
1004 up->cec_timeout = SAB82532_MAX_CEC_TIMEOUT; 1004 up->cec_timeout = SAB82532_MAX_CEC_TIMEOUT;
1005 1005
1006 return 0; 1006 return 0;
1007 } 1007 }
1008 1008
1009 static int __devinit sab_probe(struct platform_device *op) 1009 static int __devinit sab_probe(struct platform_device *op)
1010 { 1010 {
1011 static int inst; 1011 static int inst;
1012 struct uart_sunsab_port *up; 1012 struct uart_sunsab_port *up;
1013 int err; 1013 int err;
1014 1014
1015 up = &sunsab_ports[inst * 2]; 1015 up = &sunsab_ports[inst * 2];
1016 1016
1017 err = sunsab_init_one(&up[0], op, 1017 err = sunsab_init_one(&up[0], op,
1018 0, 1018 0,
1019 (inst * 2) + 0); 1019 (inst * 2) + 0);
1020 if (err) 1020 if (err)
1021 goto out; 1021 goto out;
1022 1022
1023 err = sunsab_init_one(&up[1], op, 1023 err = sunsab_init_one(&up[1], op,
1024 sizeof(union sab82532_async_regs), 1024 sizeof(union sab82532_async_regs),
1025 (inst * 2) + 1); 1025 (inst * 2) + 1);
1026 if (err) 1026 if (err)
1027 goto out1; 1027 goto out1;
1028 1028
1029 sunserial_console_match(SUNSAB_CONSOLE(), op->dev.of_node, 1029 sunserial_console_match(SUNSAB_CONSOLE(), op->dev.of_node,
1030 &sunsab_reg, up[0].port.line, 1030 &sunsab_reg, up[0].port.line,
1031 false); 1031 false);
1032 1032
1033 sunserial_console_match(SUNSAB_CONSOLE(), op->dev.of_node, 1033 sunserial_console_match(SUNSAB_CONSOLE(), op->dev.of_node,
1034 &sunsab_reg, up[1].port.line, 1034 &sunsab_reg, up[1].port.line,
1035 false); 1035 false);
1036 1036
1037 err = uart_add_one_port(&sunsab_reg, &up[0].port); 1037 err = uart_add_one_port(&sunsab_reg, &up[0].port);
1038 if (err) 1038 if (err)
1039 goto out2; 1039 goto out2;
1040 1040
1041 err = uart_add_one_port(&sunsab_reg, &up[1].port); 1041 err = uart_add_one_port(&sunsab_reg, &up[1].port);
1042 if (err) 1042 if (err)
1043 goto out3; 1043 goto out3;
1044 1044
1045 dev_set_drvdata(&op->dev, &up[0]); 1045 dev_set_drvdata(&op->dev, &up[0]);
1046 1046
1047 inst++; 1047 inst++;
1048 1048
1049 return 0; 1049 return 0;
1050 1050
1051 out3: 1051 out3:
1052 uart_remove_one_port(&sunsab_reg, &up[0].port); 1052 uart_remove_one_port(&sunsab_reg, &up[0].port);
1053 out2: 1053 out2:
1054 of_iounmap(&op->resource[0], 1054 of_iounmap(&op->resource[0],
1055 up[1].port.membase, 1055 up[1].port.membase,
1056 sizeof(union sab82532_async_regs)); 1056 sizeof(union sab82532_async_regs));
1057 out1: 1057 out1:
1058 of_iounmap(&op->resource[0], 1058 of_iounmap(&op->resource[0],
1059 up[0].port.membase, 1059 up[0].port.membase,
1060 sizeof(union sab82532_async_regs)); 1060 sizeof(union sab82532_async_regs));
1061 out: 1061 out:
1062 return err; 1062 return err;
1063 } 1063 }
1064 1064
1065 static int __devexit sab_remove(struct platform_device *op) 1065 static int __devexit sab_remove(struct platform_device *op)
1066 { 1066 {
1067 struct uart_sunsab_port *up = dev_get_drvdata(&op->dev); 1067 struct uart_sunsab_port *up = dev_get_drvdata(&op->dev);
1068 1068
1069 uart_remove_one_port(&sunsab_reg, &up[1].port); 1069 uart_remove_one_port(&sunsab_reg, &up[1].port);
1070 uart_remove_one_port(&sunsab_reg, &up[0].port); 1070 uart_remove_one_port(&sunsab_reg, &up[0].port);
1071 of_iounmap(&op->resource[0], 1071 of_iounmap(&op->resource[0],
1072 up[1].port.membase, 1072 up[1].port.membase,
1073 sizeof(union sab82532_async_regs)); 1073 sizeof(union sab82532_async_regs));
1074 of_iounmap(&op->resource[0], 1074 of_iounmap(&op->resource[0],
1075 up[0].port.membase, 1075 up[0].port.membase,
1076 sizeof(union sab82532_async_regs)); 1076 sizeof(union sab82532_async_regs));
1077 1077
1078 dev_set_drvdata(&op->dev, NULL); 1078 dev_set_drvdata(&op->dev, NULL);
1079 1079
1080 return 0; 1080 return 0;
1081 } 1081 }
1082 1082
1083 static const struct of_device_id sab_match[] = { 1083 static const struct of_device_id sab_match[] = {
1084 { 1084 {
1085 .name = "se", 1085 .name = "se",
1086 }, 1086 },
1087 { 1087 {
1088 .name = "serial", 1088 .name = "serial",
1089 .compatible = "sab82532", 1089 .compatible = "sab82532",
1090 }, 1090 },
1091 {}, 1091 {},
1092 }; 1092 };
1093 MODULE_DEVICE_TABLE(of, sab_match); 1093 MODULE_DEVICE_TABLE(of, sab_match);
1094 1094
1095 static struct platform_driver sab_driver = { 1095 static struct platform_driver sab_driver = {
1096 .driver = { 1096 .driver = {
1097 .name = "sab", 1097 .name = "sab",
1098 .owner = THIS_MODULE, 1098 .owner = THIS_MODULE,
1099 .of_match_table = sab_match, 1099 .of_match_table = sab_match,
1100 }, 1100 },
1101 .probe = sab_probe, 1101 .probe = sab_probe,
1102 .remove = __devexit_p(sab_remove), 1102 .remove = __devexit_p(sab_remove),
1103 }; 1103 };
1104 1104
1105 static int __init sunsab_init(void) 1105 static int __init sunsab_init(void)
1106 { 1106 {
1107 struct device_node *dp; 1107 struct device_node *dp;
1108 int err; 1108 int err;
1109 int num_channels = 0; 1109 int num_channels = 0;
1110 1110
1111 for_each_node_by_name(dp, "se") 1111 for_each_node_by_name(dp, "se")
1112 num_channels += 2; 1112 num_channels += 2;
1113 for_each_node_by_name(dp, "serial") { 1113 for_each_node_by_name(dp, "serial") {
1114 if (of_device_is_compatible(dp, "sab82532")) 1114 if (of_device_is_compatible(dp, "sab82532"))
1115 num_channels += 2; 1115 num_channels += 2;
1116 } 1116 }
1117 1117
1118 if (num_channels) { 1118 if (num_channels) {
1119 sunsab_ports = kzalloc(sizeof(struct uart_sunsab_port) * 1119 sunsab_ports = kzalloc(sizeof(struct uart_sunsab_port) *
1120 num_channels, GFP_KERNEL); 1120 num_channels, GFP_KERNEL);
1121 if (!sunsab_ports) 1121 if (!sunsab_ports)
1122 return -ENOMEM; 1122 return -ENOMEM;
1123 1123
1124 err = sunserial_register_minors(&sunsab_reg, num_channels); 1124 err = sunserial_register_minors(&sunsab_reg, num_channels);
1125 if (err) { 1125 if (err) {
1126 kfree(sunsab_ports); 1126 kfree(sunsab_ports);
1127 sunsab_ports = NULL; 1127 sunsab_ports = NULL;
1128 1128
1129 return err; 1129 return err;
1130 } 1130 }
1131 } 1131 }
1132 1132
1133 return platform_driver_register(&sab_driver); 1133 return platform_driver_register(&sab_driver);
1134 } 1134 }
1135 1135
1136 static void __exit sunsab_exit(void) 1136 static void __exit sunsab_exit(void)
1137 { 1137 {
1138 platform_driver_unregister(&sab_driver); 1138 platform_driver_unregister(&sab_driver);
1139 if (sunsab_reg.nr) { 1139 if (sunsab_reg.nr) {
1140 sunserial_unregister_minors(&sunsab_reg, sunsab_reg.nr); 1140 sunserial_unregister_minors(&sunsab_reg, sunsab_reg.nr);
1141 } 1141 }
1142 1142
1143 kfree(sunsab_ports); 1143 kfree(sunsab_ports);
1144 sunsab_ports = NULL; 1144 sunsab_ports = NULL;
1145 } 1145 }
1146 1146
1147 module_init(sunsab_init); 1147 module_init(sunsab_init);
1148 module_exit(sunsab_exit); 1148 module_exit(sunsab_exit);
1149 1149
1150 MODULE_AUTHOR("Eddie C. Dost and David S. Miller"); 1150 MODULE_AUTHOR("Eddie C. Dost and David S. Miller");
1151 MODULE_DESCRIPTION("Sun SAB82532 serial port driver"); 1151 MODULE_DESCRIPTION("Sun SAB82532 serial port driver");
1152 MODULE_LICENSE("GPL"); 1152 MODULE_LICENSE("GPL");
drivers/tty/serial/sunsu.c
1 /* 1 /*
2 * su.c: Small serial driver for keyboard/mouse interface on sparc32/PCI 2 * su.c: Small serial driver for keyboard/mouse interface on sparc32/PCI
3 * 3 *
4 * Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be) 4 * Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be)
5 * Copyright (C) 1998-1999 Pete Zaitcev (zaitcev@yahoo.com) 5 * Copyright (C) 1998-1999 Pete Zaitcev (zaitcev@yahoo.com)
6 * 6 *
7 * This is mainly a variation of 8250.c, credits go to authors mentioned 7 * This is mainly a variation of 8250.c, credits go to authors mentioned
8 * therein. In fact this driver should be merged into the generic 8250.c 8 * therein. In fact this driver should be merged into the generic 8250.c
9 * infrastructure perhaps using a 8250_sparc.c module. 9 * infrastructure perhaps using a 8250_sparc.c module.
10 * 10 *
11 * Fixed to use tty_get_baud_rate(). 11 * Fixed to use tty_get_baud_rate().
12 * Theodore Ts'o <tytso@mit.edu>, 2001-Oct-12 12 * Theodore Ts'o <tytso@mit.edu>, 2001-Oct-12
13 * 13 *
14 * Converted to new 2.5.x UART layer. 14 * Converted to new 2.5.x UART layer.
15 * David S. Miller (davem@davemloft.net), 2002-Jul-29 15 * David S. Miller (davem@davemloft.net), 2002-Jul-29
16 */ 16 */
17 17
18 #include <linux/module.h> 18 #include <linux/module.h>
19 #include <linux/kernel.h> 19 #include <linux/kernel.h>
20 #include <linux/spinlock.h> 20 #include <linux/spinlock.h>
21 #include <linux/errno.h> 21 #include <linux/errno.h>
22 #include <linux/tty.h> 22 #include <linux/tty.h>
23 #include <linux/tty_flip.h> 23 #include <linux/tty_flip.h>
24 #include <linux/major.h> 24 #include <linux/major.h>
25 #include <linux/string.h> 25 #include <linux/string.h>
26 #include <linux/ptrace.h> 26 #include <linux/ptrace.h>
27 #include <linux/ioport.h> 27 #include <linux/ioport.h>
28 #include <linux/circ_buf.h> 28 #include <linux/circ_buf.h>
29 #include <linux/serial.h> 29 #include <linux/serial.h>
30 #include <linux/sysrq.h> 30 #include <linux/sysrq.h>
31 #include <linux/console.h> 31 #include <linux/console.h>
32 #include <linux/slab.h> 32 #include <linux/slab.h>
33 #ifdef CONFIG_SERIO 33 #ifdef CONFIG_SERIO
34 #include <linux/serio.h> 34 #include <linux/serio.h>
35 #endif 35 #endif
36 #include <linux/serial_reg.h> 36 #include <linux/serial_reg.h>
37 #include <linux/init.h> 37 #include <linux/init.h>
38 #include <linux/delay.h> 38 #include <linux/delay.h>
39 #include <linux/of_device.h> 39 #include <linux/of_device.h>
40 40
41 #include <asm/io.h> 41 #include <asm/io.h>
42 #include <asm/irq.h> 42 #include <asm/irq.h>
43 #include <asm/prom.h> 43 #include <asm/prom.h>
44 44
45 #if defined(CONFIG_SERIAL_SUNSU_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) 45 #if defined(CONFIG_SERIAL_SUNSU_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
46 #define SUPPORT_SYSRQ 46 #define SUPPORT_SYSRQ
47 #endif 47 #endif
48 48
49 #include <linux/serial_core.h> 49 #include <linux/serial_core.h>
50 50 #include <linux/sunserialcore.h>
51 #include "suncore.h"
52 51
53 /* We are on a NS PC87303 clocked with 24.0 MHz, which results 52 /* We are on a NS PC87303 clocked with 24.0 MHz, which results
54 * in a UART clock of 1.8462 MHz. 53 * in a UART clock of 1.8462 MHz.
55 */ 54 */
56 #define SU_BASE_BAUD (1846200 / 16) 55 #define SU_BASE_BAUD (1846200 / 16)
57 56
58 enum su_type { SU_PORT_NONE, SU_PORT_MS, SU_PORT_KBD, SU_PORT_PORT }; 57 enum su_type { SU_PORT_NONE, SU_PORT_MS, SU_PORT_KBD, SU_PORT_PORT };
59 static char *su_typev[] = { "su(???)", "su(mouse)", "su(kbd)", "su(serial)" }; 58 static char *su_typev[] = { "su(???)", "su(mouse)", "su(kbd)", "su(serial)" };
60 59
61 /* 60 /*
62 * Here we define the default xmit fifo size used for each type of UART. 61 * Here we define the default xmit fifo size used for each type of UART.
63 */ 62 */
64 static const struct serial_uart_config uart_config[PORT_MAX_8250+1] = { 63 static const struct serial_uart_config uart_config[PORT_MAX_8250+1] = {
65 { "unknown", 1, 0 }, 64 { "unknown", 1, 0 },
66 { "8250", 1, 0 }, 65 { "8250", 1, 0 },
67 { "16450", 1, 0 }, 66 { "16450", 1, 0 },
68 { "16550", 1, 0 }, 67 { "16550", 1, 0 },
69 { "16550A", 16, UART_CLEAR_FIFO | UART_USE_FIFO }, 68 { "16550A", 16, UART_CLEAR_FIFO | UART_USE_FIFO },
70 { "Cirrus", 1, 0 }, 69 { "Cirrus", 1, 0 },
71 { "ST16650", 1, UART_CLEAR_FIFO | UART_STARTECH }, 70 { "ST16650", 1, UART_CLEAR_FIFO | UART_STARTECH },
72 { "ST16650V2", 32, UART_CLEAR_FIFO | UART_USE_FIFO | UART_STARTECH }, 71 { "ST16650V2", 32, UART_CLEAR_FIFO | UART_USE_FIFO | UART_STARTECH },
73 { "TI16750", 64, UART_CLEAR_FIFO | UART_USE_FIFO }, 72 { "TI16750", 64, UART_CLEAR_FIFO | UART_USE_FIFO },
74 { "Startech", 1, 0 }, 73 { "Startech", 1, 0 },
75 { "16C950/954", 128, UART_CLEAR_FIFO | UART_USE_FIFO }, 74 { "16C950/954", 128, UART_CLEAR_FIFO | UART_USE_FIFO },
76 { "ST16654", 64, UART_CLEAR_FIFO | UART_USE_FIFO | UART_STARTECH }, 75 { "ST16654", 64, UART_CLEAR_FIFO | UART_USE_FIFO | UART_STARTECH },
77 { "XR16850", 128, UART_CLEAR_FIFO | UART_USE_FIFO | UART_STARTECH }, 76 { "XR16850", 128, UART_CLEAR_FIFO | UART_USE_FIFO | UART_STARTECH },
78 { "RSA", 2048, UART_CLEAR_FIFO | UART_USE_FIFO } 77 { "RSA", 2048, UART_CLEAR_FIFO | UART_USE_FIFO }
79 }; 78 };
80 79
81 struct uart_sunsu_port { 80 struct uart_sunsu_port {
82 struct uart_port port; 81 struct uart_port port;
83 unsigned char acr; 82 unsigned char acr;
84 unsigned char ier; 83 unsigned char ier;
85 unsigned short rev; 84 unsigned short rev;
86 unsigned char lcr; 85 unsigned char lcr;
87 unsigned int lsr_break_flag; 86 unsigned int lsr_break_flag;
88 unsigned int cflag; 87 unsigned int cflag;
89 88
90 /* Probing information. */ 89 /* Probing information. */
91 enum su_type su_type; 90 enum su_type su_type;
92 unsigned int type_probed; /* XXX Stupid */ 91 unsigned int type_probed; /* XXX Stupid */
93 unsigned long reg_size; 92 unsigned long reg_size;
94 93
95 #ifdef CONFIG_SERIO 94 #ifdef CONFIG_SERIO
96 struct serio serio; 95 struct serio serio;
97 int serio_open; 96 int serio_open;
98 #endif 97 #endif
99 }; 98 };
100 99
101 static unsigned int serial_in(struct uart_sunsu_port *up, int offset) 100 static unsigned int serial_in(struct uart_sunsu_port *up, int offset)
102 { 101 {
103 offset <<= up->port.regshift; 102 offset <<= up->port.regshift;
104 103
105 switch (up->port.iotype) { 104 switch (up->port.iotype) {
106 case UPIO_HUB6: 105 case UPIO_HUB6:
107 outb(up->port.hub6 - 1 + offset, up->port.iobase); 106 outb(up->port.hub6 - 1 + offset, up->port.iobase);
108 return inb(up->port.iobase + 1); 107 return inb(up->port.iobase + 1);
109 108
110 case UPIO_MEM: 109 case UPIO_MEM:
111 return readb(up->port.membase + offset); 110 return readb(up->port.membase + offset);
112 111
113 default: 112 default:
114 return inb(up->port.iobase + offset); 113 return inb(up->port.iobase + offset);
115 } 114 }
116 } 115 }
117 116
118 static void serial_out(struct uart_sunsu_port *up, int offset, int value) 117 static void serial_out(struct uart_sunsu_port *up, int offset, int value)
119 { 118 {
120 #ifndef CONFIG_SPARC64 119 #ifndef CONFIG_SPARC64
121 /* 120 /*
122 * MrCoffee has weird schematics: IRQ4 & P10(?) pins of SuperIO are 121 * MrCoffee has weird schematics: IRQ4 & P10(?) pins of SuperIO are
123 * connected with a gate then go to SlavIO. When IRQ4 goes tristated 122 * connected with a gate then go to SlavIO. When IRQ4 goes tristated
124 * gate outputs a logical one. Since we use level triggered interrupts 123 * gate outputs a logical one. Since we use level triggered interrupts
125 * we have lockup and watchdog reset. We cannot mask IRQ because 124 * we have lockup and watchdog reset. We cannot mask IRQ because
126 * keyboard shares IRQ with us (Word has it as Bob Smelik's design). 125 * keyboard shares IRQ with us (Word has it as Bob Smelik's design).
127 * This problem is similar to what Alpha people suffer, see serial.c. 126 * This problem is similar to what Alpha people suffer, see serial.c.
128 */ 127 */
129 if (offset == UART_MCR) 128 if (offset == UART_MCR)
130 value |= UART_MCR_OUT2; 129 value |= UART_MCR_OUT2;
131 #endif 130 #endif
132 offset <<= up->port.regshift; 131 offset <<= up->port.regshift;
133 132
134 switch (up->port.iotype) { 133 switch (up->port.iotype) {
135 case UPIO_HUB6: 134 case UPIO_HUB6:
136 outb(up->port.hub6 - 1 + offset, up->port.iobase); 135 outb(up->port.hub6 - 1 + offset, up->port.iobase);
137 outb(value, up->port.iobase + 1); 136 outb(value, up->port.iobase + 1);
138 break; 137 break;
139 138
140 case UPIO_MEM: 139 case UPIO_MEM:
141 writeb(value, up->port.membase + offset); 140 writeb(value, up->port.membase + offset);
142 break; 141 break;
143 142
144 default: 143 default:
145 outb(value, up->port.iobase + offset); 144 outb(value, up->port.iobase + offset);
146 } 145 }
147 } 146 }
148 147
149 /* 148 /*
150 * We used to support using pause I/O for certain machines. We 149 * We used to support using pause I/O for certain machines. We
151 * haven't supported this for a while, but just in case it's badly 150 * haven't supported this for a while, but just in case it's badly
152 * needed for certain old 386 machines, I've left these #define's 151 * needed for certain old 386 machines, I've left these #define's
153 * in.... 152 * in....
154 */ 153 */
155 #define serial_inp(up, offset) serial_in(up, offset) 154 #define serial_inp(up, offset) serial_in(up, offset)
156 #define serial_outp(up, offset, value) serial_out(up, offset, value) 155 #define serial_outp(up, offset, value) serial_out(up, offset, value)
157 156
158 157
159 /* 158 /*
160 * For the 16C950 159 * For the 16C950
161 */ 160 */
162 static void serial_icr_write(struct uart_sunsu_port *up, int offset, int value) 161 static void serial_icr_write(struct uart_sunsu_port *up, int offset, int value)
163 { 162 {
164 serial_out(up, UART_SCR, offset); 163 serial_out(up, UART_SCR, offset);
165 serial_out(up, UART_ICR, value); 164 serial_out(up, UART_ICR, value);
166 } 165 }
167 166
168 #if 0 /* Unused currently */ 167 #if 0 /* Unused currently */
169 static unsigned int serial_icr_read(struct uart_sunsu_port *up, int offset) 168 static unsigned int serial_icr_read(struct uart_sunsu_port *up, int offset)
170 { 169 {
171 unsigned int value; 170 unsigned int value;
172 171
173 serial_icr_write(up, UART_ACR, up->acr | UART_ACR_ICRRD); 172 serial_icr_write(up, UART_ACR, up->acr | UART_ACR_ICRRD);
174 serial_out(up, UART_SCR, offset); 173 serial_out(up, UART_SCR, offset);
175 value = serial_in(up, UART_ICR); 174 value = serial_in(up, UART_ICR);
176 serial_icr_write(up, UART_ACR, up->acr); 175 serial_icr_write(up, UART_ACR, up->acr);
177 176
178 return value; 177 return value;
179 } 178 }
180 #endif 179 #endif
181 180
182 #ifdef CONFIG_SERIAL_8250_RSA 181 #ifdef CONFIG_SERIAL_8250_RSA
183 /* 182 /*
184 * Attempts to turn on the RSA FIFO. Returns zero on failure. 183 * Attempts to turn on the RSA FIFO. Returns zero on failure.
185 * We set the port uart clock rate if we succeed. 184 * We set the port uart clock rate if we succeed.
186 */ 185 */
187 static int __enable_rsa(struct uart_sunsu_port *up) 186 static int __enable_rsa(struct uart_sunsu_port *up)
188 { 187 {
189 unsigned char mode; 188 unsigned char mode;
190 int result; 189 int result;
191 190
192 mode = serial_inp(up, UART_RSA_MSR); 191 mode = serial_inp(up, UART_RSA_MSR);
193 result = mode & UART_RSA_MSR_FIFO; 192 result = mode & UART_RSA_MSR_FIFO;
194 193
195 if (!result) { 194 if (!result) {
196 serial_outp(up, UART_RSA_MSR, mode | UART_RSA_MSR_FIFO); 195 serial_outp(up, UART_RSA_MSR, mode | UART_RSA_MSR_FIFO);
197 mode = serial_inp(up, UART_RSA_MSR); 196 mode = serial_inp(up, UART_RSA_MSR);
198 result = mode & UART_RSA_MSR_FIFO; 197 result = mode & UART_RSA_MSR_FIFO;
199 } 198 }
200 199
201 if (result) 200 if (result)
202 up->port.uartclk = SERIAL_RSA_BAUD_BASE * 16; 201 up->port.uartclk = SERIAL_RSA_BAUD_BASE * 16;
203 202
204 return result; 203 return result;
205 } 204 }
206 205
207 static void enable_rsa(struct uart_sunsu_port *up) 206 static void enable_rsa(struct uart_sunsu_port *up)
208 { 207 {
209 if (up->port.type == PORT_RSA) { 208 if (up->port.type == PORT_RSA) {
210 if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) { 209 if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) {
211 spin_lock_irq(&up->port.lock); 210 spin_lock_irq(&up->port.lock);
212 __enable_rsa(up); 211 __enable_rsa(up);
213 spin_unlock_irq(&up->port.lock); 212 spin_unlock_irq(&up->port.lock);
214 } 213 }
215 if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) 214 if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16)
216 serial_outp(up, UART_RSA_FRR, 0); 215 serial_outp(up, UART_RSA_FRR, 0);
217 } 216 }
218 } 217 }
219 218
220 /* 219 /*
221 * Attempts to turn off the RSA FIFO. Returns zero on failure. 220 * Attempts to turn off the RSA FIFO. Returns zero on failure.
222 * It is unknown why interrupts were disabled in here. However, 221 * It is unknown why interrupts were disabled in here. However,
223 * the caller is expected to preserve this behaviour by grabbing 222 * the caller is expected to preserve this behaviour by grabbing
224 * the spinlock before calling this function. 223 * the spinlock before calling this function.
225 */ 224 */
226 static void disable_rsa(struct uart_sunsu_port *up) 225 static void disable_rsa(struct uart_sunsu_port *up)
227 { 226 {
228 unsigned char mode; 227 unsigned char mode;
229 int result; 228 int result;
230 229
231 if (up->port.type == PORT_RSA && 230 if (up->port.type == PORT_RSA &&
232 up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) { 231 up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) {
233 spin_lock_irq(&up->port.lock); 232 spin_lock_irq(&up->port.lock);
234 233
235 mode = serial_inp(up, UART_RSA_MSR); 234 mode = serial_inp(up, UART_RSA_MSR);
236 result = !(mode & UART_RSA_MSR_FIFO); 235 result = !(mode & UART_RSA_MSR_FIFO);
237 236
238 if (!result) { 237 if (!result) {
239 serial_outp(up, UART_RSA_MSR, mode & ~UART_RSA_MSR_FIFO); 238 serial_outp(up, UART_RSA_MSR, mode & ~UART_RSA_MSR_FIFO);
240 mode = serial_inp(up, UART_RSA_MSR); 239 mode = serial_inp(up, UART_RSA_MSR);
241 result = !(mode & UART_RSA_MSR_FIFO); 240 result = !(mode & UART_RSA_MSR_FIFO);
242 } 241 }
243 242
244 if (result) 243 if (result)
245 up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16; 244 up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16;
246 spin_unlock_irq(&up->port.lock); 245 spin_unlock_irq(&up->port.lock);
247 } 246 }
248 } 247 }
249 #endif /* CONFIG_SERIAL_8250_RSA */ 248 #endif /* CONFIG_SERIAL_8250_RSA */
250 249
251 static inline void __stop_tx(struct uart_sunsu_port *p) 250 static inline void __stop_tx(struct uart_sunsu_port *p)
252 { 251 {
253 if (p->ier & UART_IER_THRI) { 252 if (p->ier & UART_IER_THRI) {
254 p->ier &= ~UART_IER_THRI; 253 p->ier &= ~UART_IER_THRI;
255 serial_out(p, UART_IER, p->ier); 254 serial_out(p, UART_IER, p->ier);
256 } 255 }
257 } 256 }
258 257
259 static void sunsu_stop_tx(struct uart_port *port) 258 static void sunsu_stop_tx(struct uart_port *port)
260 { 259 {
261 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port; 260 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
262 261
263 __stop_tx(up); 262 __stop_tx(up);
264 263
265 /* 264 /*
266 * We really want to stop the transmitter from sending. 265 * We really want to stop the transmitter from sending.
267 */ 266 */
268 if (up->port.type == PORT_16C950) { 267 if (up->port.type == PORT_16C950) {
269 up->acr |= UART_ACR_TXDIS; 268 up->acr |= UART_ACR_TXDIS;
270 serial_icr_write(up, UART_ACR, up->acr); 269 serial_icr_write(up, UART_ACR, up->acr);
271 } 270 }
272 } 271 }
273 272
274 static void sunsu_start_tx(struct uart_port *port) 273 static void sunsu_start_tx(struct uart_port *port)
275 { 274 {
276 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port; 275 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
277 276
278 if (!(up->ier & UART_IER_THRI)) { 277 if (!(up->ier & UART_IER_THRI)) {
279 up->ier |= UART_IER_THRI; 278 up->ier |= UART_IER_THRI;
280 serial_out(up, UART_IER, up->ier); 279 serial_out(up, UART_IER, up->ier);
281 } 280 }
282 281
283 /* 282 /*
284 * Re-enable the transmitter if we disabled it. 283 * Re-enable the transmitter if we disabled it.
285 */ 284 */
286 if (up->port.type == PORT_16C950 && up->acr & UART_ACR_TXDIS) { 285 if (up->port.type == PORT_16C950 && up->acr & UART_ACR_TXDIS) {
287 up->acr &= ~UART_ACR_TXDIS; 286 up->acr &= ~UART_ACR_TXDIS;
288 serial_icr_write(up, UART_ACR, up->acr); 287 serial_icr_write(up, UART_ACR, up->acr);
289 } 288 }
290 } 289 }
291 290
292 static void sunsu_stop_rx(struct uart_port *port) 291 static void sunsu_stop_rx(struct uart_port *port)
293 { 292 {
294 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port; 293 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
295 294
296 up->ier &= ~UART_IER_RLSI; 295 up->ier &= ~UART_IER_RLSI;
297 up->port.read_status_mask &= ~UART_LSR_DR; 296 up->port.read_status_mask &= ~UART_LSR_DR;
298 serial_out(up, UART_IER, up->ier); 297 serial_out(up, UART_IER, up->ier);
299 } 298 }
300 299
301 static void sunsu_enable_ms(struct uart_port *port) 300 static void sunsu_enable_ms(struct uart_port *port)
302 { 301 {
303 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port; 302 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
304 unsigned long flags; 303 unsigned long flags;
305 304
306 spin_lock_irqsave(&up->port.lock, flags); 305 spin_lock_irqsave(&up->port.lock, flags);
307 up->ier |= UART_IER_MSI; 306 up->ier |= UART_IER_MSI;
308 serial_out(up, UART_IER, up->ier); 307 serial_out(up, UART_IER, up->ier);
309 spin_unlock_irqrestore(&up->port.lock, flags); 308 spin_unlock_irqrestore(&up->port.lock, flags);
310 } 309 }
311 310
312 static struct tty_struct * 311 static struct tty_struct *
313 receive_chars(struct uart_sunsu_port *up, unsigned char *status) 312 receive_chars(struct uart_sunsu_port *up, unsigned char *status)
314 { 313 {
315 struct tty_struct *tty = up->port.state->port.tty; 314 struct tty_struct *tty = up->port.state->port.tty;
316 unsigned char ch, flag; 315 unsigned char ch, flag;
317 int max_count = 256; 316 int max_count = 256;
318 int saw_console_brk = 0; 317 int saw_console_brk = 0;
319 318
320 do { 319 do {
321 ch = serial_inp(up, UART_RX); 320 ch = serial_inp(up, UART_RX);
322 flag = TTY_NORMAL; 321 flag = TTY_NORMAL;
323 up->port.icount.rx++; 322 up->port.icount.rx++;
324 323
325 if (unlikely(*status & (UART_LSR_BI | UART_LSR_PE | 324 if (unlikely(*status & (UART_LSR_BI | UART_LSR_PE |
326 UART_LSR_FE | UART_LSR_OE))) { 325 UART_LSR_FE | UART_LSR_OE))) {
327 /* 326 /*
328 * For statistics only 327 * For statistics only
329 */ 328 */
330 if (*status & UART_LSR_BI) { 329 if (*status & UART_LSR_BI) {
331 *status &= ~(UART_LSR_FE | UART_LSR_PE); 330 *status &= ~(UART_LSR_FE | UART_LSR_PE);
332 up->port.icount.brk++; 331 up->port.icount.brk++;
333 if (up->port.cons != NULL && 332 if (up->port.cons != NULL &&
334 up->port.line == up->port.cons->index) 333 up->port.line == up->port.cons->index)
335 saw_console_brk = 1; 334 saw_console_brk = 1;
336 /* 335 /*
337 * We do the SysRQ and SAK checking 336 * We do the SysRQ and SAK checking
338 * here because otherwise the break 337 * here because otherwise the break
339 * may get masked by ignore_status_mask 338 * may get masked by ignore_status_mask
340 * or read_status_mask. 339 * or read_status_mask.
341 */ 340 */
342 if (uart_handle_break(&up->port)) 341 if (uart_handle_break(&up->port))
343 goto ignore_char; 342 goto ignore_char;
344 } else if (*status & UART_LSR_PE) 343 } else if (*status & UART_LSR_PE)
345 up->port.icount.parity++; 344 up->port.icount.parity++;
346 else if (*status & UART_LSR_FE) 345 else if (*status & UART_LSR_FE)
347 up->port.icount.frame++; 346 up->port.icount.frame++;
348 if (*status & UART_LSR_OE) 347 if (*status & UART_LSR_OE)
349 up->port.icount.overrun++; 348 up->port.icount.overrun++;
350 349
351 /* 350 /*
352 * Mask off conditions which should be ingored. 351 * Mask off conditions which should be ingored.
353 */ 352 */
354 *status &= up->port.read_status_mask; 353 *status &= up->port.read_status_mask;
355 354
356 if (up->port.cons != NULL && 355 if (up->port.cons != NULL &&
357 up->port.line == up->port.cons->index) { 356 up->port.line == up->port.cons->index) {
358 /* Recover the break flag from console xmit */ 357 /* Recover the break flag from console xmit */
359 *status |= up->lsr_break_flag; 358 *status |= up->lsr_break_flag;
360 up->lsr_break_flag = 0; 359 up->lsr_break_flag = 0;
361 } 360 }
362 361
363 if (*status & UART_LSR_BI) { 362 if (*status & UART_LSR_BI) {
364 flag = TTY_BREAK; 363 flag = TTY_BREAK;
365 } else if (*status & UART_LSR_PE) 364 } else if (*status & UART_LSR_PE)
366 flag = TTY_PARITY; 365 flag = TTY_PARITY;
367 else if (*status & UART_LSR_FE) 366 else if (*status & UART_LSR_FE)
368 flag = TTY_FRAME; 367 flag = TTY_FRAME;
369 } 368 }
370 if (uart_handle_sysrq_char(&up->port, ch)) 369 if (uart_handle_sysrq_char(&up->port, ch))
371 goto ignore_char; 370 goto ignore_char;
372 if ((*status & up->port.ignore_status_mask) == 0) 371 if ((*status & up->port.ignore_status_mask) == 0)
373 tty_insert_flip_char(tty, ch, flag); 372 tty_insert_flip_char(tty, ch, flag);
374 if (*status & UART_LSR_OE) 373 if (*status & UART_LSR_OE)
375 /* 374 /*
376 * Overrun is special, since it's reported 375 * Overrun is special, since it's reported
377 * immediately, and doesn't affect the current 376 * immediately, and doesn't affect the current
378 * character. 377 * character.
379 */ 378 */
380 tty_insert_flip_char(tty, 0, TTY_OVERRUN); 379 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
381 ignore_char: 380 ignore_char:
382 *status = serial_inp(up, UART_LSR); 381 *status = serial_inp(up, UART_LSR);
383 } while ((*status & UART_LSR_DR) && (max_count-- > 0)); 382 } while ((*status & UART_LSR_DR) && (max_count-- > 0));
384 383
385 if (saw_console_brk) 384 if (saw_console_brk)
386 sun_do_break(); 385 sun_do_break();
387 386
388 return tty; 387 return tty;
389 } 388 }
390 389
391 static void transmit_chars(struct uart_sunsu_port *up) 390 static void transmit_chars(struct uart_sunsu_port *up)
392 { 391 {
393 struct circ_buf *xmit = &up->port.state->xmit; 392 struct circ_buf *xmit = &up->port.state->xmit;
394 int count; 393 int count;
395 394
396 if (up->port.x_char) { 395 if (up->port.x_char) {
397 serial_outp(up, UART_TX, up->port.x_char); 396 serial_outp(up, UART_TX, up->port.x_char);
398 up->port.icount.tx++; 397 up->port.icount.tx++;
399 up->port.x_char = 0; 398 up->port.x_char = 0;
400 return; 399 return;
401 } 400 }
402 if (uart_tx_stopped(&up->port)) { 401 if (uart_tx_stopped(&up->port)) {
403 sunsu_stop_tx(&up->port); 402 sunsu_stop_tx(&up->port);
404 return; 403 return;
405 } 404 }
406 if (uart_circ_empty(xmit)) { 405 if (uart_circ_empty(xmit)) {
407 __stop_tx(up); 406 __stop_tx(up);
408 return; 407 return;
409 } 408 }
410 409
411 count = up->port.fifosize; 410 count = up->port.fifosize;
412 do { 411 do {
413 serial_out(up, UART_TX, xmit->buf[xmit->tail]); 412 serial_out(up, UART_TX, xmit->buf[xmit->tail]);
414 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); 413 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
415 up->port.icount.tx++; 414 up->port.icount.tx++;
416 if (uart_circ_empty(xmit)) 415 if (uart_circ_empty(xmit))
417 break; 416 break;
418 } while (--count > 0); 417 } while (--count > 0);
419 418
420 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) 419 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
421 uart_write_wakeup(&up->port); 420 uart_write_wakeup(&up->port);
422 421
423 if (uart_circ_empty(xmit)) 422 if (uart_circ_empty(xmit))
424 __stop_tx(up); 423 __stop_tx(up);
425 } 424 }
426 425
427 static void check_modem_status(struct uart_sunsu_port *up) 426 static void check_modem_status(struct uart_sunsu_port *up)
428 { 427 {
429 int status; 428 int status;
430 429
431 status = serial_in(up, UART_MSR); 430 status = serial_in(up, UART_MSR);
432 431
433 if ((status & UART_MSR_ANY_DELTA) == 0) 432 if ((status & UART_MSR_ANY_DELTA) == 0)
434 return; 433 return;
435 434
436 if (status & UART_MSR_TERI) 435 if (status & UART_MSR_TERI)
437 up->port.icount.rng++; 436 up->port.icount.rng++;
438 if (status & UART_MSR_DDSR) 437 if (status & UART_MSR_DDSR)
439 up->port.icount.dsr++; 438 up->port.icount.dsr++;
440 if (status & UART_MSR_DDCD) 439 if (status & UART_MSR_DDCD)
441 uart_handle_dcd_change(&up->port, status & UART_MSR_DCD); 440 uart_handle_dcd_change(&up->port, status & UART_MSR_DCD);
442 if (status & UART_MSR_DCTS) 441 if (status & UART_MSR_DCTS)
443 uart_handle_cts_change(&up->port, status & UART_MSR_CTS); 442 uart_handle_cts_change(&up->port, status & UART_MSR_CTS);
444 443
445 wake_up_interruptible(&up->port.state->port.delta_msr_wait); 444 wake_up_interruptible(&up->port.state->port.delta_msr_wait);
446 } 445 }
447 446
448 static irqreturn_t sunsu_serial_interrupt(int irq, void *dev_id) 447 static irqreturn_t sunsu_serial_interrupt(int irq, void *dev_id)
449 { 448 {
450 struct uart_sunsu_port *up = dev_id; 449 struct uart_sunsu_port *up = dev_id;
451 unsigned long flags; 450 unsigned long flags;
452 unsigned char status; 451 unsigned char status;
453 452
454 spin_lock_irqsave(&up->port.lock, flags); 453 spin_lock_irqsave(&up->port.lock, flags);
455 454
456 do { 455 do {
457 struct tty_struct *tty; 456 struct tty_struct *tty;
458 457
459 status = serial_inp(up, UART_LSR); 458 status = serial_inp(up, UART_LSR);
460 tty = NULL; 459 tty = NULL;
461 if (status & UART_LSR_DR) 460 if (status & UART_LSR_DR)
462 tty = receive_chars(up, &status); 461 tty = receive_chars(up, &status);
463 check_modem_status(up); 462 check_modem_status(up);
464 if (status & UART_LSR_THRE) 463 if (status & UART_LSR_THRE)
465 transmit_chars(up); 464 transmit_chars(up);
466 465
467 spin_unlock_irqrestore(&up->port.lock, flags); 466 spin_unlock_irqrestore(&up->port.lock, flags);
468 467
469 if (tty) 468 if (tty)
470 tty_flip_buffer_push(tty); 469 tty_flip_buffer_push(tty);
471 470
472 spin_lock_irqsave(&up->port.lock, flags); 471 spin_lock_irqsave(&up->port.lock, flags);
473 472
474 } while (!(serial_in(up, UART_IIR) & UART_IIR_NO_INT)); 473 } while (!(serial_in(up, UART_IIR) & UART_IIR_NO_INT));
475 474
476 spin_unlock_irqrestore(&up->port.lock, flags); 475 spin_unlock_irqrestore(&up->port.lock, flags);
477 476
478 return IRQ_HANDLED; 477 return IRQ_HANDLED;
479 } 478 }
480 479
481 /* Separate interrupt handling path for keyboard/mouse ports. */ 480 /* Separate interrupt handling path for keyboard/mouse ports. */
482 481
483 static void 482 static void
484 sunsu_change_speed(struct uart_port *port, unsigned int cflag, 483 sunsu_change_speed(struct uart_port *port, unsigned int cflag,
485 unsigned int iflag, unsigned int quot); 484 unsigned int iflag, unsigned int quot);
486 485
487 static void sunsu_change_mouse_baud(struct uart_sunsu_port *up) 486 static void sunsu_change_mouse_baud(struct uart_sunsu_port *up)
488 { 487 {
489 unsigned int cur_cflag = up->cflag; 488 unsigned int cur_cflag = up->cflag;
490 int quot, new_baud; 489 int quot, new_baud;
491 490
492 up->cflag &= ~CBAUD; 491 up->cflag &= ~CBAUD;
493 up->cflag |= suncore_mouse_baud_cflag_next(cur_cflag, &new_baud); 492 up->cflag |= suncore_mouse_baud_cflag_next(cur_cflag, &new_baud);
494 493
495 quot = up->port.uartclk / (16 * new_baud); 494 quot = up->port.uartclk / (16 * new_baud);
496 495
497 sunsu_change_speed(&up->port, up->cflag, 0, quot); 496 sunsu_change_speed(&up->port, up->cflag, 0, quot);
498 } 497 }
499 498
500 static void receive_kbd_ms_chars(struct uart_sunsu_port *up, int is_break) 499 static void receive_kbd_ms_chars(struct uart_sunsu_port *up, int is_break)
501 { 500 {
502 do { 501 do {
503 unsigned char ch = serial_inp(up, UART_RX); 502 unsigned char ch = serial_inp(up, UART_RX);
504 503
505 /* Stop-A is handled by drivers/char/keyboard.c now. */ 504 /* Stop-A is handled by drivers/char/keyboard.c now. */
506 if (up->su_type == SU_PORT_KBD) { 505 if (up->su_type == SU_PORT_KBD) {
507 #ifdef CONFIG_SERIO 506 #ifdef CONFIG_SERIO
508 serio_interrupt(&up->serio, ch, 0); 507 serio_interrupt(&up->serio, ch, 0);
509 #endif 508 #endif
510 } else if (up->su_type == SU_PORT_MS) { 509 } else if (up->su_type == SU_PORT_MS) {
511 int ret = suncore_mouse_baud_detection(ch, is_break); 510 int ret = suncore_mouse_baud_detection(ch, is_break);
512 511
513 switch (ret) { 512 switch (ret) {
514 case 2: 513 case 2:
515 sunsu_change_mouse_baud(up); 514 sunsu_change_mouse_baud(up);
516 /* fallthru */ 515 /* fallthru */
517 case 1: 516 case 1:
518 break; 517 break;
519 518
520 case 0: 519 case 0:
521 #ifdef CONFIG_SERIO 520 #ifdef CONFIG_SERIO
522 serio_interrupt(&up->serio, ch, 0); 521 serio_interrupt(&up->serio, ch, 0);
523 #endif 522 #endif
524 break; 523 break;
525 }; 524 };
526 } 525 }
527 } while (serial_in(up, UART_LSR) & UART_LSR_DR); 526 } while (serial_in(up, UART_LSR) & UART_LSR_DR);
528 } 527 }
529 528
530 static irqreturn_t sunsu_kbd_ms_interrupt(int irq, void *dev_id) 529 static irqreturn_t sunsu_kbd_ms_interrupt(int irq, void *dev_id)
531 { 530 {
532 struct uart_sunsu_port *up = dev_id; 531 struct uart_sunsu_port *up = dev_id;
533 532
534 if (!(serial_in(up, UART_IIR) & UART_IIR_NO_INT)) { 533 if (!(serial_in(up, UART_IIR) & UART_IIR_NO_INT)) {
535 unsigned char status = serial_inp(up, UART_LSR); 534 unsigned char status = serial_inp(up, UART_LSR);
536 535
537 if ((status & UART_LSR_DR) || (status & UART_LSR_BI)) 536 if ((status & UART_LSR_DR) || (status & UART_LSR_BI))
538 receive_kbd_ms_chars(up, (status & UART_LSR_BI) != 0); 537 receive_kbd_ms_chars(up, (status & UART_LSR_BI) != 0);
539 } 538 }
540 539
541 return IRQ_HANDLED; 540 return IRQ_HANDLED;
542 } 541 }
543 542
544 static unsigned int sunsu_tx_empty(struct uart_port *port) 543 static unsigned int sunsu_tx_empty(struct uart_port *port)
545 { 544 {
546 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port; 545 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
547 unsigned long flags; 546 unsigned long flags;
548 unsigned int ret; 547 unsigned int ret;
549 548
550 spin_lock_irqsave(&up->port.lock, flags); 549 spin_lock_irqsave(&up->port.lock, flags);
551 ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0; 550 ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0;
552 spin_unlock_irqrestore(&up->port.lock, flags); 551 spin_unlock_irqrestore(&up->port.lock, flags);
553 552
554 return ret; 553 return ret;
555 } 554 }
556 555
557 static unsigned int sunsu_get_mctrl(struct uart_port *port) 556 static unsigned int sunsu_get_mctrl(struct uart_port *port)
558 { 557 {
559 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port; 558 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
560 unsigned char status; 559 unsigned char status;
561 unsigned int ret; 560 unsigned int ret;
562 561
563 status = serial_in(up, UART_MSR); 562 status = serial_in(up, UART_MSR);
564 563
565 ret = 0; 564 ret = 0;
566 if (status & UART_MSR_DCD) 565 if (status & UART_MSR_DCD)
567 ret |= TIOCM_CAR; 566 ret |= TIOCM_CAR;
568 if (status & UART_MSR_RI) 567 if (status & UART_MSR_RI)
569 ret |= TIOCM_RNG; 568 ret |= TIOCM_RNG;
570 if (status & UART_MSR_DSR) 569 if (status & UART_MSR_DSR)
571 ret |= TIOCM_DSR; 570 ret |= TIOCM_DSR;
572 if (status & UART_MSR_CTS) 571 if (status & UART_MSR_CTS)
573 ret |= TIOCM_CTS; 572 ret |= TIOCM_CTS;
574 return ret; 573 return ret;
575 } 574 }
576 575
577 static void sunsu_set_mctrl(struct uart_port *port, unsigned int mctrl) 576 static void sunsu_set_mctrl(struct uart_port *port, unsigned int mctrl)
578 { 577 {
579 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port; 578 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
580 unsigned char mcr = 0; 579 unsigned char mcr = 0;
581 580
582 if (mctrl & TIOCM_RTS) 581 if (mctrl & TIOCM_RTS)
583 mcr |= UART_MCR_RTS; 582 mcr |= UART_MCR_RTS;
584 if (mctrl & TIOCM_DTR) 583 if (mctrl & TIOCM_DTR)
585 mcr |= UART_MCR_DTR; 584 mcr |= UART_MCR_DTR;
586 if (mctrl & TIOCM_OUT1) 585 if (mctrl & TIOCM_OUT1)
587 mcr |= UART_MCR_OUT1; 586 mcr |= UART_MCR_OUT1;
588 if (mctrl & TIOCM_OUT2) 587 if (mctrl & TIOCM_OUT2)
589 mcr |= UART_MCR_OUT2; 588 mcr |= UART_MCR_OUT2;
590 if (mctrl & TIOCM_LOOP) 589 if (mctrl & TIOCM_LOOP)
591 mcr |= UART_MCR_LOOP; 590 mcr |= UART_MCR_LOOP;
592 591
593 serial_out(up, UART_MCR, mcr); 592 serial_out(up, UART_MCR, mcr);
594 } 593 }
595 594
596 static void sunsu_break_ctl(struct uart_port *port, int break_state) 595 static void sunsu_break_ctl(struct uart_port *port, int break_state)
597 { 596 {
598 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port; 597 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
599 unsigned long flags; 598 unsigned long flags;
600 599
601 spin_lock_irqsave(&up->port.lock, flags); 600 spin_lock_irqsave(&up->port.lock, flags);
602 if (break_state == -1) 601 if (break_state == -1)
603 up->lcr |= UART_LCR_SBC; 602 up->lcr |= UART_LCR_SBC;
604 else 603 else
605 up->lcr &= ~UART_LCR_SBC; 604 up->lcr &= ~UART_LCR_SBC;
606 serial_out(up, UART_LCR, up->lcr); 605 serial_out(up, UART_LCR, up->lcr);
607 spin_unlock_irqrestore(&up->port.lock, flags); 606 spin_unlock_irqrestore(&up->port.lock, flags);
608 } 607 }
609 608
610 static int sunsu_startup(struct uart_port *port) 609 static int sunsu_startup(struct uart_port *port)
611 { 610 {
612 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port; 611 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
613 unsigned long flags; 612 unsigned long flags;
614 int retval; 613 int retval;
615 614
616 if (up->port.type == PORT_16C950) { 615 if (up->port.type == PORT_16C950) {
617 /* Wake up and initialize UART */ 616 /* Wake up and initialize UART */
618 up->acr = 0; 617 up->acr = 0;
619 serial_outp(up, UART_LCR, 0xBF); 618 serial_outp(up, UART_LCR, 0xBF);
620 serial_outp(up, UART_EFR, UART_EFR_ECB); 619 serial_outp(up, UART_EFR, UART_EFR_ECB);
621 serial_outp(up, UART_IER, 0); 620 serial_outp(up, UART_IER, 0);
622 serial_outp(up, UART_LCR, 0); 621 serial_outp(up, UART_LCR, 0);
623 serial_icr_write(up, UART_CSR, 0); /* Reset the UART */ 622 serial_icr_write(up, UART_CSR, 0); /* Reset the UART */
624 serial_outp(up, UART_LCR, 0xBF); 623 serial_outp(up, UART_LCR, 0xBF);
625 serial_outp(up, UART_EFR, UART_EFR_ECB); 624 serial_outp(up, UART_EFR, UART_EFR_ECB);
626 serial_outp(up, UART_LCR, 0); 625 serial_outp(up, UART_LCR, 0);
627 } 626 }
628 627
629 #ifdef CONFIG_SERIAL_8250_RSA 628 #ifdef CONFIG_SERIAL_8250_RSA
630 /* 629 /*
631 * If this is an RSA port, see if we can kick it up to the 630 * If this is an RSA port, see if we can kick it up to the
632 * higher speed clock. 631 * higher speed clock.
633 */ 632 */
634 enable_rsa(up); 633 enable_rsa(up);
635 #endif 634 #endif
636 635
637 /* 636 /*
638 * Clear the FIFO buffers and disable them. 637 * Clear the FIFO buffers and disable them.
639 * (they will be reenabled in set_termios()) 638 * (they will be reenabled in set_termios())
640 */ 639 */
641 if (uart_config[up->port.type].flags & UART_CLEAR_FIFO) { 640 if (uart_config[up->port.type].flags & UART_CLEAR_FIFO) {
642 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO); 641 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
643 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO | 642 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO |
644 UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT); 643 UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
645 serial_outp(up, UART_FCR, 0); 644 serial_outp(up, UART_FCR, 0);
646 } 645 }
647 646
648 /* 647 /*
649 * Clear the interrupt registers. 648 * Clear the interrupt registers.
650 */ 649 */
651 (void) serial_inp(up, UART_LSR); 650 (void) serial_inp(up, UART_LSR);
652 (void) serial_inp(up, UART_RX); 651 (void) serial_inp(up, UART_RX);
653 (void) serial_inp(up, UART_IIR); 652 (void) serial_inp(up, UART_IIR);
654 (void) serial_inp(up, UART_MSR); 653 (void) serial_inp(up, UART_MSR);
655 654
656 /* 655 /*
657 * At this point, there's no way the LSR could still be 0xff; 656 * At this point, there's no way the LSR could still be 0xff;
658 * if it is, then bail out, because there's likely no UART 657 * if it is, then bail out, because there's likely no UART
659 * here. 658 * here.
660 */ 659 */
661 if (!(up->port.flags & UPF_BUGGY_UART) && 660 if (!(up->port.flags & UPF_BUGGY_UART) &&
662 (serial_inp(up, UART_LSR) == 0xff)) { 661 (serial_inp(up, UART_LSR) == 0xff)) {
663 printk("ttyS%d: LSR safety check engaged!\n", up->port.line); 662 printk("ttyS%d: LSR safety check engaged!\n", up->port.line);
664 return -ENODEV; 663 return -ENODEV;
665 } 664 }
666 665
667 if (up->su_type != SU_PORT_PORT) { 666 if (up->su_type != SU_PORT_PORT) {
668 retval = request_irq(up->port.irq, sunsu_kbd_ms_interrupt, 667 retval = request_irq(up->port.irq, sunsu_kbd_ms_interrupt,
669 IRQF_SHARED, su_typev[up->su_type], up); 668 IRQF_SHARED, su_typev[up->su_type], up);
670 } else { 669 } else {
671 retval = request_irq(up->port.irq, sunsu_serial_interrupt, 670 retval = request_irq(up->port.irq, sunsu_serial_interrupt,
672 IRQF_SHARED, su_typev[up->su_type], up); 671 IRQF_SHARED, su_typev[up->su_type], up);
673 } 672 }
674 if (retval) { 673 if (retval) {
675 printk("su: Cannot register IRQ %d\n", up->port.irq); 674 printk("su: Cannot register IRQ %d\n", up->port.irq);
676 return retval; 675 return retval;
677 } 676 }
678 677
679 /* 678 /*
680 * Now, initialize the UART 679 * Now, initialize the UART
681 */ 680 */
682 serial_outp(up, UART_LCR, UART_LCR_WLEN8); 681 serial_outp(up, UART_LCR, UART_LCR_WLEN8);
683 682
684 spin_lock_irqsave(&up->port.lock, flags); 683 spin_lock_irqsave(&up->port.lock, flags);
685 684
686 up->port.mctrl |= TIOCM_OUT2; 685 up->port.mctrl |= TIOCM_OUT2;
687 686
688 sunsu_set_mctrl(&up->port, up->port.mctrl); 687 sunsu_set_mctrl(&up->port, up->port.mctrl);
689 spin_unlock_irqrestore(&up->port.lock, flags); 688 spin_unlock_irqrestore(&up->port.lock, flags);
690 689
691 /* 690 /*
692 * Finally, enable interrupts. Note: Modem status interrupts 691 * Finally, enable interrupts. Note: Modem status interrupts
693 * are set via set_termios(), which will be occurring imminently 692 * are set via set_termios(), which will be occurring imminently
694 * anyway, so we don't enable them here. 693 * anyway, so we don't enable them here.
695 */ 694 */
696 up->ier = UART_IER_RLSI | UART_IER_RDI; 695 up->ier = UART_IER_RLSI | UART_IER_RDI;
697 serial_outp(up, UART_IER, up->ier); 696 serial_outp(up, UART_IER, up->ier);
698 697
699 if (up->port.flags & UPF_FOURPORT) { 698 if (up->port.flags & UPF_FOURPORT) {
700 unsigned int icp; 699 unsigned int icp;
701 /* 700 /*
702 * Enable interrupts on the AST Fourport board 701 * Enable interrupts on the AST Fourport board
703 */ 702 */
704 icp = (up->port.iobase & 0xfe0) | 0x01f; 703 icp = (up->port.iobase & 0xfe0) | 0x01f;
705 outb_p(0x80, icp); 704 outb_p(0x80, icp);
706 (void) inb_p(icp); 705 (void) inb_p(icp);
707 } 706 }
708 707
709 /* 708 /*
710 * And clear the interrupt registers again for luck. 709 * And clear the interrupt registers again for luck.
711 */ 710 */
712 (void) serial_inp(up, UART_LSR); 711 (void) serial_inp(up, UART_LSR);
713 (void) serial_inp(up, UART_RX); 712 (void) serial_inp(up, UART_RX);
714 (void) serial_inp(up, UART_IIR); 713 (void) serial_inp(up, UART_IIR);
715 (void) serial_inp(up, UART_MSR); 714 (void) serial_inp(up, UART_MSR);
716 715
717 return 0; 716 return 0;
718 } 717 }
719 718
720 static void sunsu_shutdown(struct uart_port *port) 719 static void sunsu_shutdown(struct uart_port *port)
721 { 720 {
722 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port; 721 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
723 unsigned long flags; 722 unsigned long flags;
724 723
725 /* 724 /*
726 * Disable interrupts from this port 725 * Disable interrupts from this port
727 */ 726 */
728 up->ier = 0; 727 up->ier = 0;
729 serial_outp(up, UART_IER, 0); 728 serial_outp(up, UART_IER, 0);
730 729
731 spin_lock_irqsave(&up->port.lock, flags); 730 spin_lock_irqsave(&up->port.lock, flags);
732 if (up->port.flags & UPF_FOURPORT) { 731 if (up->port.flags & UPF_FOURPORT) {
733 /* reset interrupts on the AST Fourport board */ 732 /* reset interrupts on the AST Fourport board */
734 inb((up->port.iobase & 0xfe0) | 0x1f); 733 inb((up->port.iobase & 0xfe0) | 0x1f);
735 up->port.mctrl |= TIOCM_OUT1; 734 up->port.mctrl |= TIOCM_OUT1;
736 } else 735 } else
737 up->port.mctrl &= ~TIOCM_OUT2; 736 up->port.mctrl &= ~TIOCM_OUT2;
738 737
739 sunsu_set_mctrl(&up->port, up->port.mctrl); 738 sunsu_set_mctrl(&up->port, up->port.mctrl);
740 spin_unlock_irqrestore(&up->port.lock, flags); 739 spin_unlock_irqrestore(&up->port.lock, flags);
741 740
742 /* 741 /*
743 * Disable break condition and FIFOs 742 * Disable break condition and FIFOs
744 */ 743 */
745 serial_out(up, UART_LCR, serial_inp(up, UART_LCR) & ~UART_LCR_SBC); 744 serial_out(up, UART_LCR, serial_inp(up, UART_LCR) & ~UART_LCR_SBC);
746 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO | 745 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO |
747 UART_FCR_CLEAR_RCVR | 746 UART_FCR_CLEAR_RCVR |
748 UART_FCR_CLEAR_XMIT); 747 UART_FCR_CLEAR_XMIT);
749 serial_outp(up, UART_FCR, 0); 748 serial_outp(up, UART_FCR, 0);
750 749
751 #ifdef CONFIG_SERIAL_8250_RSA 750 #ifdef CONFIG_SERIAL_8250_RSA
752 /* 751 /*
753 * Reset the RSA board back to 115kbps compat mode. 752 * Reset the RSA board back to 115kbps compat mode.
754 */ 753 */
755 disable_rsa(up); 754 disable_rsa(up);
756 #endif 755 #endif
757 756
758 /* 757 /*
759 * Read data port to reset things. 758 * Read data port to reset things.
760 */ 759 */
761 (void) serial_in(up, UART_RX); 760 (void) serial_in(up, UART_RX);
762 761
763 free_irq(up->port.irq, up); 762 free_irq(up->port.irq, up);
764 } 763 }
765 764
766 static void 765 static void
767 sunsu_change_speed(struct uart_port *port, unsigned int cflag, 766 sunsu_change_speed(struct uart_port *port, unsigned int cflag,
768 unsigned int iflag, unsigned int quot) 767 unsigned int iflag, unsigned int quot)
769 { 768 {
770 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port; 769 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
771 unsigned char cval, fcr = 0; 770 unsigned char cval, fcr = 0;
772 unsigned long flags; 771 unsigned long flags;
773 772
774 switch (cflag & CSIZE) { 773 switch (cflag & CSIZE) {
775 case CS5: 774 case CS5:
776 cval = 0x00; 775 cval = 0x00;
777 break; 776 break;
778 case CS6: 777 case CS6:
779 cval = 0x01; 778 cval = 0x01;
780 break; 779 break;
781 case CS7: 780 case CS7:
782 cval = 0x02; 781 cval = 0x02;
783 break; 782 break;
784 default: 783 default:
785 case CS8: 784 case CS8:
786 cval = 0x03; 785 cval = 0x03;
787 break; 786 break;
788 } 787 }
789 788
790 if (cflag & CSTOPB) 789 if (cflag & CSTOPB)
791 cval |= 0x04; 790 cval |= 0x04;
792 if (cflag & PARENB) 791 if (cflag & PARENB)
793 cval |= UART_LCR_PARITY; 792 cval |= UART_LCR_PARITY;
794 if (!(cflag & PARODD)) 793 if (!(cflag & PARODD))
795 cval |= UART_LCR_EPAR; 794 cval |= UART_LCR_EPAR;
796 #ifdef CMSPAR 795 #ifdef CMSPAR
797 if (cflag & CMSPAR) 796 if (cflag & CMSPAR)
798 cval |= UART_LCR_SPAR; 797 cval |= UART_LCR_SPAR;
799 #endif 798 #endif
800 799
801 /* 800 /*
802 * Work around a bug in the Oxford Semiconductor 952 rev B 801 * Work around a bug in the Oxford Semiconductor 952 rev B
803 * chip which causes it to seriously miscalculate baud rates 802 * chip which causes it to seriously miscalculate baud rates
804 * when DLL is 0. 803 * when DLL is 0.
805 */ 804 */
806 if ((quot & 0xff) == 0 && up->port.type == PORT_16C950 && 805 if ((quot & 0xff) == 0 && up->port.type == PORT_16C950 &&
807 up->rev == 0x5201) 806 up->rev == 0x5201)
808 quot ++; 807 quot ++;
809 808
810 if (uart_config[up->port.type].flags & UART_USE_FIFO) { 809 if (uart_config[up->port.type].flags & UART_USE_FIFO) {
811 if ((up->port.uartclk / quot) < (2400 * 16)) 810 if ((up->port.uartclk / quot) < (2400 * 16))
812 fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1; 811 fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1;
813 #ifdef CONFIG_SERIAL_8250_RSA 812 #ifdef CONFIG_SERIAL_8250_RSA
814 else if (up->port.type == PORT_RSA) 813 else if (up->port.type == PORT_RSA)
815 fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_14; 814 fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_14;
816 #endif 815 #endif
817 else 816 else
818 fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_8; 817 fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_8;
819 } 818 }
820 if (up->port.type == PORT_16750) 819 if (up->port.type == PORT_16750)
821 fcr |= UART_FCR7_64BYTE; 820 fcr |= UART_FCR7_64BYTE;
822 821
823 /* 822 /*
824 * Ok, we're now changing the port state. Do it with 823 * Ok, we're now changing the port state. Do it with
825 * interrupts disabled. 824 * interrupts disabled.
826 */ 825 */
827 spin_lock_irqsave(&up->port.lock, flags); 826 spin_lock_irqsave(&up->port.lock, flags);
828 827
829 /* 828 /*
830 * Update the per-port timeout. 829 * Update the per-port timeout.
831 */ 830 */
832 uart_update_timeout(port, cflag, (port->uartclk / (16 * quot))); 831 uart_update_timeout(port, cflag, (port->uartclk / (16 * quot)));
833 832
834 up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; 833 up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
835 if (iflag & INPCK) 834 if (iflag & INPCK)
836 up->port.read_status_mask |= UART_LSR_FE | UART_LSR_PE; 835 up->port.read_status_mask |= UART_LSR_FE | UART_LSR_PE;
837 if (iflag & (BRKINT | PARMRK)) 836 if (iflag & (BRKINT | PARMRK))
838 up->port.read_status_mask |= UART_LSR_BI; 837 up->port.read_status_mask |= UART_LSR_BI;
839 838
840 /* 839 /*
841 * Characteres to ignore 840 * Characteres to ignore
842 */ 841 */
843 up->port.ignore_status_mask = 0; 842 up->port.ignore_status_mask = 0;
844 if (iflag & IGNPAR) 843 if (iflag & IGNPAR)
845 up->port.ignore_status_mask |= UART_LSR_PE | UART_LSR_FE; 844 up->port.ignore_status_mask |= UART_LSR_PE | UART_LSR_FE;
846 if (iflag & IGNBRK) { 845 if (iflag & IGNBRK) {
847 up->port.ignore_status_mask |= UART_LSR_BI; 846 up->port.ignore_status_mask |= UART_LSR_BI;
848 /* 847 /*
849 * If we're ignoring parity and break indicators, 848 * If we're ignoring parity and break indicators,
850 * ignore overruns too (for real raw support). 849 * ignore overruns too (for real raw support).
851 */ 850 */
852 if (iflag & IGNPAR) 851 if (iflag & IGNPAR)
853 up->port.ignore_status_mask |= UART_LSR_OE; 852 up->port.ignore_status_mask |= UART_LSR_OE;
854 } 853 }
855 854
856 /* 855 /*
857 * ignore all characters if CREAD is not set 856 * ignore all characters if CREAD is not set
858 */ 857 */
859 if ((cflag & CREAD) == 0) 858 if ((cflag & CREAD) == 0)
860 up->port.ignore_status_mask |= UART_LSR_DR; 859 up->port.ignore_status_mask |= UART_LSR_DR;
861 860
862 /* 861 /*
863 * CTS flow control flag and modem status interrupts 862 * CTS flow control flag and modem status interrupts
864 */ 863 */
865 up->ier &= ~UART_IER_MSI; 864 up->ier &= ~UART_IER_MSI;
866 if (UART_ENABLE_MS(&up->port, cflag)) 865 if (UART_ENABLE_MS(&up->port, cflag))
867 up->ier |= UART_IER_MSI; 866 up->ier |= UART_IER_MSI;
868 867
869 serial_out(up, UART_IER, up->ier); 868 serial_out(up, UART_IER, up->ier);
870 869
871 if (uart_config[up->port.type].flags & UART_STARTECH) { 870 if (uart_config[up->port.type].flags & UART_STARTECH) {
872 serial_outp(up, UART_LCR, 0xBF); 871 serial_outp(up, UART_LCR, 0xBF);
873 serial_outp(up, UART_EFR, cflag & CRTSCTS ? UART_EFR_CTS :0); 872 serial_outp(up, UART_EFR, cflag & CRTSCTS ? UART_EFR_CTS :0);
874 } 873 }
875 serial_outp(up, UART_LCR, cval | UART_LCR_DLAB);/* set DLAB */ 874 serial_outp(up, UART_LCR, cval | UART_LCR_DLAB);/* set DLAB */
876 serial_outp(up, UART_DLL, quot & 0xff); /* LS of divisor */ 875 serial_outp(up, UART_DLL, quot & 0xff); /* LS of divisor */
877 serial_outp(up, UART_DLM, quot >> 8); /* MS of divisor */ 876 serial_outp(up, UART_DLM, quot >> 8); /* MS of divisor */
878 if (up->port.type == PORT_16750) 877 if (up->port.type == PORT_16750)
879 serial_outp(up, UART_FCR, fcr); /* set fcr */ 878 serial_outp(up, UART_FCR, fcr); /* set fcr */
880 serial_outp(up, UART_LCR, cval); /* reset DLAB */ 879 serial_outp(up, UART_LCR, cval); /* reset DLAB */
881 up->lcr = cval; /* Save LCR */ 880 up->lcr = cval; /* Save LCR */
882 if (up->port.type != PORT_16750) { 881 if (up->port.type != PORT_16750) {
883 if (fcr & UART_FCR_ENABLE_FIFO) { 882 if (fcr & UART_FCR_ENABLE_FIFO) {
884 /* emulated UARTs (Lucent Venus 167x) need two steps */ 883 /* emulated UARTs (Lucent Venus 167x) need two steps */
885 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO); 884 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
886 } 885 }
887 serial_outp(up, UART_FCR, fcr); /* set fcr */ 886 serial_outp(up, UART_FCR, fcr); /* set fcr */
888 } 887 }
889 888
890 up->cflag = cflag; 889 up->cflag = cflag;
891 890
892 spin_unlock_irqrestore(&up->port.lock, flags); 891 spin_unlock_irqrestore(&up->port.lock, flags);
893 } 892 }
894 893
895 static void 894 static void
896 sunsu_set_termios(struct uart_port *port, struct ktermios *termios, 895 sunsu_set_termios(struct uart_port *port, struct ktermios *termios,
897 struct ktermios *old) 896 struct ktermios *old)
898 { 897 {
899 unsigned int baud, quot; 898 unsigned int baud, quot;
900 899
901 /* 900 /*
902 * Ask the core to calculate the divisor for us. 901 * Ask the core to calculate the divisor for us.
903 */ 902 */
904 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); 903 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
905 quot = uart_get_divisor(port, baud); 904 quot = uart_get_divisor(port, baud);
906 905
907 sunsu_change_speed(port, termios->c_cflag, termios->c_iflag, quot); 906 sunsu_change_speed(port, termios->c_cflag, termios->c_iflag, quot);
908 } 907 }
909 908
910 static void sunsu_release_port(struct uart_port *port) 909 static void sunsu_release_port(struct uart_port *port)
911 { 910 {
912 } 911 }
913 912
914 static int sunsu_request_port(struct uart_port *port) 913 static int sunsu_request_port(struct uart_port *port)
915 { 914 {
916 return 0; 915 return 0;
917 } 916 }
918 917
919 static void sunsu_config_port(struct uart_port *port, int flags) 918 static void sunsu_config_port(struct uart_port *port, int flags)
920 { 919 {
921 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port; 920 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
922 921
923 if (flags & UART_CONFIG_TYPE) { 922 if (flags & UART_CONFIG_TYPE) {
924 /* 923 /*
925 * We are supposed to call autoconfig here, but this requires 924 * We are supposed to call autoconfig here, but this requires
926 * splitting all the OBP probing crap from the UART probing. 925 * splitting all the OBP probing crap from the UART probing.
927 * We'll do it when we kill sunsu.c altogether. 926 * We'll do it when we kill sunsu.c altogether.
928 */ 927 */
929 port->type = up->type_probed; /* XXX */ 928 port->type = up->type_probed; /* XXX */
930 } 929 }
931 } 930 }
932 931
933 static int 932 static int
934 sunsu_verify_port(struct uart_port *port, struct serial_struct *ser) 933 sunsu_verify_port(struct uart_port *port, struct serial_struct *ser)
935 { 934 {
936 return -EINVAL; 935 return -EINVAL;
937 } 936 }
938 937
939 static const char * 938 static const char *
940 sunsu_type(struct uart_port *port) 939 sunsu_type(struct uart_port *port)
941 { 940 {
942 int type = port->type; 941 int type = port->type;
943 942
944 if (type >= ARRAY_SIZE(uart_config)) 943 if (type >= ARRAY_SIZE(uart_config))
945 type = 0; 944 type = 0;
946 return uart_config[type].name; 945 return uart_config[type].name;
947 } 946 }
948 947
949 static struct uart_ops sunsu_pops = { 948 static struct uart_ops sunsu_pops = {
950 .tx_empty = sunsu_tx_empty, 949 .tx_empty = sunsu_tx_empty,
951 .set_mctrl = sunsu_set_mctrl, 950 .set_mctrl = sunsu_set_mctrl,
952 .get_mctrl = sunsu_get_mctrl, 951 .get_mctrl = sunsu_get_mctrl,
953 .stop_tx = sunsu_stop_tx, 952 .stop_tx = sunsu_stop_tx,
954 .start_tx = sunsu_start_tx, 953 .start_tx = sunsu_start_tx,
955 .stop_rx = sunsu_stop_rx, 954 .stop_rx = sunsu_stop_rx,
956 .enable_ms = sunsu_enable_ms, 955 .enable_ms = sunsu_enable_ms,
957 .break_ctl = sunsu_break_ctl, 956 .break_ctl = sunsu_break_ctl,
958 .startup = sunsu_startup, 957 .startup = sunsu_startup,
959 .shutdown = sunsu_shutdown, 958 .shutdown = sunsu_shutdown,
960 .set_termios = sunsu_set_termios, 959 .set_termios = sunsu_set_termios,
961 .type = sunsu_type, 960 .type = sunsu_type,
962 .release_port = sunsu_release_port, 961 .release_port = sunsu_release_port,
963 .request_port = sunsu_request_port, 962 .request_port = sunsu_request_port,
964 .config_port = sunsu_config_port, 963 .config_port = sunsu_config_port,
965 .verify_port = sunsu_verify_port, 964 .verify_port = sunsu_verify_port,
966 }; 965 };
967 966
968 #define UART_NR 4 967 #define UART_NR 4
969 968
970 static struct uart_sunsu_port sunsu_ports[UART_NR]; 969 static struct uart_sunsu_port sunsu_ports[UART_NR];
971 970
972 #ifdef CONFIG_SERIO 971 #ifdef CONFIG_SERIO
973 972
974 static DEFINE_SPINLOCK(sunsu_serio_lock); 973 static DEFINE_SPINLOCK(sunsu_serio_lock);
975 974
976 static int sunsu_serio_write(struct serio *serio, unsigned char ch) 975 static int sunsu_serio_write(struct serio *serio, unsigned char ch)
977 { 976 {
978 struct uart_sunsu_port *up = serio->port_data; 977 struct uart_sunsu_port *up = serio->port_data;
979 unsigned long flags; 978 unsigned long flags;
980 int lsr; 979 int lsr;
981 980
982 spin_lock_irqsave(&sunsu_serio_lock, flags); 981 spin_lock_irqsave(&sunsu_serio_lock, flags);
983 982
984 do { 983 do {
985 lsr = serial_in(up, UART_LSR); 984 lsr = serial_in(up, UART_LSR);
986 } while (!(lsr & UART_LSR_THRE)); 985 } while (!(lsr & UART_LSR_THRE));
987 986
988 /* Send the character out. */ 987 /* Send the character out. */
989 serial_out(up, UART_TX, ch); 988 serial_out(up, UART_TX, ch);
990 989
991 spin_unlock_irqrestore(&sunsu_serio_lock, flags); 990 spin_unlock_irqrestore(&sunsu_serio_lock, flags);
992 991
993 return 0; 992 return 0;
994 } 993 }
995 994
996 static int sunsu_serio_open(struct serio *serio) 995 static int sunsu_serio_open(struct serio *serio)
997 { 996 {
998 struct uart_sunsu_port *up = serio->port_data; 997 struct uart_sunsu_port *up = serio->port_data;
999 unsigned long flags; 998 unsigned long flags;
1000 int ret; 999 int ret;
1001 1000
1002 spin_lock_irqsave(&sunsu_serio_lock, flags); 1001 spin_lock_irqsave(&sunsu_serio_lock, flags);
1003 if (!up->serio_open) { 1002 if (!up->serio_open) {
1004 up->serio_open = 1; 1003 up->serio_open = 1;
1005 ret = 0; 1004 ret = 0;
1006 } else 1005 } else
1007 ret = -EBUSY; 1006 ret = -EBUSY;
1008 spin_unlock_irqrestore(&sunsu_serio_lock, flags); 1007 spin_unlock_irqrestore(&sunsu_serio_lock, flags);
1009 1008
1010 return ret; 1009 return ret;
1011 } 1010 }
1012 1011
1013 static void sunsu_serio_close(struct serio *serio) 1012 static void sunsu_serio_close(struct serio *serio)
1014 { 1013 {
1015 struct uart_sunsu_port *up = serio->port_data; 1014 struct uart_sunsu_port *up = serio->port_data;
1016 unsigned long flags; 1015 unsigned long flags;
1017 1016
1018 spin_lock_irqsave(&sunsu_serio_lock, flags); 1017 spin_lock_irqsave(&sunsu_serio_lock, flags);
1019 up->serio_open = 0; 1018 up->serio_open = 0;
1020 spin_unlock_irqrestore(&sunsu_serio_lock, flags); 1019 spin_unlock_irqrestore(&sunsu_serio_lock, flags);
1021 } 1020 }
1022 1021
1023 #endif /* CONFIG_SERIO */ 1022 #endif /* CONFIG_SERIO */
1024 1023
1025 static void sunsu_autoconfig(struct uart_sunsu_port *up) 1024 static void sunsu_autoconfig(struct uart_sunsu_port *up)
1026 { 1025 {
1027 unsigned char status1, status2, scratch, scratch2, scratch3; 1026 unsigned char status1, status2, scratch, scratch2, scratch3;
1028 unsigned char save_lcr, save_mcr; 1027 unsigned char save_lcr, save_mcr;
1029 unsigned long flags; 1028 unsigned long flags;
1030 1029
1031 if (up->su_type == SU_PORT_NONE) 1030 if (up->su_type == SU_PORT_NONE)
1032 return; 1031 return;
1033 1032
1034 up->type_probed = PORT_UNKNOWN; 1033 up->type_probed = PORT_UNKNOWN;
1035 up->port.iotype = UPIO_MEM; 1034 up->port.iotype = UPIO_MEM;
1036 1035
1037 spin_lock_irqsave(&up->port.lock, flags); 1036 spin_lock_irqsave(&up->port.lock, flags);
1038 1037
1039 if (!(up->port.flags & UPF_BUGGY_UART)) { 1038 if (!(up->port.flags & UPF_BUGGY_UART)) {
1040 /* 1039 /*
1041 * Do a simple existence test first; if we fail this, there's 1040 * Do a simple existence test first; if we fail this, there's
1042 * no point trying anything else. 1041 * no point trying anything else.
1043 * 1042 *
1044 * 0x80 is used as a nonsense port to prevent against false 1043 * 0x80 is used as a nonsense port to prevent against false
1045 * positives due to ISA bus float. The assumption is that 1044 * positives due to ISA bus float. The assumption is that
1046 * 0x80 is a non-existent port; which should be safe since 1045 * 0x80 is a non-existent port; which should be safe since
1047 * include/asm/io.h also makes this assumption. 1046 * include/asm/io.h also makes this assumption.
1048 */ 1047 */
1049 scratch = serial_inp(up, UART_IER); 1048 scratch = serial_inp(up, UART_IER);
1050 serial_outp(up, UART_IER, 0); 1049 serial_outp(up, UART_IER, 0);
1051 #ifdef __i386__ 1050 #ifdef __i386__
1052 outb(0xff, 0x080); 1051 outb(0xff, 0x080);
1053 #endif 1052 #endif
1054 scratch2 = serial_inp(up, UART_IER); 1053 scratch2 = serial_inp(up, UART_IER);
1055 serial_outp(up, UART_IER, 0x0f); 1054 serial_outp(up, UART_IER, 0x0f);
1056 #ifdef __i386__ 1055 #ifdef __i386__
1057 outb(0, 0x080); 1056 outb(0, 0x080);
1058 #endif 1057 #endif
1059 scratch3 = serial_inp(up, UART_IER); 1058 scratch3 = serial_inp(up, UART_IER);
1060 serial_outp(up, UART_IER, scratch); 1059 serial_outp(up, UART_IER, scratch);
1061 if (scratch2 != 0 || scratch3 != 0x0F) 1060 if (scratch2 != 0 || scratch3 != 0x0F)
1062 goto out; /* We failed; there's nothing here */ 1061 goto out; /* We failed; there's nothing here */
1063 } 1062 }
1064 1063
1065 save_mcr = serial_in(up, UART_MCR); 1064 save_mcr = serial_in(up, UART_MCR);
1066 save_lcr = serial_in(up, UART_LCR); 1065 save_lcr = serial_in(up, UART_LCR);
1067 1066
1068 /* 1067 /*
1069 * Check to see if a UART is really there. Certain broken 1068 * Check to see if a UART is really there. Certain broken
1070 * internal modems based on the Rockwell chipset fail this 1069 * internal modems based on the Rockwell chipset fail this
1071 * test, because they apparently don't implement the loopback 1070 * test, because they apparently don't implement the loopback
1072 * test mode. So this test is skipped on the COM 1 through 1071 * test mode. So this test is skipped on the COM 1 through
1073 * COM 4 ports. This *should* be safe, since no board 1072 * COM 4 ports. This *should* be safe, since no board
1074 * manufacturer would be stupid enough to design a board 1073 * manufacturer would be stupid enough to design a board
1075 * that conflicts with COM 1-4 --- we hope! 1074 * that conflicts with COM 1-4 --- we hope!
1076 */ 1075 */
1077 if (!(up->port.flags & UPF_SKIP_TEST)) { 1076 if (!(up->port.flags & UPF_SKIP_TEST)) {
1078 serial_outp(up, UART_MCR, UART_MCR_LOOP | 0x0A); 1077 serial_outp(up, UART_MCR, UART_MCR_LOOP | 0x0A);
1079 status1 = serial_inp(up, UART_MSR) & 0xF0; 1078 status1 = serial_inp(up, UART_MSR) & 0xF0;
1080 serial_outp(up, UART_MCR, save_mcr); 1079 serial_outp(up, UART_MCR, save_mcr);
1081 if (status1 != 0x90) 1080 if (status1 != 0x90)
1082 goto out; /* We failed loopback test */ 1081 goto out; /* We failed loopback test */
1083 } 1082 }
1084 serial_outp(up, UART_LCR, 0xBF); /* set up for StarTech test */ 1083 serial_outp(up, UART_LCR, 0xBF); /* set up for StarTech test */
1085 serial_outp(up, UART_EFR, 0); /* EFR is the same as FCR */ 1084 serial_outp(up, UART_EFR, 0); /* EFR is the same as FCR */
1086 serial_outp(up, UART_LCR, 0); 1085 serial_outp(up, UART_LCR, 0);
1087 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO); 1086 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
1088 scratch = serial_in(up, UART_IIR) >> 6; 1087 scratch = serial_in(up, UART_IIR) >> 6;
1089 switch (scratch) { 1088 switch (scratch) {
1090 case 0: 1089 case 0:
1091 up->port.type = PORT_16450; 1090 up->port.type = PORT_16450;
1092 break; 1091 break;
1093 case 1: 1092 case 1:
1094 up->port.type = PORT_UNKNOWN; 1093 up->port.type = PORT_UNKNOWN;
1095 break; 1094 break;
1096 case 2: 1095 case 2:
1097 up->port.type = PORT_16550; 1096 up->port.type = PORT_16550;
1098 break; 1097 break;
1099 case 3: 1098 case 3:
1100 up->port.type = PORT_16550A; 1099 up->port.type = PORT_16550A;
1101 break; 1100 break;
1102 } 1101 }
1103 if (up->port.type == PORT_16550A) { 1102 if (up->port.type == PORT_16550A) {
1104 /* Check for Startech UART's */ 1103 /* Check for Startech UART's */
1105 serial_outp(up, UART_LCR, UART_LCR_DLAB); 1104 serial_outp(up, UART_LCR, UART_LCR_DLAB);
1106 if (serial_in(up, UART_EFR) == 0) { 1105 if (serial_in(up, UART_EFR) == 0) {
1107 up->port.type = PORT_16650; 1106 up->port.type = PORT_16650;
1108 } else { 1107 } else {
1109 serial_outp(up, UART_LCR, 0xBF); 1108 serial_outp(up, UART_LCR, 0xBF);
1110 if (serial_in(up, UART_EFR) == 0) 1109 if (serial_in(up, UART_EFR) == 0)
1111 up->port.type = PORT_16650V2; 1110 up->port.type = PORT_16650V2;
1112 } 1111 }
1113 } 1112 }
1114 if (up->port.type == PORT_16550A) { 1113 if (up->port.type == PORT_16550A) {
1115 /* Check for TI 16750 */ 1114 /* Check for TI 16750 */
1116 serial_outp(up, UART_LCR, save_lcr | UART_LCR_DLAB); 1115 serial_outp(up, UART_LCR, save_lcr | UART_LCR_DLAB);
1117 serial_outp(up, UART_FCR, 1116 serial_outp(up, UART_FCR,
1118 UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE); 1117 UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
1119 scratch = serial_in(up, UART_IIR) >> 5; 1118 scratch = serial_in(up, UART_IIR) >> 5;
1120 if (scratch == 7) { 1119 if (scratch == 7) {
1121 /* 1120 /*
1122 * If this is a 16750, and not a cheap UART 1121 * If this is a 16750, and not a cheap UART
1123 * clone, then it should only go into 64 byte 1122 * clone, then it should only go into 64 byte
1124 * mode if the UART_FCR7_64BYTE bit was set 1123 * mode if the UART_FCR7_64BYTE bit was set
1125 * while UART_LCR_DLAB was latched. 1124 * while UART_LCR_DLAB was latched.
1126 */ 1125 */
1127 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO); 1126 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
1128 serial_outp(up, UART_LCR, 0); 1127 serial_outp(up, UART_LCR, 0);
1129 serial_outp(up, UART_FCR, 1128 serial_outp(up, UART_FCR,
1130 UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE); 1129 UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
1131 scratch = serial_in(up, UART_IIR) >> 5; 1130 scratch = serial_in(up, UART_IIR) >> 5;
1132 if (scratch == 6) 1131 if (scratch == 6)
1133 up->port.type = PORT_16750; 1132 up->port.type = PORT_16750;
1134 } 1133 }
1135 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO); 1134 serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO);
1136 } 1135 }
1137 serial_outp(up, UART_LCR, save_lcr); 1136 serial_outp(up, UART_LCR, save_lcr);
1138 if (up->port.type == PORT_16450) { 1137 if (up->port.type == PORT_16450) {
1139 scratch = serial_in(up, UART_SCR); 1138 scratch = serial_in(up, UART_SCR);
1140 serial_outp(up, UART_SCR, 0xa5); 1139 serial_outp(up, UART_SCR, 0xa5);
1141 status1 = serial_in(up, UART_SCR); 1140 status1 = serial_in(up, UART_SCR);
1142 serial_outp(up, UART_SCR, 0x5a); 1141 serial_outp(up, UART_SCR, 0x5a);
1143 status2 = serial_in(up, UART_SCR); 1142 status2 = serial_in(up, UART_SCR);
1144 serial_outp(up, UART_SCR, scratch); 1143 serial_outp(up, UART_SCR, scratch);
1145 1144
1146 if ((status1 != 0xa5) || (status2 != 0x5a)) 1145 if ((status1 != 0xa5) || (status2 != 0x5a))
1147 up->port.type = PORT_8250; 1146 up->port.type = PORT_8250;
1148 } 1147 }
1149 1148
1150 up->port.fifosize = uart_config[up->port.type].dfl_xmit_fifo_size; 1149 up->port.fifosize = uart_config[up->port.type].dfl_xmit_fifo_size;
1151 1150
1152 if (up->port.type == PORT_UNKNOWN) 1151 if (up->port.type == PORT_UNKNOWN)
1153 goto out; 1152 goto out;
1154 up->type_probed = up->port.type; /* XXX */ 1153 up->type_probed = up->port.type; /* XXX */
1155 1154
1156 /* 1155 /*
1157 * Reset the UART. 1156 * Reset the UART.
1158 */ 1157 */
1159 #ifdef CONFIG_SERIAL_8250_RSA 1158 #ifdef CONFIG_SERIAL_8250_RSA
1160 if (up->port.type == PORT_RSA) 1159 if (up->port.type == PORT_RSA)
1161 serial_outp(up, UART_RSA_FRR, 0); 1160 serial_outp(up, UART_RSA_FRR, 0);
1162 #endif 1161 #endif
1163 serial_outp(up, UART_MCR, save_mcr); 1162 serial_outp(up, UART_MCR, save_mcr);
1164 serial_outp(up, UART_FCR, (UART_FCR_ENABLE_FIFO | 1163 serial_outp(up, UART_FCR, (UART_FCR_ENABLE_FIFO |
1165 UART_FCR_CLEAR_RCVR | 1164 UART_FCR_CLEAR_RCVR |
1166 UART_FCR_CLEAR_XMIT)); 1165 UART_FCR_CLEAR_XMIT));
1167 serial_outp(up, UART_FCR, 0); 1166 serial_outp(up, UART_FCR, 0);
1168 (void)serial_in(up, UART_RX); 1167 (void)serial_in(up, UART_RX);
1169 serial_outp(up, UART_IER, 0); 1168 serial_outp(up, UART_IER, 0);
1170 1169
1171 out: 1170 out:
1172 spin_unlock_irqrestore(&up->port.lock, flags); 1171 spin_unlock_irqrestore(&up->port.lock, flags);
1173 } 1172 }
1174 1173
1175 static struct uart_driver sunsu_reg = { 1174 static struct uart_driver sunsu_reg = {
1176 .owner = THIS_MODULE, 1175 .owner = THIS_MODULE,
1177 .driver_name = "sunsu", 1176 .driver_name = "sunsu",
1178 .dev_name = "ttyS", 1177 .dev_name = "ttyS",
1179 .major = TTY_MAJOR, 1178 .major = TTY_MAJOR,
1180 }; 1179 };
1181 1180
1182 static int __devinit sunsu_kbd_ms_init(struct uart_sunsu_port *up) 1181 static int __devinit sunsu_kbd_ms_init(struct uart_sunsu_port *up)
1183 { 1182 {
1184 int quot, baud; 1183 int quot, baud;
1185 #ifdef CONFIG_SERIO 1184 #ifdef CONFIG_SERIO
1186 struct serio *serio; 1185 struct serio *serio;
1187 #endif 1186 #endif
1188 1187
1189 if (up->su_type == SU_PORT_KBD) { 1188 if (up->su_type == SU_PORT_KBD) {
1190 up->cflag = B1200 | CS8 | CLOCAL | CREAD; 1189 up->cflag = B1200 | CS8 | CLOCAL | CREAD;
1191 baud = 1200; 1190 baud = 1200;
1192 } else { 1191 } else {
1193 up->cflag = B4800 | CS8 | CLOCAL | CREAD; 1192 up->cflag = B4800 | CS8 | CLOCAL | CREAD;
1194 baud = 4800; 1193 baud = 4800;
1195 } 1194 }
1196 quot = up->port.uartclk / (16 * baud); 1195 quot = up->port.uartclk / (16 * baud);
1197 1196
1198 sunsu_autoconfig(up); 1197 sunsu_autoconfig(up);
1199 if (up->port.type == PORT_UNKNOWN) 1198 if (up->port.type == PORT_UNKNOWN)
1200 return -ENODEV; 1199 return -ENODEV;
1201 1200
1202 printk("%s: %s port at %llx, irq %u\n", 1201 printk("%s: %s port at %llx, irq %u\n",
1203 up->port.dev->of_node->full_name, 1202 up->port.dev->of_node->full_name,
1204 (up->su_type == SU_PORT_KBD) ? "Keyboard" : "Mouse", 1203 (up->su_type == SU_PORT_KBD) ? "Keyboard" : "Mouse",
1205 (unsigned long long) up->port.mapbase, 1204 (unsigned long long) up->port.mapbase,
1206 up->port.irq); 1205 up->port.irq);
1207 1206
1208 #ifdef CONFIG_SERIO 1207 #ifdef CONFIG_SERIO
1209 serio = &up->serio; 1208 serio = &up->serio;
1210 serio->port_data = up; 1209 serio->port_data = up;
1211 1210
1212 serio->id.type = SERIO_RS232; 1211 serio->id.type = SERIO_RS232;
1213 if (up->su_type == SU_PORT_KBD) { 1212 if (up->su_type == SU_PORT_KBD) {
1214 serio->id.proto = SERIO_SUNKBD; 1213 serio->id.proto = SERIO_SUNKBD;
1215 strlcpy(serio->name, "sukbd", sizeof(serio->name)); 1214 strlcpy(serio->name, "sukbd", sizeof(serio->name));
1216 } else { 1215 } else {
1217 serio->id.proto = SERIO_SUN; 1216 serio->id.proto = SERIO_SUN;
1218 serio->id.extra = 1; 1217 serio->id.extra = 1;
1219 strlcpy(serio->name, "sums", sizeof(serio->name)); 1218 strlcpy(serio->name, "sums", sizeof(serio->name));
1220 } 1219 }
1221 strlcpy(serio->phys, 1220 strlcpy(serio->phys,
1222 (!(up->port.line & 1) ? "su/serio0" : "su/serio1"), 1221 (!(up->port.line & 1) ? "su/serio0" : "su/serio1"),
1223 sizeof(serio->phys)); 1222 sizeof(serio->phys));
1224 1223
1225 serio->write = sunsu_serio_write; 1224 serio->write = sunsu_serio_write;
1226 serio->open = sunsu_serio_open; 1225 serio->open = sunsu_serio_open;
1227 serio->close = sunsu_serio_close; 1226 serio->close = sunsu_serio_close;
1228 serio->dev.parent = up->port.dev; 1227 serio->dev.parent = up->port.dev;
1229 1228
1230 serio_register_port(serio); 1229 serio_register_port(serio);
1231 #endif 1230 #endif
1232 1231
1233 sunsu_change_speed(&up->port, up->cflag, 0, quot); 1232 sunsu_change_speed(&up->port, up->cflag, 0, quot);
1234 1233
1235 sunsu_startup(&up->port); 1234 sunsu_startup(&up->port);
1236 return 0; 1235 return 0;
1237 } 1236 }
1238 1237
1239 /* 1238 /*
1240 * ------------------------------------------------------------ 1239 * ------------------------------------------------------------
1241 * Serial console driver 1240 * Serial console driver
1242 * ------------------------------------------------------------ 1241 * ------------------------------------------------------------
1243 */ 1242 */
1244 1243
1245 #ifdef CONFIG_SERIAL_SUNSU_CONSOLE 1244 #ifdef CONFIG_SERIAL_SUNSU_CONSOLE
1246 1245
1247 #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE) 1246 #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
1248 1247
1249 /* 1248 /*
1250 * Wait for transmitter & holding register to empty 1249 * Wait for transmitter & holding register to empty
1251 */ 1250 */
1252 static __inline__ void wait_for_xmitr(struct uart_sunsu_port *up) 1251 static __inline__ void wait_for_xmitr(struct uart_sunsu_port *up)
1253 { 1252 {
1254 unsigned int status, tmout = 10000; 1253 unsigned int status, tmout = 10000;
1255 1254
1256 /* Wait up to 10ms for the character(s) to be sent. */ 1255 /* Wait up to 10ms for the character(s) to be sent. */
1257 do { 1256 do {
1258 status = serial_in(up, UART_LSR); 1257 status = serial_in(up, UART_LSR);
1259 1258
1260 if (status & UART_LSR_BI) 1259 if (status & UART_LSR_BI)
1261 up->lsr_break_flag = UART_LSR_BI; 1260 up->lsr_break_flag = UART_LSR_BI;
1262 1261
1263 if (--tmout == 0) 1262 if (--tmout == 0)
1264 break; 1263 break;
1265 udelay(1); 1264 udelay(1);
1266 } while ((status & BOTH_EMPTY) != BOTH_EMPTY); 1265 } while ((status & BOTH_EMPTY) != BOTH_EMPTY);
1267 1266
1268 /* Wait up to 1s for flow control if necessary */ 1267 /* Wait up to 1s for flow control if necessary */
1269 if (up->port.flags & UPF_CONS_FLOW) { 1268 if (up->port.flags & UPF_CONS_FLOW) {
1270 tmout = 1000000; 1269 tmout = 1000000;
1271 while (--tmout && 1270 while (--tmout &&
1272 ((serial_in(up, UART_MSR) & UART_MSR_CTS) == 0)) 1271 ((serial_in(up, UART_MSR) & UART_MSR_CTS) == 0))
1273 udelay(1); 1272 udelay(1);
1274 } 1273 }
1275 } 1274 }
1276 1275
1277 static void sunsu_console_putchar(struct uart_port *port, int ch) 1276 static void sunsu_console_putchar(struct uart_port *port, int ch)
1278 { 1277 {
1279 struct uart_sunsu_port *up = (struct uart_sunsu_port *)port; 1278 struct uart_sunsu_port *up = (struct uart_sunsu_port *)port;
1280 1279
1281 wait_for_xmitr(up); 1280 wait_for_xmitr(up);
1282 serial_out(up, UART_TX, ch); 1281 serial_out(up, UART_TX, ch);
1283 } 1282 }
1284 1283
1285 /* 1284 /*
1286 * Print a string to the serial port trying not to disturb 1285 * Print a string to the serial port trying not to disturb
1287 * any possible real use of the port... 1286 * any possible real use of the port...
1288 */ 1287 */
1289 static void sunsu_console_write(struct console *co, const char *s, 1288 static void sunsu_console_write(struct console *co, const char *s,
1290 unsigned int count) 1289 unsigned int count)
1291 { 1290 {
1292 struct uart_sunsu_port *up = &sunsu_ports[co->index]; 1291 struct uart_sunsu_port *up = &sunsu_ports[co->index];
1293 unsigned long flags; 1292 unsigned long flags;
1294 unsigned int ier; 1293 unsigned int ier;
1295 int locked = 1; 1294 int locked = 1;
1296 1295
1297 local_irq_save(flags); 1296 local_irq_save(flags);
1298 if (up->port.sysrq) { 1297 if (up->port.sysrq) {
1299 locked = 0; 1298 locked = 0;
1300 } else if (oops_in_progress) { 1299 } else if (oops_in_progress) {
1301 locked = spin_trylock(&up->port.lock); 1300 locked = spin_trylock(&up->port.lock);
1302 } else 1301 } else
1303 spin_lock(&up->port.lock); 1302 spin_lock(&up->port.lock);
1304 1303
1305 /* 1304 /*
1306 * First save the UER then disable the interrupts 1305 * First save the UER then disable the interrupts
1307 */ 1306 */
1308 ier = serial_in(up, UART_IER); 1307 ier = serial_in(up, UART_IER);
1309 serial_out(up, UART_IER, 0); 1308 serial_out(up, UART_IER, 0);
1310 1309
1311 uart_console_write(&up->port, s, count, sunsu_console_putchar); 1310 uart_console_write(&up->port, s, count, sunsu_console_putchar);
1312 1311
1313 /* 1312 /*
1314 * Finally, wait for transmitter to become empty 1313 * Finally, wait for transmitter to become empty
1315 * and restore the IER 1314 * and restore the IER
1316 */ 1315 */
1317 wait_for_xmitr(up); 1316 wait_for_xmitr(up);
1318 serial_out(up, UART_IER, ier); 1317 serial_out(up, UART_IER, ier);
1319 1318
1320 if (locked) 1319 if (locked)
1321 spin_unlock(&up->port.lock); 1320 spin_unlock(&up->port.lock);
1322 local_irq_restore(flags); 1321 local_irq_restore(flags);
1323 } 1322 }
1324 1323
1325 /* 1324 /*
1326 * Setup initial baud/bits/parity. We do two things here: 1325 * Setup initial baud/bits/parity. We do two things here:
1327 * - construct a cflag setting for the first su_open() 1326 * - construct a cflag setting for the first su_open()
1328 * - initialize the serial port 1327 * - initialize the serial port
1329 * Return non-zero if we didn't find a serial port. 1328 * Return non-zero if we didn't find a serial port.
1330 */ 1329 */
1331 static int __init sunsu_console_setup(struct console *co, char *options) 1330 static int __init sunsu_console_setup(struct console *co, char *options)
1332 { 1331 {
1333 static struct ktermios dummy; 1332 static struct ktermios dummy;
1334 struct ktermios termios; 1333 struct ktermios termios;
1335 struct uart_port *port; 1334 struct uart_port *port;
1336 1335
1337 printk("Console: ttyS%d (SU)\n", 1336 printk("Console: ttyS%d (SU)\n",
1338 (sunsu_reg.minor - 64) + co->index); 1337 (sunsu_reg.minor - 64) + co->index);
1339 1338
1340 /* 1339 /*
1341 * Check whether an invalid uart number has been specified, and 1340 * Check whether an invalid uart number has been specified, and
1342 * if so, search for the first available port that does have 1341 * if so, search for the first available port that does have
1343 * console support. 1342 * console support.
1344 */ 1343 */
1345 if (co->index >= UART_NR) 1344 if (co->index >= UART_NR)
1346 co->index = 0; 1345 co->index = 0;
1347 port = &sunsu_ports[co->index].port; 1346 port = &sunsu_ports[co->index].port;
1348 1347
1349 /* 1348 /*
1350 * Temporary fix. 1349 * Temporary fix.
1351 */ 1350 */
1352 spin_lock_init(&port->lock); 1351 spin_lock_init(&port->lock);
1353 1352
1354 /* Get firmware console settings. */ 1353 /* Get firmware console settings. */
1355 sunserial_console_termios(co, port->dev->of_node); 1354 sunserial_console_termios(co, port->dev->of_node);
1356 1355
1357 memset(&termios, 0, sizeof(struct ktermios)); 1356 memset(&termios, 0, sizeof(struct ktermios));
1358 termios.c_cflag = co->cflag; 1357 termios.c_cflag = co->cflag;
1359 port->mctrl |= TIOCM_DTR; 1358 port->mctrl |= TIOCM_DTR;
1360 port->ops->set_termios(port, &termios, &dummy); 1359 port->ops->set_termios(port, &termios, &dummy);
1361 1360
1362 return 0; 1361 return 0;
1363 } 1362 }
1364 1363
1365 static struct console sunsu_console = { 1364 static struct console sunsu_console = {
1366 .name = "ttyS", 1365 .name = "ttyS",
1367 .write = sunsu_console_write, 1366 .write = sunsu_console_write,
1368 .device = uart_console_device, 1367 .device = uart_console_device,
1369 .setup = sunsu_console_setup, 1368 .setup = sunsu_console_setup,
1370 .flags = CON_PRINTBUFFER, 1369 .flags = CON_PRINTBUFFER,
1371 .index = -1, 1370 .index = -1,
1372 .data = &sunsu_reg, 1371 .data = &sunsu_reg,
1373 }; 1372 };
1374 1373
1375 /* 1374 /*
1376 * Register console. 1375 * Register console.
1377 */ 1376 */
1378 1377
1379 static inline struct console *SUNSU_CONSOLE(void) 1378 static inline struct console *SUNSU_CONSOLE(void)
1380 { 1379 {
1381 return &sunsu_console; 1380 return &sunsu_console;
1382 } 1381 }
1383 #else 1382 #else
1384 #define SUNSU_CONSOLE() (NULL) 1383 #define SUNSU_CONSOLE() (NULL)
1385 #define sunsu_serial_console_init() do { } while (0) 1384 #define sunsu_serial_console_init() do { } while (0)
1386 #endif 1385 #endif
1387 1386
1388 static enum su_type __devinit su_get_type(struct device_node *dp) 1387 static enum su_type __devinit su_get_type(struct device_node *dp)
1389 { 1388 {
1390 struct device_node *ap = of_find_node_by_path("/aliases"); 1389 struct device_node *ap = of_find_node_by_path("/aliases");
1391 1390
1392 if (ap) { 1391 if (ap) {
1393 const char *keyb = of_get_property(ap, "keyboard", NULL); 1392 const char *keyb = of_get_property(ap, "keyboard", NULL);
1394 const char *ms = of_get_property(ap, "mouse", NULL); 1393 const char *ms = of_get_property(ap, "mouse", NULL);
1395 1394
1396 if (keyb) { 1395 if (keyb) {
1397 if (dp == of_find_node_by_path(keyb)) 1396 if (dp == of_find_node_by_path(keyb))
1398 return SU_PORT_KBD; 1397 return SU_PORT_KBD;
1399 } 1398 }
1400 if (ms) { 1399 if (ms) {
1401 if (dp == of_find_node_by_path(ms)) 1400 if (dp == of_find_node_by_path(ms))
1402 return SU_PORT_MS; 1401 return SU_PORT_MS;
1403 } 1402 }
1404 } 1403 }
1405 1404
1406 return SU_PORT_PORT; 1405 return SU_PORT_PORT;
1407 } 1406 }
1408 1407
1409 static int __devinit su_probe(struct platform_device *op) 1408 static int __devinit su_probe(struct platform_device *op)
1410 { 1409 {
1411 static int inst; 1410 static int inst;
1412 struct device_node *dp = op->dev.of_node; 1411 struct device_node *dp = op->dev.of_node;
1413 struct uart_sunsu_port *up; 1412 struct uart_sunsu_port *up;
1414 struct resource *rp; 1413 struct resource *rp;
1415 enum su_type type; 1414 enum su_type type;
1416 bool ignore_line; 1415 bool ignore_line;
1417 int err; 1416 int err;
1418 1417
1419 type = su_get_type(dp); 1418 type = su_get_type(dp);
1420 if (type == SU_PORT_PORT) { 1419 if (type == SU_PORT_PORT) {
1421 if (inst >= UART_NR) 1420 if (inst >= UART_NR)
1422 return -EINVAL; 1421 return -EINVAL;
1423 up = &sunsu_ports[inst]; 1422 up = &sunsu_ports[inst];
1424 } else { 1423 } else {
1425 up = kzalloc(sizeof(*up), GFP_KERNEL); 1424 up = kzalloc(sizeof(*up), GFP_KERNEL);
1426 if (!up) 1425 if (!up)
1427 return -ENOMEM; 1426 return -ENOMEM;
1428 } 1427 }
1429 1428
1430 up->port.line = inst; 1429 up->port.line = inst;
1431 1430
1432 spin_lock_init(&up->port.lock); 1431 spin_lock_init(&up->port.lock);
1433 1432
1434 up->su_type = type; 1433 up->su_type = type;
1435 1434
1436 rp = &op->resource[0]; 1435 rp = &op->resource[0];
1437 up->port.mapbase = rp->start; 1436 up->port.mapbase = rp->start;
1438 up->reg_size = resource_size(rp); 1437 up->reg_size = resource_size(rp);
1439 up->port.membase = of_ioremap(rp, 0, up->reg_size, "su"); 1438 up->port.membase = of_ioremap(rp, 0, up->reg_size, "su");
1440 if (!up->port.membase) { 1439 if (!up->port.membase) {
1441 if (type != SU_PORT_PORT) 1440 if (type != SU_PORT_PORT)
1442 kfree(up); 1441 kfree(up);
1443 return -ENOMEM; 1442 return -ENOMEM;
1444 } 1443 }
1445 1444
1446 up->port.irq = op->archdata.irqs[0]; 1445 up->port.irq = op->archdata.irqs[0];
1447 1446
1448 up->port.dev = &op->dev; 1447 up->port.dev = &op->dev;
1449 1448
1450 up->port.type = PORT_UNKNOWN; 1449 up->port.type = PORT_UNKNOWN;
1451 up->port.uartclk = (SU_BASE_BAUD * 16); 1450 up->port.uartclk = (SU_BASE_BAUD * 16);
1452 1451
1453 err = 0; 1452 err = 0;
1454 if (up->su_type == SU_PORT_KBD || up->su_type == SU_PORT_MS) { 1453 if (up->su_type == SU_PORT_KBD || up->su_type == SU_PORT_MS) {
1455 err = sunsu_kbd_ms_init(up); 1454 err = sunsu_kbd_ms_init(up);
1456 if (err) { 1455 if (err) {
1457 of_iounmap(&op->resource[0], 1456 of_iounmap(&op->resource[0],
1458 up->port.membase, up->reg_size); 1457 up->port.membase, up->reg_size);
1459 kfree(up); 1458 kfree(up);
1460 return err; 1459 return err;
1461 } 1460 }
1462 dev_set_drvdata(&op->dev, up); 1461 dev_set_drvdata(&op->dev, up);
1463 1462
1464 return 0; 1463 return 0;
1465 } 1464 }
1466 1465
1467 up->port.flags |= UPF_BOOT_AUTOCONF; 1466 up->port.flags |= UPF_BOOT_AUTOCONF;
1468 1467
1469 sunsu_autoconfig(up); 1468 sunsu_autoconfig(up);
1470 1469
1471 err = -ENODEV; 1470 err = -ENODEV;
1472 if (up->port.type == PORT_UNKNOWN) 1471 if (up->port.type == PORT_UNKNOWN)
1473 goto out_unmap; 1472 goto out_unmap;
1474 1473
1475 up->port.ops = &sunsu_pops; 1474 up->port.ops = &sunsu_pops;
1476 1475
1477 ignore_line = false; 1476 ignore_line = false;
1478 if (!strcmp(dp->name, "rsc-console") || 1477 if (!strcmp(dp->name, "rsc-console") ||
1479 !strcmp(dp->name, "lom-console")) 1478 !strcmp(dp->name, "lom-console"))
1480 ignore_line = true; 1479 ignore_line = true;
1481 1480
1482 sunserial_console_match(SUNSU_CONSOLE(), dp, 1481 sunserial_console_match(SUNSU_CONSOLE(), dp,
1483 &sunsu_reg, up->port.line, 1482 &sunsu_reg, up->port.line,
1484 ignore_line); 1483 ignore_line);
1485 err = uart_add_one_port(&sunsu_reg, &up->port); 1484 err = uart_add_one_port(&sunsu_reg, &up->port);
1486 if (err) 1485 if (err)
1487 goto out_unmap; 1486 goto out_unmap;
1488 1487
1489 dev_set_drvdata(&op->dev, up); 1488 dev_set_drvdata(&op->dev, up);
1490 1489
1491 inst++; 1490 inst++;
1492 1491
1493 return 0; 1492 return 0;
1494 1493
1495 out_unmap: 1494 out_unmap:
1496 of_iounmap(&op->resource[0], up->port.membase, up->reg_size); 1495 of_iounmap(&op->resource[0], up->port.membase, up->reg_size);
1497 return err; 1496 return err;
1498 } 1497 }
1499 1498
1500 static int __devexit su_remove(struct platform_device *op) 1499 static int __devexit su_remove(struct platform_device *op)
1501 { 1500 {
1502 struct uart_sunsu_port *up = dev_get_drvdata(&op->dev); 1501 struct uart_sunsu_port *up = dev_get_drvdata(&op->dev);
1503 bool kbdms = false; 1502 bool kbdms = false;
1504 1503
1505 if (up->su_type == SU_PORT_MS || 1504 if (up->su_type == SU_PORT_MS ||
1506 up->su_type == SU_PORT_KBD) 1505 up->su_type == SU_PORT_KBD)
1507 kbdms = true; 1506 kbdms = true;
1508 1507
1509 if (kbdms) { 1508 if (kbdms) {
1510 #ifdef CONFIG_SERIO 1509 #ifdef CONFIG_SERIO
1511 serio_unregister_port(&up->serio); 1510 serio_unregister_port(&up->serio);
1512 #endif 1511 #endif
1513 } else if (up->port.type != PORT_UNKNOWN) 1512 } else if (up->port.type != PORT_UNKNOWN)
1514 uart_remove_one_port(&sunsu_reg, &up->port); 1513 uart_remove_one_port(&sunsu_reg, &up->port);
1515 1514
1516 if (up->port.membase) 1515 if (up->port.membase)
1517 of_iounmap(&op->resource[0], up->port.membase, up->reg_size); 1516 of_iounmap(&op->resource[0], up->port.membase, up->reg_size);
1518 1517
1519 if (kbdms) 1518 if (kbdms)
1520 kfree(up); 1519 kfree(up);
1521 1520
1522 dev_set_drvdata(&op->dev, NULL); 1521 dev_set_drvdata(&op->dev, NULL);
1523 1522
1524 return 0; 1523 return 0;
1525 } 1524 }
1526 1525
1527 static const struct of_device_id su_match[] = { 1526 static const struct of_device_id su_match[] = {
1528 { 1527 {
1529 .name = "su", 1528 .name = "su",
1530 }, 1529 },
1531 { 1530 {
1532 .name = "su_pnp", 1531 .name = "su_pnp",
1533 }, 1532 },
1534 { 1533 {
1535 .name = "serial", 1534 .name = "serial",
1536 .compatible = "su", 1535 .compatible = "su",
1537 }, 1536 },
1538 { 1537 {
1539 .type = "serial", 1538 .type = "serial",
1540 .compatible = "su", 1539 .compatible = "su",
1541 }, 1540 },
1542 {}, 1541 {},
1543 }; 1542 };
1544 MODULE_DEVICE_TABLE(of, su_match); 1543 MODULE_DEVICE_TABLE(of, su_match);
1545 1544
1546 static struct platform_driver su_driver = { 1545 static struct platform_driver su_driver = {
1547 .driver = { 1546 .driver = {
1548 .name = "su", 1547 .name = "su",
1549 .owner = THIS_MODULE, 1548 .owner = THIS_MODULE,
1550 .of_match_table = su_match, 1549 .of_match_table = su_match,
1551 }, 1550 },
1552 .probe = su_probe, 1551 .probe = su_probe,
1553 .remove = __devexit_p(su_remove), 1552 .remove = __devexit_p(su_remove),
1554 }; 1553 };
1555 1554
1556 static int __init sunsu_init(void) 1555 static int __init sunsu_init(void)
1557 { 1556 {
1558 struct device_node *dp; 1557 struct device_node *dp;
1559 int err; 1558 int err;
1560 int num_uart = 0; 1559 int num_uart = 0;
1561 1560
1562 for_each_node_by_name(dp, "su") { 1561 for_each_node_by_name(dp, "su") {
1563 if (su_get_type(dp) == SU_PORT_PORT) 1562 if (su_get_type(dp) == SU_PORT_PORT)
1564 num_uart++; 1563 num_uart++;
1565 } 1564 }
1566 for_each_node_by_name(dp, "su_pnp") { 1565 for_each_node_by_name(dp, "su_pnp") {
1567 if (su_get_type(dp) == SU_PORT_PORT) 1566 if (su_get_type(dp) == SU_PORT_PORT)
1568 num_uart++; 1567 num_uart++;
1569 } 1568 }
1570 for_each_node_by_name(dp, "serial") { 1569 for_each_node_by_name(dp, "serial") {
1571 if (of_device_is_compatible(dp, "su")) { 1570 if (of_device_is_compatible(dp, "su")) {
1572 if (su_get_type(dp) == SU_PORT_PORT) 1571 if (su_get_type(dp) == SU_PORT_PORT)
1573 num_uart++; 1572 num_uart++;
1574 } 1573 }
1575 } 1574 }
1576 for_each_node_by_type(dp, "serial") { 1575 for_each_node_by_type(dp, "serial") {
1577 if (of_device_is_compatible(dp, "su")) { 1576 if (of_device_is_compatible(dp, "su")) {
1578 if (su_get_type(dp) == SU_PORT_PORT) 1577 if (su_get_type(dp) == SU_PORT_PORT)
1579 num_uart++; 1578 num_uart++;
1580 } 1579 }
1581 } 1580 }
1582 1581
1583 if (num_uart) { 1582 if (num_uart) {
1584 err = sunserial_register_minors(&sunsu_reg, num_uart); 1583 err = sunserial_register_minors(&sunsu_reg, num_uart);
1585 if (err) 1584 if (err)
1586 return err; 1585 return err;
1587 } 1586 }
1588 1587
1589 err = platform_driver_register(&su_driver); 1588 err = platform_driver_register(&su_driver);
1590 if (err && num_uart) 1589 if (err && num_uart)
1591 sunserial_unregister_minors(&sunsu_reg, num_uart); 1590 sunserial_unregister_minors(&sunsu_reg, num_uart);
1592 1591
1593 return err; 1592 return err;
1594 } 1593 }
1595 1594
1596 static void __exit sunsu_exit(void) 1595 static void __exit sunsu_exit(void)
1597 { 1596 {
1598 if (sunsu_reg.nr) 1597 if (sunsu_reg.nr)
1599 sunserial_unregister_minors(&sunsu_reg, sunsu_reg.nr); 1598 sunserial_unregister_minors(&sunsu_reg, sunsu_reg.nr);
1600 } 1599 }
1601 1600
1602 module_init(sunsu_init); 1601 module_init(sunsu_init);
1603 module_exit(sunsu_exit); 1602 module_exit(sunsu_exit);
1604 1603
1605 MODULE_AUTHOR("Eddie C. Dost, Peter Zaitcev, and David S. Miller"); 1604 MODULE_AUTHOR("Eddie C. Dost, Peter Zaitcev, and David S. Miller");
1606 MODULE_DESCRIPTION("Sun SU serial port driver"); 1605 MODULE_DESCRIPTION("Sun SU serial port driver");
1607 MODULE_VERSION("2.0"); 1606 MODULE_VERSION("2.0");
1608 MODULE_LICENSE("GPL"); 1607 MODULE_LICENSE("GPL");
1609 1608
drivers/tty/serial/sunzilog.c
1 /* sunzilog.c: Zilog serial driver for Sparc systems. 1 /* sunzilog.c: Zilog serial driver for Sparc systems.
2 * 2 *
3 * Driver for Zilog serial chips found on Sun workstations and 3 * Driver for Zilog serial chips found on Sun workstations and
4 * servers. This driver could actually be made more generic. 4 * servers. This driver could actually be made more generic.
5 * 5 *
6 * This is based on the old drivers/sbus/char/zs.c code. A lot 6 * This is based on the old drivers/sbus/char/zs.c code. A lot
7 * of code has been simply moved over directly from there but 7 * of code has been simply moved over directly from there but
8 * much has been rewritten. Credits therefore go out to Eddie 8 * much has been rewritten. Credits therefore go out to Eddie
9 * C. Dost, Pete Zaitcev, Ted Ts'o and Alex Buell for their 9 * C. Dost, Pete Zaitcev, Ted Ts'o and Alex Buell for their
10 * work there. 10 * work there.
11 * 11 *
12 * Copyright (C) 2002, 2006, 2007 David S. Miller (davem@davemloft.net) 12 * Copyright (C) 2002, 2006, 2007 David S. Miller (davem@davemloft.net)
13 */ 13 */
14 14
15 #include <linux/module.h> 15 #include <linux/module.h>
16 #include <linux/kernel.h> 16 #include <linux/kernel.h>
17 #include <linux/errno.h> 17 #include <linux/errno.h>
18 #include <linux/delay.h> 18 #include <linux/delay.h>
19 #include <linux/tty.h> 19 #include <linux/tty.h>
20 #include <linux/tty_flip.h> 20 #include <linux/tty_flip.h>
21 #include <linux/major.h> 21 #include <linux/major.h>
22 #include <linux/string.h> 22 #include <linux/string.h>
23 #include <linux/ptrace.h> 23 #include <linux/ptrace.h>
24 #include <linux/ioport.h> 24 #include <linux/ioport.h>
25 #include <linux/slab.h> 25 #include <linux/slab.h>
26 #include <linux/circ_buf.h> 26 #include <linux/circ_buf.h>
27 #include <linux/serial.h> 27 #include <linux/serial.h>
28 #include <linux/sysrq.h> 28 #include <linux/sysrq.h>
29 #include <linux/console.h> 29 #include <linux/console.h>
30 #include <linux/spinlock.h> 30 #include <linux/spinlock.h>
31 #ifdef CONFIG_SERIO 31 #ifdef CONFIG_SERIO
32 #include <linux/serio.h> 32 #include <linux/serio.h>
33 #endif 33 #endif
34 #include <linux/init.h> 34 #include <linux/init.h>
35 #include <linux/of_device.h> 35 #include <linux/of_device.h>
36 36
37 #include <asm/io.h> 37 #include <asm/io.h>
38 #include <asm/irq.h> 38 #include <asm/irq.h>
39 #include <asm/prom.h> 39 #include <asm/prom.h>
40 40
41 #if defined(CONFIG_SERIAL_SUNZILOG_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) 41 #if defined(CONFIG_SERIAL_SUNZILOG_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
42 #define SUPPORT_SYSRQ 42 #define SUPPORT_SYSRQ
43 #endif 43 #endif
44 44
45 #include <linux/serial_core.h> 45 #include <linux/serial_core.h>
46 #include <linux/sunserialcore.h>
46 47
47 #include "suncore.h"
48 #include "sunzilog.h" 48 #include "sunzilog.h"
49 49
50 /* On 32-bit sparcs we need to delay after register accesses 50 /* On 32-bit sparcs we need to delay after register accesses
51 * to accommodate sun4 systems, but we do not need to flush writes. 51 * to accommodate sun4 systems, but we do not need to flush writes.
52 * On 64-bit sparc we only need to flush single writes to ensure 52 * On 64-bit sparc we only need to flush single writes to ensure
53 * completion. 53 * completion.
54 */ 54 */
55 #ifndef CONFIG_SPARC64 55 #ifndef CONFIG_SPARC64
56 #define ZSDELAY() udelay(5) 56 #define ZSDELAY() udelay(5)
57 #define ZSDELAY_LONG() udelay(20) 57 #define ZSDELAY_LONG() udelay(20)
58 #define ZS_WSYNC(channel) do { } while (0) 58 #define ZS_WSYNC(channel) do { } while (0)
59 #else 59 #else
60 #define ZSDELAY() 60 #define ZSDELAY()
61 #define ZSDELAY_LONG() 61 #define ZSDELAY_LONG()
62 #define ZS_WSYNC(__channel) \ 62 #define ZS_WSYNC(__channel) \
63 readb(&((__channel)->control)) 63 readb(&((__channel)->control))
64 #endif 64 #endif
65 65
66 #define ZS_CLOCK 4915200 /* Zilog input clock rate. */ 66 #define ZS_CLOCK 4915200 /* Zilog input clock rate. */
67 #define ZS_CLOCK_DIVISOR 16 /* Divisor this driver uses. */ 67 #define ZS_CLOCK_DIVISOR 16 /* Divisor this driver uses. */
68 68
69 /* 69 /*
70 * We wrap our port structure around the generic uart_port. 70 * We wrap our port structure around the generic uart_port.
71 */ 71 */
72 struct uart_sunzilog_port { 72 struct uart_sunzilog_port {
73 struct uart_port port; 73 struct uart_port port;
74 74
75 /* IRQ servicing chain. */ 75 /* IRQ servicing chain. */
76 struct uart_sunzilog_port *next; 76 struct uart_sunzilog_port *next;
77 77
78 /* Current values of Zilog write registers. */ 78 /* Current values of Zilog write registers. */
79 unsigned char curregs[NUM_ZSREGS]; 79 unsigned char curregs[NUM_ZSREGS];
80 80
81 unsigned int flags; 81 unsigned int flags;
82 #define SUNZILOG_FLAG_CONS_KEYB 0x00000001 82 #define SUNZILOG_FLAG_CONS_KEYB 0x00000001
83 #define SUNZILOG_FLAG_CONS_MOUSE 0x00000002 83 #define SUNZILOG_FLAG_CONS_MOUSE 0x00000002
84 #define SUNZILOG_FLAG_IS_CONS 0x00000004 84 #define SUNZILOG_FLAG_IS_CONS 0x00000004
85 #define SUNZILOG_FLAG_IS_KGDB 0x00000008 85 #define SUNZILOG_FLAG_IS_KGDB 0x00000008
86 #define SUNZILOG_FLAG_MODEM_STATUS 0x00000010 86 #define SUNZILOG_FLAG_MODEM_STATUS 0x00000010
87 #define SUNZILOG_FLAG_IS_CHANNEL_A 0x00000020 87 #define SUNZILOG_FLAG_IS_CHANNEL_A 0x00000020
88 #define SUNZILOG_FLAG_REGS_HELD 0x00000040 88 #define SUNZILOG_FLAG_REGS_HELD 0x00000040
89 #define SUNZILOG_FLAG_TX_STOPPED 0x00000080 89 #define SUNZILOG_FLAG_TX_STOPPED 0x00000080
90 #define SUNZILOG_FLAG_TX_ACTIVE 0x00000100 90 #define SUNZILOG_FLAG_TX_ACTIVE 0x00000100
91 #define SUNZILOG_FLAG_ESCC 0x00000200 91 #define SUNZILOG_FLAG_ESCC 0x00000200
92 #define SUNZILOG_FLAG_ISR_HANDLER 0x00000400 92 #define SUNZILOG_FLAG_ISR_HANDLER 0x00000400
93 93
94 unsigned int cflag; 94 unsigned int cflag;
95 95
96 unsigned char parity_mask; 96 unsigned char parity_mask;
97 unsigned char prev_status; 97 unsigned char prev_status;
98 98
99 #ifdef CONFIG_SERIO 99 #ifdef CONFIG_SERIO
100 struct serio serio; 100 struct serio serio;
101 int serio_open; 101 int serio_open;
102 #endif 102 #endif
103 }; 103 };
104 104
105 static void sunzilog_putchar(struct uart_port *port, int ch); 105 static void sunzilog_putchar(struct uart_port *port, int ch);
106 106
107 #define ZILOG_CHANNEL_FROM_PORT(PORT) ((struct zilog_channel __iomem *)((PORT)->membase)) 107 #define ZILOG_CHANNEL_FROM_PORT(PORT) ((struct zilog_channel __iomem *)((PORT)->membase))
108 #define UART_ZILOG(PORT) ((struct uart_sunzilog_port *)(PORT)) 108 #define UART_ZILOG(PORT) ((struct uart_sunzilog_port *)(PORT))
109 109
110 #define ZS_IS_KEYB(UP) ((UP)->flags & SUNZILOG_FLAG_CONS_KEYB) 110 #define ZS_IS_KEYB(UP) ((UP)->flags & SUNZILOG_FLAG_CONS_KEYB)
111 #define ZS_IS_MOUSE(UP) ((UP)->flags & SUNZILOG_FLAG_CONS_MOUSE) 111 #define ZS_IS_MOUSE(UP) ((UP)->flags & SUNZILOG_FLAG_CONS_MOUSE)
112 #define ZS_IS_CONS(UP) ((UP)->flags & SUNZILOG_FLAG_IS_CONS) 112 #define ZS_IS_CONS(UP) ((UP)->flags & SUNZILOG_FLAG_IS_CONS)
113 #define ZS_IS_KGDB(UP) ((UP)->flags & SUNZILOG_FLAG_IS_KGDB) 113 #define ZS_IS_KGDB(UP) ((UP)->flags & SUNZILOG_FLAG_IS_KGDB)
114 #define ZS_WANTS_MODEM_STATUS(UP) ((UP)->flags & SUNZILOG_FLAG_MODEM_STATUS) 114 #define ZS_WANTS_MODEM_STATUS(UP) ((UP)->flags & SUNZILOG_FLAG_MODEM_STATUS)
115 #define ZS_IS_CHANNEL_A(UP) ((UP)->flags & SUNZILOG_FLAG_IS_CHANNEL_A) 115 #define ZS_IS_CHANNEL_A(UP) ((UP)->flags & SUNZILOG_FLAG_IS_CHANNEL_A)
116 #define ZS_REGS_HELD(UP) ((UP)->flags & SUNZILOG_FLAG_REGS_HELD) 116 #define ZS_REGS_HELD(UP) ((UP)->flags & SUNZILOG_FLAG_REGS_HELD)
117 #define ZS_TX_STOPPED(UP) ((UP)->flags & SUNZILOG_FLAG_TX_STOPPED) 117 #define ZS_TX_STOPPED(UP) ((UP)->flags & SUNZILOG_FLAG_TX_STOPPED)
118 #define ZS_TX_ACTIVE(UP) ((UP)->flags & SUNZILOG_FLAG_TX_ACTIVE) 118 #define ZS_TX_ACTIVE(UP) ((UP)->flags & SUNZILOG_FLAG_TX_ACTIVE)
119 119
120 /* Reading and writing Zilog8530 registers. The delays are to make this 120 /* Reading and writing Zilog8530 registers. The delays are to make this
121 * driver work on the Sun4 which needs a settling delay after each chip 121 * driver work on the Sun4 which needs a settling delay after each chip
122 * register access, other machines handle this in hardware via auxiliary 122 * register access, other machines handle this in hardware via auxiliary
123 * flip-flops which implement the settle time we do in software. 123 * flip-flops which implement the settle time we do in software.
124 * 124 *
125 * The port lock must be held and local IRQs must be disabled 125 * The port lock must be held and local IRQs must be disabled
126 * when {read,write}_zsreg is invoked. 126 * when {read,write}_zsreg is invoked.
127 */ 127 */
128 static unsigned char read_zsreg(struct zilog_channel __iomem *channel, 128 static unsigned char read_zsreg(struct zilog_channel __iomem *channel,
129 unsigned char reg) 129 unsigned char reg)
130 { 130 {
131 unsigned char retval; 131 unsigned char retval;
132 132
133 writeb(reg, &channel->control); 133 writeb(reg, &channel->control);
134 ZSDELAY(); 134 ZSDELAY();
135 retval = readb(&channel->control); 135 retval = readb(&channel->control);
136 ZSDELAY(); 136 ZSDELAY();
137 137
138 return retval; 138 return retval;
139 } 139 }
140 140
141 static void write_zsreg(struct zilog_channel __iomem *channel, 141 static void write_zsreg(struct zilog_channel __iomem *channel,
142 unsigned char reg, unsigned char value) 142 unsigned char reg, unsigned char value)
143 { 143 {
144 writeb(reg, &channel->control); 144 writeb(reg, &channel->control);
145 ZSDELAY(); 145 ZSDELAY();
146 writeb(value, &channel->control); 146 writeb(value, &channel->control);
147 ZSDELAY(); 147 ZSDELAY();
148 } 148 }
149 149
150 static void sunzilog_clear_fifo(struct zilog_channel __iomem *channel) 150 static void sunzilog_clear_fifo(struct zilog_channel __iomem *channel)
151 { 151 {
152 int i; 152 int i;
153 153
154 for (i = 0; i < 32; i++) { 154 for (i = 0; i < 32; i++) {
155 unsigned char regval; 155 unsigned char regval;
156 156
157 regval = readb(&channel->control); 157 regval = readb(&channel->control);
158 ZSDELAY(); 158 ZSDELAY();
159 if (regval & Rx_CH_AV) 159 if (regval & Rx_CH_AV)
160 break; 160 break;
161 161
162 regval = read_zsreg(channel, R1); 162 regval = read_zsreg(channel, R1);
163 readb(&channel->data); 163 readb(&channel->data);
164 ZSDELAY(); 164 ZSDELAY();
165 165
166 if (regval & (PAR_ERR | Rx_OVR | CRC_ERR)) { 166 if (regval & (PAR_ERR | Rx_OVR | CRC_ERR)) {
167 writeb(ERR_RES, &channel->control); 167 writeb(ERR_RES, &channel->control);
168 ZSDELAY(); 168 ZSDELAY();
169 ZS_WSYNC(channel); 169 ZS_WSYNC(channel);
170 } 170 }
171 } 171 }
172 } 172 }
173 173
174 /* This function must only be called when the TX is not busy. The UART 174 /* This function must only be called when the TX is not busy. The UART
175 * port lock must be held and local interrupts disabled. 175 * port lock must be held and local interrupts disabled.
176 */ 176 */
177 static int __load_zsregs(struct zilog_channel __iomem *channel, unsigned char *regs) 177 static int __load_zsregs(struct zilog_channel __iomem *channel, unsigned char *regs)
178 { 178 {
179 int i; 179 int i;
180 int escc; 180 int escc;
181 unsigned char r15; 181 unsigned char r15;
182 182
183 /* Let pending transmits finish. */ 183 /* Let pending transmits finish. */
184 for (i = 0; i < 1000; i++) { 184 for (i = 0; i < 1000; i++) {
185 unsigned char stat = read_zsreg(channel, R1); 185 unsigned char stat = read_zsreg(channel, R1);
186 if (stat & ALL_SNT) 186 if (stat & ALL_SNT)
187 break; 187 break;
188 udelay(100); 188 udelay(100);
189 } 189 }
190 190
191 writeb(ERR_RES, &channel->control); 191 writeb(ERR_RES, &channel->control);
192 ZSDELAY(); 192 ZSDELAY();
193 ZS_WSYNC(channel); 193 ZS_WSYNC(channel);
194 194
195 sunzilog_clear_fifo(channel); 195 sunzilog_clear_fifo(channel);
196 196
197 /* Disable all interrupts. */ 197 /* Disable all interrupts. */
198 write_zsreg(channel, R1, 198 write_zsreg(channel, R1,
199 regs[R1] & ~(RxINT_MASK | TxINT_ENAB | EXT_INT_ENAB)); 199 regs[R1] & ~(RxINT_MASK | TxINT_ENAB | EXT_INT_ENAB));
200 200
201 /* Set parity, sync config, stop bits, and clock divisor. */ 201 /* Set parity, sync config, stop bits, and clock divisor. */
202 write_zsreg(channel, R4, regs[R4]); 202 write_zsreg(channel, R4, regs[R4]);
203 203
204 /* Set misc. TX/RX control bits. */ 204 /* Set misc. TX/RX control bits. */
205 write_zsreg(channel, R10, regs[R10]); 205 write_zsreg(channel, R10, regs[R10]);
206 206
207 /* Set TX/RX controls sans the enable bits. */ 207 /* Set TX/RX controls sans the enable bits. */
208 write_zsreg(channel, R3, regs[R3] & ~RxENAB); 208 write_zsreg(channel, R3, regs[R3] & ~RxENAB);
209 write_zsreg(channel, R5, regs[R5] & ~TxENAB); 209 write_zsreg(channel, R5, regs[R5] & ~TxENAB);
210 210
211 /* Synchronous mode config. */ 211 /* Synchronous mode config. */
212 write_zsreg(channel, R6, regs[R6]); 212 write_zsreg(channel, R6, regs[R6]);
213 write_zsreg(channel, R7, regs[R7]); 213 write_zsreg(channel, R7, regs[R7]);
214 214
215 /* Don't mess with the interrupt vector (R2, unused by us) and 215 /* Don't mess with the interrupt vector (R2, unused by us) and
216 * master interrupt control (R9). We make sure this is setup 216 * master interrupt control (R9). We make sure this is setup
217 * properly at probe time then never touch it again. 217 * properly at probe time then never touch it again.
218 */ 218 */
219 219
220 /* Disable baud generator. */ 220 /* Disable baud generator. */
221 write_zsreg(channel, R14, regs[R14] & ~BRENAB); 221 write_zsreg(channel, R14, regs[R14] & ~BRENAB);
222 222
223 /* Clock mode control. */ 223 /* Clock mode control. */
224 write_zsreg(channel, R11, regs[R11]); 224 write_zsreg(channel, R11, regs[R11]);
225 225
226 /* Lower and upper byte of baud rate generator divisor. */ 226 /* Lower and upper byte of baud rate generator divisor. */
227 write_zsreg(channel, R12, regs[R12]); 227 write_zsreg(channel, R12, regs[R12]);
228 write_zsreg(channel, R13, regs[R13]); 228 write_zsreg(channel, R13, regs[R13]);
229 229
230 /* Now rewrite R14, with BRENAB (if set). */ 230 /* Now rewrite R14, with BRENAB (if set). */
231 write_zsreg(channel, R14, regs[R14]); 231 write_zsreg(channel, R14, regs[R14]);
232 232
233 /* External status interrupt control. */ 233 /* External status interrupt control. */
234 write_zsreg(channel, R15, (regs[R15] | WR7pEN) & ~FIFOEN); 234 write_zsreg(channel, R15, (regs[R15] | WR7pEN) & ~FIFOEN);
235 235
236 /* ESCC Extension Register */ 236 /* ESCC Extension Register */
237 r15 = read_zsreg(channel, R15); 237 r15 = read_zsreg(channel, R15);
238 if (r15 & 0x01) { 238 if (r15 & 0x01) {
239 write_zsreg(channel, R7, regs[R7p]); 239 write_zsreg(channel, R7, regs[R7p]);
240 240
241 /* External status interrupt and FIFO control. */ 241 /* External status interrupt and FIFO control. */
242 write_zsreg(channel, R15, regs[R15] & ~WR7pEN); 242 write_zsreg(channel, R15, regs[R15] & ~WR7pEN);
243 escc = 1; 243 escc = 1;
244 } else { 244 } else {
245 /* Clear FIFO bit case it is an issue */ 245 /* Clear FIFO bit case it is an issue */
246 regs[R15] &= ~FIFOEN; 246 regs[R15] &= ~FIFOEN;
247 escc = 0; 247 escc = 0;
248 } 248 }
249 249
250 /* Reset external status interrupts. */ 250 /* Reset external status interrupts. */
251 write_zsreg(channel, R0, RES_EXT_INT); /* First Latch */ 251 write_zsreg(channel, R0, RES_EXT_INT); /* First Latch */
252 write_zsreg(channel, R0, RES_EXT_INT); /* Second Latch */ 252 write_zsreg(channel, R0, RES_EXT_INT); /* Second Latch */
253 253
254 /* Rewrite R3/R5, this time without enables masked. */ 254 /* Rewrite R3/R5, this time without enables masked. */
255 write_zsreg(channel, R3, regs[R3]); 255 write_zsreg(channel, R3, regs[R3]);
256 write_zsreg(channel, R5, regs[R5]); 256 write_zsreg(channel, R5, regs[R5]);
257 257
258 /* Rewrite R1, this time without IRQ enabled masked. */ 258 /* Rewrite R1, this time without IRQ enabled masked. */
259 write_zsreg(channel, R1, regs[R1]); 259 write_zsreg(channel, R1, regs[R1]);
260 260
261 return escc; 261 return escc;
262 } 262 }
263 263
264 /* Reprogram the Zilog channel HW registers with the copies found in the 264 /* Reprogram the Zilog channel HW registers with the copies found in the
265 * software state struct. If the transmitter is busy, we defer this update 265 * software state struct. If the transmitter is busy, we defer this update
266 * until the next TX complete interrupt. Else, we do it right now. 266 * until the next TX complete interrupt. Else, we do it right now.
267 * 267 *
268 * The UART port lock must be held and local interrupts disabled. 268 * The UART port lock must be held and local interrupts disabled.
269 */ 269 */
270 static void sunzilog_maybe_update_regs(struct uart_sunzilog_port *up, 270 static void sunzilog_maybe_update_regs(struct uart_sunzilog_port *up,
271 struct zilog_channel __iomem *channel) 271 struct zilog_channel __iomem *channel)
272 { 272 {
273 if (!ZS_REGS_HELD(up)) { 273 if (!ZS_REGS_HELD(up)) {
274 if (ZS_TX_ACTIVE(up)) { 274 if (ZS_TX_ACTIVE(up)) {
275 up->flags |= SUNZILOG_FLAG_REGS_HELD; 275 up->flags |= SUNZILOG_FLAG_REGS_HELD;
276 } else { 276 } else {
277 __load_zsregs(channel, up->curregs); 277 __load_zsregs(channel, up->curregs);
278 } 278 }
279 } 279 }
280 } 280 }
281 281
282 static void sunzilog_change_mouse_baud(struct uart_sunzilog_port *up) 282 static void sunzilog_change_mouse_baud(struct uart_sunzilog_port *up)
283 { 283 {
284 unsigned int cur_cflag = up->cflag; 284 unsigned int cur_cflag = up->cflag;
285 int brg, new_baud; 285 int brg, new_baud;
286 286
287 up->cflag &= ~CBAUD; 287 up->cflag &= ~CBAUD;
288 up->cflag |= suncore_mouse_baud_cflag_next(cur_cflag, &new_baud); 288 up->cflag |= suncore_mouse_baud_cflag_next(cur_cflag, &new_baud);
289 289
290 brg = BPS_TO_BRG(new_baud, ZS_CLOCK / ZS_CLOCK_DIVISOR); 290 brg = BPS_TO_BRG(new_baud, ZS_CLOCK / ZS_CLOCK_DIVISOR);
291 up->curregs[R12] = (brg & 0xff); 291 up->curregs[R12] = (brg & 0xff);
292 up->curregs[R13] = (brg >> 8) & 0xff; 292 up->curregs[R13] = (brg >> 8) & 0xff;
293 sunzilog_maybe_update_regs(up, ZILOG_CHANNEL_FROM_PORT(&up->port)); 293 sunzilog_maybe_update_regs(up, ZILOG_CHANNEL_FROM_PORT(&up->port));
294 } 294 }
295 295
296 static void sunzilog_kbdms_receive_chars(struct uart_sunzilog_port *up, 296 static void sunzilog_kbdms_receive_chars(struct uart_sunzilog_port *up,
297 unsigned char ch, int is_break) 297 unsigned char ch, int is_break)
298 { 298 {
299 if (ZS_IS_KEYB(up)) { 299 if (ZS_IS_KEYB(up)) {
300 /* Stop-A is handled by drivers/char/keyboard.c now. */ 300 /* Stop-A is handled by drivers/char/keyboard.c now. */
301 #ifdef CONFIG_SERIO 301 #ifdef CONFIG_SERIO
302 if (up->serio_open) 302 if (up->serio_open)
303 serio_interrupt(&up->serio, ch, 0); 303 serio_interrupt(&up->serio, ch, 0);
304 #endif 304 #endif
305 } else if (ZS_IS_MOUSE(up)) { 305 } else if (ZS_IS_MOUSE(up)) {
306 int ret = suncore_mouse_baud_detection(ch, is_break); 306 int ret = suncore_mouse_baud_detection(ch, is_break);
307 307
308 switch (ret) { 308 switch (ret) {
309 case 2: 309 case 2:
310 sunzilog_change_mouse_baud(up); 310 sunzilog_change_mouse_baud(up);
311 /* fallthru */ 311 /* fallthru */
312 case 1: 312 case 1:
313 break; 313 break;
314 314
315 case 0: 315 case 0:
316 #ifdef CONFIG_SERIO 316 #ifdef CONFIG_SERIO
317 if (up->serio_open) 317 if (up->serio_open)
318 serio_interrupt(&up->serio, ch, 0); 318 serio_interrupt(&up->serio, ch, 0);
319 #endif 319 #endif
320 break; 320 break;
321 }; 321 };
322 } 322 }
323 } 323 }
324 324
325 static struct tty_struct * 325 static struct tty_struct *
326 sunzilog_receive_chars(struct uart_sunzilog_port *up, 326 sunzilog_receive_chars(struct uart_sunzilog_port *up,
327 struct zilog_channel __iomem *channel) 327 struct zilog_channel __iomem *channel)
328 { 328 {
329 struct tty_struct *tty; 329 struct tty_struct *tty;
330 unsigned char ch, r1, flag; 330 unsigned char ch, r1, flag;
331 331
332 tty = NULL; 332 tty = NULL;
333 if (up->port.state != NULL && /* Unopened serial console */ 333 if (up->port.state != NULL && /* Unopened serial console */
334 up->port.state->port.tty != NULL) /* Keyboard || mouse */ 334 up->port.state->port.tty != NULL) /* Keyboard || mouse */
335 tty = up->port.state->port.tty; 335 tty = up->port.state->port.tty;
336 336
337 for (;;) { 337 for (;;) {
338 338
339 r1 = read_zsreg(channel, R1); 339 r1 = read_zsreg(channel, R1);
340 if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR)) { 340 if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR)) {
341 writeb(ERR_RES, &channel->control); 341 writeb(ERR_RES, &channel->control);
342 ZSDELAY(); 342 ZSDELAY();
343 ZS_WSYNC(channel); 343 ZS_WSYNC(channel);
344 } 344 }
345 345
346 ch = readb(&channel->control); 346 ch = readb(&channel->control);
347 ZSDELAY(); 347 ZSDELAY();
348 348
349 /* This funny hack depends upon BRK_ABRT not interfering 349 /* This funny hack depends upon BRK_ABRT not interfering
350 * with the other bits we care about in R1. 350 * with the other bits we care about in R1.
351 */ 351 */
352 if (ch & BRK_ABRT) 352 if (ch & BRK_ABRT)
353 r1 |= BRK_ABRT; 353 r1 |= BRK_ABRT;
354 354
355 if (!(ch & Rx_CH_AV)) 355 if (!(ch & Rx_CH_AV))
356 break; 356 break;
357 357
358 ch = readb(&channel->data); 358 ch = readb(&channel->data);
359 ZSDELAY(); 359 ZSDELAY();
360 360
361 ch &= up->parity_mask; 361 ch &= up->parity_mask;
362 362
363 if (unlikely(ZS_IS_KEYB(up)) || unlikely(ZS_IS_MOUSE(up))) { 363 if (unlikely(ZS_IS_KEYB(up)) || unlikely(ZS_IS_MOUSE(up))) {
364 sunzilog_kbdms_receive_chars(up, ch, 0); 364 sunzilog_kbdms_receive_chars(up, ch, 0);
365 continue; 365 continue;
366 } 366 }
367 367
368 if (tty == NULL) { 368 if (tty == NULL) {
369 uart_handle_sysrq_char(&up->port, ch); 369 uart_handle_sysrq_char(&up->port, ch);
370 continue; 370 continue;
371 } 371 }
372 372
373 /* A real serial line, record the character and status. */ 373 /* A real serial line, record the character and status. */
374 flag = TTY_NORMAL; 374 flag = TTY_NORMAL;
375 up->port.icount.rx++; 375 up->port.icount.rx++;
376 if (r1 & (BRK_ABRT | PAR_ERR | Rx_OVR | CRC_ERR)) { 376 if (r1 & (BRK_ABRT | PAR_ERR | Rx_OVR | CRC_ERR)) {
377 if (r1 & BRK_ABRT) { 377 if (r1 & BRK_ABRT) {
378 r1 &= ~(PAR_ERR | CRC_ERR); 378 r1 &= ~(PAR_ERR | CRC_ERR);
379 up->port.icount.brk++; 379 up->port.icount.brk++;
380 if (uart_handle_break(&up->port)) 380 if (uart_handle_break(&up->port))
381 continue; 381 continue;
382 } 382 }
383 else if (r1 & PAR_ERR) 383 else if (r1 & PAR_ERR)
384 up->port.icount.parity++; 384 up->port.icount.parity++;
385 else if (r1 & CRC_ERR) 385 else if (r1 & CRC_ERR)
386 up->port.icount.frame++; 386 up->port.icount.frame++;
387 if (r1 & Rx_OVR) 387 if (r1 & Rx_OVR)
388 up->port.icount.overrun++; 388 up->port.icount.overrun++;
389 r1 &= up->port.read_status_mask; 389 r1 &= up->port.read_status_mask;
390 if (r1 & BRK_ABRT) 390 if (r1 & BRK_ABRT)
391 flag = TTY_BREAK; 391 flag = TTY_BREAK;
392 else if (r1 & PAR_ERR) 392 else if (r1 & PAR_ERR)
393 flag = TTY_PARITY; 393 flag = TTY_PARITY;
394 else if (r1 & CRC_ERR) 394 else if (r1 & CRC_ERR)
395 flag = TTY_FRAME; 395 flag = TTY_FRAME;
396 } 396 }
397 if (uart_handle_sysrq_char(&up->port, ch)) 397 if (uart_handle_sysrq_char(&up->port, ch))
398 continue; 398 continue;
399 399
400 if (up->port.ignore_status_mask == 0xff || 400 if (up->port.ignore_status_mask == 0xff ||
401 (r1 & up->port.ignore_status_mask) == 0) { 401 (r1 & up->port.ignore_status_mask) == 0) {
402 tty_insert_flip_char(tty, ch, flag); 402 tty_insert_flip_char(tty, ch, flag);
403 } 403 }
404 if (r1 & Rx_OVR) 404 if (r1 & Rx_OVR)
405 tty_insert_flip_char(tty, 0, TTY_OVERRUN); 405 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
406 } 406 }
407 407
408 return tty; 408 return tty;
409 } 409 }
410 410
411 static void sunzilog_status_handle(struct uart_sunzilog_port *up, 411 static void sunzilog_status_handle(struct uart_sunzilog_port *up,
412 struct zilog_channel __iomem *channel) 412 struct zilog_channel __iomem *channel)
413 { 413 {
414 unsigned char status; 414 unsigned char status;
415 415
416 status = readb(&channel->control); 416 status = readb(&channel->control);
417 ZSDELAY(); 417 ZSDELAY();
418 418
419 writeb(RES_EXT_INT, &channel->control); 419 writeb(RES_EXT_INT, &channel->control);
420 ZSDELAY(); 420 ZSDELAY();
421 ZS_WSYNC(channel); 421 ZS_WSYNC(channel);
422 422
423 if (status & BRK_ABRT) { 423 if (status & BRK_ABRT) {
424 if (ZS_IS_MOUSE(up)) 424 if (ZS_IS_MOUSE(up))
425 sunzilog_kbdms_receive_chars(up, 0, 1); 425 sunzilog_kbdms_receive_chars(up, 0, 1);
426 if (ZS_IS_CONS(up)) { 426 if (ZS_IS_CONS(up)) {
427 /* Wait for BREAK to deassert to avoid potentially 427 /* Wait for BREAK to deassert to avoid potentially
428 * confusing the PROM. 428 * confusing the PROM.
429 */ 429 */
430 while (1) { 430 while (1) {
431 status = readb(&channel->control); 431 status = readb(&channel->control);
432 ZSDELAY(); 432 ZSDELAY();
433 if (!(status & BRK_ABRT)) 433 if (!(status & BRK_ABRT))
434 break; 434 break;
435 } 435 }
436 sun_do_break(); 436 sun_do_break();
437 return; 437 return;
438 } 438 }
439 } 439 }
440 440
441 if (ZS_WANTS_MODEM_STATUS(up)) { 441 if (ZS_WANTS_MODEM_STATUS(up)) {
442 if (status & SYNC) 442 if (status & SYNC)
443 up->port.icount.dsr++; 443 up->port.icount.dsr++;
444 444
445 /* The Zilog just gives us an interrupt when DCD/CTS/etc. change. 445 /* The Zilog just gives us an interrupt when DCD/CTS/etc. change.
446 * But it does not tell us which bit has changed, we have to keep 446 * But it does not tell us which bit has changed, we have to keep
447 * track of this ourselves. 447 * track of this ourselves.
448 */ 448 */
449 if ((status ^ up->prev_status) ^ DCD) 449 if ((status ^ up->prev_status) ^ DCD)
450 uart_handle_dcd_change(&up->port, 450 uart_handle_dcd_change(&up->port,
451 (status & DCD)); 451 (status & DCD));
452 if ((status ^ up->prev_status) ^ CTS) 452 if ((status ^ up->prev_status) ^ CTS)
453 uart_handle_cts_change(&up->port, 453 uart_handle_cts_change(&up->port,
454 (status & CTS)); 454 (status & CTS));
455 455
456 wake_up_interruptible(&up->port.state->port.delta_msr_wait); 456 wake_up_interruptible(&up->port.state->port.delta_msr_wait);
457 } 457 }
458 458
459 up->prev_status = status; 459 up->prev_status = status;
460 } 460 }
461 461
462 static void sunzilog_transmit_chars(struct uart_sunzilog_port *up, 462 static void sunzilog_transmit_chars(struct uart_sunzilog_port *up,
463 struct zilog_channel __iomem *channel) 463 struct zilog_channel __iomem *channel)
464 { 464 {
465 struct circ_buf *xmit; 465 struct circ_buf *xmit;
466 466
467 if (ZS_IS_CONS(up)) { 467 if (ZS_IS_CONS(up)) {
468 unsigned char status = readb(&channel->control); 468 unsigned char status = readb(&channel->control);
469 ZSDELAY(); 469 ZSDELAY();
470 470
471 /* TX still busy? Just wait for the next TX done interrupt. 471 /* TX still busy? Just wait for the next TX done interrupt.
472 * 472 *
473 * It can occur because of how we do serial console writes. It would 473 * It can occur because of how we do serial console writes. It would
474 * be nice to transmit console writes just like we normally would for 474 * be nice to transmit console writes just like we normally would for
475 * a TTY line. (ie. buffered and TX interrupt driven). That is not 475 * a TTY line. (ie. buffered and TX interrupt driven). That is not
476 * easy because console writes cannot sleep. One solution might be 476 * easy because console writes cannot sleep. One solution might be
477 * to poll on enough port->xmit space becoming free. -DaveM 477 * to poll on enough port->xmit space becoming free. -DaveM
478 */ 478 */
479 if (!(status & Tx_BUF_EMP)) 479 if (!(status & Tx_BUF_EMP))
480 return; 480 return;
481 } 481 }
482 482
483 up->flags &= ~SUNZILOG_FLAG_TX_ACTIVE; 483 up->flags &= ~SUNZILOG_FLAG_TX_ACTIVE;
484 484
485 if (ZS_REGS_HELD(up)) { 485 if (ZS_REGS_HELD(up)) {
486 __load_zsregs(channel, up->curregs); 486 __load_zsregs(channel, up->curregs);
487 up->flags &= ~SUNZILOG_FLAG_REGS_HELD; 487 up->flags &= ~SUNZILOG_FLAG_REGS_HELD;
488 } 488 }
489 489
490 if (ZS_TX_STOPPED(up)) { 490 if (ZS_TX_STOPPED(up)) {
491 up->flags &= ~SUNZILOG_FLAG_TX_STOPPED; 491 up->flags &= ~SUNZILOG_FLAG_TX_STOPPED;
492 goto ack_tx_int; 492 goto ack_tx_int;
493 } 493 }
494 494
495 if (up->port.x_char) { 495 if (up->port.x_char) {
496 up->flags |= SUNZILOG_FLAG_TX_ACTIVE; 496 up->flags |= SUNZILOG_FLAG_TX_ACTIVE;
497 writeb(up->port.x_char, &channel->data); 497 writeb(up->port.x_char, &channel->data);
498 ZSDELAY(); 498 ZSDELAY();
499 ZS_WSYNC(channel); 499 ZS_WSYNC(channel);
500 500
501 up->port.icount.tx++; 501 up->port.icount.tx++;
502 up->port.x_char = 0; 502 up->port.x_char = 0;
503 return; 503 return;
504 } 504 }
505 505
506 if (up->port.state == NULL) 506 if (up->port.state == NULL)
507 goto ack_tx_int; 507 goto ack_tx_int;
508 xmit = &up->port.state->xmit; 508 xmit = &up->port.state->xmit;
509 if (uart_circ_empty(xmit)) 509 if (uart_circ_empty(xmit))
510 goto ack_tx_int; 510 goto ack_tx_int;
511 511
512 if (uart_tx_stopped(&up->port)) 512 if (uart_tx_stopped(&up->port))
513 goto ack_tx_int; 513 goto ack_tx_int;
514 514
515 up->flags |= SUNZILOG_FLAG_TX_ACTIVE; 515 up->flags |= SUNZILOG_FLAG_TX_ACTIVE;
516 writeb(xmit->buf[xmit->tail], &channel->data); 516 writeb(xmit->buf[xmit->tail], &channel->data);
517 ZSDELAY(); 517 ZSDELAY();
518 ZS_WSYNC(channel); 518 ZS_WSYNC(channel);
519 519
520 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); 520 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
521 up->port.icount.tx++; 521 up->port.icount.tx++;
522 522
523 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) 523 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
524 uart_write_wakeup(&up->port); 524 uart_write_wakeup(&up->port);
525 525
526 return; 526 return;
527 527
528 ack_tx_int: 528 ack_tx_int:
529 writeb(RES_Tx_P, &channel->control); 529 writeb(RES_Tx_P, &channel->control);
530 ZSDELAY(); 530 ZSDELAY();
531 ZS_WSYNC(channel); 531 ZS_WSYNC(channel);
532 } 532 }
533 533
534 static irqreturn_t sunzilog_interrupt(int irq, void *dev_id) 534 static irqreturn_t sunzilog_interrupt(int irq, void *dev_id)
535 { 535 {
536 struct uart_sunzilog_port *up = dev_id; 536 struct uart_sunzilog_port *up = dev_id;
537 537
538 while (up) { 538 while (up) {
539 struct zilog_channel __iomem *channel 539 struct zilog_channel __iomem *channel
540 = ZILOG_CHANNEL_FROM_PORT(&up->port); 540 = ZILOG_CHANNEL_FROM_PORT(&up->port);
541 struct tty_struct *tty; 541 struct tty_struct *tty;
542 unsigned char r3; 542 unsigned char r3;
543 543
544 spin_lock(&up->port.lock); 544 spin_lock(&up->port.lock);
545 r3 = read_zsreg(channel, R3); 545 r3 = read_zsreg(channel, R3);
546 546
547 /* Channel A */ 547 /* Channel A */
548 tty = NULL; 548 tty = NULL;
549 if (r3 & (CHAEXT | CHATxIP | CHARxIP)) { 549 if (r3 & (CHAEXT | CHATxIP | CHARxIP)) {
550 writeb(RES_H_IUS, &channel->control); 550 writeb(RES_H_IUS, &channel->control);
551 ZSDELAY(); 551 ZSDELAY();
552 ZS_WSYNC(channel); 552 ZS_WSYNC(channel);
553 553
554 if (r3 & CHARxIP) 554 if (r3 & CHARxIP)
555 tty = sunzilog_receive_chars(up, channel); 555 tty = sunzilog_receive_chars(up, channel);
556 if (r3 & CHAEXT) 556 if (r3 & CHAEXT)
557 sunzilog_status_handle(up, channel); 557 sunzilog_status_handle(up, channel);
558 if (r3 & CHATxIP) 558 if (r3 & CHATxIP)
559 sunzilog_transmit_chars(up, channel); 559 sunzilog_transmit_chars(up, channel);
560 } 560 }
561 spin_unlock(&up->port.lock); 561 spin_unlock(&up->port.lock);
562 562
563 if (tty) 563 if (tty)
564 tty_flip_buffer_push(tty); 564 tty_flip_buffer_push(tty);
565 565
566 /* Channel B */ 566 /* Channel B */
567 up = up->next; 567 up = up->next;
568 channel = ZILOG_CHANNEL_FROM_PORT(&up->port); 568 channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
569 569
570 spin_lock(&up->port.lock); 570 spin_lock(&up->port.lock);
571 tty = NULL; 571 tty = NULL;
572 if (r3 & (CHBEXT | CHBTxIP | CHBRxIP)) { 572 if (r3 & (CHBEXT | CHBTxIP | CHBRxIP)) {
573 writeb(RES_H_IUS, &channel->control); 573 writeb(RES_H_IUS, &channel->control);
574 ZSDELAY(); 574 ZSDELAY();
575 ZS_WSYNC(channel); 575 ZS_WSYNC(channel);
576 576
577 if (r3 & CHBRxIP) 577 if (r3 & CHBRxIP)
578 tty = sunzilog_receive_chars(up, channel); 578 tty = sunzilog_receive_chars(up, channel);
579 if (r3 & CHBEXT) 579 if (r3 & CHBEXT)
580 sunzilog_status_handle(up, channel); 580 sunzilog_status_handle(up, channel);
581 if (r3 & CHBTxIP) 581 if (r3 & CHBTxIP)
582 sunzilog_transmit_chars(up, channel); 582 sunzilog_transmit_chars(up, channel);
583 } 583 }
584 spin_unlock(&up->port.lock); 584 spin_unlock(&up->port.lock);
585 585
586 if (tty) 586 if (tty)
587 tty_flip_buffer_push(tty); 587 tty_flip_buffer_push(tty);
588 588
589 up = up->next; 589 up = up->next;
590 } 590 }
591 591
592 return IRQ_HANDLED; 592 return IRQ_HANDLED;
593 } 593 }
594 594
595 /* A convenient way to quickly get R0 status. The caller must _not_ hold the 595 /* A convenient way to quickly get R0 status. The caller must _not_ hold the
596 * port lock, it is acquired here. 596 * port lock, it is acquired here.
597 */ 597 */
598 static __inline__ unsigned char sunzilog_read_channel_status(struct uart_port *port) 598 static __inline__ unsigned char sunzilog_read_channel_status(struct uart_port *port)
599 { 599 {
600 struct zilog_channel __iomem *channel; 600 struct zilog_channel __iomem *channel;
601 unsigned char status; 601 unsigned char status;
602 602
603 channel = ZILOG_CHANNEL_FROM_PORT(port); 603 channel = ZILOG_CHANNEL_FROM_PORT(port);
604 status = readb(&channel->control); 604 status = readb(&channel->control);
605 ZSDELAY(); 605 ZSDELAY();
606 606
607 return status; 607 return status;
608 } 608 }
609 609
610 /* The port lock is not held. */ 610 /* The port lock is not held. */
611 static unsigned int sunzilog_tx_empty(struct uart_port *port) 611 static unsigned int sunzilog_tx_empty(struct uart_port *port)
612 { 612 {
613 unsigned long flags; 613 unsigned long flags;
614 unsigned char status; 614 unsigned char status;
615 unsigned int ret; 615 unsigned int ret;
616 616
617 spin_lock_irqsave(&port->lock, flags); 617 spin_lock_irqsave(&port->lock, flags);
618 618
619 status = sunzilog_read_channel_status(port); 619 status = sunzilog_read_channel_status(port);
620 620
621 spin_unlock_irqrestore(&port->lock, flags); 621 spin_unlock_irqrestore(&port->lock, flags);
622 622
623 if (status & Tx_BUF_EMP) 623 if (status & Tx_BUF_EMP)
624 ret = TIOCSER_TEMT; 624 ret = TIOCSER_TEMT;
625 else 625 else
626 ret = 0; 626 ret = 0;
627 627
628 return ret; 628 return ret;
629 } 629 }
630 630
631 /* The port lock is held and interrupts are disabled. */ 631 /* The port lock is held and interrupts are disabled. */
632 static unsigned int sunzilog_get_mctrl(struct uart_port *port) 632 static unsigned int sunzilog_get_mctrl(struct uart_port *port)
633 { 633 {
634 unsigned char status; 634 unsigned char status;
635 unsigned int ret; 635 unsigned int ret;
636 636
637 status = sunzilog_read_channel_status(port); 637 status = sunzilog_read_channel_status(port);
638 638
639 ret = 0; 639 ret = 0;
640 if (status & DCD) 640 if (status & DCD)
641 ret |= TIOCM_CAR; 641 ret |= TIOCM_CAR;
642 if (status & SYNC) 642 if (status & SYNC)
643 ret |= TIOCM_DSR; 643 ret |= TIOCM_DSR;
644 if (status & CTS) 644 if (status & CTS)
645 ret |= TIOCM_CTS; 645 ret |= TIOCM_CTS;
646 646
647 return ret; 647 return ret;
648 } 648 }
649 649
650 /* The port lock is held and interrupts are disabled. */ 650 /* The port lock is held and interrupts are disabled. */
651 static void sunzilog_set_mctrl(struct uart_port *port, unsigned int mctrl) 651 static void sunzilog_set_mctrl(struct uart_port *port, unsigned int mctrl)
652 { 652 {
653 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port; 653 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port;
654 struct zilog_channel __iomem *channel = ZILOG_CHANNEL_FROM_PORT(port); 654 struct zilog_channel __iomem *channel = ZILOG_CHANNEL_FROM_PORT(port);
655 unsigned char set_bits, clear_bits; 655 unsigned char set_bits, clear_bits;
656 656
657 set_bits = clear_bits = 0; 657 set_bits = clear_bits = 0;
658 658
659 if (mctrl & TIOCM_RTS) 659 if (mctrl & TIOCM_RTS)
660 set_bits |= RTS; 660 set_bits |= RTS;
661 else 661 else
662 clear_bits |= RTS; 662 clear_bits |= RTS;
663 if (mctrl & TIOCM_DTR) 663 if (mctrl & TIOCM_DTR)
664 set_bits |= DTR; 664 set_bits |= DTR;
665 else 665 else
666 clear_bits |= DTR; 666 clear_bits |= DTR;
667 667
668 /* NOTE: Not subject to 'transmitter active' rule. */ 668 /* NOTE: Not subject to 'transmitter active' rule. */
669 up->curregs[R5] |= set_bits; 669 up->curregs[R5] |= set_bits;
670 up->curregs[R5] &= ~clear_bits; 670 up->curregs[R5] &= ~clear_bits;
671 write_zsreg(channel, R5, up->curregs[R5]); 671 write_zsreg(channel, R5, up->curregs[R5]);
672 } 672 }
673 673
674 /* The port lock is held and interrupts are disabled. */ 674 /* The port lock is held and interrupts are disabled. */
675 static void sunzilog_stop_tx(struct uart_port *port) 675 static void sunzilog_stop_tx(struct uart_port *port)
676 { 676 {
677 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port; 677 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port;
678 678
679 up->flags |= SUNZILOG_FLAG_TX_STOPPED; 679 up->flags |= SUNZILOG_FLAG_TX_STOPPED;
680 } 680 }
681 681
682 /* The port lock is held and interrupts are disabled. */ 682 /* The port lock is held and interrupts are disabled. */
683 static void sunzilog_start_tx(struct uart_port *port) 683 static void sunzilog_start_tx(struct uart_port *port)
684 { 684 {
685 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port; 685 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port;
686 struct zilog_channel __iomem *channel = ZILOG_CHANNEL_FROM_PORT(port); 686 struct zilog_channel __iomem *channel = ZILOG_CHANNEL_FROM_PORT(port);
687 unsigned char status; 687 unsigned char status;
688 688
689 up->flags |= SUNZILOG_FLAG_TX_ACTIVE; 689 up->flags |= SUNZILOG_FLAG_TX_ACTIVE;
690 up->flags &= ~SUNZILOG_FLAG_TX_STOPPED; 690 up->flags &= ~SUNZILOG_FLAG_TX_STOPPED;
691 691
692 status = readb(&channel->control); 692 status = readb(&channel->control);
693 ZSDELAY(); 693 ZSDELAY();
694 694
695 /* TX busy? Just wait for the TX done interrupt. */ 695 /* TX busy? Just wait for the TX done interrupt. */
696 if (!(status & Tx_BUF_EMP)) 696 if (!(status & Tx_BUF_EMP))
697 return; 697 return;
698 698
699 /* Send the first character to jump-start the TX done 699 /* Send the first character to jump-start the TX done
700 * IRQ sending engine. 700 * IRQ sending engine.
701 */ 701 */
702 if (port->x_char) { 702 if (port->x_char) {
703 writeb(port->x_char, &channel->data); 703 writeb(port->x_char, &channel->data);
704 ZSDELAY(); 704 ZSDELAY();
705 ZS_WSYNC(channel); 705 ZS_WSYNC(channel);
706 706
707 port->icount.tx++; 707 port->icount.tx++;
708 port->x_char = 0; 708 port->x_char = 0;
709 } else { 709 } else {
710 struct circ_buf *xmit = &port->state->xmit; 710 struct circ_buf *xmit = &port->state->xmit;
711 711
712 writeb(xmit->buf[xmit->tail], &channel->data); 712 writeb(xmit->buf[xmit->tail], &channel->data);
713 ZSDELAY(); 713 ZSDELAY();
714 ZS_WSYNC(channel); 714 ZS_WSYNC(channel);
715 715
716 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); 716 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
717 port->icount.tx++; 717 port->icount.tx++;
718 718
719 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) 719 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
720 uart_write_wakeup(&up->port); 720 uart_write_wakeup(&up->port);
721 } 721 }
722 } 722 }
723 723
724 /* The port lock is held. */ 724 /* The port lock is held. */
725 static void sunzilog_stop_rx(struct uart_port *port) 725 static void sunzilog_stop_rx(struct uart_port *port)
726 { 726 {
727 struct uart_sunzilog_port *up = UART_ZILOG(port); 727 struct uart_sunzilog_port *up = UART_ZILOG(port);
728 struct zilog_channel __iomem *channel; 728 struct zilog_channel __iomem *channel;
729 729
730 if (ZS_IS_CONS(up)) 730 if (ZS_IS_CONS(up))
731 return; 731 return;
732 732
733 channel = ZILOG_CHANNEL_FROM_PORT(port); 733 channel = ZILOG_CHANNEL_FROM_PORT(port);
734 734
735 /* Disable all RX interrupts. */ 735 /* Disable all RX interrupts. */
736 up->curregs[R1] &= ~RxINT_MASK; 736 up->curregs[R1] &= ~RxINT_MASK;
737 sunzilog_maybe_update_regs(up, channel); 737 sunzilog_maybe_update_regs(up, channel);
738 } 738 }
739 739
740 /* The port lock is held. */ 740 /* The port lock is held. */
741 static void sunzilog_enable_ms(struct uart_port *port) 741 static void sunzilog_enable_ms(struct uart_port *port)
742 { 742 {
743 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port; 743 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port;
744 struct zilog_channel __iomem *channel = ZILOG_CHANNEL_FROM_PORT(port); 744 struct zilog_channel __iomem *channel = ZILOG_CHANNEL_FROM_PORT(port);
745 unsigned char new_reg; 745 unsigned char new_reg;
746 746
747 new_reg = up->curregs[R15] | (DCDIE | SYNCIE | CTSIE); 747 new_reg = up->curregs[R15] | (DCDIE | SYNCIE | CTSIE);
748 if (new_reg != up->curregs[R15]) { 748 if (new_reg != up->curregs[R15]) {
749 up->curregs[R15] = new_reg; 749 up->curregs[R15] = new_reg;
750 750
751 /* NOTE: Not subject to 'transmitter active' rule. */ 751 /* NOTE: Not subject to 'transmitter active' rule. */
752 write_zsreg(channel, R15, up->curregs[R15] & ~WR7pEN); 752 write_zsreg(channel, R15, up->curregs[R15] & ~WR7pEN);
753 } 753 }
754 } 754 }
755 755
756 /* The port lock is not held. */ 756 /* The port lock is not held. */
757 static void sunzilog_break_ctl(struct uart_port *port, int break_state) 757 static void sunzilog_break_ctl(struct uart_port *port, int break_state)
758 { 758 {
759 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port; 759 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port;
760 struct zilog_channel __iomem *channel = ZILOG_CHANNEL_FROM_PORT(port); 760 struct zilog_channel __iomem *channel = ZILOG_CHANNEL_FROM_PORT(port);
761 unsigned char set_bits, clear_bits, new_reg; 761 unsigned char set_bits, clear_bits, new_reg;
762 unsigned long flags; 762 unsigned long flags;
763 763
764 set_bits = clear_bits = 0; 764 set_bits = clear_bits = 0;
765 765
766 if (break_state) 766 if (break_state)
767 set_bits |= SND_BRK; 767 set_bits |= SND_BRK;
768 else 768 else
769 clear_bits |= SND_BRK; 769 clear_bits |= SND_BRK;
770 770
771 spin_lock_irqsave(&port->lock, flags); 771 spin_lock_irqsave(&port->lock, flags);
772 772
773 new_reg = (up->curregs[R5] | set_bits) & ~clear_bits; 773 new_reg = (up->curregs[R5] | set_bits) & ~clear_bits;
774 if (new_reg != up->curregs[R5]) { 774 if (new_reg != up->curregs[R5]) {
775 up->curregs[R5] = new_reg; 775 up->curregs[R5] = new_reg;
776 776
777 /* NOTE: Not subject to 'transmitter active' rule. */ 777 /* NOTE: Not subject to 'transmitter active' rule. */
778 write_zsreg(channel, R5, up->curregs[R5]); 778 write_zsreg(channel, R5, up->curregs[R5]);
779 } 779 }
780 780
781 spin_unlock_irqrestore(&port->lock, flags); 781 spin_unlock_irqrestore(&port->lock, flags);
782 } 782 }
783 783
784 static void __sunzilog_startup(struct uart_sunzilog_port *up) 784 static void __sunzilog_startup(struct uart_sunzilog_port *up)
785 { 785 {
786 struct zilog_channel __iomem *channel; 786 struct zilog_channel __iomem *channel;
787 787
788 channel = ZILOG_CHANNEL_FROM_PORT(&up->port); 788 channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
789 up->prev_status = readb(&channel->control); 789 up->prev_status = readb(&channel->control);
790 790
791 /* Enable receiver and transmitter. */ 791 /* Enable receiver and transmitter. */
792 up->curregs[R3] |= RxENAB; 792 up->curregs[R3] |= RxENAB;
793 up->curregs[R5] |= TxENAB; 793 up->curregs[R5] |= TxENAB;
794 794
795 up->curregs[R1] |= EXT_INT_ENAB | INT_ALL_Rx | TxINT_ENAB; 795 up->curregs[R1] |= EXT_INT_ENAB | INT_ALL_Rx | TxINT_ENAB;
796 sunzilog_maybe_update_regs(up, channel); 796 sunzilog_maybe_update_regs(up, channel);
797 } 797 }
798 798
799 static int sunzilog_startup(struct uart_port *port) 799 static int sunzilog_startup(struct uart_port *port)
800 { 800 {
801 struct uart_sunzilog_port *up = UART_ZILOG(port); 801 struct uart_sunzilog_port *up = UART_ZILOG(port);
802 unsigned long flags; 802 unsigned long flags;
803 803
804 if (ZS_IS_CONS(up)) 804 if (ZS_IS_CONS(up))
805 return 0; 805 return 0;
806 806
807 spin_lock_irqsave(&port->lock, flags); 807 spin_lock_irqsave(&port->lock, flags);
808 __sunzilog_startup(up); 808 __sunzilog_startup(up);
809 spin_unlock_irqrestore(&port->lock, flags); 809 spin_unlock_irqrestore(&port->lock, flags);
810 return 0; 810 return 0;
811 } 811 }
812 812
813 /* 813 /*
814 * The test for ZS_IS_CONS is explained by the following e-mail: 814 * The test for ZS_IS_CONS is explained by the following e-mail:
815 ***** 815 *****
816 * From: Russell King <rmk@arm.linux.org.uk> 816 * From: Russell King <rmk@arm.linux.org.uk>
817 * Date: Sun, 8 Dec 2002 10:18:38 +0000 817 * Date: Sun, 8 Dec 2002 10:18:38 +0000
818 * 818 *
819 * On Sun, Dec 08, 2002 at 02:43:36AM -0500, Pete Zaitcev wrote: 819 * On Sun, Dec 08, 2002 at 02:43:36AM -0500, Pete Zaitcev wrote:
820 * > I boot my 2.5 boxes using "console=ttyS0,9600" argument, 820 * > I boot my 2.5 boxes using "console=ttyS0,9600" argument,
821 * > and I noticed that something is not right with reference 821 * > and I noticed that something is not right with reference
822 * > counting in this case. It seems that when the console 822 * > counting in this case. It seems that when the console
823 * > is open by kernel initially, this is not accounted 823 * > is open by kernel initially, this is not accounted
824 * > as an open, and uart_startup is not called. 824 * > as an open, and uart_startup is not called.
825 * 825 *
826 * That is correct. We are unable to call uart_startup when the serial 826 * That is correct. We are unable to call uart_startup when the serial
827 * console is initialised because it may need to allocate memory (as 827 * console is initialised because it may need to allocate memory (as
828 * request_irq does) and the memory allocators may not have been 828 * request_irq does) and the memory allocators may not have been
829 * initialised. 829 * initialised.
830 * 830 *
831 * 1. initialise the port into a state where it can send characters in the 831 * 1. initialise the port into a state where it can send characters in the
832 * console write method. 832 * console write method.
833 * 833 *
834 * 2. don't do the actual hardware shutdown in your shutdown() method (but 834 * 2. don't do the actual hardware shutdown in your shutdown() method (but
835 * do the normal software shutdown - ie, free irqs etc) 835 * do the normal software shutdown - ie, free irqs etc)
836 ***** 836 *****
837 */ 837 */
838 static void sunzilog_shutdown(struct uart_port *port) 838 static void sunzilog_shutdown(struct uart_port *port)
839 { 839 {
840 struct uart_sunzilog_port *up = UART_ZILOG(port); 840 struct uart_sunzilog_port *up = UART_ZILOG(port);
841 struct zilog_channel __iomem *channel; 841 struct zilog_channel __iomem *channel;
842 unsigned long flags; 842 unsigned long flags;
843 843
844 if (ZS_IS_CONS(up)) 844 if (ZS_IS_CONS(up))
845 return; 845 return;
846 846
847 spin_lock_irqsave(&port->lock, flags); 847 spin_lock_irqsave(&port->lock, flags);
848 848
849 channel = ZILOG_CHANNEL_FROM_PORT(port); 849 channel = ZILOG_CHANNEL_FROM_PORT(port);
850 850
851 /* Disable receiver and transmitter. */ 851 /* Disable receiver and transmitter. */
852 up->curregs[R3] &= ~RxENAB; 852 up->curregs[R3] &= ~RxENAB;
853 up->curregs[R5] &= ~TxENAB; 853 up->curregs[R5] &= ~TxENAB;
854 854
855 /* Disable all interrupts and BRK assertion. */ 855 /* Disable all interrupts and BRK assertion. */
856 up->curregs[R1] &= ~(EXT_INT_ENAB | TxINT_ENAB | RxINT_MASK); 856 up->curregs[R1] &= ~(EXT_INT_ENAB | TxINT_ENAB | RxINT_MASK);
857 up->curregs[R5] &= ~SND_BRK; 857 up->curregs[R5] &= ~SND_BRK;
858 sunzilog_maybe_update_regs(up, channel); 858 sunzilog_maybe_update_regs(up, channel);
859 859
860 spin_unlock_irqrestore(&port->lock, flags); 860 spin_unlock_irqrestore(&port->lock, flags);
861 } 861 }
862 862
863 /* Shared by TTY driver and serial console setup. The port lock is held 863 /* Shared by TTY driver and serial console setup. The port lock is held
864 * and local interrupts are disabled. 864 * and local interrupts are disabled.
865 */ 865 */
866 static void 866 static void
867 sunzilog_convert_to_zs(struct uart_sunzilog_port *up, unsigned int cflag, 867 sunzilog_convert_to_zs(struct uart_sunzilog_port *up, unsigned int cflag,
868 unsigned int iflag, int brg) 868 unsigned int iflag, int brg)
869 { 869 {
870 870
871 up->curregs[R10] = NRZ; 871 up->curregs[R10] = NRZ;
872 up->curregs[R11] = TCBR | RCBR; 872 up->curregs[R11] = TCBR | RCBR;
873 873
874 /* Program BAUD and clock source. */ 874 /* Program BAUD and clock source. */
875 up->curregs[R4] &= ~XCLK_MASK; 875 up->curregs[R4] &= ~XCLK_MASK;
876 up->curregs[R4] |= X16CLK; 876 up->curregs[R4] |= X16CLK;
877 up->curregs[R12] = brg & 0xff; 877 up->curregs[R12] = brg & 0xff;
878 up->curregs[R13] = (brg >> 8) & 0xff; 878 up->curregs[R13] = (brg >> 8) & 0xff;
879 up->curregs[R14] = BRSRC | BRENAB; 879 up->curregs[R14] = BRSRC | BRENAB;
880 880
881 /* Character size, stop bits, and parity. */ 881 /* Character size, stop bits, and parity. */
882 up->curregs[R3] &= ~RxN_MASK; 882 up->curregs[R3] &= ~RxN_MASK;
883 up->curregs[R5] &= ~TxN_MASK; 883 up->curregs[R5] &= ~TxN_MASK;
884 switch (cflag & CSIZE) { 884 switch (cflag & CSIZE) {
885 case CS5: 885 case CS5:
886 up->curregs[R3] |= Rx5; 886 up->curregs[R3] |= Rx5;
887 up->curregs[R5] |= Tx5; 887 up->curregs[R5] |= Tx5;
888 up->parity_mask = 0x1f; 888 up->parity_mask = 0x1f;
889 break; 889 break;
890 case CS6: 890 case CS6:
891 up->curregs[R3] |= Rx6; 891 up->curregs[R3] |= Rx6;
892 up->curregs[R5] |= Tx6; 892 up->curregs[R5] |= Tx6;
893 up->parity_mask = 0x3f; 893 up->parity_mask = 0x3f;
894 break; 894 break;
895 case CS7: 895 case CS7:
896 up->curregs[R3] |= Rx7; 896 up->curregs[R3] |= Rx7;
897 up->curregs[R5] |= Tx7; 897 up->curregs[R5] |= Tx7;
898 up->parity_mask = 0x7f; 898 up->parity_mask = 0x7f;
899 break; 899 break;
900 case CS8: 900 case CS8:
901 default: 901 default:
902 up->curregs[R3] |= Rx8; 902 up->curregs[R3] |= Rx8;
903 up->curregs[R5] |= Tx8; 903 up->curregs[R5] |= Tx8;
904 up->parity_mask = 0xff; 904 up->parity_mask = 0xff;
905 break; 905 break;
906 }; 906 };
907 up->curregs[R4] &= ~0x0c; 907 up->curregs[R4] &= ~0x0c;
908 if (cflag & CSTOPB) 908 if (cflag & CSTOPB)
909 up->curregs[R4] |= SB2; 909 up->curregs[R4] |= SB2;
910 else 910 else
911 up->curregs[R4] |= SB1; 911 up->curregs[R4] |= SB1;
912 if (cflag & PARENB) 912 if (cflag & PARENB)
913 up->curregs[R4] |= PAR_ENAB; 913 up->curregs[R4] |= PAR_ENAB;
914 else 914 else
915 up->curregs[R4] &= ~PAR_ENAB; 915 up->curregs[R4] &= ~PAR_ENAB;
916 if (!(cflag & PARODD)) 916 if (!(cflag & PARODD))
917 up->curregs[R4] |= PAR_EVEN; 917 up->curregs[R4] |= PAR_EVEN;
918 else 918 else
919 up->curregs[R4] &= ~PAR_EVEN; 919 up->curregs[R4] &= ~PAR_EVEN;
920 920
921 up->port.read_status_mask = Rx_OVR; 921 up->port.read_status_mask = Rx_OVR;
922 if (iflag & INPCK) 922 if (iflag & INPCK)
923 up->port.read_status_mask |= CRC_ERR | PAR_ERR; 923 up->port.read_status_mask |= CRC_ERR | PAR_ERR;
924 if (iflag & (BRKINT | PARMRK)) 924 if (iflag & (BRKINT | PARMRK))
925 up->port.read_status_mask |= BRK_ABRT; 925 up->port.read_status_mask |= BRK_ABRT;
926 926
927 up->port.ignore_status_mask = 0; 927 up->port.ignore_status_mask = 0;
928 if (iflag & IGNPAR) 928 if (iflag & IGNPAR)
929 up->port.ignore_status_mask |= CRC_ERR | PAR_ERR; 929 up->port.ignore_status_mask |= CRC_ERR | PAR_ERR;
930 if (iflag & IGNBRK) { 930 if (iflag & IGNBRK) {
931 up->port.ignore_status_mask |= BRK_ABRT; 931 up->port.ignore_status_mask |= BRK_ABRT;
932 if (iflag & IGNPAR) 932 if (iflag & IGNPAR)
933 up->port.ignore_status_mask |= Rx_OVR; 933 up->port.ignore_status_mask |= Rx_OVR;
934 } 934 }
935 935
936 if ((cflag & CREAD) == 0) 936 if ((cflag & CREAD) == 0)
937 up->port.ignore_status_mask = 0xff; 937 up->port.ignore_status_mask = 0xff;
938 } 938 }
939 939
940 /* The port lock is not held. */ 940 /* The port lock is not held. */
941 static void 941 static void
942 sunzilog_set_termios(struct uart_port *port, struct ktermios *termios, 942 sunzilog_set_termios(struct uart_port *port, struct ktermios *termios,
943 struct ktermios *old) 943 struct ktermios *old)
944 { 944 {
945 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port; 945 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port;
946 unsigned long flags; 946 unsigned long flags;
947 int baud, brg; 947 int baud, brg;
948 948
949 baud = uart_get_baud_rate(port, termios, old, 1200, 76800); 949 baud = uart_get_baud_rate(port, termios, old, 1200, 76800);
950 950
951 spin_lock_irqsave(&up->port.lock, flags); 951 spin_lock_irqsave(&up->port.lock, flags);
952 952
953 brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR); 953 brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR);
954 954
955 sunzilog_convert_to_zs(up, termios->c_cflag, termios->c_iflag, brg); 955 sunzilog_convert_to_zs(up, termios->c_cflag, termios->c_iflag, brg);
956 956
957 if (UART_ENABLE_MS(&up->port, termios->c_cflag)) 957 if (UART_ENABLE_MS(&up->port, termios->c_cflag))
958 up->flags |= SUNZILOG_FLAG_MODEM_STATUS; 958 up->flags |= SUNZILOG_FLAG_MODEM_STATUS;
959 else 959 else
960 up->flags &= ~SUNZILOG_FLAG_MODEM_STATUS; 960 up->flags &= ~SUNZILOG_FLAG_MODEM_STATUS;
961 961
962 up->cflag = termios->c_cflag; 962 up->cflag = termios->c_cflag;
963 963
964 sunzilog_maybe_update_regs(up, ZILOG_CHANNEL_FROM_PORT(port)); 964 sunzilog_maybe_update_regs(up, ZILOG_CHANNEL_FROM_PORT(port));
965 965
966 uart_update_timeout(port, termios->c_cflag, baud); 966 uart_update_timeout(port, termios->c_cflag, baud);
967 967
968 spin_unlock_irqrestore(&up->port.lock, flags); 968 spin_unlock_irqrestore(&up->port.lock, flags);
969 } 969 }
970 970
971 static const char *sunzilog_type(struct uart_port *port) 971 static const char *sunzilog_type(struct uart_port *port)
972 { 972 {
973 struct uart_sunzilog_port *up = UART_ZILOG(port); 973 struct uart_sunzilog_port *up = UART_ZILOG(port);
974 974
975 return (up->flags & SUNZILOG_FLAG_ESCC) ? "zs (ESCC)" : "zs"; 975 return (up->flags & SUNZILOG_FLAG_ESCC) ? "zs (ESCC)" : "zs";
976 } 976 }
977 977
978 /* We do not request/release mappings of the registers here, this 978 /* We do not request/release mappings of the registers here, this
979 * happens at early serial probe time. 979 * happens at early serial probe time.
980 */ 980 */
981 static void sunzilog_release_port(struct uart_port *port) 981 static void sunzilog_release_port(struct uart_port *port)
982 { 982 {
983 } 983 }
984 984
985 static int sunzilog_request_port(struct uart_port *port) 985 static int sunzilog_request_port(struct uart_port *port)
986 { 986 {
987 return 0; 987 return 0;
988 } 988 }
989 989
990 /* These do not need to do anything interesting either. */ 990 /* These do not need to do anything interesting either. */
991 static void sunzilog_config_port(struct uart_port *port, int flags) 991 static void sunzilog_config_port(struct uart_port *port, int flags)
992 { 992 {
993 } 993 }
994 994
995 /* We do not support letting the user mess with the divisor, IRQ, etc. */ 995 /* We do not support letting the user mess with the divisor, IRQ, etc. */
996 static int sunzilog_verify_port(struct uart_port *port, struct serial_struct *ser) 996 static int sunzilog_verify_port(struct uart_port *port, struct serial_struct *ser)
997 { 997 {
998 return -EINVAL; 998 return -EINVAL;
999 } 999 }
1000 1000
1001 #ifdef CONFIG_CONSOLE_POLL 1001 #ifdef CONFIG_CONSOLE_POLL
1002 static int sunzilog_get_poll_char(struct uart_port *port) 1002 static int sunzilog_get_poll_char(struct uart_port *port)
1003 { 1003 {
1004 unsigned char ch, r1; 1004 unsigned char ch, r1;
1005 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port; 1005 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *) port;
1006 struct zilog_channel __iomem *channel 1006 struct zilog_channel __iomem *channel
1007 = ZILOG_CHANNEL_FROM_PORT(&up->port); 1007 = ZILOG_CHANNEL_FROM_PORT(&up->port);
1008 1008
1009 1009
1010 r1 = read_zsreg(channel, R1); 1010 r1 = read_zsreg(channel, R1);
1011 if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR)) { 1011 if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR)) {
1012 writeb(ERR_RES, &channel->control); 1012 writeb(ERR_RES, &channel->control);
1013 ZSDELAY(); 1013 ZSDELAY();
1014 ZS_WSYNC(channel); 1014 ZS_WSYNC(channel);
1015 } 1015 }
1016 1016
1017 ch = readb(&channel->control); 1017 ch = readb(&channel->control);
1018 ZSDELAY(); 1018 ZSDELAY();
1019 1019
1020 /* This funny hack depends upon BRK_ABRT not interfering 1020 /* This funny hack depends upon BRK_ABRT not interfering
1021 * with the other bits we care about in R1. 1021 * with the other bits we care about in R1.
1022 */ 1022 */
1023 if (ch & BRK_ABRT) 1023 if (ch & BRK_ABRT)
1024 r1 |= BRK_ABRT; 1024 r1 |= BRK_ABRT;
1025 1025
1026 if (!(ch & Rx_CH_AV)) 1026 if (!(ch & Rx_CH_AV))
1027 return NO_POLL_CHAR; 1027 return NO_POLL_CHAR;
1028 1028
1029 ch = readb(&channel->data); 1029 ch = readb(&channel->data);
1030 ZSDELAY(); 1030 ZSDELAY();
1031 1031
1032 ch &= up->parity_mask; 1032 ch &= up->parity_mask;
1033 return ch; 1033 return ch;
1034 } 1034 }
1035 1035
1036 static void sunzilog_put_poll_char(struct uart_port *port, 1036 static void sunzilog_put_poll_char(struct uart_port *port,
1037 unsigned char ch) 1037 unsigned char ch)
1038 { 1038 {
1039 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *)port; 1039 struct uart_sunzilog_port *up = (struct uart_sunzilog_port *)port;
1040 1040
1041 sunzilog_putchar(&up->port, ch); 1041 sunzilog_putchar(&up->port, ch);
1042 } 1042 }
1043 #endif /* CONFIG_CONSOLE_POLL */ 1043 #endif /* CONFIG_CONSOLE_POLL */
1044 1044
1045 static struct uart_ops sunzilog_pops = { 1045 static struct uart_ops sunzilog_pops = {
1046 .tx_empty = sunzilog_tx_empty, 1046 .tx_empty = sunzilog_tx_empty,
1047 .set_mctrl = sunzilog_set_mctrl, 1047 .set_mctrl = sunzilog_set_mctrl,
1048 .get_mctrl = sunzilog_get_mctrl, 1048 .get_mctrl = sunzilog_get_mctrl,
1049 .stop_tx = sunzilog_stop_tx, 1049 .stop_tx = sunzilog_stop_tx,
1050 .start_tx = sunzilog_start_tx, 1050 .start_tx = sunzilog_start_tx,
1051 .stop_rx = sunzilog_stop_rx, 1051 .stop_rx = sunzilog_stop_rx,
1052 .enable_ms = sunzilog_enable_ms, 1052 .enable_ms = sunzilog_enable_ms,
1053 .break_ctl = sunzilog_break_ctl, 1053 .break_ctl = sunzilog_break_ctl,
1054 .startup = sunzilog_startup, 1054 .startup = sunzilog_startup,
1055 .shutdown = sunzilog_shutdown, 1055 .shutdown = sunzilog_shutdown,
1056 .set_termios = sunzilog_set_termios, 1056 .set_termios = sunzilog_set_termios,
1057 .type = sunzilog_type, 1057 .type = sunzilog_type,
1058 .release_port = sunzilog_release_port, 1058 .release_port = sunzilog_release_port,
1059 .request_port = sunzilog_request_port, 1059 .request_port = sunzilog_request_port,
1060 .config_port = sunzilog_config_port, 1060 .config_port = sunzilog_config_port,
1061 .verify_port = sunzilog_verify_port, 1061 .verify_port = sunzilog_verify_port,
1062 #ifdef CONFIG_CONSOLE_POLL 1062 #ifdef CONFIG_CONSOLE_POLL
1063 .poll_get_char = sunzilog_get_poll_char, 1063 .poll_get_char = sunzilog_get_poll_char,
1064 .poll_put_char = sunzilog_put_poll_char, 1064 .poll_put_char = sunzilog_put_poll_char,
1065 #endif 1065 #endif
1066 }; 1066 };
1067 1067
1068 static int uart_chip_count; 1068 static int uart_chip_count;
1069 static struct uart_sunzilog_port *sunzilog_port_table; 1069 static struct uart_sunzilog_port *sunzilog_port_table;
1070 static struct zilog_layout __iomem **sunzilog_chip_regs; 1070 static struct zilog_layout __iomem **sunzilog_chip_regs;
1071 1071
1072 static struct uart_sunzilog_port *sunzilog_irq_chain; 1072 static struct uart_sunzilog_port *sunzilog_irq_chain;
1073 1073
1074 static struct uart_driver sunzilog_reg = { 1074 static struct uart_driver sunzilog_reg = {
1075 .owner = THIS_MODULE, 1075 .owner = THIS_MODULE,
1076 .driver_name = "sunzilog", 1076 .driver_name = "sunzilog",
1077 .dev_name = "ttyS", 1077 .dev_name = "ttyS",
1078 .major = TTY_MAJOR, 1078 .major = TTY_MAJOR,
1079 }; 1079 };
1080 1080
1081 static int __init sunzilog_alloc_tables(int num_sunzilog) 1081 static int __init sunzilog_alloc_tables(int num_sunzilog)
1082 { 1082 {
1083 struct uart_sunzilog_port *up; 1083 struct uart_sunzilog_port *up;
1084 unsigned long size; 1084 unsigned long size;
1085 int num_channels = num_sunzilog * 2; 1085 int num_channels = num_sunzilog * 2;
1086 int i; 1086 int i;
1087 1087
1088 size = num_channels * sizeof(struct uart_sunzilog_port); 1088 size = num_channels * sizeof(struct uart_sunzilog_port);
1089 sunzilog_port_table = kzalloc(size, GFP_KERNEL); 1089 sunzilog_port_table = kzalloc(size, GFP_KERNEL);
1090 if (!sunzilog_port_table) 1090 if (!sunzilog_port_table)
1091 return -ENOMEM; 1091 return -ENOMEM;
1092 1092
1093 for (i = 0; i < num_channels; i++) { 1093 for (i = 0; i < num_channels; i++) {
1094 up = &sunzilog_port_table[i]; 1094 up = &sunzilog_port_table[i];
1095 1095
1096 spin_lock_init(&up->port.lock); 1096 spin_lock_init(&up->port.lock);
1097 1097
1098 if (i == 0) 1098 if (i == 0)
1099 sunzilog_irq_chain = up; 1099 sunzilog_irq_chain = up;
1100 1100
1101 if (i < num_channels - 1) 1101 if (i < num_channels - 1)
1102 up->next = up + 1; 1102 up->next = up + 1;
1103 else 1103 else
1104 up->next = NULL; 1104 up->next = NULL;
1105 } 1105 }
1106 1106
1107 size = num_sunzilog * sizeof(struct zilog_layout __iomem *); 1107 size = num_sunzilog * sizeof(struct zilog_layout __iomem *);
1108 sunzilog_chip_regs = kzalloc(size, GFP_KERNEL); 1108 sunzilog_chip_regs = kzalloc(size, GFP_KERNEL);
1109 if (!sunzilog_chip_regs) { 1109 if (!sunzilog_chip_regs) {
1110 kfree(sunzilog_port_table); 1110 kfree(sunzilog_port_table);
1111 sunzilog_irq_chain = NULL; 1111 sunzilog_irq_chain = NULL;
1112 return -ENOMEM; 1112 return -ENOMEM;
1113 } 1113 }
1114 1114
1115 return 0; 1115 return 0;
1116 } 1116 }
1117 1117
1118 static void sunzilog_free_tables(void) 1118 static void sunzilog_free_tables(void)
1119 { 1119 {
1120 kfree(sunzilog_port_table); 1120 kfree(sunzilog_port_table);
1121 sunzilog_irq_chain = NULL; 1121 sunzilog_irq_chain = NULL;
1122 kfree(sunzilog_chip_regs); 1122 kfree(sunzilog_chip_regs);
1123 } 1123 }
1124 1124
1125 #define ZS_PUT_CHAR_MAX_DELAY 2000 /* 10 ms */ 1125 #define ZS_PUT_CHAR_MAX_DELAY 2000 /* 10 ms */
1126 1126
1127 static void sunzilog_putchar(struct uart_port *port, int ch) 1127 static void sunzilog_putchar(struct uart_port *port, int ch)
1128 { 1128 {
1129 struct zilog_channel __iomem *channel = ZILOG_CHANNEL_FROM_PORT(port); 1129 struct zilog_channel __iomem *channel = ZILOG_CHANNEL_FROM_PORT(port);
1130 int loops = ZS_PUT_CHAR_MAX_DELAY; 1130 int loops = ZS_PUT_CHAR_MAX_DELAY;
1131 1131
1132 /* This is a timed polling loop so do not switch the explicit 1132 /* This is a timed polling loop so do not switch the explicit
1133 * udelay with ZSDELAY as that is a NOP on some platforms. -DaveM 1133 * udelay with ZSDELAY as that is a NOP on some platforms. -DaveM
1134 */ 1134 */
1135 do { 1135 do {
1136 unsigned char val = readb(&channel->control); 1136 unsigned char val = readb(&channel->control);
1137 if (val & Tx_BUF_EMP) { 1137 if (val & Tx_BUF_EMP) {
1138 ZSDELAY(); 1138 ZSDELAY();
1139 break; 1139 break;
1140 } 1140 }
1141 udelay(5); 1141 udelay(5);
1142 } while (--loops); 1142 } while (--loops);
1143 1143
1144 writeb(ch, &channel->data); 1144 writeb(ch, &channel->data);
1145 ZSDELAY(); 1145 ZSDELAY();
1146 ZS_WSYNC(channel); 1146 ZS_WSYNC(channel);
1147 } 1147 }
1148 1148
1149 #ifdef CONFIG_SERIO 1149 #ifdef CONFIG_SERIO
1150 1150
1151 static DEFINE_SPINLOCK(sunzilog_serio_lock); 1151 static DEFINE_SPINLOCK(sunzilog_serio_lock);
1152 1152
1153 static int sunzilog_serio_write(struct serio *serio, unsigned char ch) 1153 static int sunzilog_serio_write(struct serio *serio, unsigned char ch)
1154 { 1154 {
1155 struct uart_sunzilog_port *up = serio->port_data; 1155 struct uart_sunzilog_port *up = serio->port_data;
1156 unsigned long flags; 1156 unsigned long flags;
1157 1157
1158 spin_lock_irqsave(&sunzilog_serio_lock, flags); 1158 spin_lock_irqsave(&sunzilog_serio_lock, flags);
1159 1159
1160 sunzilog_putchar(&up->port, ch); 1160 sunzilog_putchar(&up->port, ch);
1161 1161
1162 spin_unlock_irqrestore(&sunzilog_serio_lock, flags); 1162 spin_unlock_irqrestore(&sunzilog_serio_lock, flags);
1163 1163
1164 return 0; 1164 return 0;
1165 } 1165 }
1166 1166
1167 static int sunzilog_serio_open(struct serio *serio) 1167 static int sunzilog_serio_open(struct serio *serio)
1168 { 1168 {
1169 struct uart_sunzilog_port *up = serio->port_data; 1169 struct uart_sunzilog_port *up = serio->port_data;
1170 unsigned long flags; 1170 unsigned long flags;
1171 int ret; 1171 int ret;
1172 1172
1173 spin_lock_irqsave(&sunzilog_serio_lock, flags); 1173 spin_lock_irqsave(&sunzilog_serio_lock, flags);
1174 if (!up->serio_open) { 1174 if (!up->serio_open) {
1175 up->serio_open = 1; 1175 up->serio_open = 1;
1176 ret = 0; 1176 ret = 0;
1177 } else 1177 } else
1178 ret = -EBUSY; 1178 ret = -EBUSY;
1179 spin_unlock_irqrestore(&sunzilog_serio_lock, flags); 1179 spin_unlock_irqrestore(&sunzilog_serio_lock, flags);
1180 1180
1181 return ret; 1181 return ret;
1182 } 1182 }
1183 1183
1184 static void sunzilog_serio_close(struct serio *serio) 1184 static void sunzilog_serio_close(struct serio *serio)
1185 { 1185 {
1186 struct uart_sunzilog_port *up = serio->port_data; 1186 struct uart_sunzilog_port *up = serio->port_data;
1187 unsigned long flags; 1187 unsigned long flags;
1188 1188
1189 spin_lock_irqsave(&sunzilog_serio_lock, flags); 1189 spin_lock_irqsave(&sunzilog_serio_lock, flags);
1190 up->serio_open = 0; 1190 up->serio_open = 0;
1191 spin_unlock_irqrestore(&sunzilog_serio_lock, flags); 1191 spin_unlock_irqrestore(&sunzilog_serio_lock, flags);
1192 } 1192 }
1193 1193
1194 #endif /* CONFIG_SERIO */ 1194 #endif /* CONFIG_SERIO */
1195 1195
1196 #ifdef CONFIG_SERIAL_SUNZILOG_CONSOLE 1196 #ifdef CONFIG_SERIAL_SUNZILOG_CONSOLE
1197 static void 1197 static void
1198 sunzilog_console_write(struct console *con, const char *s, unsigned int count) 1198 sunzilog_console_write(struct console *con, const char *s, unsigned int count)
1199 { 1199 {
1200 struct uart_sunzilog_port *up = &sunzilog_port_table[con->index]; 1200 struct uart_sunzilog_port *up = &sunzilog_port_table[con->index];
1201 unsigned long flags; 1201 unsigned long flags;
1202 int locked = 1; 1202 int locked = 1;
1203 1203
1204 local_irq_save(flags); 1204 local_irq_save(flags);
1205 if (up->port.sysrq) { 1205 if (up->port.sysrq) {
1206 locked = 0; 1206 locked = 0;
1207 } else if (oops_in_progress) { 1207 } else if (oops_in_progress) {
1208 locked = spin_trylock(&up->port.lock); 1208 locked = spin_trylock(&up->port.lock);
1209 } else 1209 } else
1210 spin_lock(&up->port.lock); 1210 spin_lock(&up->port.lock);
1211 1211
1212 uart_console_write(&up->port, s, count, sunzilog_putchar); 1212 uart_console_write(&up->port, s, count, sunzilog_putchar);
1213 udelay(2); 1213 udelay(2);
1214 1214
1215 if (locked) 1215 if (locked)
1216 spin_unlock(&up->port.lock); 1216 spin_unlock(&up->port.lock);
1217 local_irq_restore(flags); 1217 local_irq_restore(flags);
1218 } 1218 }
1219 1219
1220 static int __init sunzilog_console_setup(struct console *con, char *options) 1220 static int __init sunzilog_console_setup(struct console *con, char *options)
1221 { 1221 {
1222 struct uart_sunzilog_port *up = &sunzilog_port_table[con->index]; 1222 struct uart_sunzilog_port *up = &sunzilog_port_table[con->index];
1223 unsigned long flags; 1223 unsigned long flags;
1224 int baud, brg; 1224 int baud, brg;
1225 1225
1226 if (up->port.type != PORT_SUNZILOG) 1226 if (up->port.type != PORT_SUNZILOG)
1227 return -1; 1227 return -1;
1228 1228
1229 printk(KERN_INFO "Console: ttyS%d (SunZilog zs%d)\n", 1229 printk(KERN_INFO "Console: ttyS%d (SunZilog zs%d)\n",
1230 (sunzilog_reg.minor - 64) + con->index, con->index); 1230 (sunzilog_reg.minor - 64) + con->index, con->index);
1231 1231
1232 /* Get firmware console settings. */ 1232 /* Get firmware console settings. */
1233 sunserial_console_termios(con, up->port.dev->of_node); 1233 sunserial_console_termios(con, up->port.dev->of_node);
1234 1234
1235 /* Firmware console speed is limited to 150-->38400 baud so 1235 /* Firmware console speed is limited to 150-->38400 baud so
1236 * this hackish cflag thing is OK. 1236 * this hackish cflag thing is OK.
1237 */ 1237 */
1238 switch (con->cflag & CBAUD) { 1238 switch (con->cflag & CBAUD) {
1239 case B150: baud = 150; break; 1239 case B150: baud = 150; break;
1240 case B300: baud = 300; break; 1240 case B300: baud = 300; break;
1241 case B600: baud = 600; break; 1241 case B600: baud = 600; break;
1242 case B1200: baud = 1200; break; 1242 case B1200: baud = 1200; break;
1243 case B2400: baud = 2400; break; 1243 case B2400: baud = 2400; break;
1244 case B4800: baud = 4800; break; 1244 case B4800: baud = 4800; break;
1245 default: case B9600: baud = 9600; break; 1245 default: case B9600: baud = 9600; break;
1246 case B19200: baud = 19200; break; 1246 case B19200: baud = 19200; break;
1247 case B38400: baud = 38400; break; 1247 case B38400: baud = 38400; break;
1248 }; 1248 };
1249 1249
1250 brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR); 1250 brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR);
1251 1251
1252 spin_lock_irqsave(&up->port.lock, flags); 1252 spin_lock_irqsave(&up->port.lock, flags);
1253 1253
1254 up->curregs[R15] |= BRKIE; 1254 up->curregs[R15] |= BRKIE;
1255 sunzilog_convert_to_zs(up, con->cflag, 0, brg); 1255 sunzilog_convert_to_zs(up, con->cflag, 0, brg);
1256 1256
1257 sunzilog_set_mctrl(&up->port, TIOCM_DTR | TIOCM_RTS); 1257 sunzilog_set_mctrl(&up->port, TIOCM_DTR | TIOCM_RTS);
1258 __sunzilog_startup(up); 1258 __sunzilog_startup(up);
1259 1259
1260 spin_unlock_irqrestore(&up->port.lock, flags); 1260 spin_unlock_irqrestore(&up->port.lock, flags);
1261 1261
1262 return 0; 1262 return 0;
1263 } 1263 }
1264 1264
1265 static struct console sunzilog_console_ops = { 1265 static struct console sunzilog_console_ops = {
1266 .name = "ttyS", 1266 .name = "ttyS",
1267 .write = sunzilog_console_write, 1267 .write = sunzilog_console_write,
1268 .device = uart_console_device, 1268 .device = uart_console_device,
1269 .setup = sunzilog_console_setup, 1269 .setup = sunzilog_console_setup,
1270 .flags = CON_PRINTBUFFER, 1270 .flags = CON_PRINTBUFFER,
1271 .index = -1, 1271 .index = -1,
1272 .data = &sunzilog_reg, 1272 .data = &sunzilog_reg,
1273 }; 1273 };
1274 1274
1275 static inline struct console *SUNZILOG_CONSOLE(void) 1275 static inline struct console *SUNZILOG_CONSOLE(void)
1276 { 1276 {
1277 return &sunzilog_console_ops; 1277 return &sunzilog_console_ops;
1278 } 1278 }
1279 1279
1280 #else 1280 #else
1281 #define SUNZILOG_CONSOLE() (NULL) 1281 #define SUNZILOG_CONSOLE() (NULL)
1282 #endif 1282 #endif
1283 1283
1284 static void __devinit sunzilog_init_kbdms(struct uart_sunzilog_port *up) 1284 static void __devinit sunzilog_init_kbdms(struct uart_sunzilog_port *up)
1285 { 1285 {
1286 int baud, brg; 1286 int baud, brg;
1287 1287
1288 if (up->flags & SUNZILOG_FLAG_CONS_KEYB) { 1288 if (up->flags & SUNZILOG_FLAG_CONS_KEYB) {
1289 up->cflag = B1200 | CS8 | CLOCAL | CREAD; 1289 up->cflag = B1200 | CS8 | CLOCAL | CREAD;
1290 baud = 1200; 1290 baud = 1200;
1291 } else { 1291 } else {
1292 up->cflag = B4800 | CS8 | CLOCAL | CREAD; 1292 up->cflag = B4800 | CS8 | CLOCAL | CREAD;
1293 baud = 4800; 1293 baud = 4800;
1294 } 1294 }
1295 1295
1296 up->curregs[R15] |= BRKIE; 1296 up->curregs[R15] |= BRKIE;
1297 brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR); 1297 brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR);
1298 sunzilog_convert_to_zs(up, up->cflag, 0, brg); 1298 sunzilog_convert_to_zs(up, up->cflag, 0, brg);
1299 sunzilog_set_mctrl(&up->port, TIOCM_DTR | TIOCM_RTS); 1299 sunzilog_set_mctrl(&up->port, TIOCM_DTR | TIOCM_RTS);
1300 __sunzilog_startup(up); 1300 __sunzilog_startup(up);
1301 } 1301 }
1302 1302
1303 #ifdef CONFIG_SERIO 1303 #ifdef CONFIG_SERIO
1304 static void __devinit sunzilog_register_serio(struct uart_sunzilog_port *up) 1304 static void __devinit sunzilog_register_serio(struct uart_sunzilog_port *up)
1305 { 1305 {
1306 struct serio *serio = &up->serio; 1306 struct serio *serio = &up->serio;
1307 1307
1308 serio->port_data = up; 1308 serio->port_data = up;
1309 1309
1310 serio->id.type = SERIO_RS232; 1310 serio->id.type = SERIO_RS232;
1311 if (up->flags & SUNZILOG_FLAG_CONS_KEYB) { 1311 if (up->flags & SUNZILOG_FLAG_CONS_KEYB) {
1312 serio->id.proto = SERIO_SUNKBD; 1312 serio->id.proto = SERIO_SUNKBD;
1313 strlcpy(serio->name, "zskbd", sizeof(serio->name)); 1313 strlcpy(serio->name, "zskbd", sizeof(serio->name));
1314 } else { 1314 } else {
1315 serio->id.proto = SERIO_SUN; 1315 serio->id.proto = SERIO_SUN;
1316 serio->id.extra = 1; 1316 serio->id.extra = 1;
1317 strlcpy(serio->name, "zsms", sizeof(serio->name)); 1317 strlcpy(serio->name, "zsms", sizeof(serio->name));
1318 } 1318 }
1319 strlcpy(serio->phys, 1319 strlcpy(serio->phys,
1320 ((up->flags & SUNZILOG_FLAG_CONS_KEYB) ? 1320 ((up->flags & SUNZILOG_FLAG_CONS_KEYB) ?
1321 "zs/serio0" : "zs/serio1"), 1321 "zs/serio0" : "zs/serio1"),
1322 sizeof(serio->phys)); 1322 sizeof(serio->phys));
1323 1323
1324 serio->write = sunzilog_serio_write; 1324 serio->write = sunzilog_serio_write;
1325 serio->open = sunzilog_serio_open; 1325 serio->open = sunzilog_serio_open;
1326 serio->close = sunzilog_serio_close; 1326 serio->close = sunzilog_serio_close;
1327 serio->dev.parent = up->port.dev; 1327 serio->dev.parent = up->port.dev;
1328 1328
1329 serio_register_port(serio); 1329 serio_register_port(serio);
1330 } 1330 }
1331 #endif 1331 #endif
1332 1332
1333 static void __devinit sunzilog_init_hw(struct uart_sunzilog_port *up) 1333 static void __devinit sunzilog_init_hw(struct uart_sunzilog_port *up)
1334 { 1334 {
1335 struct zilog_channel __iomem *channel; 1335 struct zilog_channel __iomem *channel;
1336 unsigned long flags; 1336 unsigned long flags;
1337 int baud, brg; 1337 int baud, brg;
1338 1338
1339 channel = ZILOG_CHANNEL_FROM_PORT(&up->port); 1339 channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
1340 1340
1341 spin_lock_irqsave(&up->port.lock, flags); 1341 spin_lock_irqsave(&up->port.lock, flags);
1342 if (ZS_IS_CHANNEL_A(up)) { 1342 if (ZS_IS_CHANNEL_A(up)) {
1343 write_zsreg(channel, R9, FHWRES); 1343 write_zsreg(channel, R9, FHWRES);
1344 ZSDELAY_LONG(); 1344 ZSDELAY_LONG();
1345 (void) read_zsreg(channel, R0); 1345 (void) read_zsreg(channel, R0);
1346 } 1346 }
1347 1347
1348 if (up->flags & (SUNZILOG_FLAG_CONS_KEYB | 1348 if (up->flags & (SUNZILOG_FLAG_CONS_KEYB |
1349 SUNZILOG_FLAG_CONS_MOUSE)) { 1349 SUNZILOG_FLAG_CONS_MOUSE)) {
1350 up->curregs[R1] = EXT_INT_ENAB | INT_ALL_Rx | TxINT_ENAB; 1350 up->curregs[R1] = EXT_INT_ENAB | INT_ALL_Rx | TxINT_ENAB;
1351 up->curregs[R4] = PAR_EVEN | X16CLK | SB1; 1351 up->curregs[R4] = PAR_EVEN | X16CLK | SB1;
1352 up->curregs[R3] = RxENAB | Rx8; 1352 up->curregs[R3] = RxENAB | Rx8;
1353 up->curregs[R5] = TxENAB | Tx8; 1353 up->curregs[R5] = TxENAB | Tx8;
1354 up->curregs[R6] = 0x00; /* SDLC Address */ 1354 up->curregs[R6] = 0x00; /* SDLC Address */
1355 up->curregs[R7] = 0x7E; /* SDLC Flag */ 1355 up->curregs[R7] = 0x7E; /* SDLC Flag */
1356 up->curregs[R9] = NV; 1356 up->curregs[R9] = NV;
1357 up->curregs[R7p] = 0x00; 1357 up->curregs[R7p] = 0x00;
1358 sunzilog_init_kbdms(up); 1358 sunzilog_init_kbdms(up);
1359 /* Only enable interrupts if an ISR handler available */ 1359 /* Only enable interrupts if an ISR handler available */
1360 if (up->flags & SUNZILOG_FLAG_ISR_HANDLER) 1360 if (up->flags & SUNZILOG_FLAG_ISR_HANDLER)
1361 up->curregs[R9] |= MIE; 1361 up->curregs[R9] |= MIE;
1362 write_zsreg(channel, R9, up->curregs[R9]); 1362 write_zsreg(channel, R9, up->curregs[R9]);
1363 } else { 1363 } else {
1364 /* Normal serial TTY. */ 1364 /* Normal serial TTY. */
1365 up->parity_mask = 0xff; 1365 up->parity_mask = 0xff;
1366 up->curregs[R1] = EXT_INT_ENAB | INT_ALL_Rx | TxINT_ENAB; 1366 up->curregs[R1] = EXT_INT_ENAB | INT_ALL_Rx | TxINT_ENAB;
1367 up->curregs[R4] = PAR_EVEN | X16CLK | SB1; 1367 up->curregs[R4] = PAR_EVEN | X16CLK | SB1;
1368 up->curregs[R3] = RxENAB | Rx8; 1368 up->curregs[R3] = RxENAB | Rx8;
1369 up->curregs[R5] = TxENAB | Tx8; 1369 up->curregs[R5] = TxENAB | Tx8;
1370 up->curregs[R6] = 0x00; /* SDLC Address */ 1370 up->curregs[R6] = 0x00; /* SDLC Address */
1371 up->curregs[R7] = 0x7E; /* SDLC Flag */ 1371 up->curregs[R7] = 0x7E; /* SDLC Flag */
1372 up->curregs[R9] = NV; 1372 up->curregs[R9] = NV;
1373 up->curregs[R10] = NRZ; 1373 up->curregs[R10] = NRZ;
1374 up->curregs[R11] = TCBR | RCBR; 1374 up->curregs[R11] = TCBR | RCBR;
1375 baud = 9600; 1375 baud = 9600;
1376 brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR); 1376 brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR);
1377 up->curregs[R12] = (brg & 0xff); 1377 up->curregs[R12] = (brg & 0xff);
1378 up->curregs[R13] = (brg >> 8) & 0xff; 1378 up->curregs[R13] = (brg >> 8) & 0xff;
1379 up->curregs[R14] = BRSRC | BRENAB; 1379 up->curregs[R14] = BRSRC | BRENAB;
1380 up->curregs[R15] = FIFOEN; /* Use FIFO if on ESCC */ 1380 up->curregs[R15] = FIFOEN; /* Use FIFO if on ESCC */
1381 up->curregs[R7p] = TxFIFO_LVL | RxFIFO_LVL; 1381 up->curregs[R7p] = TxFIFO_LVL | RxFIFO_LVL;
1382 if (__load_zsregs(channel, up->curregs)) { 1382 if (__load_zsregs(channel, up->curregs)) {
1383 up->flags |= SUNZILOG_FLAG_ESCC; 1383 up->flags |= SUNZILOG_FLAG_ESCC;
1384 } 1384 }
1385 /* Only enable interrupts if an ISR handler available */ 1385 /* Only enable interrupts if an ISR handler available */
1386 if (up->flags & SUNZILOG_FLAG_ISR_HANDLER) 1386 if (up->flags & SUNZILOG_FLAG_ISR_HANDLER)
1387 up->curregs[R9] |= MIE; 1387 up->curregs[R9] |= MIE;
1388 write_zsreg(channel, R9, up->curregs[R9]); 1388 write_zsreg(channel, R9, up->curregs[R9]);
1389 } 1389 }
1390 1390
1391 spin_unlock_irqrestore(&up->port.lock, flags); 1391 spin_unlock_irqrestore(&up->port.lock, flags);
1392 1392
1393 #ifdef CONFIG_SERIO 1393 #ifdef CONFIG_SERIO
1394 if (up->flags & (SUNZILOG_FLAG_CONS_KEYB | 1394 if (up->flags & (SUNZILOG_FLAG_CONS_KEYB |
1395 SUNZILOG_FLAG_CONS_MOUSE)) 1395 SUNZILOG_FLAG_CONS_MOUSE))
1396 sunzilog_register_serio(up); 1396 sunzilog_register_serio(up);
1397 #endif 1397 #endif
1398 } 1398 }
1399 1399
1400 static int zilog_irq; 1400 static int zilog_irq;
1401 1401
1402 static int __devinit zs_probe(struct platform_device *op) 1402 static int __devinit zs_probe(struct platform_device *op)
1403 { 1403 {
1404 static int kbm_inst, uart_inst; 1404 static int kbm_inst, uart_inst;
1405 int inst; 1405 int inst;
1406 struct uart_sunzilog_port *up; 1406 struct uart_sunzilog_port *up;
1407 struct zilog_layout __iomem *rp; 1407 struct zilog_layout __iomem *rp;
1408 int keyboard_mouse = 0; 1408 int keyboard_mouse = 0;
1409 int err; 1409 int err;
1410 1410
1411 if (of_find_property(op->dev.of_node, "keyboard", NULL)) 1411 if (of_find_property(op->dev.of_node, "keyboard", NULL))
1412 keyboard_mouse = 1; 1412 keyboard_mouse = 1;
1413 1413
1414 /* uarts must come before keyboards/mice */ 1414 /* uarts must come before keyboards/mice */
1415 if (keyboard_mouse) 1415 if (keyboard_mouse)
1416 inst = uart_chip_count + kbm_inst; 1416 inst = uart_chip_count + kbm_inst;
1417 else 1417 else
1418 inst = uart_inst; 1418 inst = uart_inst;
1419 1419
1420 sunzilog_chip_regs[inst] = of_ioremap(&op->resource[0], 0, 1420 sunzilog_chip_regs[inst] = of_ioremap(&op->resource[0], 0,
1421 sizeof(struct zilog_layout), 1421 sizeof(struct zilog_layout),
1422 "zs"); 1422 "zs");
1423 if (!sunzilog_chip_regs[inst]) 1423 if (!sunzilog_chip_regs[inst])
1424 return -ENOMEM; 1424 return -ENOMEM;
1425 1425
1426 rp = sunzilog_chip_regs[inst]; 1426 rp = sunzilog_chip_regs[inst];
1427 1427
1428 if (!zilog_irq) 1428 if (!zilog_irq)
1429 zilog_irq = op->archdata.irqs[0]; 1429 zilog_irq = op->archdata.irqs[0];
1430 1430
1431 up = &sunzilog_port_table[inst * 2]; 1431 up = &sunzilog_port_table[inst * 2];
1432 1432
1433 /* Channel A */ 1433 /* Channel A */
1434 up[0].port.mapbase = op->resource[0].start + 0x00; 1434 up[0].port.mapbase = op->resource[0].start + 0x00;
1435 up[0].port.membase = (void __iomem *) &rp->channelA; 1435 up[0].port.membase = (void __iomem *) &rp->channelA;
1436 up[0].port.iotype = UPIO_MEM; 1436 up[0].port.iotype = UPIO_MEM;
1437 up[0].port.irq = op->archdata.irqs[0]; 1437 up[0].port.irq = op->archdata.irqs[0];
1438 up[0].port.uartclk = ZS_CLOCK; 1438 up[0].port.uartclk = ZS_CLOCK;
1439 up[0].port.fifosize = 1; 1439 up[0].port.fifosize = 1;
1440 up[0].port.ops = &sunzilog_pops; 1440 up[0].port.ops = &sunzilog_pops;
1441 up[0].port.type = PORT_SUNZILOG; 1441 up[0].port.type = PORT_SUNZILOG;
1442 up[0].port.flags = 0; 1442 up[0].port.flags = 0;
1443 up[0].port.line = (inst * 2) + 0; 1443 up[0].port.line = (inst * 2) + 0;
1444 up[0].port.dev = &op->dev; 1444 up[0].port.dev = &op->dev;
1445 up[0].flags |= SUNZILOG_FLAG_IS_CHANNEL_A; 1445 up[0].flags |= SUNZILOG_FLAG_IS_CHANNEL_A;
1446 if (keyboard_mouse) 1446 if (keyboard_mouse)
1447 up[0].flags |= SUNZILOG_FLAG_CONS_KEYB; 1447 up[0].flags |= SUNZILOG_FLAG_CONS_KEYB;
1448 sunzilog_init_hw(&up[0]); 1448 sunzilog_init_hw(&up[0]);
1449 1449
1450 /* Channel B */ 1450 /* Channel B */
1451 up[1].port.mapbase = op->resource[0].start + 0x04; 1451 up[1].port.mapbase = op->resource[0].start + 0x04;
1452 up[1].port.membase = (void __iomem *) &rp->channelB; 1452 up[1].port.membase = (void __iomem *) &rp->channelB;
1453 up[1].port.iotype = UPIO_MEM; 1453 up[1].port.iotype = UPIO_MEM;
1454 up[1].port.irq = op->archdata.irqs[0]; 1454 up[1].port.irq = op->archdata.irqs[0];
1455 up[1].port.uartclk = ZS_CLOCK; 1455 up[1].port.uartclk = ZS_CLOCK;
1456 up[1].port.fifosize = 1; 1456 up[1].port.fifosize = 1;
1457 up[1].port.ops = &sunzilog_pops; 1457 up[1].port.ops = &sunzilog_pops;
1458 up[1].port.type = PORT_SUNZILOG; 1458 up[1].port.type = PORT_SUNZILOG;
1459 up[1].port.flags = 0; 1459 up[1].port.flags = 0;
1460 up[1].port.line = (inst * 2) + 1; 1460 up[1].port.line = (inst * 2) + 1;
1461 up[1].port.dev = &op->dev; 1461 up[1].port.dev = &op->dev;
1462 up[1].flags |= 0; 1462 up[1].flags |= 0;
1463 if (keyboard_mouse) 1463 if (keyboard_mouse)
1464 up[1].flags |= SUNZILOG_FLAG_CONS_MOUSE; 1464 up[1].flags |= SUNZILOG_FLAG_CONS_MOUSE;
1465 sunzilog_init_hw(&up[1]); 1465 sunzilog_init_hw(&up[1]);
1466 1466
1467 if (!keyboard_mouse) { 1467 if (!keyboard_mouse) {
1468 if (sunserial_console_match(SUNZILOG_CONSOLE(), op->dev.of_node, 1468 if (sunserial_console_match(SUNZILOG_CONSOLE(), op->dev.of_node,
1469 &sunzilog_reg, up[0].port.line, 1469 &sunzilog_reg, up[0].port.line,
1470 false)) 1470 false))
1471 up->flags |= SUNZILOG_FLAG_IS_CONS; 1471 up->flags |= SUNZILOG_FLAG_IS_CONS;
1472 err = uart_add_one_port(&sunzilog_reg, &up[0].port); 1472 err = uart_add_one_port(&sunzilog_reg, &up[0].port);
1473 if (err) { 1473 if (err) {
1474 of_iounmap(&op->resource[0], 1474 of_iounmap(&op->resource[0],
1475 rp, sizeof(struct zilog_layout)); 1475 rp, sizeof(struct zilog_layout));
1476 return err; 1476 return err;
1477 } 1477 }
1478 if (sunserial_console_match(SUNZILOG_CONSOLE(), op->dev.of_node, 1478 if (sunserial_console_match(SUNZILOG_CONSOLE(), op->dev.of_node,
1479 &sunzilog_reg, up[1].port.line, 1479 &sunzilog_reg, up[1].port.line,
1480 false)) 1480 false))
1481 up->flags |= SUNZILOG_FLAG_IS_CONS; 1481 up->flags |= SUNZILOG_FLAG_IS_CONS;
1482 err = uart_add_one_port(&sunzilog_reg, &up[1].port); 1482 err = uart_add_one_port(&sunzilog_reg, &up[1].port);
1483 if (err) { 1483 if (err) {
1484 uart_remove_one_port(&sunzilog_reg, &up[0].port); 1484 uart_remove_one_port(&sunzilog_reg, &up[0].port);
1485 of_iounmap(&op->resource[0], 1485 of_iounmap(&op->resource[0],
1486 rp, sizeof(struct zilog_layout)); 1486 rp, sizeof(struct zilog_layout));
1487 return err; 1487 return err;
1488 } 1488 }
1489 uart_inst++; 1489 uart_inst++;
1490 } else { 1490 } else {
1491 printk(KERN_INFO "%s: Keyboard at MMIO 0x%llx (irq = %d) " 1491 printk(KERN_INFO "%s: Keyboard at MMIO 0x%llx (irq = %d) "
1492 "is a %s\n", 1492 "is a %s\n",
1493 dev_name(&op->dev), 1493 dev_name(&op->dev),
1494 (unsigned long long) up[0].port.mapbase, 1494 (unsigned long long) up[0].port.mapbase,
1495 op->archdata.irqs[0], sunzilog_type(&up[0].port)); 1495 op->archdata.irqs[0], sunzilog_type(&up[0].port));
1496 printk(KERN_INFO "%s: Mouse at MMIO 0x%llx (irq = %d) " 1496 printk(KERN_INFO "%s: Mouse at MMIO 0x%llx (irq = %d) "
1497 "is a %s\n", 1497 "is a %s\n",
1498 dev_name(&op->dev), 1498 dev_name(&op->dev),
1499 (unsigned long long) up[1].port.mapbase, 1499 (unsigned long long) up[1].port.mapbase,
1500 op->archdata.irqs[0], sunzilog_type(&up[1].port)); 1500 op->archdata.irqs[0], sunzilog_type(&up[1].port));
1501 kbm_inst++; 1501 kbm_inst++;
1502 } 1502 }
1503 1503
1504 dev_set_drvdata(&op->dev, &up[0]); 1504 dev_set_drvdata(&op->dev, &up[0]);
1505 1505
1506 return 0; 1506 return 0;
1507 } 1507 }
1508 1508
1509 static void __devexit zs_remove_one(struct uart_sunzilog_port *up) 1509 static void __devexit zs_remove_one(struct uart_sunzilog_port *up)
1510 { 1510 {
1511 if (ZS_IS_KEYB(up) || ZS_IS_MOUSE(up)) { 1511 if (ZS_IS_KEYB(up) || ZS_IS_MOUSE(up)) {
1512 #ifdef CONFIG_SERIO 1512 #ifdef CONFIG_SERIO
1513 serio_unregister_port(&up->serio); 1513 serio_unregister_port(&up->serio);
1514 #endif 1514 #endif
1515 } else 1515 } else
1516 uart_remove_one_port(&sunzilog_reg, &up->port); 1516 uart_remove_one_port(&sunzilog_reg, &up->port);
1517 } 1517 }
1518 1518
1519 static int __devexit zs_remove(struct platform_device *op) 1519 static int __devexit zs_remove(struct platform_device *op)
1520 { 1520 {
1521 struct uart_sunzilog_port *up = dev_get_drvdata(&op->dev); 1521 struct uart_sunzilog_port *up = dev_get_drvdata(&op->dev);
1522 struct zilog_layout __iomem *regs; 1522 struct zilog_layout __iomem *regs;
1523 1523
1524 zs_remove_one(&up[0]); 1524 zs_remove_one(&up[0]);
1525 zs_remove_one(&up[1]); 1525 zs_remove_one(&up[1]);
1526 1526
1527 regs = sunzilog_chip_regs[up[0].port.line / 2]; 1527 regs = sunzilog_chip_regs[up[0].port.line / 2];
1528 of_iounmap(&op->resource[0], regs, sizeof(struct zilog_layout)); 1528 of_iounmap(&op->resource[0], regs, sizeof(struct zilog_layout));
1529 1529
1530 dev_set_drvdata(&op->dev, NULL); 1530 dev_set_drvdata(&op->dev, NULL);
1531 1531
1532 return 0; 1532 return 0;
1533 } 1533 }
1534 1534
1535 static const struct of_device_id zs_match[] = { 1535 static const struct of_device_id zs_match[] = {
1536 { 1536 {
1537 .name = "zs", 1537 .name = "zs",
1538 }, 1538 },
1539 {}, 1539 {},
1540 }; 1540 };
1541 MODULE_DEVICE_TABLE(of, zs_match); 1541 MODULE_DEVICE_TABLE(of, zs_match);
1542 1542
1543 static struct platform_driver zs_driver = { 1543 static struct platform_driver zs_driver = {
1544 .driver = { 1544 .driver = {
1545 .name = "zs", 1545 .name = "zs",
1546 .owner = THIS_MODULE, 1546 .owner = THIS_MODULE,
1547 .of_match_table = zs_match, 1547 .of_match_table = zs_match,
1548 }, 1548 },
1549 .probe = zs_probe, 1549 .probe = zs_probe,
1550 .remove = __devexit_p(zs_remove), 1550 .remove = __devexit_p(zs_remove),
1551 }; 1551 };
1552 1552
1553 static int __init sunzilog_init(void) 1553 static int __init sunzilog_init(void)
1554 { 1554 {
1555 struct device_node *dp; 1555 struct device_node *dp;
1556 int err; 1556 int err;
1557 int num_keybms = 0; 1557 int num_keybms = 0;
1558 int num_sunzilog = 0; 1558 int num_sunzilog = 0;
1559 1559
1560 for_each_node_by_name(dp, "zs") { 1560 for_each_node_by_name(dp, "zs") {
1561 num_sunzilog++; 1561 num_sunzilog++;
1562 if (of_find_property(dp, "keyboard", NULL)) 1562 if (of_find_property(dp, "keyboard", NULL))
1563 num_keybms++; 1563 num_keybms++;
1564 } 1564 }
1565 1565
1566 if (num_sunzilog) { 1566 if (num_sunzilog) {
1567 err = sunzilog_alloc_tables(num_sunzilog); 1567 err = sunzilog_alloc_tables(num_sunzilog);
1568 if (err) 1568 if (err)
1569 goto out; 1569 goto out;
1570 1570
1571 uart_chip_count = num_sunzilog - num_keybms; 1571 uart_chip_count = num_sunzilog - num_keybms;
1572 1572
1573 err = sunserial_register_minors(&sunzilog_reg, 1573 err = sunserial_register_minors(&sunzilog_reg,
1574 uart_chip_count * 2); 1574 uart_chip_count * 2);
1575 if (err) 1575 if (err)
1576 goto out_free_tables; 1576 goto out_free_tables;
1577 } 1577 }
1578 1578
1579 err = platform_driver_register(&zs_driver); 1579 err = platform_driver_register(&zs_driver);
1580 if (err) 1580 if (err)
1581 goto out_unregister_uart; 1581 goto out_unregister_uart;
1582 1582
1583 if (!zilog_irq) { 1583 if (!zilog_irq) {
1584 struct uart_sunzilog_port *up = sunzilog_irq_chain; 1584 struct uart_sunzilog_port *up = sunzilog_irq_chain;
1585 err = request_irq(zilog_irq, sunzilog_interrupt, IRQF_SHARED, 1585 err = request_irq(zilog_irq, sunzilog_interrupt, IRQF_SHARED,
1586 "zs", sunzilog_irq_chain); 1586 "zs", sunzilog_irq_chain);
1587 if (err) 1587 if (err)
1588 goto out_unregister_driver; 1588 goto out_unregister_driver;
1589 1589
1590 /* Enable Interrupts */ 1590 /* Enable Interrupts */
1591 while (up) { 1591 while (up) {
1592 struct zilog_channel __iomem *channel; 1592 struct zilog_channel __iomem *channel;
1593 1593
1594 /* printk (KERN_INFO "Enable IRQ for ZILOG Hardware %p\n", up); */ 1594 /* printk (KERN_INFO "Enable IRQ for ZILOG Hardware %p\n", up); */
1595 channel = ZILOG_CHANNEL_FROM_PORT(&up->port); 1595 channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
1596 up->flags |= SUNZILOG_FLAG_ISR_HANDLER; 1596 up->flags |= SUNZILOG_FLAG_ISR_HANDLER;
1597 up->curregs[R9] |= MIE; 1597 up->curregs[R9] |= MIE;
1598 write_zsreg(channel, R9, up->curregs[R9]); 1598 write_zsreg(channel, R9, up->curregs[R9]);
1599 up = up->next; 1599 up = up->next;
1600 } 1600 }
1601 } 1601 }
1602 1602
1603 out: 1603 out:
1604 return err; 1604 return err;
1605 1605
1606 out_unregister_driver: 1606 out_unregister_driver:
1607 platform_driver_unregister(&zs_driver); 1607 platform_driver_unregister(&zs_driver);
1608 1608
1609 out_unregister_uart: 1609 out_unregister_uart:
1610 if (num_sunzilog) { 1610 if (num_sunzilog) {
1611 sunserial_unregister_minors(&sunzilog_reg, num_sunzilog); 1611 sunserial_unregister_minors(&sunzilog_reg, num_sunzilog);
1612 sunzilog_reg.cons = NULL; 1612 sunzilog_reg.cons = NULL;
1613 } 1613 }
1614 1614
1615 out_free_tables: 1615 out_free_tables:
1616 sunzilog_free_tables(); 1616 sunzilog_free_tables();
1617 goto out; 1617 goto out;
1618 } 1618 }
1619 1619
1620 static void __exit sunzilog_exit(void) 1620 static void __exit sunzilog_exit(void)
1621 { 1621 {
1622 platform_driver_unregister(&zs_driver); 1622 platform_driver_unregister(&zs_driver);
1623 1623
1624 if (!zilog_irq) { 1624 if (!zilog_irq) {
1625 struct uart_sunzilog_port *up = sunzilog_irq_chain; 1625 struct uart_sunzilog_port *up = sunzilog_irq_chain;
1626 1626
1627 /* Disable Interrupts */ 1627 /* Disable Interrupts */
1628 while (up) { 1628 while (up) {
1629 struct zilog_channel __iomem *channel; 1629 struct zilog_channel __iomem *channel;
1630 1630
1631 /* printk (KERN_INFO "Disable IRQ for ZILOG Hardware %p\n", up); */ 1631 /* printk (KERN_INFO "Disable IRQ for ZILOG Hardware %p\n", up); */
1632 channel = ZILOG_CHANNEL_FROM_PORT(&up->port); 1632 channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
1633 up->flags &= ~SUNZILOG_FLAG_ISR_HANDLER; 1633 up->flags &= ~SUNZILOG_FLAG_ISR_HANDLER;
1634 up->curregs[R9] &= ~MIE; 1634 up->curregs[R9] &= ~MIE;
1635 write_zsreg(channel, R9, up->curregs[R9]); 1635 write_zsreg(channel, R9, up->curregs[R9]);
1636 up = up->next; 1636 up = up->next;
1637 } 1637 }
1638 1638
1639 free_irq(zilog_irq, sunzilog_irq_chain); 1639 free_irq(zilog_irq, sunzilog_irq_chain);
1640 zilog_irq = 0; 1640 zilog_irq = 0;
1641 } 1641 }
1642 1642
1643 if (sunzilog_reg.nr) { 1643 if (sunzilog_reg.nr) {
1644 sunserial_unregister_minors(&sunzilog_reg, sunzilog_reg.nr); 1644 sunserial_unregister_minors(&sunzilog_reg, sunzilog_reg.nr);
1645 sunzilog_free_tables(); 1645 sunzilog_free_tables();
1646 } 1646 }
1647 } 1647 }
1648 1648
1649 module_init(sunzilog_init); 1649 module_init(sunzilog_init);
1650 module_exit(sunzilog_exit); 1650 module_exit(sunzilog_exit);
1651 1651
1652 MODULE_AUTHOR("David S. Miller"); 1652 MODULE_AUTHOR("David S. Miller");
1653 MODULE_DESCRIPTION("Sun Zilog serial port driver"); 1653 MODULE_DESCRIPTION("Sun Zilog serial port driver");
1654 MODULE_VERSION("2.0"); 1654 MODULE_VERSION("2.0");
1655 MODULE_LICENSE("GPL"); 1655 MODULE_LICENSE("GPL");
include/linux/sunserialcore.h
File was created 1 /* sunserialcore.h
2 *
3 * Generic SUN serial/kbd/ms layer. Based entirely
4 * upon drivers/sbus/char/sunserial.h which is:
5 *
6 * Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be)
7 *
8 * Port to new UART layer is:
9 *
10 * Copyright (C) 2002 David S. Miller (davem@redhat.com)
11 */
12
13 #ifndef _SERIAL_SUN_H
14 #define _SERIAL_SUN_H
15
16 /* Serial keyboard defines for L1-A processing... */
17 #define SUNKBD_RESET 0xff
18 #define SUNKBD_L1 0x01
19 #define SUNKBD_UP 0x80
20 #define SUNKBD_A 0x4d
21
22 extern unsigned int suncore_mouse_baud_cflag_next(unsigned int, int *);
23 extern int suncore_mouse_baud_detection(unsigned char, int);
24
25 extern int sunserial_register_minors(struct uart_driver *, int);
26 extern void sunserial_unregister_minors(struct uart_driver *, int);
27
28 extern int sunserial_console_match(struct console *, struct device_node *,
29 struct uart_driver *, int, bool);
30 extern void sunserial_console_termios(struct console *,
31 struct device_node *);
32
33 #endif /* !(_SERIAL_SUN_H) */
34