Symbol: ov2732
drivers/media/i2c/ov2732.c
151
#define to_ov2732(_sd) container_of(_sd, struct ov2732, sd)
drivers/media/i2c/ov2732.c
184
struct ov2732 *ov2732 = to_ov2732(sd);
drivers/media/i2c/ov2732.c
188
ov2732->supplies);
drivers/media/i2c/ov2732.c
194
ret = clk_prepare_enable(ov2732->xvclk);
drivers/media/i2c/ov2732.c
203
gpiod_set_value_cansleep(ov2732->reset_gpio, 0);
drivers/media/i2c/ov2732.c
204
gpiod_set_value_cansleep(ov2732->powerdown_gpio, 0);
drivers/media/i2c/ov2732.c
213
ov2732->supplies);
drivers/media/i2c/ov2732.c
221
struct ov2732 *ov2732 = to_ov2732(sd);
drivers/media/i2c/ov2732.c
223
clk_disable_unprepare(ov2732->xvclk);
drivers/media/i2c/ov2732.c
228
gpiod_set_value_cansleep(ov2732->powerdown_gpio, 1);
drivers/media/i2c/ov2732.c
229
gpiod_set_value_cansleep(ov2732->reset_gpio, 1);
drivers/media/i2c/ov2732.c
232
ov2732->supplies);
drivers/media/i2c/ov2732.c
237
static int ov2732_identify_chip(struct ov2732 *ov2732)
drivers/media/i2c/ov2732.c
239
struct i2c_client *client = v4l2_get_subdevdata(&ov2732->sd);
drivers/media/i2c/ov2732.c
243
ret = cci_read(ov2732->regmap, OV2732_REG_CHIP_ID, &val, NULL);
drivers/media/i2c/ov2732.c
287
struct ov2732 *ov2732 = to_ov2732(sd);
drivers/media/i2c/ov2732.c
312
ret = __v4l2_ctrl_modify_range(ov2732->vblank, vblank_def,
drivers/media/i2c/ov2732.c
346
struct ov2732 *ov2732 = to_ov2732(sd);
drivers/media/i2c/ov2732.c
347
struct i2c_client *client = v4l2_get_subdevdata(&ov2732->sd);
drivers/media/i2c/ov2732.c
355
ret = cci_write(ov2732->regmap, OV2732_REG_MODE_SELECT,
drivers/media/i2c/ov2732.c
361
ret = cci_multi_reg_write(ov2732->regmap, ov2732_common_regs,
drivers/media/i2c/ov2732.c
369
ret = __v4l2_ctrl_handler_setup(ov2732->sd.ctrl_handler);
drivers/media/i2c/ov2732.c
374
ret = cci_write(ov2732->regmap, OV2732_REG_MODE_SELECT,
drivers/media/i2c/ov2732.c
391
struct ov2732 *ov2732 = to_ov2732(sd);
drivers/media/i2c/ov2732.c
392
struct i2c_client *client = v4l2_get_subdevdata(&ov2732->sd);
drivers/media/i2c/ov2732.c
396
ret = cci_write(ov2732->regmap, OV2732_REG_MODE_SELECT,
drivers/media/i2c/ov2732.c
454
struct ov2732 *ov2732 =
drivers/media/i2c/ov2732.c
455
container_of(ctrl->handler, struct ov2732, ctrl_handler);
drivers/media/i2c/ov2732.c
456
struct i2c_client *client = v4l2_get_subdevdata(&ov2732->sd);
drivers/media/i2c/ov2732.c
461
state = v4l2_subdev_get_locked_active_state(&ov2732->sd);
drivers/media/i2c/ov2732.c
470
ret = __v4l2_ctrl_modify_range(ov2732->exposure,
drivers/media/i2c/ov2732.c
473
ov2732->exposure->step,
drivers/media/i2c/ov2732.c
484
cci_write(ov2732->regmap, OV2732_REG_ANALOGUE_GAIN,
drivers/media/i2c/ov2732.c
488
cci_write(ov2732->regmap, OV2732_REG_DIGITAL_GAIN,
drivers/media/i2c/ov2732.c
493
cci_write(ov2732->regmap, OV2732_REG_EXPOSURE,
drivers/media/i2c/ov2732.c
497
cci_write(ov2732->regmap, OV2732_REG_VTS,
drivers/media/i2c/ov2732.c
501
cci_write(ov2732->regmap, OV2732_REG_TEST_PATTERN,
drivers/media/i2c/ov2732.c
521
static int ov2732_init_controls(struct ov2732 *ov2732)
drivers/media/i2c/ov2732.c
530
handler = &ov2732->ctrl_handler;
drivers/media/i2c/ov2732.c
543
ov2732->hblank = v4l2_ctrl_new_std(handler, &ov2732_ctrl_ops,
drivers/media/i2c/ov2732.c
548
if (ov2732->hblank)
drivers/media/i2c/ov2732.c
549
ov2732->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
drivers/media/i2c/ov2732.c
553
ov2732->vblank = v4l2_ctrl_new_std(handler, &ov2732_ctrl_ops,
drivers/media/i2c/ov2732.c
559
ov2732->exposure = v4l2_ctrl_new_std(handler, &ov2732_ctrl_ops,
drivers/media/i2c/ov2732.c
579
dev_err_probe(ov2732->dev, ret, "Control init failed\n");
drivers/media/i2c/ov2732.c
583
ret = v4l2_fwnode_device_parse(ov2732->dev, &props);
drivers/media/i2c/ov2732.c
591
ov2732->sd.ctrl_handler = handler;
drivers/media/i2c/ov2732.c
601
static int ov2632_probe_dt(struct ov2732 *ov2732)
drivers/media/i2c/ov2732.c
604
struct fwnode_handle *fwnode = dev_fwnode(ov2732->dev);
drivers/media/i2c/ov2732.c
614
dev_err_probe(ov2732->dev, -EINVAL, "could not parse endpoint\n");
drivers/media/i2c/ov2732.c
619
dev_err(ov2732->dev, "only a 2-lane CSI2 config is supported\n");
drivers/media/i2c/ov2732.c
629
static int ov2732_get_regulators(struct ov2732 *ov2732)
drivers/media/i2c/ov2732.c
632
ov2732->supplies[i].supply = ov2732_supply_names[i];
drivers/media/i2c/ov2732.c
634
return devm_regulator_bulk_get(ov2732->dev,
drivers/media/i2c/ov2732.c
636
ov2732->supplies);
drivers/media/i2c/ov2732.c
641
struct ov2732 *ov2732;
drivers/media/i2c/ov2732.c
644
ov2732 = devm_kzalloc(&client->dev, sizeof(*ov2732), GFP_KERNEL);
drivers/media/i2c/ov2732.c
645
if (!ov2732)
drivers/media/i2c/ov2732.c
648
ov2732->dev = &client->dev;
drivers/media/i2c/ov2732.c
650
ret = ov2632_probe_dt(ov2732);
drivers/media/i2c/ov2732.c
654
ov2732->xvclk = devm_v4l2_sensor_clk_get(ov2732->dev, NULL);
drivers/media/i2c/ov2732.c
655
if (IS_ERR(ov2732->xvclk))
drivers/media/i2c/ov2732.c
656
return dev_err_probe(ov2732->dev, PTR_ERR(ov2732->xvclk),
drivers/media/i2c/ov2732.c
659
ov2732->xvclk_freq = clk_get_rate(ov2732->xvclk);
drivers/media/i2c/ov2732.c
660
if (ov2732->xvclk_freq != OV2732_XVCLK_FREQ)
drivers/media/i2c/ov2732.c
661
return dev_err_probe(ov2732->dev, -EINVAL,
drivers/media/i2c/ov2732.c
663
ov2732->xvclk_freq);
drivers/media/i2c/ov2732.c
665
ov2732->powerdown_gpio = devm_gpiod_get_optional(ov2732->dev,
drivers/media/i2c/ov2732.c
669
ov2732->reset_gpio = devm_gpiod_get_optional(ov2732->dev, "reset",
drivers/media/i2c/ov2732.c
672
ov2732->regmap = devm_cci_regmap_init_i2c(client, 16);
drivers/media/i2c/ov2732.c
673
if (IS_ERR(ov2732->regmap))
drivers/media/i2c/ov2732.c
674
return dev_err_probe(ov2732->dev, PTR_ERR(ov2732->regmap),
drivers/media/i2c/ov2732.c
677
ret = ov2732_get_regulators(ov2732);
drivers/media/i2c/ov2732.c
679
return dev_err_probe(ov2732->dev, ret,
drivers/media/i2c/ov2732.c
682
v4l2_i2c_subdev_init(&ov2732->sd, client, &ov2732_subdev_ops);
drivers/media/i2c/ov2732.c
685
ret = ov2732_power_on(ov2732->dev);
drivers/media/i2c/ov2732.c
689
pm_runtime_set_active(ov2732->dev);
drivers/media/i2c/ov2732.c
690
pm_runtime_enable(ov2732->dev);
drivers/media/i2c/ov2732.c
692
ret = ov2732_identify_chip(ov2732);
drivers/media/i2c/ov2732.c
696
ret = ov2732_init_controls(ov2732);
drivers/media/i2c/ov2732.c
701
ov2732->sd.internal_ops = &ov2732_internal_ops;
drivers/media/i2c/ov2732.c
702
ov2732->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
drivers/media/i2c/ov2732.c
703
ov2732->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
drivers/media/i2c/ov2732.c
706
ov2732->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/ov2732.c
708
ret = media_entity_pads_init(&ov2732->sd.entity, 1, &ov2732->pad);
drivers/media/i2c/ov2732.c
710
dev_err_probe(ov2732->dev, ret, "failed to init entity pads\n");
drivers/media/i2c/ov2732.c
714
ov2732->sd.state_lock = ov2732->ctrl_handler.lock;
drivers/media/i2c/ov2732.c
715
ret = v4l2_subdev_init_finalize(&ov2732->sd);
drivers/media/i2c/ov2732.c
717
dev_err_probe(ov2732->dev, ret, "subdev init error\n");
drivers/media/i2c/ov2732.c
721
ret = v4l2_async_register_subdev_sensor(&ov2732->sd);
drivers/media/i2c/ov2732.c
723
dev_err_probe(ov2732->dev, ret,
drivers/media/i2c/ov2732.c
728
pm_runtime_set_autosuspend_delay(ov2732->dev, 1000);
drivers/media/i2c/ov2732.c
729
pm_runtime_use_autosuspend(ov2732->dev);
drivers/media/i2c/ov2732.c
730
pm_runtime_idle(ov2732->dev);
drivers/media/i2c/ov2732.c
735
v4l2_subdev_cleanup(&ov2732->sd);
drivers/media/i2c/ov2732.c
738
media_entity_cleanup(&ov2732->sd.entity);
drivers/media/i2c/ov2732.c
741
v4l2_ctrl_handler_free(&ov2732->ctrl_handler);
drivers/media/i2c/ov2732.c
744
pm_runtime_disable(ov2732->dev);
drivers/media/i2c/ov2732.c
745
pm_runtime_set_suspended(ov2732->dev);
drivers/media/i2c/ov2732.c
746
ov2732_power_off(ov2732->dev);
drivers/media/i2c/ov2732.c
754
struct ov2732 *ov2732 = to_ov2732(sd);
drivers/media/i2c/ov2732.c
759
v4l2_ctrl_handler_free(&ov2732->ctrl_handler);
drivers/media/i2c/ov2732.c
761
pm_runtime_disable(ov2732->dev);
drivers/media/i2c/ov2732.c
762
if (!pm_runtime_status_suspended(ov2732->dev)) {
drivers/media/i2c/ov2732.c
763
ov2732_power_off(ov2732->dev);
drivers/media/i2c/ov2732.c
764
pm_runtime_set_suspended(ov2732->dev);