Lines Matching refs:dw9763_dev

541 static void dw9763_subdev_cleanup(struct dw9763_device *dw9763_dev)  in dw9763_subdev_cleanup()  argument
543 v4l2_device_unregister_subdev(&dw9763_dev->sd); in dw9763_subdev_cleanup()
544 v4l2_device_unregister(&dw9763_dev->vdev); in dw9763_subdev_cleanup()
545 v4l2_ctrl_handler_free(&dw9763_dev->ctrls_vcm); in dw9763_subdev_cleanup()
546 media_entity_cleanup(&dw9763_dev->sd.entity); in dw9763_subdev_cleanup()
637 static int __dw9763_set_power(struct dw9763_device *dw9763_dev, bool on) in __dw9763_set_power() argument
639 if (dw9763_dev->power_gpio) in __dw9763_set_power()
640 gpiod_direction_output(dw9763_dev->power_gpio, on); in __dw9763_set_power()
646 static int __maybe_unused dw9763_check_id(struct dw9763_device *dw9763_dev) in dw9763_check_id() argument
650 struct i2c_client *client = dw9763_dev->client; in dw9763_check_id()
653 __dw9763_set_power(dw9763_dev, true); in dw9763_check_id()
661 dev_info(&dw9763_dev->client->dev, in dw9763_check_id()
684 struct dw9763_device *dw9763_dev; in dw9763_probe() local
746 dw9763_dev = devm_kzalloc(&client->dev, sizeof(*dw9763_dev), in dw9763_probe()
748 if (dw9763_dev == NULL) in dw9763_probe()
752 &dw9763_dev->module_index); in dw9763_probe()
754 &dw9763_dev->module_facing); in dw9763_probe()
760 dw9763_dev->client = client; in dw9763_probe()
761 dw9763_dev->power_gpio = devm_gpiod_get(&client->dev, in dw9763_probe()
763 if (IS_ERR(dw9763_dev->power_gpio)) { in dw9763_probe()
764 dw9763_dev->power_gpio = NULL; in dw9763_probe()
772 v4l2_i2c_subdev_init(&dw9763_dev->sd, client, &dw9763_ops); in dw9763_probe()
773 dw9763_dev->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; in dw9763_probe()
774 dw9763_dev->sd.internal_ops = &dw9763_int_ops; in dw9763_probe()
776 ret = dw9763_init_controls(dw9763_dev); in dw9763_probe()
780 ret = media_entity_pads_init(&dw9763_dev->sd.entity, 0, NULL); in dw9763_probe()
784 sd = &dw9763_dev->sd; in dw9763_probe()
788 if (strcmp(dw9763_dev->module_facing, "back") == 0) in dw9763_probe()
794 dw9763_dev->module_index, facing, in dw9763_probe()
800 dw9763_dev->max_ma = max_ma; in dw9763_probe()
801 dw9763_dev->vcm_cfg.start_ma = start_ma; in dw9763_probe()
802 dw9763_dev->vcm_cfg.rated_ma = rated_ma; in dw9763_probe()
803 dw9763_dev->vcm_cfg.step_mode = step_mode; in dw9763_probe()
804 dw9763_update_vcm_cfg(dw9763_dev); in dw9763_probe()
805 dw9763_dev->move_us = 0; in dw9763_probe()
806 dw9763_dev->current_related_pos = VCMDRV_MAX_LOG; in dw9763_probe()
807 dw9763_dev->start_move_tv = ns_to_kernel_old_timeval(ktime_get_ns()); in dw9763_probe()
808 dw9763_dev->end_move_tv = ns_to_kernel_old_timeval(ktime_get_ns()); in dw9763_probe()
810 dw9763_dev->t_src = t_src; in dw9763_probe()
811 dw9763_dev->t_div = t_div; in dw9763_probe()
813 i2c_set_clientdata(client, dw9763_dev); in dw9763_probe()
814 mutex_init(&dw9763_dev->lock); in dw9763_probe()
816 dw9763_dev->vcm_movefull_t = in dw9763_probe()
817 dw9763_move_time(dw9763_dev, DW9763_MAX_REG); in dw9763_probe()
827 dw9763_subdev_cleanup(dw9763_dev); in dw9763_probe()
836 struct dw9763_device *dw9763_dev = i2c_get_clientdata(client); in dw9763_remove() local
839 mutex_destroy(&dw9763_dev->lock); in dw9763_remove()
841 dw9763_subdev_cleanup(dw9763_dev); in dw9763_remove()