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);
319 struct dw9768 *dw9768 = sd_to_dw9768(sd);
321 dw9768_release(dw9768);
323 dw9768->supplies);
331 struct dw9768 *dw9768 = sd_to_dw9768(sd);
335 dw9768->supplies);
347 ret = dw9768_init(dw9768);
355 dw9768->supplies);
362 struct dw9768 *dw9768 = container_of(ctrl->handler,
363 struct dw9768, ctrls);
366 return dw9768_set_dac(dw9768, ctrl->val);
394 static int dw9768_init_controls(struct dw9768 *dw9768)
396 struct v4l2_ctrl_handler *hdl = &dw9768->ctrls;
401 dw9768->focus = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_FOCUS_ABSOLUTE, 0,
408 dw9768->sd.ctrl_handler = hdl;
416 struct dw9768 *dw9768;
421 dw9768 = devm_kzalloc(dev, sizeof(*dw9768), GFP_KERNEL);
422 if (!dw9768)
426 v4l2_i2c_subdev_init(&dw9768->sd, client, &dw9768_ops);
428 dw9768->aac_mode = DW9768_AAC_MODE_DEFAULT;
429 dw9768->aac_timing = DW9768_AAC_TIME_DEFAULT;
430 dw9768->clock_presc = DW9768_CLOCK_PRE_SCALE_DEFAULT;
434 &dw9768->aac_mode);
438 &dw9768->clock_presc);
442 &dw9768->aac_timing);
444 dw9768->move_delay_us = dw9768_cal_move_delay(dw9768->aac_mode,
445 dw9768->clock_presc,
446 dw9768->aac_timing);
449 dw9768->supplies[i].supply = dw9768_supply_names[i];
452 dw9768->supplies);
459 ret = dw9768_init_controls(dw9768);
464 dw9768->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
465 dw9768->sd.internal_ops = &dw9768_int_ops;
467 ret = media_entity_pads_init(&dw9768->sd.entity, 0, NULL);
471 dw9768->sd.entity.function = MEDIA_ENT_F_LENS;
492 ret = v4l2_async_register_subdev(&dw9768->sd);
509 media_entity_cleanup(&dw9768->sd.entity);
511 v4l2_ctrl_handler_free(&dw9768->ctrls);
519 struct dw9768 *dw9768 = sd_to_dw9768(sd);
522 v4l2_async_unregister_subdev(&dw9768->sd);
523 v4l2_ctrl_handler_free(&dw9768->ctrls);
524 media_entity_cleanup(&dw9768->sd.entity);
534 { .compatible = "dongwoon,dw9768" },