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