From 34472a5cff6d6c8caa6e14ec894027e7cf20ed73 Mon Sep 17 00:00:00 2001 From: Arnaud Ferraris Date: Thu, 30 Jun 2022 01:11:28 +0200 Subject: [PATCH] udev: allow different attribute values for the community firmware When using the community-maintained firmware, some attributes need to be set with different values than what works best with the stock firmware: this is the case of the `power/control` attribute which should be set to "on". Similarly, on the PPP `power/persist` should be set to "1". This commit reworks the udev rules so we can differentiate between firmwares and host devices. --- udev/80-modem-eg25.rules | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/udev/80-modem-eg25.rules b/udev/80-modem-eg25.rules index c25179f..359057a 100644 --- a/udev/80-modem-eg25.rules +++ b/udev/80-modem-eg25.rules @@ -1,4 +1,22 @@ -ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ATTR{power/control}="auto" -ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ATTR{power/autosuspend_delay_ms}="3000" -ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ATTR{power/wakeup}="enabled" -ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ATTR{power/persist}="0" +ACTION!="add", GOTO="eg25_end" +SUBSYSTEM!="usb", GOTO="eg25_end" +DRIVER!="usb", GOTO="eg25_end" +ENV{DEVTYPE}!="usb_device", GOTO="eg25_end" + +# Default attributes values +ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ATTR{power/control}="auto" +ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ATTR{power/autosuspend_delay_ms}="3000" +ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ATTR{power/wakeup}="enabled" +ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ATTR{power/persist}="0" + +# If running the stock firmware, stop processing here +ATTRS{serial}!="community_fw", GOTO="eg25_end" + +# power/control needs to be "on" for the community-maintained firmware +ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ATTR{power/control}="on" + +# Special trick for the PinePhone Pro: set power/persist to 1 *only* with the community FW +# We can identify the PPP by looking for the string "pinephone-pro" in the device tree "compatible" property +ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", PROGRAM=="/bin/grep pine64,pinephone-pro /proc/device-tree/compatible", ATTR{power/persist}="1" + +LABEL="eg25_end"