Lines Matching defs:flash
38 static int adp1653_update_hw(struct adp1653_flash *flash)
40 struct i2c_client *client = v4l2_get_subdevdata(&flash->subdev);
46 flash->indicator_intensity->val)
49 switch (flash->led_mode->val) {
55 config |= TIMEOUT_US_TO_CODE(flash->flash_timeout->val)
61 flash->torch_intensity->val)
77 static int adp1653_get_fault(struct adp1653_flash *flash)
79 struct i2c_client *client = v4l2_get_subdevdata(&flash->subdev);
87 flash->fault |= fault;
89 if (!flash->fault)
97 flash->led_mode->val = V4L2_FLASH_LED_MODE_NONE;
99 rval = adp1653_update_hw(flash);
103 return flash->fault;
106 static int adp1653_strobe(struct adp1653_flash *flash, int enable)
108 struct i2c_client *client = v4l2_get_subdevdata(&flash->subdev);
110 flash->indicator_intensity->val)
114 if (flash->led_mode->val != V4L2_FLASH_LED_MODE_FLASH)
122 flash->flash_intensity->val)
142 struct adp1653_flash *flash =
146 rval = adp1653_get_fault(flash);
152 if (flash->fault & ADP1653_REG_FAULT_FLT_SCP)
154 if (flash->fault & ADP1653_REG_FAULT_FLT_OT)
156 if (flash->fault & ADP1653_REG_FAULT_FLT_TMR)
158 if (flash->fault & ADP1653_REG_FAULT_FLT_OV)
161 flash->fault = 0;
168 struct adp1653_flash *flash =
172 rval = adp1653_get_fault(flash);
185 return adp1653_strobe(flash, 1);
187 return adp1653_strobe(flash, 0);
190 return adp1653_update_hw(flash);
198 static int adp1653_init_controls(struct adp1653_flash *flash)
202 v4l2_ctrl_handler_init(&flash->ctrls, 9);
204 flash->led_mode =
205 v4l2_ctrl_new_std_menu(&flash->ctrls, &adp1653_ctrl_ops,
208 v4l2_ctrl_new_std_menu(&flash->ctrls, &adp1653_ctrl_ops,
211 v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops,
213 v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops,
215 flash->flash_timeout =
216 v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops,
218 flash->platform_data->max_flash_timeout,
220 flash->platform_data->max_flash_timeout);
221 flash->flash_intensity =
222 v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops,
225 flash->platform_data->max_flash_intensity,
226 1, flash->platform_data->max_flash_intensity);
227 flash->torch_intensity =
228 v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops,
231 flash->platform_data->max_torch_intensity,
233 flash->platform_data->max_torch_intensity);
234 flash->indicator_intensity =
235 v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops,
238 flash->platform_data->max_indicator_intensity,
241 fault = v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops,
247 if (flash->ctrls.error)
248 return flash->ctrls.error;
252 flash->subdev.ctrl_handler = &flash->ctrls;
261 adp1653_init_device(struct adp1653_flash *flash)
263 struct i2c_client *client = v4l2_get_subdevdata(&flash->subdev);
273 mutex_lock(flash->ctrls.lock);
275 flash->fault = 0;
276 rval = adp1653_get_fault(flash);
277 mutex_unlock(flash->ctrls.lock);
283 mutex_lock(flash->ctrls.lock);
284 rval = adp1653_update_hw(flash);
285 mutex_unlock(flash->ctrls.lock);
296 __adp1653_set_power(struct adp1653_flash *flash, int on)
300 if (flash->platform_data->power) {
301 ret = flash->platform_data->power(&flash->subdev, on);
305 gpiod_set_value(flash->platform_data->enable_gpio, on);
314 ret = adp1653_init_device(flash);
318 if (flash->platform_data->power)
319 flash->platform_data->power(&flash->subdev, 0);
321 gpiod_set_value(flash->platform_data->enable_gpio, 0);
329 struct adp1653_flash *flash = to_adp1653_flash(subdev);
332 mutex_lock(&flash->power_lock);
337 if (flash->power_count == !on) {
338 ret = __adp1653_set_power(flash, !!on);
344 flash->power_count += on ? 1 : -1;
345 WARN_ON(flash->power_count < 0);
348 mutex_unlock(&flash->power_lock);
384 struct adp1653_flash *flash = to_adp1653_flash(subdev);
386 if (!flash->power_count)
389 return __adp1653_set_power(flash, 0);
396 struct adp1653_flash *flash = to_adp1653_flash(subdev);
398 if (!flash->power_count)
401 return __adp1653_set_power(flash, 1);
412 struct adp1653_flash *flash,
421 flash->platform_data = pd;
423 child = of_get_child_by_name(node, "flash");
427 if (of_property_read_u32(child, "flash-timeout-us",
431 if (of_property_read_u32(child, "flash-max-microamp",
471 struct adp1653_flash *flash;
474 flash = devm_kzalloc(&client->dev, sizeof(*flash), GFP_KERNEL);
475 if (flash == NULL)
479 ret = adp1653_of_init(client, flash, client->dev.of_node);
488 flash->platform_data = client->dev.platform_data;
491 mutex_init(&flash->power_lock);
493 v4l2_i2c_subdev_init(&flash->subdev, client, &adp1653_ops);
494 flash->subdev.internal_ops = &adp1653_internal_ops;
495 flash->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
497 ret = adp1653_init_controls(flash);
501 ret = media_entity_pads_init(&flash->subdev.entity, 0, NULL);
505 flash->subdev.entity.function = MEDIA_ENT_F_FLASH;
511 v4l2_ctrl_handler_free(&flash->ctrls);
518 struct adp1653_flash *flash = to_adp1653_flash(subdev);
520 v4l2_device_unregister_subdev(&flash->subdev);
521 v4l2_ctrl_handler_free(&flash->ctrls);
522 media_entity_cleanup(&flash->subdev.entity);
551 MODULE_DESCRIPTION("Analog Devices ADP1653 LED flash driver");