Lines Matching defs:dw9768

15 #define DW9768_NAME				"dw9768"
100 /* dw9768 device structure */
101 struct dw9768 {
113 static inline struct dw9768 *sd_to_dw9768(struct v4l2_subdev *subdev)
115 return container_of(subdev, struct dw9768, sd);
202 static int dw9768_mod_reg(struct dw9768 *dw9768, u8 reg, u8 mask, u8 val)
204 struct i2c_client *client = v4l2_get_subdevdata(&dw9768->sd);
216 static int dw9768_set_dac(struct dw9768 *dw9768, u16 val)
218 struct i2c_client *client = v4l2_get_subdevdata(&dw9768->sd);
224 static int dw9768_init(struct dw9768 *dw9768)
226 struct i2c_client *client = v4l2_get_subdevdata(&dw9768->sd);
248 ret = dw9768_mod_reg(dw9768, DW9768_AAC_PRESC_REG,
250 dw9768->aac_mode << 5);
255 if (dw9768->clock_presc != DW9768_CLOCK_PRE_SCALE_DEFAULT) {
256 ret = dw9768_mod_reg(dw9768, DW9768_AAC_PRESC_REG,
258 dw9768->clock_presc);
264 if (dw9768->aac_timing != DW9768_AAC_TIME_DEFAULT) {
266 dw9768->aac_timing);
271 for (val = dw9768->focus->val % DW9768_MOVE_STEPS;
272 val <= dw9768->focus->val;
274 ret = dw9768_set_dac(dw9768, val);
279 usleep_range(dw9768->move_delay_us,
280 dw9768->move_delay_us + 1000);
286 static int dw9768_release(struct dw9768 *dw9768)
288 struct i2c_client *client = v4l2_get_subdevdata(&dw9768->sd);
291 val = round_down(dw9768->focus->val, DW9768_MOVE_STEPS);
293 ret = dw9768_set_dac(dw9768, val);
298 usleep_range(dw9768->move_delay_us,
299 dw9768->move_delay_us + 1000);
320 struct dw9768 *dw9768 = sd_to_dw9768(sd);
322 dw9768_release(dw9768);
324 dw9768->supplies);
333 struct dw9768 *dw9768 = sd_to_dw9768(sd);
337 dw9768->supplies);
349 ret = dw9768_init(dw9768);
357 dw9768->supplies);
364 struct dw9768 *dw9768 = container_of(ctrl->handler,
365 struct dw9768, ctrls);
368 return dw9768_set_dac(dw9768, ctrl->val);
404 static int dw9768_init_controls(struct dw9768 *dw9768)
406 struct v4l2_ctrl_handler *hdl = &dw9768->ctrls;
411 dw9768->focus = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_FOCUS_ABSOLUTE, 0,
418 dw9768->sd.ctrl_handler = hdl;
426 struct dw9768 *dw9768;
430 dw9768 = devm_kzalloc(dev, sizeof(*dw9768), GFP_KERNEL);
431 if (!dw9768)
435 v4l2_i2c_subdev_init(&dw9768->sd, client, &dw9768_ops);
437 dw9768->aac_mode = DW9768_AAC_MODE_DEFAULT;
438 dw9768->aac_timing = DW9768_AAC_TIME_DEFAULT;
439 dw9768->clock_presc = DW9768_CLOCK_PRE_SCALE_DEFAULT;
443 &dw9768->aac_mode);
447 &dw9768->clock_presc);
451 &dw9768->aac_timing);
453 dw9768->move_delay_us = dw9768_cal_move_delay(dw9768->aac_mode,
454 dw9768->clock_presc,
455 dw9768->aac_timing);
458 dw9768->supplies[i].supply = dw9768_supply_names[i];
461 dw9768->supplies);
468 ret = dw9768_init_controls(dw9768);
473 dw9768->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
474 dw9768->sd.internal_ops = &dw9768_int_ops;
476 ret = media_entity_pads_init(&dw9768->sd.entity, 0, NULL);
480 dw9768->sd.entity.function = MEDIA_ENT_F_LENS;
491 ret = v4l2_async_register_subdev(&dw9768->sd);
505 media_entity_cleanup(&dw9768->sd.entity);
507 v4l2_ctrl_handler_free(&dw9768->ctrls);
515 struct dw9768 *dw9768 = sd_to_dw9768(sd);
517 v4l2_async_unregister_subdev(&dw9768->sd);
518 v4l2_ctrl_handler_free(&dw9768->ctrls);
519 media_entity_cleanup(&dw9768->sd.entity);
529 { .compatible = "dongwoon,dw9768" },