in flash/leds-aat1290.c [215:289]
static int aat1290_led_parse_dt(struct aat1290_led *led,
struct aat1290_led_config_data *cfg,
struct device_node **sub_node)
{
struct device *dev = &led->pdev->dev;
struct device_node *child_node;
#if IS_ENABLED(CONFIG_V4L2_FLASH_LED_CLASS)
struct pinctrl *pinctrl;
#endif
int ret = 0;
led->gpio_fl_en = devm_gpiod_get(dev, "flen", GPIOD_ASIS);
if (IS_ERR(led->gpio_fl_en)) {
ret = PTR_ERR(led->gpio_fl_en);
dev_err(dev, "Unable to claim gpio \"flen\".\n");
return ret;
}
led->gpio_en_set = devm_gpiod_get(dev, "enset", GPIOD_ASIS);
if (IS_ERR(led->gpio_en_set)) {
ret = PTR_ERR(led->gpio_en_set);
dev_err(dev, "Unable to claim gpio \"enset\".\n");
return ret;
}
#if IS_ENABLED(CONFIG_V4L2_FLASH_LED_CLASS)
pinctrl = devm_pinctrl_get_select_default(&led->pdev->dev);
if (IS_ERR(pinctrl)) {
cfg->has_external_strobe = false;
dev_info(dev,
"No support for external strobe detected.\n");
} else {
cfg->has_external_strobe = true;
}
#endif
child_node = of_get_next_available_child(dev_of_node(dev), NULL);
if (!child_node) {
dev_err(dev, "No DT child node found for connected LED.\n");
return -EINVAL;
}
ret = of_property_read_u32(child_node, "led-max-microamp",
&cfg->max_mm_current);
/*
* led-max-microamp will default to 1/20 of flash-max-microamp
* in case it is missing.
*/
if (ret < 0)
dev_warn(dev,
"led-max-microamp DT property missing\n");
ret = of_property_read_u32(child_node, "flash-max-microamp",
&cfg->max_flash_current);
if (ret < 0) {
dev_err(dev,
"flash-max-microamp DT property missing\n");
goto err_parse_dt;
}
ret = of_property_read_u32(child_node, "flash-max-timeout-us",
&cfg->max_flash_tm);
if (ret < 0) {
dev_err(dev,
"flash-max-timeout-us DT property missing\n");
goto err_parse_dt;
}
*sub_node = child_node;
err_parse_dt:
of_node_put(child_node);
return ret;
}