Symbol: mt9m111
drivers/media/i2c/mt9m111.c
1000
mt9m111_suspend(mt9m111);
drivers/media/i2c/mt9m111.c
1001
regulator_disable(mt9m111->regulator);
drivers/media/i2c/mt9m111.c
1002
clk_disable_unprepare(mt9m111->clk);
drivers/media/i2c/mt9m111.c
1007
struct mt9m111 *mt9m111 = container_of(sd, struct mt9m111, subdev);
drivers/media/i2c/mt9m111.c
1010
mutex_lock(&mt9m111->power_lock);
drivers/media/i2c/mt9m111.c
1016
if (mt9m111->power_count == !on) {
drivers/media/i2c/mt9m111.c
1018
ret = mt9m111_power_on(mt9m111);
drivers/media/i2c/mt9m111.c
1020
mt9m111_power_off(mt9m111);
drivers/media/i2c/mt9m111.c
1025
mt9m111->power_count += on ? 1 : -1;
drivers/media/i2c/mt9m111.c
1026
WARN_ON(mt9m111->power_count < 0);
drivers/media/i2c/mt9m111.c
1029
mutex_unlock(&mt9m111->power_lock);
drivers/media/i2c/mt9m111.c
1052
struct mt9m111 *mt9m111 = container_of(sd, struct mt9m111, subdev);
drivers/media/i2c/mt9m111.c
1061
fi->interval = mt9m111->frame_interval;
drivers/media/i2c/mt9m111.c
1070
struct mt9m111 *mt9m111 = container_of(sd, struct mt9m111, subdev);
drivers/media/i2c/mt9m111.c
1075
if (mt9m111->is_streaming)
drivers/media/i2c/mt9m111.c
1096
mode = mt9m111_find_mode(mt9m111, fps, mt9m111->width, mt9m111->height);
drivers/media/i2c/mt9m111.c
1105
mt9m111->current_mode = mode;
drivers/media/i2c/mt9m111.c
1106
mt9m111->frame_interval = fi->interval;
drivers/media/i2c/mt9m111.c
1124
struct mt9m111 *mt9m111 = container_of(sd, struct mt9m111, subdev);
drivers/media/i2c/mt9m111.c
1126
mt9m111->is_streaming = !!enable;
drivers/media/i2c/mt9m111.c
1152
struct mt9m111 *mt9m111 = container_of(sd, struct mt9m111, subdev);
drivers/media/i2c/mt9m111.c
1161
cfg->bus.parallel.flags |= mt9m111->pclk_sample ?
drivers/media/i2c/mt9m111.c
1199
struct mt9m111 *mt9m111 = to_mt9m111(client);
drivers/media/i2c/mt9m111.c
1203
ret = mt9m111_s_power(&mt9m111->subdev, 1);
drivers/media/i2c/mt9m111.c
1225
ret = mt9m111_init(mt9m111);
drivers/media/i2c/mt9m111.c
1229
ret = v4l2_ctrl_handler_setup(&mt9m111->hdl);
drivers/media/i2c/mt9m111.c
1232
mt9m111_s_power(&mt9m111->subdev, 0);
drivers/media/i2c/mt9m111.c
1236
static int mt9m111_probe_fw(struct i2c_client *client, struct mt9m111 *mt9m111)
drivers/media/i2c/mt9m111.c
1252
mt9m111->pclk_sample = !!(bus_cfg.bus.parallel.flags &
drivers/media/i2c/mt9m111.c
1262
struct mt9m111 *mt9m111;
drivers/media/i2c/mt9m111.c
1272
mt9m111 = devm_kzalloc(&client->dev, sizeof(struct mt9m111), GFP_KERNEL);
drivers/media/i2c/mt9m111.c
1273
if (!mt9m111)
drivers/media/i2c/mt9m111.c
1277
ret = mt9m111_probe_fw(client, mt9m111);
drivers/media/i2c/mt9m111.c
1282
mt9m111->clk = devm_v4l2_sensor_clk_get(&client->dev, "mclk");
drivers/media/i2c/mt9m111.c
1283
if (IS_ERR(mt9m111->clk))
drivers/media/i2c/mt9m111.c
1284
return dev_err_probe(&client->dev, PTR_ERR(mt9m111->clk),
drivers/media/i2c/mt9m111.c
1287
mt9m111->regulator = devm_regulator_get(&client->dev, "vdd");
drivers/media/i2c/mt9m111.c
1288
if (IS_ERR(mt9m111->regulator)) {
drivers/media/i2c/mt9m111.c
1290
mt9m111->regulator);
drivers/media/i2c/mt9m111.c
1291
return PTR_ERR(mt9m111->regulator);
drivers/media/i2c/mt9m111.c
1295
mt9m111->ctx = &context_b;
drivers/media/i2c/mt9m111.c
1297
v4l2_i2c_subdev_init(&mt9m111->subdev, client, &mt9m111_subdev_ops);
drivers/media/i2c/mt9m111.c
1298
mt9m111->subdev.internal_ops = &mt9m111_internal_ops;
drivers/media/i2c/mt9m111.c
1299
mt9m111->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
drivers/media/i2c/mt9m111.c
1302
v4l2_ctrl_handler_init(&mt9m111->hdl, 7);
drivers/media/i2c/mt9m111.c
1303
v4l2_ctrl_new_std(&mt9m111->hdl, &mt9m111_ctrl_ops,
drivers/media/i2c/mt9m111.c
1305
v4l2_ctrl_new_std(&mt9m111->hdl, &mt9m111_ctrl_ops,
drivers/media/i2c/mt9m111.c
1307
v4l2_ctrl_new_std(&mt9m111->hdl, &mt9m111_ctrl_ops,
drivers/media/i2c/mt9m111.c
1309
mt9m111->gain = v4l2_ctrl_new_std(&mt9m111->hdl, &mt9m111_ctrl_ops,
drivers/media/i2c/mt9m111.c
1311
v4l2_ctrl_new_std_menu(&mt9m111->hdl,
drivers/media/i2c/mt9m111.c
1314
v4l2_ctrl_new_std_menu_items(&mt9m111->hdl,
drivers/media/i2c/mt9m111.c
1318
v4l2_ctrl_new_std_menu(&mt9m111->hdl, &mt9m111_ctrl_ops,
drivers/media/i2c/mt9m111.c
1326
mt9m111->subdev.ctrl_handler = &mt9m111->hdl;
drivers/media/i2c/mt9m111.c
1327
if (mt9m111->hdl.error) {
drivers/media/i2c/mt9m111.c
1328
ret = mt9m111->hdl.error;
drivers/media/i2c/mt9m111.c
1332
mt9m111->pad.flags = MEDIA_PAD_FL_SOURCE;
drivers/media/i2c/mt9m111.c
1333
mt9m111->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR;
drivers/media/i2c/mt9m111.c
1334
ret = media_entity_pads_init(&mt9m111->subdev.entity, 1, &mt9m111->pad);
drivers/media/i2c/mt9m111.c
1338
mt9m111->current_mode = &mt9m111_mode_data[MT9M111_MODE_SXGA_15FPS];
drivers/media/i2c/mt9m111.c
1339
mt9m111->frame_interval.numerator = 1;
drivers/media/i2c/mt9m111.c
1340
mt9m111->frame_interval.denominator = mt9m111->current_mode->max_fps;
drivers/media/i2c/mt9m111.c
1343
mt9m111->rect.left = MT9M111_MIN_DARK_COLS;
drivers/media/i2c/mt9m111.c
1344
mt9m111->rect.top = MT9M111_MIN_DARK_ROWS;
drivers/media/i2c/mt9m111.c
1345
mt9m111->rect.width = MT9M111_MAX_WIDTH;
drivers/media/i2c/mt9m111.c
1346
mt9m111->rect.height = MT9M111_MAX_HEIGHT;
drivers/media/i2c/mt9m111.c
1347
mt9m111->width = mt9m111->rect.width;
drivers/media/i2c/mt9m111.c
1348
mt9m111->height = mt9m111->rect.height;
drivers/media/i2c/mt9m111.c
1349
mt9m111->fmt = &mt9m111_colour_fmts[0];
drivers/media/i2c/mt9m111.c
1350
mt9m111->lastpage = -1;
drivers/media/i2c/mt9m111.c
1351
mutex_init(&mt9m111->power_lock);
drivers/media/i2c/mt9m111.c
1357
mt9m111->subdev.dev = &client->dev;
drivers/media/i2c/mt9m111.c
1358
ret = v4l2_async_register_subdev(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
1365
media_entity_cleanup(&mt9m111->subdev.entity);
drivers/media/i2c/mt9m111.c
1367
v4l2_ctrl_handler_free(&mt9m111->hdl);
drivers/media/i2c/mt9m111.c
1374
struct mt9m111 *mt9m111 = to_mt9m111(client);
drivers/media/i2c/mt9m111.c
1376
v4l2_async_unregister_subdev(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
1377
media_entity_cleanup(&mt9m111->subdev.entity);
drivers/media/i2c/mt9m111.c
1378
v4l2_ctrl_handler_free(&mt9m111->hdl);
drivers/media/i2c/mt9m111.c
282
static const struct mt9m111_datafmt *mt9m111_find_datafmt(struct mt9m111 *mt9m111,
drivers/media/i2c/mt9m111.c
290
return mt9m111->fmt;
drivers/media/i2c/mt9m111.c
293
static struct mt9m111 *to_mt9m111(const struct i2c_client *client)
drivers/media/i2c/mt9m111.c
295
return container_of(i2c_get_clientdata(client), struct mt9m111, subdev);
drivers/media/i2c/mt9m111.c
302
struct mt9m111 *mt9m111 = to_mt9m111(client);
drivers/media/i2c/mt9m111.c
305
if (page == mt9m111->lastpage)
drivers/media/i2c/mt9m111.c
312
mt9m111->lastpage = page;
drivers/media/i2c/mt9m111.c
373
static int mt9m111_set_context(struct mt9m111 *mt9m111,
drivers/media/i2c/mt9m111.c
376
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
380
static int mt9m111_setup_rect_ctx(struct mt9m111 *mt9m111,
drivers/media/i2c/mt9m111.c
384
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
395
static int mt9m111_setup_geometry(struct mt9m111 *mt9m111, struct v4l2_rect *rect,
drivers/media/i2c/mt9m111.c
398
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
413
ret = mt9m111_setup_rect_ctx(mt9m111, &context_b,
drivers/media/i2c/mt9m111.c
416
ret = mt9m111_setup_rect_ctx(mt9m111, &context_a,
drivers/media/i2c/mt9m111.c
427
static int mt9m111_enable(struct mt9m111 *mt9m111)
drivers/media/i2c/mt9m111.c
429
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
433
static int mt9m111_reset(struct mt9m111 *mt9m111)
drivers/media/i2c/mt9m111.c
435
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
453
struct mt9m111 *mt9m111 = to_mt9m111(client);
drivers/media/i2c/mt9m111.c
462
if (mt9m111->fmt->code == MEDIA_BUS_FMT_SBGGR8_1X8 ||
drivers/media/i2c/mt9m111.c
463
mt9m111->fmt->code == MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_LE) {
drivers/media/i2c/mt9m111.c
479
width = min(mt9m111->width, rect.width);
drivers/media/i2c/mt9m111.c
480
height = min(mt9m111->height, rect.height);
drivers/media/i2c/mt9m111.c
482
ret = mt9m111_setup_geometry(mt9m111, &rect, width, height, mt9m111->fmt->code);
drivers/media/i2c/mt9m111.c
484
mt9m111->rect = rect;
drivers/media/i2c/mt9m111.c
485
mt9m111->width = width;
drivers/media/i2c/mt9m111.c
486
mt9m111->height = height;
drivers/media/i2c/mt9m111.c
497
struct mt9m111 *mt9m111 = to_mt9m111(client);
drivers/media/i2c/mt9m111.c
510
sel->r = mt9m111->rect;
drivers/media/i2c/mt9m111.c
522
struct mt9m111 *mt9m111 = container_of(sd, struct mt9m111, subdev);
drivers/media/i2c/mt9m111.c
533
mf->width = mt9m111->width;
drivers/media/i2c/mt9m111.c
534
mf->height = mt9m111->height;
drivers/media/i2c/mt9m111.c
535
mf->code = mt9m111->fmt->code;
drivers/media/i2c/mt9m111.c
536
mf->colorspace = mt9m111->fmt->colorspace;
drivers/media/i2c/mt9m111.c
545
static int mt9m111_set_pixfmt(struct mt9m111 *mt9m111,
drivers/media/i2c/mt9m111.c
548
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
607
if (mt9m111->pclk_sample == 0)
drivers/media/i2c/mt9m111.c
625
struct mt9m111 *mt9m111 = container_of(sd, struct mt9m111, subdev);
drivers/media/i2c/mt9m111.c
627
struct v4l2_rect *rect = &mt9m111->rect;
drivers/media/i2c/mt9m111.c
631
if (mt9m111->is_streaming)
drivers/media/i2c/mt9m111.c
637
fmt = mt9m111_find_datafmt(mt9m111, mf->code);
drivers/media/i2c/mt9m111.c
678
ret = mt9m111_setup_geometry(mt9m111, rect, mf->width, mf->height, mf->code);
drivers/media/i2c/mt9m111.c
680
ret = mt9m111_set_pixfmt(mt9m111, mf->code);
drivers/media/i2c/mt9m111.c
682
mt9m111->width = mf->width;
drivers/media/i2c/mt9m111.c
683
mt9m111->height = mf->height;
drivers/media/i2c/mt9m111.c
684
mt9m111->fmt = fmt;
drivers/media/i2c/mt9m111.c
691
mt9m111_find_mode(struct mt9m111 *mt9m111, unsigned int req_fps,
drivers/media/i2c/mt9m111.c
695
struct v4l2_rect *sensor_rect = &mt9m111->rect;
drivers/media/i2c/mt9m111.c
707
dev_info(mt9m111->subdev.dev,
drivers/media/i2c/mt9m111.c
715
dev_dbg(mt9m111->subdev.dev,
drivers/media/i2c/mt9m111.c
740
mt9m111->ctx = (best_gap_idx == MT9M111_MODE_QSXGA_30FPS) ? &context_a :
drivers/media/i2c/mt9m111.c
780
static int mt9m111_set_flip(struct mt9m111 *mt9m111, int flip, int mask)
drivers/media/i2c/mt9m111.c
782
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
786
ret = mt9m111_reg_set(client, mt9m111->ctx->read_mode, mask);
drivers/media/i2c/mt9m111.c
788
ret = mt9m111_reg_clear(client, mt9m111->ctx->read_mode, mask);
drivers/media/i2c/mt9m111.c
793
static int mt9m111_get_global_gain(struct mt9m111 *mt9m111)
drivers/media/i2c/mt9m111.c
795
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
805
static int mt9m111_set_global_gain(struct mt9m111 *mt9m111, int gain)
drivers/media/i2c/mt9m111.c
807
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
823
static int mt9m111_set_autoexposure(struct mt9m111 *mt9m111, int val)
drivers/media/i2c/mt9m111.c
825
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
832
static int mt9m111_set_autowhitebalance(struct mt9m111 *mt9m111, int on)
drivers/media/i2c/mt9m111.c
834
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
852
static int mt9m111_set_test_pattern(struct mt9m111 *mt9m111, int val)
drivers/media/i2c/mt9m111.c
854
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
860
static int mt9m111_set_colorfx(struct mt9m111 *mt9m111, int val)
drivers/media/i2c/mt9m111.c
862
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
885
struct mt9m111 *mt9m111 = container_of(ctrl->handler,
drivers/media/i2c/mt9m111.c
886
struct mt9m111, hdl);
drivers/media/i2c/mt9m111.c
890
return mt9m111_set_flip(mt9m111, ctrl->val,
drivers/media/i2c/mt9m111.c
893
return mt9m111_set_flip(mt9m111, ctrl->val,
drivers/media/i2c/mt9m111.c
896
return mt9m111_set_global_gain(mt9m111, ctrl->val);
drivers/media/i2c/mt9m111.c
898
return mt9m111_set_autoexposure(mt9m111, ctrl->val);
drivers/media/i2c/mt9m111.c
900
return mt9m111_set_autowhitebalance(mt9m111, ctrl->val);
drivers/media/i2c/mt9m111.c
902
return mt9m111_set_test_pattern(mt9m111, ctrl->val);
drivers/media/i2c/mt9m111.c
904
return mt9m111_set_colorfx(mt9m111, ctrl->val);
drivers/media/i2c/mt9m111.c
910
static int mt9m111_suspend(struct mt9m111 *mt9m111)
drivers/media/i2c/mt9m111.c
912
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
915
v4l2_ctrl_s_ctrl(mt9m111->gain, mt9m111_get_global_gain(mt9m111));
drivers/media/i2c/mt9m111.c
928
static void mt9m111_restore_state(struct mt9m111 *mt9m111)
drivers/media/i2c/mt9m111.c
930
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
932
mt9m111_set_context(mt9m111, mt9m111->ctx);
drivers/media/i2c/mt9m111.c
933
mt9m111_set_pixfmt(mt9m111, mt9m111->fmt->code);
drivers/media/i2c/mt9m111.c
934
mt9m111_setup_geometry(mt9m111, &mt9m111->rect,
drivers/media/i2c/mt9m111.c
935
mt9m111->width, mt9m111->height, mt9m111->fmt->code);
drivers/media/i2c/mt9m111.c
936
v4l2_ctrl_handler_setup(&mt9m111->hdl);
drivers/media/i2c/mt9m111.c
937
mt9m111_reg_mask(client, mt9m111->ctx->read_mode,
drivers/media/i2c/mt9m111.c
938
mt9m111->current_mode->reg_val,
drivers/media/i2c/mt9m111.c
939
mt9m111->current_mode->reg_mask);
drivers/media/i2c/mt9m111.c
942
static int mt9m111_resume(struct mt9m111 *mt9m111)
drivers/media/i2c/mt9m111.c
944
int ret = mt9m111_enable(mt9m111);
drivers/media/i2c/mt9m111.c
946
ret = mt9m111_reset(mt9m111);
drivers/media/i2c/mt9m111.c
948
mt9m111_restore_state(mt9m111);
drivers/media/i2c/mt9m111.c
953
static int mt9m111_init(struct mt9m111 *mt9m111)
drivers/media/i2c/mt9m111.c
955
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
958
ret = mt9m111_enable(mt9m111);
drivers/media/i2c/mt9m111.c
960
ret = mt9m111_reset(mt9m111);
drivers/media/i2c/mt9m111.c
962
ret = mt9m111_set_context(mt9m111, mt9m111->ctx);
drivers/media/i2c/mt9m111.c
968
static int mt9m111_power_on(struct mt9m111 *mt9m111)
drivers/media/i2c/mt9m111.c
970
struct i2c_client *client = v4l2_get_subdevdata(&mt9m111->subdev);
drivers/media/i2c/mt9m111.c
973
ret = clk_prepare_enable(mt9m111->clk);
drivers/media/i2c/mt9m111.c
977
ret = regulator_enable(mt9m111->regulator);
drivers/media/i2c/mt9m111.c
981
ret = mt9m111_resume(mt9m111);
drivers/media/i2c/mt9m111.c
988
regulator_disable(mt9m111->regulator);
drivers/media/i2c/mt9m111.c
991
clk_disable_unprepare(mt9m111->clk);
drivers/media/i2c/mt9m111.c
998
static void mt9m111_power_off(struct mt9m111 *mt9m111)
drivers/media/usb/gspca/m5602/m5602_core.c
225
sd->sensor = &mt9m111;
drivers/media/usb/gspca/m5602/m5602_mt9m111.c
203
pr_info("Forcing a %s sensor\n", mt9m111.name);
drivers/media/usb/gspca/m5602/m5602_mt9m111.h
113
static const struct m5602_sensor mt9m111 = {