Lines Matching refs:ov5695

3  * ov5695 driver
95 struct ov5695 {
115 #define to_ov5695(sd) container_of(sd, struct ov5695, subdev)
812 struct ov5695 *ov5695 = to_ov5695(sd);
816 mutex_lock(&ov5695->mutex);
828 ov5695->cur_mode = mode;
830 __v4l2_ctrl_modify_range(ov5695->hblank, h_blank,
833 __v4l2_ctrl_modify_range(ov5695->vblank, vblank_def,
838 mutex_unlock(&ov5695->mutex);
847 struct ov5695 *ov5695 = to_ov5695(sd);
848 const struct ov5695_mode *mode = ov5695->cur_mode;
850 mutex_lock(&ov5695->mutex);
855 mutex_unlock(&ov5695->mutex);
864 mutex_unlock(&ov5695->mutex);
898 static int ov5695_enable_test_pattern(struct ov5695 *ov5695, u32 pattern)
907 return ov5695_write_reg(ov5695->client, OV5695_REG_TEST_PATTERN,
911 static int __ov5695_start_stream(struct ov5695 *ov5695)
915 ret = ov5695_write_array(ov5695->client, ov5695_global_regs);
918 ret = ov5695_write_array(ov5695->client, ov5695->cur_mode->reg_list);
923 ret = __v4l2_ctrl_handler_setup(&ov5695->ctrl_handler);
927 return ov5695_write_reg(ov5695->client, OV5695_REG_CTRL_MODE,
931 static int __ov5695_stop_stream(struct ov5695 *ov5695)
933 return ov5695_write_reg(ov5695->client, OV5695_REG_CTRL_MODE,
939 struct ov5695 *ov5695 = to_ov5695(sd);
940 struct i2c_client *client = ov5695->client;
943 mutex_lock(&ov5695->mutex);
945 if (on == ov5695->streaming)
955 ret = __ov5695_start_stream(ov5695);
962 __ov5695_stop_stream(ov5695);
966 ov5695->streaming = on;
969 mutex_unlock(&ov5695->mutex);
974 static int __ov5695_power_on(struct ov5695 *ov5695)
977 struct device *dev = &ov5695->client->dev;
979 ret = clk_prepare_enable(ov5695->xvclk);
985 gpiod_set_value_cansleep(ov5695->reset_gpio, 1);
992 ret = regulator_enable(ov5695->supplies[i].consumer);
995 ov5695->supplies[i].supply, ret);
1000 gpiod_set_value_cansleep(ov5695->reset_gpio, 0);
1008 regulator_disable(ov5695->supplies[i].consumer);
1009 clk_disable_unprepare(ov5695->xvclk);
1014 static void __ov5695_power_off(struct ov5695 *ov5695)
1016 struct device *dev = &ov5695->client->dev;
1019 clk_disable_unprepare(ov5695->xvclk);
1020 gpiod_set_value_cansleep(ov5695->reset_gpio, 1);
1027 ret = regulator_disable(ov5695->supplies[i].consumer);
1030 ov5695->supplies[i].supply, ret);
1038 struct ov5695 *ov5695 = to_ov5695(sd);
1040 return __ov5695_power_on(ov5695);
1047 struct ov5695 *ov5695 = to_ov5695(sd);
1049 __ov5695_power_off(ov5695);
1057 struct ov5695 *ov5695 = to_ov5695(sd);
1062 mutex_lock(&ov5695->mutex);
1069 mutex_unlock(&ov5695->mutex);
1105 struct ov5695 *ov5695 = container_of(ctrl->handler,
1106 struct ov5695, ctrl_handler);
1107 struct i2c_client *client = ov5695->client;
1115 max = ov5695->cur_mode->height + ctrl->val - 4;
1116 __v4l2_ctrl_modify_range(ov5695->exposure,
1117 ov5695->exposure->minimum, max,
1118 ov5695->exposure->step,
1119 ov5695->exposure->default_value);
1129 ret = ov5695_write_reg(ov5695->client, OV5695_REG_EXPOSURE,
1133 ret = ov5695_write_reg(ov5695->client, OV5695_REG_ANALOG_GAIN,
1137 ret = ov5695_write_reg(ov5695->client, OV5695_REG_DIGI_GAIN_L,
1140 ret = ov5695_write_reg(ov5695->client, OV5695_REG_DIGI_GAIN_H,
1145 ret = ov5695_write_reg(ov5695->client, OV5695_REG_VTS,
1147 ctrl->val + ov5695->cur_mode->height);
1150 ret = ov5695_enable_test_pattern(ov5695, ctrl->val);
1167 static int ov5695_initialize_controls(struct ov5695 *ov5695)
1176 handler = &ov5695->ctrl_handler;
1177 mode = ov5695->cur_mode;
1181 handler->lock = &ov5695->mutex;
1192 ov5695->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK,
1194 if (ov5695->hblank)
1195 ov5695->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
1198 ov5695->vblank = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops,
1204 ov5695->exposure = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops,
1209 ov5695->anal_gain = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops,
1215 ov5695->digi_gain = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops,
1220 ov5695->test_pattern = v4l2_ctrl_new_std_menu_items(handler,
1227 dev_err(&ov5695->client->dev,
1232 ov5695->subdev.ctrl_handler = handler;
1242 static int ov5695_check_sensor_id(struct ov5695 *ov5695,
1245 struct device *dev = &ov5695->client->dev;
1261 static int ov5695_configure_regulators(struct ov5695 *ov5695)
1266 ov5695->supplies[i].supply = ov5695_supply_names[i];
1268 return devm_regulator_bulk_get(&ov5695->client->dev,
1270 ov5695->supplies);
1277 struct ov5695 *ov5695;
1281 ov5695 = devm_kzalloc(dev, sizeof(*ov5695), GFP_KERNEL);
1282 if (!ov5695)
1285 ov5695->client = client;
1286 ov5695->cur_mode = &supported_modes[0];
1288 ov5695->xvclk = devm_clk_get(dev, "xvclk");
1289 if (IS_ERR(ov5695->xvclk)) {
1293 ret = clk_set_rate(ov5695->xvclk, OV5695_XVCLK_FREQ);
1298 if (clk_get_rate(ov5695->xvclk) != OV5695_XVCLK_FREQ)
1301 ov5695->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
1302 if (IS_ERR(ov5695->reset_gpio)) {
1307 ret = ov5695_configure_regulators(ov5695);
1313 mutex_init(&ov5695->mutex);
1315 sd = &ov5695->subdev;
1317 ret = ov5695_initialize_controls(ov5695);
1321 ret = __ov5695_power_on(ov5695);
1325 ret = ov5695_check_sensor_id(ov5695, client);
1334 ov5695->pad.flags = MEDIA_PAD_FL_SOURCE;
1336 ret = media_entity_pads_init(&sd->entity, 1, &ov5695->pad);
1358 __ov5695_power_off(ov5695);
1360 v4l2_ctrl_handler_free(&ov5695->ctrl_handler);
1362 mutex_destroy(&ov5695->mutex);
1370 struct ov5695 *ov5695 = to_ov5695(sd);
1376 v4l2_ctrl_handler_free(&ov5695->ctrl_handler);
1377 mutex_destroy(&ov5695->mutex);
1381 __ov5695_power_off(ov5695);
1389 { .compatible = "ovti,ov5695" },
1397 .name = "ov5695",
1407 MODULE_DESCRIPTION("OmniVision ov5695 sensor driver");