ov5675             66 drivers/media/i2c/ov5675.c #define to_ov5675(_sd)			container_of(_sd, struct ov5675, sd)
ov5675            512 drivers/media/i2c/ov5675.c static int ov5675_read_reg(struct ov5675 *ov5675, u16 reg, u16 len, u32 *val)
ov5675            514 drivers/media/i2c/ov5675.c 	struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd);
ov5675            542 drivers/media/i2c/ov5675.c static int ov5675_write_reg(struct ov5675 *ov5675, u16 reg, u16 len, u32 val)
ov5675            544 drivers/media/i2c/ov5675.c 	struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd);
ov5675            558 drivers/media/i2c/ov5675.c static int ov5675_write_reg_list(struct ov5675 *ov5675,
ov5675            561 drivers/media/i2c/ov5675.c 	struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd);
ov5675            566 drivers/media/i2c/ov5675.c 		ret = ov5675_write_reg(ov5675, r_list->regs[i].address, 1,
ov5675            579 drivers/media/i2c/ov5675.c static int ov5675_update_digital_gain(struct ov5675 *ov5675, u32 d_gain)
ov5675            583 drivers/media/i2c/ov5675.c 	ret = ov5675_write_reg(ov5675, OV5675_REG_MWB_R_GAIN,
ov5675            588 drivers/media/i2c/ov5675.c 	ret = ov5675_write_reg(ov5675, OV5675_REG_MWB_G_GAIN,
ov5675            593 drivers/media/i2c/ov5675.c 	return ov5675_write_reg(ov5675, OV5675_REG_MWB_B_GAIN,
ov5675            597 drivers/media/i2c/ov5675.c static int ov5675_test_pattern(struct ov5675 *ov5675, u32 pattern)
ov5675            603 drivers/media/i2c/ov5675.c 	return ov5675_write_reg(ov5675, OV5675_REG_TEST_PATTERN,
ov5675            609 drivers/media/i2c/ov5675.c 	struct ov5675 *ov5675 = container_of(ctrl->handler,
ov5675            610 drivers/media/i2c/ov5675.c 					     struct ov5675, ctrl_handler);
ov5675            611 drivers/media/i2c/ov5675.c 	struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd);
ov5675            618 drivers/media/i2c/ov5675.c 		exposure_max = (ov5675->cur_mode->height + ctrl->val -
ov5675            620 drivers/media/i2c/ov5675.c 		__v4l2_ctrl_modify_range(ov5675->exposure,
ov5675            621 drivers/media/i2c/ov5675.c 					 ov5675->exposure->minimum,
ov5675            622 drivers/media/i2c/ov5675.c 					 exposure_max, ov5675->exposure->step,
ov5675            632 drivers/media/i2c/ov5675.c 		ret = ov5675_write_reg(ov5675, OV5675_REG_ANALOG_GAIN,
ov5675            637 drivers/media/i2c/ov5675.c 		ret = ov5675_update_digital_gain(ov5675, ctrl->val);
ov5675            642 drivers/media/i2c/ov5675.c 		ret = ov5675_write_reg(ov5675, OV5675_REG_EXPOSURE,
ov5675            647 drivers/media/i2c/ov5675.c 		ret = ov5675_write_reg(ov5675, OV5675_REG_VTS,
ov5675            649 drivers/media/i2c/ov5675.c 				       ov5675->cur_mode->height + ctrl->val +
ov5675            654 drivers/media/i2c/ov5675.c 		ret = ov5675_test_pattern(ov5675, ctrl->val);
ov5675            671 drivers/media/i2c/ov5675.c static int ov5675_init_controls(struct ov5675 *ov5675)
ov5675            677 drivers/media/i2c/ov5675.c 	ctrl_hdlr = &ov5675->ctrl_handler;
ov5675            682 drivers/media/i2c/ov5675.c 	ctrl_hdlr->lock = &ov5675->mutex;
ov5675            683 drivers/media/i2c/ov5675.c 	ov5675->link_freq = v4l2_ctrl_new_int_menu(ctrl_hdlr, &ov5675_ctrl_ops,
ov5675            687 drivers/media/i2c/ov5675.c 	if (ov5675->link_freq)
ov5675            688 drivers/media/i2c/ov5675.c 		ov5675->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
ov5675            690 drivers/media/i2c/ov5675.c 	ov5675->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &ov5675_ctrl_ops,
ov5675            695 drivers/media/i2c/ov5675.c 	ov5675->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov5675_ctrl_ops,
ov5675            697 drivers/media/i2c/ov5675.c 			  ov5675->cur_mode->vts_min - ov5675->cur_mode->height,
ov5675            698 drivers/media/i2c/ov5675.c 			  OV5675_VTS_MAX - ov5675->cur_mode->height, 1,
ov5675            699 drivers/media/i2c/ov5675.c 			  ov5675->cur_mode->vts_def - ov5675->cur_mode->height);
ov5675            700 drivers/media/i2c/ov5675.c 	h_blank = to_pixels_per_line(ov5675->cur_mode->hts,
ov5675            701 drivers/media/i2c/ov5675.c 		  ov5675->cur_mode->link_freq_index) - ov5675->cur_mode->width;
ov5675            702 drivers/media/i2c/ov5675.c 	ov5675->hblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov5675_ctrl_ops,
ov5675            705 drivers/media/i2c/ov5675.c 	if (ov5675->hblank)
ov5675            706 drivers/media/i2c/ov5675.c 		ov5675->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
ov5675            714 drivers/media/i2c/ov5675.c 	exposure_max = (ov5675->cur_mode->vts_def -
ov5675            716 drivers/media/i2c/ov5675.c 	ov5675->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &ov5675_ctrl_ops,
ov5675            728 drivers/media/i2c/ov5675.c 	ov5675->sd.ctrl_handler = ctrl_hdlr;
ov5675            742 drivers/media/i2c/ov5675.c static int ov5675_start_streaming(struct ov5675 *ov5675)
ov5675            744 drivers/media/i2c/ov5675.c 	struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd);
ov5675            748 drivers/media/i2c/ov5675.c 	link_freq_index = ov5675->cur_mode->link_freq_index;
ov5675            750 drivers/media/i2c/ov5675.c 	ret = ov5675_write_reg_list(ov5675, reg_list);
ov5675            756 drivers/media/i2c/ov5675.c 	reg_list = &ov5675->cur_mode->reg_list;
ov5675            757 drivers/media/i2c/ov5675.c 	ret = ov5675_write_reg_list(ov5675, reg_list);
ov5675            763 drivers/media/i2c/ov5675.c 	ret = __v4l2_ctrl_handler_setup(ov5675->sd.ctrl_handler);
ov5675            767 drivers/media/i2c/ov5675.c 	ret = ov5675_write_reg(ov5675, OV5675_REG_MODE_SELECT,
ov5675            777 drivers/media/i2c/ov5675.c static void ov5675_stop_streaming(struct ov5675 *ov5675)
ov5675            779 drivers/media/i2c/ov5675.c 	struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd);
ov5675            781 drivers/media/i2c/ov5675.c 	if (ov5675_write_reg(ov5675, OV5675_REG_MODE_SELECT,
ov5675            788 drivers/media/i2c/ov5675.c 	struct ov5675 *ov5675 = to_ov5675(sd);
ov5675            792 drivers/media/i2c/ov5675.c 	if (ov5675->streaming == enable)
ov5675            795 drivers/media/i2c/ov5675.c 	mutex_lock(&ov5675->mutex);
ov5675            800 drivers/media/i2c/ov5675.c 			mutex_unlock(&ov5675->mutex);
ov5675            804 drivers/media/i2c/ov5675.c 		ret = ov5675_start_streaming(ov5675);
ov5675            807 drivers/media/i2c/ov5675.c 			ov5675_stop_streaming(ov5675);
ov5675            811 drivers/media/i2c/ov5675.c 		ov5675_stop_streaming(ov5675);
ov5675            815 drivers/media/i2c/ov5675.c 	ov5675->streaming = enable;
ov5675            816 drivers/media/i2c/ov5675.c 	mutex_unlock(&ov5675->mutex);
ov5675            825 drivers/media/i2c/ov5675.c 	struct ov5675 *ov5675 = to_ov5675(sd);
ov5675            827 drivers/media/i2c/ov5675.c 	mutex_lock(&ov5675->mutex);
ov5675            828 drivers/media/i2c/ov5675.c 	if (ov5675->streaming)
ov5675            829 drivers/media/i2c/ov5675.c 		ov5675_stop_streaming(ov5675);
ov5675            831 drivers/media/i2c/ov5675.c 	mutex_unlock(&ov5675->mutex);
ov5675            840 drivers/media/i2c/ov5675.c 	struct ov5675 *ov5675 = to_ov5675(sd);
ov5675            843 drivers/media/i2c/ov5675.c 	mutex_lock(&ov5675->mutex);
ov5675            844 drivers/media/i2c/ov5675.c 	if (ov5675->streaming) {
ov5675            845 drivers/media/i2c/ov5675.c 		ret = ov5675_start_streaming(ov5675);
ov5675            847 drivers/media/i2c/ov5675.c 			ov5675->streaming = false;
ov5675            848 drivers/media/i2c/ov5675.c 			ov5675_stop_streaming(ov5675);
ov5675            849 drivers/media/i2c/ov5675.c 			mutex_unlock(&ov5675->mutex);
ov5675            854 drivers/media/i2c/ov5675.c 	mutex_unlock(&ov5675->mutex);
ov5675            863 drivers/media/i2c/ov5675.c 	struct ov5675 *ov5675 = to_ov5675(sd);
ov5675            872 drivers/media/i2c/ov5675.c 	mutex_lock(&ov5675->mutex);
ov5675            877 drivers/media/i2c/ov5675.c 		ov5675->cur_mode = mode;
ov5675            878 drivers/media/i2c/ov5675.c 		__v4l2_ctrl_s_ctrl(ov5675->link_freq, mode->link_freq_index);
ov5675            879 drivers/media/i2c/ov5675.c 		__v4l2_ctrl_s_ctrl_int64(ov5675->pixel_rate,
ov5675            884 drivers/media/i2c/ov5675.c 		__v4l2_ctrl_modify_range(ov5675->vblank,
ov5675            888 drivers/media/i2c/ov5675.c 		__v4l2_ctrl_s_ctrl(ov5675->vblank, vblank_def);
ov5675            891 drivers/media/i2c/ov5675.c 		__v4l2_ctrl_modify_range(ov5675->hblank, h_blank, h_blank, 1,
ov5675            895 drivers/media/i2c/ov5675.c 	mutex_unlock(&ov5675->mutex);
ov5675            904 drivers/media/i2c/ov5675.c 	struct ov5675 *ov5675 = to_ov5675(sd);
ov5675            906 drivers/media/i2c/ov5675.c 	mutex_lock(&ov5675->mutex);
ov5675            908 drivers/media/i2c/ov5675.c 		fmt->format = *v4l2_subdev_get_try_format(&ov5675->sd, cfg,
ov5675            911 drivers/media/i2c/ov5675.c 		ov5675_update_pad_format(ov5675->cur_mode, &fmt->format);
ov5675            913 drivers/media/i2c/ov5675.c 	mutex_unlock(&ov5675->mutex);
ov5675            950 drivers/media/i2c/ov5675.c 	struct ov5675 *ov5675 = to_ov5675(sd);
ov5675            952 drivers/media/i2c/ov5675.c 	mutex_lock(&ov5675->mutex);
ov5675            955 drivers/media/i2c/ov5675.c 	mutex_unlock(&ov5675->mutex);
ov5675            984 drivers/media/i2c/ov5675.c static int ov5675_identify_module(struct ov5675 *ov5675)
ov5675            986 drivers/media/i2c/ov5675.c 	struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd);
ov5675            990 drivers/media/i2c/ov5675.c 	ret = ov5675_read_reg(ov5675, OV5675_REG_CHIP_ID,
ov5675           1076 drivers/media/i2c/ov5675.c 	struct ov5675 *ov5675 = to_ov5675(sd);
ov5675           1082 drivers/media/i2c/ov5675.c 	mutex_destroy(&ov5675->mutex);
ov5675           1089 drivers/media/i2c/ov5675.c 	struct ov5675 *ov5675;
ov5675           1099 drivers/media/i2c/ov5675.c 	ov5675 = devm_kzalloc(&client->dev, sizeof(*ov5675), GFP_KERNEL);
ov5675           1100 drivers/media/i2c/ov5675.c 	if (!ov5675)
ov5675           1103 drivers/media/i2c/ov5675.c 	v4l2_i2c_subdev_init(&ov5675->sd, client, &ov5675_subdev_ops);
ov5675           1104 drivers/media/i2c/ov5675.c 	ret = ov5675_identify_module(ov5675);
ov5675           1110 drivers/media/i2c/ov5675.c 	mutex_init(&ov5675->mutex);
ov5675           1111 drivers/media/i2c/ov5675.c 	ov5675->cur_mode = &supported_modes[0];
ov5675           1112 drivers/media/i2c/ov5675.c 	ret = ov5675_init_controls(ov5675);
ov5675           1118 drivers/media/i2c/ov5675.c 	ov5675->sd.internal_ops = &ov5675_internal_ops;
ov5675           1119 drivers/media/i2c/ov5675.c 	ov5675->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
ov5675           1120 drivers/media/i2c/ov5675.c 	ov5675->sd.entity.ops = &ov5675_subdev_entity_ops;
ov5675           1121 drivers/media/i2c/ov5675.c 	ov5675->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
ov5675           1122 drivers/media/i2c/ov5675.c 	ov5675->pad.flags = MEDIA_PAD_FL_SOURCE;
ov5675           1123 drivers/media/i2c/ov5675.c 	ret = media_entity_pads_init(&ov5675->sd.entity, 1, &ov5675->pad);
ov5675           1129 drivers/media/i2c/ov5675.c 	ret = v4l2_async_register_subdev_sensor_common(&ov5675->sd);
ov5675           1147 drivers/media/i2c/ov5675.c 	media_entity_cleanup(&ov5675->sd.entity);
ov5675           1150 drivers/media/i2c/ov5675.c 	v4l2_ctrl_handler_free(ov5675->sd.ctrl_handler);
ov5675           1151 drivers/media/i2c/ov5675.c 	mutex_destroy(&ov5675->mutex);