Lines Matching refs:flash
52 static int adp1653_update_hw(struct adp1653_flash *flash) in adp1653_update_hw() argument
54 struct i2c_client *client = v4l2_get_subdevdata(&flash->subdev); in adp1653_update_hw()
60 flash->indicator_intensity->val) in adp1653_update_hw()
63 switch (flash->led_mode->val) { in adp1653_update_hw()
69 config |= TIMEOUT_US_TO_CODE(flash->flash_timeout->val) in adp1653_update_hw()
75 flash->torch_intensity->val) in adp1653_update_hw()
91 static int adp1653_get_fault(struct adp1653_flash *flash) in adp1653_get_fault() argument
93 struct i2c_client *client = v4l2_get_subdevdata(&flash->subdev); in adp1653_get_fault()
101 flash->fault |= fault; in adp1653_get_fault()
103 if (!flash->fault) in adp1653_get_fault()
111 flash->led_mode->val = V4L2_FLASH_LED_MODE_NONE; in adp1653_get_fault()
113 rval = adp1653_update_hw(flash); in adp1653_get_fault()
117 return flash->fault; in adp1653_get_fault()
120 static int adp1653_strobe(struct adp1653_flash *flash, int enable) in adp1653_strobe() argument
122 struct i2c_client *client = v4l2_get_subdevdata(&flash->subdev); in adp1653_strobe()
124 flash->indicator_intensity->val) in adp1653_strobe()
128 if (flash->led_mode->val != V4L2_FLASH_LED_MODE_FLASH) in adp1653_strobe()
136 flash->flash_intensity->val) in adp1653_strobe()
156 struct adp1653_flash *flash = in adp1653_get_ctrl() local
160 rval = adp1653_get_fault(flash); in adp1653_get_ctrl()
166 if (flash->fault & ADP1653_REG_FAULT_FLT_SCP) in adp1653_get_ctrl()
168 if (flash->fault & ADP1653_REG_FAULT_FLT_OT) in adp1653_get_ctrl()
170 if (flash->fault & ADP1653_REG_FAULT_FLT_TMR) in adp1653_get_ctrl()
172 if (flash->fault & ADP1653_REG_FAULT_FLT_OV) in adp1653_get_ctrl()
175 flash->fault = 0; in adp1653_get_ctrl()
182 struct adp1653_flash *flash = in adp1653_set_ctrl() local
186 rval = adp1653_get_fault(flash); in adp1653_set_ctrl()
199 return adp1653_strobe(flash, 1); in adp1653_set_ctrl()
201 return adp1653_strobe(flash, 0); in adp1653_set_ctrl()
204 return adp1653_update_hw(flash); in adp1653_set_ctrl()
212 static int adp1653_init_controls(struct adp1653_flash *flash) in adp1653_init_controls() argument
216 v4l2_ctrl_handler_init(&flash->ctrls, 9); in adp1653_init_controls()
218 flash->led_mode = in adp1653_init_controls()
219 v4l2_ctrl_new_std_menu(&flash->ctrls, &adp1653_ctrl_ops, in adp1653_init_controls()
222 v4l2_ctrl_new_std_menu(&flash->ctrls, &adp1653_ctrl_ops, in adp1653_init_controls()
225 v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops, in adp1653_init_controls()
227 v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops, in adp1653_init_controls()
229 flash->flash_timeout = in adp1653_init_controls()
230 v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops, in adp1653_init_controls()
232 flash->platform_data->max_flash_timeout, in adp1653_init_controls()
234 flash->platform_data->max_flash_timeout); in adp1653_init_controls()
235 flash->flash_intensity = in adp1653_init_controls()
236 v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops, in adp1653_init_controls()
239 flash->platform_data->max_flash_intensity, in adp1653_init_controls()
240 1, flash->platform_data->max_flash_intensity); in adp1653_init_controls()
241 flash->torch_intensity = in adp1653_init_controls()
242 v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops, in adp1653_init_controls()
245 flash->platform_data->max_torch_intensity, in adp1653_init_controls()
247 flash->platform_data->max_torch_intensity); in adp1653_init_controls()
248 flash->indicator_intensity = in adp1653_init_controls()
249 v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops, in adp1653_init_controls()
252 flash->platform_data->max_indicator_intensity, in adp1653_init_controls()
255 fault = v4l2_ctrl_new_std(&flash->ctrls, &adp1653_ctrl_ops, in adp1653_init_controls()
261 if (flash->ctrls.error) in adp1653_init_controls()
262 return flash->ctrls.error; in adp1653_init_controls()
266 flash->subdev.ctrl_handler = &flash->ctrls; in adp1653_init_controls()
275 adp1653_init_device(struct adp1653_flash *flash) in adp1653_init_device() argument
277 struct i2c_client *client = v4l2_get_subdevdata(&flash->subdev); in adp1653_init_device()
287 mutex_lock(flash->ctrls.lock); in adp1653_init_device()
289 flash->fault = 0; in adp1653_init_device()
290 rval = adp1653_get_fault(flash); in adp1653_init_device()
291 mutex_unlock(flash->ctrls.lock); in adp1653_init_device()
297 mutex_lock(flash->ctrls.lock); in adp1653_init_device()
298 rval = adp1653_update_hw(flash); in adp1653_init_device()
299 mutex_unlock(flash->ctrls.lock); in adp1653_init_device()
310 __adp1653_set_power(struct adp1653_flash *flash, int on) in __adp1653_set_power() argument
314 if (flash->platform_data->power) { in __adp1653_set_power()
315 ret = flash->platform_data->power(&flash->subdev, on); in __adp1653_set_power()
319 gpiod_set_value(flash->platform_data->enable_gpio, on); in __adp1653_set_power()
328 ret = adp1653_init_device(flash); in __adp1653_set_power()
332 if (flash->platform_data->power) in __adp1653_set_power()
333 flash->platform_data->power(&flash->subdev, 0); in __adp1653_set_power()
335 gpiod_set_value(flash->platform_data->enable_gpio, 0); in __adp1653_set_power()
343 struct adp1653_flash *flash = to_adp1653_flash(subdev); in adp1653_set_power() local
346 mutex_lock(&flash->power_lock); in adp1653_set_power()
351 if (flash->power_count == !on) { in adp1653_set_power()
352 ret = __adp1653_set_power(flash, !!on); in adp1653_set_power()
358 flash->power_count += on ? 1 : -1; in adp1653_set_power()
359 WARN_ON(flash->power_count < 0); in adp1653_set_power()
362 mutex_unlock(&flash->power_lock); in adp1653_set_power()
398 struct adp1653_flash *flash = to_adp1653_flash(subdev); in adp1653_suspend() local
400 if (!flash->power_count) in adp1653_suspend()
403 return __adp1653_set_power(flash, 0); in adp1653_suspend()
410 struct adp1653_flash *flash = to_adp1653_flash(subdev); in adp1653_resume() local
412 if (!flash->power_count) in adp1653_resume()
415 return __adp1653_set_power(flash, 1); in adp1653_resume()
426 struct adp1653_flash *flash, in adp1653_of_init() argument
435 flash->platform_data = pd; in adp1653_of_init()
485 struct adp1653_flash *flash; in adp1653_probe() local
488 flash = devm_kzalloc(&client->dev, sizeof(*flash), GFP_KERNEL); in adp1653_probe()
489 if (flash == NULL) in adp1653_probe()
493 ret = adp1653_of_init(client, flash, client->dev.of_node); in adp1653_probe()
502 flash->platform_data = client->dev.platform_data; in adp1653_probe()
505 mutex_init(&flash->power_lock); in adp1653_probe()
507 v4l2_i2c_subdev_init(&flash->subdev, client, &adp1653_ops); in adp1653_probe()
508 flash->subdev.internal_ops = &adp1653_internal_ops; in adp1653_probe()
509 flash->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; in adp1653_probe()
511 ret = adp1653_init_controls(flash); in adp1653_probe()
515 ret = media_entity_init(&flash->subdev.entity, 0, NULL, 0); in adp1653_probe()
519 flash->subdev.entity.type = MEDIA_ENT_T_V4L2_SUBDEV_FLASH; in adp1653_probe()
525 v4l2_ctrl_handler_free(&flash->ctrls); in adp1653_probe()
532 struct adp1653_flash *flash = to_adp1653_flash(subdev); in adp1653_remove() local
534 v4l2_device_unregister_subdev(&flash->subdev); in adp1653_remove()
535 v4l2_ctrl_handler_free(&flash->ctrls); in adp1653_remove()
536 media_entity_cleanup(&flash->subdev.entity); in adp1653_remove()