Symbol: dw9768
drivers/media/i2c/dw9768.c
113
static inline struct dw9768 *sd_to_dw9768(struct v4l2_subdev *subdev)
drivers/media/i2c/dw9768.c
115
return container_of(subdev, struct dw9768, sd);
drivers/media/i2c/dw9768.c
197
static int dw9768_mod_reg(struct dw9768 *dw9768, u8 reg, u8 mask, u8 val)
drivers/media/i2c/dw9768.c
199
struct i2c_client *client = v4l2_get_subdevdata(&dw9768->sd);
drivers/media/i2c/dw9768.c
211
static int dw9768_set_dac(struct dw9768 *dw9768, u16 val)
drivers/media/i2c/dw9768.c
213
struct i2c_client *client = v4l2_get_subdevdata(&dw9768->sd);
drivers/media/i2c/dw9768.c
219
static int dw9768_init(struct dw9768 *dw9768)
drivers/media/i2c/dw9768.c
221
struct i2c_client *client = v4l2_get_subdevdata(&dw9768->sd);
drivers/media/i2c/dw9768.c
243
ret = dw9768_mod_reg(dw9768, DW9768_AAC_PRESC_REG,
drivers/media/i2c/dw9768.c
245
dw9768->aac_mode << 5);
drivers/media/i2c/dw9768.c
250
if (dw9768->clock_presc != DW9768_CLOCK_PRE_SCALE_DEFAULT) {
drivers/media/i2c/dw9768.c
251
ret = dw9768_mod_reg(dw9768, DW9768_AAC_PRESC_REG,
drivers/media/i2c/dw9768.c
253
dw9768->clock_presc);
drivers/media/i2c/dw9768.c
259
if (dw9768->aac_timing != DW9768_AAC_TIME_DEFAULT) {
drivers/media/i2c/dw9768.c
261
dw9768->aac_timing);
drivers/media/i2c/dw9768.c
266
for (val = dw9768->focus->val % DW9768_MOVE_STEPS;
drivers/media/i2c/dw9768.c
267
val <= dw9768->focus->val;
drivers/media/i2c/dw9768.c
269
ret = dw9768_set_dac(dw9768, val);
drivers/media/i2c/dw9768.c
274
usleep_range(dw9768->move_delay_us,
drivers/media/i2c/dw9768.c
275
dw9768->move_delay_us + 1000);
drivers/media/i2c/dw9768.c
281
static int dw9768_release(struct dw9768 *dw9768)
drivers/media/i2c/dw9768.c
283
struct i2c_client *client = v4l2_get_subdevdata(&dw9768->sd);
drivers/media/i2c/dw9768.c
286
val = round_down(dw9768->focus->val, DW9768_MOVE_STEPS);
drivers/media/i2c/dw9768.c
288
ret = dw9768_set_dac(dw9768, val);
drivers/media/i2c/dw9768.c
293
usleep_range(dw9768->move_delay_us,
drivers/media/i2c/dw9768.c
294
dw9768->move_delay_us + 1000);
drivers/media/i2c/dw9768.c
314
struct dw9768 *dw9768 = sd_to_dw9768(sd);
drivers/media/i2c/dw9768.c
316
dw9768_release(dw9768);
drivers/media/i2c/dw9768.c
318
dw9768->supplies);
drivers/media/i2c/dw9768.c
326
struct dw9768 *dw9768 = sd_to_dw9768(sd);
drivers/media/i2c/dw9768.c
330
dw9768->supplies);
drivers/media/i2c/dw9768.c
342
ret = dw9768_init(dw9768);
drivers/media/i2c/dw9768.c
350
dw9768->supplies);
drivers/media/i2c/dw9768.c
357
struct dw9768 *dw9768 = container_of(ctrl->handler,
drivers/media/i2c/dw9768.c
358
struct dw9768, ctrls);
drivers/media/i2c/dw9768.c
361
return dw9768_set_dac(dw9768, ctrl->val);
drivers/media/i2c/dw9768.c
389
static int dw9768_init_controls(struct dw9768 *dw9768)
drivers/media/i2c/dw9768.c
391
struct v4l2_ctrl_handler *hdl = &dw9768->ctrls;
drivers/media/i2c/dw9768.c
396
dw9768->focus = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_FOCUS_ABSOLUTE, 0,
drivers/media/i2c/dw9768.c
403
dw9768->sd.ctrl_handler = hdl;
drivers/media/i2c/dw9768.c
411
struct dw9768 *dw9768;
drivers/media/i2c/dw9768.c
416
dw9768 = devm_kzalloc(dev, sizeof(*dw9768), GFP_KERNEL);
drivers/media/i2c/dw9768.c
417
if (!dw9768)
drivers/media/i2c/dw9768.c
421
v4l2_i2c_subdev_init(&dw9768->sd, client, &dw9768_ops);
drivers/media/i2c/dw9768.c
423
dw9768->aac_mode = DW9768_AAC_MODE_DEFAULT;
drivers/media/i2c/dw9768.c
424
dw9768->aac_timing = DW9768_AAC_TIME_DEFAULT;
drivers/media/i2c/dw9768.c
425
dw9768->clock_presc = DW9768_CLOCK_PRE_SCALE_DEFAULT;
drivers/media/i2c/dw9768.c
429
&dw9768->aac_mode);
drivers/media/i2c/dw9768.c
433
&dw9768->clock_presc);
drivers/media/i2c/dw9768.c
437
&dw9768->aac_timing);
drivers/media/i2c/dw9768.c
439
dw9768->move_delay_us = dw9768_cal_move_delay(dw9768->aac_mode,
drivers/media/i2c/dw9768.c
440
dw9768->clock_presc,
drivers/media/i2c/dw9768.c
441
dw9768->aac_timing);
drivers/media/i2c/dw9768.c
444
dw9768->supplies[i].supply = dw9768_supply_names[i];
drivers/media/i2c/dw9768.c
447
dw9768->supplies);
drivers/media/i2c/dw9768.c
454
ret = dw9768_init_controls(dw9768);
drivers/media/i2c/dw9768.c
459
dw9768->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
drivers/media/i2c/dw9768.c
460
dw9768->sd.internal_ops = &dw9768_int_ops;
drivers/media/i2c/dw9768.c
462
ret = media_entity_pads_init(&dw9768->sd.entity, 0, NULL);
drivers/media/i2c/dw9768.c
466
dw9768->sd.entity.function = MEDIA_ENT_F_LENS;
drivers/media/i2c/dw9768.c
487
ret = v4l2_async_register_subdev(&dw9768->sd);
drivers/media/i2c/dw9768.c
506
media_entity_cleanup(&dw9768->sd.entity);
drivers/media/i2c/dw9768.c
508
v4l2_ctrl_handler_free(&dw9768->ctrls);
drivers/media/i2c/dw9768.c
516
struct dw9768 *dw9768 = sd_to_dw9768(sd);
drivers/media/i2c/dw9768.c
519
v4l2_async_unregister_subdev(&dw9768->sd);
drivers/media/i2c/dw9768.c
520
v4l2_ctrl_handler_free(&dw9768->ctrls);
drivers/media/i2c/dw9768.c
521
media_entity_cleanup(&dw9768->sd.entity);