From 79dc5d35dd7eb372afeb638cc1f86d1da2045623 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 13 Jun 2020 17:52:41 +0200 Subject: [PATCH] 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. --- rules.d/60-autosuspend.rules | 14 +++++++++++++ rules.d/meson.build | 1 + tools/make-autosuspend-rules.py | 37 +++++++++++++-------------------- 3 files changed, 29 insertions(+), 23 deletions(-) create mode 100644 rules.d/60-autosuspend.rules diff --git a/rules.d/60-autosuspend.rules b/rules.d/60-autosuspend.rules new file mode 100644 index 0000000000..1f9ebef631 --- /dev/null +++ b/rules.d/60-autosuspend.rules @@ -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" diff --git a/rules.d/meson.build b/rules.d/meson.build index b4684486c2..ffa010d8e3 100644 --- a/rules.d/meson.build +++ b/rules.d/meson.build @@ -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 diff --git a/tools/make-autosuspend-rules.py b/tools/make-autosuspend-rules.py index 3faf5f4d71..1a99e02aad 100755 --- a/tools/make-autosuspend-rules.py +++ b/tools/make-autosuspend-rules.py @@ -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:vp (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')