Symbol: og0ve1b
drivers/media/i2c/og0ve1b.c
264
static int og0ve1b_enable_test_pattern(struct og0ve1b *og0ve1b, u32 pattern)
drivers/media/i2c/og0ve1b.c
266
u64 val = og0ve1b->pre_isp;
drivers/media/i2c/og0ve1b.c
273
return cci_write(og0ve1b->regmap, OG0VE1B_REG_PRE_ISP, val, NULL);
drivers/media/i2c/og0ve1b.c
278
struct og0ve1b *og0ve1b = container_of(ctrl->handler, struct og0ve1b,
drivers/media/i2c/og0ve1b.c
290
ret = __v4l2_ctrl_modify_range(og0ve1b->exposure,
drivers/media/i2c/og0ve1b.c
291
og0ve1b->exposure->minimum,
drivers/media/i2c/og0ve1b.c
293
og0ve1b->exposure->step,
drivers/media/i2c/og0ve1b.c
294
og0ve1b->exposure->default_value);
drivers/media/i2c/og0ve1b.c
300
if (!pm_runtime_get_if_active(og0ve1b->dev))
drivers/media/i2c/og0ve1b.c
305
ret = cci_write(og0ve1b->regmap, OG0VE1B_REG_ANALOGUE_GAIN,
drivers/media/i2c/og0ve1b.c
309
ret = cci_write(og0ve1b->regmap, OG0VE1B_REG_EXPOSURE,
drivers/media/i2c/og0ve1b.c
313
ret = cci_write(og0ve1b->regmap, OG0VE1B_REG_VTS,
drivers/media/i2c/og0ve1b.c
317
ret = og0ve1b_enable_test_pattern(og0ve1b, ctrl->val);
drivers/media/i2c/og0ve1b.c
324
pm_runtime_put(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
333
static int og0ve1b_init_controls(struct og0ve1b *og0ve1b)
drivers/media/i2c/og0ve1b.c
335
struct v4l2_ctrl_handler *ctrl_hdlr = &og0ve1b->ctrl_handler;
drivers/media/i2c/og0ve1b.c
362
og0ve1b->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &og0ve1b_ctrl_ops,
drivers/media/i2c/og0ve1b.c
373
og0ve1b->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &og0ve1b_ctrl_ops,
drivers/media/i2c/og0ve1b.c
388
ret = v4l2_fwnode_device_parse(og0ve1b->dev, &props);
drivers/media/i2c/og0ve1b.c
397
og0ve1b->sd.ctrl_handler = ctrl_hdlr;
drivers/media/i2c/og0ve1b.c
425
struct og0ve1b *og0ve1b = to_og0ve1b(sd);
drivers/media/i2c/og0ve1b.c
428
ret = pm_runtime_resume_and_get(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
433
ret = cci_write(og0ve1b->regmap, OG0VE1B_REG_SOFTWARE_RST,
drivers/media/i2c/og0ve1b.c
436
dev_err(og0ve1b->dev, "failed to software reset: %d\n", ret);
drivers/media/i2c/og0ve1b.c
440
ret = cci_multi_reg_write(og0ve1b->regmap, reg_list->regs,
drivers/media/i2c/og0ve1b.c
443
dev_err(og0ve1b->dev, "failed to set mode: %d\n", ret);
drivers/media/i2c/og0ve1b.c
447
ret = __v4l2_ctrl_handler_setup(og0ve1b->sd.ctrl_handler);
drivers/media/i2c/og0ve1b.c
451
ret = cci_write(og0ve1b->regmap, OG0VE1B_REG_MODE_SELECT,
drivers/media/i2c/og0ve1b.c
454
dev_err(og0ve1b->dev, "failed to start streaming: %d\n", ret);
drivers/media/i2c/og0ve1b.c
461
pm_runtime_put_autosuspend(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
470
struct og0ve1b *og0ve1b = to_og0ve1b(sd);
drivers/media/i2c/og0ve1b.c
473
ret = cci_write(og0ve1b->regmap, OG0VE1B_REG_MODE_SELECT,
drivers/media/i2c/og0ve1b.c
476
dev_err(og0ve1b->dev, "failed to stop streaming: %d\n", ret);
drivers/media/i2c/og0ve1b.c
478
pm_runtime_put_autosuspend(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
52
#define to_og0ve1b(_sd) container_of(_sd, struct og0ve1b, sd)
drivers/media/i2c/og0ve1b.c
578
static int og0ve1b_identify_sensor(struct og0ve1b *og0ve1b)
drivers/media/i2c/og0ve1b.c
583
ret = cci_read(og0ve1b->regmap, OG0VE1B_REG_CHIP_ID, &val, NULL);
drivers/media/i2c/og0ve1b.c
585
dev_err(og0ve1b->dev, "failed to read chip id: %d\n", ret);
drivers/media/i2c/og0ve1b.c
590
dev_err(og0ve1b->dev, "chip id mismatch: %x!=%llx\n",
drivers/media/i2c/og0ve1b.c
595
ret = cci_read(og0ve1b->regmap, OG0VE1B_REG_PRE_ISP,
drivers/media/i2c/og0ve1b.c
596
&og0ve1b->pre_isp, NULL);
drivers/media/i2c/og0ve1b.c
598
dev_err(og0ve1b->dev, "failed to read pre_isp: %d\n", ret);
drivers/media/i2c/og0ve1b.c
603
static int og0ve1b_check_hwcfg(struct og0ve1b *og0ve1b)
drivers/media/i2c/og0ve1b.c
605
struct fwnode_handle *fwnode = dev_fwnode(og0ve1b->dev), *ep;
drivers/media/i2c/og0ve1b.c
624
ret = v4l2_link_freq_to_bitmap(og0ve1b->dev,
drivers/media/i2c/og0ve1b.c
639
struct og0ve1b *og0ve1b = to_og0ve1b(sd);
drivers/media/i2c/og0ve1b.c
642
ret = regulator_bulk_enable(OG0VE1B_NUM_SUPPLIES, og0ve1b->supplies);
drivers/media/i2c/og0ve1b.c
646
gpiod_set_value_cansleep(og0ve1b->reset_gpio, 0);
drivers/media/i2c/og0ve1b.c
649
ret = clk_prepare_enable(og0ve1b->xvclk);
drivers/media/i2c/og0ve1b.c
656
gpiod_set_value_cansleep(og0ve1b->reset_gpio, 1);
drivers/media/i2c/og0ve1b.c
658
regulator_bulk_disable(OG0VE1B_NUM_SUPPLIES, og0ve1b->supplies);
drivers/media/i2c/og0ve1b.c
666
struct og0ve1b *og0ve1b = to_og0ve1b(sd);
drivers/media/i2c/og0ve1b.c
668
clk_disable_unprepare(og0ve1b->xvclk);
drivers/media/i2c/og0ve1b.c
670
gpiod_set_value_cansleep(og0ve1b->reset_gpio, 1);
drivers/media/i2c/og0ve1b.c
672
regulator_bulk_disable(OG0VE1B_NUM_SUPPLIES, og0ve1b->supplies);
drivers/media/i2c/og0ve1b.c
679
struct og0ve1b *og0ve1b;
drivers/media/i2c/og0ve1b.c
684
og0ve1b = devm_kzalloc(&client->dev, sizeof(*og0ve1b), GFP_KERNEL);
drivers/media/i2c/og0ve1b.c
685
if (!og0ve1b)
drivers/media/i2c/og0ve1b.c
688
og0ve1b->dev = &client->dev;
drivers/media/i2c/og0ve1b.c
690
v4l2_i2c_subdev_init(&og0ve1b->sd, client, &og0ve1b_subdev_ops);
drivers/media/i2c/og0ve1b.c
692
og0ve1b->regmap = devm_cci_regmap_init_i2c(client, 16);
drivers/media/i2c/og0ve1b.c
693
if (IS_ERR(og0ve1b->regmap))
drivers/media/i2c/og0ve1b.c
694
return dev_err_probe(og0ve1b->dev, PTR_ERR(og0ve1b->regmap),
drivers/media/i2c/og0ve1b.c
697
og0ve1b->xvclk = devm_v4l2_sensor_clk_get(og0ve1b->dev, NULL);
drivers/media/i2c/og0ve1b.c
698
if (IS_ERR(og0ve1b->xvclk))
drivers/media/i2c/og0ve1b.c
699
return dev_err_probe(og0ve1b->dev, PTR_ERR(og0ve1b->xvclk),
drivers/media/i2c/og0ve1b.c
702
freq = clk_get_rate(og0ve1b->xvclk);
drivers/media/i2c/og0ve1b.c
704
return dev_err_probe(og0ve1b->dev, -EINVAL,
drivers/media/i2c/og0ve1b.c
708
ret = og0ve1b_check_hwcfg(og0ve1b);
drivers/media/i2c/og0ve1b.c
710
return dev_err_probe(og0ve1b->dev, ret,
drivers/media/i2c/og0ve1b.c
713
og0ve1b->reset_gpio = devm_gpiod_get_optional(og0ve1b->dev, "reset",
drivers/media/i2c/og0ve1b.c
715
if (IS_ERR(og0ve1b->reset_gpio))
drivers/media/i2c/og0ve1b.c
716
return dev_err_probe(og0ve1b->dev, PTR_ERR(og0ve1b->reset_gpio),
drivers/media/i2c/og0ve1b.c
720
og0ve1b->supplies[i].supply = og0ve1b_supply_names[i];
drivers/media/i2c/og0ve1b.c
722
ret = devm_regulator_bulk_get(og0ve1b->dev, OG0VE1B_NUM_SUPPLIES,
drivers/media/i2c/og0ve1b.c
723
og0ve1b->supplies);
drivers/media/i2c/og0ve1b.c
725
return dev_err_probe(og0ve1b->dev, ret,
drivers/media/i2c/og0ve1b.c
729
ret = og0ve1b_power_on(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
733
ret = og0ve1b_identify_sensor(og0ve1b);
drivers/media/i2c/og0ve1b.c
735
dev_err_probe(og0ve1b->dev, ret, "failed to find sensor\n");
drivers/media/i2c/og0ve1b.c
739
ret = og0ve1b_init_controls(og0ve1b);
drivers/media/i2c/og0ve1b.c
741
dev_err_probe(og0ve1b->dev, ret, "failed to init controls\n");
drivers/media/i2c/og0ve1b.c
745
og0ve1b->sd.state_lock = og0ve1b->ctrl_handler.lock;
drivers/media/i2c/og0ve1b.c
746
og0ve1b->sd.internal_ops = &og0ve1b_internal_ops;
drivers/media/i2c/og0ve1b.c
747
og0ve1b->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
drivers/media/i2c/og0ve1b.c
748
og0ve1b->sd.entity.ops = &og0ve1b_subdev_entity_ops;
drivers/media/i2c/og0ve1b.c
749
og0ve1b->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
drivers/media/i2c/og0ve1b.c
750
og0ve1b->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/og0ve1b.c
752
ret = media_entity_pads_init(&og0ve1b->sd.entity, 1, &og0ve1b->pad);
drivers/media/i2c/og0ve1b.c
754
dev_err_probe(og0ve1b->dev, ret,
drivers/media/i2c/og0ve1b.c
759
ret = v4l2_subdev_init_finalize(&og0ve1b->sd);
drivers/media/i2c/og0ve1b.c
761
dev_err_probe(og0ve1b->dev, ret,
drivers/media/i2c/og0ve1b.c
766
pm_runtime_set_active(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
767
pm_runtime_enable(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
769
ret = v4l2_async_register_subdev_sensor(&og0ve1b->sd);
drivers/media/i2c/og0ve1b.c
771
dev_err_probe(og0ve1b->dev, ret,
drivers/media/i2c/og0ve1b.c
777
pm_runtime_idle(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
778
pm_runtime_set_autosuspend_delay(og0ve1b->dev, 1000);
drivers/media/i2c/og0ve1b.c
779
pm_runtime_use_autosuspend(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
784
v4l2_subdev_cleanup(&og0ve1b->sd);
drivers/media/i2c/og0ve1b.c
785
pm_runtime_disable(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
786
pm_runtime_set_suspended(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
789
media_entity_cleanup(&og0ve1b->sd.entity);
drivers/media/i2c/og0ve1b.c
792
v4l2_ctrl_handler_free(og0ve1b->sd.ctrl_handler);
drivers/media/i2c/og0ve1b.c
795
og0ve1b_power_off(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
803
struct og0ve1b *og0ve1b = to_og0ve1b(sd);
drivers/media/i2c/og0ve1b.c
809
pm_runtime_disable(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
811
if (!pm_runtime_status_suspended(og0ve1b->dev)) {
drivers/media/i2c/og0ve1b.c
812
og0ve1b_power_off(og0ve1b->dev);
drivers/media/i2c/og0ve1b.c
813
pm_runtime_set_suspended(og0ve1b->dev);