Symbol: gc2145
drivers/media/i2c/gc2145.c
1005
ret = clk_prepare_enable(gc2145->xclk);
drivers/media/i2c/gc2145.c
1011
gpiod_set_value_cansleep(gc2145->powerdown_gpio, 0);
drivers/media/i2c/gc2145.c
1012
gpiod_set_value_cansleep(gc2145->reset_gpio, 0);
drivers/media/i2c/gc2145.c
1024
regulator_bulk_disable(GC2145_NUM_SUPPLIES, gc2145->supplies);
drivers/media/i2c/gc2145.c
1032
struct gc2145 *gc2145 = to_gc2145(sd);
drivers/media/i2c/gc2145.c
1034
gpiod_set_value_cansleep(gc2145->powerdown_gpio, 1);
drivers/media/i2c/gc2145.c
1035
gpiod_set_value_cansleep(gc2145->reset_gpio, 1);
drivers/media/i2c/gc2145.c
1036
clk_disable_unprepare(gc2145->xclk);
drivers/media/i2c/gc2145.c
1037
regulator_bulk_disable(GC2145_NUM_SUPPLIES, gc2145->supplies);
drivers/media/i2c/gc2145.c
1042
static int gc2145_get_regulators(struct gc2145 *gc2145)
drivers/media/i2c/gc2145.c
1044
struct i2c_client *client = v4l2_get_subdevdata(&gc2145->sd);
drivers/media/i2c/gc2145.c
1048
gc2145->supplies[i].supply = gc2145_supply_name[i];
drivers/media/i2c/gc2145.c
1051
gc2145->supplies);
drivers/media/i2c/gc2145.c
1055
static int gc2145_identify_module(struct gc2145 *gc2145)
drivers/media/i2c/gc2145.c
1057
struct i2c_client *client = v4l2_get_subdevdata(&gc2145->sd);
drivers/media/i2c/gc2145.c
1061
ret = cci_read(gc2145->regmap, GC2145_REG_CHIP_ID, &chip_id, NULL);
drivers/media/i2c/gc2145.c
1135
static int gc2145_set_ctrl_test_pattern(struct gc2145 *gc2145, int value)
drivers/media/i2c/gc2145.c
1141
cci_write(gc2145->regmap, GC2145_REG_DEBUG_MODE2, 0, &ret);
drivers/media/i2c/gc2145.c
1142
return cci_write(gc2145->regmap, GC2145_REG_DEBUG_MODE3, 0,
drivers/media/i2c/gc2145.c
1147
cci_write(gc2145->regmap, GC2145_REG_DEBUG_MODE2,
drivers/media/i2c/gc2145.c
1151
return cci_write(gc2145->regmap, GC2145_REG_DEBUG_MODE3, 0,
drivers/media/i2c/gc2145.c
1155
return cci_write(gc2145->regmap, GC2145_REG_DEBUG_MODE3,
drivers/media/i2c/gc2145.c
1163
struct gc2145 *gc2145 = to_gc2145(sd);
drivers/media/i2c/gc2145.c
1171
ret = cci_write(gc2145->regmap, GC2145_REG_HBLANK, ctrl->val,
drivers/media/i2c/gc2145.c
1175
ret = cci_write(gc2145->regmap, GC2145_REG_VBLANK, ctrl->val,
drivers/media/i2c/gc2145.c
1179
ret = gc2145_set_ctrl_test_pattern(gc2145, ctrl->val);
drivers/media/i2c/gc2145.c
1182
ret = cci_update_bits(gc2145->regmap, GC2145_REG_ANALOG_MODE1,
drivers/media/i2c/gc2145.c
1186
ret = cci_update_bits(gc2145->regmap, GC2145_REG_ANALOG_MODE1,
drivers/media/i2c/gc2145.c
1204
static int gc2145_init_controls(struct gc2145 *gc2145)
drivers/media/i2c/gc2145.c
1206
struct i2c_client *client = v4l2_get_subdevdata(&gc2145->sd);
drivers/media/i2c/gc2145.c
1208
struct gc2145_ctrls *ctrls = &gc2145->ctrls;
drivers/media/i2c/gc2145.c
1258
gc2145->sd.ctrl_handler = hdl;
drivers/media/i2c/gc2145.c
1319
struct gc2145 *gc2145;
drivers/media/i2c/gc2145.c
1322
gc2145 = devm_kzalloc(&client->dev, sizeof(*gc2145), GFP_KERNEL);
drivers/media/i2c/gc2145.c
1323
if (!gc2145)
drivers/media/i2c/gc2145.c
1326
v4l2_i2c_subdev_init(&gc2145->sd, client, &gc2145_subdev_ops);
drivers/media/i2c/gc2145.c
1327
gc2145->sd.internal_ops = &gc2145_subdev_internal_ops;
drivers/media/i2c/gc2145.c
1334
gc2145->xclk = devm_v4l2_sensor_clk_get(dev, NULL);
drivers/media/i2c/gc2145.c
1335
if (IS_ERR(gc2145->xclk))
drivers/media/i2c/gc2145.c
1336
return dev_err_probe(dev, PTR_ERR(gc2145->xclk),
drivers/media/i2c/gc2145.c
1339
xclk_freq = clk_get_rate(gc2145->xclk);
drivers/media/i2c/gc2145.c
1346
ret = gc2145_get_regulators(gc2145);
drivers/media/i2c/gc2145.c
1352
gc2145->reset_gpio = devm_gpiod_get_optional(dev, "reset",
drivers/media/i2c/gc2145.c
1354
if (IS_ERR(gc2145->reset_gpio))
drivers/media/i2c/gc2145.c
1355
return dev_err_probe(dev, PTR_ERR(gc2145->reset_gpio),
drivers/media/i2c/gc2145.c
1359
gc2145->powerdown_gpio = devm_gpiod_get_optional(dev, "powerdown",
drivers/media/i2c/gc2145.c
1361
if (IS_ERR(gc2145->powerdown_gpio))
drivers/media/i2c/gc2145.c
1362
return dev_err_probe(dev, PTR_ERR(gc2145->powerdown_gpio),
drivers/media/i2c/gc2145.c
1366
gc2145->regmap = devm_cci_regmap_init_i2c(client, 8);
drivers/media/i2c/gc2145.c
1367
if (IS_ERR(gc2145->regmap))
drivers/media/i2c/gc2145.c
1368
return dev_err_probe(dev, PTR_ERR(gc2145->regmap),
drivers/media/i2c/gc2145.c
1379
ret = gc2145_identify_module(gc2145);
drivers/media/i2c/gc2145.c
1384
gc2145->mode = &supported_modes[0];
drivers/media/i2c/gc2145.c
1386
ret = gc2145_init_controls(gc2145);
drivers/media/i2c/gc2145.c
1391
gc2145->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
drivers/media/i2c/gc2145.c
1392
gc2145->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
drivers/media/i2c/gc2145.c
1395
gc2145->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/gc2145.c
1397
ret = media_entity_pads_init(&gc2145->sd.entity, 1, &gc2145->pad);
drivers/media/i2c/gc2145.c
1403
gc2145->sd.state_lock = gc2145->ctrls.handler.lock;
drivers/media/i2c/gc2145.c
1404
ret = v4l2_subdev_init_finalize(&gc2145->sd);
drivers/media/i2c/gc2145.c
1419
ret = v4l2_async_register_subdev_sensor(&gc2145->sd);
drivers/media/i2c/gc2145.c
1428
v4l2_subdev_cleanup(&gc2145->sd);
drivers/media/i2c/gc2145.c
1433
media_entity_cleanup(&gc2145->sd.entity);
drivers/media/i2c/gc2145.c
1436
v4l2_ctrl_handler_free(&gc2145->ctrls.handler);
drivers/media/i2c/gc2145.c
1447
struct gc2145 *gc2145 = to_gc2145(sd);
drivers/media/i2c/gc2145.c
1452
v4l2_ctrl_handler_free(&gc2145->ctrls.handler);
drivers/media/i2c/gc2145.c
649
static inline struct gc2145 *to_gc2145(struct v4l2_subdev *_sd)
drivers/media/i2c/gc2145.c
651
return container_of(_sd, struct gc2145, sd);
drivers/media/i2c/gc2145.c
656
return &container_of(ctrl->handler, struct gc2145,
drivers/media/i2c/gc2145.c
661
gc2145_get_format_code(struct gc2145 *gc2145, u32 code)
drivers/media/i2c/gc2145.c
676
static void gc2145_update_pad_format(struct gc2145 *gc2145,
drivers/media/i2c/gc2145.c
694
struct gc2145 *gc2145 = to_gc2145(sd);
drivers/media/i2c/gc2145.c
700
gc2145_update_pad_format(gc2145, &supported_modes[0], format,
drivers/media/i2c/gc2145.c
756
struct gc2145 *gc2145 = to_gc2145(sd);
drivers/media/i2c/gc2145.c
763
gc2145_format = gc2145_get_format_code(gc2145, fse->code);
drivers/media/i2c/gc2145.c
780
struct gc2145 *gc2145 = to_gc2145(sd);
drivers/media/i2c/gc2145.c
784
struct gc2145_ctrls *ctrls = &gc2145->ctrls;
drivers/media/i2c/gc2145.c
787
gc2145_fmt = gc2145_get_format_code(gc2145, fmt->format.code);
drivers/media/i2c/gc2145.c
798
gc2145_update_pad_format(gc2145, mode, &fmt->format, gc2145_fmt->code,
drivers/media/i2c/gc2145.c
802
gc2145->mode = mode;
drivers/media/i2c/gc2145.c
840
static int gc2145_config_mipi_mode(struct gc2145 *gc2145,
drivers/media/i2c/gc2145.c
847
cci_multi_reg_write(gc2145->regmap, gc2145_common_mipi_regs,
drivers/media/i2c/gc2145.c
857
lwc = gc2145->mode->width * 2;
drivers/media/i2c/gc2145.c
859
lwc = gc2145->mode->width;
drivers/media/i2c/gc2145.c
861
cci_write(gc2145->regmap, GC2145_REG_LWC, lwc, &ret);
drivers/media/i2c/gc2145.c
870
if (gc2145->mode->width == 1280 || gc2145->mode->width == 1600)
drivers/media/i2c/gc2145.c
878
cci_write(gc2145->regmap, GC2145_REG_FIFO_FULL_LVL,
drivers/media/i2c/gc2145.c
885
cci_write(gc2145->regmap, GC2145_REG_FIFO_GATE_MODE,
drivers/media/i2c/gc2145.c
890
cci_write(gc2145->regmap, GC2145_REG_MIPI_DT,
drivers/media/i2c/gc2145.c
894
cci_write(gc2145->regmap, GC2145_REG_BUF_CSI2_MODE,
drivers/media/i2c/gc2145.c
905
struct gc2145 *gc2145 = to_gc2145(sd);
drivers/media/i2c/gc2145.c
906
struct i2c_client *client = v4l2_get_subdevdata(&gc2145->sd);
drivers/media/i2c/gc2145.c
916
cci_multi_reg_write(gc2145->regmap, gc2145->mode->reg_seq,
drivers/media/i2c/gc2145.c
917
gc2145->mode->reg_seq_size, &ret);
drivers/media/i2c/gc2145.c
918
cci_multi_reg_write(gc2145->regmap, gc2145_common_regs,
drivers/media/i2c/gc2145.c
926
gc2145_format = gc2145_get_format_code(gc2145, fmt->code);
drivers/media/i2c/gc2145.c
929
cci_write(gc2145->regmap, GC2145_REG_PAGE_SELECT, 0x00, &ret);
drivers/media/i2c/gc2145.c
931
cci_write(gc2145->regmap, GC2145_REG_OUTPUT_FMT,
drivers/media/i2c/gc2145.c
933
cci_update_bits(gc2145->regmap, GC2145_REG_BYPASS_MODE,
drivers/media/i2c/gc2145.c
937
cci_update_bits(gc2145->regmap, GC2145_REG_SYNC_MODE,
drivers/media/i2c/gc2145.c
947
ret = __v4l2_ctrl_handler_setup(&gc2145->ctrls.handler);
drivers/media/i2c/gc2145.c
954
ret = gc2145_config_mipi_mode(gc2145, gc2145_format);
drivers/media/i2c/gc2145.c
961
cci_write(gc2145->regmap, GC2145_REG_PAGE_SELECT, 0x00, &ret);
drivers/media/i2c/gc2145.c
974
struct gc2145 *gc2145 = to_gc2145(sd);
drivers/media/i2c/gc2145.c
975
struct i2c_client *client = v4l2_get_subdevdata(&gc2145->sd);
drivers/media/i2c/gc2145.c
979
cci_write(gc2145->regmap, GC2145_REG_PAGE_SELECT, 0x03, &ret);
drivers/media/i2c/gc2145.c
980
cci_update_bits(gc2145->regmap, GC2145_REG_BUF_CSI2_MODE,
drivers/media/i2c/gc2145.c
983
cci_write(gc2145->regmap, GC2145_REG_PAGE_SELECT, 0x00, &ret);
drivers/media/i2c/gc2145.c
996
struct gc2145 *gc2145 = to_gc2145(sd);
drivers/media/i2c/gc2145.c
999
ret = regulator_bulk_enable(GC2145_NUM_SUPPLIES, gc2145->supplies);