]>
Commit | Line | Data |
---|---|---|
eec15edb ZR |
1 | /* |
2 | * ACPI support for PNP bus type | |
3 | * | |
4 | * Copyright (C) 2014, Intel Corporation | |
5 | * Authors: Zhang Rui <rui.zhang@intel.com> | |
6 | * Rafael J. Wysocki <rafael.j.wysocki@intel.com> | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify | |
9 | * it under the terms of the GNU General Public License version 2 as | |
10 | * published by the Free Software Foundation. | |
11 | */ | |
12 | ||
13 | #include <linux/acpi.h> | |
14 | #include <linux/module.h> | |
a5f95da9 | 15 | #include <linux/ctype.h> |
eec15edb ZR |
16 | |
17 | static const struct acpi_device_id acpi_pnp_device_ids[] = { | |
18 | /* pata_isapnp */ | |
19 | {"PNP0600"}, /* Generic ESDI/IDE/ATA compatible hard disk controller */ | |
20 | /* floppy */ | |
21 | {"PNP0700"}, | |
eec15edb ZR |
22 | /* tpm_inf_pnp */ |
23 | {"IFX0101"}, /* Infineon TPMs */ | |
24 | {"IFX0102"}, /* Infineon TPMs */ | |
25 | /*tpm_tis */ | |
26 | {"PNP0C31"}, /* TPM */ | |
27 | {"ATM1200"}, /* Atmel */ | |
28 | {"IFX0102"}, /* Infineon */ | |
29 | {"BCM0101"}, /* Broadcom */ | |
30 | {"BCM0102"}, /* Broadcom */ | |
31 | {"NSC1200"}, /* National */ | |
32 | {"ICO0102"}, /* Intel */ | |
33 | /* ide */ | |
34 | {"PNP0600"}, /* Generic ESDI/IDE/ATA compatible hard disk controller */ | |
35 | /* ns558 */ | |
eec15edb ZR |
36 | {"ASB16fd"}, /* AdLib NSC16 */ |
37 | {"AZT3001"}, /* AZT1008 */ | |
38 | {"CDC0001"}, /* Opl3-SAx */ | |
39 | {"CSC0001"}, /* CS4232 */ | |
40 | {"CSC000f"}, /* CS4236 */ | |
41 | {"CSC0101"}, /* CS4327 */ | |
42 | {"CTL7001"}, /* SB16 */ | |
43 | {"CTL7002"}, /* AWE64 */ | |
44 | {"CTL7005"}, /* Vibra16 */ | |
45 | {"ENS2020"}, /* SoundscapeVIVO */ | |
46 | {"ESS0001"}, /* ES1869 */ | |
47 | {"ESS0005"}, /* ES1878 */ | |
48 | {"ESS6880"}, /* ES688 */ | |
49 | {"IBM0012"}, /* CS4232 */ | |
50 | {"OPT0001"}, /* OPTi Audio16 */ | |
51 | {"YMH0006"}, /* Opl3-SA */ | |
52 | {"YMH0022"}, /* Opl3-SAx */ | |
53 | {"PNPb02f"}, /* Generic */ | |
54 | /* i8042 kbd */ | |
55 | {"PNP0300"}, | |
56 | {"PNP0301"}, | |
57 | {"PNP0302"}, | |
58 | {"PNP0303"}, | |
59 | {"PNP0304"}, | |
60 | {"PNP0305"}, | |
61 | {"PNP0306"}, | |
62 | {"PNP0309"}, | |
63 | {"PNP030a"}, | |
64 | {"PNP030b"}, | |
65 | {"PNP0320"}, | |
66 | {"PNP0343"}, | |
67 | {"PNP0344"}, | |
68 | {"PNP0345"}, | |
69 | {"CPQA0D7"}, | |
70 | /* i8042 aux */ | |
71 | {"AUI0200"}, | |
72 | {"FJC6000"}, | |
73 | {"FJC6001"}, | |
74 | {"PNP0f03"}, | |
75 | {"PNP0f0b"}, | |
76 | {"PNP0f0e"}, | |
77 | {"PNP0f12"}, | |
78 | {"PNP0f13"}, | |
79 | {"PNP0f19"}, | |
80 | {"PNP0f1c"}, | |
81 | {"SYN0801"}, | |
82 | /* fcpnp */ | |
83 | {"AVM0900"}, | |
84 | /* radio-cadet */ | |
85 | {"MSM0c24"}, /* ADS Cadet AM/FM Radio Card */ | |
86 | /* radio-gemtek */ | |
87 | {"ADS7183"}, /* AOpen FX-3D/Pro Radio */ | |
88 | /* radio-sf16fmr2 */ | |
89 | {"MFRad13"}, /* tuner subdevice of SF16-FMD2 */ | |
90 | /* ene_ir */ | |
91 | {"ENE0100"}, | |
92 | {"ENE0200"}, | |
93 | {"ENE0201"}, | |
94 | {"ENE0202"}, | |
95 | /* fintek-cir */ | |
96 | {"FIT0002"}, /* CIR */ | |
97 | /* ite-cir */ | |
98 | {"ITE8704"}, /* Default model */ | |
99 | {"ITE8713"}, /* CIR found in EEEBox 1501U */ | |
100 | {"ITE8708"}, /* Bridged IT8512 */ | |
101 | {"ITE8709"}, /* SRAM-Bridged IT8512 */ | |
102 | /* nuvoton-cir */ | |
103 | {"WEC0530"}, /* CIR */ | |
104 | {"NTN0530"}, /* CIR for new chip's pnp id */ | |
105 | /* Winbond CIR */ | |
106 | {"WEC1022"}, | |
107 | /* wbsd */ | |
108 | {"WEC0517"}, | |
109 | {"WEC0518"}, | |
110 | /* Winbond CIR */ | |
111 | {"TCM5090"}, /* 3Com Etherlink III (TP) */ | |
112 | {"TCM5091"}, /* 3Com Etherlink III */ | |
113 | {"TCM5094"}, /* 3Com Etherlink III (combo) */ | |
114 | {"TCM5095"}, /* 3Com Etherlink III (TPO) */ | |
115 | {"TCM5098"}, /* 3Com Etherlink III (TPC) */ | |
116 | {"PNP80f7"}, /* 3Com Etherlink III compatible */ | |
117 | {"PNP80f8"}, /* 3Com Etherlink III compatible */ | |
118 | /* nsc-ircc */ | |
119 | {"NSC6001"}, | |
120 | {"HWPC224"}, | |
121 | {"IBM0071"}, | |
122 | /* smsc-ircc2 */ | |
123 | {"SMCf010"}, | |
124 | /* sb1000 */ | |
125 | {"GIC1000"}, | |
126 | /* parport_pc */ | |
127 | {"PNP0400"}, /* Standard LPT Printer Port */ | |
128 | {"PNP0401"}, /* ECP Printer Port */ | |
129 | /* apple-gmux */ | |
130 | {"APP000B"}, | |
eec15edb ZR |
131 | /* system */ |
132 | {"PNP0c02"}, /* General ID for reserving resources */ | |
133 | {"PNP0c01"}, /* memory controller */ | |
134 | /* rtc_cmos */ | |
135 | {"PNP0b00"}, | |
136 | {"PNP0b01"}, | |
137 | {"PNP0b02"}, | |
138 | /* c6xdigio */ | |
139 | {"PNP0400"}, /* Standard LPT Printer Port */ | |
140 | {"PNP0401"}, /* ECP Printer Port */ | |
141 | /* ni_atmio.c */ | |
142 | {"NIC1900"}, | |
143 | {"NIC2400"}, | |
144 | {"NIC2500"}, | |
145 | {"NIC2600"}, | |
146 | {"NIC2700"}, | |
147 | /* serial */ | |
148 | {"AAC000F"}, /* Archtek America Corp. Archtek SmartLink Modem 3334BT Plug & Play */ | |
149 | {"ADC0001"}, /* Anchor Datacomm BV. SXPro 144 External Data Fax Modem Plug & Play */ | |
150 | {"ADC0002"}, /* SXPro 288 External Data Fax Modem Plug & Play */ | |
151 | {"AEI0250"}, /* PROLiNK 1456VH ISA PnP K56flex Fax Modem */ | |
152 | {"AEI1240"}, /* Actiontec ISA PNP 56K X2 Fax Modem */ | |
153 | {"AKY1021"}, /* Rockwell 56K ACF II Fax+Data+Voice Modem */ | |
1d700277 | 154 | {"ALI5123"}, /* ALi Fast Infrared Controller */ |
eec15edb ZR |
155 | {"AZT4001"}, /* AZT3005 PnP SOUND DEVICE */ |
156 | {"BDP3336"}, /* Best Data Products Inc. Smart One 336F PnP Modem */ | |
157 | {"BRI0A49"}, /* Boca Complete Ofc Communicator 14.4 Data-FAX */ | |
158 | {"BRI1400"}, /* Boca Research 33,600 ACF Modem */ | |
159 | {"BRI3400"}, /* Boca 33.6 Kbps Internal FD34FSVD */ | |
160 | {"BRI0A49"}, /* Boca 33.6 Kbps Internal FD34FSVD */ | |
161 | {"BDP3336"}, /* Best Data Products Inc. Smart One 336F PnP Modem */ | |
162 | {"CPI4050"}, /* Computer Peripherals Inc. EuroViVa CommCenter-33.6 SP PnP */ | |
163 | {"CTL3001"}, /* Creative Labs Phone Blaster 28.8 DSVD PnP Voice */ | |
164 | {"CTL3011"}, /* Creative Labs Modem Blaster 28.8 DSVD PnP Voice */ | |
165 | {"DAV0336"}, /* Davicom ISA 33.6K Modem */ | |
166 | {"DMB1032"}, /* Creative Modem Blaster Flash56 DI5601-1 */ | |
167 | {"DMB2001"}, /* Creative Modem Blaster V.90 DI5660 */ | |
168 | {"ETT0002"}, /* E-Tech CyberBULLET PC56RVP */ | |
169 | {"FUJ0202"}, /* Fujitsu 33600 PnP-I2 R Plug & Play */ | |
170 | {"FUJ0205"}, /* Fujitsu FMV-FX431 Plug & Play */ | |
171 | {"FUJ0206"}, /* Fujitsu 33600 PnP-I4 R Plug & Play */ | |
172 | {"FUJ0209"}, /* Fujitsu Fax Voice 33600 PNP-I5 R Plug & Play */ | |
173 | {"GVC000F"}, /* Archtek SmartLink Modem 3334BT Plug & Play */ | |
174 | {"GVC0303"}, /* Archtek SmartLink Modem 3334BRV 33.6K Data Fax Voice */ | |
175 | {"HAY0001"}, /* Hayes Optima 288 V.34-V.FC + FAX + Voice Plug & Play */ | |
176 | {"HAY000C"}, /* Hayes Optima 336 V.34 + FAX + Voice PnP */ | |
177 | {"HAY000D"}, /* Hayes Optima 336B V.34 + FAX + Voice PnP */ | |
178 | {"HAY5670"}, /* Hayes Accura 56K Ext Fax Modem PnP */ | |
179 | {"HAY5674"}, /* Hayes Accura 56K Ext Fax Modem PnP */ | |
180 | {"HAY5675"}, /* Hayes Accura 56K Fax Modem PnP */ | |
181 | {"HAYF000"}, /* Hayes 288, V.34 + FAX */ | |
182 | {"HAYF001"}, /* Hayes Optima 288 V.34 + FAX + Voice, Plug & Play */ | |
183 | {"IBM0033"}, /* IBM Thinkpad 701 Internal Modem Voice */ | |
184 | {"PNP4972"}, /* Intermec CV60 touchscreen port */ | |
185 | {"IXDC801"}, /* Intertex 28k8 33k6 Voice EXT PnP */ | |
186 | {"IXDC901"}, /* Intertex 33k6 56k Voice EXT PnP */ | |
187 | {"IXDD801"}, /* Intertex 28k8 33k6 Voice SP EXT PnP */ | |
188 | {"IXDD901"}, /* Intertex 33k6 56k Voice SP EXT PnP */ | |
189 | {"IXDF401"}, /* Intertex 28k8 33k6 Voice SP INT PnP */ | |
190 | {"IXDF801"}, /* Intertex 28k8 33k6 Voice SP EXT PnP */ | |
191 | {"IXDF901"}, /* Intertex 33k6 56k Voice SP EXT PnP */ | |
192 | {"KOR4522"}, /* KORTEX 28800 Externe PnP */ | |
193 | {"KORF661"}, /* KXPro 33.6 Vocal ASVD PnP */ | |
194 | {"LAS4040"}, /* LASAT Internet 33600 PnP */ | |
195 | {"LAS4540"}, /* Lasat Safire 560 PnP */ | |
196 | {"LAS5440"}, /* Lasat Safire 336 PnP */ | |
197 | {"MNP0281"}, /* Microcom TravelPorte FAST V.34 Plug & Play */ | |
198 | {"MNP0336"}, /* Microcom DeskPorte V.34 FAST or FAST+ Plug & Play */ | |
199 | {"MNP0339"}, /* Microcom DeskPorte FAST EP 28.8 Plug & Play */ | |
200 | {"MNP0342"}, /* Microcom DeskPorte 28.8P Plug & Play */ | |
201 | {"MNP0500"}, /* Microcom DeskPorte FAST ES 28.8 Plug & Play */ | |
202 | {"MNP0501"}, /* Microcom DeskPorte FAST ES 28.8 Plug & Play */ | |
203 | {"MNP0502"}, /* Microcom DeskPorte 28.8S Internal Plug & Play */ | |
204 | {"MOT1105"}, /* Motorola BitSURFR Plug & Play */ | |
205 | {"MOT1111"}, /* Motorola TA210 Plug & Play */ | |
206 | {"MOT1114"}, /* Motorola HMTA 200 (ISDN) Plug & Play */ | |
207 | {"MOT1115"}, /* Motorola BitSURFR Plug & Play */ | |
208 | {"MOT1190"}, /* Motorola Lifestyle 28.8 Internal */ | |
209 | {"MOT1501"}, /* Motorola V.3400 Plug & Play */ | |
210 | {"MOT1502"}, /* Motorola Lifestyle 28.8 V.34 Plug & Play */ | |
211 | {"MOT1505"}, /* Motorola Power 28.8 V.34 Plug & Play */ | |
212 | {"MOT1509"}, /* Motorola ModemSURFR External 28.8 Plug & Play */ | |
213 | {"MOT150A"}, /* Motorola Premier 33.6 Desktop Plug & Play */ | |
214 | {"MOT150F"}, /* Motorola VoiceSURFR 56K External PnP */ | |
215 | {"MOT1510"}, /* Motorola ModemSURFR 56K External PnP */ | |
216 | {"MOT1550"}, /* Motorola ModemSURFR 56K Internal PnP */ | |
217 | {"MOT1560"}, /* Motorola ModemSURFR Internal 28.8 Plug & Play */ | |
218 | {"MOT1580"}, /* Motorola Premier 33.6 Internal Plug & Play */ | |
219 | {"MOT15B0"}, /* Motorola OnlineSURFR 28.8 Internal Plug & Play */ | |
220 | {"MOT15F0"}, /* Motorola VoiceSURFR 56K Internal PnP */ | |
221 | {"MVX00A1"}, /* Deskline K56 Phone System PnP */ | |
222 | {"MVX00F2"}, /* PC Rider K56 Phone System PnP */ | |
223 | {"nEC8241"}, /* NEC 98NOTE SPEAKER PHONE FAX MODEM(33600bps) */ | |
224 | {"PMC2430"}, /* Pace 56 Voice Internal Plug & Play Modem */ | |
225 | {"PNP0500"}, /* Generic standard PC COM port */ | |
226 | {"PNP0501"}, /* Generic 16550A-compatible COM port */ | |
227 | {"PNPC000"}, /* Compaq 14400 Modem */ | |
228 | {"PNPC001"}, /* Compaq 2400/9600 Modem */ | |
229 | {"PNPC031"}, /* Dial-Up Networking Serial Cable between 2 PCs */ | |
230 | {"PNPC032"}, /* Dial-Up Networking Parallel Cable between 2 PCs */ | |
231 | {"PNPC100"}, /* Standard 9600 bps Modem */ | |
232 | {"PNPC101"}, /* Standard 14400 bps Modem */ | |
233 | {"PNPC102"}, /* Standard 28800 bps Modem */ | |
234 | {"PNPC103"}, /* Standard Modem */ | |
235 | {"PNPC104"}, /* Standard 9600 bps Modem */ | |
236 | {"PNPC105"}, /* Standard 14400 bps Modem */ | |
237 | {"PNPC106"}, /* Standard 28800 bps Modem */ | |
238 | {"PNPC107"}, /* Standard Modem */ | |
239 | {"PNPC108"}, /* Standard 9600 bps Modem */ | |
240 | {"PNPC109"}, /* Standard 14400 bps Modem */ | |
241 | {"PNPC10A"}, /* Standard 28800 bps Modem */ | |
242 | {"PNPC10B"}, /* Standard Modem */ | |
243 | {"PNPC10C"}, /* Standard 9600 bps Modem */ | |
244 | {"PNPC10D"}, /* Standard 14400 bps Modem */ | |
245 | {"PNPC10E"}, /* Standard 28800 bps Modem */ | |
246 | {"PNPC10F"}, /* Standard Modem */ | |
247 | {"PNP2000"}, /* Standard PCMCIA Card Modem */ | |
248 | {"ROK0030"}, /* Rockwell 33.6 DPF Internal PnP, Modular Technology 33.6 Internal PnP */ | |
249 | {"ROK0100"}, /* KORTEX 14400 Externe PnP */ | |
250 | {"ROK4120"}, /* Rockwell 28.8 */ | |
251 | {"ROK4920"}, /* Viking 28.8 INTERNAL Fax+Data+Voice PnP */ | |
252 | {"RSS00A0"}, /* Rockwell 33.6 DPF External PnP, BT Prologue 33.6 External PnP, Modular Technology 33.6 External PnP */ | |
253 | {"RSS0262"}, /* Viking 56K FAX INT */ | |
254 | {"RSS0250"}, /* K56 par,VV,Voice,Speakphone,AudioSpan,PnP */ | |
255 | {"SUP1310"}, /* SupraExpress 28.8 Data/Fax PnP modem */ | |
256 | {"SUP1381"}, /* SupraExpress 336i PnP Voice Modem */ | |
257 | {"SUP1421"}, /* SupraExpress 33.6 Data/Fax PnP modem */ | |
258 | {"SUP1590"}, /* SupraExpress 33.6 Data/Fax PnP modem */ | |
259 | {"SUP1620"}, /* SupraExpress 336i Sp ASVD */ | |
260 | {"SUP1760"}, /* SupraExpress 33.6 Data/Fax PnP modem */ | |
261 | {"SUP2171"}, /* SupraExpress 56i Sp Intl */ | |
262 | {"TEX0011"}, /* Phoebe Micro 33.6 Data Fax 1433VQH Plug & Play */ | |
263 | {"UAC000F"}, /* Archtek SmartLink Modem 3334BT Plug & Play */ | |
264 | {"USR0000"}, /* 3Com Corp. Gateway Telepath IIvi 33.6 */ | |
265 | {"USR0002"}, /* U.S. Robotics Sporster 33.6K Fax INT PnP */ | |
266 | {"USR0004"}, /* Sportster Vi 14.4 PnP FAX Voicemail */ | |
267 | {"USR0006"}, /* U.S. Robotics 33.6K Voice INT PnP */ | |
268 | {"USR0007"}, /* U.S. Robotics 33.6K Voice EXT PnP */ | |
269 | {"USR0009"}, /* U.S. Robotics Courier V.Everything INT PnP */ | |
270 | {"USR2002"}, /* U.S. Robotics 33.6K Voice INT PnP */ | |
271 | {"USR2070"}, /* U.S. Robotics 56K Voice INT PnP */ | |
272 | {"USR2080"}, /* U.S. Robotics 56K Voice EXT PnP */ | |
273 | {"USR3031"}, /* U.S. Robotics 56K FAX INT */ | |
274 | {"USR3050"}, /* U.S. Robotics 56K FAX INT */ | |
275 | {"USR3070"}, /* U.S. Robotics 56K Voice INT PnP */ | |
276 | {"USR3080"}, /* U.S. Robotics 56K Voice EXT PnP */ | |
277 | {"USR3090"}, /* U.S. Robotics 56K Voice INT PnP */ | |
278 | {"USR9100"}, /* U.S. Robotics 56K Message */ | |
279 | {"USR9160"}, /* U.S. Robotics 56K FAX EXT PnP */ | |
280 | {"USR9170"}, /* U.S. Robotics 56K FAX INT PnP */ | |
281 | {"USR9180"}, /* U.S. Robotics 56K Voice EXT PnP */ | |
282 | {"USR9190"}, /* U.S. Robotics 56K Voice INT PnP */ | |
283 | {"WACFXXX"}, /* Wacom tablets */ | |
284 | {"FPI2002"}, /* Compaq touchscreen */ | |
285 | {"FUJ02B2"}, /* Fujitsu Stylistic touchscreens */ | |
286 | {"FUJ02B3"}, | |
287 | {"FUJ02B4"}, /* Fujitsu Stylistic LT touchscreens */ | |
288 | {"FUJ02B6"}, /* Passive Fujitsu Stylistic touchscreens */ | |
289 | {"FUJ02B7"}, | |
290 | {"FUJ02B8"}, | |
291 | {"FUJ02B9"}, | |
292 | {"FUJ02BC"}, | |
293 | {"FUJ02E5"}, /* Fujitsu Wacom Tablet PC device */ | |
294 | {"FUJ02E6"}, /* Fujitsu P-series tablet PC device */ | |
295 | {"FUJ02E7"}, /* Fujitsu Wacom 2FGT Tablet PC device */ | |
296 | {"FUJ02E9"}, /* Fujitsu Wacom 1FGT Tablet PC device */ | |
297 | {"LTS0001"}, /* LG C1 EXPRESS DUAL (C1-PB11A3) touch screen (actually a FUJ02E6 in disguise) */ | |
298 | {"WCI0003"}, /* Rockwell's (PORALiNK) 33600 INT PNP */ | |
299 | {"WEC1022"}, /* Winbond CIR port, should not be probed. We should keep track of it to prevent the legacy serial driver from probing it */ | |
eec15edb ZR |
300 | /* scl200wdt */ |
301 | {"NSC0800"}, /* National Semiconductor PC87307/PC97307 watchdog component */ | |
302 | /* mpu401 */ | |
303 | {"PNPb006"}, | |
304 | /* cs423x-pnpbios */ | |
305 | {"CSC0100"}, | |
622532bb WS |
306 | {"CSC0103"}, |
307 | {"CSC0110"}, | |
eec15edb ZR |
308 | {"CSC0000"}, |
309 | {"GIM0100"}, /* Guillemot Turtlebeach something appears to be cs4232 compatible */ | |
310 | /* es18xx-pnpbios */ | |
311 | {"ESS1869"}, | |
312 | {"ESS1879"}, | |
313 | /* snd-opl3sa2-pnpbios */ | |
314 | {"YMH0021"}, | |
315 | {"NMX2210"}, /* Gateway Solo 2500 */ | |
316 | {""}, | |
317 | }; | |
318 | ||
636c19d3 | 319 | static bool matching_id(const char *idstr, const char *list_id) |
eec15edb ZR |
320 | { |
321 | int i; | |
322 | ||
323 | if (memcmp(idstr, list_id, 3)) | |
324 | return false; | |
325 | ||
326 | for (i = 3; i < 7; i++) { | |
327 | char c = toupper(idstr[i]); | |
328 | ||
a5f95da9 | 329 | if (!isxdigit(c) |
eec15edb ZR |
330 | || (list_id[i] != 'X' && c != toupper(list_id[i]))) |
331 | return false; | |
332 | } | |
333 | return true; | |
334 | } | |
335 | ||
636c19d3 | 336 | static bool acpi_pnp_match(const char *idstr, const struct acpi_device_id **matchid) |
eec15edb ZR |
337 | { |
338 | const struct acpi_device_id *devid; | |
339 | ||
340 | for (devid = acpi_pnp_device_ids; devid->id[0]; devid++) | |
341 | if (matching_id(idstr, (char *)devid->id)) { | |
342 | if (matchid) | |
343 | *matchid = devid; | |
344 | ||
345 | return true; | |
346 | } | |
347 | ||
348 | return false; | |
349 | } | |
350 | ||
351 | static int acpi_pnp_attach(struct acpi_device *adev, | |
352 | const struct acpi_device_id *id) | |
353 | { | |
354 | return 1; | |
355 | } | |
356 | ||
357 | static struct acpi_scan_handler acpi_pnp_handler = { | |
358 | .ids = acpi_pnp_device_ids, | |
359 | .match = acpi_pnp_match, | |
360 | .attach = acpi_pnp_attach, | |
361 | }; | |
362 | ||
363 | /* | |
364 | * For CMOS RTC devices, the PNP ACPI scan handler does not work, because | |
365 | * there is a CMOS RTC ACPI scan handler installed already, so we need to | |
366 | * check those devices and enumerate them to the PNP bus directly. | |
367 | */ | |
368 | static int is_cmos_rtc_device(struct acpi_device *adev) | |
369 | { | |
38a234b9 | 370 | static const struct acpi_device_id ids[] = { |
eec15edb ZR |
371 | { "PNP0B00" }, |
372 | { "PNP0B01" }, | |
373 | { "PNP0B02" }, | |
374 | {""}, | |
375 | }; | |
376 | return !acpi_match_device_ids(adev, ids); | |
377 | } | |
378 | ||
379 | bool acpi_is_pnp_device(struct acpi_device *adev) | |
380 | { | |
381 | return adev->handler == &acpi_pnp_handler || is_cmos_rtc_device(adev); | |
382 | } | |
383 | EXPORT_SYMBOL_GPL(acpi_is_pnp_device); | |
384 | ||
385 | void __init acpi_pnp_init(void) | |
386 | { | |
387 | acpi_scan_add_handler(&acpi_pnp_handler); | |
388 | } |