Lines Matching +full:b +full:- +full:facing
1 // SPDX-License-Identifier: GPL-2.0
24 #include <media/v4l2-subdev.h>
25 #include <media/v4l2-ctrls.h>
26 #include <media/v4l2-device.h>
29 #include <linux/rk-camera-module.h>
35 #define DRIVER_NAME "hall-dc"
55 struct device_node *node = motor->dev->of_node; in motor_dev_parse_dt()
59 motor->pwm = devm_pwm_get(motor->dev, NULL); in motor_dev_parse_dt()
60 if (IS_ERR(motor->pwm)) { in motor_dev_parse_dt()
61 error = PTR_ERR(motor->pwm); in motor_dev_parse_dt()
62 if (error != -EPROBE_DEFER) in motor_dev_parse_dt()
63 dev_err(motor->dev, "Failed to request PWM device: %d\n", error); in motor_dev_parse_dt()
66 if (motor->pwm && motor->pwm->args.period != 0) { in motor_dev_parse_dt()
67 motor->pwm_state.period = motor->pwm->args.period; in motor_dev_parse_dt()
68 motor->pwm_state.polarity = motor->pwm->args.polarity; in motor_dev_parse_dt()
70 motor->pwm_state.period = PWM_PERIOD_DEF; in motor_dev_parse_dt()
71 motor->pwm_state.polarity = 0; in motor_dev_parse_dt()
74 &motor->module_index); in motor_dev_parse_dt()
76 &motor->module_facing); in motor_dev_parse_dt()
78 dev_err(motor->dev, in motor_dev_parse_dt()
80 return -EINVAL; in motor_dev_parse_dt()
88 struct motor_dev *motor = container_of(ctrl->handler, in motor_s_ctrl()
91 switch (ctrl->id) { in motor_s_ctrl()
93 motor->pwm_state.enabled = true; in motor_s_ctrl()
94 motor->pwm_state.duty_cycle = in motor_s_ctrl()
95 div64_u64((u64)motor->pwm_state.period * ctrl->val, IRIS_MAX_LOG); in motor_s_ctrl()
96 pwm_apply_state(motor->pwm, &motor->pwm_state); in motor_s_ctrl()
97 dev_dbg(motor->dev, "iris, ctrl->val %d, pwm duty %lld, period %lld, polarity %d\n", in motor_s_ctrl()
98 ctrl->val, in motor_s_ctrl()
99 motor->pwm_state.duty_cycle, in motor_s_ctrl()
100 motor->pwm_state.period, in motor_s_ctrl()
101 motor->pwm_state.polarity); in motor_s_ctrl()
104 dev_err(motor->dev, "not support cmd %d\n", ctrl->id); in motor_s_ctrl()
132 handler = &motor->ctrl_handler; in motor_initialize_controls()
136 handler->lock = &motor->mutex; in motor_initialize_controls()
140 if (handler->error) { in motor_initialize_controls()
141 ret = handler->error; in motor_initialize_controls()
142 dev_err(motor->dev, in motor_initialize_controls()
147 motor->sd.ctrl_handler = handler; in motor_initialize_controls()
161 char facing[2]; in motor_dev_probe() local
163 dev_info(&pdev->dev, "driver version: %02x.%02x.%02x", in motor_dev_probe()
167 motor = devm_kzalloc(&pdev->dev, sizeof(*motor), GFP_KERNEL); in motor_dev_probe()
169 return -ENOMEM; in motor_dev_probe()
170 motor->dev = &pdev->dev; in motor_dev_probe()
171 dev_set_name(motor->dev, "motor"); in motor_dev_probe()
172 dev_set_drvdata(motor->dev, motor); in motor_dev_probe()
174 dev_err(motor->dev, "parse dt error\n"); in motor_dev_probe()
175 return -EINVAL; in motor_dev_probe()
177 mutex_init(&motor->mutex); in motor_dev_probe()
178 v4l2_subdev_init(&motor->sd, &motor_subdev_ops); in motor_dev_probe()
179 motor->sd.owner = pdev->dev.driver->owner; in motor_dev_probe()
180 motor->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; in motor_dev_probe()
181 motor->sd.dev = &pdev->dev; in motor_dev_probe()
182 v4l2_set_subdevdata(&motor->sd, pdev); in motor_dev_probe()
183 platform_set_drvdata(pdev, &motor->sd); in motor_dev_probe()
187 ret = media_entity_pads_init(&motor->sd.entity, 0, NULL); in motor_dev_probe()
190 sd = &motor->sd; in motor_dev_probe()
191 sd->entity.function = MEDIA_ENT_F_LENS; in motor_dev_probe()
192 sd->entity.flags = 2; in motor_dev_probe()
194 memset(facing, 0, sizeof(facing)); in motor_dev_probe()
195 if (strcmp(motor->module_facing, "back") == 0) in motor_dev_probe()
196 facing[0] = 'b'; in motor_dev_probe()
198 facing[0] = 'f'; in motor_dev_probe()
199 snprintf(sd->name, sizeof(sd->name), "m%02d_%s_%s", in motor_dev_probe()
200 motor->module_index, facing, in motor_dev_probe()
204 dev_err(&pdev->dev, "v4l2 async register subdev failed\n"); in motor_dev_probe()
206 dev_info(motor->dev, "gpio motor driver probe success\n"); in motor_dev_probe()
209 v4l2_ctrl_handler_free(&motor->ctrl_handler); in motor_dev_probe()
210 v4l2_device_unregister_subdev(&motor->sd); in motor_dev_probe()
211 media_entity_cleanup(&motor->sd.entity); in motor_dev_probe()
223 return -ENODEV; in motor_dev_remove()
226 v4l2_ctrl_handler_free(&motor->ctrl_handler); in motor_dev_remove()
227 media_entity_cleanup(&motor->sd.entity); in motor_dev_remove()
233 { .compatible = "rockchip,hall-dc", },