as3645a: Use integer numbers for parsing LEDs

Use integer numbers for LEDs, 0 is the flash and 1 is the indicator.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
This commit is contained in:
Sakari Ailus 2017-09-22 12:32:37 +03:00 committed by Jacek Anaszewski
parent 75f9f7279e
commit e626c32527
2 changed files with 30 additions and 4 deletions

View File

@ -267,15 +267,19 @@
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>;
ams,input-max-microamp = <1750000>; ams,input-max-microamp = <1750000>;
}; };
indicator { indicator@1 {
reg = <0x1>;
led-max-microamp = <10000>; led-max-microamp = <10000>;
}; };
}; };

View File

@ -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,
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;
@ -538,7 +561,6 @@ static int as3645a_parse_node(struct as3645a *flash,
&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");