Lines Matching defs:ov2659
19 #include <media/i2c/ov2659.h>
26 #define DRIVER_NAME "ov2659"
197 struct ov2659 {
817 static inline struct ov2659 *to_ov2659(struct v4l2_subdev *sd)
819 return container_of(sd, struct ov2659, sd);
843 "ov2659 write reg(0x%x val:0x%x) failed !\n", reg, val);
875 "ov2659 read reg(0x%x val:0x%x) failed !\n", reg, *val);
891 static void ov2659_pll_calc_params(struct ov2659 *ov2659)
893 const struct ov2659_platform_data *pdata = ov2659->pdata;
895 struct i2c_client *client = ov2659->client;
907 actual = ov2659->xvclk_frequency;
924 ov2659->pll.ctrl1 = ctrl1_reg;
925 ov2659->pll.ctrl2 = ctrl2_reg;
926 ov2659->pll.ctrl3 = ctrl3_reg;
933 static int ov2659_set_pixel_clock(struct ov2659 *ov2659)
935 struct i2c_client *client = ov2659->client;
937 {REG_SC_PLL_CTRL1, ov2659->pll.ctrl1},
938 {REG_SC_PLL_CTRL2, ov2659->pll.ctrl2},
939 {REG_SC_PLL_CTRL3, ov2659->pll.ctrl3},
957 static void ov2659_set_streaming(struct ov2659 *ov2659, int on)
959 struct i2c_client *client = ov2659->client;
968 dev_err(&client->dev, "ov2659 soft standby failed\n");
1029 struct ov2659 *ov2659 = to_ov2659(sd);
1038 mutex_lock(&ov2659->lock);
1040 mutex_unlock(&ov2659->lock);
1047 mutex_lock(&ov2659->lock);
1048 fmt->format = ov2659->format;
1049 mutex_unlock(&ov2659->lock);
1052 ov2659->format.code, ov2659->format.width,
1053 ov2659->format.height);
1094 struct ov2659 *ov2659 = to_ov2659(sd);
1113 mutex_lock(&ov2659->lock);
1123 if (ov2659->streaming) {
1124 mutex_unlock(&ov2659->lock);
1128 ov2659->frame_size = size;
1129 ov2659->format = fmt->format;
1130 ov2659->format_ctrl_regs =
1133 if (ov2659->format.code != MEDIA_BUS_FMT_SBGGR8_1X8)
1134 val = ov2659->pdata->link_frequency / 2;
1136 val = ov2659->pdata->link_frequency;
1138 ret = v4l2_ctrl_s_ctrl_int64(ov2659->link_frequency, val);
1145 mutex_unlock(&ov2659->lock);
1149 static int ov2659_set_frame_size(struct ov2659 *ov2659)
1151 struct i2c_client *client = ov2659->client;
1155 return ov2659_write_array(ov2659->client, ov2659->frame_size->regs);
1158 static int ov2659_set_format(struct ov2659 *ov2659)
1160 struct i2c_client *client = ov2659->client;
1164 return ov2659_write_array(ov2659->client, ov2659->format_ctrl_regs);
1170 struct ov2659 *ov2659 = to_ov2659(sd);
1175 mutex_lock(&ov2659->lock);
1179 if (ov2659->streaming == on)
1184 ov2659_set_streaming(ov2659, 0);
1185 ov2659->streaming = on;
1196 ret = ov2659_set_pixel_clock(ov2659);
1198 ret = ov2659_set_frame_size(ov2659);
1200 ret = ov2659_set_format(ov2659);
1202 ov2659_set_streaming(ov2659, 1);
1203 ov2659->streaming = on;
1207 mutex_unlock(&ov2659->lock);
1211 static int ov2659_set_test_pattern(struct ov2659 *ov2659, int value)
1213 struct i2c_client *client = v4l2_get_subdevdata(&ov2659->sd);
1236 struct ov2659 *ov2659 =
1237 container_of(ctrl->handler, struct ov2659, ctrls);
1238 struct i2c_client *client = ov2659->client;
1246 return ov2659_set_test_pattern(ov2659, ctrl->val);
1266 struct ov2659 *ov2659 = to_ov2659(sd);
1270 gpiod_set_value(ov2659->pwdn_gpio, 1);
1272 clk_disable_unprepare(ov2659->clk);
1281 struct ov2659 *ov2659 = to_ov2659(sd);
1286 ret = clk_prepare_enable(ov2659->clk);
1293 gpiod_set_value(ov2659->pwdn_gpio, 0);
1295 if (ov2659->resetb_gpio) {
1296 gpiod_set_value(ov2659->resetb_gpio, 1);
1298 gpiod_set_value(ov2659->resetb_gpio, 0);
1435 struct ov2659 *ov2659;
1443 ov2659 = devm_kzalloc(&client->dev, sizeof(*ov2659), GFP_KERNEL);
1444 if (!ov2659)
1447 ov2659->pdata = pdata;
1448 ov2659->client = client;
1450 ov2659->clk = devm_clk_get(&client->dev, "xvclk");
1451 if (IS_ERR(ov2659->clk))
1452 return PTR_ERR(ov2659->clk);
1454 ov2659->xvclk_frequency = clk_get_rate(ov2659->clk);
1455 if (ov2659->xvclk_frequency < 6000000 ||
1456 ov2659->xvclk_frequency > 27000000)
1460 ov2659->pwdn_gpio = devm_gpiod_get_optional(&client->dev, "powerdown",
1462 if (IS_ERR(ov2659->pwdn_gpio))
1463 return PTR_ERR(ov2659->pwdn_gpio);
1466 ov2659->resetb_gpio = devm_gpiod_get_optional(&client->dev, "reset",
1468 if (IS_ERR(ov2659->resetb_gpio))
1469 return PTR_ERR(ov2659->resetb_gpio);
1471 v4l2_ctrl_handler_init(&ov2659->ctrls, 2);
1472 ov2659->link_frequency =
1473 v4l2_ctrl_new_std(&ov2659->ctrls, &ov2659_ctrl_ops,
1478 v4l2_ctrl_new_std_menu_items(&ov2659->ctrls, &ov2659_ctrl_ops,
1482 ov2659->sd.ctrl_handler = &ov2659->ctrls;
1484 if (ov2659->ctrls.error) {
1486 __func__, ov2659->ctrls.error);
1487 return ov2659->ctrls.error;
1490 sd = &ov2659->sd;
1501 ov2659->pad.flags = MEDIA_PAD_FL_SOURCE;
1503 ret = media_entity_pads_init(&sd->entity, 1, &ov2659->pad);
1505 v4l2_ctrl_handler_free(&ov2659->ctrls);
1510 mutex_init(&ov2659->lock);
1512 ov2659_get_default_format(&ov2659->format);
1513 ov2659->frame_size = &ov2659_framesizes[2];
1514 ov2659->format_ctrl_regs = ov2659_formats[0].format_ctrl_regs;
1525 ov2659_pll_calc_params(ov2659);
1527 ret = v4l2_async_register_subdev(&ov2659->sd);
1540 v4l2_ctrl_handler_free(&ov2659->ctrls);
1543 mutex_destroy(&ov2659->lock);
1550 struct ov2659 *ov2659 = to_ov2659(sd);
1552 v4l2_ctrl_handler_free(&ov2659->ctrls);
1555 mutex_destroy(&ov2659->lock);
1568 { "ov2659", 0 },
1575 { .compatible = "ovti,ov2659", },