Lines Matching defs:led
9 #include <linux/led-class-flash.h>
14 #include <media/v4l2-flash-led-class.h>
151 static int set_flash_module_en(struct qcom_flash_led *led, bool en)
153 struct qcom_flash_data *flash_data = led->flash_data;
157 for (i = 0; i < led->chan_count; i++)
158 led_mask |= BIT(led->chan_id[i]);
169 dev_err(led->flash.led_cdev.dev, "write module_en failed, rc=%d\n", rc);
175 static int set_flash_current(struct qcom_flash_led *led, u32 current_ma, enum led_mode mode)
177 struct qcom_flash_data *flash_data = led->flash_data;
186 itarg_ua = (current_ma * UA_PER_MA) / led->chan_count + 1;
189 for (i = 0; i < led->chan_count; i++) {
195 chan_id = led->chan_id[i];
214 dev_err(led->flash.led_cdev.dev,
223 static int set_flash_timeout(struct qcom_flash_led *led, u32 timeout_ms)
225 struct qcom_flash_data *flash_data = led->flash_data;
230 timeout_ms = min_t(u32, timeout_ms, led->max_timeout_ms);
232 for (i = 0; i < led->chan_count; i++) {
233 chan_id = led->chan_id[i];
249 static int set_flash_strobe(struct qcom_flash_led *led, enum led_strobe strobe, bool state)
251 struct qcom_flash_data *flash_data = led->flash_data;
256 for (i = 0; i < led->chan_count; i++) {
257 chan_id = led->chan_id[i];
282 led->enabled = state;
293 struct qcom_flash_led *led = flcdev_to_qcom_fled(fled_cdev);
295 led->flash_current_ma = min_t(u32, led->max_flash_current_ma, brightness / UA_PER_MA);
301 struct qcom_flash_led *led = flcdev_to_qcom_fled(fled_cdev);
303 led->flash_timeout_ms = timeout / USEC_PER_MSEC;
309 struct qcom_flash_led *led = flcdev_to_qcom_fled(fled_cdev);
312 rc = set_flash_strobe(led, SW_STROBE, false);
316 rc = set_flash_current(led, led->flash_current_ma, FLASH_MODE);
320 rc = set_flash_timeout(led, led->flash_timeout_ms);
324 rc = set_flash_module_en(led, state);
328 return set_flash_strobe(led, SW_STROBE, state);
333 struct qcom_flash_led *led = flcdev_to_qcom_fled(fled_cdev);
335 *state = led->enabled;
341 struct qcom_flash_led *led = flcdev_to_qcom_fled(fled_cdev);
342 struct qcom_flash_data *flash_data = led->flash_data;
352 for (i = 0; i < led->chan_count; i++) {
353 chan_id = led->chan_id[i];
402 for (i = 0; i < led->chan_count; i++) {
403 chan_id = led->chan_id[i];
419 struct qcom_flash_led *led = flcdev_to_qcom_fled(fled_cdev);
420 u32 current_ma = brightness * led->max_torch_current_ma / LED_FULL;
424 rc = set_flash_strobe(led, SW_STROBE, false);
428 rc = set_flash_module_en(led, false);
432 rc = set_flash_current(led, current_ma, TORCH_MODE);
437 rc = set_flash_timeout(led, 0);
441 rc = set_flash_module_en(led, enable);
445 return set_flash_strobe(led, SW_STROBE, enable);
460 struct qcom_flash_led *led = flcdev_to_qcom_fled(fled_cdev);
463 rc = set_flash_module_en(led, enable);
468 return set_flash_strobe(led, HW_STROBE, true);
470 return set_flash_strobe(led, SW_STROBE, false);
477 struct qcom_flash_led *led = flcdev_to_qcom_fled(fled_cdev);
480 current_ma = min_t(u32, current_ma, led->max_torch_current_ma);
484 return (current_ma * LED_FULL) / led->max_torch_current_ma;
491 struct qcom_flash_led *led = flcdev_to_qcom_fled(fled_cdev);
493 return (brightness * led->max_torch_current_ma * UA_PER_MA) / LED_FULL;
503 qcom_flash_v4l2_init(struct device *dev, struct qcom_flash_led *led, struct fwnode_handle *fwnode)
505 struct qcom_flash_data *flash_data = led->flash_data;
509 if (!(led->flash.led_cdev.flags & LED_DEV_CAP_FLASH))
512 intensity->min = intensity->step = TORCH_IRES_UA * led->chan_count;
513 intensity->max = led->max_torch_current_ma * UA_PER_MA;
516 strscpy(v4l2_cfg.dev_name, led->flash.led_cdev.dev->kobj.name,
527 v4l2_flash_init(dev, fwnode, &led->flash, &qcom_v4l2_flash_ops, &v4l2_cfg);
532 qcom_flash_v4l2_init(struct device *dev, struct qcom_flash_led *led, struct fwnode_handle *fwnode)
539 struct fwnode_handle *node, struct qcom_flash_led *led)
541 struct qcom_flash_data *flash_data = led->flash_data;
543 struct led_classdev_flash *flash = &led->flash;
549 count = fwnode_property_count_u32(node, "led-sources");
551 dev_err(dev, "No led-sources specified\n");
556 dev_err(dev, "led-sources count %u exceeds maximum channel count %u\n",
561 rc = fwnode_property_read_u32_array(node, "led-sources", channels, count);
563 dev_err(dev, "Failed to read led-sources property, rc=%d\n", rc);
567 led->chan_count = count;
568 led->chan_id = devm_kcalloc(dev, count, sizeof(u8), GFP_KERNEL);
569 if (!led->chan_id)
574 dev_err(dev, "led-source out of HW support range [1-%u]\n",
580 led->chan_id[i] = channels[i] - 1;
583 rc = fwnode_property_read_u32(node, "led-max-microamp", ¤t_ua);
585 dev_err(dev, "Failed to read led-max-microamp property, rc=%d\n", rc);
590 dev_err(dev, "led-max-microamp shouldn't be 0\n");
594 current_ua = min_t(u32, current_ua, TORCH_CURRENT_MAX_UA * led->chan_count);
595 led->max_torch_current_ma = current_ua / UA_PER_MA;
607 current_ua = min_t(u32, current_ua, FLASH_CURRENT_MAX_UA * led->chan_count);
612 brightness->min = brightness->step = FLASH_IRES_UA * led->chan_count;
616 led->max_flash_current_ma = current_ua / UA_PER_MA;
617 led->flash_current_ma = brightness->val / UA_PER_MA;
633 led->max_timeout_ms = led->flash_timeout_ms = timeout_us / USEC_PER_MSEC;
651 return qcom_flash_v4l2_init(dev, led, node);
657 struct qcom_flash_led *led;
735 led = devm_kzalloc(dev, sizeof(*led), GFP_KERNEL);
736 if (!led) {
741 led->flash_data = flash_data;
742 rc = qcom_flash_register_led_device(dev, child, led);
770 { .compatible = "qcom,spmi-flash-led" },