Symbol: ov4689
drivers/media/i2c/ov4689.c
1005
v4l2_ctrl_handler_free(&ov4689->ctrl_handler);
drivers/media/i2c/ov4689.c
1013
struct ov4689 *ov4689 = to_ov4689(sd);
drivers/media/i2c/ov4689.c
1018
v4l2_ctrl_handler_free(&ov4689->ctrl_handler);
drivers/media/i2c/ov4689.c
142
#define to_ov4689(sd) container_of(sd, struct ov4689, subdev)
drivers/media/i2c/ov4689.c
337
struct ov4689 *ov4689 = to_ov4689(sd);
drivers/media/i2c/ov4689.c
340
ov4689_fill_fmt(ov4689->cur_mode, mbus_fmt);
drivers/media/i2c/ov4689.c
374
static int ov4689_enable_test_pattern(struct ov4689 *ov4689, u32 pattern)
drivers/media/i2c/ov4689.c
383
return cci_write(ov4689->regmap, OV4689_REG_TEST_PATTERN,
drivers/media/i2c/ov4689.c
415
static int ov4689_setup_timings(struct ov4689 *ov4689)
drivers/media/i2c/ov4689.c
417
const struct ov4689_mode *mode = ov4689->cur_mode;
drivers/media/i2c/ov4689.c
418
struct regmap *rm = ov4689->regmap;
drivers/media/i2c/ov4689.c
437
static int ov4689_setup_blc_anchors(struct ov4689 *ov4689)
drivers/media/i2c/ov4689.c
439
struct regmap *rm = ov4689->regmap;
drivers/media/i2c/ov4689.c
452
struct ov4689 *ov4689 = to_ov4689(sd);
drivers/media/i2c/ov4689.c
454
struct device *dev = ov4689->dev;
drivers/media/i2c/ov4689.c
457
sd_state = v4l2_subdev_lock_and_get_active_state(&ov4689->subdev);
drivers/media/i2c/ov4689.c
464
ret = cci_multi_reg_write(ov4689->regmap,
drivers/media/i2c/ov4689.c
465
ov4689->cur_mode->reg_list,
drivers/media/i2c/ov4689.c
466
ov4689->cur_mode->num_regs,
drivers/media/i2c/ov4689.c
473
ret = ov4689_setup_timings(ov4689);
drivers/media/i2c/ov4689.c
479
ret = ov4689_setup_blc_anchors(ov4689);
drivers/media/i2c/ov4689.c
485
ret = __v4l2_ctrl_handler_setup(&ov4689->ctrl_handler);
drivers/media/i2c/ov4689.c
491
ret = cci_write(ov4689->regmap, OV4689_REG_CTRL_MODE,
drivers/media/i2c/ov4689.c
498
cci_write(ov4689->regmap, OV4689_REG_CTRL_MODE,
drivers/media/i2c/ov4689.c
510
static inline u32 ov4689_cal_delay(struct ov4689 *ov4689, u32 cycles)
drivers/media/i2c/ov4689.c
513
DIV_ROUND_UP(ov4689->clock_rate, 1000));
drivers/media/i2c/ov4689.c
519
struct ov4689 *ov4689 = to_ov4689(sd);
drivers/media/i2c/ov4689.c
523
ret = clk_prepare_enable(ov4689->xvclk);
drivers/media/i2c/ov4689.c
529
gpiod_set_value_cansleep(ov4689->reset_gpio, 1);
drivers/media/i2c/ov4689.c
532
ov4689->supplies);
drivers/media/i2c/ov4689.c
538
gpiod_set_value_cansleep(ov4689->reset_gpio, 0);
drivers/media/i2c/ov4689.c
540
gpiod_set_value_cansleep(ov4689->pwdn_gpio, 0);
drivers/media/i2c/ov4689.c
543
delay_us = ov4689_cal_delay(ov4689, 8192);
drivers/media/i2c/ov4689.c
549
clk_disable_unprepare(ov4689->xvclk);
drivers/media/i2c/ov4689.c
557
struct ov4689 *ov4689 = to_ov4689(sd);
drivers/media/i2c/ov4689.c
559
gpiod_set_value_cansleep(ov4689->pwdn_gpio, 1);
drivers/media/i2c/ov4689.c
560
clk_disable_unprepare(ov4689->xvclk);
drivers/media/i2c/ov4689.c
561
gpiod_set_value_cansleep(ov4689->reset_gpio, 1);
drivers/media/i2c/ov4689.c
563
ov4689->supplies);
drivers/media/i2c/ov4689.c
607
static int ov4689_map_gain(struct ov4689 *ov4689, int logical_gain, int *result)
drivers/media/i2c/ov4689.c
619
dev_warn_ratelimited(ov4689->dev,
drivers/media/i2c/ov4689.c
634
struct ov4689 *ov4689 =
drivers/media/i2c/ov4689.c
635
container_of(ctrl->handler, struct ov4689, ctrl_handler);
drivers/media/i2c/ov4689.c
636
struct regmap *regmap = ov4689->regmap;
drivers/media/i2c/ov4689.c
637
struct device *dev = ov4689->dev;
drivers/media/i2c/ov4689.c
646
max_expo = ov4689->cur_mode->height + ctrl->val - 4;
drivers/media/i2c/ov4689.c
647
__v4l2_ctrl_modify_range(ov4689->exposure,
drivers/media/i2c/ov4689.c
648
ov4689->exposure->minimum, max_expo,
drivers/media/i2c/ov4689.c
649
ov4689->exposure->step,
drivers/media/i2c/ov4689.c
650
ov4689->exposure->default_value);
drivers/media/i2c/ov4689.c
663
ret = ov4689_map_gain(ov4689, ctrl->val, &sensor_gain);
drivers/media/i2c/ov4689.c
668
ctrl->val + ov4689->cur_mode->height, &ret);
drivers/media/i2c/ov4689.c
671
ret = ov4689_enable_test_pattern(ov4689, ctrl->val);
drivers/media/i2c/ov4689.c
675
(ctrl->val + ov4689->cur_mode->width) /
drivers/media/i2c/ov4689.c
713
static int ov4689_initialize_controls(struct ov4689 *ov4689)
drivers/media/i2c/ov4689.c
715
struct i2c_client *client = v4l2_get_subdevdata(&ov4689->subdev);
drivers/media/i2c/ov4689.c
724
handler = &ov4689->ctrl_handler;
drivers/media/i2c/ov4689.c
725
mode = ov4689->cur_mode;
drivers/media/i2c/ov4689.c
750
ov4689->exposure =
drivers/media/i2c/ov4689.c
783
dev_err(ov4689->dev, "Failed to init controls(%d)\n", ret);
drivers/media/i2c/ov4689.c
796
ov4689->subdev.ctrl_handler = handler;
drivers/media/i2c/ov4689.c
806
static int ov4689_check_sensor_id(struct ov4689 *ov4689,
drivers/media/i2c/ov4689.c
809
struct device *dev = ov4689->dev;
drivers/media/i2c/ov4689.c
813
ret = cci_read(ov4689->regmap, OV4689_REG_CHIP_ID, &id, NULL);
drivers/media/i2c/ov4689.c
830
static int ov4689_configure_regulators(struct ov4689 *ov4689)
drivers/media/i2c/ov4689.c
835
ov4689->supplies[i].supply = ov4689_supply_names[i];
drivers/media/i2c/ov4689.c
837
return devm_regulator_bulk_get(ov4689->dev,
drivers/media/i2c/ov4689.c
839
ov4689->supplies);
drivers/media/i2c/ov4689.c
895
struct ov4689 *ov4689;
drivers/media/i2c/ov4689.c
902
ov4689 = devm_kzalloc(dev, sizeof(*ov4689), GFP_KERNEL);
drivers/media/i2c/ov4689.c
903
if (!ov4689)
drivers/media/i2c/ov4689.c
906
ov4689->dev = dev;
drivers/media/i2c/ov4689.c
908
ov4689->cur_mode = &supported_modes[OV4689_MODE_2688_1520];
drivers/media/i2c/ov4689.c
910
ov4689->xvclk = devm_v4l2_sensor_clk_get(dev, NULL);
drivers/media/i2c/ov4689.c
911
if (IS_ERR(ov4689->xvclk))
drivers/media/i2c/ov4689.c
912
return dev_err_probe(dev, PTR_ERR(ov4689->xvclk),
drivers/media/i2c/ov4689.c
915
ov4689->clock_rate = clk_get_rate(ov4689->xvclk);
drivers/media/i2c/ov4689.c
916
if (ov4689->clock_rate != OV4689_XVCLK_FREQ) {
drivers/media/i2c/ov4689.c
919
ov4689->clock_rate, OV4689_XVCLK_FREQ);
drivers/media/i2c/ov4689.c
923
ov4689->regmap = devm_cci_regmap_init_i2c(client, 16);
drivers/media/i2c/ov4689.c
924
if (IS_ERR(ov4689->regmap)) {
drivers/media/i2c/ov4689.c
925
ret = PTR_ERR(ov4689->regmap);
drivers/media/i2c/ov4689.c
930
ov4689->reset_gpio = devm_gpiod_get_optional(dev, "reset",
drivers/media/i2c/ov4689.c
932
if (IS_ERR(ov4689->reset_gpio)) {
drivers/media/i2c/ov4689.c
934
return PTR_ERR(ov4689->reset_gpio);
drivers/media/i2c/ov4689.c
937
ov4689->pwdn_gpio = devm_gpiod_get_optional(dev, "pwdn", GPIOD_OUT_LOW);
drivers/media/i2c/ov4689.c
938
if (IS_ERR(ov4689->pwdn_gpio)) {
drivers/media/i2c/ov4689.c
940
return PTR_ERR(ov4689->pwdn_gpio);
drivers/media/i2c/ov4689.c
943
ret = ov4689_configure_regulators(ov4689);
drivers/media/i2c/ov4689.c
948
sd = &ov4689->subdev;
drivers/media/i2c/ov4689.c
952
ret = ov4689_initialize_controls(ov4689);
drivers/media/i2c/ov4689.c
962
ret = ov4689_check_sensor_id(ov4689, client);
drivers/media/i2c/ov4689.c
968
ov4689->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/ov4689.c
969
ret = media_entity_pads_init(&sd->entity, 1, &ov4689->pad);
drivers/media/i2c/ov4689.c
973
sd->state_lock = ov4689->ctrl_handler.lock;