mt9v111           278 drivers/media/i2c/mt9v111.c 	struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd);
mt9v111           282 drivers/media/i2c/mt9v111.c 	if (mt9v111->addr_space == addr_space)
mt9v111           297 drivers/media/i2c/mt9v111.c 	mt9v111->addr_space = addr_space;
mt9v111           363 drivers/media/i2c/mt9v111.c 	struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd);
mt9v111           366 drivers/media/i2c/mt9v111.c 	ret = clk_prepare_enable(mt9v111->clk);
mt9v111           370 drivers/media/i2c/mt9v111.c 	clk_set_rate(mt9v111->clk, mt9v111->sysclk);
mt9v111           372 drivers/media/i2c/mt9v111.c 	gpiod_set_value(mt9v111->standby, 0);
mt9v111           375 drivers/media/i2c/mt9v111.c 	gpiod_set_value(mt9v111->oe, 1);
mt9v111           383 drivers/media/i2c/mt9v111.c 	struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd);
mt9v111           385 drivers/media/i2c/mt9v111.c 	gpiod_set_value(mt9v111->oe, 0);
mt9v111           388 drivers/media/i2c/mt9v111.c 	gpiod_set_value(mt9v111->standby, 1);
mt9v111           391 drivers/media/i2c/mt9v111.c 	clk_disable_unprepare(mt9v111->clk);
mt9v111           396 drivers/media/i2c/mt9v111.c static int __mt9v111_hw_reset(struct mt9v111_dev *mt9v111)
mt9v111           398 drivers/media/i2c/mt9v111.c 	if (!mt9v111->reset)
mt9v111           401 drivers/media/i2c/mt9v111.c 	gpiod_set_value(mt9v111->reset, 1);
mt9v111           404 drivers/media/i2c/mt9v111.c 	gpiod_set_value(mt9v111->reset, 0);
mt9v111           410 drivers/media/i2c/mt9v111.c static int __mt9v111_sw_reset(struct mt9v111_dev *mt9v111)
mt9v111           412 drivers/media/i2c/mt9v111.c 	struct i2c_client *c = mt9v111->client;
mt9v111           448 drivers/media/i2c/mt9v111.c static int mt9v111_calc_frame_rate(struct mt9v111_dev *mt9v111,
mt9v111           493 drivers/media/i2c/mt9v111.c 	pclk = DIV_ROUND_CLOSEST(mt9v111->sysclk, 2);
mt9v111           520 drivers/media/i2c/mt9v111.c 	ret = v4l2_ctrl_s_ctrl_int64(mt9v111->hblank, hb);
mt9v111           524 drivers/media/i2c/mt9v111.c 	ret = v4l2_ctrl_s_ctrl_int64(mt9v111->vblank, vb);
mt9v111           534 drivers/media/i2c/mt9v111.c static int mt9v111_hw_config(struct mt9v111_dev *mt9v111)
mt9v111           536 drivers/media/i2c/mt9v111.c 	struct i2c_client *c = mt9v111->client;
mt9v111           541 drivers/media/i2c/mt9v111.c 	ret = __mt9v111_hw_reset(mt9v111);
mt9v111           543 drivers/media/i2c/mt9v111.c 		ret = __mt9v111_sw_reset(mt9v111);
mt9v111           548 drivers/media/i2c/mt9v111.c 	ret = mt9v111->sysclk < DIV_ROUND_CLOSEST(MT9V111_MAX_CLKIN, 2) ?
mt9v111           564 drivers/media/i2c/mt9v111.c 	switch (mt9v111->fmt.code) {
mt9v111           620 drivers/media/i2c/mt9v111.c 			    mt9v111->fmt.width);
mt9v111           625 drivers/media/i2c/mt9v111.c 			    mt9v111->fmt.height);
mt9v111           630 drivers/media/i2c/mt9v111.c 	ret = v4l2_ctrl_handler_setup(&mt9v111->ctrls);
mt9v111           648 drivers/media/i2c/mt9v111.c 	struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd);
mt9v111           652 drivers/media/i2c/mt9v111.c 	mutex_lock(&mt9v111->pwr_mutex);
mt9v111           658 drivers/media/i2c/mt9v111.c 	pwr_count = mt9v111->pwr_count;
mt9v111           665 drivers/media/i2c/mt9v111.c 			mt9v111->pwr_count = pwr_count;
mt9v111           667 drivers/media/i2c/mt9v111.c 		mutex_unlock(&mt9v111->pwr_mutex);
mt9v111           677 drivers/media/i2c/mt9v111.c 	mt9v111->pwr_count = pwr_count;
mt9v111           679 drivers/media/i2c/mt9v111.c 	mutex_unlock(&mt9v111->pwr_mutex);
mt9v111           686 drivers/media/i2c/mt9v111.c 	struct mt9v111_dev *mt9v111 = sd_to_mt9v111(subdev);
mt9v111           689 drivers/media/i2c/mt9v111.c 	mutex_lock(&mt9v111->stream_mutex);
mt9v111           691 drivers/media/i2c/mt9v111.c 	if (mt9v111->streaming == enable) {
mt9v111           692 drivers/media/i2c/mt9v111.c 		mutex_unlock(&mt9v111->stream_mutex);
mt9v111           700 drivers/media/i2c/mt9v111.c 	if (enable && mt9v111->pending) {
mt9v111           701 drivers/media/i2c/mt9v111.c 		ret = mt9v111_hw_config(mt9v111);
mt9v111           710 drivers/media/i2c/mt9v111.c 		mt9v111->pending = false;
mt9v111           713 drivers/media/i2c/mt9v111.c 	mt9v111->streaming = enable ? true : false;
mt9v111           714 drivers/media/i2c/mt9v111.c 	mutex_unlock(&mt9v111->stream_mutex);
mt9v111           719 drivers/media/i2c/mt9v111.c 	mutex_unlock(&mt9v111->stream_mutex);
mt9v111           727 drivers/media/i2c/mt9v111.c 	struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd);
mt9v111           737 drivers/media/i2c/mt9v111.c 	mutex_lock(&mt9v111->stream_mutex);
mt9v111           739 drivers/media/i2c/mt9v111.c 	if (mt9v111->streaming) {
mt9v111           740 drivers/media/i2c/mt9v111.c 		mutex_unlock(&mt9v111->stream_mutex);
mt9v111           744 drivers/media/i2c/mt9v111.c 	if (mt9v111->fps == fps) {
mt9v111           745 drivers/media/i2c/mt9v111.c 		mutex_unlock(&mt9v111->stream_mutex);
mt9v111           750 drivers/media/i2c/mt9v111.c 	if (mt9v111->fmt.width < QVGA_WIDTH &&
mt9v111           751 drivers/media/i2c/mt9v111.c 	    mt9v111->fmt.height < QVGA_HEIGHT)
mt9v111           753 drivers/media/i2c/mt9v111.c 	else if (mt9v111->fmt.width < CIF_WIDTH &&
mt9v111           754 drivers/media/i2c/mt9v111.c 		 mt9v111->fmt.height < CIF_HEIGHT)
mt9v111           757 drivers/media/i2c/mt9v111.c 		max_fps = mt9v111->sysclk <
mt9v111           762 drivers/media/i2c/mt9v111.c 		mutex_unlock(&mt9v111->stream_mutex);
mt9v111           766 drivers/media/i2c/mt9v111.c 	mt9v111_calc_frame_rate(mt9v111, tpf);
mt9v111           768 drivers/media/i2c/mt9v111.c 	mt9v111->fps = fps;
mt9v111           769 drivers/media/i2c/mt9v111.c 	mt9v111->pending = true;
mt9v111           771 drivers/media/i2c/mt9v111.c 	mutex_unlock(&mt9v111->stream_mutex);
mt9v111           779 drivers/media/i2c/mt9v111.c 	struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd);
mt9v111           782 drivers/media/i2c/mt9v111.c 	mutex_lock(&mt9v111->stream_mutex);
mt9v111           785 drivers/media/i2c/mt9v111.c 	tpf->denominator = mt9v111->fps;
mt9v111           787 drivers/media/i2c/mt9v111.c 	mutex_unlock(&mt9v111->stream_mutex);
mt9v111           793 drivers/media/i2c/mt9v111.c 					struct mt9v111_dev *mt9v111,
mt9v111           801 drivers/media/i2c/mt9v111.c 		return v4l2_subdev_get_try_format(&mt9v111->sd, cfg, pad);
mt9v111           806 drivers/media/i2c/mt9v111.c 		return &mt9v111->fmt;
mt9v111           866 drivers/media/i2c/mt9v111.c 	struct mt9v111_dev *mt9v111 = sd_to_mt9v111(subdev);
mt9v111           871 drivers/media/i2c/mt9v111.c 	mutex_lock(&mt9v111->stream_mutex);
mt9v111           872 drivers/media/i2c/mt9v111.c 	format->format = *__mt9v111_get_pad_format(mt9v111, cfg, format->pad,
mt9v111           874 drivers/media/i2c/mt9v111.c 	mutex_unlock(&mt9v111->stream_mutex);
mt9v111           883 drivers/media/i2c/mt9v111.c 	struct mt9v111_dev *mt9v111 = sd_to_mt9v111(subdev);
mt9v111           890 drivers/media/i2c/mt9v111.c 	mutex_lock(&mt9v111->stream_mutex);
mt9v111           891 drivers/media/i2c/mt9v111.c 	if (mt9v111->streaming) {
mt9v111           892 drivers/media/i2c/mt9v111.c 		mutex_unlock(&mt9v111->stream_mutex);
mt9v111           897 drivers/media/i2c/mt9v111.c 		mutex_unlock(&mt9v111->stream_mutex);
mt9v111           928 drivers/media/i2c/mt9v111.c 	__fmt = __mt9v111_get_pad_format(mt9v111, cfg, format->pad,
mt9v111           943 drivers/media/i2c/mt9v111.c 		mt9v111->pending = true;
mt9v111           945 drivers/media/i2c/mt9v111.c 	dev_dbg(mt9v111->dev, "%s: mbus_code: %x - (%ux%u)\n",
mt9v111           951 drivers/media/i2c/mt9v111.c 	mutex_unlock(&mt9v111->stream_mutex);
mt9v111           998 drivers/media/i2c/mt9v111.c 	struct mt9v111_dev *mt9v111 = container_of(ctrl->handler,
mt9v111          1003 drivers/media/i2c/mt9v111.c 	mutex_lock(&mt9v111->pwr_mutex);
mt9v111          1008 drivers/media/i2c/mt9v111.c 	if (!mt9v111->pwr_count) {
mt9v111          1009 drivers/media/i2c/mt9v111.c 		mt9v111->pending = true;
mt9v111          1010 drivers/media/i2c/mt9v111.c 		mutex_unlock(&mt9v111->pwr_mutex);
mt9v111          1013 drivers/media/i2c/mt9v111.c 	mutex_unlock(&mt9v111->pwr_mutex);
mt9v111          1022 drivers/media/i2c/mt9v111.c 	if (mt9v111->auto_exp->is_new || mt9v111->auto_awb->is_new) {
mt9v111          1023 drivers/media/i2c/mt9v111.c 		if (mt9v111->auto_exp->val == V4L2_EXPOSURE_MANUAL &&
mt9v111          1024 drivers/media/i2c/mt9v111.c 		    mt9v111->auto_awb->val == V4L2_WHITE_BALANCE_MANUAL)
mt9v111          1025 drivers/media/i2c/mt9v111.c 			ret = mt9v111_update(mt9v111->client, MT9V111_R01_IFP,
mt9v111          1030 drivers/media/i2c/mt9v111.c 			ret = mt9v111_update(mt9v111->client, MT9V111_R01_IFP,
mt9v111          1041 drivers/media/i2c/mt9v111.c 		ret = mt9v111_update(mt9v111->client, MT9V111_R01_IFP,
mt9v111          1048 drivers/media/i2c/mt9v111.c 		ret = mt9v111_update(mt9v111->client, MT9V111_R01_IFP,
mt9v111          1055 drivers/media/i2c/mt9v111.c 		ret = mt9v111_update(mt9v111->client, MT9V111_R01_CORE,
mt9v111          1058 drivers/media/i2c/mt9v111.c 				     mt9v111->hblank->val);
mt9v111          1061 drivers/media/i2c/mt9v111.c 		ret = mt9v111_update(mt9v111->client, MT9V111_R01_CORE,
mt9v111          1064 drivers/media/i2c/mt9v111.c 				     mt9v111->vblank->val);
mt9v111          1075 drivers/media/i2c/mt9v111.c static int mt9v111_chip_probe(struct mt9v111_dev *mt9v111)
mt9v111          1080 drivers/media/i2c/mt9v111.c 	ret = __mt9v111_power_on(&mt9v111->sd);
mt9v111          1084 drivers/media/i2c/mt9v111.c 	ret = mt9v111_read(mt9v111->client, MT9V111_R01_CORE,
mt9v111          1091 drivers/media/i2c/mt9v111.c 		dev_err(mt9v111->dev,
mt9v111          1098 drivers/media/i2c/mt9v111.c 	dev_dbg(mt9v111->dev, "Chip identified: 0x%2x%2x\n",
mt9v111          1102 drivers/media/i2c/mt9v111.c 	__mt9v111_power_off(&mt9v111->sd);
mt9v111          1109 drivers/media/i2c/mt9v111.c 	struct mt9v111_dev *mt9v111;
mt9v111          1113 drivers/media/i2c/mt9v111.c 	mt9v111 = devm_kzalloc(&client->dev, sizeof(*mt9v111), GFP_KERNEL);
mt9v111          1114 drivers/media/i2c/mt9v111.c 	if (!mt9v111)
mt9v111          1117 drivers/media/i2c/mt9v111.c 	mt9v111->dev = &client->dev;
mt9v111          1118 drivers/media/i2c/mt9v111.c 	mt9v111->client = client;
mt9v111          1120 drivers/media/i2c/mt9v111.c 	mt9v111->clk = devm_clk_get(&client->dev, NULL);
mt9v111          1121 drivers/media/i2c/mt9v111.c 	if (IS_ERR(mt9v111->clk))
mt9v111          1122 drivers/media/i2c/mt9v111.c 		return PTR_ERR(mt9v111->clk);
mt9v111          1124 drivers/media/i2c/mt9v111.c 	mt9v111->sysclk = clk_get_rate(mt9v111->clk);
mt9v111          1125 drivers/media/i2c/mt9v111.c 	if (mt9v111->sysclk > MT9V111_MAX_CLKIN)
mt9v111          1128 drivers/media/i2c/mt9v111.c 	mt9v111->oe = devm_gpiod_get_optional(&client->dev, "enable",
mt9v111          1130 drivers/media/i2c/mt9v111.c 	if (IS_ERR(mt9v111->oe)) {
mt9v111          1132 drivers/media/i2c/mt9v111.c 			PTR_ERR(mt9v111->oe));
mt9v111          1133 drivers/media/i2c/mt9v111.c 		return PTR_ERR(mt9v111->oe);
mt9v111          1136 drivers/media/i2c/mt9v111.c 	mt9v111->standby = devm_gpiod_get_optional(&client->dev, "standby",
mt9v111          1138 drivers/media/i2c/mt9v111.c 	if (IS_ERR(mt9v111->standby)) {
mt9v111          1140 drivers/media/i2c/mt9v111.c 			PTR_ERR(mt9v111->standby));
mt9v111          1141 drivers/media/i2c/mt9v111.c 		return PTR_ERR(mt9v111->standby);
mt9v111          1144 drivers/media/i2c/mt9v111.c 	mt9v111->reset = devm_gpiod_get_optional(&client->dev, "reset",
mt9v111          1146 drivers/media/i2c/mt9v111.c 	if (IS_ERR(mt9v111->reset)) {
mt9v111          1148 drivers/media/i2c/mt9v111.c 			PTR_ERR(mt9v111->reset));
mt9v111          1149 drivers/media/i2c/mt9v111.c 		return PTR_ERR(mt9v111->reset);
mt9v111          1152 drivers/media/i2c/mt9v111.c 	mutex_init(&mt9v111->pwr_mutex);
mt9v111          1153 drivers/media/i2c/mt9v111.c 	mutex_init(&mt9v111->stream_mutex);
mt9v111          1155 drivers/media/i2c/mt9v111.c 	v4l2_ctrl_handler_init(&mt9v111->ctrls, 5);
mt9v111          1157 drivers/media/i2c/mt9v111.c 	mt9v111->auto_awb = v4l2_ctrl_new_std(&mt9v111->ctrls,
mt9v111          1162 drivers/media/i2c/mt9v111.c 	mt9v111->auto_exp = v4l2_ctrl_new_std_menu(&mt9v111->ctrls,
mt9v111          1167 drivers/media/i2c/mt9v111.c 	mt9v111->hblank = v4l2_ctrl_new_std(&mt9v111->ctrls, &mt9v111_ctrl_ops,
mt9v111          1172 drivers/media/i2c/mt9v111.c 	mt9v111->vblank = v4l2_ctrl_new_std(&mt9v111->ctrls, &mt9v111_ctrl_ops,
mt9v111          1179 drivers/media/i2c/mt9v111.c 	v4l2_ctrl_new_std(&mt9v111->ctrls, &mt9v111_ctrl_ops,
mt9v111          1181 drivers/media/i2c/mt9v111.c 			  DIV_ROUND_CLOSEST(mt9v111->sysclk, 2), 1,
mt9v111          1182 drivers/media/i2c/mt9v111.c 			  DIV_ROUND_CLOSEST(mt9v111->sysclk, 2));
mt9v111          1184 drivers/media/i2c/mt9v111.c 	if (mt9v111->ctrls.error) {
mt9v111          1185 drivers/media/i2c/mt9v111.c 		ret = mt9v111->ctrls.error;
mt9v111          1188 drivers/media/i2c/mt9v111.c 	mt9v111->sd.ctrl_handler = &mt9v111->ctrls;
mt9v111          1191 drivers/media/i2c/mt9v111.c 	mt9v111->fmt	= mt9v111_def_fmt;
mt9v111          1194 drivers/media/i2c/mt9v111.c 	mt9v111->fps		= 15;
mt9v111          1196 drivers/media/i2c/mt9v111.c 	tpf.denominator		= mt9v111->fps;
mt9v111          1197 drivers/media/i2c/mt9v111.c 	mt9v111_calc_frame_rate(mt9v111, &tpf);
mt9v111          1199 drivers/media/i2c/mt9v111.c 	mt9v111->pwr_count	= 0;
mt9v111          1200 drivers/media/i2c/mt9v111.c 	mt9v111->addr_space	= MT9V111_R01_IFP;
mt9v111          1201 drivers/media/i2c/mt9v111.c 	mt9v111->pending	= true;
mt9v111          1203 drivers/media/i2c/mt9v111.c 	v4l2_i2c_subdev_init(&mt9v111->sd, client, &mt9v111_ops);
mt9v111          1206 drivers/media/i2c/mt9v111.c 	mt9v111->sd.flags	|= V4L2_SUBDEV_FL_HAS_DEVNODE;
mt9v111          1207 drivers/media/i2c/mt9v111.c 	mt9v111->sd.entity.ops	= &mt9v111_subdev_entity_ops;
mt9v111          1208 drivers/media/i2c/mt9v111.c 	mt9v111->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
mt9v111          1210 drivers/media/i2c/mt9v111.c 	mt9v111->pad.flags	= MEDIA_PAD_FL_SOURCE;
mt9v111          1211 drivers/media/i2c/mt9v111.c 	ret = media_entity_pads_init(&mt9v111->sd.entity, 1, &mt9v111->pad);
mt9v111          1216 drivers/media/i2c/mt9v111.c 	ret = mt9v111_chip_probe(mt9v111);
mt9v111          1220 drivers/media/i2c/mt9v111.c 	ret = v4l2_async_register_subdev(&mt9v111->sd);
mt9v111          1228 drivers/media/i2c/mt9v111.c 	media_entity_cleanup(&mt9v111->sd.entity);
mt9v111          1232 drivers/media/i2c/mt9v111.c 	v4l2_ctrl_handler_free(&mt9v111->ctrls);
mt9v111          1234 drivers/media/i2c/mt9v111.c 	mutex_destroy(&mt9v111->pwr_mutex);
mt9v111          1235 drivers/media/i2c/mt9v111.c 	mutex_destroy(&mt9v111->stream_mutex);
mt9v111          1243 drivers/media/i2c/mt9v111.c 	struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd);
mt9v111          1251 drivers/media/i2c/mt9v111.c 	v4l2_ctrl_handler_free(&mt9v111->ctrls);
mt9v111          1253 drivers/media/i2c/mt9v111.c 	mutex_destroy(&mt9v111->pwr_mutex);
mt9v111          1254 drivers/media/i2c/mt9v111.c 	mutex_destroy(&mt9v111->stream_mutex);
mt9v111          1256 drivers/media/i2c/mt9v111.c 	devm_gpiod_put(mt9v111->dev, mt9v111->oe);
mt9v111          1257 drivers/media/i2c/mt9v111.c 	devm_gpiod_put(mt9v111->dev, mt9v111->standby);
mt9v111          1258 drivers/media/i2c/mt9v111.c 	devm_gpiod_put(mt9v111->dev, mt9v111->reset);
mt9v111          1260 drivers/media/i2c/mt9v111.c 	devm_clk_put(mt9v111->dev, mt9v111->clk);