Lines Matching full:led

8 #include <linux/led-class-flash.h>
9 #include <linux/led-class-multicolor.h>
15 #include <media/v4l2-flash-led-class.h>
101 struct mt6360_led *led = container_of(mccdev, struct mt6360_led, mc); in mt6360_mc_brightness_set() local
102 struct mt6360_priv *priv = led->priv; in mt6360_mc_brightness_set()
135 struct mt6360_led *led = container_of(lcdev, struct mt6360_led, isnk); in mt6360_isnk_brightness_set() local
136 struct mt6360_priv *priv = led->priv; in mt6360_isnk_brightness_set()
137 u32 enable_mask = MT6360_ISNK_ENMASK(led->led_no); in mt6360_isnk_brightness_set()
138 u32 val = level ? MT6360_ISNK_ENMASK(led->led_no) : 0; in mt6360_isnk_brightness_set()
143 ret = regmap_update_bits(priv->regmap, MT6360_REG_ISNK(led->led_no), in mt6360_isnk_brightness_set()
159 struct mt6360_led *led = in mt6360_torch_brightness_set() local
161 struct mt6360_priv *priv = led->priv; in mt6360_torch_brightness_set()
162 u32 enable_mask = MT6360_TORCHEN_MASK | MT6360_FLCSEN_MASK(led->led_no); in mt6360_torch_brightness_set()
163 u32 val = level ? MT6360_FLCSEN_MASK(led->led_no) : 0; in mt6360_torch_brightness_set()
181 curr = prev | BIT(led->led_no); in mt6360_torch_brightness_set()
183 curr = prev & ~BIT(led->led_no); in mt6360_torch_brightness_set()
190 MT6360_REG_FLEDITOR(led->led_no), in mt6360_torch_brightness_set()
223 struct mt6360_led *led = in _mt6360_flash_brightness_set() local
225 struct mt6360_priv *priv = led->priv; in _mt6360_flash_brightness_set()
230 MT6360_REG_FLEDISTRB(led->led_no), in _mt6360_flash_brightness_set()
236 struct mt6360_led *led = in mt6360_strobe_set() local
238 struct mt6360_priv *priv = led->priv; in mt6360_strobe_set()
241 u32 enable_mask = MT6360_STROBEN_MASK | MT6360_FLCSEN_MASK(led->led_no); in mt6360_strobe_set()
242 u32 val = state ? MT6360_FLCSEN_MASK(led->led_no) : 0; in mt6360_strobe_set()
249 * If the state of the upcoming change is the same as the current LED in mt6360_strobe_set()
251 * with the flow of turning on LED torch mode in V4L2. in mt6360_strobe_set()
253 if (state == !!(BIT(led->led_no) & prev)) { in mt6360_strobe_set()
270 curr = prev | BIT(led->led_no); in mt6360_strobe_set()
272 curr = prev & ~BIT(led->led_no); in mt6360_strobe_set()
281 led->led_no, state); in mt6360_strobe_set()
312 struct mt6360_led *led = in mt6360_strobe_get() local
314 struct mt6360_priv *priv = led->priv; in mt6360_strobe_get()
317 *state = !!(priv->fled_strobe_used & BIT(led->led_no)); in mt6360_strobe_get()
325 struct mt6360_led *led = in mt6360_timeout_set() local
327 struct mt6360_priv *priv = led->priv; in mt6360_timeout_set()
342 struct mt6360_led *led = in mt6360_fault_get() local
344 struct mt6360_priv *priv = led->priv; in mt6360_fault_get()
360 if (led->led_no == MT6360_LED_FLASH1) { in mt6360_fault_get()
394 static int mt6360_isnk_init_default_state(struct mt6360_led *led) in mt6360_isnk_init_default_state() argument
396 struct mt6360_priv *priv = led->priv; in mt6360_isnk_init_default_state()
401 ret = regmap_read(priv->regmap, MT6360_REG_ISNK(led->led_no), &regval); in mt6360_isnk_init_default_state()
410 if (!(regval & MT6360_ISNK_ENMASK(led->led_no))) in mt6360_isnk_init_default_state()
413 switch (led->default_state) { in mt6360_isnk_init_default_state()
415 led->isnk.brightness = led->isnk.max_brightness; in mt6360_isnk_init_default_state()
418 led->isnk.brightness = min(level, led->isnk.max_brightness); in mt6360_isnk_init_default_state()
421 led->isnk.brightness = LED_OFF; in mt6360_isnk_init_default_state()
424 return mt6360_isnk_brightness_set(&led->isnk, led->isnk.brightness); in mt6360_isnk_init_default_state()
427 static int mt6360_flash_init_default_state(struct mt6360_led *led) in mt6360_flash_init_default_state() argument
429 struct led_classdev_flash *flash = &led->flash; in mt6360_flash_init_default_state()
430 struct mt6360_priv *priv = led->priv; in mt6360_flash_init_default_state()
431 u32 enable_mask = MT6360_TORCHEN_MASK | MT6360_FLCSEN_MASK(led->led_no); in mt6360_flash_init_default_state()
436 ret = regmap_read(priv->regmap, MT6360_REG_FLEDITOR(led->led_no), in mt6360_flash_init_default_state()
451 switch (led->default_state) { in mt6360_flash_init_default_state()
472 struct mt6360_led *led = container_of(flash, struct mt6360_led, flash); in mt6360_flash_external_strobe_set() local
473 struct mt6360_priv *priv = led->priv; in mt6360_flash_external_strobe_set()
474 u32 mask = MT6360_FLCSEN_MASK(led->led_no); in mt6360_flash_external_strobe_set()
485 priv->fled_strobe_used |= BIT(led->led_no); in mt6360_flash_external_strobe_set()
487 priv->fled_strobe_used &= ~BIT(led->led_no); in mt6360_flash_external_strobe_set()
498 static void mt6360_init_v4l2_flash_config(struct mt6360_led *led, in mt6360_init_v4l2_flash_config() argument
504 lcdev = &led->flash.led_cdev; in mt6360_init_v4l2_flash_config()
520 static void mt6360_init_v4l2_flash_config(struct mt6360_led *led, in mt6360_init_v4l2_flash_config() argument
526 static int mt6360_led_register(struct device *parent, struct mt6360_led *led, in mt6360_led_register() argument
529 struct mt6360_priv *priv = led->priv; in mt6360_led_register()
533 if ((led->led_no == MT6360_LED_ISNK1 || in mt6360_led_register()
534 led->led_no == MT6360_VIRTUAL_MULTICOLOR) && in mt6360_led_register()
549 switch (led->led_no) { in mt6360_led_register()
551 ret = mt6360_mc_brightness_set(&led->mc.led_cdev, LED_OFF); in mt6360_led_register()
559 &led->mc, init_data); in mt6360_led_register()
566 ret = mt6360_isnk_init_default_state(led); in mt6360_led_register()
569 led->led_no); in mt6360_led_register()
573 ret = devm_led_classdev_register_ext(parent, &led->isnk, in mt6360_led_register()
577 led->led_no); in mt6360_led_register()
582 ret = mt6360_flash_init_default_state(led); in mt6360_led_register()
585 led->led_no); in mt6360_led_register()
589 ret = devm_led_classdev_flash_register_ext(parent, &led->flash, in mt6360_led_register()
593 led->led_no); in mt6360_led_register()
597 mt6360_init_v4l2_flash_config(led, &v4l2_config); in mt6360_led_register()
598 led->v4l2_flash = v4l2_flash_init(parent, init_data->fwnode, in mt6360_led_register()
599 &led->flash, in mt6360_led_register()
602 if (IS_ERR(led->v4l2_flash)) { in mt6360_led_register()
604 led->led_no); in mt6360_led_register()
605 return PTR_ERR(led->v4l2_flash); in mt6360_led_register()
623 static int mt6360_init_isnk_properties(struct mt6360_led *led, in mt6360_init_isnk_properties() argument
627 struct mt6360_priv *priv = led->priv; in mt6360_init_isnk_properties()
633 if (led->led_no == MT6360_VIRTUAL_MULTICOLOR) { in mt6360_init_isnk_properties()
654 "led %d, no color specified\n", in mt6360_init_isnk_properties()
655 led->led_no); in mt6360_init_isnk_properties()
668 "Multicolor must include 2 or more led channel\n"); in mt6360_init_isnk_properties()
672 led->mc.num_colors = num_color; in mt6360_init_isnk_properties()
673 led->mc.subled_info = sub_led; in mt6360_init_isnk_properties()
675 lcdev = &led->mc.led_cdev; in mt6360_init_isnk_properties()
678 if (led->led_no == MT6360_LED_ISNKML) { in mt6360_init_isnk_properties()
683 lcdev = &led->isnk; in mt6360_init_isnk_properties()
687 ret = fwnode_property_read_u32(init_data->fwnode, "led-max-microamp", in mt6360_init_isnk_properties()
691 "Not specified led-max-microamp, config to the minimum\n"); in mt6360_init_isnk_properties()
704 static int mt6360_init_flash_properties(struct mt6360_led *led, in mt6360_init_flash_properties() argument
707 struct led_classdev_flash *flash = &led->flash; in mt6360_init_flash_properties()
709 struct mt6360_priv *priv = led->priv; in mt6360_init_flash_properties()
714 ret = fwnode_property_read_u32(init_data->fwnode, "led-max-microamp", in mt6360_init_flash_properties()
718 "Not specified led-max-microamp, config to the minimum\n"); in mt6360_init_flash_properties()
777 struct mt6360_led *led = priv->leds + i; in mt6360_v4l2_flash_release() local
779 if (led->v4l2_flash) in mt6360_v4l2_flash_release()
780 v4l2_flash_release(led->v4l2_flash); in mt6360_v4l2_flash_release()
793 "No child node or node count over max led number %zu\n", in mt6360_led_probe()
814 struct mt6360_led *led = priv->leds + i; in mt6360_led_probe() local
842 led->led_no = reg; in mt6360_led_probe()
843 led->priv = priv; in mt6360_led_probe()
844 led->default_state = led_init_default_state_get(child); in mt6360_led_probe()
848 ret = mt6360_init_isnk_properties(led, &init_data); in mt6360_led_probe()
850 ret = mt6360_init_flash_properties(led, &init_data); in mt6360_led_probe()
855 ret = mt6360_led_register(&pdev->dev, led, &init_data); in mt6360_led_probe()
878 { .compatible = "mediatek,mt6360-led", },
885 .name = "mt6360-led",
894 MODULE_DESCRIPTION("MT6360 LED Driver");