diff options
Diffstat (limited to 'tools/chromiumos')
-rw-r--r-- | tools/chromiumos/gen_autosuspend_rules.py | 402 |
1 files changed, 402 insertions, 0 deletions
diff --git a/tools/chromiumos/gen_autosuspend_rules.py b/tools/chromiumos/gen_autosuspend_rules.py new file mode 100644 index 0000000..76b166a --- /dev/null +++ b/tools/chromiumos/gen_autosuspend_rules.py @@ -0,0 +1,402 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: BSD-3-Clause +# -*- 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 LICENSES/BSD-3-Clause.txt 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. +""" + +# 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", + # Fibocom (FM101-GL) (mbim) + "2cb7:01a2", + # Fibocom (FM101-GL) (adb) + "2cb7:01a4", +] + +# 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", + # Realtek (SD card reader) (pirrha) + "0bda:0129", +] + +# 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", +] + +# RGB Keyboard +USB_IDS += [ + # Google Prism + "18d1:5022", +] + +# 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", + # JSL xHCI controller + "8086:4ded", + # Volteer xHCI controller + "8086:a0ed", + # Brya xHCI controller + "8086:51ed", + # ADL-N PCH xHCI controller + "8086:54ed", + # 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", + # Host bridge (nami) + "8086:5904", + "8086:5914", + # Graphics (nami) + "8086:5906", + "8086:5917", + # ISA bridge (nami) + "8086:9d4e", + # wifi 7265 (nami) + "8086:095b", + # Graphics (brya) + "8086:46a8", + # Core 12G GNA (brya) + "8086:464f", + # PCH Shared SRAM (brya) + "8086:51ef", + # PCH eSPI (brya) + "8086:5182", + "8086:4601", + # Core 12G DTT (brya) + "8086:461d", + # Wifi (Brya) + "8086:51f0", + # PCH SPI (brya) + "8086:51a4", +] + +# Samsung +PCI_IDS += [ + # NVMe KUS030205M-B001 + "144d:a806", + # NVMe MZVLB256HAHQ + "144d:a808", + # NVMe MZ9LQ256HBJD-00BH1 (brya) + "144d:a809", +] + +# Lite-on +PCI_IDS += [ + # 3C07110288 + "14a4:9100", +] + +# Seagate +PCI_IDS += [ + # ZP256CM30011 + "7089:5012", +] + +# Kingston +PCI_IDS += [ + # RBUSNS8154P3128GJ3 + "2646:5008", +] + +# Genesys Logic +PCI_IDS += [ + # SD Host Controller (brya) + "17a0:9755", +] + +# Phison +PCI_IDS += [ + # E13 NVMe Controller (redrix) + '1987:5013', + # E18 PCIe4 NVMe Controller (vell) + '1987:5018', +] + +# 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() |