Skip to content

Commit

Permalink
Merge tag 'led_fixes-4.14-rc3' of git://git.kernel.org/pub/scm/linux/…
Browse files Browse the repository at this point in the history
…kernel/git/j.anaszewski/linux-leds

Pull LED fixes from Jacek Anaszewski:
 "Four fixes for the as3645a LED flash controller and one update to
  MAINTAINERS"

* tag 'led_fixes-4.14-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds:
  MAINTAINERS: Add entry for MediaTek PMIC LED driver
  as3645a: Unregister indicator LED on device unbind
  as3645a: Use integer numbers for parsing LEDs
  dt: bindings: as3645a: Use LED number to refer to LEDs
  as3645a: Use ams,input-max-microamp as documented in DT bindings
  • Loading branch information
torvalds committed Sep 30, 2017
2 parents 99637e4 + f3a0c7b commit 95dcc4d
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 16 deletions.
28 changes: 18 additions & 10 deletions Documentation/devicetree/bindings/leds/ams,as3645a.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,14 @@ Required properties

compatible : Must be "ams,as3645a".
reg : The I2C address of the device. Typically 0x30.
#address-cells : 1
#size-cells : 0


Required properties of the "flash" child node
=============================================
Required properties of the flash child node (0)
===============================================

reg: 0
flash-timeout-us: Flash timeout in microseconds. The value must be in
the range [100000, 850000] and divisible by 50000.
flash-max-microamp: Maximum flash current in microamperes. Has to be
Expand All @@ -33,20 +36,21 @@ ams,input-max-microamp: Maximum flash controller input current. The
and divisible by 50000.


Optional properties of the "flash" child node
=============================================
Optional properties of the flash child node
===========================================

label : The label of the flash LED.


Required properties of the "indicator" child node
=================================================
Required properties of the indicator child node (1)
===================================================

reg: 1
led-max-microamp: Maximum indicator current. The allowed values are
2500, 5000, 7500 and 10000.

Optional properties of the "indicator" child node
=================================================
Optional properties of the indicator child node
===============================================

label : The label of the indicator LED.

Expand All @@ -55,16 +59,20 @@ Example
=======

as3645a@30 {
#address-cells: 1
#size-cells: 0
reg = <0x30>;
compatible = "ams,as3645a";
flash {
flash@0 {
reg = <0x0>;
flash-timeout-us = <150000>;
flash-max-microamp = <320000>;
led-max-microamp = <60000>;
ams,input-max-microamp = <1750000>;
label = "as3645a:flash";
};
indicator {
indicator@1 {
reg = <0x1>;
led-max-microamp = <10000>;
label = "as3645a:indicator";
};
Expand Down
6 changes: 6 additions & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -8597,6 +8597,12 @@ M: Sean Wang <[email protected]>
S: Maintained
F: drivers/media/rc/mtk-cir.c

MEDIATEK PMIC LED DRIVER
M: Sean Wang <[email protected]>
S: Maintained
F: drivers/leds/leds-mt6323.c
F: Documentation/devicetree/bindings/leds/leds-mt6323.txt

MEDIATEK ETHERNET DRIVER
M: Felix Fietkau <[email protected]>
M: John Crispin <[email protected]>
Expand Down
10 changes: 7 additions & 3 deletions arch/arm/boot/dts/omap3-n950-n9.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -267,15 +267,19 @@
clock-frequency = <400000>;

as3645a@30 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x30>;
compatible = "ams,as3645a";
flash {
flash@0 {
reg = <0x0>;
flash-timeout-us = <150000>;
flash-max-microamp = <320000>;
led-max-microamp = <60000>;
peak-current-limit = <1750000>;
ams,input-max-microamp = <1750000>;
};
indicator {
indicator@1 {
reg = <0x1>;
led-max-microamp = <10000>;
};
};
Expand Down
29 changes: 26 additions & 3 deletions drivers/leds/leds-as3645a.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,10 @@
#define AS_PEAK_mA_TO_REG(a) \
((min_t(u32, AS_PEAK_mA_MAX, a) - 1250) / 250)

/* LED numbers for Devicetree */
#define AS_LED_FLASH 0
#define AS_LED_INDICATOR 1

enum as_mode {
AS_MODE_EXT_TORCH = 0 << AS_CONTROL_MODE_SETTING_SHIFT,
AS_MODE_INDICATOR = 1 << AS_CONTROL_MODE_SETTING_SHIFT,
Expand Down Expand Up @@ -491,10 +495,29 @@ static int as3645a_parse_node(struct as3645a *flash,
struct device_node *node)
{
struct as3645a_config *cfg = &flash->cfg;
struct device_node *child;
const char *name;
int rval;

flash->flash_node = of_get_child_by_name(node, "flash");
for_each_child_of_node(node, child) {
u32 id = 0;

of_property_read_u32(child, "reg", &id);

switch (id) {
case AS_LED_FLASH:
flash->flash_node = of_node_get(child);
break;
case AS_LED_INDICATOR:
flash->indicator_node = of_node_get(child);
break;
default:
dev_warn(&flash->client->dev,
"unknown LED %u encountered, ignoring\n", id);
break;
}
}

if (!flash->flash_node) {
dev_err(&flash->client->dev, "can't find flash node\n");
return -ENODEV;
Expand Down Expand Up @@ -534,11 +557,10 @@ static int as3645a_parse_node(struct as3645a *flash,
of_property_read_u32(flash->flash_node, "voltage-reference",
&cfg->voltage_reference);

of_property_read_u32(flash->flash_node, "peak-current-limit",
of_property_read_u32(flash->flash_node, "ams,input-max-microamp",
&cfg->peak);
cfg->peak = AS_PEAK_mA_TO_REG(cfg->peak);

flash->indicator_node = of_get_child_by_name(node, "indicator");
if (!flash->indicator_node) {
dev_warn(&flash->client->dev,
"can't find indicator node\n");
Expand Down Expand Up @@ -721,6 +743,7 @@ static int as3645a_remove(struct i2c_client *client)
as3645a_set_control(flash, AS_MODE_EXT_TORCH, false);

v4l2_flash_release(flash->vf);
v4l2_flash_release(flash->vfind);

led_classdev_flash_unregister(&flash->fled);
led_classdev_unregister(&flash->iled_cdev);
Expand Down

0 comments on commit 95dcc4d

Please sign in to comment.