Lines Matching defs:ov13b

607 static int ov13b10_read_reg(struct ov13b10 *ov13b,
610 struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
643 static int ov13b10_write_reg(struct ov13b10 *ov13b,
646 struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
672 static int ov13b10_write_regs(struct ov13b10 *ov13b,
675 struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
680 ret = ov13b10_write_reg(ov13b, regs[i].address, 1,
694 static int ov13b10_write_reg_list(struct ov13b10 *ov13b,
697 return ov13b10_write_regs(ov13b, r_list->regs, r_list->num_of_regs);
704 struct ov13b10 *ov13b = to_ov13b10(sd);
709 mutex_lock(&ov13b->mutex);
718 mutex_unlock(&ov13b->mutex);
723 static int ov13b10_update_digital_gain(struct ov13b10 *ov13b, u32 d_gain)
733 ret = ov13b10_write_reg(ov13b, OV13B10_REG_DGTL_GAIN_L,
739 ret = ov13b10_write_reg(ov13b, OV13B10_REG_DGTL_GAIN_M,
745 ret = ov13b10_write_reg(ov13b, OV13B10_REG_DGTL_GAIN_H,
751 static int ov13b10_enable_test_pattern(struct ov13b10 *ov13b, u32 pattern)
756 ret = ov13b10_read_reg(ov13b, OV13B10_REG_TEST_PATTERN,
769 return ov13b10_write_reg(ov13b, OV13B10_REG_TEST_PATTERN,
773 static int ov13b10_set_ctrl_hflip(struct ov13b10 *ov13b, u32 ctrl_val)
778 ret = ov13b10_read_reg(ov13b, OV13B10_REG_FORMAT1,
783 ret = ov13b10_write_reg(ov13b, OV13B10_REG_FORMAT1,
790 ret = ov13b10_read_reg(ov13b, OV13B10_REG_H_WIN_OFFSET,
799 return ov13b10_write_reg(ov13b, OV13B10_REG_H_WIN_OFFSET,
804 static int ov13b10_set_ctrl_vflip(struct ov13b10 *ov13b, u32 ctrl_val)
809 ret = ov13b10_read_reg(ov13b, OV13B10_REG_FORMAT1,
814 ret = ov13b10_write_reg(ov13b, OV13B10_REG_FORMAT1,
821 ret = ov13b10_read_reg(ov13b, OV13B10_REG_V_WIN_OFFSET,
830 return ov13b10_write_reg(ov13b, OV13B10_REG_V_WIN_OFFSET,
837 struct ov13b10 *ov13b = container_of(ctrl->handler,
839 struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
847 max = ov13b->cur_mode->height + ctrl->val - 8;
848 __v4l2_ctrl_modify_range(ov13b->exposure,
849 ov13b->exposure->minimum,
850 max, ov13b->exposure->step, max);
864 ret = ov13b10_write_reg(ov13b, OV13B10_REG_ANALOG_GAIN,
869 ret = ov13b10_update_digital_gain(ov13b, ctrl->val);
872 ret = ov13b10_write_reg(ov13b, OV13B10_REG_EXPOSURE,
877 ret = ov13b10_write_reg(ov13b, OV13B10_REG_VTS,
879 ov13b->cur_mode->height
883 ret = ov13b10_enable_test_pattern(ov13b, ctrl->val);
886 ov13b10_set_ctrl_hflip(ov13b, ctrl->val);
889 ov13b10_set_ctrl_vflip(ov13b, ctrl->val);
947 static int ov13b10_do_get_pad_format(struct ov13b10 *ov13b,
952 struct v4l2_subdev *sd = &ov13b->sd;
958 ov13b10_update_pad_format(ov13b->cur_mode, fmt);
968 struct ov13b10 *ov13b = to_ov13b10(sd);
971 mutex_lock(&ov13b->mutex);
972 ret = ov13b10_do_get_pad_format(ov13b, sd_state, fmt);
973 mutex_unlock(&ov13b->mutex);
983 struct ov13b10 *ov13b = to_ov13b10(sd);
992 mutex_lock(&ov13b->mutex);
1007 ov13b->cur_mode = mode;
1008 __v4l2_ctrl_s_ctrl(ov13b->link_freq, mode->link_freq_index);
1011 __v4l2_ctrl_s_ctrl_int64(ov13b->pixel_rate, pixel_rate);
1014 vblank_def = ov13b->cur_mode->vts_def -
1015 ov13b->cur_mode->height;
1016 vblank_min = ov13b->cur_mode->vts_min -
1017 ov13b->cur_mode->height;
1018 __v4l2_ctrl_modify_range(ov13b->vblank, vblank_min,
1020 - ov13b->cur_mode->height,
1023 __v4l2_ctrl_s_ctrl(ov13b->vblank, vblank_def);
1026 - ov13b->cur_mode->width;
1027 __v4l2_ctrl_modify_range(ov13b->hblank, h_blank,
1031 mutex_unlock(&ov13b->mutex);
1037 static int ov13b10_identify_module(struct ov13b10 *ov13b)
1039 struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
1043 if (ov13b->identified)
1046 ret = ov13b10_read_reg(ov13b, OV13B10_REG_CHIP_ID,
1057 ov13b->identified = true;
1105 static int ov13b10_start_streaming(struct ov13b10 *ov13b)
1107 struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
1111 ret = ov13b10_identify_module(ov13b);
1116 ret = ov13b10_write_reg(ov13b, OV13B10_REG_SOFTWARE_RST,
1124 link_freq_index = ov13b->cur_mode->link_freq_index;
1126 ret = ov13b10_write_reg_list(ov13b, reg_list);
1133 reg_list = &ov13b->cur_mode->reg_list;
1134 ret = ov13b10_write_reg_list(ov13b, reg_list);
1141 ret = __v4l2_ctrl_handler_setup(ov13b->sd.ctrl_handler);
1145 return ov13b10_write_reg(ov13b, OV13B10_REG_MODE_SELECT,
1151 static int ov13b10_stop_streaming(struct ov13b10 *ov13b)
1153 return ov13b10_write_reg(ov13b, OV13B10_REG_MODE_SELECT,
1159 struct ov13b10 *ov13b = to_ov13b10(sd);
1163 mutex_lock(&ov13b->mutex);
1164 if (ov13b->streaming == enable) {
1165 mutex_unlock(&ov13b->mutex);
1178 ret = ov13b10_start_streaming(ov13b);
1182 ov13b10_stop_streaming(ov13b);
1186 ov13b->streaming = enable;
1187 mutex_unlock(&ov13b->mutex);
1194 mutex_unlock(&ov13b->mutex);
1202 struct ov13b10 *ov13b = to_ov13b10(sd);
1204 if (ov13b->streaming)
1205 ov13b10_stop_streaming(ov13b);
1215 struct ov13b10 *ov13b = to_ov13b10(sd);
1222 if (ov13b->streaming) {
1223 ret = ov13b10_start_streaming(ov13b);
1231 ov13b10_stop_streaming(ov13b);
1234 ov13b->streaming = false;
1264 static int ov13b10_init_controls(struct ov13b10 *ov13b)
1266 struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
1279 ctrl_hdlr = &ov13b->ctrl_handler;
1284 mutex_init(&ov13b->mutex);
1285 ctrl_hdlr->lock = &ov13b->mutex;
1287 ov13b->link_freq = v4l2_ctrl_new_int_menu(ctrl_hdlr,
1293 if (ov13b->link_freq)
1294 ov13b->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
1299 ov13b->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &ov13b10_ctrl_ops,
1304 mode = ov13b->cur_mode;
1307 ov13b->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov13b10_ctrl_ops,
1315 ov13b->hblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov13b10_ctrl_ops,
1318 if (ov13b->hblank)
1319 ov13b->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
1322 ov13b->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &ov13b10_ctrl_ops,
1363 ov13b->sd.ctrl_handler = ctrl_hdlr;
1369 mutex_destroy(&ov13b->mutex);
1374 static void ov13b10_free_controls(struct ov13b10 *ov13b)
1376 v4l2_ctrl_handler_free(ov13b->sd.ctrl_handler);
1377 mutex_destroy(&ov13b->mutex);
1383 struct ov13b10 *ov13b = to_ov13b10(sd);
1386 ov13b->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
1387 if (IS_ERR(ov13b->reset))
1388 return dev_err_probe(dev, PTR_ERR(ov13b->reset),
1391 ov13b->img_clk = devm_clk_get_optional(dev, NULL);
1392 if (IS_ERR(ov13b->img_clk))
1393 return dev_err_probe(dev, PTR_ERR(ov13b->img_clk),
1396 ov13b->avdd = devm_regulator_get_optional(dev, "avdd");
1397 if (IS_ERR(ov13b->avdd)) {
1398 ret = PTR_ERR(ov13b->avdd);
1399 ov13b->avdd = NULL;
1480 struct ov13b10 *ov13b;
1491 ov13b = devm_kzalloc(&client->dev, sizeof(*ov13b), GFP_KERNEL);
1492 if (!ov13b)
1496 v4l2_i2c_subdev_init(&ov13b->sd, client, &ov13b10_subdev_ops);
1511 ret = ov13b10_identify_module(ov13b);
1519 ov13b->cur_mode = &supported_modes[0];
1521 ret = ov13b10_init_controls(ov13b);
1526 ov13b->sd.internal_ops = &ov13b10_internal_ops;
1527 ov13b->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
1528 ov13b->sd.entity.ops = &ov13b10_subdev_entity_ops;
1529 ov13b->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
1532 ov13b->pad.flags = MEDIA_PAD_FL_SOURCE;
1533 ret = media_entity_pads_init(&ov13b->sd.entity, 1, &ov13b->pad);
1550 ret = v4l2_async_register_subdev_sensor(&ov13b->sd);
1560 media_entity_cleanup(&ov13b->sd.entity);
1563 ov13b10_free_controls(ov13b);
1575 struct ov13b10 *ov13b = to_ov13b10(sd);
1579 ov13b10_free_controls(ov13b);