Lines Matching refs:led

95 static void aat1290_as2cwire_write(struct aat1290_led *led, int addr, int value)  in aat1290_as2cwire_write()  argument
99 gpiod_direction_output(led->gpio_fl_en, 0); in aat1290_as2cwire_write()
100 gpiod_direction_output(led->gpio_en_set, 0); in aat1290_as2cwire_write()
107 gpiod_direction_output(led->gpio_en_set, 0); in aat1290_as2cwire_write()
109 gpiod_direction_output(led->gpio_en_set, 1); in aat1290_as2cwire_write()
117 gpiod_direction_output(led->gpio_en_set, 0); in aat1290_as2cwire_write()
119 gpiod_direction_output(led->gpio_en_set, 1); in aat1290_as2cwire_write()
125 static void aat1290_set_flash_safety_timer(struct aat1290_led *led, in aat1290_set_flash_safety_timer() argument
128 struct led_classdev_flash *fled_cdev = &led->fled_cdev; in aat1290_set_flash_safety_timer()
133 aat1290_as2cwire_write(led, AAT1290_FLASH_SAFETY_TIMER_ADDR, in aat1290_set_flash_safety_timer()
137 static void aat1290_brightness_set(struct aat1290_led *led, in aat1290_brightness_set() argument
140 mutex_lock(&led->lock); in aat1290_brightness_set()
143 gpiod_direction_output(led->gpio_fl_en, 0); in aat1290_brightness_set()
144 gpiod_direction_output(led->gpio_en_set, 0); in aat1290_brightness_set()
145 led->movie_mode = false; in aat1290_brightness_set()
147 if (!led->movie_mode) { in aat1290_brightness_set()
148 aat1290_as2cwire_write(led, in aat1290_brightness_set()
151 led->movie_mode = true; in aat1290_brightness_set()
154 aat1290_as2cwire_write(led, AAT1290_MOVIE_MODE_CURRENT_ADDR, in aat1290_brightness_set()
156 aat1290_as2cwire_write(led, AAT1290_MOVIE_MODE_CONFIG_ADDR, in aat1290_brightness_set()
160 mutex_unlock(&led->lock); in aat1290_brightness_set()
167 struct aat1290_led *led = in aat1290_brightness_set_work() local
170 aat1290_brightness_set(led, led->torch_brightness); in aat1290_brightness_set_work()
177 struct aat1290_led *led = fled_cdev_to_led(fled_cdev); in aat1290_led_brightness_set() local
179 led->torch_brightness = brightness; in aat1290_led_brightness_set()
180 schedule_work(&led->work_brightness_set); in aat1290_led_brightness_set()
187 struct aat1290_led *led = fled_cdev_to_led(fled_cdev); in aat1290_led_brightness_set_sync() local
189 aat1290_brightness_set(led, brightness); in aat1290_led_brightness_set_sync()
198 struct aat1290_led *led = fled_cdev_to_led(fled_cdev); in aat1290_led_flash_strobe_set() local
202 mutex_lock(&led->lock); in aat1290_led_flash_strobe_set()
205 aat1290_set_flash_safety_timer(led, timeout->val); in aat1290_led_flash_strobe_set()
206 gpiod_direction_output(led->gpio_fl_en, 1); in aat1290_led_flash_strobe_set()
208 gpiod_direction_output(led->gpio_fl_en, 0); in aat1290_led_flash_strobe_set()
209 gpiod_direction_output(led->gpio_en_set, 0); in aat1290_led_flash_strobe_set()
219 led->movie_mode = false; in aat1290_led_flash_strobe_set()
221 mutex_unlock(&led->lock); in aat1290_led_flash_strobe_set()
238 static int aat1290_led_parse_dt(struct aat1290_led *led, in aat1290_led_parse_dt() argument
242 struct led_classdev *led_cdev = &led->fled_cdev.led_cdev; in aat1290_led_parse_dt()
243 struct device *dev = &led->pdev->dev; in aat1290_led_parse_dt()
250 led->gpio_fl_en = devm_gpiod_get(dev, "flen", GPIOD_ASIS); in aat1290_led_parse_dt()
251 if (IS_ERR(led->gpio_fl_en)) { in aat1290_led_parse_dt()
252 ret = PTR_ERR(led->gpio_fl_en); in aat1290_led_parse_dt()
257 led->gpio_en_set = devm_gpiod_get(dev, "enset", GPIOD_ASIS); in aat1290_led_parse_dt()
258 if (IS_ERR(led->gpio_en_set)) { in aat1290_led_parse_dt()
259 ret = PTR_ERR(led->gpio_en_set); in aat1290_led_parse_dt()
265 pinctrl = devm_pinctrl_get_select_default(&led->pdev->dev); in aat1290_led_parse_dt()
317 static void aat1290_led_validate_mm_current(struct aat1290_led *led, in aat1290_led_validate_mm_current() argument
324 if (cfg->max_mm_current < led->mm_current_scale[i]) in aat1290_led_validate_mm_current()
330 cfg->max_mm_current = led->mm_current_scale[b]; in aat1290_led_validate_mm_current()
334 static int init_mm_current_scale(struct aat1290_led *led, in init_mm_current_scale() argument
342 led->mm_current_scale = devm_kzalloc(&led->pdev->dev, in init_mm_current_scale()
345 if (!led->mm_current_scale) in init_mm_current_scale()
349 led->mm_current_scale[i] = max_mm_current * in init_mm_current_scale()
355 static int aat1290_led_get_configuration(struct aat1290_led *led, in aat1290_led_get_configuration() argument
361 ret = aat1290_led_parse_dt(led, cfg, sub_node); in aat1290_led_get_configuration()
368 ret = init_mm_current_scale(led, cfg); in aat1290_led_get_configuration()
372 aat1290_led_validate_mm_current(led, cfg); in aat1290_led_get_configuration()
376 devm_kfree(&led->pdev->dev, led->mm_current_scale); in aat1290_led_get_configuration()
382 static void aat1290_init_flash_timeout(struct aat1290_led *led, in aat1290_init_flash_timeout() argument
385 struct led_classdev_flash *fled_cdev = &led->fled_cdev; in aat1290_init_flash_timeout()
402 struct aat1290_led *led = fled_cdev_to_led(fled_cdev); in aat1290_intensity_to_brightness() local
406 if (intensity >= led->mm_current_scale[i]) in aat1290_intensity_to_brightness()
416 struct aat1290_led *led = fled_cdev_to_led(fled_cdev); in aat1290_brightness_to_intensity() local
418 return led->mm_current_scale[brightness - 1]; in aat1290_brightness_to_intensity()
424 struct aat1290_led *led = fled_cdev_to_led(v4l2_flash->fled_cdev); in aat1290_led_external_strobe_set() local
429 gpiod_direction_output(led->gpio_fl_en, 0); in aat1290_led_external_strobe_set()
430 gpiod_direction_output(led->gpio_en_set, 0); in aat1290_led_external_strobe_set()
432 led->movie_mode = false; in aat1290_led_external_strobe_set()
435 pinctrl = devm_pinctrl_get_select(&led->pdev->dev, in aat1290_led_external_strobe_set()
438 dev_warn(&led->pdev->dev, "Unable to switch strobe source.\n"); in aat1290_led_external_strobe_set()
445 static void aat1290_init_v4l2_flash_config(struct aat1290_led *led, in aat1290_init_v4l2_flash_config() argument
449 struct led_classdev *led_cdev = &led->fled_cdev.led_cdev; in aat1290_init_v4l2_flash_config()
456 s->min = led->mm_current_scale[0]; in aat1290_init_v4l2_flash_config()
470 static inline void aat1290_init_v4l2_flash_config(struct aat1290_led *led, in aat1290_init_v4l2_flash_config() argument
487 struct aat1290_led *led; in aat1290_led_probe() local
494 led = devm_kzalloc(dev, sizeof(*led), GFP_KERNEL); in aat1290_led_probe()
495 if (!led) in aat1290_led_probe()
498 led->pdev = pdev; in aat1290_led_probe()
499 platform_set_drvdata(pdev, led); in aat1290_led_probe()
501 fled_cdev = &led->fled_cdev; in aat1290_led_probe()
505 ret = aat1290_led_get_configuration(led, &led_cfg, &sub_node); in aat1290_led_probe()
509 mutex_init(&led->lock); in aat1290_led_probe()
516 INIT_WORK(&led->work_brightness_set, aat1290_brightness_set_work); in aat1290_led_probe()
518 aat1290_init_flash_timeout(led, &led_cfg); in aat1290_led_probe()
525 aat1290_init_v4l2_flash_config(led, &led_cfg, &v4l2_sd_cfg); in aat1290_led_probe()
528 led->v4l2_flash = v4l2_flash_init(dev, sub_node, fled_cdev, NULL, in aat1290_led_probe()
530 if (IS_ERR(led->v4l2_flash)) { in aat1290_led_probe()
531 ret = PTR_ERR(led->v4l2_flash); in aat1290_led_probe()
540 mutex_destroy(&led->lock); in aat1290_led_probe()
547 struct aat1290_led *led = platform_get_drvdata(pdev); in aat1290_led_remove() local
549 v4l2_flash_release(led->v4l2_flash); in aat1290_led_remove()
550 led_classdev_flash_unregister(&led->fled_cdev); in aat1290_led_remove()
551 cancel_work_sync(&led->work_brightness_set); in aat1290_led_remove()
553 mutex_destroy(&led->lock); in aat1290_led_remove()