Lines Matching defs:ov08d10

68 #define to_ov08d10(_sd)		container_of(_sd, struct ov08d10, sd)
517 struct ov08d10 {
612 static u32 ov08d10_get_format_code(struct ov08d10 *ov08d10)
619 return codes[ov08d10->vflip->val][ov08d10->hflip->val];
622 static unsigned int ov08d10_modes_num(const struct ov08d10 *ov08d10)
626 for (i = 0; i < ARRAY_SIZE(ov08d10->priv_lane->sp_modes); i++) {
627 if (ov08d10->priv_lane->sp_modes[i].width == 0)
655 static int ov08d10_write_reg_list(struct ov08d10 *ov08d10,
658 struct i2c_client *client = v4l2_get_subdevdata(&ov08d10->sd);
676 static int ov08d10_update_analog_gain(struct ov08d10 *ov08d10, u32 a_gain)
678 struct i2c_client *client = v4l2_get_subdevdata(&ov08d10->sd);
697 static int ov08d10_update_digital_gain(struct ov08d10 *ov08d10, u32 d_gain)
699 struct i2c_client *client = v4l2_get_subdevdata(&ov08d10->sd);
724 static int ov08d10_set_exposure(struct ov08d10 *ov08d10, u32 exposure)
726 struct i2c_client *client = v4l2_get_subdevdata(&ov08d10->sd);
732 cur_vts = ov08d10->cur_mode->vts_def;
767 static int ov08d10_set_vblank(struct ov08d10 *ov08d10, u32 vblank)
769 struct i2c_client *client = v4l2_get_subdevdata(&ov08d10->sd);
793 static int ov08d10_test_pattern(struct ov08d10 *ov08d10, u32 pattern)
795 struct i2c_client *client = v4l2_get_subdevdata(&ov08d10->sd);
818 static int ov08d10_set_ctrl_flip(struct ov08d10 *ov08d10, u32 ctrl_val)
820 struct i2c_client *client = v4l2_get_subdevdata(&ov08d10->sd);
850 struct ov08d10 *ov08d10 = container_of(ctrl->handler,
851 struct ov08d10, ctrl_handler);
852 struct i2c_client *client = v4l2_get_subdevdata(&ov08d10->sd);
859 exposure_max = ov08d10->cur_mode->height + ctrl->val -
861 __v4l2_ctrl_modify_range(ov08d10->exposure,
862 ov08d10->exposure->minimum,
863 exposure_max, ov08d10->exposure->step,
873 ret = ov08d10_update_analog_gain(ov08d10, ctrl->val);
877 ret = ov08d10_update_digital_gain(ov08d10, ctrl->val);
881 ret = ov08d10_set_exposure(ov08d10, ctrl->val);
885 ret = ov08d10_set_vblank(ov08d10, ctrl->val);
889 ret = ov08d10_test_pattern(ov08d10, ctrl->val);
894 ret = ov08d10_set_ctrl_flip(ov08d10,
895 ov08d10->hflip->val |
896 ov08d10->vflip->val << 1);
913 static int ov08d10_init_controls(struct ov08d10 *ov08d10)
925 ctrl_hdlr = &ov08d10->ctrl_handler;
930 ctrl_hdlr->lock = &ov08d10->mutex;
931 link_freq_size = ARRAY_SIZE(ov08d10->priv_lane->link_freq_menu);
932 ov08d10->link_freq =
937 ov08d10->priv_lane->link_freq_menu);
938 if (ov08d10->link_freq)
939 ov08d10->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
941 pixel_rate_max = to_rate(ov08d10->priv_lane->link_freq_menu, 0,
942 ov08d10->cur_mode->data_lanes);
943 ov08d10->pixel_rate =
948 mode = ov08d10->cur_mode;
951 ov08d10->vblank =
957 h_blank = to_pixels_per_line(ov08d10->priv_lane->link_freq_menu,
961 ov08d10->hblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov08d10_ctrl_ops,
964 if (ov08d10->hblank)
965 ov08d10->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
976 ov08d10->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &ov08d10_ctrl_ops,
988 ov08d10->hflip = v4l2_ctrl_new_std(ctrl_hdlr, &ov08d10_ctrl_ops,
990 if (ov08d10->hflip)
991 ov08d10->hflip->flags |= V4L2_CTRL_FLAG_MODIFY_LAYOUT;
992 ov08d10->vflip = v4l2_ctrl_new_std(ctrl_hdlr, &ov08d10_ctrl_ops,
994 if (ov08d10->vflip)
995 ov08d10->vflip->flags |= V4L2_CTRL_FLAG_MODIFY_LAYOUT;
1000 ov08d10->sd.ctrl_handler = ctrl_hdlr;
1005 static void ov08d10_update_pad_format(struct ov08d10 *ov08d10,
1011 fmt->code = ov08d10_get_format_code(ov08d10);
1015 static int ov08d10_start_streaming(struct ov08d10 *ov08d10)
1017 struct i2c_client *client = v4l2_get_subdevdata(&ov08d10->sd);
1021 link_freq_index = ov08d10->cur_mode->link_freq_index;
1023 &ov08d10->priv_lane->link_freq_configs[link_freq_index].reg_list;
1044 ret = ov08d10_write_reg_list(ov08d10, reg_list);
1050 reg_list = &ov08d10->cur_mode->reg_list;
1051 ret = ov08d10_write_reg_list(ov08d10, reg_list);
1057 ret = __v4l2_ctrl_handler_setup(ov08d10->sd.ctrl_handler);
1073 static void ov08d10_stop_streaming(struct ov08d10 *ov08d10)
1075 struct i2c_client *client = v4l2_get_subdevdata(&ov08d10->sd);
1099 struct ov08d10 *ov08d10 = to_ov08d10(sd);
1103 mutex_lock(&ov08d10->mutex);
1107 mutex_unlock(&ov08d10->mutex);
1111 ret = ov08d10_start_streaming(ov08d10);
1114 ov08d10_stop_streaming(ov08d10);
1118 ov08d10_stop_streaming(ov08d10);
1123 __v4l2_ctrl_grab(ov08d10->vflip, enable);
1124 __v4l2_ctrl_grab(ov08d10->hflip, enable);
1126 mutex_unlock(&ov08d10->mutex);
1135 struct ov08d10 *ov08d10 = to_ov08d10(sd);
1140 mode = v4l2_find_nearest_size(ov08d10->priv_lane->sp_modes,
1141 ov08d10->modes_size,
1145 mutex_lock(&ov08d10->mutex);
1146 ov08d10_update_pad_format(ov08d10, mode, &fmt->format);
1151 ov08d10->cur_mode = mode;
1152 __v4l2_ctrl_s_ctrl(ov08d10->link_freq, mode->link_freq_index);
1153 pixel_rate = to_rate(ov08d10->priv_lane->link_freq_menu,
1155 ov08d10->cur_mode->data_lanes);
1156 __v4l2_ctrl_s_ctrl_int64(ov08d10->pixel_rate, pixel_rate);
1160 __v4l2_ctrl_modify_range(ov08d10->vblank,
1164 __v4l2_ctrl_s_ctrl(ov08d10->vblank, vblank_def);
1165 h_blank = to_pixels_per_line(ov08d10->priv_lane->link_freq_menu,
1168 ov08d10->cur_mode->data_lanes)
1170 __v4l2_ctrl_modify_range(ov08d10->hblank, h_blank, h_blank, 1,
1174 mutex_unlock(&ov08d10->mutex);
1183 struct ov08d10 *ov08d10 = to_ov08d10(sd);
1185 mutex_lock(&ov08d10->mutex);
1190 ov08d10_update_pad_format(ov08d10, ov08d10->cur_mode,
1193 mutex_unlock(&ov08d10->mutex);
1202 struct ov08d10 *ov08d10 = to_ov08d10(sd);
1207 mutex_lock(&ov08d10->mutex);
1208 code->code = ov08d10_get_format_code(ov08d10);
1209 mutex_unlock(&ov08d10->mutex);
1218 struct ov08d10 *ov08d10 = to_ov08d10(sd);
1220 if (fse->index >= ov08d10->modes_size)
1223 mutex_lock(&ov08d10->mutex);
1224 if (fse->code != ov08d10_get_format_code(ov08d10)) {
1225 mutex_unlock(&ov08d10->mutex);
1228 mutex_unlock(&ov08d10->mutex);
1230 fse->min_width = ov08d10->priv_lane->sp_modes[fse->index].width;
1232 fse->min_height = ov08d10->priv_lane->sp_modes[fse->index].height;
1240 struct ov08d10 *ov08d10 = to_ov08d10(sd);
1242 mutex_lock(&ov08d10->mutex);
1243 ov08d10_update_pad_format(ov08d10, &ov08d10->priv_lane->sp_modes[0],
1245 mutex_unlock(&ov08d10->mutex);
1270 static int ov08d10_identify_module(struct ov08d10 *ov08d10)
1272 struct i2c_client *client = v4l2_get_subdevdata(&ov08d10->sd);
1304 static int ov08d10_get_hwcfg(struct ov08d10 *ov08d10, struct device *dev)
1343 dev_dbg(dev, "Using %u data lanes\n", ov08d10->cur_mode->data_lanes);
1345 ov08d10->priv_lane = &lane_cfg_2;
1346 ov08d10->modes_size = ov08d10_modes_num(ov08d10);
1354 for (i = 0; i < ARRAY_SIZE(ov08d10->priv_lane->link_freq_menu); i++) {
1356 if (ov08d10->priv_lane->link_freq_menu[i] ==
1363 ov08d10->priv_lane->link_freq_menu[i]);
1378 struct ov08d10 *ov08d10 = to_ov08d10(sd);
1384 mutex_destroy(&ov08d10->mutex);
1389 struct ov08d10 *ov08d10;
1392 ov08d10 = devm_kzalloc(&client->dev, sizeof(*ov08d10), GFP_KERNEL);
1393 if (!ov08d10)
1396 ret = ov08d10_get_hwcfg(ov08d10, &client->dev);
1403 v4l2_i2c_subdev_init(&ov08d10->sd, client, &ov08d10_subdev_ops);
1405 ret = ov08d10_identify_module(ov08d10);
1411 mutex_init(&ov08d10->mutex);
1412 ov08d10->cur_mode = &ov08d10->priv_lane->sp_modes[0];
1413 ret = ov08d10_init_controls(ov08d10);
1419 ov08d10->sd.internal_ops = &ov08d10_internal_ops;
1420 ov08d10->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
1421 ov08d10->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
1422 ov08d10->pad.flags = MEDIA_PAD_FL_SOURCE;
1423 ret = media_entity_pads_init(&ov08d10->sd.entity, 1, &ov08d10->pad);
1429 ret = v4l2_async_register_subdev_sensor(&ov08d10->sd);
1447 media_entity_cleanup(&ov08d10->sd.entity);
1450 v4l2_ctrl_handler_free(ov08d10->sd.ctrl_handler);
1451 mutex_destroy(&ov08d10->mutex);
1467 .name = "ov08d10",
1477 MODULE_DESCRIPTION("OmniVision ov08d10 sensor driver");