Symbol: ov2735
drivers/media/i2c/ov2735.c
1001
ov2735->enable_gpio = devm_gpiod_get_optional(ov2735->dev,
drivers/media/i2c/ov2735.c
1003
if (IS_ERR(ov2735->enable_gpio))
drivers/media/i2c/ov2735.c
1004
return dev_err_probe(ov2735->dev, PTR_ERR(ov2735->enable_gpio),
drivers/media/i2c/ov2735.c
1007
ret = ov2735_power_on(ov2735->dev);
drivers/media/i2c/ov2735.c
1011
ret = ov2735_identify_module(ov2735);
drivers/media/i2c/ov2735.c
1015
ret = ov2735_init_controls(ov2735);
drivers/media/i2c/ov2735.c
1020
ov2735->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
drivers/media/i2c/ov2735.c
1021
ov2735->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
drivers/media/i2c/ov2735.c
1022
ov2735->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/ov2735.c
1024
ret = media_entity_pads_init(&ov2735->sd.entity, 1, &ov2735->pad);
drivers/media/i2c/ov2735.c
1026
dev_err_probe(ov2735->dev, ret, "failed to init entity pads\n");
drivers/media/i2c/ov2735.c
1030
ov2735->sd.state_lock = ov2735->handler.lock;
drivers/media/i2c/ov2735.c
1031
ret = v4l2_subdev_init_finalize(&ov2735->sd);
drivers/media/i2c/ov2735.c
1033
dev_err_probe(ov2735->dev, ret, "subdev init error\n");
drivers/media/i2c/ov2735.c
1037
ret = devm_pm_runtime_get_noresume(ov2735->dev);
drivers/media/i2c/ov2735.c
1039
dev_err_probe(ov2735->dev, ret,
drivers/media/i2c/ov2735.c
1044
ret = devm_pm_runtime_set_active_enabled(ov2735->dev);
drivers/media/i2c/ov2735.c
1046
dev_err_probe(ov2735->dev, ret,
drivers/media/i2c/ov2735.c
1051
ret = v4l2_async_register_subdev_sensor(&ov2735->sd);
drivers/media/i2c/ov2735.c
1053
dev_err_probe(ov2735->dev, ret,
drivers/media/i2c/ov2735.c
1061
v4l2_subdev_cleanup(&ov2735->sd);
drivers/media/i2c/ov2735.c
1064
media_entity_cleanup(&ov2735->sd.entity);
drivers/media/i2c/ov2735.c
1067
v4l2_ctrl_handler_free(ov2735->sd.ctrl_handler);
drivers/media/i2c/ov2735.c
1070
ov2735_power_off(ov2735->dev);
drivers/media/i2c/ov2735.c
1078
struct ov2735 *ov2735 = to_ov2735(sd);
drivers/media/i2c/ov2735.c
1081
v4l2_subdev_cleanup(&ov2735->sd);
drivers/media/i2c/ov2735.c
1083
v4l2_ctrl_handler_free(ov2735->sd.ctrl_handler);
drivers/media/i2c/ov2735.c
342
static int ov2735_page_access(struct ov2735 *ov2735, u32 reg, int *err)
drivers/media/i2c/ov2735.c
350
guard(mutex)(&ov2735->page_lock);
drivers/media/i2c/ov2735.c
353
if (ov2735->current_page == page)
drivers/media/i2c/ov2735.c
356
ret = cci_write(ov2735->cci, OV2735_REG_PAGE_SELECT, page, err);
drivers/media/i2c/ov2735.c
358
ov2735->current_page = page;
drivers/media/i2c/ov2735.c
363
static int ov2735_read(struct ov2735 *ov2735, u32 reg, u64 *val, int *err)
drivers/media/i2c/ov2735.c
368
ret = ov2735_page_access(ov2735, reg, err);
drivers/media/i2c/ov2735.c
372
return cci_read(ov2735->cci, addr, val, err);
drivers/media/i2c/ov2735.c
375
static int ov2735_write(struct ov2735 *ov2735, u32 reg, u64 val, int *err)
drivers/media/i2c/ov2735.c
380
ret = ov2735_page_access(ov2735, reg, err);
drivers/media/i2c/ov2735.c
384
return cci_write(ov2735->cci, addr, val, err);
drivers/media/i2c/ov2735.c
387
static int ov2735_multi_reg_write(struct ov2735 *ov2735,
drivers/media/i2c/ov2735.c
395
ret = ov2735_write(ov2735, regs[i].reg, regs[i].val, err);
drivers/media/i2c/ov2735.c
403
static inline struct ov2735 *to_ov2735(struct v4l2_subdev *_sd)
drivers/media/i2c/ov2735.c
405
return container_of_const(_sd, struct ov2735, sd);
drivers/media/i2c/ov2735.c
408
static int ov2735_enable_test_pattern(struct ov2735 *ov2735, u32 pattern)
drivers/media/i2c/ov2735.c
413
ret = ov2735_read(ov2735, OV2735_REG_TEST_PATTERN, &val, NULL);
drivers/media/i2c/ov2735.c
426
return ov2735_write(ov2735, OV2735_REG_TEST_PATTERN, val, NULL);
drivers/media/i2c/ov2735.c
431
struct ov2735 *ov2735 =
drivers/media/i2c/ov2735.c
432
container_of_const(ctrl->handler, struct ov2735, handler);
drivers/media/i2c/ov2735.c
438
state = v4l2_subdev_get_locked_active_state(&ov2735->sd);
drivers/media/i2c/ov2735.c
445
ret = __v4l2_ctrl_modify_range(ov2735->exposure,
drivers/media/i2c/ov2735.c
446
ov2735->exposure->minimum, max,
drivers/media/i2c/ov2735.c
447
ov2735->exposure->step,
drivers/media/i2c/ov2735.c
448
ov2735->exposure->default_value);
drivers/media/i2c/ov2735.c
453
if (pm_runtime_get_if_in_use(ov2735->dev) == 0)
drivers/media/i2c/ov2735.c
458
ov2735_write(ov2735, OV2735_REG_LONG_EXPOSURE, ctrl->val, &ret);
drivers/media/i2c/ov2735.c
461
ov2735_write(ov2735, OV2735_REG_ANALOG_GAIN, ctrl->val, &ret);
drivers/media/i2c/ov2735.c
464
ov2735_write(ov2735, OV2735_REG_HBLANK, ctrl->val, &ret);
drivers/media/i2c/ov2735.c
468
ov2735_write(ov2735, OV2735_REG_FRAME_EXP_SEPERATE_EN,
drivers/media/i2c/ov2735.c
470
ov2735_write(ov2735, OV2735_REG_FRAME_LENGTH, vts, &ret);
drivers/media/i2c/ov2735.c
473
ret = ov2735_enable_test_pattern(ov2735, ctrl->val);
drivers/media/i2c/ov2735.c
479
ov2735_write(ov2735, OV2735_REG_FRAME_SYNC, 0x01, &ret);
drivers/media/i2c/ov2735.c
481
pm_runtime_put(ov2735->dev);
drivers/media/i2c/ov2735.c
490
static int ov2735_init_controls(struct ov2735 *ov2735)
drivers/media/i2c/ov2735.c
498
ctrl_hdlr = &ov2735->handler;
drivers/media/i2c/ov2735.c
501
ov2735->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &ov2735_ctrl_ops,
drivers/media/i2c/ov2735.c
506
ov2735->link_freq = v4l2_ctrl_new_int_menu(ctrl_hdlr, &ov2735_ctrl_ops,
drivers/media/i2c/ov2735.c
508
ov2735->link_freq_index,
drivers/media/i2c/ov2735.c
510
if (ov2735->link_freq)
drivers/media/i2c/ov2735.c
511
ov2735->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
drivers/media/i2c/ov2735.c
514
ov2735->hblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov2735_ctrl_ops,
drivers/media/i2c/ov2735.c
519
ov2735->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov2735_ctrl_ops,
drivers/media/i2c/ov2735.c
525
ov2735->exposure =
drivers/media/i2c/ov2735.c
531
ov2735->gain =
drivers/media/i2c/ov2735.c
537
ov2735->test_pattern =
drivers/media/i2c/ov2735.c
545
dev_err(ov2735->dev, "control init failed (%d)\n", ret);
drivers/media/i2c/ov2735.c
549
ret = v4l2_fwnode_device_parse(ov2735->dev, &props);
drivers/media/i2c/ov2735.c
558
ov2735->sd.ctrl_handler = ctrl_hdlr;
drivers/media/i2c/ov2735.c
568
static int ov2735_set_pll_ctrl(struct ov2735 *ov2735)
drivers/media/i2c/ov2735.c
575
pll_parameters = &pll_configs[ov2735->link_freq_index];
drivers/media/i2c/ov2735.c
583
ov2735_write(ov2735, OV2735_REG_PLL_CTRL, pll_ctrl, &ret);
drivers/media/i2c/ov2735.c
584
ov2735_write(ov2735, OV2735_REG_PLL_OUTDIV, pll_outdiv, &ret);
drivers/media/i2c/ov2735.c
589
static int ov2735_set_framefmt(struct ov2735 *ov2735,
drivers/media/i2c/ov2735.c
599
ov2735_write(ov2735, OV2735_REG_V_START, crop->top, &ret);
drivers/media/i2c/ov2735.c
600
ov2735_write(ov2735, OV2735_REG_V_SIZE, format->height, &ret);
drivers/media/i2c/ov2735.c
601
ov2735_write(ov2735, OV2735_REG_MIPI_LINE_NUMBER, format->height, &ret);
drivers/media/i2c/ov2735.c
602
ov2735_write(ov2735, OV2735_REG_H_START, crop->left, &ret);
drivers/media/i2c/ov2735.c
604
ov2735_write(ov2735, OV2735_REG_H_SIZE, (format->width / 2), &ret);
drivers/media/i2c/ov2735.c
605
ov2735_write(ov2735, OV2735_REG_MIPI_COLOMN_NUMBER, format->width, &ret);
drivers/media/i2c/ov2735.c
614
struct ov2735 *ov2735 = to_ov2735(sd);
drivers/media/i2c/ov2735.c
617
ret = pm_runtime_resume_and_get(ov2735->dev);
drivers/media/i2c/ov2735.c
622
ret = ov2735_set_pll_ctrl(ov2735);
drivers/media/i2c/ov2735.c
624
dev_err(ov2735->dev, "failed to set frame format: %d\n", ret);
drivers/media/i2c/ov2735.c
628
ret = ov2735_multi_reg_write(ov2735, ov2735_common_regs,
drivers/media/i2c/ov2735.c
631
dev_err(ov2735->dev, "failed to write common registers\n");
drivers/media/i2c/ov2735.c
636
ret = ov2735_set_framefmt(ov2735, state);
drivers/media/i2c/ov2735.c
638
dev_err(ov2735->dev, "failed to set frame format: %d\n", ret);
drivers/media/i2c/ov2735.c
643
ret = __v4l2_ctrl_handler_setup(ov2735->sd.ctrl_handler);
drivers/media/i2c/ov2735.c
647
ret = ov2735_write(ov2735, OV2735_REG_STREAM_CTRL,
drivers/media/i2c/ov2735.c
655
pm_runtime_put(ov2735->dev);
drivers/media/i2c/ov2735.c
663
struct ov2735 *ov2735 = to_ov2735(sd);
drivers/media/i2c/ov2735.c
666
ret = ov2735_write(ov2735, OV2735_REG_STREAM_CTRL,
drivers/media/i2c/ov2735.c
669
dev_err(ov2735->dev, "%s failed to set stream\n", __func__);
drivers/media/i2c/ov2735.c
671
pm_runtime_put(ov2735->dev);
drivers/media/i2c/ov2735.c
726
static int ov2735_set_framing_limits(struct ov2735 *ov2735,
drivers/media/i2c/ov2735.c
733
ret = __v4l2_ctrl_modify_range(ov2735->hblank, hblank, hblank, 1,
drivers/media/i2c/ov2735.c
739
return __v4l2_ctrl_modify_range(ov2735->vblank, vblank_def,
drivers/media/i2c/ov2735.c
751
struct ov2735 *ov2735 = to_ov2735(sd);
drivers/media/i2c/ov2735.c
769
ret = ov2735_set_framing_limits(ov2735, mode);
drivers/media/i2c/ov2735.c
826
struct ov2735 *ov2735 = to_ov2735(sd);
drivers/media/i2c/ov2735.c
830
ov2735->supplies);
drivers/media/i2c/ov2735.c
832
dev_err(ov2735->dev, "failed to enable regulators\n");
drivers/media/i2c/ov2735.c
836
gpiod_set_value_cansleep(ov2735->enable_gpio, 1);
drivers/media/i2c/ov2735.c
840
ret = clk_prepare_enable(ov2735->xclk);
drivers/media/i2c/ov2735.c
842
dev_err(ov2735->dev, "failed to enable clock\n");
drivers/media/i2c/ov2735.c
846
gpiod_set_value_cansleep(ov2735->reset_gpio, 0);
drivers/media/i2c/ov2735.c
853
regulator_bulk_disable(ARRAY_SIZE(ov2735_supply_name), ov2735->supplies);
drivers/media/i2c/ov2735.c
860
struct ov2735 *ov2735 = to_ov2735(sd);
drivers/media/i2c/ov2735.c
862
gpiod_set_value_cansleep(ov2735->enable_gpio, 0);
drivers/media/i2c/ov2735.c
863
clk_disable_unprepare(ov2735->xclk);
drivers/media/i2c/ov2735.c
864
gpiod_set_value_cansleep(ov2735->reset_gpio, 1);
drivers/media/i2c/ov2735.c
865
regulator_bulk_disable(ARRAY_SIZE(ov2735_supply_name), ov2735->supplies);
drivers/media/i2c/ov2735.c
870
static int ov2735_get_regulators(struct ov2735 *ov2735)
drivers/media/i2c/ov2735.c
875
ov2735->supplies[i].supply = ov2735_supply_name[i];
drivers/media/i2c/ov2735.c
877
return devm_regulator_bulk_get(ov2735->dev,
drivers/media/i2c/ov2735.c
879
ov2735->supplies);
drivers/media/i2c/ov2735.c
882
static int ov2735_identify_module(struct ov2735 *ov2735)
drivers/media/i2c/ov2735.c
887
ret = ov2735_read(ov2735, OV2735_REG_CHIPID, &chip_id, NULL);
drivers/media/i2c/ov2735.c
889
return dev_err_probe(ov2735->dev, ret,
drivers/media/i2c/ov2735.c
894
return dev_err_probe(ov2735->dev, -EIO,
drivers/media/i2c/ov2735.c
901
static int ov2735_parse_endpoint(struct ov2735 *ov2735)
drivers/media/i2c/ov2735.c
910
ep = fwnode_graph_get_next_endpoint(dev_fwnode(ov2735->dev), NULL);
drivers/media/i2c/ov2735.c
912
return dev_err_probe(ov2735->dev, -ENXIO,
drivers/media/i2c/ov2735.c
921
ret = dev_err_probe(ov2735->dev, -EINVAL,
drivers/media/i2c/ov2735.c
926
ret = v4l2_link_freq_to_bitmap(ov2735->dev, bus_cfg.link_frequencies,
drivers/media/i2c/ov2735.c
932
ret = dev_err_probe(ov2735->dev, -EINVAL,
drivers/media/i2c/ov2735.c
937
ov2735->link_freq_index = __ffs(link_freq_bitmap);
drivers/media/i2c/ov2735.c
947
struct ov2735 *ov2735;
drivers/media/i2c/ov2735.c
951
ov2735 = devm_kzalloc(&client->dev, sizeof(*ov2735), GFP_KERNEL);
drivers/media/i2c/ov2735.c
952
if (!ov2735)
drivers/media/i2c/ov2735.c
955
ov2735->dev = &client->dev;
drivers/media/i2c/ov2735.c
957
v4l2_i2c_subdev_init(&ov2735->sd, client, &ov2735_subdev_ops);
drivers/media/i2c/ov2735.c
958
ov2735->sd.internal_ops = &ov2735_internal_ops;
drivers/media/i2c/ov2735.c
960
ov2735->cci = devm_cci_regmap_init_i2c(client, 8);
drivers/media/i2c/ov2735.c
961
if (IS_ERR(ov2735->cci))
drivers/media/i2c/ov2735.c
962
return dev_err_probe(ov2735->dev, PTR_ERR(ov2735->cci),
drivers/media/i2c/ov2735.c
966
ov2735->current_page = 0;
drivers/media/i2c/ov2735.c
968
ret = devm_mutex_init(ov2735->dev, &ov2735->page_lock);
drivers/media/i2c/ov2735.c
970
return dev_err_probe(ov2735->dev, ret,
drivers/media/i2c/ov2735.c
974
ov2735->xclk = devm_v4l2_sensor_clk_get(ov2735->dev, NULL);
drivers/media/i2c/ov2735.c
975
if (IS_ERR(ov2735->xclk))
drivers/media/i2c/ov2735.c
976
return dev_err_probe(ov2735->dev, PTR_ERR(ov2735->xclk),
drivers/media/i2c/ov2735.c
979
xclk_freq = clk_get_rate(ov2735->xclk);
drivers/media/i2c/ov2735.c
981
return dev_err_probe(ov2735->dev, -EINVAL,
drivers/media/i2c/ov2735.c
985
ret = ov2735_get_regulators(ov2735);
drivers/media/i2c/ov2735.c
987
return dev_err_probe(ov2735->dev, ret,
drivers/media/i2c/ov2735.c
990
ret = ov2735_parse_endpoint(ov2735);
drivers/media/i2c/ov2735.c
992
return dev_err_probe(ov2735->dev, ret,
drivers/media/i2c/ov2735.c
995
ov2735->reset_gpio = devm_gpiod_get_optional(ov2735->dev,
drivers/media/i2c/ov2735.c
997
if (IS_ERR(ov2735->reset_gpio))
drivers/media/i2c/ov2735.c
998
return dev_err_probe(ov2735->dev, PTR_ERR(ov2735->reset_gpio),