mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-22 13:33:56 +03:00
tools: rewrite make-autosuspend-rules.py and add udev rules
Concatenating strings is not a very efficient approach. And in this case fully unnecessary. We also need some rules to make use of those hwdb entries. PCI needs to be 8 characters, not 4. And we need to use uppercase hexadecimal for both. With udev rules this made no difference, but hwdb match is case sensitive. Fixes #16119.
This commit is contained in:
parent
876c75fe87
commit
79dc5d35dd
14
rules.d/60-autosuspend.rules
Normal file
14
rules.d/60-autosuspend.rules
Normal file
@ -0,0 +1,14 @@
|
||||
# do not edit this file, it will be overwritten on update
|
||||
|
||||
ACTION!="add", GOTO="autosuspend_end"
|
||||
|
||||
# I2C rules
|
||||
SUBSYSTEM=="i2c", ATTR{name}=="cyapa", \
|
||||
ATTR{power/control}="on", GOTO="autosuspend_end"
|
||||
|
||||
# Enable autosuspend if hwdb says so. Here we are relying on
|
||||
# the hwdb import done earlier based on MODALIAS.
|
||||
ENV{ID_AUTOSUSPEND}=="1", TEST=="power/control", \
|
||||
ATTR{power/control}="auto"
|
||||
|
||||
LABEL="autosuspend_end"
|
@ -1,6 +1,7 @@
|
||||
# SPDX-License-Identifier: LGPL-2.1+
|
||||
|
||||
rules = files('''
|
||||
60-autosuspend.rules
|
||||
60-block.rules
|
||||
60-cdrom_id.rules
|
||||
60-drm.rules
|
||||
|
@ -2,32 +2,23 @@
|
||||
# SPDX-License-Identifier: LGPL-2.1+
|
||||
|
||||
# Generate autosuspend rules for devices that have been whitelisted (IE tested)
|
||||
# by the Chromium OS team. Please keep this script in sync with:
|
||||
# by the Chromium OS team. Based on
|
||||
# https://chromium.googlesource.com/chromiumos/platform2/+/master/power_manager/udev/gen_autosuspend_rules.py
|
||||
|
||||
import sys
|
||||
import chromiumos.gen_autosuspend_rules
|
||||
|
||||
HWDB_FILE = """\
|
||||
%(usb_entries)s\
|
||||
%(pci_entries)s\
|
||||
"""
|
||||
print('# pci:v<00VENDOR>d<00DEVICE> (8 uppercase hexadecimal digits twice)')
|
||||
for entry in chromiumos.gen_autosuspend_rules.PCI_IDS:
|
||||
vendor, device = entry.split(':')
|
||||
vendor = int(vendor, 16)
|
||||
device = int(device, 16)
|
||||
print(f'pci:v{vendor:08X}d{device:08X}*')
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) > 1:
|
||||
sys.stdout = open(sys.argv[1], 'w')
|
||||
print('# usb:v<VEND>p<PROD> (4 uppercase hexadecimal digits twice')
|
||||
for entry in chromiumos.gen_autosuspend_rules.USB_IDS:
|
||||
vendor, product = entry.split(':')
|
||||
vendor = int(vendor, 16)
|
||||
product = int(product, 16)
|
||||
print(f'usb:v{vendor:04X}p{product:04X}*')
|
||||
|
||||
pci_entries = ''
|
||||
for dev_ids in chromiumos.gen_autosuspend_rules.PCI_IDS:
|
||||
vendor, device = dev_ids.split(':')
|
||||
|
||||
pci_entries += ('usb:v%sp%s*\n'
|
||||
' ID_AUTOSUSPEND=1\n' % (vendor, device))
|
||||
usb_entries = ''
|
||||
for dev_ids in chromiumos.gen_autosuspend_rules.USB_IDS:
|
||||
vendor, device = dev_ids.split(':')
|
||||
|
||||
usb_entries += ('pci:v%sp%s*\n'
|
||||
' ID_AUTOSUSPEND=1\n' % (vendor, device))
|
||||
|
||||
print(HWDB_FILE % {'pci_entries' : pci_entries, 'usb_entries': usb_entries})
|
||||
print(' ID_AUTOSUSPEND=1')
|
||||
|
Loading…
Reference in New Issue
Block a user