Symbol: ov6211
drivers/media/i2c/ov6211.c
242
static int ov6211_set_test_pattern(struct ov6211 *ov6211, u32 pattern)
drivers/media/i2c/ov6211.c
244
u64 val = ov6211->pre_isp;
drivers/media/i2c/ov6211.c
251
return cci_write(ov6211->regmap, OV6211_REG_PRE_ISP, val, NULL);
drivers/media/i2c/ov6211.c
256
struct ov6211 *ov6211 = container_of(ctrl->handler, struct ov6211,
drivers/media/i2c/ov6211.c
268
ret = __v4l2_ctrl_modify_range(ov6211->exposure,
drivers/media/i2c/ov6211.c
269
ov6211->exposure->minimum,
drivers/media/i2c/ov6211.c
271
ov6211->exposure->step,
drivers/media/i2c/ov6211.c
272
ov6211->exposure->default_value);
drivers/media/i2c/ov6211.c
278
if (!pm_runtime_get_if_active(ov6211->dev))
drivers/media/i2c/ov6211.c
283
ret = cci_write(ov6211->regmap, OV6211_REG_ANALOGUE_GAIN,
drivers/media/i2c/ov6211.c
287
ret = cci_write(ov6211->regmap, OV6211_REG_EXPOSURE,
drivers/media/i2c/ov6211.c
291
ret = cci_write(ov6211->regmap, OV6211_REG_VTS,
drivers/media/i2c/ov6211.c
295
ret = ov6211_set_test_pattern(ov6211, ctrl->val);
drivers/media/i2c/ov6211.c
302
pm_runtime_put(ov6211->dev);
drivers/media/i2c/ov6211.c
311
static int ov6211_init_controls(struct ov6211 *ov6211)
drivers/media/i2c/ov6211.c
313
struct v4l2_ctrl_handler *ctrl_hdlr = &ov6211->ctrl_handler;
drivers/media/i2c/ov6211.c
340
ov6211->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov6211_ctrl_ops,
drivers/media/i2c/ov6211.c
351
ov6211->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &ov6211_ctrl_ops,
drivers/media/i2c/ov6211.c
366
ret = v4l2_fwnode_device_parse(ov6211->dev, &props);
drivers/media/i2c/ov6211.c
375
ov6211->sd.ctrl_handler = ctrl_hdlr;
drivers/media/i2c/ov6211.c
403
struct ov6211 *ov6211 = to_ov6211(sd);
drivers/media/i2c/ov6211.c
406
ret = pm_runtime_resume_and_get(ov6211->dev);
drivers/media/i2c/ov6211.c
411
ret = cci_write(ov6211->regmap, OV6211_REG_SOFTWARE_RST,
drivers/media/i2c/ov6211.c
414
dev_err(ov6211->dev, "failed to software reset: %d\n", ret);
drivers/media/i2c/ov6211.c
418
ret = cci_multi_reg_write(ov6211->regmap, reg_list->regs,
drivers/media/i2c/ov6211.c
421
dev_err(ov6211->dev, "failed to set mode: %d\n", ret);
drivers/media/i2c/ov6211.c
425
ret = __v4l2_ctrl_handler_setup(ov6211->sd.ctrl_handler);
drivers/media/i2c/ov6211.c
429
ret = cci_write(ov6211->regmap, OV6211_REG_MODE_SELECT,
drivers/media/i2c/ov6211.c
432
dev_err(ov6211->dev, "failed to start streaming: %d\n", ret);
drivers/media/i2c/ov6211.c
439
pm_runtime_put_autosuspend(ov6211->dev);
drivers/media/i2c/ov6211.c
448
struct ov6211 *ov6211 = to_ov6211(sd);
drivers/media/i2c/ov6211.c
451
ret = cci_write(ov6211->regmap, OV6211_REG_MODE_SELECT,
drivers/media/i2c/ov6211.c
454
dev_err(ov6211->dev, "failed to stop streaming: %d\n", ret);
drivers/media/i2c/ov6211.c
456
pm_runtime_put_autosuspend(ov6211->dev);
drivers/media/i2c/ov6211.c
52
#define to_ov6211(_sd) container_of(_sd, struct ov6211, sd)
drivers/media/i2c/ov6211.c
556
static int ov6211_identify_sensor(struct ov6211 *ov6211)
drivers/media/i2c/ov6211.c
561
ret = cci_read(ov6211->regmap, OV6211_REG_CHIP_ID, &val, NULL);
drivers/media/i2c/ov6211.c
563
dev_err(ov6211->dev, "failed to read chip id: %d\n", ret);
drivers/media/i2c/ov6211.c
568
dev_err(ov6211->dev, "chip id mismatch: %x!=%llx\n",
drivers/media/i2c/ov6211.c
573
ret = cci_read(ov6211->regmap, OV6211_REG_PRE_ISP,
drivers/media/i2c/ov6211.c
574
&ov6211->pre_isp, NULL);
drivers/media/i2c/ov6211.c
576
dev_err(ov6211->dev, "failed to read pre_isp: %d\n", ret);
drivers/media/i2c/ov6211.c
581
static int ov6211_check_hwcfg(struct ov6211 *ov6211)
drivers/media/i2c/ov6211.c
583
struct fwnode_handle *fwnode = dev_fwnode(ov6211->dev), *ep;
drivers/media/i2c/ov6211.c
602
ret = v4l2_link_freq_to_bitmap(ov6211->dev, bus_cfg.link_frequencies,
drivers/media/i2c/ov6211.c
616
struct ov6211 *ov6211 = to_ov6211(sd);
drivers/media/i2c/ov6211.c
619
ret = regulator_bulk_enable(OV6211_NUM_SUPPLIES, ov6211->supplies);
drivers/media/i2c/ov6211.c
623
gpiod_set_value_cansleep(ov6211->reset_gpio, 0);
drivers/media/i2c/ov6211.c
626
ret = clk_prepare_enable(ov6211->xvclk);
drivers/media/i2c/ov6211.c
633
gpiod_set_value_cansleep(ov6211->reset_gpio, 1);
drivers/media/i2c/ov6211.c
635
regulator_bulk_disable(OV6211_NUM_SUPPLIES, ov6211->supplies);
drivers/media/i2c/ov6211.c
643
struct ov6211 *ov6211 = to_ov6211(sd);
drivers/media/i2c/ov6211.c
645
clk_disable_unprepare(ov6211->xvclk);
drivers/media/i2c/ov6211.c
647
gpiod_set_value_cansleep(ov6211->reset_gpio, 1);
drivers/media/i2c/ov6211.c
649
regulator_bulk_disable(OV6211_NUM_SUPPLIES, ov6211->supplies);
drivers/media/i2c/ov6211.c
656
struct ov6211 *ov6211;
drivers/media/i2c/ov6211.c
661
ov6211 = devm_kzalloc(&client->dev, sizeof(*ov6211), GFP_KERNEL);
drivers/media/i2c/ov6211.c
662
if (!ov6211)
drivers/media/i2c/ov6211.c
665
ov6211->dev = &client->dev;
drivers/media/i2c/ov6211.c
667
v4l2_i2c_subdev_init(&ov6211->sd, client, &ov6211_subdev_ops);
drivers/media/i2c/ov6211.c
669
ov6211->regmap = devm_cci_regmap_init_i2c(client, 16);
drivers/media/i2c/ov6211.c
670
if (IS_ERR(ov6211->regmap))
drivers/media/i2c/ov6211.c
671
return dev_err_probe(ov6211->dev, PTR_ERR(ov6211->regmap),
drivers/media/i2c/ov6211.c
674
ov6211->xvclk = devm_v4l2_sensor_clk_get(ov6211->dev, NULL);
drivers/media/i2c/ov6211.c
675
if (IS_ERR(ov6211->xvclk))
drivers/media/i2c/ov6211.c
676
return dev_err_probe(ov6211->dev, PTR_ERR(ov6211->xvclk),
drivers/media/i2c/ov6211.c
679
freq = clk_get_rate(ov6211->xvclk);
drivers/media/i2c/ov6211.c
681
return dev_err_probe(ov6211->dev, -EINVAL,
drivers/media/i2c/ov6211.c
685
ret = ov6211_check_hwcfg(ov6211);
drivers/media/i2c/ov6211.c
687
return dev_err_probe(ov6211->dev, ret,
drivers/media/i2c/ov6211.c
690
ov6211->reset_gpio = devm_gpiod_get_optional(ov6211->dev, "reset",
drivers/media/i2c/ov6211.c
692
if (IS_ERR(ov6211->reset_gpio))
drivers/media/i2c/ov6211.c
693
return dev_err_probe(ov6211->dev, PTR_ERR(ov6211->reset_gpio),
drivers/media/i2c/ov6211.c
697
ov6211->supplies[i].supply = ov6211_supply_names[i];
drivers/media/i2c/ov6211.c
699
ret = devm_regulator_bulk_get(ov6211->dev, OV6211_NUM_SUPPLIES,
drivers/media/i2c/ov6211.c
700
ov6211->supplies);
drivers/media/i2c/ov6211.c
702
return dev_err_probe(ov6211->dev, ret,
drivers/media/i2c/ov6211.c
706
ret = ov6211_power_on(ov6211->dev);
drivers/media/i2c/ov6211.c
710
ret = ov6211_identify_sensor(ov6211);
drivers/media/i2c/ov6211.c
712
dev_err_probe(ov6211->dev, ret, "failed to find sensor\n");
drivers/media/i2c/ov6211.c
716
ret = ov6211_init_controls(ov6211);
drivers/media/i2c/ov6211.c
718
dev_err_probe(ov6211->dev, ret, "failed to init controls\n");
drivers/media/i2c/ov6211.c
722
ov6211->sd.state_lock = ov6211->ctrl_handler.lock;
drivers/media/i2c/ov6211.c
723
ov6211->sd.internal_ops = &ov6211_internal_ops;
drivers/media/i2c/ov6211.c
724
ov6211->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
drivers/media/i2c/ov6211.c
725
ov6211->sd.entity.ops = &ov6211_subdev_entity_ops;
drivers/media/i2c/ov6211.c
726
ov6211->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
drivers/media/i2c/ov6211.c
727
ov6211->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/ov6211.c
729
ret = media_entity_pads_init(&ov6211->sd.entity, 1, &ov6211->pad);
drivers/media/i2c/ov6211.c
731
dev_err_probe(ov6211->dev, ret,
drivers/media/i2c/ov6211.c
736
ret = v4l2_subdev_init_finalize(&ov6211->sd);
drivers/media/i2c/ov6211.c
738
dev_err_probe(ov6211->dev, ret,
drivers/media/i2c/ov6211.c
743
pm_runtime_set_active(ov6211->dev);
drivers/media/i2c/ov6211.c
744
pm_runtime_enable(ov6211->dev);
drivers/media/i2c/ov6211.c
746
ret = v4l2_async_register_subdev_sensor(&ov6211->sd);
drivers/media/i2c/ov6211.c
748
dev_err_probe(ov6211->dev, ret,
drivers/media/i2c/ov6211.c
754
pm_runtime_idle(ov6211->dev);
drivers/media/i2c/ov6211.c
755
pm_runtime_set_autosuspend_delay(ov6211->dev, 1000);
drivers/media/i2c/ov6211.c
756
pm_runtime_use_autosuspend(ov6211->dev);
drivers/media/i2c/ov6211.c
761
v4l2_subdev_cleanup(&ov6211->sd);
drivers/media/i2c/ov6211.c
762
pm_runtime_disable(ov6211->dev);
drivers/media/i2c/ov6211.c
763
pm_runtime_set_suspended(ov6211->dev);
drivers/media/i2c/ov6211.c
766
media_entity_cleanup(&ov6211->sd.entity);
drivers/media/i2c/ov6211.c
769
v4l2_ctrl_handler_free(ov6211->sd.ctrl_handler);
drivers/media/i2c/ov6211.c
772
ov6211_power_off(ov6211->dev);
drivers/media/i2c/ov6211.c
780
struct ov6211 *ov6211 = to_ov6211(sd);
drivers/media/i2c/ov6211.c
786
pm_runtime_disable(ov6211->dev);
drivers/media/i2c/ov6211.c
788
if (!pm_runtime_status_suspended(ov6211->dev)) {
drivers/media/i2c/ov6211.c
789
ov6211_power_off(ov6211->dev);
drivers/media/i2c/ov6211.c
790
pm_runtime_set_suspended(ov6211->dev);