1*4882a593SmuzhiyunLEDs connected to Broadcom BCM6328 controller 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunThis controller is present on BCM6318, BCM6328, BCM6362 and BCM63268. 4*4882a593SmuzhiyunIn these SoCs it's possible to control LEDs both as GPIOs or by hardware. 5*4882a593SmuzhiyunHowever, on some devices there are Serial LEDs (LEDs connected to a 74x164 6*4882a593Smuzhiyuncontroller), which can either be controlled by software (exporting the 74x164 7*4882a593Smuzhiyunas spi-gpio. See Documentation/devicetree/bindings/gpio/gpio-74x164.txt), or 8*4882a593Smuzhiyunby hardware using this driver. 9*4882a593SmuzhiyunSome of these Serial LEDs are hardware controlled (e.g. ethernet LEDs) and 10*4882a593Smuzhiyunexporting the 74x164 as spi-gpio prevents those LEDs to be hardware 11*4882a593Smuzhiyuncontrolled, so the only chance to keep them working is by using this driver. 12*4882a593Smuzhiyun 13*4882a593SmuzhiyunRequired properties: 14*4882a593Smuzhiyun - compatible : should be "brcm,bcm6328-leds". 15*4882a593Smuzhiyun - #address-cells : must be 1. 16*4882a593Smuzhiyun - #size-cells : must be 0. 17*4882a593Smuzhiyun - reg : BCM6328 LED controller address and size. 18*4882a593Smuzhiyun 19*4882a593SmuzhiyunOptional properties: 20*4882a593Smuzhiyun - brcm,serial-leds : Boolean, enables Serial LEDs. 21*4882a593Smuzhiyun Default : false 22*4882a593Smuzhiyun - brcm,serial-mux : Boolean, enables Serial LEDs multiplexing. 23*4882a593Smuzhiyun Default : false 24*4882a593Smuzhiyun - brcm,serial-clk-low : Boolean, makes clock signal active low. 25*4882a593Smuzhiyun Default : false 26*4882a593Smuzhiyun - brcm,serial-dat-low : Boolean, makes data signal active low. 27*4882a593Smuzhiyun Default : false 28*4882a593Smuzhiyun - brcm,serial-shift-inv : Boolean, inverts Serial LEDs shift direction. 29*4882a593Smuzhiyun Default : false 30*4882a593Smuzhiyun 31*4882a593SmuzhiyunEach LED is represented as a sub-node of the brcm,bcm6328-leds device. 32*4882a593Smuzhiyun 33*4882a593SmuzhiyunLED sub-node required properties: 34*4882a593Smuzhiyun - reg : LED pin number (only LEDs 0 to 23 are valid). 35*4882a593Smuzhiyun 36*4882a593SmuzhiyunLED sub-node optional properties: 37*4882a593Smuzhiyun - label : see Documentation/devicetree/bindings/leds/common.txt 38*4882a593Smuzhiyun - active-low : Boolean, makes LED active low. 39*4882a593Smuzhiyun Default : false 40*4882a593Smuzhiyun 41*4882a593SmuzhiyunExamples: 42*4882a593SmuzhiyunScenario 1 : BCM6328 with 4 GPIO LEDs 43*4882a593Smuzhiyun leds0: led-controller@10000800 { 44*4882a593Smuzhiyun compatible = "brcm,bcm6328-leds"; 45*4882a593Smuzhiyun #address-cells = <1>; 46*4882a593Smuzhiyun #size-cells = <0>; 47*4882a593Smuzhiyun reg = <0x10000800 0x24>; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun alarm_red@2 { 50*4882a593Smuzhiyun reg = <2>; 51*4882a593Smuzhiyun active-low; 52*4882a593Smuzhiyun label = "red:alarm"; 53*4882a593Smuzhiyun }; 54*4882a593Smuzhiyun inet_green@3 { 55*4882a593Smuzhiyun reg = <3>; 56*4882a593Smuzhiyun active-low; 57*4882a593Smuzhiyun label = "green:inet"; 58*4882a593Smuzhiyun }; 59*4882a593Smuzhiyun power_green@4 { 60*4882a593Smuzhiyun reg = <4>; 61*4882a593Smuzhiyun active-low; 62*4882a593Smuzhiyun label = "green:power"; 63*4882a593Smuzhiyun }; 64*4882a593Smuzhiyun }; 65*4882a593Smuzhiyun 66*4882a593SmuzhiyunScenario 2 : BCM63268 with Serial LEDs 67*4882a593Smuzhiyun leds0: led-controller@10001900 { 68*4882a593Smuzhiyun compatible = "brcm,bcm6328-leds"; 69*4882a593Smuzhiyun #address-cells = <1>; 70*4882a593Smuzhiyun #size-cells = <0>; 71*4882a593Smuzhiyun reg = <0x10001900 0x24>; 72*4882a593Smuzhiyun brcm,serial-leds; 73*4882a593Smuzhiyun brcm,serial-dat-low; 74*4882a593Smuzhiyun brcm,serial-shift-inv; 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun inet_red@2 { 77*4882a593Smuzhiyun reg = <2>; 78*4882a593Smuzhiyun active-low; 79*4882a593Smuzhiyun label = "red:inet"; 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun dsl_green@3 { 82*4882a593Smuzhiyun reg = <3>; 83*4882a593Smuzhiyun active-low; 84*4882a593Smuzhiyun label = "green:dsl"; 85*4882a593Smuzhiyun }; 86*4882a593Smuzhiyun usb_green@4 { 87*4882a593Smuzhiyun reg = <4>; 88*4882a593Smuzhiyun active-low; 89*4882a593Smuzhiyun label = "green:usb"; 90*4882a593Smuzhiyun }; 91*4882a593Smuzhiyun wps_green@7 { 92*4882a593Smuzhiyun reg = <7>; 93*4882a593Smuzhiyun active-low; 94*4882a593Smuzhiyun label = "green:wps"; 95*4882a593Smuzhiyun }; 96*4882a593Smuzhiyun inet_green@8 { 97*4882a593Smuzhiyun reg = <8>; 98*4882a593Smuzhiyun active-low; 99*4882a593Smuzhiyun label = "green:inet"; 100*4882a593Smuzhiyun }; 101*4882a593Smuzhiyun power_green@20 { 102*4882a593Smuzhiyun reg = <20>; 103*4882a593Smuzhiyun active-low; 104*4882a593Smuzhiyun label = "green:power"; 105*4882a593Smuzhiyun }; 106*4882a593Smuzhiyun }; 107