Lines Matching refs:led

12 #include <linux/led-class-flash.h>
20 #include <media/v4l2-flash-led-class.h>
96 static void aat1290_as2cwire_write(struct aat1290_led *led, int addr, int value)
100 gpiod_direction_output(led->gpio_fl_en, 0);
101 gpiod_direction_output(led->gpio_en_set, 0);
108 gpiod_direction_output(led->gpio_en_set, 0);
110 gpiod_direction_output(led->gpio_en_set, 1);
118 gpiod_direction_output(led->gpio_en_set, 0);
120 gpiod_direction_output(led->gpio_en_set, 1);
126 static void aat1290_set_flash_safety_timer(struct aat1290_led *led,
129 struct led_classdev_flash *fled_cdev = &led->fled_cdev;
134 aat1290_as2cwire_write(led, AAT1290_FLASH_SAFETY_TIMER_ADDR,
144 struct aat1290_led *led = fled_cdev_to_led(fled_cdev);
146 mutex_lock(&led->lock);
149 gpiod_direction_output(led->gpio_fl_en, 0);
150 gpiod_direction_output(led->gpio_en_set, 0);
151 led->movie_mode = false;
153 if (!led->movie_mode) {
154 aat1290_as2cwire_write(led,
157 led->movie_mode = true;
160 aat1290_as2cwire_write(led, AAT1290_MOVIE_MODE_CURRENT_ADDR,
162 aat1290_as2cwire_write(led, AAT1290_MOVIE_MODE_CONFIG_ADDR,
166 mutex_unlock(&led->lock);
175 struct aat1290_led *led = fled_cdev_to_led(fled_cdev);
179 mutex_lock(&led->lock);
182 aat1290_set_flash_safety_timer(led, timeout->val);
183 gpiod_direction_output(led->gpio_fl_en, 1);
185 gpiod_direction_output(led->gpio_fl_en, 0);
186 gpiod_direction_output(led->gpio_en_set, 0);
196 led->movie_mode = false;
198 mutex_unlock(&led->lock);
207 * Don't do anything - flash timeout is cached in the led-class-flash
215 static int aat1290_led_parse_dt(struct aat1290_led *led,
219 struct device *dev = &led->pdev->dev;
226 led->gpio_fl_en = devm_gpiod_get(dev, "flen", GPIOD_ASIS);
227 if (IS_ERR(led->gpio_fl_en)) {
228 ret = PTR_ERR(led->gpio_fl_en);
233 led->gpio_en_set = devm_gpiod_get(dev, "enset", GPIOD_ASIS);
234 if (IS_ERR(led->gpio_en_set)) {
235 ret = PTR_ERR(led->gpio_en_set);
241 pinctrl = devm_pinctrl_get_select_default(&led->pdev->dev);
257 ret = of_property_read_u32(child_node, "led-max-microamp",
260 * led-max-microamp will default to 1/20 of flash-max-microamp
265 "led-max-microamp DT property missing\n");
291 static void aat1290_led_validate_mm_current(struct aat1290_led *led,
298 if (cfg->max_mm_current < led->mm_current_scale[i])
304 cfg->max_mm_current = led->mm_current_scale[b];
308 static int init_mm_current_scale(struct aat1290_led *led,
318 led->mm_current_scale = devm_kzalloc(&led->pdev->dev,
321 if (!led->mm_current_scale)
325 led->mm_current_scale[i] = max_mm_current *
331 static int aat1290_led_get_configuration(struct aat1290_led *led,
337 ret = aat1290_led_parse_dt(led, cfg, sub_node);
342 * on the max flash current from led configuration.
344 ret = init_mm_current_scale(led, cfg);
348 aat1290_led_validate_mm_current(led, cfg);
352 devm_kfree(&led->pdev->dev, led->mm_current_scale);
358 static void aat1290_init_flash_timeout(struct aat1290_led *led,
361 struct led_classdev_flash *fled_cdev = &led->fled_cdev;
378 struct aat1290_led *led = fled_cdev_to_led(fled_cdev);
382 if (intensity >= led->mm_current_scale[i])
392 struct aat1290_led *led = fled_cdev_to_led(fled_cdev);
394 return led->mm_current_scale[brightness - 1];
400 struct aat1290_led *led = fled_cdev_to_led(v4l2_flash->fled_cdev);
405 gpiod_direction_output(led->gpio_fl_en, 0);
406 gpiod_direction_output(led->gpio_en_set, 0);
408 led->movie_mode = false;
411 pinctrl = devm_pinctrl_get_select(&led->pdev->dev,
414 dev_warn(&led->pdev->dev, "Unable to switch strobe source.\n");
421 static void aat1290_init_v4l2_flash_config(struct aat1290_led *led,
425 struct led_classdev *led_cdev = &led->fled_cdev.led_cdev;
432 s->min = led->mm_current_scale[0];
446 static inline void aat1290_init_v4l2_flash_config(struct aat1290_led *led,
463 struct aat1290_led *led;
471 led = devm_kzalloc(dev, sizeof(*led), GFP_KERNEL);
472 if (!led)
475 led->pdev = pdev;
476 platform_set_drvdata(pdev, led);
478 fled_cdev = &led->fled_cdev;
482 ret = aat1290_led_get_configuration(led, &led_cfg, &sub_node);
486 mutex_init(&led->lock);
493 aat1290_init_flash_timeout(led, &led_cfg);
504 aat1290_init_v4l2_flash_config(led, &led_cfg, &v4l2_sd_cfg);
507 led->v4l2_flash = v4l2_flash_init(dev, of_fwnode_handle(sub_node),
510 if (IS_ERR(led->v4l2_flash)) {
511 ret = PTR_ERR(led->v4l2_flash);
520 mutex_destroy(&led->lock);
527 struct aat1290_led *led = platform_get_drvdata(pdev);
529 v4l2_flash_release(led->v4l2_flash);
530 led_classdev_flash_unregister(&led->fled_cdev);
532 mutex_destroy(&led->lock);