diff --git a/patches/openwrt/5.15-kernel-configuration/0017-mvebu-backport-pending-DTS-changes-for-Turris-Omnia.patch b/patches/openwrt/5.15-kernel-configuration/0017-mvebu-backport-pending-DTS-changes-for-Turris-Omnia.patch new file mode 100644 index 0000000000000000000000000000000000000000..29f5ab82ade3a476a3cfa36db807ab433777486f --- /dev/null +++ b/patches/openwrt/5.15-kernel-configuration/0017-mvebu-backport-pending-DTS-changes-for-Turris-Omnia.patch @@ -0,0 +1,128 @@ +From aface6cf064a5c2e37330c2ca986b71bde9a492e Mon Sep 17 00:00:00 2001 +From: Josef Schlehofer <pepe.schlehofer@gmail.com> +Date: Tue, 26 Jul 2022 14:31:26 +0200 +Subject: [PATCH 1/2] mvebu: backport pending DTS changes for Turris Omnia + +Backport pending patches: +- https://lore.kernel.org/linux-arm-kernel/20220704113622.18887-1-kabel@kernel.org/ +- https://lore.kernel.org/linux-arm-kernel/20220704113622.18887-2-kabel@kernel.org/ + +Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com> +--- + ...mnia-configure-LED-0-pin-function-to.patch | 43 +++++++++++++++ + ...ris-omnia-enable-LED-controller-node.patch | 53 +++++++++++++++++++ + 2 files changed, 96 insertions(+) + create mode 100644 target/linux/mvebu/patches-5.15/100-ARM-dts-turris-omnia-configure-LED-0-pin-function-to.patch + create mode 100644 target/linux/mvebu/patches-5.15/101-ARM-dts-turris-omnia-enable-LED-controller-node.patch + +diff --git a/target/linux/mvebu/patches-5.15/100-ARM-dts-turris-omnia-configure-LED-0-pin-function-to.patch b/target/linux/mvebu/patches-5.15/100-ARM-dts-turris-omnia-configure-LED-0-pin-function-to.patch +new file mode 100644 +index 0000000000..135b69162c +--- /dev/null ++++ b/target/linux/mvebu/patches-5.15/100-ARM-dts-turris-omnia-configure-LED-0-pin-function-to.patch +@@ -0,0 +1,43 @@ ++From 81c0004a6433ff90fa6129418802c3c367e453c2 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <kabel@kernel.org> ++Date: Mon, 4 Jul 2022 13:36:21 +0200 ++Subject: [PATCH 1/5] ARM: dts: turris-omnia: configure LED[0] pin function to ++ link/activity ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++The marvell PHY driver changes the LED[0] pin function to "On - 1000 ++Mbps Link, Off - Else". ++ ++Turris Omnia expects that the function is "On - Link, Blink - Activity, ++Off - No link". ++ ++Use the `marvell,reg-init` DT property to change the function. ++ ++In the future, once netdev trigger will support HW offloading, we will ++be able to have this configured via the combination of PHY driver and ++leds-turris-omnia driver. ++ ++Signed-off-by: Marek BehĂşn <kabel@kernel.org> ++--- ++ arch/arm/boot/dts/armada-385-turris-omnia.dts | 3 ++- ++ 1 file changed, 2 insertions(+), 1 deletion(-) ++ ++diff --git a/arch/arm/boot/dts/armada-385-turris-omnia.dts b/arch/arm/boot/dts/armada-385-turris-omnia.dts ++index 5bd6a66d2c2b..1c65de55a17b 100644 ++--- a/arch/arm/boot/dts/armada-385-turris-omnia.dts +++++ b/arch/arm/boot/dts/armada-385-turris-omnia.dts ++@@ -390,7 +390,8 @@ &mdio { ++ phy1: ethernet-phy@1 { ++ compatible = "ethernet-phy-ieee802.3-c22"; ++ reg = <1>; ++- marvell,reg-init = <3 18 0 0x4985>; +++ marvell,reg-init = <3 18 0 0x4985>, +++ <3 16 0xfff0 0x0001>; ++ ++ /* irq is connected to &pcawan pin 7 */ ++ }; ++-- ++2.34.1 ++ +diff --git a/target/linux/mvebu/patches-5.15/101-ARM-dts-turris-omnia-enable-LED-controller-node.patch b/target/linux/mvebu/patches-5.15/101-ARM-dts-turris-omnia-enable-LED-controller-node.patch +new file mode 100644 +index 0000000000..626a766757 +--- /dev/null ++++ b/target/linux/mvebu/patches-5.15/101-ARM-dts-turris-omnia-enable-LED-controller-node.patch +@@ -0,0 +1,53 @@ ++From fed7cef5e4f2df8c6a79bebf5da1fdd3783ff6f3 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <kabel@kernel.org> ++Date: Mon, 4 Jul 2022 13:36:22 +0200 ++Subject: [PATCH] ARM: dts: turris-omnia: enable LED controller node ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++The LED controller node is disabled because the leds-turris-omnia driver ++does not support setting the LED blinking to be controlled by the MCU. ++ ++The patches for that have now been sent [1], so let's enable the node. ++ ++[1] https://lore.kernel.org/linux-leds/20220704105955.15474-1-kabel@kernel.org/T/ ++ ++Signed-off-by: Marek BehĂşn <kabel@kernel.org> ++--- ++ arch/arm/boot/dts/armada-385-turris-omnia.dts | 7 ++----- ++ 1 file changed, 2 insertions(+), 5 deletions(-) ++ ++diff --git a/arch/arm/boot/dts/armada-385-turris-omnia.dts b/arch/arm/boot/dts/armada-385-turris-omnia.dts ++index 1c65de55a17b..1e7d6e63c58d 100644 ++--- a/arch/arm/boot/dts/armada-385-turris-omnia.dts +++++ b/arch/arm/boot/dts/armada-385-turris-omnia.dts ++@@ -188,15 +188,13 @@ led-controller@2b { ++ reg = <0x2b>; ++ #address-cells = <1>; ++ #size-cells = <0>; +++ status = "okay"; ++ ++ /* ++ * LEDs are controlled by MCU (STM32F0) at ++ * address 0x2b. ++ * ++- * The driver does not support HW control mode ++- * for the LEDs yet. Disable the LEDs for now. ++- * ++- * Also LED functions are not stable yet: +++ * LED functions are not stable yet: ++ * - there are 3 LEDs connected via MCU to PCIe ++ * ports. One of these ports supports mSATA. ++ * There is no mSATA nor PCIe function. ++@@ -207,7 +205,6 @@ led-controller@2b { ++ * B. Again there is no such function defined. ++ * For now we use LED_FUNCTION_INDICATOR ++ */ ++- status = "disabled"; ++ ++ multi-led@0 { ++ reg = <0x0>; ++-- ++2.34.1 ++ +-- +2.34.1 + diff --git a/patches/openwrt/5.15-kernel-configuration/0018-mvebu-leds-Turris-Omnia-improvements.patch b/patches/openwrt/5.15-kernel-configuration/0018-mvebu-leds-Turris-Omnia-improvements.patch new file mode 100644 index 0000000000000000000000000000000000000000..30773189b621906f2687f00dc97be851b1140a7f --- /dev/null +++ b/patches/openwrt/5.15-kernel-configuration/0018-mvebu-leds-Turris-Omnia-improvements.patch @@ -0,0 +1,238 @@ +From fc00dcf29be70f9ae6f96d4f7b27a1b319a7df24 Mon Sep 17 00:00:00 2001 +From: Josef Schlehofer <pepe.schlehofer@gmail.com> +Date: Tue, 26 Jul 2022 14:32:37 +0200 +Subject: [PATCH 2/2] mvebu: leds: Turris Omnia improvements + +It backports this patch series, which is currently on review: +https://lore.kernel.org/linux-leds/20220704105955.15474-1-kabel@kernel.org/T/#rb89a4ca5a836f17bdcc53d65549e0b1779bb6a18 + +Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com> +--- + ...a-support-HW-controlled-mode-via-pri.patch | 125 ++++++++++++++++++ + ...a-initialize-multi-intensity-to-full.patch | 38 ++++++ + ...a-change-max-brightness-from-255-to-.patch | 36 +++++ + 3 files changed, 199 insertions(+) + create mode 100644 target/linux/mvebu/patches-5.15/102-leds-turris-omnia-support-HW-controlled-mode-via-pri.patch + create mode 100644 target/linux/mvebu/patches-5.15/103-leds-turris-omnia-initialize-multi-intensity-to-full.patch + create mode 100644 target/linux/mvebu/patches-5.15/104-leds-turris-omnia-change-max-brightness-from-255-to-.patch + +diff --git a/target/linux/mvebu/patches-5.15/102-leds-turris-omnia-support-HW-controlled-mode-via-pri.patch b/target/linux/mvebu/patches-5.15/102-leds-turris-omnia-support-HW-controlled-mode-via-pri.patch +new file mode 100644 +index 0000000000..05520a85f5 +--- /dev/null ++++ b/target/linux/mvebu/patches-5.15/102-leds-turris-omnia-support-HW-controlled-mode-via-pri.patch +@@ -0,0 +1,125 @@ ++From 80e643510cb14f116f687e992210c0008a09d869 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <kabel@kernel.org> ++Date: Mon, 4 Jul 2022 12:59:53 +0200 ++Subject: [PATCH] leds: turris-omnia: support HW controlled mode via ++ private trigger ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++Add support for enabling MCU controlled mode of the Turris Omnia LEDs ++via a LED private trigger called "omnia-mcu". ++ ++When in MCU controlled mode, the user can still set LED color, but the ++blinking is done by MCU, which does different things for various LEDs: ++- WAN LED is blinked according to the LED[0] pin of the WAN PHY ++- LAN LEDs are blinked according to the LED[0] output of corresponding ++ port of the LAN switch ++- PCIe LEDs are blinked according to the logical OR of the MiniPCIe port ++ LED pins ++ ++For a long time I wanted to actually do this differently: I wanted to ++make the netdev trigger to transparently offload the blinking to the HW ++if user set compatible settings for the netdev trigger. ++There was some work on this, and hopefully we will be able to complete ++it sometime, but since there are various complications, it will probably ++not be soon. ++ ++In the meantime let's support HW controlled mode via this private LED ++trigger. If, in the future, we manage to complete the netdev trigger ++offloading, we can still keep this private trigger for backwards ++compatiblity, if needed. ++ ++We also set "omnia-mcu" to cdev->default_trigger, so that the MCU keeps ++control until the user first wants to take over it. If a different ++default trigger is specified in device-tree via the ++`linux,default-trigger` property, LED class will overwrite ++cdev->default_trigger, and so the DT property will be respected. ++ ++Signed-off-by: Marek BehĂşn <kabel@kernel.org> ++--- ++ drivers/leds/Kconfig | 1 + ++ drivers/leds/leds-turris-omnia.c | 41 ++++++++++++++++++++++++++++++++ ++ 2 files changed, 42 insertions(+) ++ ++diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig ++index ed800f5da7d8..52f010b8f58e 100644 ++--- a/drivers/leds/Kconfig +++++ b/drivers/leds/Kconfig ++@@ -163,6 +163,7 @@ config LEDS_TURRIS_OMNIA ++ depends on I2C ++ depends on MACH_ARMADA_38X || COMPILE_TEST ++ depends on OF +++ select LEDS_TRIGGERS ++ help ++ This option enables basic support for the LEDs found on the front ++ side of CZ.NIC's Turris Omnia router. There are 12 RGB LEDs on the ++diff --git a/drivers/leds/leds-turris-omnia.c b/drivers/leds/leds-turris-omnia.c ++index 1adfed1c0619..c2dfb22d3065 100644 ++--- a/drivers/leds/leds-turris-omnia.c +++++ b/drivers/leds/leds-turris-omnia.c ++@@ -41,6 +41,39 @@ struct omnia_leds { ++ struct omnia_led leds[]; ++ }; ++ +++static struct led_hw_trigger_type omnia_hw_trigger_type; +++ +++static int omnia_hwtrig_activate(struct led_classdev *cdev) +++{ +++ struct omnia_leds *leds = dev_get_drvdata(cdev->dev->parent); +++ struct omnia_led *led = to_omnia_led(lcdev_to_mccdev(cdev)); +++ +++ /* put the LED into MCU controlled mode */ +++ return i2c_smbus_write_byte_data(leds->client, CMD_LED_MODE, +++ CMD_LED_MODE_LED(led->reg)); +++} +++ +++static void omnia_hwtrig_deactivate(struct led_classdev *cdev) +++{ +++ struct omnia_leds *leds = dev_get_drvdata(cdev->dev->parent); +++ struct omnia_led *led = to_omnia_led(lcdev_to_mccdev(cdev)); +++ int ret; +++ +++ /* put the LED into software mode */ +++ ret = i2c_smbus_write_byte_data(leds->client, CMD_LED_MODE, +++ CMD_LED_MODE_LED(led->reg) | +++ CMD_LED_MODE_USER); +++ if (ret < 0) +++ dev_err(cdev->dev, "Cannot put to software mode: %i\n", ret); +++} +++ +++static struct led_trigger omnia_hw_trigger = { +++ .name = "omnia-mcu", +++ .activate = omnia_hwtrig_activate, +++ .deactivate = omnia_hwtrig_deactivate, +++ .trigger_type = &omnia_hw_trigger_type, +++}; +++ ++ static int omnia_led_brightness_set_blocking(struct led_classdev *cdev, ++ enum led_brightness brightness) ++ { ++@@ -112,6 +145,8 @@ static int omnia_led_register(struct i2c_client *client, struct omnia_led *led, ++ cdev = &led->mc_cdev.led_cdev; ++ cdev->max_brightness = 255; ++ cdev->brightness_set_blocking = omnia_led_brightness_set_blocking; +++ cdev->trigger_type = &omnia_hw_trigger_type; +++ cdev->default_trigger = omnia_hw_trigger.name; ++ ++ /* put the LED into software mode */ ++ ret = i2c_smbus_write_byte_data(client, CMD_LED_MODE, ++@@ -228,6 +263,12 @@ static int omnia_leds_probe(struct i2c_client *client, ++ ++ mutex_init(&leds->lock); ++ +++ ret = devm_led_trigger_register(dev, &omnia_hw_trigger); +++ if (ret < 0) { +++ dev_err(dev, "Cannot register private LED trigger: %d\n", ret); +++ return ret; +++ } +++ ++ led = &leds->leds[0]; ++ for_each_available_child_of_node(np, child) { ++ ret = omnia_led_register(client, led, child); ++-- ++2.34.1 ++ +diff --git a/target/linux/mvebu/patches-5.15/103-leds-turris-omnia-initialize-multi-intensity-to-full.patch b/target/linux/mvebu/patches-5.15/103-leds-turris-omnia-initialize-multi-intensity-to-full.patch +new file mode 100644 +index 0000000000..88b85ac7d7 +--- /dev/null ++++ b/target/linux/mvebu/patches-5.15/103-leds-turris-omnia-initialize-multi-intensity-to-full.patch +@@ -0,0 +1,38 @@ ++From bda176cceb735b9b46c1900658b6486c34e13ae6 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <kabel@kernel.org> ++Date: Mon, 4 Jul 2022 12:59:54 +0200 ++Subject: [PATCH] leds: turris-omnia: initialize multi-intensity to full ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++The default color of each LED before driver probe (255, 255, 255). ++Initialize multi_intensity to this value, so that it corresponds to the ++reality. ++ ++Signed-off-by: Marek BehĂşn <kabel@kernel.org> ++--- ++ drivers/leds/leds-turris-omnia.c | 3 +++ ++ 1 file changed, 3 insertions(+) ++ ++diff --git a/drivers/leds/leds-turris-omnia.c b/drivers/leds/leds-turris-omnia.c ++index c2dfb22d3065..fae155bd119c 100644 ++--- a/drivers/leds/leds-turris-omnia.c +++++ b/drivers/leds/leds-turris-omnia.c ++@@ -131,10 +131,13 @@ static int omnia_led_register(struct i2c_client *client, struct omnia_led *led, ++ } ++ ++ led->subled_info[0].color_index = LED_COLOR_ID_RED; +++ led->subled_info[0].intensity = 255; ++ led->subled_info[0].channel = 0; ++ led->subled_info[1].color_index = LED_COLOR_ID_GREEN; +++ led->subled_info[1].intensity = 255; ++ led->subled_info[1].channel = 1; ++ led->subled_info[2].color_index = LED_COLOR_ID_BLUE; +++ led->subled_info[2].intensity = 255; ++ led->subled_info[2].channel = 2; ++ ++ led->mc_cdev.subled_info = led->subled_info; ++-- ++2.34.1 ++ +diff --git a/target/linux/mvebu/patches-5.15/104-leds-turris-omnia-change-max-brightness-from-255-to-.patch b/target/linux/mvebu/patches-5.15/104-leds-turris-omnia-change-max-brightness-from-255-to-.patch +new file mode 100644 +index 0000000000..b99c0dc66b +--- /dev/null ++++ b/target/linux/mvebu/patches-5.15/104-leds-turris-omnia-change-max-brightness-from-255-to-.patch +@@ -0,0 +1,36 @@ ++From 349cbe949b9622cc05b148ecfa6268cbbae35b45 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <kabel@kernel.org> ++Date: Mon, 4 Jul 2022 12:59:55 +0200 ++Subject: [PATCH] leds: turris-omnia: change max brightness from 255 to 1 ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++Using binary brightness makes more sense for this controller, because ++internally in the MCU it works that way: the LED has a color, and a ++state whether it is ON or OFF. ++ ++The resulting brightness computation with led_mc_calc_color_components() ++will now always result in either (0, 0, 0) or the multi_intensity value. ++ ++Signed-off-by: Marek BehĂşn <kabel@kernel.org> ++--- ++ drivers/leds/leds-turris-omnia.c | 2 +- ++ 1 file changed, 1 insertion(+), 1 deletion(-) ++ ++diff --git a/drivers/leds/leds-turris-omnia.c b/drivers/leds/leds-turris-omnia.c ++index fae155bd119c..f53bdc3f4cea 100644 ++--- a/drivers/leds/leds-turris-omnia.c +++++ b/drivers/leds/leds-turris-omnia.c ++@@ -146,7 +146,7 @@ static int omnia_led_register(struct i2c_client *client, struct omnia_led *led, ++ init_data.fwnode = &np->fwnode; ++ ++ cdev = &led->mc_cdev.led_cdev; ++- cdev->max_brightness = 255; +++ cdev->max_brightness = 1; ++ cdev->brightness_set_blocking = omnia_led_brightness_set_blocking; ++ cdev->trigger_type = &omnia_hw_trigger_type; ++ cdev->default_trigger = omnia_hw_trigger.name; ++-- ++2.34.1 ++ +-- +2.34.1 +