Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/…
…git/cooloney/linux-leds Pull LED subsystem updates from Bryan Wu: "In this cycle, we finished to merge patches for LED Flash class driver. Other than that we have some bug fixes and new drivers for LED controllers" * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/linux-leds: (33 commits) leds:lp55xx: fix firmware loading error leds: fix max77693-led build errors leds: fix aat1290 build errors leds: aat1290: pass flags parameter to devm_gpiod_get leds: ktd2692: pass flags parameter to devm_gpiod_get drivers/leds: don't use module_init in non-modular leds-cobalt-raq.c leds: aat1290: add support for V4L2 Flash sub-device DT: aat1290: Document handling external strobe sources leds: max77693: add support for V4L2 Flash sub-device media: Add registration helpers for V4L2 flash sub-devices v4l: async: Add a pointer to of_node to struct v4l2_subdev, match it Documentation: leds: Add description of v4l2-flash sub-device leds: add BCM6358 LED driver leds: add DT binding for BCM6358 LED controller leds: fix brightness changing when software blinking is active Documentation: leds-lp5523: describe master fader attributes leds: lp5523: add master_fader support leds: leds-gpio: Allow compile test if !GPIOLIB leds: leds-gpio: Add missing #include <linux/of.h> gpiolib: Add missing dummies for the unified device properties interface ...
- Loading branch information
Showing
31 changed files
with
4,939 additions
and
58 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
* Skyworks Solutions, Inc. AAT1290 Current Regulator for Flash LEDs | ||
|
||
The device is controlled through two pins: FL_EN and EN_SET. The pins when, | ||
asserted high, enable flash strobe and movie mode (max 1/2 of flash current) | ||
respectively. In order to add a capability of selecting the strobe signal source | ||
(e.g. CPU or camera sensor) there is an additional switch required, independent | ||
of the flash chip. The switch is controlled with pin control. | ||
|
||
Required properties: | ||
|
||
- compatible : Must be "skyworks,aat1290". | ||
- flen-gpios : Must be device tree identifier of the flash device FL_EN pin. | ||
- enset-gpios : Must be device tree identifier of the flash device EN_SET pin. | ||
|
||
Optional properties: | ||
- pinctrl-names : Must contain entries: "default", "host", "isp". Entries | ||
"default" and "host" must refer to the same pin configuration | ||
node, which sets the host as a strobe signal provider. Entry | ||
"isp" must refer to the pin configuration node, which sets the | ||
ISP as a strobe signal provider. | ||
|
||
A discrete LED element connected to the device must be represented by a child | ||
node - see Documentation/devicetree/bindings/leds/common.txt. | ||
|
||
Required properties of the LED child node: | ||
- led-max-microamp : see Documentation/devicetree/bindings/leds/common.txt | ||
- flash-max-microamp : see Documentation/devicetree/bindings/leds/common.txt | ||
Maximum flash LED supply current can be calculated using | ||
following formula: I = 1A * 162kohm / Rset. | ||
- flash-timeout-us : see Documentation/devicetree/bindings/leds/common.txt | ||
Maximum flash timeout can be calculated using following | ||
formula: T = 8.82 * 10^9 * Ct. | ||
|
||
Optional properties of the LED child node: | ||
- label : see Documentation/devicetree/bindings/leds/common.txt | ||
|
||
Example (by Ct = 220nF, Rset = 160kohm and exynos4412-trats2 board with | ||
a switch that allows for routing strobe signal either from the host or from | ||
the camera sensor): | ||
|
||
#include "exynos4412.dtsi" | ||
|
||
aat1290 { | ||
compatible = "skyworks,aat1290"; | ||
flen-gpios = <&gpj1 1 GPIO_ACTIVE_HIGH>; | ||
enset-gpios = <&gpj1 2 GPIO_ACTIVE_HIGH>; | ||
|
||
pinctrl-names = "default", "host", "isp"; | ||
pinctrl-0 = <&camera_flash_host>; | ||
pinctrl-1 = <&camera_flash_host>; | ||
pinctrl-2 = <&camera_flash_isp>; | ||
|
||
camera_flash: flash-led { | ||
label = "aat1290-flash"; | ||
led-max-microamp = <520833>; | ||
flash-max-microamp = <1012500>; | ||
flash-timeout-us = <1940000>; | ||
}; | ||
}; | ||
|
||
&pinctrl_0 { | ||
camera_flash_host: camera-flash-host { | ||
samsung,pins = "gpj1-0"; | ||
samsung,pin-function = <1>; | ||
samsung,pin-val = <0>; | ||
}; | ||
|
||
camera_flash_isp: camera-flash-isp { | ||
samsung,pins = "gpj1-0"; | ||
samsung,pin-function = <1>; | ||
samsung,pin-val = <1>; | ||
}; | ||
}; |
309 changes: 309 additions & 0 deletions
309
Documentation/devicetree/bindings/leds/leds-bcm6328.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,309 @@ | ||
LEDs connected to Broadcom BCM6328 controller | ||
|
||
This controller is present on BCM6318, BCM6328, BCM6362 and BCM63268. | ||
In these SoCs it's possible to control LEDs both as GPIOs or by hardware. | ||
However, on some devices there are Serial LEDs (LEDs connected to a 74x164 | ||
controller), which can either be controlled by software (exporting the 74x164 | ||
as spi-gpio. See Documentation/devicetree/bindings/gpio/gpio-74x164.txt), or | ||
by hardware using this driver. | ||
Some of these Serial LEDs are hardware controlled (e.g. ethernet LEDs) and | ||
exporting the 74x164 as spi-gpio prevents those LEDs to be hardware | ||
controlled, so the only chance to keep them working is by using this driver. | ||
|
||
BCM6328 LED controller has a HWDIS register, which controls whether a LED | ||
should be controlled by a hardware signal instead of the MODE register value, | ||
with 0 meaning hardware control enabled and 1 hardware control disabled. This | ||
is usually 1:1 for hardware to LED signals, but through the activity/link | ||
registers you have some limited control over rerouting the LEDs (as | ||
explained later in brcm,link-signal-sources). Even if a LED is hardware | ||
controlled you are still able to make it blink or light it up if it isn't, | ||
but you can't turn it off if the hardware decides to light it up. For this | ||
reason, hardware controlled LEDs aren't registered as LED class devices. | ||
|
||
Required properties: | ||
- compatible : should be "brcm,bcm6328-leds". | ||
- #address-cells : must be 1. | ||
- #size-cells : must be 0. | ||
- reg : BCM6328 LED controller address and size. | ||
|
||
Optional properties: | ||
- brcm,serial-leds : Boolean, enables Serial LEDs. | ||
Default : false | ||
|
||
Each LED is represented as a sub-node of the brcm,bcm6328-leds device. | ||
|
||
LED sub-node required properties: | ||
- reg : LED pin number (only LEDs 0 to 23 are valid). | ||
|
||
LED sub-node optional properties: | ||
a) Optional properties for sub-nodes related to software controlled LEDs: | ||
- label : see Documentation/devicetree/bindings/leds/common.txt | ||
- active-low : Boolean, makes LED active low. | ||
Default : false | ||
- default-state : see | ||
Documentation/devicetree/bindings/leds/leds-gpio.txt | ||
- linux,default-trigger : see | ||
Documentation/devicetree/bindings/leds/common.txt | ||
|
||
b) Optional properties for sub-nodes related to hardware controlled LEDs: | ||
- brcm,hardware-controlled : Boolean, makes this LED hardware controlled. | ||
Default : false | ||
- brcm,link-signal-sources : An array of hardware link | ||
signal sources. Up to four link hardware signals can get muxed into | ||
these LEDs. Only valid for LEDs 0 to 7, where LED signals 0 to 3 may | ||
be muxed to LEDs 0 to 3, and signals 4 to 7 may be muxed to LEDs | ||
4 to 7. A signal can be muxed to more than one LED, and one LED can | ||
have more than one source signal. | ||
- brcm,activity-signal-sources : An array of hardware activity | ||
signal sources. Up to four activity hardware signals can get muxed into | ||
these LEDs. Only valid for LEDs 0 to 7, where LED signals 0 to 3 may | ||
be muxed to LEDs 0 to 3, and signals 4 to 7 may be muxed to LEDs | ||
4 to 7. A signal can be muxed to more than one LED, and one LED can | ||
have more than one source signal. | ||
|
||
Examples: | ||
Scenario 1 : BCM6328 with 4 EPHY LEDs | ||
leds0: led-controller@10000800 { | ||
compatible = "brcm,bcm6328-leds"; | ||
#address-cells = <1>; | ||
#size-cells = <0>; | ||
reg = <0x10000800 0x24>; | ||
|
||
alarm_red@2 { | ||
reg = <2>; | ||
active-low; | ||
label = "red:alarm"; | ||
}; | ||
inet_green@3 { | ||
reg = <3>; | ||
active-low; | ||
label = "green:inet"; | ||
}; | ||
power_green@4 { | ||
reg = <4>; | ||
active-low; | ||
label = "green:power"; | ||
default-state = "on"; | ||
}; | ||
ephy0_spd@17 { | ||
reg = <17>; | ||
brcm,hardware-controlled; | ||
}; | ||
ephy1_spd@18 { | ||
reg = <18>; | ||
brcm,hardware-controlled; | ||
}; | ||
ephy2_spd@19 { | ||
reg = <19>; | ||
brcm,hardware-controlled; | ||
}; | ||
ephy3_spd@20 { | ||
reg = <20>; | ||
brcm,hardware-controlled; | ||
}; | ||
}; | ||
|
||
Scenario 2 : BCM63268 with Serial/GPHY0 LEDs | ||
leds0: led-controller@10001900 { | ||
compatible = "brcm,bcm6328-leds"; | ||
#address-cells = <1>; | ||
#size-cells = <0>; | ||
reg = <0x10001900 0x24>; | ||
brcm,serial-leds; | ||
|
||
gphy0_spd0@0 { | ||
reg = <0>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <0>; | ||
}; | ||
gphy0_spd1@1 { | ||
reg = <1>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <1>; | ||
}; | ||
inet_red@2 { | ||
reg = <2>; | ||
active-low; | ||
label = "red:inet"; | ||
}; | ||
dsl_green@3 { | ||
reg = <3>; | ||
active-low; | ||
label = "green:dsl"; | ||
}; | ||
usb_green@4 { | ||
reg = <4>; | ||
active-low; | ||
label = "green:usb"; | ||
}; | ||
wps_green@7 { | ||
reg = <7>; | ||
active-low; | ||
label = "green:wps"; | ||
}; | ||
inet_green@8 { | ||
reg = <8>; | ||
active-low; | ||
label = "green:inet"; | ||
}; | ||
ephy0_act@9 { | ||
reg = <9>; | ||
brcm,hardware-controlled; | ||
}; | ||
ephy1_act@10 { | ||
reg = <10>; | ||
brcm,hardware-controlled; | ||
}; | ||
ephy2_act@11 { | ||
reg = <11>; | ||
brcm,hardware-controlled; | ||
}; | ||
gphy0_act@12 { | ||
reg = <12>; | ||
brcm,hardware-controlled; | ||
}; | ||
ephy0_spd@13 { | ||
reg = <13>; | ||
brcm,hardware-controlled; | ||
}; | ||
ephy1_spd@14 { | ||
reg = <14>; | ||
brcm,hardware-controlled; | ||
}; | ||
ephy2_spd@15 { | ||
reg = <15>; | ||
brcm,hardware-controlled; | ||
}; | ||
power_green@20 { | ||
reg = <20>; | ||
active-low; | ||
label = "green:power"; | ||
default-state = "on"; | ||
}; | ||
}; | ||
|
||
Scenario 3 : BCM6362 with 1 LED for each EPHY | ||
leds0: led-controller@10001900 { | ||
compatible = "brcm,bcm6328-leds"; | ||
#address-cells = <1>; | ||
#size-cells = <0>; | ||
reg = <0x10001900 0x24>; | ||
|
||
usb@0 { | ||
reg = <0>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <0>; | ||
brcm,activity-signal-sources = <0>; | ||
/* USB link/activity routed to USB LED */ | ||
}; | ||
inet@1 { | ||
reg = <1>; | ||
brcm,hardware-controlled; | ||
brcm,activity-signal-sources = <1>; | ||
/* INET activity routed to INET LED */ | ||
}; | ||
ephy0@4 { | ||
reg = <4>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <4>; | ||
/* EPHY0 link routed to EPHY0 LED */ | ||
}; | ||
ephy1@5 { | ||
reg = <5>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <5>; | ||
/* EPHY1 link routed to EPHY1 LED */ | ||
}; | ||
ephy2@6 { | ||
reg = <6>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <6>; | ||
/* EPHY2 link routed to EPHY2 LED */ | ||
}; | ||
ephy3@7 { | ||
reg = <7>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <7>; | ||
/* EPHY3 link routed to EPHY3 LED */ | ||
}; | ||
power_green@20 { | ||
reg = <20>; | ||
active-low; | ||
label = "green:power"; | ||
default-state = "on"; | ||
}; | ||
}; | ||
|
||
Scenario 4 : BCM6362 with 1 LED for all EPHYs | ||
leds0: led-controller@10001900 { | ||
compatible = "brcm,bcm6328-leds"; | ||
#address-cells = <1>; | ||
#size-cells = <0>; | ||
reg = <0x10001900 0x24>; | ||
|
||
usb@0 { | ||
reg = <0>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <0 1>; | ||
brcm,activity-signal-sources = <0 1>; | ||
/* USB/INET link/activity routed to USB LED */ | ||
}; | ||
ephy@4 { | ||
reg = <4>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <4 5 6 7>; | ||
/* EPHY0/1/2/3 link routed to EPHY0 LED */ | ||
}; | ||
power_green@20 { | ||
reg = <20>; | ||
active-low; | ||
label = "green:power"; | ||
default-state = "on"; | ||
}; | ||
}; | ||
|
||
Scenario 5 : BCM6362 with EPHY LEDs swapped | ||
leds0: led-controller@10001900 { | ||
compatible = "brcm,bcm6328-leds"; | ||
#address-cells = <1>; | ||
#size-cells = <0>; | ||
reg = <0x10001900 0x24>; | ||
|
||
usb@0 { | ||
reg = <0>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <0>; | ||
brcm,activity-signal-sources = <0 1>; | ||
/* USB link/act and INET act routed to USB LED */ | ||
}; | ||
ephy0@4 { | ||
reg = <4>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <7>; | ||
/* EPHY3 link routed to EPHY0 LED */ | ||
}; | ||
ephy1@5 { | ||
reg = <5>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <6>; | ||
/* EPHY2 link routed to EPHY1 LED */ | ||
}; | ||
ephy2@6 { | ||
reg = <6>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <5>; | ||
/* EPHY1 link routed to EPHY2 LED */ | ||
}; | ||
ephy3@7 { | ||
reg = <7>; | ||
brcm,hardware-controlled; | ||
brcm,link-signal-sources = <4>; | ||
/* EPHY0 link routed to EPHY3 LED */ | ||
}; | ||
power_green@20 { | ||
reg = <20>; | ||
active-low; | ||
label = "green:power"; | ||
default-state = "on"; | ||
}; | ||
}; |
Oops, something went wrong.