162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/leds/leds-bcm6328.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: LEDs connected to Broadcom BCM6328 controller 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Álvaro Fernández Rojas <noltari@gmail.com> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cidescription: | 1362306a36Sopenharmony_ci This controller is present on BCM6318, BCM6328, BCM6362 and BCM63268. 1462306a36Sopenharmony_ci In these SoCs it's possible to control LEDs both as GPIOs or by hardware. 1562306a36Sopenharmony_ci However, on some devices there are Serial LEDs (LEDs connected to a 74x164 1662306a36Sopenharmony_ci controller), which can either be controlled by software (exporting the 74x164 1762306a36Sopenharmony_ci as spi-gpio. See 1862306a36Sopenharmony_ci Documentation/devicetree/bindings/gpio/fairchild,74hc595.yaml), or by hardware 1962306a36Sopenharmony_ci using this driver. 2062306a36Sopenharmony_ci Some of these Serial LEDs are hardware controlled (e.g. ethernet LEDs) and 2162306a36Sopenharmony_ci exporting the 74x164 as spi-gpio prevents those LEDs to be hardware 2262306a36Sopenharmony_ci controlled, so the only chance to keep them working is by using this driver. 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci BCM6328 LED controller has a HWDIS register, which controls whether a LED 2562306a36Sopenharmony_ci should be controlled by a hardware signal instead of the MODE register value, 2662306a36Sopenharmony_ci with 0 meaning hardware control enabled and 1 hardware control disabled. This 2762306a36Sopenharmony_ci is usually 1:1 for hardware to LED signals, but through the activity/link 2862306a36Sopenharmony_ci registers you have some limited control over rerouting the LEDs (as 2962306a36Sopenharmony_ci explained later in brcm,link-signal-sources). Even if a LED is hardware 3062306a36Sopenharmony_ci controlled you are still able to make it blink or light it up if it isn't, 3162306a36Sopenharmony_ci but you can't turn it off if the hardware decides to light it up. For this 3262306a36Sopenharmony_ci reason, hardware controlled LEDs aren't registered as LED class devices. 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci Each LED is represented as a sub-node of the brcm,bcm6328-leds device. 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ciproperties: 3762306a36Sopenharmony_ci compatible: 3862306a36Sopenharmony_ci const: brcm,bcm6328-leds 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci reg: 4162306a36Sopenharmony_ci maxItems: 1 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci brcm,serial-leds: 4462306a36Sopenharmony_ci type: boolean 4562306a36Sopenharmony_ci description: Enables Serial LEDs. 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci brcm,serial-mux: 4862306a36Sopenharmony_ci type: boolean 4962306a36Sopenharmony_ci description: Enables Serial LEDs multiplexing. 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci brcm,serial-clk-low: 5262306a36Sopenharmony_ci type: boolean 5362306a36Sopenharmony_ci description: Makes clock signal active low. 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci brcm,serial-dat-low: 5662306a36Sopenharmony_ci type: boolean 5762306a36Sopenharmony_ci description: Makes data signal active low. 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci brcm,serial-shift-inv: 6062306a36Sopenharmony_ci type: boolean 6162306a36Sopenharmony_ci description: Inverts Serial LEDs shift direction. 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci "#address-cells": 6462306a36Sopenharmony_ci const: 1 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci "#size-cells": 6762306a36Sopenharmony_ci const: 0 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_cipatternProperties: 7062306a36Sopenharmony_ci "@[a-f0-9]+$": 7162306a36Sopenharmony_ci type: object 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci $ref: common.yaml# 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci properties: 7662306a36Sopenharmony_ci reg: 7762306a36Sopenharmony_ci items: 7862306a36Sopenharmony_ci - maximum: 23 7962306a36Sopenharmony_ci description: LED pin number (only LEDs 0 to 23 are valid). 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci active-low: 8262306a36Sopenharmony_ci type: boolean 8362306a36Sopenharmony_ci description: Makes LED active low. 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci brcm,hardware-controlled: 8662306a36Sopenharmony_ci type: boolean 8762306a36Sopenharmony_ci description: Makes this LED hardware controlled. 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci brcm,link-signal-sources: 9062306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32-array 9162306a36Sopenharmony_ci minItems: 1 9262306a36Sopenharmony_ci maxItems: 4 9362306a36Sopenharmony_ci description: > 9462306a36Sopenharmony_ci An array of hardware link signal sources. Up to four link hardware 9562306a36Sopenharmony_ci signals can get muxed into these LEDs. Only valid for LEDs 0 to 7, 9662306a36Sopenharmony_ci where LED signals 0 to 3 may be muxed to LEDs 0 to 3, and signals 4 to 9762306a36Sopenharmony_ci 7 may be muxed to LEDs 4 to 7. A signal can be muxed to more than one 9862306a36Sopenharmony_ci LED, and one LED can have more than one source signal. 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci brcm,activity-signal-sources: 10162306a36Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32-array 10262306a36Sopenharmony_ci minItems: 1 10362306a36Sopenharmony_ci maxItems: 4 10462306a36Sopenharmony_ci description: > 10562306a36Sopenharmony_ci An array of hardware activity signal sources. Up to four activity 10662306a36Sopenharmony_ci hardware signals can get muxed into these LEDs. Only valid for LEDs 0 10762306a36Sopenharmony_ci to 7, where LED signals 0 to 3 may be muxed to LEDs 0 to 3, and 10862306a36Sopenharmony_ci signals 4 to 7 may be muxed to LEDs 4 to 7. A signal can be muxed to 10962306a36Sopenharmony_ci more than one LED, and one LED can have more than one source signal. 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci required: 11262306a36Sopenharmony_ci - reg 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci unevaluatedProperties: false 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_cirequired: 11762306a36Sopenharmony_ci - reg 11862306a36Sopenharmony_ci - "#address-cells" 11962306a36Sopenharmony_ci - "#size-cells" 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ciadditionalProperties: false 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ciexamples: 12462306a36Sopenharmony_ci - | 12562306a36Sopenharmony_ci /* BCM6328 with 4 EPHY LEDs */ 12662306a36Sopenharmony_ci led-controller@10000800 { 12762306a36Sopenharmony_ci compatible = "brcm,bcm6328-leds"; 12862306a36Sopenharmony_ci #address-cells = <1>; 12962306a36Sopenharmony_ci #size-cells = <0>; 13062306a36Sopenharmony_ci reg = <0x10000800 0x24>; 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci alarm_red@2 { 13362306a36Sopenharmony_ci reg = <2>; 13462306a36Sopenharmony_ci active-low; 13562306a36Sopenharmony_ci label = "red:alarm"; 13662306a36Sopenharmony_ci }; 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci inet_green@3 { 13962306a36Sopenharmony_ci reg = <3>; 14062306a36Sopenharmony_ci active-low; 14162306a36Sopenharmony_ci label = "green:inet"; 14262306a36Sopenharmony_ci }; 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci power_green@4 { 14562306a36Sopenharmony_ci reg = <4>; 14662306a36Sopenharmony_ci active-low; 14762306a36Sopenharmony_ci label = "green:power"; 14862306a36Sopenharmony_ci default-state = "on"; 14962306a36Sopenharmony_ci }; 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci ephy0_spd@17 { 15262306a36Sopenharmony_ci reg = <17>; 15362306a36Sopenharmony_ci brcm,hardware-controlled; 15462306a36Sopenharmony_ci }; 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci ephy1_spd@18 { 15762306a36Sopenharmony_ci reg = <18>; 15862306a36Sopenharmony_ci brcm,hardware-controlled; 15962306a36Sopenharmony_ci }; 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci ephy2_spd@19 { 16262306a36Sopenharmony_ci reg = <19>; 16362306a36Sopenharmony_ci brcm,hardware-controlled; 16462306a36Sopenharmony_ci }; 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci ephy3_spd@20 { 16762306a36Sopenharmony_ci reg = <20>; 16862306a36Sopenharmony_ci brcm,hardware-controlled; 16962306a36Sopenharmony_ci }; 17062306a36Sopenharmony_ci }; 17162306a36Sopenharmony_ci - | 17262306a36Sopenharmony_ci /* BCM63268 with Serial/GPHY0 LEDs */ 17362306a36Sopenharmony_ci led-controller@10001900 { 17462306a36Sopenharmony_ci compatible = "brcm,bcm6328-leds"; 17562306a36Sopenharmony_ci #address-cells = <1>; 17662306a36Sopenharmony_ci #size-cells = <0>; 17762306a36Sopenharmony_ci reg = <0x10001900 0x24>; 17862306a36Sopenharmony_ci brcm,serial-leds; 17962306a36Sopenharmony_ci brcm,serial-dat-low; 18062306a36Sopenharmony_ci brcm,serial-shift-inv; 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci gphy0_spd0@0 { 18362306a36Sopenharmony_ci reg = <0>; 18462306a36Sopenharmony_ci brcm,hardware-controlled; 18562306a36Sopenharmony_ci brcm,link-signal-sources = <0>; 18662306a36Sopenharmony_ci }; 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci gphy0_spd1@1 { 18962306a36Sopenharmony_ci reg = <1>; 19062306a36Sopenharmony_ci brcm,hardware-controlled; 19162306a36Sopenharmony_ci brcm,link-signal-sources = <1>; 19262306a36Sopenharmony_ci }; 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci inet_red@2 { 19562306a36Sopenharmony_ci reg = <2>; 19662306a36Sopenharmony_ci active-low; 19762306a36Sopenharmony_ci label = "red:inet"; 19862306a36Sopenharmony_ci }; 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci dsl_green@3 { 20162306a36Sopenharmony_ci reg = <3>; 20262306a36Sopenharmony_ci active-low; 20362306a36Sopenharmony_ci label = "green:dsl"; 20462306a36Sopenharmony_ci }; 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ci usb_green@4 { 20762306a36Sopenharmony_ci reg = <4>; 20862306a36Sopenharmony_ci active-low; 20962306a36Sopenharmony_ci label = "green:usb"; 21062306a36Sopenharmony_ci }; 21162306a36Sopenharmony_ci 21262306a36Sopenharmony_ci wps_green@7 { 21362306a36Sopenharmony_ci reg = <7>; 21462306a36Sopenharmony_ci active-low; 21562306a36Sopenharmony_ci label = "green:wps"; 21662306a36Sopenharmony_ci }; 21762306a36Sopenharmony_ci 21862306a36Sopenharmony_ci inet_green@8 { 21962306a36Sopenharmony_ci reg = <8>; 22062306a36Sopenharmony_ci active-low; 22162306a36Sopenharmony_ci label = "green:inet"; 22262306a36Sopenharmony_ci }; 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci ephy0_act@9 { 22562306a36Sopenharmony_ci reg = <9>; 22662306a36Sopenharmony_ci brcm,hardware-controlled; 22762306a36Sopenharmony_ci }; 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci ephy1_act@10 { 23062306a36Sopenharmony_ci reg = <10>; 23162306a36Sopenharmony_ci brcm,hardware-controlled; 23262306a36Sopenharmony_ci }; 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_ci ephy2_act@11 { 23562306a36Sopenharmony_ci reg = <11>; 23662306a36Sopenharmony_ci brcm,hardware-controlled; 23762306a36Sopenharmony_ci }; 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_ci gphy0_act@12 { 24062306a36Sopenharmony_ci reg = <12>; 24162306a36Sopenharmony_ci brcm,hardware-controlled; 24262306a36Sopenharmony_ci }; 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ci ephy0_spd@13 { 24562306a36Sopenharmony_ci reg = <13>; 24662306a36Sopenharmony_ci brcm,hardware-controlled; 24762306a36Sopenharmony_ci }; 24862306a36Sopenharmony_ci 24962306a36Sopenharmony_ci ephy1_spd@14 { 25062306a36Sopenharmony_ci reg = <14>; 25162306a36Sopenharmony_ci brcm,hardware-controlled; 25262306a36Sopenharmony_ci }; 25362306a36Sopenharmony_ci 25462306a36Sopenharmony_ci ephy2_spd@15 { 25562306a36Sopenharmony_ci reg = <15>; 25662306a36Sopenharmony_ci brcm,hardware-controlled; 25762306a36Sopenharmony_ci }; 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ci power_green@20 { 26062306a36Sopenharmony_ci reg = <20>; 26162306a36Sopenharmony_ci active-low; 26262306a36Sopenharmony_ci label = "green:power"; 26362306a36Sopenharmony_ci default-state = "on"; 26462306a36Sopenharmony_ci }; 26562306a36Sopenharmony_ci }; 26662306a36Sopenharmony_ci - | 26762306a36Sopenharmony_ci /* BCM6362 with 1 LED for each EPHY */ 26862306a36Sopenharmony_ci led-controller@10001900 { 26962306a36Sopenharmony_ci compatible = "brcm,bcm6328-leds"; 27062306a36Sopenharmony_ci #address-cells = <1>; 27162306a36Sopenharmony_ci #size-cells = <0>; 27262306a36Sopenharmony_ci reg = <0x10001900 0x24>; 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_ci usb@0 { 27562306a36Sopenharmony_ci reg = <0>; 27662306a36Sopenharmony_ci brcm,hardware-controlled; 27762306a36Sopenharmony_ci brcm,link-signal-sources = <0>; 27862306a36Sopenharmony_ci brcm,activity-signal-sources = <0>; 27962306a36Sopenharmony_ci /* USB link/activity routed to USB LED */ 28062306a36Sopenharmony_ci }; 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ci inet@1 { 28362306a36Sopenharmony_ci reg = <1>; 28462306a36Sopenharmony_ci brcm,hardware-controlled; 28562306a36Sopenharmony_ci brcm,activity-signal-sources = <1>; 28662306a36Sopenharmony_ci /* INET activity routed to INET LED */ 28762306a36Sopenharmony_ci }; 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci ephy0@4 { 29062306a36Sopenharmony_ci reg = <4>; 29162306a36Sopenharmony_ci brcm,hardware-controlled; 29262306a36Sopenharmony_ci brcm,link-signal-sources = <4>; 29362306a36Sopenharmony_ci /* EPHY0 link routed to EPHY0 LED */ 29462306a36Sopenharmony_ci }; 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci ephy1@5 { 29762306a36Sopenharmony_ci reg = <5>; 29862306a36Sopenharmony_ci brcm,hardware-controlled; 29962306a36Sopenharmony_ci brcm,link-signal-sources = <5>; 30062306a36Sopenharmony_ci /* EPHY1 link routed to EPHY1 LED */ 30162306a36Sopenharmony_ci }; 30262306a36Sopenharmony_ci 30362306a36Sopenharmony_ci ephy2@6 { 30462306a36Sopenharmony_ci reg = <6>; 30562306a36Sopenharmony_ci brcm,hardware-controlled; 30662306a36Sopenharmony_ci brcm,link-signal-sources = <6>; 30762306a36Sopenharmony_ci /* EPHY2 link routed to EPHY2 LED */ 30862306a36Sopenharmony_ci }; 30962306a36Sopenharmony_ci 31062306a36Sopenharmony_ci ephy3@7 { 31162306a36Sopenharmony_ci reg = <7>; 31262306a36Sopenharmony_ci brcm,hardware-controlled; 31362306a36Sopenharmony_ci brcm,link-signal-sources = <7>; 31462306a36Sopenharmony_ci /* EPHY3 link routed to EPHY3 LED */ 31562306a36Sopenharmony_ci }; 31662306a36Sopenharmony_ci 31762306a36Sopenharmony_ci power_green@20 { 31862306a36Sopenharmony_ci reg = <20>; 31962306a36Sopenharmony_ci active-low; 32062306a36Sopenharmony_ci label = "green:power"; 32162306a36Sopenharmony_ci default-state = "on"; 32262306a36Sopenharmony_ci }; 32362306a36Sopenharmony_ci }; 32462306a36Sopenharmony_ci - | 32562306a36Sopenharmony_ci /* BCM6362 with 1 LED for all EPHYs */ 32662306a36Sopenharmony_ci led-controller@10001900 { 32762306a36Sopenharmony_ci compatible = "brcm,bcm6328-leds"; 32862306a36Sopenharmony_ci #address-cells = <1>; 32962306a36Sopenharmony_ci #size-cells = <0>; 33062306a36Sopenharmony_ci reg = <0x10001900 0x24>; 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_ci usb@0 { 33362306a36Sopenharmony_ci reg = <0>; 33462306a36Sopenharmony_ci brcm,hardware-controlled; 33562306a36Sopenharmony_ci brcm,link-signal-sources = <0 1>; 33662306a36Sopenharmony_ci brcm,activity-signal-sources = <0 1>; 33762306a36Sopenharmony_ci /* USB/INET link/activity routed to USB LED */ 33862306a36Sopenharmony_ci }; 33962306a36Sopenharmony_ci 34062306a36Sopenharmony_ci ephy@4 { 34162306a36Sopenharmony_ci reg = <4>; 34262306a36Sopenharmony_ci brcm,hardware-controlled; 34362306a36Sopenharmony_ci brcm,link-signal-sources = <4 5 6 7>; 34462306a36Sopenharmony_ci /* EPHY0/1/2/3 link routed to EPHY0 LED */ 34562306a36Sopenharmony_ci }; 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_ci power_green@20 { 34862306a36Sopenharmony_ci reg = <20>; 34962306a36Sopenharmony_ci active-low; 35062306a36Sopenharmony_ci label = "green:power"; 35162306a36Sopenharmony_ci default-state = "on"; 35262306a36Sopenharmony_ci }; 35362306a36Sopenharmony_ci }; 35462306a36Sopenharmony_ci - | 35562306a36Sopenharmony_ci /* BCM6362 with EPHY LEDs swapped */ 35662306a36Sopenharmony_ci led-controller@10001900 { 35762306a36Sopenharmony_ci compatible = "brcm,bcm6328-leds"; 35862306a36Sopenharmony_ci #address-cells = <1>; 35962306a36Sopenharmony_ci #size-cells = <0>; 36062306a36Sopenharmony_ci reg = <0x10001900 0x24>; 36162306a36Sopenharmony_ci 36262306a36Sopenharmony_ci usb@0 { 36362306a36Sopenharmony_ci reg = <0>; 36462306a36Sopenharmony_ci brcm,hardware-controlled; 36562306a36Sopenharmony_ci brcm,link-signal-sources = <0>; 36662306a36Sopenharmony_ci brcm,activity-signal-sources = <0 1>; 36762306a36Sopenharmony_ci /* USB link/act and INET act routed to USB LED */ 36862306a36Sopenharmony_ci }; 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_ci ephy0@4 { 37162306a36Sopenharmony_ci reg = <4>; 37262306a36Sopenharmony_ci brcm,hardware-controlled; 37362306a36Sopenharmony_ci brcm,link-signal-sources = <7>; 37462306a36Sopenharmony_ci /* EPHY3 link routed to EPHY0 LED */ 37562306a36Sopenharmony_ci }; 37662306a36Sopenharmony_ci 37762306a36Sopenharmony_ci ephy1@5 { 37862306a36Sopenharmony_ci reg = <5>; 37962306a36Sopenharmony_ci brcm,hardware-controlled; 38062306a36Sopenharmony_ci brcm,link-signal-sources = <6>; 38162306a36Sopenharmony_ci /* EPHY2 link routed to EPHY1 LED */ 38262306a36Sopenharmony_ci }; 38362306a36Sopenharmony_ci 38462306a36Sopenharmony_ci ephy2@6 { 38562306a36Sopenharmony_ci reg = <6>; 38662306a36Sopenharmony_ci brcm,hardware-controlled; 38762306a36Sopenharmony_ci brcm,link-signal-sources = <5>; 38862306a36Sopenharmony_ci /* EPHY1 link routed to EPHY2 LED */ 38962306a36Sopenharmony_ci }; 39062306a36Sopenharmony_ci 39162306a36Sopenharmony_ci ephy3@7 { 39262306a36Sopenharmony_ci reg = <7>; 39362306a36Sopenharmony_ci brcm,hardware-controlled; 39462306a36Sopenharmony_ci brcm,link-signal-sources = <4>; 39562306a36Sopenharmony_ci /* EPHY0 link routed to EPHY3 LED */ 39662306a36Sopenharmony_ci }; 39762306a36Sopenharmony_ci 39862306a36Sopenharmony_ci power_green@20 { 39962306a36Sopenharmony_ci reg = <20>; 40062306a36Sopenharmony_ci active-low; 40162306a36Sopenharmony_ci label = "green:power"; 40262306a36Sopenharmony_ci default-state = "on"; 40362306a36Sopenharmony_ci }; 40462306a36Sopenharmony_ci }; 405