Lines Matching refs:dw9800w_dev

516 static void dw9800w_subdev_cleanup(struct dw9800w_device *dw9800w_dev)  in dw9800w_subdev_cleanup()  argument
518 v4l2_device_unregister_subdev(&dw9800w_dev->sd); in dw9800w_subdev_cleanup()
519 v4l2_device_unregister(&dw9800w_dev->vdev); in dw9800w_subdev_cleanup()
520 v4l2_ctrl_handler_free(&dw9800w_dev->ctrls_vcm); in dw9800w_subdev_cleanup()
521 media_entity_cleanup(&dw9800w_dev->sd.entity); in dw9800w_subdev_cleanup()
541 static int __dw9800w_set_power(struct dw9800w_device *dw9800w_dev, bool on) in __dw9800w_set_power() argument
543 if (dw9800w_dev->power_gpio) in __dw9800w_set_power()
544 gpiod_direction_output(dw9800w_dev->power_gpio, on); in __dw9800w_set_power()
549 static int dw9800w_check_id(struct dw9800w_device *dw9800w_dev) in dw9800w_check_id() argument
553 struct i2c_client *client = dw9800w_dev->client; in dw9800w_check_id()
556 __dw9800w_set_power(dw9800w_dev, true); in dw9800w_check_id()
564 dev_info(&dw9800w_dev->client->dev, in dw9800w_check_id()
587 struct dw9800w_device *dw9800w_dev; in dw9800w_probe() local
649 dw9800w_dev = devm_kzalloc(&client->dev, sizeof(*dw9800w_dev), in dw9800w_probe()
651 if (dw9800w_dev == NULL) in dw9800w_probe()
655 &dw9800w_dev->module_index); in dw9800w_probe()
657 &dw9800w_dev->module_facing); in dw9800w_probe()
663 dw9800w_dev->client = client; in dw9800w_probe()
664 dw9800w_dev->power_gpio = devm_gpiod_get(&client->dev, in dw9800w_probe()
666 if (IS_ERR(dw9800w_dev->power_gpio)) { in dw9800w_probe()
667 dw9800w_dev->power_gpio = NULL; in dw9800w_probe()
672 ret = dw9800w_check_id(dw9800w_dev); in dw9800w_probe()
679 v4l2_i2c_subdev_init(&dw9800w_dev->sd, client, &dw9800w_ops); in dw9800w_probe()
680 dw9800w_dev->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; in dw9800w_probe()
681 dw9800w_dev->sd.internal_ops = &dw9800w_int_ops; in dw9800w_probe()
683 ret = dw9800w_init_controls(dw9800w_dev); in dw9800w_probe()
687 ret = media_entity_pads_init(&dw9800w_dev->sd.entity, 0, NULL); in dw9800w_probe()
691 sd = &dw9800w_dev->sd; in dw9800w_probe()
695 if (strcmp(dw9800w_dev->module_facing, "back") == 0) in dw9800w_probe()
701 dw9800w_dev->module_index, facing, in dw9800w_probe()
707 dw9800w_dev->max_ma = max_ma; in dw9800w_probe()
708 dw9800w_dev->vcm_cfg.start_ma = start_ma; in dw9800w_probe()
709 dw9800w_dev->vcm_cfg.rated_ma = rated_ma; in dw9800w_probe()
710 dw9800w_dev->vcm_cfg.step_mode = step_mode; in dw9800w_probe()
711 dw9800w_update_vcm_cfg(dw9800w_dev); in dw9800w_probe()
712 dw9800w_dev->move_us = 0; in dw9800w_probe()
713 dw9800w_dev->current_related_pos = VCMDRV_MAX_LOG; in dw9800w_probe()
714 dw9800w_dev->start_move_tv = ns_to_kernel_old_timeval(ktime_get_ns()); in dw9800w_probe()
715 dw9800w_dev->end_move_tv = ns_to_kernel_old_timeval(ktime_get_ns()); in dw9800w_probe()
717 dw9800w_dev->t_src = t_src; in dw9800w_probe()
718 dw9800w_dev->t_div = t_div; in dw9800w_probe()
720 i2c_set_clientdata(client, dw9800w_dev); in dw9800w_probe()
721 mutex_init(&dw9800w_dev->lock); in dw9800w_probe()
723 dw9800w_dev->vcm_movefull_t = in dw9800w_probe()
724 dw9800w_move_time(dw9800w_dev, DW9800W_MAX_REG); in dw9800w_probe()
733 dw9800w_subdev_cleanup(dw9800w_dev); in dw9800w_probe()
735 __dw9800w_set_power(dw9800w_dev, false); in dw9800w_probe()
744 struct dw9800w_device *dw9800w_dev = i2c_get_clientdata(client); in dw9800w_remove() local
746 mutex_destroy(&dw9800w_dev->lock); in dw9800w_remove()
748 dw9800w_subdev_cleanup(dw9800w_dev); in dw9800w_remove()