#!/usr/bin/env python3
# -*- 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.
"""

# 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',
    # JSL xHCI controller
    '8086:4ded',
    # 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()
