Symbol: ov2740
drivers/media/i2c/ov2740.c
1001
sd_state = v4l2_subdev_lock_and_get_active_state(&ov2740->sd);
drivers/media/i2c/ov2740.c
1004
ret = pm_runtime_resume_and_get(ov2740->dev);
drivers/media/i2c/ov2740.c
1008
ret = ov2740_start_streaming(ov2740);
drivers/media/i2c/ov2740.c
1011
ov2740_stop_streaming(ov2740);
drivers/media/i2c/ov2740.c
1012
pm_runtime_put(ov2740->dev);
drivers/media/i2c/ov2740.c
1015
ov2740_stop_streaming(ov2740);
drivers/media/i2c/ov2740.c
1016
pm_runtime_put(ov2740->dev);
drivers/media/i2c/ov2740.c
1029
struct ov2740 *ov2740 = to_ov2740(sd);
drivers/media/i2c/ov2740.c
1033
mode = v4l2_find_nearest_size(ov2740->supported_modes,
drivers/media/i2c/ov2740.c
1034
ov2740->supported_modes_count,
drivers/media/i2c/ov2740.c
1044
ov2740->cur_mode = mode;
drivers/media/i2c/ov2740.c
1045
__v4l2_ctrl_s_ctrl(ov2740->link_freq, mode->link_freq_index);
drivers/media/i2c/ov2740.c
1046
__v4l2_ctrl_s_ctrl_int64(ov2740->pixel_rate,
drivers/media/i2c/ov2740.c
1051
__v4l2_ctrl_modify_range(ov2740->vblank,
drivers/media/i2c/ov2740.c
1054
__v4l2_ctrl_s_ctrl(ov2740->vblank, vblank_def);
drivers/media/i2c/ov2740.c
1056
__v4l2_ctrl_modify_range(ov2740->hblank, h_blank, h_blank, 1, h_blank);
drivers/media/i2c/ov2740.c
1077
struct ov2740 *ov2740 = to_ov2740(sd);
drivers/media/i2c/ov2740.c
1078
const struct ov2740_mode *supported_modes = ov2740->supported_modes;
drivers/media/i2c/ov2740.c
1080
if (fse->index >= ov2740->supported_modes_count)
drivers/media/i2c/ov2740.c
1097
struct ov2740 *ov2740 = to_ov2740(sd);
drivers/media/i2c/ov2740.c
1099
ov2740_update_pad_format(&ov2740->supported_modes[0],
drivers/media/i2c/ov2740.c
1128
static int ov2740_check_hwcfg(struct ov2740 *ov2740)
drivers/media/i2c/ov2740.c
1130
struct device *dev = ov2740->dev;
drivers/media/i2c/ov2740.c
1177
ov2740->supported_modes = supported_modes_360mhz;
drivers/media/i2c/ov2740.c
1178
ov2740->supported_modes_count =
drivers/media/i2c/ov2740.c
1182
ov2740->supported_modes = supported_modes_180mhz;
drivers/media/i2c/ov2740.c
1183
ov2740->supported_modes_count =
drivers/media/i2c/ov2740.c
1191
if (!ov2740->supported_modes)
drivers/media/i2c/ov2740.c
1217
struct ov2740 *ov2740 = to_ov2740(dev_get_drvdata(dev));
drivers/media/i2c/ov2740.c
1222
sd_state = v4l2_subdev_lock_and_get_active_state(&ov2740->sd);
drivers/media/i2c/ov2740.c
1245
struct ov2740 *ov2740)
drivers/media/i2c/ov2740.c
1251
struct device *dev = ov2740->dev;
drivers/media/i2c/ov2740.c
1284
ov2740->nvm = nvm;
drivers/media/i2c/ov2740.c
1291
struct ov2740 *ov2740 = to_ov2740(sd);
drivers/media/i2c/ov2740.c
1293
gpiod_set_value_cansleep(ov2740->reset_gpio, 1);
drivers/media/i2c/ov2740.c
1294
gpiod_set_value_cansleep(ov2740->powerdown_gpio, 1);
drivers/media/i2c/ov2740.c
1295
clk_disable_unprepare(ov2740->clk);
drivers/media/i2c/ov2740.c
1297
ov2740->supplies);
drivers/media/i2c/ov2740.c
1304
struct ov2740 *ov2740 = to_ov2740(sd);
drivers/media/i2c/ov2740.c
1308
ov2740->supplies);
drivers/media/i2c/ov2740.c
1312
ret = clk_prepare_enable(ov2740->clk);
drivers/media/i2c/ov2740.c
1315
ov2740->supplies);
drivers/media/i2c/ov2740.c
1319
gpiod_set_value_cansleep(ov2740->powerdown_gpio, 0);
drivers/media/i2c/ov2740.c
1320
gpiod_set_value_cansleep(ov2740->reset_gpio, 0);
drivers/media/i2c/ov2740.c
1329
struct ov2740 *ov2740;
drivers/media/i2c/ov2740.c
1335
ov2740 = devm_kzalloc(&client->dev, sizeof(*ov2740), GFP_KERNEL);
drivers/media/i2c/ov2740.c
1336
if (!ov2740)
drivers/media/i2c/ov2740.c
1339
ov2740->dev = &client->dev;
drivers/media/i2c/ov2740.c
1341
v4l2_i2c_subdev_init(&ov2740->sd, client, &ov2740_subdev_ops);
drivers/media/i2c/ov2740.c
1342
ov2740->sd.internal_ops = &ov2740_internal_ops;
drivers/media/i2c/ov2740.c
1344
ret = ov2740_check_hwcfg(ov2740);
drivers/media/i2c/ov2740.c
1348
ov2740->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
drivers/media/i2c/ov2740.c
1349
if (IS_ERR(ov2740->reset_gpio)) {
drivers/media/i2c/ov2740.c
1350
return dev_err_probe(dev, PTR_ERR(ov2740->reset_gpio),
drivers/media/i2c/ov2740.c
1354
ov2740->powerdown_gpio = devm_gpiod_get_optional(dev, "powerdown", GPIOD_OUT_HIGH);
drivers/media/i2c/ov2740.c
1355
if (IS_ERR(ov2740->powerdown_gpio)) {
drivers/media/i2c/ov2740.c
1356
return dev_err_probe(dev, PTR_ERR(ov2740->powerdown_gpio),
drivers/media/i2c/ov2740.c
1360
if (ov2740->reset_gpio || ov2740->powerdown_gpio) {
drivers/media/i2c/ov2740.c
1368
ov2740->clk = devm_v4l2_sensor_clk_get(dev, "clk");
drivers/media/i2c/ov2740.c
1369
if (IS_ERR(ov2740->clk))
drivers/media/i2c/ov2740.c
1370
return dev_err_probe(dev, PTR_ERR(ov2740->clk),
drivers/media/i2c/ov2740.c
1373
freq = clk_get_rate(ov2740->clk);
drivers/media/i2c/ov2740.c
1380
ov2740->supplies[i].supply = ov2740_supply_name[i];
drivers/media/i2c/ov2740.c
1383
ov2740->supplies);
drivers/media/i2c/ov2740.c
1387
full_power = acpi_dev_state_d0(ov2740->dev);
drivers/media/i2c/ov2740.c
1394
ret = ov2740_identify_module(ov2740);
drivers/media/i2c/ov2740.c
1401
ov2740->cur_mode = &ov2740->supported_modes[0];
drivers/media/i2c/ov2740.c
1402
ret = ov2740_init_controls(ov2740);
drivers/media/i2c/ov2740.c
1408
ov2740->sd.state_lock = ov2740->ctrl_handler.lock;
drivers/media/i2c/ov2740.c
1409
ov2740->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
drivers/media/i2c/ov2740.c
1410
ov2740->sd.entity.ops = &ov2740_subdev_entity_ops;
drivers/media/i2c/ov2740.c
1411
ov2740->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
drivers/media/i2c/ov2740.c
1412
ov2740->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/ov2740.c
1413
ret = media_entity_pads_init(&ov2740->sd.entity, 1, &ov2740->pad);
drivers/media/i2c/ov2740.c
1419
ret = v4l2_subdev_init_finalize(&ov2740->sd);
drivers/media/i2c/ov2740.c
1425
pm_runtime_set_active(ov2740->dev);
drivers/media/i2c/ov2740.c
1426
pm_runtime_enable(ov2740->dev);
drivers/media/i2c/ov2740.c
1427
pm_runtime_idle(ov2740->dev);
drivers/media/i2c/ov2740.c
1429
ret = v4l2_async_register_subdev_sensor(&ov2740->sd);
drivers/media/i2c/ov2740.c
1435
ret = ov2740_register_nvmem(client, ov2740);
drivers/media/i2c/ov2740.c
1437
dev_warn(ov2740->dev, "register nvmem failed, ret %d\n", ret);
drivers/media/i2c/ov2740.c
1442
pm_runtime_disable(ov2740->dev);
drivers/media/i2c/ov2740.c
1443
pm_runtime_set_suspended(ov2740->dev);
drivers/media/i2c/ov2740.c
1444
v4l2_subdev_cleanup(&ov2740->sd);
drivers/media/i2c/ov2740.c
1447
media_entity_cleanup(&ov2740->sd.entity);
drivers/media/i2c/ov2740.c
1450
v4l2_ctrl_handler_free(ov2740->sd.ctrl_handler);
drivers/media/i2c/ov2740.c
555
static inline struct ov2740 *to_ov2740(struct v4l2_subdev *subdev)
drivers/media/i2c/ov2740.c
557
return container_of(subdev, struct ov2740, sd);
drivers/media/i2c/ov2740.c
569
static int ov2740_read_reg(struct ov2740 *ov2740, u16 reg, u16 len, u32 *val)
drivers/media/i2c/ov2740.c
571
struct i2c_client *client = v4l2_get_subdevdata(&ov2740->sd);
drivers/media/i2c/ov2740.c
599
static int ov2740_write_reg(struct ov2740 *ov2740, u16 reg, u16 len, u32 val)
drivers/media/i2c/ov2740.c
601
struct i2c_client *client = v4l2_get_subdevdata(&ov2740->sd);
drivers/media/i2c/ov2740.c
618
static int ov2740_write_reg_list(struct ov2740 *ov2740,
drivers/media/i2c/ov2740.c
625
ret = ov2740_write_reg(ov2740, r_list->regs[i].address, 1,
drivers/media/i2c/ov2740.c
628
dev_err_ratelimited(ov2740->dev,
drivers/media/i2c/ov2740.c
638
static int ov2740_identify_module(struct ov2740 *ov2740)
drivers/media/i2c/ov2740.c
643
if (ov2740->identified)
drivers/media/i2c/ov2740.c
646
ret = ov2740_read_reg(ov2740, OV2740_REG_CHIP_ID, 3, &val);
drivers/media/i2c/ov2740.c
651
dev_err(ov2740->dev, "chip id mismatch: %x != %x\n",
drivers/media/i2c/ov2740.c
656
dev_dbg(ov2740->dev, "chip id: 0x%x\n", val);
drivers/media/i2c/ov2740.c
658
ov2740->identified = true;
drivers/media/i2c/ov2740.c
663
static int ov2740_update_digital_gain(struct ov2740 *ov2740, u32 d_gain)
drivers/media/i2c/ov2740.c
667
ret = ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1,
drivers/media/i2c/ov2740.c
672
ret = ov2740_write_reg(ov2740, OV2740_REG_MWB_R_GAIN, 2, d_gain);
drivers/media/i2c/ov2740.c
676
ret = ov2740_write_reg(ov2740, OV2740_REG_MWB_G_GAIN, 2, d_gain);
drivers/media/i2c/ov2740.c
680
ret = ov2740_write_reg(ov2740, OV2740_REG_MWB_B_GAIN, 2, d_gain);
drivers/media/i2c/ov2740.c
684
ret = ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1,
drivers/media/i2c/ov2740.c
689
ret = ov2740_write_reg(ov2740, OV2740_REG_GROUP_ACCESS, 1,
drivers/media/i2c/ov2740.c
694
static int ov2740_test_pattern(struct ov2740 *ov2740, u32 pattern)
drivers/media/i2c/ov2740.c
700
return ov2740_write_reg(ov2740, OV2740_REG_TEST_PATTERN, 1, pattern);
drivers/media/i2c/ov2740.c
705
struct ov2740 *ov2740 = container_of(ctrl->handler,
drivers/media/i2c/ov2740.c
706
struct ov2740, ctrl_handler);
drivers/media/i2c/ov2740.c
713
exposure_max = ov2740->cur_mode->height + ctrl->val -
drivers/media/i2c/ov2740.c
715
__v4l2_ctrl_modify_range(ov2740->exposure,
drivers/media/i2c/ov2740.c
716
ov2740->exposure->minimum,
drivers/media/i2c/ov2740.c
717
exposure_max, ov2740->exposure->step,
drivers/media/i2c/ov2740.c
722
if (!pm_runtime_get_if_in_use(ov2740->dev))
drivers/media/i2c/ov2740.c
727
ret = ov2740_write_reg(ov2740, OV2740_REG_ANALOG_GAIN, 2,
drivers/media/i2c/ov2740.c
732
ret = ov2740_update_digital_gain(ov2740, ctrl->val);
drivers/media/i2c/ov2740.c
737
ret = ov2740_write_reg(ov2740, OV2740_REG_EXPOSURE, 3,
drivers/media/i2c/ov2740.c
742
ret = ov2740_write_reg(ov2740, OV2740_REG_VTS, 2,
drivers/media/i2c/ov2740.c
743
ov2740->cur_mode->height + ctrl->val);
drivers/media/i2c/ov2740.c
747
ret = ov2740_test_pattern(ov2740, ctrl->val);
drivers/media/i2c/ov2740.c
755
pm_runtime_put(ov2740->dev);
drivers/media/i2c/ov2740.c
764
static int ov2740_init_controls(struct ov2740 *ov2740)
drivers/media/i2c/ov2740.c
772
ctrl_hdlr = &ov2740->ctrl_handler;
drivers/media/i2c/ov2740.c
777
ov2740->link_freq =
drivers/media/i2c/ov2740.c
781
ov2740->supported_modes->link_freq_index,
drivers/media/i2c/ov2740.c
783
if (ov2740->link_freq)
drivers/media/i2c/ov2740.c
784
ov2740->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
drivers/media/i2c/ov2740.c
786
pixel_rate = to_pixel_rate(ov2740->supported_modes->link_freq_index);
drivers/media/i2c/ov2740.c
787
ov2740->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops,
drivers/media/i2c/ov2740.c
791
vblank_min = ov2740->cur_mode->vts_min - ov2740->cur_mode->height;
drivers/media/i2c/ov2740.c
792
vblank_max = ov2740->cur_mode->vts_max - ov2740->cur_mode->height;
drivers/media/i2c/ov2740.c
793
vblank_default = ov2740->cur_mode->vts_def - ov2740->cur_mode->height;
drivers/media/i2c/ov2740.c
794
ov2740->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops,
drivers/media/i2c/ov2740.c
798
h_blank = ov2740->cur_mode->hts - ov2740->cur_mode->width;
drivers/media/i2c/ov2740.c
799
ov2740->hblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops,
drivers/media/i2c/ov2740.c
802
if (ov2740->hblank)
drivers/media/i2c/ov2740.c
803
ov2740->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
drivers/media/i2c/ov2740.c
811
exposure_max = ov2740->cur_mode->vts_def - OV2740_EXPOSURE_MAX_MARGIN;
drivers/media/i2c/ov2740.c
812
ov2740->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &ov2740_ctrl_ops,
drivers/media/i2c/ov2740.c
822
ret = v4l2_fwnode_device_parse(ov2740->dev, &props);
drivers/media/i2c/ov2740.c
835
ov2740->sd.ctrl_handler = ctrl_hdlr;
drivers/media/i2c/ov2740.c
852
struct ov2740 *ov2740 = to_ov2740(dev_get_drvdata(dev));
drivers/media/i2c/ov2740.c
864
ret = ov2740_read_reg(ov2740, OV2740_REG_ISP_CTRL00, 1, &isp_ctrl00);
drivers/media/i2c/ov2740.c
870
ret = ov2740_read_reg(ov2740, OV2740_REG_ISP_CTRL01, 1, &isp_ctrl01);
drivers/media/i2c/ov2740.c
877
ret = ov2740_write_reg(ov2740, OV2740_REG_ISP_CTRL00, 1,
drivers/media/i2c/ov2740.c
885
ret = ov2740_write_reg(ov2740, OV2740_REG_ISP_CTRL01, 1,
drivers/media/i2c/ov2740.c
892
ret = ov2740_write_reg(ov2740, OV2740_REG_MODE_SELECT, 1,
drivers/media/i2c/ov2740.c
912
ret = ov2740_write_reg(ov2740, OV2740_REG_MODE_SELECT, 1,
drivers/media/i2c/ov2740.c
919
ret = ov2740_write_reg(ov2740, OV2740_REG_ISP_CTRL01, 1, isp_ctrl01);
drivers/media/i2c/ov2740.c
925
ret = ov2740_write_reg(ov2740, OV2740_REG_ISP_CTRL00, 1, isp_ctrl00);
drivers/media/i2c/ov2740.c
939
static int ov2740_start_streaming(struct ov2740 *ov2740)
drivers/media/i2c/ov2740.c
945
ret = ov2740_identify_module(ov2740);
drivers/media/i2c/ov2740.c
949
if (ov2740->nvm)
drivers/media/i2c/ov2740.c
950
ov2740_load_otp_data(ov2740->nvm);
drivers/media/i2c/ov2740.c
953
ret = ov2740_write_reg(ov2740, 0x0103, 1, 0x01);
drivers/media/i2c/ov2740.c
955
dev_err(ov2740->dev, "failed to reset\n");
drivers/media/i2c/ov2740.c
961
link_freq_index = ov2740->cur_mode->link_freq_index;
drivers/media/i2c/ov2740.c
963
ret = ov2740_write_reg_list(ov2740, reg_list);
drivers/media/i2c/ov2740.c
965
dev_err(ov2740->dev, "failed to set plls\n");
drivers/media/i2c/ov2740.c
969
reg_list = &ov2740->cur_mode->reg_list;
drivers/media/i2c/ov2740.c
970
ret = ov2740_write_reg_list(ov2740, reg_list);
drivers/media/i2c/ov2740.c
972
dev_err(ov2740->dev, "failed to set mode\n");
drivers/media/i2c/ov2740.c
976
ret = __v4l2_ctrl_handler_setup(ov2740->sd.ctrl_handler);
drivers/media/i2c/ov2740.c
980
ret = ov2740_write_reg(ov2740, OV2740_REG_MODE_SELECT, 1,
drivers/media/i2c/ov2740.c
983
dev_err(ov2740->dev, "failed to start streaming\n");
drivers/media/i2c/ov2740.c
988
static void ov2740_stop_streaming(struct ov2740 *ov2740)
drivers/media/i2c/ov2740.c
990
if (ov2740_write_reg(ov2740, OV2740_REG_MODE_SELECT, 1,
drivers/media/i2c/ov2740.c
992
dev_err(ov2740->dev, "failed to stop streaming\n");
drivers/media/i2c/ov2740.c
997
struct ov2740 *ov2740 = to_ov2740(sd);