Lines Matching full:flash
3 * General device driver for TI lm3559, lm3560, FLASH LED Driver
76 static int lm3560_mode_ctrl(struct lm3560_flash *flash) in lm3560_mode_ctrl() argument
80 switch (flash->led_mode) { in lm3560_mode_ctrl()
82 rval = regmap_update_bits(flash->regmap, in lm3560_mode_ctrl()
86 rval = regmap_update_bits(flash->regmap, in lm3560_mode_ctrl()
90 rval = regmap_update_bits(flash->regmap, in lm3560_mode_ctrl()
98 static int lm3560_enable_ctrl(struct lm3560_flash *flash, in lm3560_enable_ctrl() argument
105 rval = regmap_update_bits(flash->regmap, in lm3560_enable_ctrl()
108 rval = regmap_update_bits(flash->regmap, in lm3560_enable_ctrl()
112 rval = regmap_update_bits(flash->regmap, in lm3560_enable_ctrl()
115 rval = regmap_update_bits(flash->regmap, in lm3560_enable_ctrl()
122 static int lm3560_torch_brt_ctrl(struct lm3560_flash *flash, in lm3560_torch_brt_ctrl() argument
129 return lm3560_enable_ctrl(flash, led_no, false); in lm3560_torch_brt_ctrl()
131 rval = lm3560_enable_ctrl(flash, led_no, true); in lm3560_torch_brt_ctrl()
135 rval = regmap_update_bits(flash->regmap, in lm3560_torch_brt_ctrl()
138 rval = regmap_update_bits(flash->regmap, in lm3560_torch_brt_ctrl()
145 static int lm3560_flash_brt_ctrl(struct lm3560_flash *flash, in lm3560_flash_brt_ctrl() argument
152 return lm3560_enable_ctrl(flash, led_no, false); in lm3560_flash_brt_ctrl()
154 rval = lm3560_enable_ctrl(flash, led_no, true); in lm3560_flash_brt_ctrl()
158 rval = regmap_update_bits(flash->regmap, in lm3560_flash_brt_ctrl()
161 rval = regmap_update_bits(flash->regmap, in lm3560_flash_brt_ctrl()
170 struct lm3560_flash *flash = to_lm3560_flash(ctrl, led_no); in lm3560_get_ctrl() local
173 mutex_lock(&flash->lock); in lm3560_get_ctrl()
178 rval = regmap_read(flash->regmap, REG_FLAG, ®_val); in lm3560_get_ctrl()
191 mutex_unlock(&flash->lock); in lm3560_get_ctrl()
197 struct lm3560_flash *flash = to_lm3560_flash(ctrl, led_no); in lm3560_set_ctrl() local
201 mutex_lock(&flash->lock); in lm3560_set_ctrl()
205 flash->led_mode = ctrl->val; in lm3560_set_ctrl()
206 if (flash->led_mode != V4L2_FLASH_LED_MODE_FLASH) in lm3560_set_ctrl()
207 rval = lm3560_mode_ctrl(flash); in lm3560_set_ctrl()
211 rval = regmap_update_bits(flash->regmap, in lm3560_set_ctrl()
218 if (flash->led_mode != V4L2_FLASH_LED_MODE_FLASH) { in lm3560_set_ctrl()
222 flash->led_mode = V4L2_FLASH_LED_MODE_FLASH; in lm3560_set_ctrl()
223 rval = lm3560_mode_ctrl(flash); in lm3560_set_ctrl()
227 if (flash->led_mode != V4L2_FLASH_LED_MODE_FLASH) { in lm3560_set_ctrl()
231 flash->led_mode = V4L2_FLASH_LED_MODE_NONE; in lm3560_set_ctrl()
232 rval = lm3560_mode_ctrl(flash); in lm3560_set_ctrl()
237 rval = regmap_update_bits(flash->regmap, in lm3560_set_ctrl()
242 rval = lm3560_flash_brt_ctrl(flash, led_no, ctrl->val); in lm3560_set_ctrl()
246 rval = lm3560_torch_brt_ctrl(flash, led_no, ctrl->val); in lm3560_set_ctrl()
251 mutex_unlock(&flash->lock); in lm3560_set_ctrl()
286 static int lm3560_init_controls(struct lm3560_flash *flash, in lm3560_init_controls() argument
290 u32 max_flash_brt = flash->pdata->max_flash_brt[led_no]; in lm3560_init_controls()
291 u32 max_torch_brt = flash->pdata->max_torch_brt[led_no]; in lm3560_init_controls()
292 struct v4l2_ctrl_handler *hdl = &flash->ctrls_led[led_no]; in lm3560_init_controls()
297 /* flash mode */ in lm3560_init_controls()
301 flash->led_mode = V4L2_FLASH_LED_MODE_NONE; in lm3560_init_controls()
303 /* flash source */ in lm3560_init_controls()
307 /* flash strobe */ in lm3560_init_controls()
310 /* flash strobe stop */ in lm3560_init_controls()
313 /* flash strobe timeout */ in lm3560_init_controls()
316 flash->pdata->max_flash_timeout, in lm3560_init_controls()
318 flash->pdata->max_flash_timeout); in lm3560_init_controls()
320 /* flash brt */ in lm3560_init_controls()
342 flash->subdev_led[led_no].ctrl_handler = hdl; in lm3560_init_controls()
357 static int lm3560_subdev_init(struct lm3560_flash *flash, in lm3560_subdev_init() argument
360 struct i2c_client *client = to_i2c_client(flash->dev); in lm3560_subdev_init()
363 v4l2_i2c_subdev_init(&flash->subdev_led[led_no], client, &lm3560_ops); in lm3560_subdev_init()
364 flash->subdev_led[led_no].flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; in lm3560_subdev_init()
365 strcpy(flash->subdev_led[led_no].name, led_name); in lm3560_subdev_init()
366 rval = lm3560_init_controls(flash, led_no); in lm3560_subdev_init()
369 rval = media_entity_pads_init(&flash->subdev_led[led_no].entity, 0, NULL); in lm3560_subdev_init()
372 flash->subdev_led[led_no].entity.function = MEDIA_ENT_F_FLASH; in lm3560_subdev_init()
377 v4l2_ctrl_handler_free(&flash->ctrls_led[led_no]); in lm3560_subdev_init()
381 static int lm3560_init_device(struct lm3560_flash *flash) in lm3560_init_device() argument
387 rval = regmap_update_bits(flash->regmap, in lm3560_init_device()
388 REG_FLASH_TOUT, 0x60, flash->pdata->peak); in lm3560_init_device()
392 flash->led_mode = V4L2_FLASH_LED_MODE_NONE; in lm3560_init_device()
393 rval = lm3560_mode_ctrl(flash); in lm3560_init_device()
397 rval = regmap_read(flash->regmap, REG_FLAG, ®_val); in lm3560_init_device()
404 struct lm3560_flash *flash; in lm3560_probe() local
408 flash = devm_kzalloc(&client->dev, sizeof(*flash), GFP_KERNEL); in lm3560_probe()
409 if (flash == NULL) in lm3560_probe()
412 flash->regmap = devm_regmap_init_i2c(client, &lm3560_regmap); in lm3560_probe()
413 if (IS_ERR(flash->regmap)) { in lm3560_probe()
414 rval = PTR_ERR(flash->regmap); in lm3560_probe()
432 flash->pdata = pdata; in lm3560_probe()
433 flash->dev = &client->dev; in lm3560_probe()
434 mutex_init(&flash->lock); in lm3560_probe()
436 rval = lm3560_subdev_init(flash, LM3560_LED0, "lm3560-led0"); in lm3560_probe()
440 rval = lm3560_subdev_init(flash, LM3560_LED1, "lm3560-led1"); in lm3560_probe()
444 rval = lm3560_init_device(flash); in lm3560_probe()
448 i2c_set_clientdata(client, flash); in lm3560_probe()
455 struct lm3560_flash *flash = i2c_get_clientdata(client); in lm3560_remove() local
459 v4l2_device_unregister_subdev(&flash->subdev_led[i]); in lm3560_remove()
460 v4l2_ctrl_handler_free(&flash->ctrls_led[i]); in lm3560_remove()
461 media_entity_cleanup(&flash->subdev_led[i].entity); in lm3560_remove()
489 MODULE_DESCRIPTION("Texas Instruments LM3560 LED flash driver");