LCOV - code coverage report
Current view: top level - drivers/acpi - acpi_pnp.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 24 24 100.0 %
Date: 2022-04-01 14:58:12 Functions: 5 5 100.0 %
Branches: 21 24 87.5 %

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

Generated by: LCOV version 1.14