2019-09-10 00:49:35 +03:00
#!/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 ' ,
2020-02-06 18:55:42 +03:00
# Microchip (Composite HID + CDC) (kefka)
' 04d8:0b28 ' ,
2019-09-10 00:49:35 +03:00
]
# 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 ' ,
2020-02-06 18:55:42 +03:00
# Realtek (blooglet)
' 0bda:b00c ' ,
2019-09-10 00:49:35 +03:00
# 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 ' ,
2019-10-05 04:57:46 +03:00
# SPT PCH xHCI controller
2019-09-10 00:49:35 +03:00
' 8086:9d2f ' ,
2019-10-05 04:57:46 +03:00
# CNP PCH xHCI controller
' 8086:9ded ' ,
2019-09-10 00:49:35 +03:00
# 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 ' ,
2020-02-06 18:55:42 +03:00
# 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 ' ,
2019-09-10 00:49:35 +03:00
]
# 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 ' ,
]
2020-02-06 18:55:42 +03:00
# Do not edit below this line. #################################################
2019-09-10 00:49:35 +03:00
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 ( )