mt9v032           220 drivers/media/i2c/mt9v032.c static struct mt9v032 *to_mt9v032(struct v4l2_subdev *sd)
mt9v032           222 drivers/media/i2c/mt9v032.c 	return container_of(sd, struct mt9v032, subdev);
mt9v032           226 drivers/media/i2c/mt9v032.c mt9v032_update_aec_agc(struct mt9v032 *mt9v032, u16 which, int enable)
mt9v032           228 drivers/media/i2c/mt9v032.c 	struct regmap *map = mt9v032->regmap;
mt9v032           229 drivers/media/i2c/mt9v032.c 	u16 value = mt9v032->aec_agc;
mt9v032           241 drivers/media/i2c/mt9v032.c 	mt9v032->aec_agc = value;
mt9v032           246 drivers/media/i2c/mt9v032.c mt9v032_update_hblank(struct mt9v032 *mt9v032)
mt9v032           248 drivers/media/i2c/mt9v032.c 	struct v4l2_rect *crop = &mt9v032->crop;
mt9v032           249 drivers/media/i2c/mt9v032.c 	unsigned int min_hblank = mt9v032->model->data->min_hblank;
mt9v032           252 drivers/media/i2c/mt9v032.c 	if (mt9v032->version->version == MT9V034_CHIP_ID_REV1)
mt9v032           253 drivers/media/i2c/mt9v032.c 		min_hblank += (mt9v032->hratio - 1) * 10;
mt9v032           254 drivers/media/i2c/mt9v032.c 	min_hblank = max_t(int, mt9v032->model->data->min_row_time - crop->width,
mt9v032           256 drivers/media/i2c/mt9v032.c 	hblank = max_t(unsigned int, mt9v032->hblank, min_hblank);
mt9v032           258 drivers/media/i2c/mt9v032.c 	return regmap_write(mt9v032->regmap, MT9V032_HORIZONTAL_BLANKING,
mt9v032           262 drivers/media/i2c/mt9v032.c static int mt9v032_power_on(struct mt9v032 *mt9v032)
mt9v032           264 drivers/media/i2c/mt9v032.c 	struct regmap *map = mt9v032->regmap;
mt9v032           267 drivers/media/i2c/mt9v032.c 	gpiod_set_value_cansleep(mt9v032->reset_gpio, 1);
mt9v032           269 drivers/media/i2c/mt9v032.c 	ret = clk_set_rate(mt9v032->clk, mt9v032->sysclk);
mt9v032           274 drivers/media/i2c/mt9v032.c 	ret = clk_prepare_enable(mt9v032->clk);
mt9v032           280 drivers/media/i2c/mt9v032.c 	if (mt9v032->reset_gpio) {
mt9v032           281 drivers/media/i2c/mt9v032.c 		gpiod_set_value_cansleep(mt9v032->reset_gpio, 0);
mt9v032           308 drivers/media/i2c/mt9v032.c 	clk_disable_unprepare(mt9v032->clk);
mt9v032           312 drivers/media/i2c/mt9v032.c static void mt9v032_power_off(struct mt9v032 *mt9v032)
mt9v032           314 drivers/media/i2c/mt9v032.c 	clk_disable_unprepare(mt9v032->clk);
mt9v032           317 drivers/media/i2c/mt9v032.c static int __mt9v032_set_power(struct mt9v032 *mt9v032, bool on)
mt9v032           319 drivers/media/i2c/mt9v032.c 	struct regmap *map = mt9v032->regmap;
mt9v032           323 drivers/media/i2c/mt9v032.c 		mt9v032_power_off(mt9v032);
mt9v032           327 drivers/media/i2c/mt9v032.c 	ret = mt9v032_power_on(mt9v032);
mt9v032           332 drivers/media/i2c/mt9v032.c 	if (mt9v032->pdata && mt9v032->pdata->clk_pol) {
mt9v032           333 drivers/media/i2c/mt9v032.c 		ret = regmap_write(map, mt9v032->model->data->pclk_reg,
mt9v032           344 drivers/media/i2c/mt9v032.c 	return v4l2_ctrl_handler_setup(&mt9v032->ctrls);
mt9v032           352 drivers/media/i2c/mt9v032.c __mt9v032_get_pad_format(struct mt9v032 *mt9v032, struct v4l2_subdev_pad_config *cfg,
mt9v032           357 drivers/media/i2c/mt9v032.c 		return v4l2_subdev_get_try_format(&mt9v032->subdev, cfg, pad);
mt9v032           359 drivers/media/i2c/mt9v032.c 		return &mt9v032->format;
mt9v032           366 drivers/media/i2c/mt9v032.c __mt9v032_get_pad_crop(struct mt9v032 *mt9v032, struct v4l2_subdev_pad_config *cfg,
mt9v032           371 drivers/media/i2c/mt9v032.c 		return v4l2_subdev_get_try_crop(&mt9v032->subdev, cfg, pad);
mt9v032           373 drivers/media/i2c/mt9v032.c 		return &mt9v032->crop;
mt9v032           383 drivers/media/i2c/mt9v032.c 	struct mt9v032 *mt9v032 = to_mt9v032(subdev);
mt9v032           384 drivers/media/i2c/mt9v032.c 	struct v4l2_rect *crop = &mt9v032->crop;
mt9v032           385 drivers/media/i2c/mt9v032.c 	struct regmap *map = mt9v032->regmap;
mt9v032           394 drivers/media/i2c/mt9v032.c 	hbin = fls(mt9v032->hratio) - 1;
mt9v032           395 drivers/media/i2c/mt9v032.c 	vbin = fls(mt9v032->vratio) - 1;
mt9v032           419 drivers/media/i2c/mt9v032.c 	ret = mt9v032_update_hblank(mt9v032);
mt9v032           431 drivers/media/i2c/mt9v032.c 	struct mt9v032 *mt9v032 = to_mt9v032(subdev);
mt9v032           436 drivers/media/i2c/mt9v032.c 	code->code = mt9v032->format.code;
mt9v032           444 drivers/media/i2c/mt9v032.c 	struct mt9v032 *mt9v032 = to_mt9v032(subdev);
mt9v032           448 drivers/media/i2c/mt9v032.c 	if (mt9v032->format.code != fse->code)
mt9v032           463 drivers/media/i2c/mt9v032.c 	struct mt9v032 *mt9v032 = to_mt9v032(subdev);
mt9v032           465 drivers/media/i2c/mt9v032.c 	format->format = *__mt9v032_get_pad_format(mt9v032, cfg, format->pad,
mt9v032           470 drivers/media/i2c/mt9v032.c static void mt9v032_configure_pixel_rate(struct mt9v032 *mt9v032)
mt9v032           472 drivers/media/i2c/mt9v032.c 	struct i2c_client *client = v4l2_get_subdevdata(&mt9v032->subdev);
mt9v032           475 drivers/media/i2c/mt9v032.c 	ret = v4l2_ctrl_s_ctrl_int64(mt9v032->pixel_rate,
mt9v032           476 drivers/media/i2c/mt9v032.c 				     mt9v032->sysclk / mt9v032->hratio);
mt9v032           498 drivers/media/i2c/mt9v032.c 	struct mt9v032 *mt9v032 = to_mt9v032(subdev);
mt9v032           506 drivers/media/i2c/mt9v032.c 	__crop = __mt9v032_get_pad_crop(mt9v032, cfg, format->pad,
mt9v032           522 drivers/media/i2c/mt9v032.c 	__format = __mt9v032_get_pad_format(mt9v032, cfg, format->pad,
mt9v032           528 drivers/media/i2c/mt9v032.c 		mt9v032->hratio = hratio;
mt9v032           529 drivers/media/i2c/mt9v032.c 		mt9v032->vratio = vratio;
mt9v032           530 drivers/media/i2c/mt9v032.c 		mt9v032_configure_pixel_rate(mt9v032);
mt9v032           542 drivers/media/i2c/mt9v032.c 	struct mt9v032 *mt9v032 = to_mt9v032(subdev);
mt9v032           547 drivers/media/i2c/mt9v032.c 	sel->r = *__mt9v032_get_pad_crop(mt9v032, cfg, sel->pad, sel->which);
mt9v032           555 drivers/media/i2c/mt9v032.c 	struct mt9v032 *mt9v032 = to_mt9v032(subdev);
mt9v032           584 drivers/media/i2c/mt9v032.c 	__crop = __mt9v032_get_pad_crop(mt9v032, cfg, sel->pad, sel->which);
mt9v032           590 drivers/media/i2c/mt9v032.c 		__format = __mt9v032_get_pad_format(mt9v032, cfg, sel->pad,
mt9v032           595 drivers/media/i2c/mt9v032.c 			mt9v032->hratio = 1;
mt9v032           596 drivers/media/i2c/mt9v032.c 			mt9v032->vratio = 1;
mt9v032           597 drivers/media/i2c/mt9v032.c 			mt9v032_configure_pixel_rate(mt9v032);
mt9v032           643 drivers/media/i2c/mt9v032.c 	struct mt9v032 *mt9v032 =
mt9v032           644 drivers/media/i2c/mt9v032.c 			container_of(ctrl->handler, struct mt9v032, ctrls);
mt9v032           645 drivers/media/i2c/mt9v032.c 	struct regmap *map = mt9v032->regmap;
mt9v032           651 drivers/media/i2c/mt9v032.c 		return mt9v032_update_aec_agc(mt9v032, MT9V032_AGC_ENABLE,
mt9v032           658 drivers/media/i2c/mt9v032.c 		return mt9v032_update_aec_agc(mt9v032, MT9V032_AEC_ENABLE,
mt9v032           666 drivers/media/i2c/mt9v032.c 		mt9v032->hblank = ctrl->val;
mt9v032           667 drivers/media/i2c/mt9v032.c 		return mt9v032_update_hblank(mt9v032);
mt9v032           675 drivers/media/i2c/mt9v032.c 		if (mt9v032->link_freq == NULL)
mt9v032           678 drivers/media/i2c/mt9v032.c 		freq = mt9v032->pdata->link_freqs[mt9v032->link_freq->val];
mt9v032           679 drivers/media/i2c/mt9v032.c 		*mt9v032->pixel_rate->p_new.p_s64 = freq;
mt9v032           680 drivers/media/i2c/mt9v032.c 		mt9v032->sysclk = freq;
mt9v032           684 drivers/media/i2c/mt9v032.c 		switch (mt9v032->test_pattern->val) {
mt9v032           701 drivers/media/i2c/mt9v032.c 			data = (mt9v032->test_pattern_color->val <<
mt9v032           729 drivers/media/i2c/mt9v032.c 				    mt9v032->model->data->aec_max_shutter_reg,
mt9v032           844 drivers/media/i2c/mt9v032.c 	struct mt9v032 *mt9v032 = to_mt9v032(subdev);
mt9v032           847 drivers/media/i2c/mt9v032.c 	mutex_lock(&mt9v032->power_lock);
mt9v032           852 drivers/media/i2c/mt9v032.c 	if (mt9v032->power_count == !on) {
mt9v032           853 drivers/media/i2c/mt9v032.c 		ret = __mt9v032_set_power(mt9v032, !!on);
mt9v032           859 drivers/media/i2c/mt9v032.c 	mt9v032->power_count += on ? 1 : -1;
mt9v032           860 drivers/media/i2c/mt9v032.c 	WARN_ON(mt9v032->power_count < 0);
mt9v032           863 drivers/media/i2c/mt9v032.c 	mutex_unlock(&mt9v032->power_lock);
mt9v032           874 drivers/media/i2c/mt9v032.c 	struct mt9v032 *mt9v032 = to_mt9v032(subdev);
mt9v032           882 drivers/media/i2c/mt9v032.c 	ret = mt9v032_power_on(mt9v032);
mt9v032           889 drivers/media/i2c/mt9v032.c 	ret = regmap_read(mt9v032->regmap, MT9V032_CHIP_VERSION, &version);
mt9v032           891 drivers/media/i2c/mt9v032.c 	mt9v032_power_off(mt9v032);
mt9v032           900 drivers/media/i2c/mt9v032.c 			mt9v032->version = &mt9v032_versions[i];
mt9v032           905 drivers/media/i2c/mt9v032.c 	if (mt9v032->version == NULL) {
mt9v032           912 drivers/media/i2c/mt9v032.c 		 mt9v032->version->name, client->addr);
mt9v032           914 drivers/media/i2c/mt9v032.c 	mt9v032_configure_pixel_rate(mt9v032);
mt9v032           921 drivers/media/i2c/mt9v032.c 	struct mt9v032 *mt9v032 = to_mt9v032(subdev);
mt9v032           933 drivers/media/i2c/mt9v032.c 	if (mt9v032->model->color)
mt9v032          1043 drivers/media/i2c/mt9v032.c 	struct mt9v032 *mt9v032;
mt9v032          1047 drivers/media/i2c/mt9v032.c 	mt9v032 = devm_kzalloc(&client->dev, sizeof(*mt9v032), GFP_KERNEL);
mt9v032          1048 drivers/media/i2c/mt9v032.c 	if (!mt9v032)
mt9v032          1051 drivers/media/i2c/mt9v032.c 	mt9v032->regmap = devm_regmap_init_i2c(client, &mt9v032_regmap_config);
mt9v032          1052 drivers/media/i2c/mt9v032.c 	if (IS_ERR(mt9v032->regmap))
mt9v032          1053 drivers/media/i2c/mt9v032.c 		return PTR_ERR(mt9v032->regmap);
mt9v032          1055 drivers/media/i2c/mt9v032.c 	mt9v032->clk = devm_clk_get(&client->dev, NULL);
mt9v032          1056 drivers/media/i2c/mt9v032.c 	if (IS_ERR(mt9v032->clk))
mt9v032          1057 drivers/media/i2c/mt9v032.c 		return PTR_ERR(mt9v032->clk);
mt9v032          1059 drivers/media/i2c/mt9v032.c 	mt9v032->reset_gpio = devm_gpiod_get_optional(&client->dev, "reset",
mt9v032          1061 drivers/media/i2c/mt9v032.c 	if (IS_ERR(mt9v032->reset_gpio))
mt9v032          1062 drivers/media/i2c/mt9v032.c 		return PTR_ERR(mt9v032->reset_gpio);
mt9v032          1064 drivers/media/i2c/mt9v032.c 	mt9v032->standby_gpio = devm_gpiod_get_optional(&client->dev, "standby",
mt9v032          1066 drivers/media/i2c/mt9v032.c 	if (IS_ERR(mt9v032->standby_gpio))
mt9v032          1067 drivers/media/i2c/mt9v032.c 		return PTR_ERR(mt9v032->standby_gpio);
mt9v032          1069 drivers/media/i2c/mt9v032.c 	mutex_init(&mt9v032->power_lock);
mt9v032          1070 drivers/media/i2c/mt9v032.c 	mt9v032->pdata = pdata;
mt9v032          1071 drivers/media/i2c/mt9v032.c 	mt9v032->model = (const void *)did->driver_data;
mt9v032          1073 drivers/media/i2c/mt9v032.c 	v4l2_ctrl_handler_init(&mt9v032->ctrls, 11 +
mt9v032          1076 drivers/media/i2c/mt9v032.c 	v4l2_ctrl_new_std(&mt9v032->ctrls, &mt9v032_ctrl_ops,
mt9v032          1078 drivers/media/i2c/mt9v032.c 	v4l2_ctrl_new_std(&mt9v032->ctrls, &mt9v032_ctrl_ops,
mt9v032          1081 drivers/media/i2c/mt9v032.c 	v4l2_ctrl_new_std_menu(&mt9v032->ctrls, &mt9v032_ctrl_ops,
mt9v032          1084 drivers/media/i2c/mt9v032.c 	v4l2_ctrl_new_std(&mt9v032->ctrls, &mt9v032_ctrl_ops,
mt9v032          1085 drivers/media/i2c/mt9v032.c 			  V4L2_CID_EXPOSURE, mt9v032->model->data->min_shutter,
mt9v032          1086 drivers/media/i2c/mt9v032.c 			  mt9v032->model->data->max_shutter, 1,
mt9v032          1088 drivers/media/i2c/mt9v032.c 	v4l2_ctrl_new_std(&mt9v032->ctrls, &mt9v032_ctrl_ops,
mt9v032          1089 drivers/media/i2c/mt9v032.c 			  V4L2_CID_HBLANK, mt9v032->model->data->min_hblank,
mt9v032          1092 drivers/media/i2c/mt9v032.c 	v4l2_ctrl_new_std(&mt9v032->ctrls, &mt9v032_ctrl_ops,
mt9v032          1093 drivers/media/i2c/mt9v032.c 			  V4L2_CID_VBLANK, mt9v032->model->data->min_vblank,
mt9v032          1094 drivers/media/i2c/mt9v032.c 			  mt9v032->model->data->max_vblank, 1,
mt9v032          1096 drivers/media/i2c/mt9v032.c 	mt9v032->test_pattern = v4l2_ctrl_new_std_menu_items(&mt9v032->ctrls,
mt9v032          1100 drivers/media/i2c/mt9v032.c 	mt9v032->test_pattern_color = v4l2_ctrl_new_custom(&mt9v032->ctrls,
mt9v032          1103 drivers/media/i2c/mt9v032.c 	v4l2_ctrl_new_custom(&mt9v032->ctrls,
mt9v032          1104 drivers/media/i2c/mt9v032.c 			     mt9v032->model->data->aec_max_shutter_v4l2_ctrl,
mt9v032          1107 drivers/media/i2c/mt9v032.c 		v4l2_ctrl_new_custom(&mt9v032->ctrls, &mt9v032_aegc_controls[i],
mt9v032          1110 drivers/media/i2c/mt9v032.c 	v4l2_ctrl_cluster(2, &mt9v032->test_pattern);
mt9v032          1112 drivers/media/i2c/mt9v032.c 	mt9v032->pixel_rate =
mt9v032          1113 drivers/media/i2c/mt9v032.c 		v4l2_ctrl_new_std(&mt9v032->ctrls, &mt9v032_ctrl_ops,
mt9v032          1124 drivers/media/i2c/mt9v032.c 		mt9v032->link_freq =
mt9v032          1125 drivers/media/i2c/mt9v032.c 			v4l2_ctrl_new_int_menu(&mt9v032->ctrls,
mt9v032          1129 drivers/media/i2c/mt9v032.c 		v4l2_ctrl_cluster(2, &mt9v032->link_freq);
mt9v032          1133 drivers/media/i2c/mt9v032.c 	mt9v032->subdev.ctrl_handler = &mt9v032->ctrls;
mt9v032          1135 drivers/media/i2c/mt9v032.c 	if (mt9v032->ctrls.error) {
mt9v032          1137 drivers/media/i2c/mt9v032.c 			mt9v032->ctrls.error);
mt9v032          1138 drivers/media/i2c/mt9v032.c 		ret = mt9v032->ctrls.error;
mt9v032          1142 drivers/media/i2c/mt9v032.c 	mt9v032->crop.left = MT9V032_COLUMN_START_DEF;
mt9v032          1143 drivers/media/i2c/mt9v032.c 	mt9v032->crop.top = MT9V032_ROW_START_DEF;
mt9v032          1144 drivers/media/i2c/mt9v032.c 	mt9v032->crop.width = MT9V032_WINDOW_WIDTH_DEF;
mt9v032          1145 drivers/media/i2c/mt9v032.c 	mt9v032->crop.height = MT9V032_WINDOW_HEIGHT_DEF;
mt9v032          1147 drivers/media/i2c/mt9v032.c 	if (mt9v032->model->color)
mt9v032          1148 drivers/media/i2c/mt9v032.c 		mt9v032->format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
mt9v032          1150 drivers/media/i2c/mt9v032.c 		mt9v032->format.code = MEDIA_BUS_FMT_Y10_1X10;
mt9v032          1152 drivers/media/i2c/mt9v032.c 	mt9v032->format.width = MT9V032_WINDOW_WIDTH_DEF;
mt9v032          1153 drivers/media/i2c/mt9v032.c 	mt9v032->format.height = MT9V032_WINDOW_HEIGHT_DEF;
mt9v032          1154 drivers/media/i2c/mt9v032.c 	mt9v032->format.field = V4L2_FIELD_NONE;
mt9v032          1155 drivers/media/i2c/mt9v032.c 	mt9v032->format.colorspace = V4L2_COLORSPACE_SRGB;
mt9v032          1157 drivers/media/i2c/mt9v032.c 	mt9v032->hratio = 1;
mt9v032          1158 drivers/media/i2c/mt9v032.c 	mt9v032->vratio = 1;
mt9v032          1160 drivers/media/i2c/mt9v032.c 	mt9v032->aec_agc = MT9V032_AEC_ENABLE | MT9V032_AGC_ENABLE;
mt9v032          1161 drivers/media/i2c/mt9v032.c 	mt9v032->hblank = MT9V032_HORIZONTAL_BLANKING_DEF;
mt9v032          1162 drivers/media/i2c/mt9v032.c 	mt9v032->sysclk = MT9V032_SYSCLK_FREQ_DEF;
mt9v032          1164 drivers/media/i2c/mt9v032.c 	v4l2_i2c_subdev_init(&mt9v032->subdev, client, &mt9v032_subdev_ops);
mt9v032          1165 drivers/media/i2c/mt9v032.c 	mt9v032->subdev.internal_ops = &mt9v032_subdev_internal_ops;
mt9v032          1166 drivers/media/i2c/mt9v032.c 	mt9v032->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
mt9v032          1168 drivers/media/i2c/mt9v032.c 	mt9v032->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR;
mt9v032          1169 drivers/media/i2c/mt9v032.c 	mt9v032->pad.flags = MEDIA_PAD_FL_SOURCE;
mt9v032          1170 drivers/media/i2c/mt9v032.c 	ret = media_entity_pads_init(&mt9v032->subdev.entity, 1, &mt9v032->pad);
mt9v032          1174 drivers/media/i2c/mt9v032.c 	mt9v032->subdev.dev = &client->dev;
mt9v032          1175 drivers/media/i2c/mt9v032.c 	ret = v4l2_async_register_subdev(&mt9v032->subdev);
mt9v032          1182 drivers/media/i2c/mt9v032.c 	media_entity_cleanup(&mt9v032->subdev.entity);
mt9v032          1183 drivers/media/i2c/mt9v032.c 	v4l2_ctrl_handler_free(&mt9v032->ctrls);
mt9v032          1190 drivers/media/i2c/mt9v032.c 	struct mt9v032 *mt9v032 = to_mt9v032(subdev);
mt9v032          1193 drivers/media/i2c/mt9v032.c 	v4l2_ctrl_handler_free(&mt9v032->ctrls);