Commit 95dcc4dc authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'led_fixes-4.14-rc3' of...

Merge tag 'led_fixes-4.14-rc3' of git://git.kernel.org/pub/scm/linux/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
parents 99637e42 f3a0c7b3
...@@ -15,11 +15,14 @@ Required properties ...@@ -15,11 +15,14 @@ Required properties
compatible : Must be "ams,as3645a". compatible : Must be "ams,as3645a".
reg : The I2C address of the device. Typically 0x30. 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 flash-timeout-us: Flash timeout in microseconds. The value must be in
the range [100000, 850000] and divisible by 50000. the range [100000, 850000] and divisible by 50000.
flash-max-microamp: Maximum flash current in microamperes. Has to be flash-max-microamp: Maximum flash current in microamperes. Has to be
...@@ -33,20 +36,21 @@ ams,input-max-microamp: Maximum flash controller input current. The ...@@ -33,20 +36,21 @@ ams,input-max-microamp: Maximum flash controller input current. The
and divisible by 50000. 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. 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 led-max-microamp: Maximum indicator current. The allowed values are
2500, 5000, 7500 and 10000. 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. label : The label of the indicator LED.
...@@ -55,16 +59,20 @@ Example ...@@ -55,16 +59,20 @@ Example
======= =======
as3645a@30 { as3645a@30 {
#address-cells: 1
#size-cells: 0
reg = <0x30>; reg = <0x30>;
compatible = "ams,as3645a"; compatible = "ams,as3645a";
flash { flash@0 {
reg = <0x0>;
flash-timeout-us = <150000>; flash-timeout-us = <150000>;
flash-max-microamp = <320000>; flash-max-microamp = <320000>;
led-max-microamp = <60000>; led-max-microamp = <60000>;
ams,input-max-microamp = <1750000>; ams,input-max-microamp = <1750000>;
label = "as3645a:flash"; label = "as3645a:flash";
}; };
indicator { indicator@1 {
reg = <0x1>;
led-max-microamp = <10000>; led-max-microamp = <10000>;
label = "as3645a:indicator"; label = "as3645a:indicator";
}; };
......
...@@ -8597,6 +8597,12 @@ M: Sean Wang <sean.wang@mediatek.com> ...@@ -8597,6 +8597,12 @@ M: Sean Wang <sean.wang@mediatek.com>
S: Maintained S: Maintained
F: drivers/media/rc/mtk-cir.c F: drivers/media/rc/mtk-cir.c
MEDIATEK PMIC LED DRIVER
M: Sean Wang <sean.wang@mediatek.com>
S: Maintained
F: drivers/leds/leds-mt6323.c
F: Documentation/devicetree/bindings/leds/leds-mt6323.txt
MEDIATEK ETHERNET DRIVER MEDIATEK ETHERNET DRIVER
M: Felix Fietkau <nbd@openwrt.org> M: Felix Fietkau <nbd@openwrt.org>
M: John Crispin <john@phrozen.org> M: John Crispin <john@phrozen.org>
......
...@@ -267,15 +267,19 @@ &i2c2 { ...@@ -267,15 +267,19 @@ &i2c2 {
clock-frequency = <400000>; clock-frequency = <400000>;
as3645a@30 { as3645a@30 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x30>; reg = <0x30>;
compatible = "ams,as3645a"; compatible = "ams,as3645a";
flash { flash@0 {
reg = <0x0>;
flash-timeout-us = <150000>; flash-timeout-us = <150000>;
flash-max-microamp = <320000>; flash-max-microamp = <320000>;
led-max-microamp = <60000>; led-max-microamp = <60000>;
peak-current-limit = <1750000>; ams,input-max-microamp = <1750000>;
}; };
indicator { indicator@1 {
reg = <0x1>;
led-max-microamp = <10000>; led-max-microamp = <10000>;
}; };
}; };
......
...@@ -112,6 +112,10 @@ ...@@ -112,6 +112,10 @@
#define AS_PEAK_mA_TO_REG(a) \ #define AS_PEAK_mA_TO_REG(a) \
((min_t(u32, AS_PEAK_mA_MAX, a) - 1250) / 250) ((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 { enum as_mode {
AS_MODE_EXT_TORCH = 0 << AS_CONTROL_MODE_SETTING_SHIFT, AS_MODE_EXT_TORCH = 0 << AS_CONTROL_MODE_SETTING_SHIFT,
AS_MODE_INDICATOR = 1 << AS_CONTROL_MODE_SETTING_SHIFT, AS_MODE_INDICATOR = 1 << AS_CONTROL_MODE_SETTING_SHIFT,
...@@ -491,10 +495,29 @@ static int as3645a_parse_node(struct as3645a *flash, ...@@ -491,10 +495,29 @@ static int as3645a_parse_node(struct as3645a *flash,
struct device_node *node) struct device_node *node)
{ {
struct as3645a_config *cfg = &flash->cfg; struct as3645a_config *cfg = &flash->cfg;
struct device_node *child;
const char *name; const char *name;
int rval; 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) { if (!flash->flash_node) {
dev_err(&flash->client->dev, "can't find flash node\n"); dev_err(&flash->client->dev, "can't find flash node\n");
return -ENODEV; return -ENODEV;
...@@ -534,11 +557,10 @@ static int as3645a_parse_node(struct as3645a *flash, ...@@ -534,11 +557,10 @@ static int as3645a_parse_node(struct as3645a *flash,
of_property_read_u32(flash->flash_node, "voltage-reference", of_property_read_u32(flash->flash_node, "voltage-reference",
&cfg->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);
cfg->peak = AS_PEAK_mA_TO_REG(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) { if (!flash->indicator_node) {
dev_warn(&flash->client->dev, dev_warn(&flash->client->dev,
"can't find indicator node\n"); "can't find indicator node\n");
...@@ -721,6 +743,7 @@ static int as3645a_remove(struct i2c_client *client) ...@@ -721,6 +743,7 @@ static int as3645a_remove(struct i2c_client *client)
as3645a_set_control(flash, AS_MODE_EXT_TORCH, false); as3645a_set_control(flash, AS_MODE_EXT_TORCH, false);
v4l2_flash_release(flash->vf); v4l2_flash_release(flash->vf);
v4l2_flash_release(flash->vfind);
led_classdev_flash_unregister(&flash->fled); led_classdev_flash_unregister(&flash->fled);
led_classdev_unregister(&flash->iled_cdev); led_classdev_unregister(&flash->iled_cdev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment