Symbol: mt9v032
drivers/media/i2c/mt9v032.c
1005
static int mt9v032_get_pdata(struct mt9v032 *mt9v032)
drivers/media/i2c/mt9v032.c
1007
struct mt9v032_platform_data *pdata = &mt9v032->pdata;
drivers/media/i2c/mt9v032.c
1012
np = of_graph_get_endpoint_by_regs(mt9v032->dev->of_node, 0, -1);
drivers/media/i2c/mt9v032.c
1024
link_freqs = devm_kcalloc(mt9v032->dev, size,
drivers/media/i2c/mt9v032.c
1045
struct mt9v032 *mt9v032;
drivers/media/i2c/mt9v032.c
1049
mt9v032 = devm_kzalloc(&client->dev, sizeof(*mt9v032), GFP_KERNEL);
drivers/media/i2c/mt9v032.c
1050
if (!mt9v032)
drivers/media/i2c/mt9v032.c
1053
mt9v032->dev = &client->dev;
drivers/media/i2c/mt9v032.c
1055
mt9v032->regmap = devm_regmap_init_i2c(client, &mt9v032_regmap_config);
drivers/media/i2c/mt9v032.c
1056
if (IS_ERR(mt9v032->regmap))
drivers/media/i2c/mt9v032.c
1057
return PTR_ERR(mt9v032->regmap);
drivers/media/i2c/mt9v032.c
1059
mt9v032->clk = devm_v4l2_sensor_clk_get(mt9v032->dev, NULL);
drivers/media/i2c/mt9v032.c
1060
if (IS_ERR(mt9v032->clk))
drivers/media/i2c/mt9v032.c
1061
return dev_err_probe(mt9v032->dev, PTR_ERR(mt9v032->clk),
drivers/media/i2c/mt9v032.c
1064
mt9v032->reset_gpio = devm_gpiod_get_optional(mt9v032->dev, "reset",
drivers/media/i2c/mt9v032.c
1066
if (IS_ERR(mt9v032->reset_gpio))
drivers/media/i2c/mt9v032.c
1067
return PTR_ERR(mt9v032->reset_gpio);
drivers/media/i2c/mt9v032.c
1069
mt9v032->standby_gpio = devm_gpiod_get_optional(mt9v032->dev, "standby",
drivers/media/i2c/mt9v032.c
1071
if (IS_ERR(mt9v032->standby_gpio))
drivers/media/i2c/mt9v032.c
1072
return PTR_ERR(mt9v032->standby_gpio);
drivers/media/i2c/mt9v032.c
1074
mutex_init(&mt9v032->power_lock);
drivers/media/i2c/mt9v032.c
1076
ret = mt9v032_get_pdata(mt9v032);
drivers/media/i2c/mt9v032.c
1078
return dev_err_probe(mt9v032->dev, -EINVAL,
drivers/media/i2c/mt9v032.c
1081
mt9v032->model = device_get_match_data(mt9v032->dev);
drivers/media/i2c/mt9v032.c
1083
v4l2_ctrl_handler_init(&mt9v032->ctrls, 11 +
drivers/media/i2c/mt9v032.c
1086
v4l2_ctrl_new_std(&mt9v032->ctrls, &mt9v032_ctrl_ops,
drivers/media/i2c/mt9v032.c
1088
v4l2_ctrl_new_std(&mt9v032->ctrls, &mt9v032_ctrl_ops,
drivers/media/i2c/mt9v032.c
1091
v4l2_ctrl_new_std_menu(&mt9v032->ctrls, &mt9v032_ctrl_ops,
drivers/media/i2c/mt9v032.c
1094
v4l2_ctrl_new_std(&mt9v032->ctrls, &mt9v032_ctrl_ops,
drivers/media/i2c/mt9v032.c
1095
V4L2_CID_EXPOSURE, mt9v032->model->data->min_shutter,
drivers/media/i2c/mt9v032.c
1096
mt9v032->model->data->max_shutter, 1,
drivers/media/i2c/mt9v032.c
1098
v4l2_ctrl_new_std(&mt9v032->ctrls, &mt9v032_ctrl_ops,
drivers/media/i2c/mt9v032.c
1099
V4L2_CID_HBLANK, mt9v032->model->data->min_hblank,
drivers/media/i2c/mt9v032.c
1102
v4l2_ctrl_new_std(&mt9v032->ctrls, &mt9v032_ctrl_ops,
drivers/media/i2c/mt9v032.c
1103
V4L2_CID_VBLANK, mt9v032->model->data->min_vblank,
drivers/media/i2c/mt9v032.c
1104
mt9v032->model->data->max_vblank, 1,
drivers/media/i2c/mt9v032.c
1106
mt9v032->test_pattern = v4l2_ctrl_new_std_menu_items(&mt9v032->ctrls,
drivers/media/i2c/mt9v032.c
1110
mt9v032->test_pattern_color = v4l2_ctrl_new_custom(&mt9v032->ctrls,
drivers/media/i2c/mt9v032.c
1113
v4l2_ctrl_new_custom(&mt9v032->ctrls,
drivers/media/i2c/mt9v032.c
1114
mt9v032->model->data->aec_max_shutter_v4l2_ctrl,
drivers/media/i2c/mt9v032.c
1117
v4l2_ctrl_new_custom(&mt9v032->ctrls, &mt9v032_aegc_controls[i],
drivers/media/i2c/mt9v032.c
1120
v4l2_ctrl_cluster(2, &mt9v032->test_pattern);
drivers/media/i2c/mt9v032.c
1122
mt9v032->pixel_rate =
drivers/media/i2c/mt9v032.c
1123
v4l2_ctrl_new_std(&mt9v032->ctrls, &mt9v032_ctrl_ops,
drivers/media/i2c/mt9v032.c
1126
if (mt9v032->pdata.link_freqs) {
drivers/media/i2c/mt9v032.c
1127
const struct mt9v032_platform_data *pdata = &mt9v032->pdata;
drivers/media/i2c/mt9v032.c
1135
mt9v032->link_freq =
drivers/media/i2c/mt9v032.c
1136
v4l2_ctrl_new_int_menu(&mt9v032->ctrls,
drivers/media/i2c/mt9v032.c
1140
v4l2_ctrl_cluster(2, &mt9v032->link_freq);
drivers/media/i2c/mt9v032.c
1144
mt9v032->subdev.ctrl_handler = &mt9v032->ctrls;
drivers/media/i2c/mt9v032.c
1146
if (mt9v032->ctrls.error) {
drivers/media/i2c/mt9v032.c
1147
dev_err(mt9v032->dev, "control initialization error %d\n",
drivers/media/i2c/mt9v032.c
1148
mt9v032->ctrls.error);
drivers/media/i2c/mt9v032.c
1149
ret = mt9v032->ctrls.error;
drivers/media/i2c/mt9v032.c
1153
mt9v032->crop.left = MT9V032_COLUMN_START_DEF;
drivers/media/i2c/mt9v032.c
1154
mt9v032->crop.top = MT9V032_ROW_START_DEF;
drivers/media/i2c/mt9v032.c
1155
mt9v032->crop.width = MT9V032_WINDOW_WIDTH_DEF;
drivers/media/i2c/mt9v032.c
1156
mt9v032->crop.height = MT9V032_WINDOW_HEIGHT_DEF;
drivers/media/i2c/mt9v032.c
1158
if (mt9v032->model->color)
drivers/media/i2c/mt9v032.c
1159
mt9v032->format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
drivers/media/i2c/mt9v032.c
1161
mt9v032->format.code = MEDIA_BUS_FMT_Y10_1X10;
drivers/media/i2c/mt9v032.c
1163
mt9v032->format.width = MT9V032_WINDOW_WIDTH_DEF;
drivers/media/i2c/mt9v032.c
1164
mt9v032->format.height = MT9V032_WINDOW_HEIGHT_DEF;
drivers/media/i2c/mt9v032.c
1165
mt9v032->format.field = V4L2_FIELD_NONE;
drivers/media/i2c/mt9v032.c
1166
mt9v032->format.colorspace = V4L2_COLORSPACE_SRGB;
drivers/media/i2c/mt9v032.c
1168
mt9v032->hratio = 1;
drivers/media/i2c/mt9v032.c
1169
mt9v032->vratio = 1;
drivers/media/i2c/mt9v032.c
1171
mt9v032->aec_agc = MT9V032_AEC_ENABLE | MT9V032_AGC_ENABLE;
drivers/media/i2c/mt9v032.c
1172
mt9v032->hblank = MT9V032_HORIZONTAL_BLANKING_DEF;
drivers/media/i2c/mt9v032.c
1173
mt9v032->sysclk = MT9V032_SYSCLK_FREQ_DEF;
drivers/media/i2c/mt9v032.c
1175
v4l2_i2c_subdev_init(&mt9v032->subdev, client, &mt9v032_subdev_ops);
drivers/media/i2c/mt9v032.c
1176
mt9v032->subdev.internal_ops = &mt9v032_subdev_internal_ops;
drivers/media/i2c/mt9v032.c
1177
mt9v032->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
drivers/media/i2c/mt9v032.c
1179
mt9v032->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR;
drivers/media/i2c/mt9v032.c
1180
mt9v032->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/mt9v032.c
1181
ret = media_entity_pads_init(&mt9v032->subdev.entity, 1, &mt9v032->pad);
drivers/media/i2c/mt9v032.c
1185
mt9v032->subdev.dev = mt9v032->dev;
drivers/media/i2c/mt9v032.c
1186
ret = v4l2_async_register_subdev(&mt9v032->subdev);
drivers/media/i2c/mt9v032.c
1193
media_entity_cleanup(&mt9v032->subdev.entity);
drivers/media/i2c/mt9v032.c
1194
v4l2_ctrl_handler_free(&mt9v032->ctrls);
drivers/media/i2c/mt9v032.c
1201
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
drivers/media/i2c/mt9v032.c
1204
v4l2_ctrl_handler_free(&mt9v032->ctrls);
drivers/media/i2c/mt9v032.c
229
static struct mt9v032 *to_mt9v032(struct v4l2_subdev *sd)
drivers/media/i2c/mt9v032.c
231
return container_of(sd, struct mt9v032, subdev);
drivers/media/i2c/mt9v032.c
235
mt9v032_update_aec_agc(struct mt9v032 *mt9v032, u16 which, int enable)
drivers/media/i2c/mt9v032.c
237
struct regmap *map = mt9v032->regmap;
drivers/media/i2c/mt9v032.c
238
u16 value = mt9v032->aec_agc;
drivers/media/i2c/mt9v032.c
250
mt9v032->aec_agc = value;
drivers/media/i2c/mt9v032.c
255
mt9v032_update_hblank(struct mt9v032 *mt9v032)
drivers/media/i2c/mt9v032.c
257
struct v4l2_rect *crop = &mt9v032->crop;
drivers/media/i2c/mt9v032.c
258
unsigned int min_hblank = mt9v032->model->data->min_hblank;
drivers/media/i2c/mt9v032.c
261
if (mt9v032->version->version == MT9V034_CHIP_ID_REV1)
drivers/media/i2c/mt9v032.c
262
min_hblank += (mt9v032->hratio - 1) * 10;
drivers/media/i2c/mt9v032.c
263
min_hblank = max_t(int, mt9v032->model->data->min_row_time - crop->width,
drivers/media/i2c/mt9v032.c
265
hblank = max_t(unsigned int, mt9v032->hblank, min_hblank);
drivers/media/i2c/mt9v032.c
267
return regmap_write(mt9v032->regmap, MT9V032_HORIZONTAL_BLANKING,
drivers/media/i2c/mt9v032.c
271
static int mt9v032_power_on(struct mt9v032 *mt9v032)
drivers/media/i2c/mt9v032.c
273
struct regmap *map = mt9v032->regmap;
drivers/media/i2c/mt9v032.c
276
gpiod_set_value_cansleep(mt9v032->reset_gpio, 1);
drivers/media/i2c/mt9v032.c
278
ret = clk_set_rate(mt9v032->clk, mt9v032->sysclk);
drivers/media/i2c/mt9v032.c
283
ret = clk_prepare_enable(mt9v032->clk);
drivers/media/i2c/mt9v032.c
289
if (mt9v032->reset_gpio) {
drivers/media/i2c/mt9v032.c
290
gpiod_set_value_cansleep(mt9v032->reset_gpio, 0);
drivers/media/i2c/mt9v032.c
317
clk_disable_unprepare(mt9v032->clk);
drivers/media/i2c/mt9v032.c
321
static void mt9v032_power_off(struct mt9v032 *mt9v032)
drivers/media/i2c/mt9v032.c
323
clk_disable_unprepare(mt9v032->clk);
drivers/media/i2c/mt9v032.c
326
static int __mt9v032_set_power(struct mt9v032 *mt9v032, bool on)
drivers/media/i2c/mt9v032.c
328
struct regmap *map = mt9v032->regmap;
drivers/media/i2c/mt9v032.c
332
mt9v032_power_off(mt9v032);
drivers/media/i2c/mt9v032.c
336
ret = mt9v032_power_on(mt9v032);
drivers/media/i2c/mt9v032.c
341
if (mt9v032->pdata.clk_pol) {
drivers/media/i2c/mt9v032.c
342
ret = regmap_write(map, mt9v032->model->data->pclk_reg,
drivers/media/i2c/mt9v032.c
353
return v4l2_ctrl_handler_setup(&mt9v032->ctrls);
drivers/media/i2c/mt9v032.c
361
__mt9v032_get_pad_format(struct mt9v032 *mt9v032,
drivers/media/i2c/mt9v032.c
369
return &mt9v032->format;
drivers/media/i2c/mt9v032.c
376
__mt9v032_get_pad_crop(struct mt9v032 *mt9v032,
drivers/media/i2c/mt9v032.c
384
return &mt9v032->crop;
drivers/media/i2c/mt9v032.c
394
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
drivers/media/i2c/mt9v032.c
395
struct v4l2_rect *crop = &mt9v032->crop;
drivers/media/i2c/mt9v032.c
396
struct regmap *map = mt9v032->regmap;
drivers/media/i2c/mt9v032.c
405
hbin = fls(mt9v032->hratio) - 1;
drivers/media/i2c/mt9v032.c
406
vbin = fls(mt9v032->vratio) - 1;
drivers/media/i2c/mt9v032.c
430
ret = mt9v032_update_hblank(mt9v032);
drivers/media/i2c/mt9v032.c
442
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
drivers/media/i2c/mt9v032.c
447
code->code = mt9v032->format.code;
drivers/media/i2c/mt9v032.c
455
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
drivers/media/i2c/mt9v032.c
459
if (mt9v032->format.code != fse->code)
drivers/media/i2c/mt9v032.c
474
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
drivers/media/i2c/mt9v032.c
476
format->format = *__mt9v032_get_pad_format(mt9v032, sd_state,
drivers/media/i2c/mt9v032.c
482
static void mt9v032_configure_pixel_rate(struct mt9v032 *mt9v032)
drivers/media/i2c/mt9v032.c
486
ret = v4l2_ctrl_s_ctrl_int64(mt9v032->pixel_rate,
drivers/media/i2c/mt9v032.c
487
mt9v032->sysclk / mt9v032->hratio);
drivers/media/i2c/mt9v032.c
489
dev_warn(mt9v032->dev, "failed to set pixel rate (%d)\n", ret);
drivers/media/i2c/mt9v032.c
509
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
drivers/media/i2c/mt9v032.c
517
__crop = __mt9v032_get_pad_crop(mt9v032, sd_state, format->pad,
drivers/media/i2c/mt9v032.c
533
__format = __mt9v032_get_pad_format(mt9v032, sd_state, format->pad,
drivers/media/i2c/mt9v032.c
539
mt9v032->hratio = hratio;
drivers/media/i2c/mt9v032.c
540
mt9v032->vratio = vratio;
drivers/media/i2c/mt9v032.c
541
mt9v032_configure_pixel_rate(mt9v032);
drivers/media/i2c/mt9v032.c
553
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
drivers/media/i2c/mt9v032.c
558
sel->r = *__mt9v032_get_pad_crop(mt9v032, sd_state, sel->pad,
drivers/media/i2c/mt9v032.c
567
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
drivers/media/i2c/mt9v032.c
596
__crop = __mt9v032_get_pad_crop(mt9v032, sd_state, sel->pad,
drivers/media/i2c/mt9v032.c
603
__format = __mt9v032_get_pad_format(mt9v032, sd_state,
drivers/media/i2c/mt9v032.c
609
mt9v032->hratio = 1;
drivers/media/i2c/mt9v032.c
610
mt9v032->vratio = 1;
drivers/media/i2c/mt9v032.c
611
mt9v032_configure_pixel_rate(mt9v032);
drivers/media/i2c/mt9v032.c
657
struct mt9v032 *mt9v032 =
drivers/media/i2c/mt9v032.c
658
container_of(ctrl->handler, struct mt9v032, ctrls);
drivers/media/i2c/mt9v032.c
659
struct regmap *map = mt9v032->regmap;
drivers/media/i2c/mt9v032.c
665
return mt9v032_update_aec_agc(mt9v032, MT9V032_AGC_ENABLE,
drivers/media/i2c/mt9v032.c
672
return mt9v032_update_aec_agc(mt9v032, MT9V032_AEC_ENABLE,
drivers/media/i2c/mt9v032.c
680
mt9v032->hblank = ctrl->val;
drivers/media/i2c/mt9v032.c
681
return mt9v032_update_hblank(mt9v032);
drivers/media/i2c/mt9v032.c
689
if (mt9v032->link_freq == NULL)
drivers/media/i2c/mt9v032.c
692
freq = mt9v032->pdata.link_freqs[mt9v032->link_freq->val];
drivers/media/i2c/mt9v032.c
693
*mt9v032->pixel_rate->p_new.p_s64 = freq;
drivers/media/i2c/mt9v032.c
694
mt9v032->sysclk = freq;
drivers/media/i2c/mt9v032.c
698
switch (mt9v032->test_pattern->val) {
drivers/media/i2c/mt9v032.c
715
data = (mt9v032->test_pattern_color->val <<
drivers/media/i2c/mt9v032.c
743
mt9v032->model->data->aec_max_shutter_reg,
drivers/media/i2c/mt9v032.c
858
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
drivers/media/i2c/mt9v032.c
861
mutex_lock(&mt9v032->power_lock);
drivers/media/i2c/mt9v032.c
866
if (mt9v032->power_count == !on) {
drivers/media/i2c/mt9v032.c
867
ret = __mt9v032_set_power(mt9v032, !!on);
drivers/media/i2c/mt9v032.c
873
mt9v032->power_count += on ? 1 : -1;
drivers/media/i2c/mt9v032.c
874
WARN_ON(mt9v032->power_count < 0);
drivers/media/i2c/mt9v032.c
877
mutex_unlock(&mt9v032->power_lock);
drivers/media/i2c/mt9v032.c
888
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
drivers/media/i2c/mt9v032.c
893
dev_info(mt9v032->dev, "Probing MT9V032 at address 0x%02x\n",
drivers/media/i2c/mt9v032.c
896
ret = mt9v032_power_on(mt9v032);
drivers/media/i2c/mt9v032.c
898
dev_err(mt9v032->dev, "MT9V032 power up failed\n");
drivers/media/i2c/mt9v032.c
903
ret = regmap_read(mt9v032->regmap, MT9V032_CHIP_VERSION, &version);
drivers/media/i2c/mt9v032.c
905
mt9v032_power_off(mt9v032);
drivers/media/i2c/mt9v032.c
908
dev_err(mt9v032->dev, "Failed reading chip version\n");
drivers/media/i2c/mt9v032.c
914
mt9v032->version = &mt9v032_versions[i];
drivers/media/i2c/mt9v032.c
919
if (mt9v032->version == NULL) {
drivers/media/i2c/mt9v032.c
920
dev_err(mt9v032->dev, "Unsupported chip version 0x%04x\n",
drivers/media/i2c/mt9v032.c
925
dev_info(mt9v032->dev, "%s detected at address 0x%02x\n",
drivers/media/i2c/mt9v032.c
926
mt9v032->version->name, client->addr);
drivers/media/i2c/mt9v032.c
928
mt9v032_configure_pixel_rate(mt9v032);
drivers/media/i2c/mt9v032.c
935
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
drivers/media/i2c/mt9v032.c
947
if (mt9v032->model->color)