|
@@ -0,0 +1,336 @@
|
|
|
+#!/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()
|