123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336 |
- #!/usr/bin/env python2
- # -*- coding: utf-8 -*-
- # Copyright 2017 The Chromium OS Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- """Autosuspend udev rule generator
- This script is executed at build time to generate udev rules. The
- resulting rules file is installed on the device, the script itself
- is not.
- """
- from __future__ import print_function
- # List of USB devices (vendorid:productid) for which it is safe to enable
- # autosuspend.
- USB_IDS = []
- # Host Controllers and internal hubs
- USB_IDS += [
- # Linux Host Controller (UHCI) (most older x86 boards)
- '1d6b:0001',
- # Linux Host Controller (EHCI) (all boards)
- '1d6b:0002',
- # Linux Host Controller (XHCI) (most newer boards)
- '1d6b:0003',
- # SMSC (Internal HSIC Hub) (most Exynos boards)
- '0424:3503',
- # Intel (Rate Matching Hub) (all x86 boards)
- '05e3:0610',
- # Intel (Internal Hub?) (peppy, falco)
- '8087:0024',
- # Genesys Logic (Internal Hub) (rambi)
- '8087:8000',
- # Microchip (Composite HID + CDC) (kefka)
- '04d8:0b28',
- ]
- # Webcams
- USB_IDS += [
- # Chicony (zgb)
- '04f2:b1d8',
- # Chicony (mario)
- '04f2:b262',
- # Chicony (stout)
- '04f2:b2fe',
- # Chicony (butterfly)
- '04f2:b35f',
- # Chicony (rambi)
- '04f2:b443',
- # Chicony (glados)
- '04f2:b552',
- # LiteOn (spring)
- '058f:b001',
- # Foxlink? (butterfly)
- '05c8:0351',
- # Foxlink? (butterfly)
- '05c8:0355',
- # Cheng Uei? (falco)
- '05c8:036e',
- # SuYin (parrot)
- '064e:d251',
- # Realtek (falco)
- '0bda:571c',
- # IMC Networks (squawks)
- '13d3:5657',
- # Sunplus (parrot)
- '1bcf:2c17',
- # (C-13HDO10B39N) (alex)
- '2232:1013',
- # (C-10HDP11538N) (lumpy)
- '2232:1017',
- # (Namuga) (link)
- '2232:1033',
- # (C-03FFM12339N) (daisy)
- '2232:1037',
- # (C-10HDO13531N) (peach)
- '2232:1056',
- # (NCM-G102) (samus)
- '2232:6001',
- # Acer (stout)
- '5986:0299',
- ]
- # Bluetooth Host Controller
- USB_IDS += [
- # Hon-hai (parrot)
- '0489:e04e',
- # Hon-hai (peppy)
- '0489:e056',
- # Hon-hai (Kahlee)
- '0489:e09f',
- # QCA6174A (delan)
- '0489:e0a2',
- # LiteOn (parrot)
- '04ca:3006',
- # LiteOn (aleena)
- '04ca:3016',
- # LiteOn (scarlet)
- '04ca:301a',
- # Realtek (blooglet)
- '0bda:b00c',
- # Atheros (stumpy, stout)
- '0cf3:3004',
- # Atheros (AR3011) (mario, alex, zgb)
- '0cf3:3005',
- # Atheros (stumyp)
- '0cf3:3007',
- # Atheros (butterfly)
- '0cf3:311e',
- # Atheros (scarlet)
- '0cf3:e300',
- # Marvell (rambi)
- '1286:2046',
- # Marvell (gru)
- '1286:204e',
- # Intel (rambi, samus)
- '8087:07dc',
- # Intel (strago, glados)
- '8087:0a2a',
- # Intel (octopus)
- '8087:0aaa',
- # Intel (hatch)
- '8087:0026',
- # Intel (atlas)
- '8087:0025',
- ]
- # WWAN (LTE)
- USB_IDS += [
- # Huawei (ME936) (kip)
- '12d1:15bb',
- # Fibocom (L850-GL) (coral, nautilus, sarien)
- '2cb7:0007',
- ]
- # Mass Storage
- USB_IDS += [
- # Genesys (SD card reader) (lumpy, link, peppy)
- '05e3:0727',
- # Realtek (SD card reader) (mario, alex)
- '0bda:0138',
- # Realtek (SD card reader) (helios)
- '0bda:0136',
- # Realtek (SD card reader) (falco)
- '0bda:0177',
- ]
- # Security Key
- USB_IDS += [
- # Yubico.com
- '1050:0211',
- # Yubico.com (HID firmware)
- '1050:0200',
- # Google Titan key
- '18d1:5026',
- ]
- # USB Audio devices
- USB_IDS += [
- # Google USB-C to 3.5mm Digital Headphone Jack Adapter 'Mir'
- '18d1:5025',
- # Google USB-C to 3.5mm Digital Headphone Jack Adapter 'Mir' (HID only)
- '18d1:5029',
- # Google USB-C to 3.5mm Digital Headphone Jack Adapter 2018 'Condor'
- '18d1:5034',
- # Google Pixel USB-C Earbuds 'Blackbird'
- '18d1:5033',
- # Libratone Q Adapt In-Ear USB-C Earphones, Made for Google
- '03eb:2433',
- # Moshi USB-C to 3.5 mm Adapter/Charger, Made for Google
- '282b:48f0',
- # Moshi USB-C to 3.5 mm Adapter/Charger, Made for Google (HID only)
- '282b:0026',
- # AiAiAi TMA-2 C60 Cable, Made for Google
- '0572:1a08',
- # Apple USB-C to 3.5mm Headphone Jack Adapter
- '05ac:110a',
- ]
- # List of PCI devices (vendorid:deviceid) for which it is safe to enable
- # autosuspend.
- PCI_IDS = []
- # Intel
- PCI_IDS += [
- # Host bridge
- '8086:590c',
- # i915
- '8086:591e',
- # proc_thermal
- '8086:1903',
- # SPT PCH xHCI controller
- '8086:9d2f',
- # CNP PCH xHCI controller
- '8086:9ded',
- # intel_pmc_core
- '8086:9d21',
- # i801_smbus
- '8086:9d23',
- # iwlwifi
- '8086:095a',
- # GMM
- '8086:1911',
- # Thermal
- '8086:9d31',
- # MME
- '8086:9d3a',
- # CrOS EC
- '8086:9d4b',
- # PCH SPI
- '8086:9d24',
- # SATA
- '8086:02d3',
- # RAM memory
- '8086:02ef',
- # ISA bridge
- '8086:0284',
- # Communication controller
- '8086:02e0',
- # Network controller
- '8086:02f0',
- # Serial bus controller
- '8086:02a4',
- # USB controller
- '8086:02ed',
- # Graphics
- '8086:9b41',
- # DSP
- '8086:02f9',
- # Host bridge
- '8086:9b61',
- # Host bridge
- '8086:9b71',
- # PCI Bridge
- '8086:02b0',
- # i915 (atlas)
- '8086:591c',
- # iwlwifi (atlas)
- '8086:2526',
- # i915 (kefka)
- '8086:22b1',
- # proc_thermal (kefka)
- '8086:22dc',
- # xchi_hdc (kefka)
- '8086:22b5',
- # snd_hda (kefka)
- '8086:2284',
- # pcieport (kefka)
- '8086:22c8',
- '8086:22cc',
- # lpc_ich (kefka)
- '8086:229c',
- # iosf_mbi_pci (kefka)
- '8086:2280',
- ]
- # Samsung
- PCI_IDS += [
- # NVMe KUS030205M-B001
- '144d:a806',
- # NVMe MZVLB256HAHQ
- '144d:a808',
- ]
- # Lite-on
- PCI_IDS += [
- # 3C07110288
- '14a4:9100',
- ]
- # Seagate
- PCI_IDS += [
- # ZP256CM30011
- '7089:5012',
- ]
- # Kingston
- PCI_IDS += [
- # RBUSNS8154P3128GJ3
- '2646:5008',
- ]
- # Do not edit below this line. #################################################
- UDEV_RULE = """\
- ACTION!="add", GOTO="autosuspend_end"
- SUBSYSTEM!="i2c|pci|usb", GOTO="autosuspend_end"
- SUBSYSTEM=="i2c", GOTO="autosuspend_i2c"
- SUBSYSTEM=="pci", GOTO="autosuspend_pci"
- SUBSYSTEM=="usb", GOTO="autosuspend_usb"
- # I2C rules
- LABEL="autosuspend_i2c"
- ATTR{name}=="cyapa", ATTR{power/control}="on", GOTO="autosuspend_end"
- GOTO="autosuspend_end"
- # PCI rules
- LABEL="autosuspend_pci"
- %(pci_rules)s\
- GOTO="autosuspend_end"
- # USB rules
- LABEL="autosuspend_usb"
- %(usb_rules)s\
- GOTO="autosuspend_end"
- # Enable autosuspend
- LABEL="autosuspend_enable"
- TEST=="power/control", ATTR{power/control}="auto", GOTO="autosuspend_end"
- LABEL="autosuspend_end"
- """
- def main():
- pci_rules = ''
- for dev_ids in PCI_IDS:
- vendor, device = dev_ids.split(':')
- pci_rules += ('ATTR{vendor}=="0x%s", ATTR{device}=="0x%s", '
- 'GOTO="autosuspend_enable"\n' % (vendor, device))
- usb_rules = ''
- for dev_ids in USB_IDS:
- vid, pid = dev_ids.split(':')
- usb_rules += ('ATTR{idVendor}=="%s", ATTR{idProduct}=="%s", '
- 'GOTO="autosuspend_enable"\n' % (vid, pid))
- print(UDEV_RULE % {'pci_rules': pci_rules, 'usb_rules': usb_rules})
- if __name__ == '__main__':
- main()
|