imx258            615 drivers/media/i2c/imx258.c static inline struct imx258 *to_imx258(struct v4l2_subdev *_sd)
imx258            617 drivers/media/i2c/imx258.c 	return container_of(_sd, struct imx258, sd);
imx258            621 drivers/media/i2c/imx258.c static int imx258_read_reg(struct imx258 *imx258, u16 reg, u32 len, u32 *val)
imx258            623 drivers/media/i2c/imx258.c 	struct i2c_client *client = v4l2_get_subdevdata(&imx258->sd);
imx258            654 drivers/media/i2c/imx258.c static int imx258_write_reg(struct imx258 *imx258, u16 reg, u32 len, u32 val)
imx258            656 drivers/media/i2c/imx258.c 	struct i2c_client *client = v4l2_get_subdevdata(&imx258->sd);
imx258            671 drivers/media/i2c/imx258.c static int imx258_write_regs(struct imx258 *imx258,
imx258            674 drivers/media/i2c/imx258.c 	struct i2c_client *client = v4l2_get_subdevdata(&imx258->sd);
imx258            679 drivers/media/i2c/imx258.c 		ret = imx258_write_reg(imx258, regs[i].address, 1,
imx258            709 drivers/media/i2c/imx258.c static int imx258_update_digital_gain(struct imx258 *imx258, u32 len, u32 val)
imx258            713 drivers/media/i2c/imx258.c 	ret = imx258_write_reg(imx258, IMX258_REG_GR_DIGITAL_GAIN,
imx258            718 drivers/media/i2c/imx258.c 	ret = imx258_write_reg(imx258, IMX258_REG_GB_DIGITAL_GAIN,
imx258            723 drivers/media/i2c/imx258.c 	ret = imx258_write_reg(imx258, IMX258_REG_R_DIGITAL_GAIN,
imx258            728 drivers/media/i2c/imx258.c 	ret = imx258_write_reg(imx258, IMX258_REG_B_DIGITAL_GAIN,
imx258            738 drivers/media/i2c/imx258.c 	struct imx258 *imx258 =
imx258            739 drivers/media/i2c/imx258.c 		container_of(ctrl->handler, struct imx258, ctrl_handler);
imx258            740 drivers/media/i2c/imx258.c 	struct i2c_client *client = v4l2_get_subdevdata(&imx258->sd);
imx258            752 drivers/media/i2c/imx258.c 		ret = imx258_write_reg(imx258, IMX258_REG_ANALOG_GAIN,
imx258            757 drivers/media/i2c/imx258.c 		ret = imx258_write_reg(imx258, IMX258_REG_EXPOSURE,
imx258            762 drivers/media/i2c/imx258.c 		ret = imx258_update_digital_gain(imx258, IMX258_REG_VALUE_16BIT,
imx258            766 drivers/media/i2c/imx258.c 		ret = imx258_write_reg(imx258, IMX258_REG_TEST_PATTERN,
imx258            769 drivers/media/i2c/imx258.c 		ret = imx258_write_reg(imx258, REG_MIRROR_FLIP_CONTROL,
imx258            831 drivers/media/i2c/imx258.c static int __imx258_get_pad_format(struct imx258 *imx258,
imx258            836 drivers/media/i2c/imx258.c 		fmt->format = *v4l2_subdev_get_try_format(&imx258->sd, cfg,
imx258            839 drivers/media/i2c/imx258.c 		imx258_update_pad_format(imx258->cur_mode, fmt);
imx258            848 drivers/media/i2c/imx258.c 	struct imx258 *imx258 = to_imx258(sd);
imx258            851 drivers/media/i2c/imx258.c 	mutex_lock(&imx258->mutex);
imx258            852 drivers/media/i2c/imx258.c 	ret = __imx258_get_pad_format(imx258, cfg, fmt);
imx258            853 drivers/media/i2c/imx258.c 	mutex_unlock(&imx258->mutex);
imx258            862 drivers/media/i2c/imx258.c 	struct imx258 *imx258 = to_imx258(sd);
imx258            871 drivers/media/i2c/imx258.c 	mutex_lock(&imx258->mutex);
imx258            884 drivers/media/i2c/imx258.c 		imx258->cur_mode = mode;
imx258            885 drivers/media/i2c/imx258.c 		__v4l2_ctrl_s_ctrl(imx258->link_freq, mode->link_freq_index);
imx258            889 drivers/media/i2c/imx258.c 		__v4l2_ctrl_s_ctrl_int64(imx258->pixel_rate, pixel_rate);
imx258            891 drivers/media/i2c/imx258.c 		vblank_def = imx258->cur_mode->vts_def -
imx258            892 drivers/media/i2c/imx258.c 			     imx258->cur_mode->height;
imx258            893 drivers/media/i2c/imx258.c 		vblank_min = imx258->cur_mode->vts_min -
imx258            894 drivers/media/i2c/imx258.c 			     imx258->cur_mode->height;
imx258            896 drivers/media/i2c/imx258.c 			imx258->vblank, vblank_min,
imx258            897 drivers/media/i2c/imx258.c 			IMX258_VTS_MAX - imx258->cur_mode->height, 1,
imx258            899 drivers/media/i2c/imx258.c 		__v4l2_ctrl_s_ctrl(imx258->vblank, vblank_def);
imx258            902 drivers/media/i2c/imx258.c 			 - imx258->cur_mode->width;
imx258            903 drivers/media/i2c/imx258.c 		__v4l2_ctrl_modify_range(imx258->hblank, h_blank,
imx258            907 drivers/media/i2c/imx258.c 	mutex_unlock(&imx258->mutex);
imx258            913 drivers/media/i2c/imx258.c static int imx258_start_streaming(struct imx258 *imx258)
imx258            915 drivers/media/i2c/imx258.c 	struct i2c_client *client = v4l2_get_subdevdata(&imx258->sd);
imx258            920 drivers/media/i2c/imx258.c 	link_freq_index = imx258->cur_mode->link_freq_index;
imx258            922 drivers/media/i2c/imx258.c 	ret = imx258_write_regs(imx258, reg_list->regs, reg_list->num_of_regs);
imx258            929 drivers/media/i2c/imx258.c 	reg_list = &imx258->cur_mode->reg_list;
imx258            930 drivers/media/i2c/imx258.c 	ret = imx258_write_regs(imx258, reg_list->regs, reg_list->num_of_regs);
imx258            937 drivers/media/i2c/imx258.c 	ret = imx258_write_reg(imx258, REG_MIRROR_FLIP_CONTROL,
imx258            946 drivers/media/i2c/imx258.c 	ret =  __v4l2_ctrl_handler_setup(imx258->sd.ctrl_handler);
imx258            951 drivers/media/i2c/imx258.c 	return imx258_write_reg(imx258, IMX258_REG_MODE_SELECT,
imx258            957 drivers/media/i2c/imx258.c static int imx258_stop_streaming(struct imx258 *imx258)
imx258            959 drivers/media/i2c/imx258.c 	struct i2c_client *client = v4l2_get_subdevdata(&imx258->sd);
imx258            963 drivers/media/i2c/imx258.c 	ret = imx258_write_reg(imx258, IMX258_REG_MODE_SELECT,
imx258            977 drivers/media/i2c/imx258.c 	struct imx258 *imx258 = to_imx258(sd);
imx258            981 drivers/media/i2c/imx258.c 	mutex_lock(&imx258->mutex);
imx258            982 drivers/media/i2c/imx258.c 	if (imx258->streaming == enable) {
imx258            983 drivers/media/i2c/imx258.c 		mutex_unlock(&imx258->mutex);
imx258            998 drivers/media/i2c/imx258.c 		ret = imx258_start_streaming(imx258);
imx258           1002 drivers/media/i2c/imx258.c 		imx258_stop_streaming(imx258);
imx258           1006 drivers/media/i2c/imx258.c 	imx258->streaming = enable;
imx258           1007 drivers/media/i2c/imx258.c 	mutex_unlock(&imx258->mutex);
imx258           1014 drivers/media/i2c/imx258.c 	mutex_unlock(&imx258->mutex);
imx258           1023 drivers/media/i2c/imx258.c 	struct imx258 *imx258 = to_imx258(sd);
imx258           1025 drivers/media/i2c/imx258.c 	if (imx258->streaming)
imx258           1026 drivers/media/i2c/imx258.c 		imx258_stop_streaming(imx258);
imx258           1035 drivers/media/i2c/imx258.c 	struct imx258 *imx258 = to_imx258(sd);
imx258           1038 drivers/media/i2c/imx258.c 	if (imx258->streaming) {
imx258           1039 drivers/media/i2c/imx258.c 		ret = imx258_start_streaming(imx258);
imx258           1047 drivers/media/i2c/imx258.c 	imx258_stop_streaming(imx258);
imx258           1048 drivers/media/i2c/imx258.c 	imx258->streaming = 0;
imx258           1053 drivers/media/i2c/imx258.c static int imx258_identify_module(struct imx258 *imx258)
imx258           1055 drivers/media/i2c/imx258.c 	struct i2c_client *client = v4l2_get_subdevdata(&imx258->sd);
imx258           1059 drivers/media/i2c/imx258.c 	ret = imx258_read_reg(imx258, IMX258_REG_CHIP_ID,
imx258           1097 drivers/media/i2c/imx258.c static int imx258_init_controls(struct imx258 *imx258)
imx258           1099 drivers/media/i2c/imx258.c 	struct i2c_client *client = v4l2_get_subdevdata(&imx258->sd);
imx258           1107 drivers/media/i2c/imx258.c 	ctrl_hdlr = &imx258->ctrl_handler;
imx258           1112 drivers/media/i2c/imx258.c 	mutex_init(&imx258->mutex);
imx258           1113 drivers/media/i2c/imx258.c 	ctrl_hdlr->lock = &imx258->mutex;
imx258           1114 drivers/media/i2c/imx258.c 	imx258->link_freq = v4l2_ctrl_new_int_menu(ctrl_hdlr,
imx258           1121 drivers/media/i2c/imx258.c 	if (imx258->link_freq)
imx258           1122 drivers/media/i2c/imx258.c 		imx258->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
imx258           1127 drivers/media/i2c/imx258.c 	imx258->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &imx258_ctrl_ops,
imx258           1133 drivers/media/i2c/imx258.c 	vblank_def = imx258->cur_mode->vts_def - imx258->cur_mode->height;
imx258           1134 drivers/media/i2c/imx258.c 	vblank_min = imx258->cur_mode->vts_min - imx258->cur_mode->height;
imx258           1135 drivers/media/i2c/imx258.c 	imx258->vblank = v4l2_ctrl_new_std(
imx258           1138 drivers/media/i2c/imx258.c 				IMX258_VTS_MAX - imx258->cur_mode->height, 1,
imx258           1141 drivers/media/i2c/imx258.c 	if (imx258->vblank)
imx258           1142 drivers/media/i2c/imx258.c 		imx258->vblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
imx258           1144 drivers/media/i2c/imx258.c 	imx258->hblank = v4l2_ctrl_new_std(
imx258           1146 drivers/media/i2c/imx258.c 				IMX258_PPL_DEFAULT - imx258->cur_mode->width,
imx258           1147 drivers/media/i2c/imx258.c 				IMX258_PPL_DEFAULT - imx258->cur_mode->width,
imx258           1149 drivers/media/i2c/imx258.c 				IMX258_PPL_DEFAULT - imx258->cur_mode->width);
imx258           1151 drivers/media/i2c/imx258.c 	if (imx258->hblank)
imx258           1152 drivers/media/i2c/imx258.c 		imx258->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
imx258           1154 drivers/media/i2c/imx258.c 	imx258->exposure = v4l2_ctrl_new_std(
imx258           1181 drivers/media/i2c/imx258.c 	imx258->sd.ctrl_handler = ctrl_hdlr;
imx258           1187 drivers/media/i2c/imx258.c 	mutex_destroy(&imx258->mutex);
imx258           1192 drivers/media/i2c/imx258.c static void imx258_free_controls(struct imx258 *imx258)
imx258           1194 drivers/media/i2c/imx258.c 	v4l2_ctrl_handler_free(imx258->sd.ctrl_handler);
imx258           1195 drivers/media/i2c/imx258.c 	mutex_destroy(&imx258->mutex);
imx258           1200 drivers/media/i2c/imx258.c 	struct imx258 *imx258;
imx258           1216 drivers/media/i2c/imx258.c 	imx258 = devm_kzalloc(&client->dev, sizeof(*imx258), GFP_KERNEL);
imx258           1217 drivers/media/i2c/imx258.c 	if (!imx258)
imx258           1221 drivers/media/i2c/imx258.c 	v4l2_i2c_subdev_init(&imx258->sd, client, &imx258_subdev_ops);
imx258           1224 drivers/media/i2c/imx258.c 	ret = imx258_identify_module(imx258);
imx258           1229 drivers/media/i2c/imx258.c 	imx258->cur_mode = &supported_modes[0];
imx258           1231 drivers/media/i2c/imx258.c 	ret = imx258_init_controls(imx258);
imx258           1236 drivers/media/i2c/imx258.c 	imx258->sd.internal_ops = &imx258_internal_ops;
imx258           1237 drivers/media/i2c/imx258.c 	imx258->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
imx258           1238 drivers/media/i2c/imx258.c 	imx258->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
imx258           1241 drivers/media/i2c/imx258.c 	imx258->pad.flags = MEDIA_PAD_FL_SOURCE;
imx258           1243 drivers/media/i2c/imx258.c 	ret = media_entity_pads_init(&imx258->sd.entity, 1, &imx258->pad);
imx258           1247 drivers/media/i2c/imx258.c 	ret = v4l2_async_register_subdev_sensor_common(&imx258->sd);
imx258           1258 drivers/media/i2c/imx258.c 	media_entity_cleanup(&imx258->sd.entity);
imx258           1261 drivers/media/i2c/imx258.c 	imx258_free_controls(imx258);
imx258           1269 drivers/media/i2c/imx258.c 	struct imx258 *imx258 = to_imx258(sd);
imx258           1273 drivers/media/i2c/imx258.c 	imx258_free_controls(imx258);