mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-02 08:32:55 +00:00

The two alarm LEDs of on the uDPU board are stopped working since commit78efa53e71
("leds: Init leds class earlier"). The LEDs are driven by the GPIO{15,16} pins of the North Bridge GPIO controller. These pins are part of the 'spi_quad' pin group for which the 'spi' function is selected via the default pinctrl state of the 'spi' node. This is wrong however, since in order to allow controlling the LEDs, the pins should use the 'gpio' function. Before the commit mentined above, the 'spi' function is selected first by the pinctrl core before probing the spi driver, but then it gets overridden to 'gpio' implicitly via the devm_gpiod_get_index_optional() call from the 'leds-gpio' driver. After the commit, the LED subsystem gets initialized before the SPI subsystem, so the function of the pin group remains 'spi' which in turn prevents controlling of the LEDs. Despite the change of the initialization order, the root cause is that the pinctrl state definition is wrong since its initial commit0d45062cfc
("arm64: dts: marvell: Add device tree for uDPU board"), To fix the problem, override the function in the 'spi_quad_pins' node to 'gpio' and move the pinctrl state definition from the 'spi' node into the 'leds' node. Cc: stable@vger.kernel.org # needs adjustment for < 6.1 Fixes:0d45062cfc
("arm64: dts: marvell: Add device tree for uDPU board") Signed-off-by: Gabor Juhos <j4g8y7@gmail.com> Signed-off-by: Imre Kaloz <kaloz@openwrt.org> Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
165 lines
2.9 KiB
Plaintext
165 lines
2.9 KiB
Plaintext
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
/*
|
|
* Device tree for the uDPU board.
|
|
* Based on Marvell Armada 3720 development board (DB-88F3720-DDR3)
|
|
* Copyright (C) 2016 Marvell
|
|
* Copyright (C) 2019 Methode Electronics
|
|
* Copyright (C) 2019 Telus
|
|
*
|
|
* Vladimir Vid <vladimir.vid@sartura.hr>
|
|
*/
|
|
|
|
/dts-v1/;
|
|
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
#include "armada-372x.dtsi"
|
|
|
|
/ {
|
|
chosen {
|
|
stdout-path = "serial0:115200n8";
|
|
};
|
|
|
|
memory@0 {
|
|
device_type = "memory";
|
|
reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
|
|
};
|
|
|
|
leds {
|
|
compatible = "gpio-leds";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&spi_quad_pins>;
|
|
|
|
led-power1 {
|
|
label = "udpu:green:power";
|
|
gpios = <&gpionb 11 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
led-power2 {
|
|
label = "udpu:red:power";
|
|
gpios = <&gpionb 12 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
led-network1 {
|
|
label = "udpu:green:network";
|
|
gpios = <&gpionb 13 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
led-network2 {
|
|
label = "udpu:red:network";
|
|
gpios = <&gpionb 14 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
led-alarm1 {
|
|
label = "udpu:green:alarm";
|
|
gpios = <&gpionb 15 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
led-alarm2 {
|
|
label = "udpu:red:alarm";
|
|
gpios = <&gpionb 16 GPIO_ACTIVE_LOW>;
|
|
};
|
|
};
|
|
|
|
sfp_eth1: sfp-eth1 {
|
|
compatible = "sff,sfp";
|
|
i2c-bus = <&i2c1>;
|
|
los-gpios = <&gpiosb 7 GPIO_ACTIVE_HIGH>;
|
|
mod-def0-gpios = <&gpiosb 8 GPIO_ACTIVE_LOW>;
|
|
tx-disable-gpios = <&gpiosb 9 GPIO_ACTIVE_HIGH>;
|
|
tx-fault-gpios = <&gpiosb 10 GPIO_ACTIVE_HIGH>;
|
|
maximum-power-milliwatt = <3000>;
|
|
};
|
|
};
|
|
|
|
&sdhci0 {
|
|
status = "okay";
|
|
bus-width = <8>;
|
|
mmc-ddr-1_8v;
|
|
mmc-hs400-1_8v;
|
|
marvell,pad-type = "fixed-1-8v";
|
|
non-removable;
|
|
no-sd;
|
|
no-sdio;
|
|
};
|
|
|
|
&spi0 {
|
|
status = "okay";
|
|
|
|
flash@0 {
|
|
compatible = "jedec,spi-nor";
|
|
reg = <0>;
|
|
spi-max-frequency = <54000000>;
|
|
|
|
partitions {
|
|
compatible = "fixed-partitions";
|
|
#address-cells = <1>;
|
|
#size-cells = <1>;
|
|
|
|
partition@0 {
|
|
label = "firmware";
|
|
reg = <0x0 0x180000>;
|
|
};
|
|
|
|
partition@180000 {
|
|
label = "u-boot-env";
|
|
reg = <0x180000 0x10000>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
&spi_quad_pins {
|
|
function = "gpio";
|
|
};
|
|
|
|
&pinctrl_nb {
|
|
i2c2_recovery_pins: i2c2-recovery-pins {
|
|
groups = "i2c2";
|
|
function = "gpio";
|
|
};
|
|
};
|
|
|
|
&i2c1 {
|
|
status = "okay";
|
|
pinctrl-names = "default", "recovery";
|
|
pinctrl-0 = <&i2c2_pins>;
|
|
pinctrl-1 = <&i2c2_recovery_pins>;
|
|
/delete-property/mrvl,i2c-fast-mode;
|
|
scl-gpios = <&gpionb 2 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
|
sda-gpios = <&gpionb 3 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
|
|
|
temp-sensor@48 {
|
|
compatible = "ti,tmp75c";
|
|
reg = <0x48>;
|
|
};
|
|
|
|
temp-sensor@49 {
|
|
compatible = "ti,tmp75c";
|
|
reg = <0x49>;
|
|
};
|
|
};
|
|
|
|
ð0 {
|
|
status = "okay";
|
|
managed = "in-band-status";
|
|
phys = <&comphy1 0>;
|
|
};
|
|
|
|
ð1 {
|
|
phy-mode = "sgmii";
|
|
status = "okay";
|
|
managed = "in-band-status";
|
|
phys = <&comphy0 1>;
|
|
sfp = <&sfp_eth1>;
|
|
};
|
|
|
|
&usb3 {
|
|
status = "okay";
|
|
phys = <&usb2_utmi_otg_phy>;
|
|
phy-names = "usb2-utmi-otg-phy";
|
|
};
|
|
|
|
&uart0 {
|
|
status = "okay";
|
|
};
|