Symbol: ov2685
drivers/media/i2c/ov2685.c
107
#define to_ov2685(sd) container_of(sd, struct ov2685, subdev)
drivers/media/i2c/ov2685.c
346
struct ov2685 *ov2685 = to_ov2685(sd);
drivers/media/i2c/ov2685.c
350
ov2685_fill_fmt(ov2685->cur_mode, mbus_fmt);
drivers/media/i2c/ov2685.c
359
struct ov2685 *ov2685 = to_ov2685(sd);
drivers/media/i2c/ov2685.c
362
ov2685_fill_fmt(ov2685->cur_mode, mbus_fmt);
drivers/media/i2c/ov2685.c
399
__ov2685_get_pad_crop(struct ov2685 *ov2685,
drivers/media/i2c/ov2685.c
403
const struct ov2685_mode *mode = ov2685->cur_mode;
drivers/media/i2c/ov2685.c
419
struct ov2685 *ov2685 = to_ov2685(sd);
drivers/media/i2c/ov2685.c
423
mutex_lock(&ov2685->mutex);
drivers/media/i2c/ov2685.c
424
sel->r = *__ov2685_get_pad_crop(ov2685, sd_state, sel->pad,
drivers/media/i2c/ov2685.c
426
mutex_unlock(&ov2685->mutex);
drivers/media/i2c/ov2685.c
451
static int __ov2685_power_on(struct ov2685 *ov2685)
drivers/media/i2c/ov2685.c
455
struct device *dev = &ov2685->client->dev;
drivers/media/i2c/ov2685.c
457
ret = clk_prepare_enable(ov2685->xvclk);
drivers/media/i2c/ov2685.c
463
gpiod_set_value_cansleep(ov2685->reset_gpio, 1);
drivers/media/i2c/ov2685.c
465
ret = regulator_bulk_enable(OV2685_NUM_SUPPLIES, ov2685->supplies);
drivers/media/i2c/ov2685.c
472
gpiod_set_value_cansleep(ov2685->reset_gpio, 0);
drivers/media/i2c/ov2685.c
480
ret = ov2685_write_array(ov2685->client, ov2685->cur_mode->reg_list);
drivers/media/i2c/ov2685.c
489
regulator_bulk_disable(OV2685_NUM_SUPPLIES, ov2685->supplies);
drivers/media/i2c/ov2685.c
491
clk_disable_unprepare(ov2685->xvclk);
drivers/media/i2c/ov2685.c
496
static void __ov2685_power_off(struct ov2685 *ov2685)
drivers/media/i2c/ov2685.c
502
clk_disable_unprepare(ov2685->xvclk);
drivers/media/i2c/ov2685.c
503
gpiod_set_value_cansleep(ov2685->reset_gpio, 1);
drivers/media/i2c/ov2685.c
504
regulator_bulk_disable(OV2685_NUM_SUPPLIES, ov2685->supplies);
drivers/media/i2c/ov2685.c
509
struct ov2685 *ov2685 = to_ov2685(sd);
drivers/media/i2c/ov2685.c
510
struct i2c_client *client = ov2685->client;
drivers/media/i2c/ov2685.c
513
mutex_lock(&ov2685->mutex);
drivers/media/i2c/ov2685.c
516
ret = pm_runtime_resume_and_get(&ov2685->client->dev);
drivers/media/i2c/ov2685.c
520
ret = __v4l2_ctrl_handler_setup(&ov2685->ctrl_handler);
drivers/media/i2c/ov2685.c
534
pm_runtime_put(&ov2685->client->dev);
drivers/media/i2c/ov2685.c
538
mutex_unlock(&ov2685->mutex);
drivers/media/i2c/ov2685.c
545
struct ov2685 *ov2685 = to_ov2685(sd);
drivers/media/i2c/ov2685.c
548
mutex_lock(&ov2685->mutex);
drivers/media/i2c/ov2685.c
554
mutex_unlock(&ov2685->mutex);
drivers/media/i2c/ov2685.c
562
struct ov2685 *ov2685 = to_ov2685(sd);
drivers/media/i2c/ov2685.c
564
return __ov2685_power_on(ov2685);
drivers/media/i2c/ov2685.c
570
struct ov2685 *ov2685 = to_ov2685(sd);
drivers/media/i2c/ov2685.c
572
__ov2685_power_off(ov2685);
drivers/media/i2c/ov2685.c
584
struct ov2685 *ov2685 = container_of(ctrl->handler,
drivers/media/i2c/ov2685.c
585
struct ov2685, ctrl_handler);
drivers/media/i2c/ov2685.c
586
struct i2c_client *client = ov2685->client;
drivers/media/i2c/ov2685.c
594
max_expo = ov2685->cur_mode->height + ctrl->val - 4;
drivers/media/i2c/ov2685.c
595
__v4l2_ctrl_modify_range(ov2685->exposure,
drivers/media/i2c/ov2685.c
596
ov2685->exposure->minimum, max_expo,
drivers/media/i2c/ov2685.c
597
ov2685->exposure->step,
drivers/media/i2c/ov2685.c
598
ov2685->exposure->default_value);
drivers/media/i2c/ov2685.c
607
ret = ov2685_write_reg(ov2685->client, OV2685_REG_EXPOSURE,
drivers/media/i2c/ov2685.c
611
ret = ov2685_write_reg(ov2685->client, OV2685_REG_GAIN,
drivers/media/i2c/ov2685.c
615
ret = ov2685_write_reg(ov2685->client, OV2685_REG_VTS,
drivers/media/i2c/ov2685.c
617
ctrl->val + ov2685->cur_mode->height);
drivers/media/i2c/ov2685.c
620
ret = ov2685_write_reg(ov2685->client, OV2685_REG_TEST_PATTERN,
drivers/media/i2c/ov2685.c
662
static int ov2685_initialize_controls(struct ov2685 *ov2685)
drivers/media/i2c/ov2685.c
672
handler = &ov2685->ctrl_handler;
drivers/media/i2c/ov2685.c
673
mode = ov2685->cur_mode;
drivers/media/i2c/ov2685.c
677
handler->lock = &ov2685->mutex;
drivers/media/i2c/ov2685.c
690
ov2685->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK,
drivers/media/i2c/ov2685.c
692
if (ov2685->hblank)
drivers/media/i2c/ov2685.c
693
ov2685->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
drivers/media/i2c/ov2685.c
695
ov2685->vblank = v4l2_ctrl_new_std(handler, &ov2685_ctrl_ops,
drivers/media/i2c/ov2685.c
701
ov2685->exposure = v4l2_ctrl_new_std(handler, &ov2685_ctrl_ops,
drivers/media/i2c/ov2685.c
706
ov2685->anal_gain = v4l2_ctrl_new_std(handler, &ov2685_ctrl_ops,
drivers/media/i2c/ov2685.c
711
ov2685->test_pattern = v4l2_ctrl_new_std_menu_items(handler,
drivers/media/i2c/ov2685.c
717
ret = v4l2_fwnode_device_parse(&ov2685->client->dev, &props);
drivers/media/i2c/ov2685.c
727
dev_err(&ov2685->client->dev,
drivers/media/i2c/ov2685.c
732
ov2685->subdev.ctrl_handler = handler;
drivers/media/i2c/ov2685.c
742
static int ov2685_check_sensor_id(struct ov2685 *ov2685,
drivers/media/i2c/ov2685.c
745
struct device *dev = &ov2685->client->dev;
drivers/media/i2c/ov2685.c
761
static int ov2685_configure_regulators(struct ov2685 *ov2685)
drivers/media/i2c/ov2685.c
766
ov2685->supplies[i].supply = ov2685_supply_names[i];
drivers/media/i2c/ov2685.c
768
return devm_regulator_bulk_get(&ov2685->client->dev,
drivers/media/i2c/ov2685.c
770
ov2685->supplies);
drivers/media/i2c/ov2685.c
776
struct ov2685 *ov2685;
drivers/media/i2c/ov2685.c
779
ov2685 = devm_kzalloc(dev, sizeof(*ov2685), GFP_KERNEL);
drivers/media/i2c/ov2685.c
780
if (!ov2685)
drivers/media/i2c/ov2685.c
783
ov2685->client = client;
drivers/media/i2c/ov2685.c
784
ov2685->cur_mode = &supported_modes[0];
drivers/media/i2c/ov2685.c
786
ov2685->xvclk = devm_v4l2_sensor_clk_get_legacy(dev, "xvclk", true,
drivers/media/i2c/ov2685.c
788
if (IS_ERR(ov2685->xvclk))
drivers/media/i2c/ov2685.c
789
return dev_err_probe(dev, PTR_ERR(ov2685->xvclk),
drivers/media/i2c/ov2685.c
792
if (clk_get_rate(ov2685->xvclk) != OV2685_XVCLK_FREQ)
drivers/media/i2c/ov2685.c
795
ov2685->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
drivers/media/i2c/ov2685.c
796
if (IS_ERR(ov2685->reset_gpio)) {
drivers/media/i2c/ov2685.c
801
ret = ov2685_configure_regulators(ov2685);
drivers/media/i2c/ov2685.c
807
mutex_init(&ov2685->mutex);
drivers/media/i2c/ov2685.c
808
v4l2_i2c_subdev_init(&ov2685->subdev, client, &ov2685_subdev_ops);
drivers/media/i2c/ov2685.c
809
ret = ov2685_initialize_controls(ov2685);
drivers/media/i2c/ov2685.c
813
ret = __ov2685_power_on(ov2685);
drivers/media/i2c/ov2685.c
817
ret = ov2685_check_sensor_id(ov2685, client);
drivers/media/i2c/ov2685.c
821
ov2685->subdev.internal_ops = &ov2685_internal_ops;
drivers/media/i2c/ov2685.c
822
ov2685->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
drivers/media/i2c/ov2685.c
823
ov2685->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/ov2685.c
824
ov2685->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR;
drivers/media/i2c/ov2685.c
825
ret = media_entity_pads_init(&ov2685->subdev.entity, 1, &ov2685->pad);
drivers/media/i2c/ov2685.c
829
ret = v4l2_async_register_subdev(&ov2685->subdev);
drivers/media/i2c/ov2685.c
842
media_entity_cleanup(&ov2685->subdev.entity);
drivers/media/i2c/ov2685.c
844
__ov2685_power_off(ov2685);
drivers/media/i2c/ov2685.c
846
v4l2_ctrl_handler_free(&ov2685->ctrl_handler);
drivers/media/i2c/ov2685.c
848
mutex_destroy(&ov2685->mutex);
drivers/media/i2c/ov2685.c
856
struct ov2685 *ov2685 = to_ov2685(sd);
drivers/media/i2c/ov2685.c
860
v4l2_ctrl_handler_free(&ov2685->ctrl_handler);
drivers/media/i2c/ov2685.c
861
mutex_destroy(&ov2685->mutex);
drivers/media/i2c/ov2685.c
865
__ov2685_power_off(ov2685);