Symbol: imx219
drivers/media/i2c/imx219.c
1027
struct imx219 *imx219 = to_imx219(sd);
drivers/media/i2c/imx219.c
1031
imx219->supplies);
drivers/media/i2c/imx219.c
1038
ret = clk_prepare_enable(imx219->xclk);
drivers/media/i2c/imx219.c
1049
gpiod_set_value_cansleep(imx219->reset_gpio, 1);
drivers/media/i2c/imx219.c
1056
regulator_bulk_disable(IMX219_NUM_SUPPLIES, imx219->supplies);
drivers/media/i2c/imx219.c
1064
struct imx219 *imx219 = to_imx219(sd);
drivers/media/i2c/imx219.c
1066
gpiod_set_value_cansleep(imx219->reset_gpio, 0);
drivers/media/i2c/imx219.c
1067
regulator_bulk_disable(IMX219_NUM_SUPPLIES, imx219->supplies);
drivers/media/i2c/imx219.c
1068
clk_disable_unprepare(imx219->xclk);
drivers/media/i2c/imx219.c
1077
static int imx219_get_regulators(struct imx219 *imx219)
drivers/media/i2c/imx219.c
1079
struct i2c_client *client = v4l2_get_subdevdata(&imx219->sd);
drivers/media/i2c/imx219.c
1083
imx219->supplies[i].supply = imx219_supply_name[i];
drivers/media/i2c/imx219.c
1087
imx219->supplies);
drivers/media/i2c/imx219.c
1091
static int imx219_identify_module(struct imx219 *imx219)
drivers/media/i2c/imx219.c
1093
struct i2c_client *client = v4l2_get_subdevdata(&imx219->sd);
drivers/media/i2c/imx219.c
1097
ret = cci_read(imx219->regmap, IMX219_REG_CHIP_ID, &val, NULL);
drivers/media/i2c/imx219.c
1111
static int imx219_check_hwcfg(struct device *dev, struct imx219 *imx219)
drivers/media/i2c/imx219.c
1136
imx219->lanes = ep_cfg.bus.mipi_csi2.num_data_lanes;
drivers/media/i2c/imx219.c
1139
switch (imx219->lanes) {
drivers/media/i2c/imx219.c
1183
struct imx219 *imx219;
drivers/media/i2c/imx219.c
1186
imx219 = devm_kzalloc(&client->dev, sizeof(*imx219), GFP_KERNEL);
drivers/media/i2c/imx219.c
1187
if (!imx219)
drivers/media/i2c/imx219.c
1190
v4l2_i2c_subdev_init(&imx219->sd, client, &imx219_subdev_ops);
drivers/media/i2c/imx219.c
1191
imx219->sd.internal_ops = &imx219_internal_ops;
drivers/media/i2c/imx219.c
1194
if (imx219_check_hwcfg(dev, imx219))
drivers/media/i2c/imx219.c
1197
imx219->regmap = devm_cci_regmap_init_i2c(client, 16);
drivers/media/i2c/imx219.c
1198
if (IS_ERR(imx219->regmap))
drivers/media/i2c/imx219.c
1199
return dev_err_probe(dev, PTR_ERR(imx219->regmap),
drivers/media/i2c/imx219.c
1203
imx219->xclk = devm_v4l2_sensor_clk_get(dev, NULL);
drivers/media/i2c/imx219.c
1204
if (IS_ERR(imx219->xclk))
drivers/media/i2c/imx219.c
1205
return dev_err_probe(dev, PTR_ERR(imx219->xclk),
drivers/media/i2c/imx219.c
1208
imx219->xclk_freq = clk_get_rate(imx219->xclk);
drivers/media/i2c/imx219.c
1209
if (imx219->xclk_freq != IMX219_XCLK_FREQ)
drivers/media/i2c/imx219.c
1212
imx219->xclk_freq);
drivers/media/i2c/imx219.c
1214
ret = imx219_get_regulators(imx219);
drivers/media/i2c/imx219.c
1219
imx219->reset_gpio = devm_gpiod_get_optional(dev, "reset",
drivers/media/i2c/imx219.c
1230
ret = imx219_identify_module(imx219);
drivers/media/i2c/imx219.c
1239
ret = cci_write(imx219->regmap, IMX219_REG_MODE_SELECT,
drivers/media/i2c/imx219.c
1247
ret = cci_write(imx219->regmap, IMX219_REG_MODE_SELECT,
drivers/media/i2c/imx219.c
1254
ret = imx219_init_controls(imx219);
drivers/media/i2c/imx219.c
1259
imx219->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
drivers/media/i2c/imx219.c
1260
imx219->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
drivers/media/i2c/imx219.c
1263
imx219->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/imx219.c
1265
ret = media_entity_pads_init(&imx219->sd.entity, 1, &imx219->pad);
drivers/media/i2c/imx219.c
1271
imx219->sd.state_lock = imx219->ctrl_handler.lock;
drivers/media/i2c/imx219.c
1272
ret = v4l2_subdev_init_finalize(&imx219->sd);
drivers/media/i2c/imx219.c
1281
ret = v4l2_async_register_subdev_sensor(&imx219->sd);
drivers/media/i2c/imx219.c
1295
v4l2_subdev_cleanup(&imx219->sd);
drivers/media/i2c/imx219.c
1300
media_entity_cleanup(&imx219->sd.entity);
drivers/media/i2c/imx219.c
1303
imx219_free_controls(imx219);
drivers/media/i2c/imx219.c
1314
struct imx219 *imx219 = to_imx219(sd);
drivers/media/i2c/imx219.c
1319
imx219_free_controls(imx219);
drivers/media/i2c/imx219.c
363
static inline struct imx219 *to_imx219(struct v4l2_subdev *_sd)
drivers/media/i2c/imx219.c
365
return container_of(_sd, struct imx219, sd);
drivers/media/i2c/imx219.c
369
static u32 imx219_get_format_code(struct imx219 *imx219, u32 code)
drivers/media/i2c/imx219.c
380
i = (i & ~3) | (imx219->vflip->val ? 2 : 0) |
drivers/media/i2c/imx219.c
381
(imx219->hflip->val ? 1 : 0);
drivers/media/i2c/imx219.c
438
struct imx219 *imx219 =
drivers/media/i2c/imx219.c
439
container_of(ctrl->handler, struct imx219, ctrl_handler);
drivers/media/i2c/imx219.c
440
struct i2c_client *client = v4l2_get_subdevdata(&imx219->sd);
drivers/media/i2c/imx219.c
446
state = v4l2_subdev_get_locked_active_state(&imx219->sd);
drivers/media/i2c/imx219.c
457
ret = __v4l2_ctrl_modify_range(imx219->exposure,
drivers/media/i2c/imx219.c
458
imx219->exposure->minimum,
drivers/media/i2c/imx219.c
460
imx219->exposure->step,
drivers/media/i2c/imx219.c
476
cci_write(imx219->regmap, IMX219_REG_ANALOG_GAIN,
drivers/media/i2c/imx219.c
480
cci_write(imx219->regmap, IMX219_REG_EXPOSURE,
drivers/media/i2c/imx219.c
484
cci_write(imx219->regmap, IMX219_REG_DIGITAL_GAIN,
drivers/media/i2c/imx219.c
488
cci_write(imx219->regmap, IMX219_REG_TEST_PATTERN,
drivers/media/i2c/imx219.c
493
cci_write(imx219->regmap, IMX219_REG_ORIENTATION,
drivers/media/i2c/imx219.c
494
imx219->hflip->val | imx219->vflip->val << 1, &ret);
drivers/media/i2c/imx219.c
497
cci_write(imx219->regmap, IMX219_REG_FRM_LENGTH_A,
drivers/media/i2c/imx219.c
501
cci_write(imx219->regmap, IMX219_REG_LINE_LENGTH_A,
drivers/media/i2c/imx219.c
505
cci_write(imx219->regmap, IMX219_REG_TESTP_RED,
drivers/media/i2c/imx219.c
509
cci_write(imx219->regmap, IMX219_REG_TESTP_GREENR,
drivers/media/i2c/imx219.c
513
cci_write(imx219->regmap, IMX219_REG_TESTP_BLUE,
drivers/media/i2c/imx219.c
517
cci_write(imx219->regmap, IMX219_REG_TESTP_GREENB,
drivers/media/i2c/imx219.c
537
static unsigned long imx219_get_pixel_rate(struct imx219 *imx219)
drivers/media/i2c/imx219.c
539
return (imx219->lanes == 2) ? IMX219_PIXEL_RATE : IMX219_PIXEL_RATE_4LANE;
drivers/media/i2c/imx219.c
543
static int imx219_init_controls(struct imx219 *imx219)
drivers/media/i2c/imx219.c
545
struct i2c_client *client = v4l2_get_subdevdata(&imx219->sd);
drivers/media/i2c/imx219.c
552
ctrl_hdlr = &imx219->ctrl_handler;
drivers/media/i2c/imx219.c
558
imx219->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &imx219_ctrl_ops,
drivers/media/i2c/imx219.c
560
imx219_get_pixel_rate(imx219),
drivers/media/i2c/imx219.c
561
imx219_get_pixel_rate(imx219), 1,
drivers/media/i2c/imx219.c
562
imx219_get_pixel_rate(imx219));
drivers/media/i2c/imx219.c
564
imx219->link_freq =
drivers/media/i2c/imx219.c
568
(imx219->lanes == 2) ? imx219_link_freq_menu :
drivers/media/i2c/imx219.c
570
if (imx219->link_freq)
drivers/media/i2c/imx219.c
571
imx219->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
drivers/media/i2c/imx219.c
574
imx219->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &imx219_ctrl_ops,
drivers/media/i2c/imx219.c
578
imx219->hblank = v4l2_ctrl_new_std(ctrl_hdlr, &imx219_ctrl_ops,
drivers/media/i2c/imx219.c
586
imx219->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &imx219_ctrl_ops,
drivers/media/i2c/imx219.c
600
imx219->hflip = v4l2_ctrl_new_std(ctrl_hdlr, &imx219_ctrl_ops,
drivers/media/i2c/imx219.c
602
if (imx219->hflip)
drivers/media/i2c/imx219.c
603
imx219->hflip->flags |= V4L2_CTRL_FLAG_MODIFY_LAYOUT;
drivers/media/i2c/imx219.c
605
imx219->vflip = v4l2_ctrl_new_std(ctrl_hdlr, &imx219_ctrl_ops,
drivers/media/i2c/imx219.c
607
if (imx219->vflip)
drivers/media/i2c/imx219.c
608
imx219->vflip->flags |= V4L2_CTRL_FLAG_MODIFY_LAYOUT;
drivers/media/i2c/imx219.c
645
imx219->sd.ctrl_handler = ctrl_hdlr;
drivers/media/i2c/imx219.c
655
static void imx219_free_controls(struct imx219 *imx219)
drivers/media/i2c/imx219.c
657
v4l2_ctrl_handler_free(imx219->sd.ctrl_handler);
drivers/media/i2c/imx219.c
664
static int imx219_set_framefmt(struct imx219 *imx219,
drivers/media/i2c/imx219.c
677
cci_write(imx219->regmap, IMX219_REG_X_ADD_STA_A,
drivers/media/i2c/imx219.c
679
cci_write(imx219->regmap, IMX219_REG_X_ADD_END_A,
drivers/media/i2c/imx219.c
681
cci_write(imx219->regmap, IMX219_REG_Y_ADD_STA_A,
drivers/media/i2c/imx219.c
683
cci_write(imx219->regmap, IMX219_REG_Y_ADD_END_A,
drivers/media/i2c/imx219.c
687
cci_write(imx219->regmap, IMX219_REG_BINNING_MODE_H, bin_h, &ret);
drivers/media/i2c/imx219.c
688
cci_write(imx219->regmap, IMX219_REG_BINNING_MODE_V, bin_v, &ret);
drivers/media/i2c/imx219.c
690
cci_write(imx219->regmap, IMX219_REG_X_OUTPUT_SIZE,
drivers/media/i2c/imx219.c
692
cci_write(imx219->regmap, IMX219_REG_Y_OUTPUT_SIZE,
drivers/media/i2c/imx219.c
695
cci_write(imx219->regmap, IMX219_REG_TP_WINDOW_WIDTH,
drivers/media/i2c/imx219.c
697
cci_write(imx219->regmap, IMX219_REG_TP_WINDOW_HEIGHT,
drivers/media/i2c/imx219.c
700
cci_write(imx219->regmap, IMX219_REG_CSI_DATA_FORMAT_A,
drivers/media/i2c/imx219.c
702
cci_write(imx219->regmap, IMX219_REG_OPPXCK_DIV, bpp, &ret);
drivers/media/i2c/imx219.c
707
static int imx219_configure_lanes(struct imx219 *imx219)
drivers/media/i2c/imx219.c
710
return cci_multi_reg_write(imx219->regmap,
drivers/media/i2c/imx219.c
711
imx219->lanes == 2 ? imx219_2lane_regs : imx219_4lane_regs,
drivers/media/i2c/imx219.c
712
imx219->lanes == 2 ? ARRAY_SIZE(imx219_2lane_regs) :
drivers/media/i2c/imx219.c
720
struct imx219 *imx219 = to_imx219(sd);
drivers/media/i2c/imx219.c
721
struct i2c_client *client = v4l2_get_subdevdata(&imx219->sd);
drivers/media/i2c/imx219.c
729
ret = cci_multi_reg_write(imx219->regmap, imx219_common_regs,
drivers/media/i2c/imx219.c
737
ret = imx219_configure_lanes(imx219);
drivers/media/i2c/imx219.c
744
ret = imx219_set_framefmt(imx219, state);
drivers/media/i2c/imx219.c
752
ret = __v4l2_ctrl_handler_setup(imx219->sd.ctrl_handler);
drivers/media/i2c/imx219.c
757
ret = cci_write(imx219->regmap, IMX219_REG_MODE_SELECT,
drivers/media/i2c/imx219.c
763
__v4l2_ctrl_grab(imx219->vflip, true);
drivers/media/i2c/imx219.c
764
__v4l2_ctrl_grab(imx219->hflip, true);
drivers/media/i2c/imx219.c
777
struct imx219 *imx219 = to_imx219(sd);
drivers/media/i2c/imx219.c
778
struct i2c_client *client = v4l2_get_subdevdata(&imx219->sd);
drivers/media/i2c/imx219.c
782
ret = cci_write(imx219->regmap, IMX219_REG_MODE_SELECT,
drivers/media/i2c/imx219.c
787
__v4l2_ctrl_grab(imx219->vflip, false);
drivers/media/i2c/imx219.c
788
__v4l2_ctrl_grab(imx219->hflip, false);
drivers/media/i2c/imx219.c
799
struct imx219 *imx219 = to_imx219(sd);
drivers/media/i2c/imx219.c
804
code->code = imx219_get_format_code(imx219, imx219_mbus_formats[code->index * 4]);
drivers/media/i2c/imx219.c
813
struct imx219 *imx219 = to_imx219(sd);
drivers/media/i2c/imx219.c
819
code = imx219_get_format_code(imx219, fse->code);
drivers/media/i2c/imx219.c
835
struct imx219 *imx219 = to_imx219(sd);
drivers/media/i2c/imx219.c
844
prev_line_len = format->width + imx219->hblank->val;
drivers/media/i2c/imx219.c
855
fmt->format.code = imx219_get_format_code(imx219, fmt->format.code);
drivers/media/i2c/imx219.c
889
ret = __v4l2_ctrl_modify_range(imx219->vblank, IMX219_VBLANK_MIN,
drivers/media/i2c/imx219.c
895
ret = __v4l2_ctrl_s_ctrl(imx219->vblank,
drivers/media/i2c/imx219.c
904
ret = __v4l2_ctrl_modify_range(imx219->exposure,
drivers/media/i2c/imx219.c
905
imx219->exposure->minimum,
drivers/media/i2c/imx219.c
907
imx219->exposure->step,
drivers/media/i2c/imx219.c
921
ret = __v4l2_ctrl_modify_range(imx219->hblank,
drivers/media/i2c/imx219.c
935
ret = __v4l2_ctrl_s_ctrl(imx219->hblank, hblank);
drivers/media/i2c/imx219.c
940
pixel_rate = imx219_get_pixel_rate(imx219) *
drivers/media/i2c/imx219.c
942
ret = __v4l2_ctrl_modify_range(imx219->pixel_rate, pixel_rate,