• Home
  • Raw
  • Download

Lines Matching +full:max +full:- +full:brightness

3  *	1.5A Step-Up Current Regulator for Flash LEDs
15 #include <linux/led-class-flash.h>
23 #include <media/v4l2-flash-led-class.h>
58 /* max LED brightness level */
82 /* brightness cache */
102 gpiod_direction_output(led->gpio_fl_en, 0); in aat1290_as2cwire_write()
103 gpiod_direction_output(led->gpio_en_set, 0); in aat1290_as2cwire_write()
110 gpiod_direction_output(led->gpio_en_set, 0); in aat1290_as2cwire_write()
112 gpiod_direction_output(led->gpio_en_set, 1); in aat1290_as2cwire_write()
120 gpiod_direction_output(led->gpio_en_set, 0); in aat1290_as2cwire_write()
122 gpiod_direction_output(led->gpio_en_set, 1); in aat1290_as2cwire_write()
131 struct led_classdev_flash *fled_cdev = &led->fled_cdev; in aat1290_set_flash_safety_timer()
132 struct led_flash_setting *flash_tm = &fled_cdev->timeout; in aat1290_set_flash_safety_timer()
133 int flash_tm_reg = AAT1290_FLASH_TM_NUM_LEVELS - in aat1290_set_flash_safety_timer()
134 (micro_sec / flash_tm->step) + 1; in aat1290_set_flash_safety_timer()
143 enum led_brightness brightness) in aat1290_led_brightness_set() argument
148 mutex_lock(&led->lock); in aat1290_led_brightness_set()
150 if (brightness == 0) { in aat1290_led_brightness_set()
151 gpiod_direction_output(led->gpio_fl_en, 0); in aat1290_led_brightness_set()
152 gpiod_direction_output(led->gpio_en_set, 0); in aat1290_led_brightness_set()
153 led->movie_mode = false; in aat1290_led_brightness_set()
155 if (!led->movie_mode) { in aat1290_led_brightness_set()
159 led->movie_mode = true; in aat1290_led_brightness_set()
163 AAT1290_MAX_MM_CURR_PERCENT_0 - brightness); in aat1290_led_brightness_set()
168 mutex_unlock(&led->lock); in aat1290_led_brightness_set()
178 struct led_classdev *led_cdev = &fled_cdev->led_cdev; in aat1290_led_flash_strobe_set()
179 struct led_flash_setting *timeout = &fled_cdev->timeout; in aat1290_led_flash_strobe_set()
181 mutex_lock(&led->lock); in aat1290_led_flash_strobe_set()
184 aat1290_set_flash_safety_timer(led, timeout->val); in aat1290_led_flash_strobe_set()
185 gpiod_direction_output(led->gpio_fl_en, 1); in aat1290_led_flash_strobe_set()
187 gpiod_direction_output(led->gpio_fl_en, 0); in aat1290_led_flash_strobe_set()
188 gpiod_direction_output(led->gpio_en_set, 0); in aat1290_led_flash_strobe_set()
194 * AS2Cwire. Therefore the brightness and movie_mode properties needs in aat1290_led_flash_strobe_set()
197 led_cdev->brightness = 0; in aat1290_led_flash_strobe_set()
198 led->movie_mode = false; in aat1290_led_flash_strobe_set()
200 mutex_unlock(&led->lock); in aat1290_led_flash_strobe_set()
209 * Don't do anything - flash timeout is cached in the led-class-flash in aat1290_led_flash_timeout_set()
221 struct led_classdev *led_cdev = &led->fled_cdev.led_cdev; in aat1290_led_parse_dt()
222 struct device *dev = &led->pdev->dev; in aat1290_led_parse_dt()
229 led->gpio_fl_en = devm_gpiod_get(dev, "flen", GPIOD_ASIS); in aat1290_led_parse_dt()
230 if (IS_ERR(led->gpio_fl_en)) { in aat1290_led_parse_dt()
231 ret = PTR_ERR(led->gpio_fl_en); in aat1290_led_parse_dt()
236 led->gpio_en_set = devm_gpiod_get(dev, "enset", GPIOD_ASIS); in aat1290_led_parse_dt()
237 if (IS_ERR(led->gpio_en_set)) { in aat1290_led_parse_dt()
238 ret = PTR_ERR(led->gpio_en_set); in aat1290_led_parse_dt()
244 pinctrl = devm_pinctrl_get_select_default(&led->pdev->dev); in aat1290_led_parse_dt()
246 cfg->has_external_strobe = false; in aat1290_led_parse_dt()
250 cfg->has_external_strobe = true; in aat1290_led_parse_dt()
254 child_node = of_get_next_available_child(dev->of_node, NULL); in aat1290_led_parse_dt()
257 return -EINVAL; in aat1290_led_parse_dt()
260 led_cdev->name = of_get_property(child_node, "label", NULL) ? : in aat1290_led_parse_dt()
261 child_node->name; in aat1290_led_parse_dt()
263 ret = of_property_read_u32(child_node, "led-max-microamp", in aat1290_led_parse_dt()
264 &cfg->max_mm_current); in aat1290_led_parse_dt()
266 * led-max-microamp will default to 1/20 of flash-max-microamp in aat1290_led_parse_dt()
271 "led-max-microamp DT property missing\n"); in aat1290_led_parse_dt()
273 ret = of_property_read_u32(child_node, "flash-max-microamp", in aat1290_led_parse_dt()
274 &cfg->max_flash_current); in aat1290_led_parse_dt()
277 "flash-max-microamp DT property missing\n"); in aat1290_led_parse_dt()
281 ret = of_property_read_u32(child_node, "flash-max-timeout-us", in aat1290_led_parse_dt()
282 &cfg->max_flash_tm); in aat1290_led_parse_dt()
285 "flash-max-timeout-us DT property missing\n"); in aat1290_led_parse_dt()
302 while (e - b > 1) { in aat1290_led_validate_mm_current()
303 i = b + (e - b) / 2; in aat1290_led_validate_mm_current()
304 if (cfg->max_mm_current < led->mm_current_scale[i]) in aat1290_led_validate_mm_current()
310 cfg->max_mm_current = led->mm_current_scale[b]; in aat1290_led_validate_mm_current()
311 cfg->max_brightness = b + 1; in aat1290_led_validate_mm_current()
322 AAT1290_MAX_MM_CURRENT(cfg->max_flash_current); in init_mm_current_scale()
324 led->mm_current_scale = devm_kzalloc(&led->pdev->dev, in init_mm_current_scale()
327 if (!led->mm_current_scale) in init_mm_current_scale()
328 return -ENOMEM; in init_mm_current_scale()
331 led->mm_current_scale[i] = max_mm_current * in init_mm_current_scale()
347 * Init non-linear movie mode current scale basing in aat1290_led_get_configuration()
348 * on the max flash current from led configuration. in aat1290_led_get_configuration()
358 devm_kfree(&led->pdev->dev, led->mm_current_scale); in aat1290_led_get_configuration()
367 struct led_classdev_flash *fled_cdev = &led->fled_cdev; in aat1290_init_flash_timeout()
371 setting = &fled_cdev->timeout; in aat1290_init_flash_timeout()
372 setting->min = cfg->max_flash_tm / AAT1290_FLASH_TM_NUM_LEVELS; in aat1290_init_flash_timeout()
373 setting->max = cfg->max_flash_tm; in aat1290_init_flash_timeout()
374 setting->step = setting->min; in aat1290_init_flash_timeout()
375 setting->val = setting->max; in aat1290_init_flash_timeout()
383 struct led_classdev_flash *fled_cdev = v4l2_flash->fled_cdev; in aat1290_intensity_to_brightness()
387 for (i = AAT1290_MM_CURRENT_SCALE_SIZE - 1; i >= 0; --i) in aat1290_intensity_to_brightness()
388 if (intensity >= led->mm_current_scale[i]) in aat1290_intensity_to_brightness()
395 enum led_brightness brightness) in aat1290_brightness_to_intensity() argument
397 struct led_classdev_flash *fled_cdev = v4l2_flash->fled_cdev; in aat1290_brightness_to_intensity()
400 return led->mm_current_scale[brightness - 1]; in aat1290_brightness_to_intensity()
406 struct aat1290_led *led = fled_cdev_to_led(v4l2_flash->fled_cdev); in aat1290_led_external_strobe_set()
407 struct led_classdev_flash *fled_cdev = v4l2_flash->fled_cdev; in aat1290_led_external_strobe_set()
408 struct led_classdev *led_cdev = &fled_cdev->led_cdev; in aat1290_led_external_strobe_set()
411 gpiod_direction_output(led->gpio_fl_en, 0); in aat1290_led_external_strobe_set()
412 gpiod_direction_output(led->gpio_en_set, 0); in aat1290_led_external_strobe_set()
414 led->movie_mode = false; in aat1290_led_external_strobe_set()
415 led_cdev->brightness = 0; in aat1290_led_external_strobe_set()
417 pinctrl = devm_pinctrl_get_select(&led->pdev->dev, in aat1290_led_external_strobe_set()
420 dev_warn(&led->pdev->dev, "Unable to switch strobe source.\n"); in aat1290_led_external_strobe_set()
431 struct led_classdev *led_cdev = &led->fled_cdev.led_cdev; in aat1290_init_v4l2_flash_config()
434 strlcpy(v4l2_sd_cfg->dev_name, led_cdev->name, in aat1290_init_v4l2_flash_config()
435 sizeof(v4l2_sd_cfg->dev_name)); in aat1290_init_v4l2_flash_config()
437 s = &v4l2_sd_cfg->intensity; in aat1290_init_v4l2_flash_config()
438 s->min = led->mm_current_scale[0]; in aat1290_init_v4l2_flash_config()
439 s->max = led_cfg->max_mm_current; in aat1290_init_v4l2_flash_config()
440 s->step = 1; in aat1290_init_v4l2_flash_config()
441 s->val = s->max; in aat1290_init_v4l2_flash_config()
443 v4l2_sd_cfg->has_external_strobe = led_cfg->has_external_strobe; in aat1290_init_v4l2_flash_config()
467 struct device *dev = &pdev->dev; in aat1290_led_probe()
478 return -ENOMEM; in aat1290_led_probe()
480 led->pdev = pdev; in aat1290_led_probe()
483 fled_cdev = &led->fled_cdev; in aat1290_led_probe()
484 fled_cdev->ops = &flash_ops; in aat1290_led_probe()
485 led_cdev = &fled_cdev->led_cdev; in aat1290_led_probe()
491 mutex_init(&led->lock); in aat1290_led_probe()
494 led_cdev->brightness_set_blocking = aat1290_led_brightness_set; in aat1290_led_probe()
495 led_cdev->max_brightness = led_cfg.max_brightness; in aat1290_led_probe()
496 led_cdev->flags |= LED_DEV_CAP_FLASH; in aat1290_led_probe()
501 ret = led_classdev_flash_register(&pdev->dev, fled_cdev); in aat1290_led_probe()
508 led->v4l2_flash = v4l2_flash_init(dev, of_fwnode_handle(sub_node), in aat1290_led_probe()
511 if (IS_ERR(led->v4l2_flash)) { in aat1290_led_probe()
512 ret = PTR_ERR(led->v4l2_flash); in aat1290_led_probe()
521 mutex_destroy(&led->lock); in aat1290_led_probe()
530 v4l2_flash_release(led->v4l2_flash); in aat1290_led_remove()
531 led_classdev_flash_unregister(&led->fled_cdev); in aat1290_led_remove()
533 mutex_destroy(&led->lock); in aat1290_led_remove()