Lines Matching defs:imx335
3 * Sony imx335 Camera Sensor Driver
59 * struct imx335_reg - imx335 sensor register
69 * struct imx335_reg_list - imx335 sensor register list
79 * struct imx335_mode - imx335 sensor mode structure
105 * struct imx335 - imx335 sensor device structure
124 struct imx335 {
256 * to_imx335() - imx335 V4L2 sub-device to imx335 device.
257 * @subdev: pointer to imx335 V4L2 sub-device
259 * Return: pointer to imx335 device
261 static inline struct imx335 *to_imx335(struct v4l2_subdev *subdev)
263 return container_of(subdev, struct imx335, sd);
268 * @imx335: pointer to imx335 device
277 static int imx335_read_reg(struct imx335 *imx335, u16 reg, u32 len, u32 *val)
279 struct i2c_client *client = v4l2_get_subdevdata(&imx335->sd);
313 * @imx335: pointer to imx335 device
322 static int imx335_write_reg(struct imx335 *imx335, u16 reg, u32 len, u32 val)
324 struct i2c_client *client = v4l2_get_subdevdata(&imx335->sd);
340 * @imx335: pointer to imx335 device
346 static int imx335_write_regs(struct imx335 *imx335,
353 ret = imx335_write_reg(imx335, regs[i].address, 1, regs[i].val);
363 * @imx335: pointer to imx335 device
368 static int imx335_update_controls(struct imx335 *imx335,
373 ret = __v4l2_ctrl_s_ctrl(imx335->link_freq_ctrl, mode->link_freq_idx);
377 ret = __v4l2_ctrl_s_ctrl(imx335->hblank_ctrl, mode->hblank);
381 return __v4l2_ctrl_modify_range(imx335->vblank_ctrl, mode->vblank_min,
387 * @imx335: pointer to imx335 device
393 static int imx335_update_exp_gain(struct imx335 *imx335, u32 exposure, u32 gain)
398 lpfr = imx335->vblank + imx335->cur_mode->height;
401 dev_dbg(imx335->dev, "Set exp %u, analog gain %u, shutter %u, lpfr %u",
404 ret = imx335_write_reg(imx335, IMX335_REG_HOLD, 1, 1);
408 ret = imx335_write_reg(imx335, IMX335_REG_LPFR, 3, lpfr);
412 ret = imx335_write_reg(imx335, IMX335_REG_SHUTTER, 3, shutter);
416 ret = imx335_write_reg(imx335, IMX335_REG_AGAIN, 2, gain);
419 imx335_write_reg(imx335, IMX335_REG_HOLD, 1, 0);
438 struct imx335 *imx335 =
439 container_of(ctrl->handler, struct imx335, ctrl_handler);
446 imx335->vblank = imx335->vblank_ctrl->val;
448 dev_dbg(imx335->dev, "Received vblank %u, new lpfr %u",
449 imx335->vblank,
450 imx335->vblank + imx335->cur_mode->height);
452 ret = __v4l2_ctrl_modify_range(imx335->exp_ctrl,
454 imx335->vblank +
455 imx335->cur_mode->height -
461 if (!pm_runtime_get_if_in_use(imx335->dev))
465 analog_gain = imx335->again_ctrl->val;
467 dev_dbg(imx335->dev, "Received exp %u, analog gain %u",
470 ret = imx335_update_exp_gain(imx335, exposure, analog_gain);
472 pm_runtime_put(imx335->dev);
476 dev_err(imx335->dev, "Invalid control %d", ctrl->id);
490 * @sd: pointer to imx335 V4L2 sub-device structure
510 * @sd: pointer to imx335 V4L2 sub-device structure
537 * @imx335: pointer to imx335 device
541 static void imx335_fill_pad_format(struct imx335 *imx335,
557 * @sd: pointer to imx335 V4L2 sub-device structure
567 struct imx335 *imx335 = to_imx335(sd);
569 mutex_lock(&imx335->mutex);
577 imx335_fill_pad_format(imx335, imx335->cur_mode, fmt);
580 mutex_unlock(&imx335->mutex);
587 * @sd: pointer to imx335 V4L2 sub-device structure
597 struct imx335 *imx335 = to_imx335(sd);
601 mutex_lock(&imx335->mutex);
604 imx335_fill_pad_format(imx335, mode, fmt);
612 ret = imx335_update_controls(imx335, mode);
614 imx335->cur_mode = mode;
617 mutex_unlock(&imx335->mutex);
624 * @sd: pointer to imx335 V4L2 sub-device structure
632 struct imx335 *imx335 = to_imx335(sd);
636 imx335_fill_pad_format(imx335, &supported_mode, &fmt);
643 * @imx335: pointer to imx335 device
647 static int imx335_start_streaming(struct imx335 *imx335)
653 reg_list = &imx335->cur_mode->reg_list;
654 ret = imx335_write_regs(imx335, reg_list->regs,
657 dev_err(imx335->dev, "fail to write initial registers");
662 ret = __v4l2_ctrl_handler_setup(imx335->sd.ctrl_handler);
664 dev_err(imx335->dev, "fail to setup handler");
669 ret = imx335_write_reg(imx335, IMX335_REG_MODE_SELECT,
672 dev_err(imx335->dev, "fail to start streaming");
684 * @imx335: pointer to imx335 device
688 static int imx335_stop_streaming(struct imx335 *imx335)
690 return imx335_write_reg(imx335, IMX335_REG_MODE_SELECT,
696 * @sd: pointer to imx335 subdevice
703 struct imx335 *imx335 = to_imx335(sd);
706 mutex_lock(&imx335->mutex);
708 if (imx335->streaming == enable) {
709 mutex_unlock(&imx335->mutex);
714 ret = pm_runtime_resume_and_get(imx335->dev);
718 ret = imx335_start_streaming(imx335);
722 imx335_stop_streaming(imx335);
723 pm_runtime_put(imx335->dev);
726 imx335->streaming = enable;
728 mutex_unlock(&imx335->mutex);
733 pm_runtime_put(imx335->dev);
735 mutex_unlock(&imx335->mutex);
741 * imx335_detect() - Detect imx335 sensor
742 * @imx335: pointer to imx335 device
746 static int imx335_detect(struct imx335 *imx335)
751 ret = imx335_read_reg(imx335, IMX335_REG_ID, 2, &val);
756 dev_err(imx335->dev, "chip id mismatch: %x!=%x",
766 * @imx335: pointer to imx335 device
770 static int imx335_parse_hw_config(struct imx335 *imx335)
772 struct fwnode_handle *fwnode = dev_fwnode(imx335->dev);
785 imx335->reset_gpio = devm_gpiod_get_optional(imx335->dev, "reset",
787 if (IS_ERR(imx335->reset_gpio)) {
788 dev_err(imx335->dev, "failed to get reset gpio %ld",
789 PTR_ERR(imx335->reset_gpio));
790 return PTR_ERR(imx335->reset_gpio);
794 imx335->inclk = devm_clk_get(imx335->dev, NULL);
795 if (IS_ERR(imx335->inclk)) {
796 dev_err(imx335->dev, "could not get inclk");
797 return PTR_ERR(imx335->inclk);
800 rate = clk_get_rate(imx335->inclk);
802 dev_err(imx335->dev, "inclk frequency mismatch");
816 dev_err(imx335->dev,
824 dev_err(imx335->dev, "no link frequencies defined");
868 struct imx335 *imx335 = to_imx335(sd);
871 gpiod_set_value_cansleep(imx335->reset_gpio, 1);
873 ret = clk_prepare_enable(imx335->inclk);
875 dev_err(imx335->dev, "fail to enable inclk");
884 gpiod_set_value_cansleep(imx335->reset_gpio, 0);
898 struct imx335 *imx335 = to_imx335(sd);
900 gpiod_set_value_cansleep(imx335->reset_gpio, 0);
902 clk_disable_unprepare(imx335->inclk);
909 * @imx335: pointer to imx335 device
913 static int imx335_init_controls(struct imx335 *imx335)
915 struct v4l2_ctrl_handler *ctrl_hdlr = &imx335->ctrl_handler;
916 const struct imx335_mode *mode = imx335->cur_mode;
925 ctrl_hdlr->lock = &imx335->mutex;
929 imx335->exp_ctrl = v4l2_ctrl_new_std(ctrl_hdlr,
937 imx335->again_ctrl = v4l2_ctrl_new_std(ctrl_hdlr,
945 v4l2_ctrl_cluster(2, &imx335->exp_ctrl);
947 imx335->vblank_ctrl = v4l2_ctrl_new_std(ctrl_hdlr,
955 imx335->pclk_ctrl = v4l2_ctrl_new_std(ctrl_hdlr,
961 imx335->link_freq_ctrl = v4l2_ctrl_new_int_menu(ctrl_hdlr,
968 if (imx335->link_freq_ctrl)
969 imx335->link_freq_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY;
971 imx335->hblank_ctrl = v4l2_ctrl_new_std(ctrl_hdlr,
977 if (imx335->hblank_ctrl)
978 imx335->hblank_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY;
981 dev_err(imx335->dev, "control init failed: %d",
987 imx335->sd.ctrl_handler = ctrl_hdlr;
1000 struct imx335 *imx335;
1003 imx335 = devm_kzalloc(&client->dev, sizeof(*imx335), GFP_KERNEL);
1004 if (!imx335)
1007 imx335->dev = &client->dev;
1010 v4l2_i2c_subdev_init(&imx335->sd, client, &imx335_subdev_ops);
1012 ret = imx335_parse_hw_config(imx335);
1014 dev_err(imx335->dev, "HW configuration is not supported");
1018 mutex_init(&imx335->mutex);
1020 ret = imx335_power_on(imx335->dev);
1022 dev_err(imx335->dev, "failed to power-on the sensor");
1027 ret = imx335_detect(imx335);
1029 dev_err(imx335->dev, "failed to find sensor: %d", ret);
1034 imx335->cur_mode = &supported_mode;
1035 imx335->vblank = imx335->cur_mode->vblank;
1037 ret = imx335_init_controls(imx335);
1039 dev_err(imx335->dev, "failed to init controls: %d", ret);
1044 imx335->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
1045 imx335->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
1048 imx335->pad.flags = MEDIA_PAD_FL_SOURCE;
1049 ret = media_entity_pads_init(&imx335->sd.entity, 1, &imx335->pad);
1051 dev_err(imx335->dev, "failed to init entity pads: %d", ret);
1055 ret = v4l2_async_register_subdev_sensor(&imx335->sd);
1057 dev_err(imx335->dev,
1062 pm_runtime_set_active(imx335->dev);
1063 pm_runtime_enable(imx335->dev);
1064 pm_runtime_idle(imx335->dev);
1069 media_entity_cleanup(&imx335->sd.entity);
1071 v4l2_ctrl_handler_free(imx335->sd.ctrl_handler);
1073 imx335_power_off(imx335->dev);
1075 mutex_destroy(&imx335->mutex);
1089 struct imx335 *imx335 = to_imx335(sd);
1100 mutex_destroy(&imx335->mutex);
1108 { .compatible = "sony,imx335" },
1118 .name = "imx335",
1126 MODULE_DESCRIPTION("Sony imx335 sensor driver");