| #!/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', |
| # Fibocom (NL668, NL652) |
| '2cb7:01a0', |
| ] |
| |
| # 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', |
| # Volteer xHCI controller |
| '8086:a0ed', |
| # 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() |