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);
856 mutex_unlock(&ov5695->mutex);
865 mutex_unlock(&ov5695->mutex);
899 static int ov5695_enable_test_pattern(struct ov5695 *ov5695, u32 pattern)
908 return ov5695_write_reg(ov5695->client, OV5695_REG_TEST_PATTERN,
912 static int __ov5695_start_stream(struct ov5695 *ov5695)
916 ret = ov5695_write_array(ov5695->client, ov5695_global_regs);
919 ret = ov5695_write_array(ov5695->client, ov5695->cur_mode->reg_list);
924 ret = __v4l2_ctrl_handler_setup(&ov5695->ctrl_handler);
928 return ov5695_write_reg(ov5695->client, OV5695_REG_CTRL_MODE,
932 static int __ov5695_stop_stream(struct ov5695 *ov5695)
934 return ov5695_write_reg(ov5695->client, OV5695_REG_CTRL_MODE,
940 struct ov5695 *ov5695 = to_ov5695(sd);
941 struct i2c_client *client = ov5695->client;
944 mutex_lock(&ov5695->mutex);
946 if (on == ov5695->streaming)
954 ret = __ov5695_start_stream(ov5695);
961 __ov5695_stop_stream(ov5695);
965 ov5695->streaming = on;
968 mutex_unlock(&ov5695->mutex);
973 static int __ov5695_power_on(struct ov5695 *ov5695)
976 struct device *dev = &ov5695->client->dev;
978 ret = clk_prepare_enable(ov5695->xvclk);
984 gpiod_set_value_cansleep(ov5695->reset_gpio, 1);
991 ret = regulator_enable(ov5695->supplies[i].consumer);
994 ov5695->supplies[i].supply, ret);
999 gpiod_set_value_cansleep(ov5695->reset_gpio, 0);
1007 regulator_disable(ov5695->supplies[i].consumer);
1008 clk_disable_unprepare(ov5695->xvclk);
1013 static void __ov5695_power_off(struct ov5695 *ov5695)
1015 struct device *dev = &ov5695->client->dev;
1018 clk_disable_unprepare(ov5695->xvclk);
1019 gpiod_set_value_cansleep(ov5695->reset_gpio, 1);
1026 ret = regulator_disable(ov5695->supplies[i].consumer);
1029 ov5695->supplies[i].supply, ret);
1036 struct ov5695 *ov5695 = to_ov5695(sd);
1038 return __ov5695_power_on(ov5695);
1044 struct ov5695 *ov5695 = to_ov5695(sd);
1046 __ov5695_power_off(ov5695);
1054 struct ov5695 *ov5695 = to_ov5695(sd);
1059 mutex_lock(&ov5695->mutex);
1066 mutex_unlock(&ov5695->mutex);
1102 struct ov5695 *ov5695 = container_of(ctrl->handler,
1103 struct ov5695, ctrl_handler);
1104 struct i2c_client *client = ov5695->client;
1112 max = ov5695->cur_mode->height + ctrl->val - 4;
1113 __v4l2_ctrl_modify_range(ov5695->exposure,
1114 ov5695->exposure->minimum, max,
1115 ov5695->exposure->step,
1116 ov5695->exposure->default_value);
1126 ret = ov5695_write_reg(ov5695->client, OV5695_REG_EXPOSURE,
1130 ret = ov5695_write_reg(ov5695->client, OV5695_REG_ANALOG_GAIN,
1134 ret = ov5695_write_reg(ov5695->client, OV5695_REG_DIGI_GAIN_L,
1137 ret = ov5695_write_reg(ov5695->client, OV5695_REG_DIGI_GAIN_H,
1142 ret = ov5695_write_reg(ov5695->client, OV5695_REG_VTS,
1144 ctrl->val + ov5695->cur_mode->height);
1147 ret = ov5695_enable_test_pattern(ov5695, ctrl->val);
1164 static int ov5695_initialize_controls(struct ov5695 *ov5695)
1173 handler = &ov5695->ctrl_handler;
1174 mode = ov5695->cur_mode;
1178 handler->lock = &ov5695->mutex;
1189 ov5695->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK,
1191 if (ov5695->hblank)
1192 ov5695->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
1195 ov5695->vblank = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops,
1201 ov5695->exposure = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops,
1206 ov5695->anal_gain = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops,
1212 ov5695->digi_gain = v4l2_ctrl_new_std(handler, &ov5695_ctrl_ops,
1217 ov5695->test_pattern = v4l2_ctrl_new_std_menu_items(handler,
1224 dev_err(&ov5695->client->dev,
1229 ov5695->subdev.ctrl_handler = handler;
1239 static int ov5695_check_sensor_id(struct ov5695 *ov5695,
1242 struct device *dev = &ov5695->client->dev;
1258 static int ov5695_configure_regulators(struct ov5695 *ov5695)
1263 ov5695->supplies[i].supply = ov5695_supply_names[i];
1265 return devm_regulator_bulk_get(&ov5695->client->dev,
1267 ov5695->supplies);
1273 struct ov5695 *ov5695;
1277 ov5695 = devm_kzalloc(dev, sizeof(*ov5695), GFP_KERNEL);
1278 if (!ov5695)
1281 ov5695->client = client;
1282 ov5695->cur_mode = &supported_modes[0];
1284 ov5695->xvclk = devm_clk_get(dev, "xvclk");
1285 if (IS_ERR(ov5695->xvclk)) {
1289 ret = clk_set_rate(ov5695->xvclk, OV5695_XVCLK_FREQ);
1294 if (clk_get_rate(ov5695->xvclk) != OV5695_XVCLK_FREQ)
1297 ov5695->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
1298 if (IS_ERR(ov5695->reset_gpio)) {
1303 ret = ov5695_configure_regulators(ov5695);
1309 mutex_init(&ov5695->mutex);
1311 sd = &ov5695->subdev;
1313 ret = ov5695_initialize_controls(ov5695);
1317 ret = __ov5695_power_on(ov5695);
1321 ret = ov5695_check_sensor_id(ov5695, client);
1330 ov5695->pad.flags = MEDIA_PAD_FL_SOURCE;
1332 ret = media_entity_pads_init(&sd->entity, 1, &ov5695->pad);
1354 __ov5695_power_off(ov5695);
1356 v4l2_ctrl_handler_free(&ov5695->ctrl_handler);
1358 mutex_destroy(&ov5695->mutex);
1366 struct ov5695 *ov5695 = to_ov5695(sd);
1372 v4l2_ctrl_handler_free(&ov5695->ctrl_handler);
1373 mutex_destroy(&ov5695->mutex);
1377 __ov5695_power_off(ov5695);
1383 { .compatible = "ovti,ov5695" },
1391 .name = "ov5695",
1401 MODULE_DESCRIPTION("OmniVision ov5695 sensor driver");