Symbol: os05b10
drivers/media/i2c/os05b10.c
1004
os05b10->supplies[i].supply = os05b10_supply_name[i];
drivers/media/i2c/os05b10.c
1006
ret = devm_regulator_bulk_get(os05b10->dev,
drivers/media/i2c/os05b10.c
1008
os05b10->supplies);
drivers/media/i2c/os05b10.c
1010
return dev_err_probe(os05b10->dev, ret,
drivers/media/i2c/os05b10.c
1013
ret = os05b10_parse_endpoint(os05b10);
drivers/media/i2c/os05b10.c
1015
return dev_err_probe(os05b10->dev, ret,
drivers/media/i2c/os05b10.c
1018
os05b10->reset_gpio = devm_gpiod_get_optional(&client->dev, "reset",
drivers/media/i2c/os05b10.c
1020
if (IS_ERR(os05b10->reset_gpio))
drivers/media/i2c/os05b10.c
1021
return dev_err_probe(os05b10->dev, PTR_ERR(os05b10->reset_gpio),
drivers/media/i2c/os05b10.c
1024
ret = os05b10_power_on(os05b10->dev);
drivers/media/i2c/os05b10.c
1028
ret = os05b10_identify_module(os05b10);
drivers/media/i2c/os05b10.c
1033
ret = os05b10_init_controls(os05b10);
drivers/media/i2c/os05b10.c
1038
os05b10->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
drivers/media/i2c/os05b10.c
1039
os05b10->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
drivers/media/i2c/os05b10.c
1040
os05b10->sd.internal_ops = &os05b10_internal_ops;
drivers/media/i2c/os05b10.c
1041
os05b10->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/os05b10.c
1043
ret = media_entity_pads_init(&os05b10->sd.entity, 1, &os05b10->pad);
drivers/media/i2c/os05b10.c
1045
dev_err_probe(os05b10->dev, ret,
drivers/media/i2c/os05b10.c
1050
os05b10->sd.state_lock = os05b10->handler.lock;
drivers/media/i2c/os05b10.c
1051
ret = v4l2_subdev_init_finalize(&os05b10->sd);
drivers/media/i2c/os05b10.c
1053
dev_err_probe(os05b10->dev, ret, "subdev init error\n");
drivers/media/i2c/os05b10.c
1057
pm_runtime_set_active(os05b10->dev);
drivers/media/i2c/os05b10.c
1058
pm_runtime_enable(os05b10->dev);
drivers/media/i2c/os05b10.c
1060
ret = v4l2_async_register_subdev_sensor(&os05b10->sd);
drivers/media/i2c/os05b10.c
1062
dev_err_probe(os05b10->dev, ret,
drivers/media/i2c/os05b10.c
1067
pm_runtime_idle(os05b10->dev);
drivers/media/i2c/os05b10.c
1072
v4l2_subdev_cleanup(&os05b10->sd);
drivers/media/i2c/os05b10.c
1073
pm_runtime_disable(os05b10->dev);
drivers/media/i2c/os05b10.c
1074
pm_runtime_set_suspended(os05b10->dev);
drivers/media/i2c/os05b10.c
1077
media_entity_cleanup(&os05b10->sd.entity);
drivers/media/i2c/os05b10.c
1080
v4l2_ctrl_handler_free(os05b10->sd.ctrl_handler);
drivers/media/i2c/os05b10.c
1083
os05b10_power_off(os05b10->dev);
drivers/media/i2c/os05b10.c
1091
struct os05b10 *os05b10 = to_os05b10(sd);
drivers/media/i2c/os05b10.c
1094
v4l2_subdev_cleanup(&os05b10->sd);
drivers/media/i2c/os05b10.c
1096
v4l2_ctrl_handler_free(os05b10->sd.ctrl_handler);
drivers/media/i2c/os05b10.c
506
static inline struct os05b10 *to_os05b10(struct v4l2_subdev *sd)
drivers/media/i2c/os05b10.c
508
return container_of_const(sd, struct os05b10, sd);
drivers/media/i2c/os05b10.c
513
struct os05b10 *os05b10 = container_of_const(ctrl->handler,
drivers/media/i2c/os05b10.c
514
struct os05b10, handler);
drivers/media/i2c/os05b10.c
519
state = v4l2_subdev_get_locked_active_state(&os05b10->sd);
drivers/media/i2c/os05b10.c
526
ret = __v4l2_ctrl_modify_range(os05b10->exposure,
drivers/media/i2c/os05b10.c
527
os05b10->exposure->minimum, max,
drivers/media/i2c/os05b10.c
528
os05b10->exposure->step,
drivers/media/i2c/os05b10.c
529
os05b10->exposure->default_value);
drivers/media/i2c/os05b10.c
534
if (pm_runtime_get_if_in_use(os05b10->dev) == 0)
drivers/media/i2c/os05b10.c
540
ret = cci_write(os05b10->cci, OS05B10_REG_VTS, vmax, NULL);
drivers/media/i2c/os05b10.c
543
ret = cci_write(os05b10->cci, OS05B10_REG_ANALOG_GAIN,
drivers/media/i2c/os05b10.c
547
ret = cci_write(os05b10->cci, OS05B10_REG_EXPOSURE,
drivers/media/i2c/os05b10.c
555
pm_runtime_put(os05b10->dev);
drivers/media/i2c/os05b10.c
572
static int os05b10_set_framing_limits(struct os05b10 *os05b10,
drivers/media/i2c/os05b10.c
579
ret = __v4l2_ctrl_modify_range(os05b10->hblank, hblank, hblank, 1,
drivers/media/i2c/os05b10.c
586
ret = __v4l2_ctrl_modify_range(os05b10->vblank, 0, vblank_max, 1,
drivers/media/i2c/os05b10.c
592
return __v4l2_ctrl_modify_range(os05b10->exposure,
drivers/media/i2c/os05b10.c
602
struct os05b10 *os05b10 = to_os05b10(sd);
drivers/media/i2c/os05b10.c
616
ret = os05b10_set_framing_limits(os05b10, mode);
drivers/media/i2c/os05b10.c
663
struct os05b10 *os05b10 = to_os05b10(sd);
drivers/media/i2c/os05b10.c
666
ret = pm_runtime_resume_and_get(os05b10->dev);
drivers/media/i2c/os05b10.c
671
ret = cci_multi_reg_write(os05b10->cci, os05b10_common_regs,
drivers/media/i2c/os05b10.c
674
dev_err(os05b10->dev, "failed to write common registers\n");
drivers/media/i2c/os05b10.c
679
ret = __v4l2_ctrl_handler_setup(os05b10->sd.ctrl_handler);
drivers/media/i2c/os05b10.c
684
ret = cci_write(os05b10->cci, OS05B10_REG_CTRL_MODE,
drivers/media/i2c/os05b10.c
692
pm_runtime_put(os05b10->dev);
drivers/media/i2c/os05b10.c
701
struct os05b10 *os05b10 = to_os05b10(sd);
drivers/media/i2c/os05b10.c
704
ret = cci_write(os05b10->cci, OS05B10_REG_CTRL_MODE,
drivers/media/i2c/os05b10.c
707
dev_err(os05b10->dev, "failed to set stream off\n");
drivers/media/i2c/os05b10.c
709
pm_runtime_put(os05b10->dev);
drivers/media/i2c/os05b10.c
764
static int os05b10_identify_module(struct os05b10 *os05b10)
drivers/media/i2c/os05b10.c
769
ret = cci_read(os05b10->cci, OS05B10_REG_CHIP_ID, &val, NULL);
drivers/media/i2c/os05b10.c
771
return dev_err_probe(os05b10->dev, ret,
drivers/media/i2c/os05b10.c
776
return dev_err_probe(os05b10->dev, -ENODEV,
drivers/media/i2c/os05b10.c
786
struct os05b10 *os05b10 = to_os05b10(sd);
drivers/media/i2c/os05b10.c
792
os05b10->supplies);
drivers/media/i2c/os05b10.c
794
dev_err(os05b10->dev, "failed to enable regulators\n");
drivers/media/i2c/os05b10.c
799
ret = clk_prepare_enable(os05b10->xclk);
drivers/media/i2c/os05b10.c
801
dev_err(os05b10->dev, "failed to enable clock\n");
drivers/media/i2c/os05b10.c
805
gpiod_set_value_cansleep(os05b10->reset_gpio, 0);
drivers/media/i2c/os05b10.c
818
os05b10->supplies);
drivers/media/i2c/os05b10.c
826
struct os05b10 *os05b10 = to_os05b10(sd);
drivers/media/i2c/os05b10.c
828
gpiod_set_value_cansleep(os05b10->reset_gpio, 1);
drivers/media/i2c/os05b10.c
831
os05b10->supplies);
drivers/media/i2c/os05b10.c
832
clk_disable_unprepare(os05b10->xclk);
drivers/media/i2c/os05b10.c
837
static int os05b10_parse_endpoint(struct os05b10 *os05b10)
drivers/media/i2c/os05b10.c
846
ep = fwnode_graph_get_endpoint_by_id(dev_fwnode(os05b10->dev), 0, 0, 0);
drivers/media/i2c/os05b10.c
848
dev_err(os05b10->dev, "Failed to get next endpoint\n");
drivers/media/i2c/os05b10.c
858
ret = dev_err_probe(os05b10->dev, -EINVAL,
drivers/media/i2c/os05b10.c
863
os05b10->data_lanes = bus_cfg.bus.mipi_csi2.num_data_lanes;
drivers/media/i2c/os05b10.c
865
ret = v4l2_link_freq_to_bitmap(os05b10->dev, bus_cfg.link_frequencies,
drivers/media/i2c/os05b10.c
871
dev_err(os05b10->dev, "only 600MHz frequency is available\n");
drivers/media/i2c/os05b10.c
875
os05b10->link_freq_index = __ffs(link_freq_bitmap);
drivers/media/i2c/os05b10.c
883
static u64 os05b10_pixel_rate(struct os05b10 *os05b10,
drivers/media/i2c/os05b10.c
886
u64 link_freq = link_frequencies[os05b10->link_freq_index];
drivers/media/i2c/os05b10.c
887
u64 pixel_rate = div_u64(link_freq * 2 * os05b10->data_lanes, mode->bpp);
drivers/media/i2c/os05b10.c
889
dev_dbg(os05b10->dev,
drivers/media/i2c/os05b10.c
891
link_freq, mode->bpp, os05b10->data_lanes, pixel_rate);
drivers/media/i2c/os05b10.c
896
static int os05b10_init_controls(struct os05b10 *os05b10)
drivers/media/i2c/os05b10.c
904
ctrl_hdlr = &os05b10->handler;
drivers/media/i2c/os05b10.c
907
pixel_rate = os05b10_pixel_rate(os05b10, mode);
drivers/media/i2c/os05b10.c
911
os05b10->link_freq = v4l2_ctrl_new_int_menu(ctrl_hdlr, &os05b10_ctrl_ops,
drivers/media/i2c/os05b10.c
914
os05b10->link_freq_index,
drivers/media/i2c/os05b10.c
917
if (os05b10->link_freq)
drivers/media/i2c/os05b10.c
918
os05b10->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
drivers/media/i2c/os05b10.c
921
os05b10->hblank = v4l2_ctrl_new_std(ctrl_hdlr, NULL, V4L2_CID_HBLANK,
drivers/media/i2c/os05b10.c
924
if (os05b10->hblank)
drivers/media/i2c/os05b10.c
925
os05b10->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
drivers/media/i2c/os05b10.c
928
os05b10->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &os05b10_ctrl_ops,
drivers/media/i2c/os05b10.c
934
os05b10->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &os05b10_ctrl_ops,
drivers/media/i2c/os05b10.c
940
os05b10->gain = v4l2_ctrl_new_std(ctrl_hdlr, &os05b10_ctrl_ops,
drivers/media/i2c/os05b10.c
949
dev_err(os05b10->dev, "control init failed (%d)\n", ret);
drivers/media/i2c/os05b10.c
953
ret = v4l2_fwnode_device_parse(os05b10->dev, &props);
drivers/media/i2c/os05b10.c
962
os05b10->sd.ctrl_handler = ctrl_hdlr;
drivers/media/i2c/os05b10.c
974
struct os05b10 *os05b10;
drivers/media/i2c/os05b10.c
978
os05b10 = devm_kzalloc(&client->dev, sizeof(*os05b10), GFP_KERNEL);
drivers/media/i2c/os05b10.c
979
if (!os05b10)
drivers/media/i2c/os05b10.c
982
os05b10->client = client;
drivers/media/i2c/os05b10.c
983
os05b10->dev = &client->dev;
drivers/media/i2c/os05b10.c
985
v4l2_i2c_subdev_init(&os05b10->sd, client, &os05b10_subdev_ops);
drivers/media/i2c/os05b10.c
987
os05b10->cci = devm_cci_regmap_init_i2c(client, 16);
drivers/media/i2c/os05b10.c
988
if (IS_ERR(os05b10->cci))
drivers/media/i2c/os05b10.c
989
return dev_err_probe(os05b10->dev, PTR_ERR(os05b10->cci),
drivers/media/i2c/os05b10.c
992
os05b10->xclk = devm_v4l2_sensor_clk_get(os05b10->dev, NULL);
drivers/media/i2c/os05b10.c
993
if (IS_ERR(os05b10->xclk))
drivers/media/i2c/os05b10.c
994
return dev_err_probe(os05b10->dev, PTR_ERR(os05b10->xclk),
drivers/media/i2c/os05b10.c
997
xclk_freq = clk_get_rate(os05b10->xclk);
drivers/media/i2c/os05b10.c
999
return dev_err_probe(os05b10->dev, -EINVAL,