mt9v111 278 drivers/media/i2c/mt9v111.c struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd); mt9v111 282 drivers/media/i2c/mt9v111.c if (mt9v111->addr_space == addr_space) mt9v111 297 drivers/media/i2c/mt9v111.c mt9v111->addr_space = addr_space; mt9v111 363 drivers/media/i2c/mt9v111.c struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd); mt9v111 366 drivers/media/i2c/mt9v111.c ret = clk_prepare_enable(mt9v111->clk); mt9v111 370 drivers/media/i2c/mt9v111.c clk_set_rate(mt9v111->clk, mt9v111->sysclk); mt9v111 372 drivers/media/i2c/mt9v111.c gpiod_set_value(mt9v111->standby, 0); mt9v111 375 drivers/media/i2c/mt9v111.c gpiod_set_value(mt9v111->oe, 1); mt9v111 383 drivers/media/i2c/mt9v111.c struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd); mt9v111 385 drivers/media/i2c/mt9v111.c gpiod_set_value(mt9v111->oe, 0); mt9v111 388 drivers/media/i2c/mt9v111.c gpiod_set_value(mt9v111->standby, 1); mt9v111 391 drivers/media/i2c/mt9v111.c clk_disable_unprepare(mt9v111->clk); mt9v111 396 drivers/media/i2c/mt9v111.c static int __mt9v111_hw_reset(struct mt9v111_dev *mt9v111) mt9v111 398 drivers/media/i2c/mt9v111.c if (!mt9v111->reset) mt9v111 401 drivers/media/i2c/mt9v111.c gpiod_set_value(mt9v111->reset, 1); mt9v111 404 drivers/media/i2c/mt9v111.c gpiod_set_value(mt9v111->reset, 0); mt9v111 410 drivers/media/i2c/mt9v111.c static int __mt9v111_sw_reset(struct mt9v111_dev *mt9v111) mt9v111 412 drivers/media/i2c/mt9v111.c struct i2c_client *c = mt9v111->client; mt9v111 448 drivers/media/i2c/mt9v111.c static int mt9v111_calc_frame_rate(struct mt9v111_dev *mt9v111, mt9v111 493 drivers/media/i2c/mt9v111.c pclk = DIV_ROUND_CLOSEST(mt9v111->sysclk, 2); mt9v111 520 drivers/media/i2c/mt9v111.c ret = v4l2_ctrl_s_ctrl_int64(mt9v111->hblank, hb); mt9v111 524 drivers/media/i2c/mt9v111.c ret = v4l2_ctrl_s_ctrl_int64(mt9v111->vblank, vb); mt9v111 534 drivers/media/i2c/mt9v111.c static int mt9v111_hw_config(struct mt9v111_dev *mt9v111) mt9v111 536 drivers/media/i2c/mt9v111.c struct i2c_client *c = mt9v111->client; mt9v111 541 drivers/media/i2c/mt9v111.c ret = __mt9v111_hw_reset(mt9v111); mt9v111 543 drivers/media/i2c/mt9v111.c ret = __mt9v111_sw_reset(mt9v111); mt9v111 548 drivers/media/i2c/mt9v111.c ret = mt9v111->sysclk < DIV_ROUND_CLOSEST(MT9V111_MAX_CLKIN, 2) ? mt9v111 564 drivers/media/i2c/mt9v111.c switch (mt9v111->fmt.code) { mt9v111 620 drivers/media/i2c/mt9v111.c mt9v111->fmt.width); mt9v111 625 drivers/media/i2c/mt9v111.c mt9v111->fmt.height); mt9v111 630 drivers/media/i2c/mt9v111.c ret = v4l2_ctrl_handler_setup(&mt9v111->ctrls); mt9v111 648 drivers/media/i2c/mt9v111.c struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd); mt9v111 652 drivers/media/i2c/mt9v111.c mutex_lock(&mt9v111->pwr_mutex); mt9v111 658 drivers/media/i2c/mt9v111.c pwr_count = mt9v111->pwr_count; mt9v111 665 drivers/media/i2c/mt9v111.c mt9v111->pwr_count = pwr_count; mt9v111 667 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->pwr_mutex); mt9v111 677 drivers/media/i2c/mt9v111.c mt9v111->pwr_count = pwr_count; mt9v111 679 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->pwr_mutex); mt9v111 686 drivers/media/i2c/mt9v111.c struct mt9v111_dev *mt9v111 = sd_to_mt9v111(subdev); mt9v111 689 drivers/media/i2c/mt9v111.c mutex_lock(&mt9v111->stream_mutex); mt9v111 691 drivers/media/i2c/mt9v111.c if (mt9v111->streaming == enable) { mt9v111 692 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->stream_mutex); mt9v111 700 drivers/media/i2c/mt9v111.c if (enable && mt9v111->pending) { mt9v111 701 drivers/media/i2c/mt9v111.c ret = mt9v111_hw_config(mt9v111); mt9v111 710 drivers/media/i2c/mt9v111.c mt9v111->pending = false; mt9v111 713 drivers/media/i2c/mt9v111.c mt9v111->streaming = enable ? true : false; mt9v111 714 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->stream_mutex); mt9v111 719 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->stream_mutex); mt9v111 727 drivers/media/i2c/mt9v111.c struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd); mt9v111 737 drivers/media/i2c/mt9v111.c mutex_lock(&mt9v111->stream_mutex); mt9v111 739 drivers/media/i2c/mt9v111.c if (mt9v111->streaming) { mt9v111 740 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->stream_mutex); mt9v111 744 drivers/media/i2c/mt9v111.c if (mt9v111->fps == fps) { mt9v111 745 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->stream_mutex); mt9v111 750 drivers/media/i2c/mt9v111.c if (mt9v111->fmt.width < QVGA_WIDTH && mt9v111 751 drivers/media/i2c/mt9v111.c mt9v111->fmt.height < QVGA_HEIGHT) mt9v111 753 drivers/media/i2c/mt9v111.c else if (mt9v111->fmt.width < CIF_WIDTH && mt9v111 754 drivers/media/i2c/mt9v111.c mt9v111->fmt.height < CIF_HEIGHT) mt9v111 757 drivers/media/i2c/mt9v111.c max_fps = mt9v111->sysclk < mt9v111 762 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->stream_mutex); mt9v111 766 drivers/media/i2c/mt9v111.c mt9v111_calc_frame_rate(mt9v111, tpf); mt9v111 768 drivers/media/i2c/mt9v111.c mt9v111->fps = fps; mt9v111 769 drivers/media/i2c/mt9v111.c mt9v111->pending = true; mt9v111 771 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->stream_mutex); mt9v111 779 drivers/media/i2c/mt9v111.c struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd); mt9v111 782 drivers/media/i2c/mt9v111.c mutex_lock(&mt9v111->stream_mutex); mt9v111 785 drivers/media/i2c/mt9v111.c tpf->denominator = mt9v111->fps; mt9v111 787 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->stream_mutex); mt9v111 793 drivers/media/i2c/mt9v111.c struct mt9v111_dev *mt9v111, mt9v111 801 drivers/media/i2c/mt9v111.c return v4l2_subdev_get_try_format(&mt9v111->sd, cfg, pad); mt9v111 806 drivers/media/i2c/mt9v111.c return &mt9v111->fmt; mt9v111 866 drivers/media/i2c/mt9v111.c struct mt9v111_dev *mt9v111 = sd_to_mt9v111(subdev); mt9v111 871 drivers/media/i2c/mt9v111.c mutex_lock(&mt9v111->stream_mutex); mt9v111 872 drivers/media/i2c/mt9v111.c format->format = *__mt9v111_get_pad_format(mt9v111, cfg, format->pad, mt9v111 874 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->stream_mutex); mt9v111 883 drivers/media/i2c/mt9v111.c struct mt9v111_dev *mt9v111 = sd_to_mt9v111(subdev); mt9v111 890 drivers/media/i2c/mt9v111.c mutex_lock(&mt9v111->stream_mutex); mt9v111 891 drivers/media/i2c/mt9v111.c if (mt9v111->streaming) { mt9v111 892 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->stream_mutex); mt9v111 897 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->stream_mutex); mt9v111 928 drivers/media/i2c/mt9v111.c __fmt = __mt9v111_get_pad_format(mt9v111, cfg, format->pad, mt9v111 943 drivers/media/i2c/mt9v111.c mt9v111->pending = true; mt9v111 945 drivers/media/i2c/mt9v111.c dev_dbg(mt9v111->dev, "%s: mbus_code: %x - (%ux%u)\n", mt9v111 951 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->stream_mutex); mt9v111 998 drivers/media/i2c/mt9v111.c struct mt9v111_dev *mt9v111 = container_of(ctrl->handler, mt9v111 1003 drivers/media/i2c/mt9v111.c mutex_lock(&mt9v111->pwr_mutex); mt9v111 1008 drivers/media/i2c/mt9v111.c if (!mt9v111->pwr_count) { mt9v111 1009 drivers/media/i2c/mt9v111.c mt9v111->pending = true; mt9v111 1010 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->pwr_mutex); mt9v111 1013 drivers/media/i2c/mt9v111.c mutex_unlock(&mt9v111->pwr_mutex); mt9v111 1022 drivers/media/i2c/mt9v111.c if (mt9v111->auto_exp->is_new || mt9v111->auto_awb->is_new) { mt9v111 1023 drivers/media/i2c/mt9v111.c if (mt9v111->auto_exp->val == V4L2_EXPOSURE_MANUAL && mt9v111 1024 drivers/media/i2c/mt9v111.c mt9v111->auto_awb->val == V4L2_WHITE_BALANCE_MANUAL) mt9v111 1025 drivers/media/i2c/mt9v111.c ret = mt9v111_update(mt9v111->client, MT9V111_R01_IFP, mt9v111 1030 drivers/media/i2c/mt9v111.c ret = mt9v111_update(mt9v111->client, MT9V111_R01_IFP, mt9v111 1041 drivers/media/i2c/mt9v111.c ret = mt9v111_update(mt9v111->client, MT9V111_R01_IFP, mt9v111 1048 drivers/media/i2c/mt9v111.c ret = mt9v111_update(mt9v111->client, MT9V111_R01_IFP, mt9v111 1055 drivers/media/i2c/mt9v111.c ret = mt9v111_update(mt9v111->client, MT9V111_R01_CORE, mt9v111 1058 drivers/media/i2c/mt9v111.c mt9v111->hblank->val); mt9v111 1061 drivers/media/i2c/mt9v111.c ret = mt9v111_update(mt9v111->client, MT9V111_R01_CORE, mt9v111 1064 drivers/media/i2c/mt9v111.c mt9v111->vblank->val); mt9v111 1075 drivers/media/i2c/mt9v111.c static int mt9v111_chip_probe(struct mt9v111_dev *mt9v111) mt9v111 1080 drivers/media/i2c/mt9v111.c ret = __mt9v111_power_on(&mt9v111->sd); mt9v111 1084 drivers/media/i2c/mt9v111.c ret = mt9v111_read(mt9v111->client, MT9V111_R01_CORE, mt9v111 1091 drivers/media/i2c/mt9v111.c dev_err(mt9v111->dev, mt9v111 1098 drivers/media/i2c/mt9v111.c dev_dbg(mt9v111->dev, "Chip identified: 0x%2x%2x\n", mt9v111 1102 drivers/media/i2c/mt9v111.c __mt9v111_power_off(&mt9v111->sd); mt9v111 1109 drivers/media/i2c/mt9v111.c struct mt9v111_dev *mt9v111; mt9v111 1113 drivers/media/i2c/mt9v111.c mt9v111 = devm_kzalloc(&client->dev, sizeof(*mt9v111), GFP_KERNEL); mt9v111 1114 drivers/media/i2c/mt9v111.c if (!mt9v111) mt9v111 1117 drivers/media/i2c/mt9v111.c mt9v111->dev = &client->dev; mt9v111 1118 drivers/media/i2c/mt9v111.c mt9v111->client = client; mt9v111 1120 drivers/media/i2c/mt9v111.c mt9v111->clk = devm_clk_get(&client->dev, NULL); mt9v111 1121 drivers/media/i2c/mt9v111.c if (IS_ERR(mt9v111->clk)) mt9v111 1122 drivers/media/i2c/mt9v111.c return PTR_ERR(mt9v111->clk); mt9v111 1124 drivers/media/i2c/mt9v111.c mt9v111->sysclk = clk_get_rate(mt9v111->clk); mt9v111 1125 drivers/media/i2c/mt9v111.c if (mt9v111->sysclk > MT9V111_MAX_CLKIN) mt9v111 1128 drivers/media/i2c/mt9v111.c mt9v111->oe = devm_gpiod_get_optional(&client->dev, "enable", mt9v111 1130 drivers/media/i2c/mt9v111.c if (IS_ERR(mt9v111->oe)) { mt9v111 1132 drivers/media/i2c/mt9v111.c PTR_ERR(mt9v111->oe)); mt9v111 1133 drivers/media/i2c/mt9v111.c return PTR_ERR(mt9v111->oe); mt9v111 1136 drivers/media/i2c/mt9v111.c mt9v111->standby = devm_gpiod_get_optional(&client->dev, "standby", mt9v111 1138 drivers/media/i2c/mt9v111.c if (IS_ERR(mt9v111->standby)) { mt9v111 1140 drivers/media/i2c/mt9v111.c PTR_ERR(mt9v111->standby)); mt9v111 1141 drivers/media/i2c/mt9v111.c return PTR_ERR(mt9v111->standby); mt9v111 1144 drivers/media/i2c/mt9v111.c mt9v111->reset = devm_gpiod_get_optional(&client->dev, "reset", mt9v111 1146 drivers/media/i2c/mt9v111.c if (IS_ERR(mt9v111->reset)) { mt9v111 1148 drivers/media/i2c/mt9v111.c PTR_ERR(mt9v111->reset)); mt9v111 1149 drivers/media/i2c/mt9v111.c return PTR_ERR(mt9v111->reset); mt9v111 1152 drivers/media/i2c/mt9v111.c mutex_init(&mt9v111->pwr_mutex); mt9v111 1153 drivers/media/i2c/mt9v111.c mutex_init(&mt9v111->stream_mutex); mt9v111 1155 drivers/media/i2c/mt9v111.c v4l2_ctrl_handler_init(&mt9v111->ctrls, 5); mt9v111 1157 drivers/media/i2c/mt9v111.c mt9v111->auto_awb = v4l2_ctrl_new_std(&mt9v111->ctrls, mt9v111 1162 drivers/media/i2c/mt9v111.c mt9v111->auto_exp = v4l2_ctrl_new_std_menu(&mt9v111->ctrls, mt9v111 1167 drivers/media/i2c/mt9v111.c mt9v111->hblank = v4l2_ctrl_new_std(&mt9v111->ctrls, &mt9v111_ctrl_ops, mt9v111 1172 drivers/media/i2c/mt9v111.c mt9v111->vblank = v4l2_ctrl_new_std(&mt9v111->ctrls, &mt9v111_ctrl_ops, mt9v111 1179 drivers/media/i2c/mt9v111.c v4l2_ctrl_new_std(&mt9v111->ctrls, &mt9v111_ctrl_ops, mt9v111 1181 drivers/media/i2c/mt9v111.c DIV_ROUND_CLOSEST(mt9v111->sysclk, 2), 1, mt9v111 1182 drivers/media/i2c/mt9v111.c DIV_ROUND_CLOSEST(mt9v111->sysclk, 2)); mt9v111 1184 drivers/media/i2c/mt9v111.c if (mt9v111->ctrls.error) { mt9v111 1185 drivers/media/i2c/mt9v111.c ret = mt9v111->ctrls.error; mt9v111 1188 drivers/media/i2c/mt9v111.c mt9v111->sd.ctrl_handler = &mt9v111->ctrls; mt9v111 1191 drivers/media/i2c/mt9v111.c mt9v111->fmt = mt9v111_def_fmt; mt9v111 1194 drivers/media/i2c/mt9v111.c mt9v111->fps = 15; mt9v111 1196 drivers/media/i2c/mt9v111.c tpf.denominator = mt9v111->fps; mt9v111 1197 drivers/media/i2c/mt9v111.c mt9v111_calc_frame_rate(mt9v111, &tpf); mt9v111 1199 drivers/media/i2c/mt9v111.c mt9v111->pwr_count = 0; mt9v111 1200 drivers/media/i2c/mt9v111.c mt9v111->addr_space = MT9V111_R01_IFP; mt9v111 1201 drivers/media/i2c/mt9v111.c mt9v111->pending = true; mt9v111 1203 drivers/media/i2c/mt9v111.c v4l2_i2c_subdev_init(&mt9v111->sd, client, &mt9v111_ops); mt9v111 1206 drivers/media/i2c/mt9v111.c mt9v111->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; mt9v111 1207 drivers/media/i2c/mt9v111.c mt9v111->sd.entity.ops = &mt9v111_subdev_entity_ops; mt9v111 1208 drivers/media/i2c/mt9v111.c mt9v111->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR; mt9v111 1210 drivers/media/i2c/mt9v111.c mt9v111->pad.flags = MEDIA_PAD_FL_SOURCE; mt9v111 1211 drivers/media/i2c/mt9v111.c ret = media_entity_pads_init(&mt9v111->sd.entity, 1, &mt9v111->pad); mt9v111 1216 drivers/media/i2c/mt9v111.c ret = mt9v111_chip_probe(mt9v111); mt9v111 1220 drivers/media/i2c/mt9v111.c ret = v4l2_async_register_subdev(&mt9v111->sd); mt9v111 1228 drivers/media/i2c/mt9v111.c media_entity_cleanup(&mt9v111->sd.entity); mt9v111 1232 drivers/media/i2c/mt9v111.c v4l2_ctrl_handler_free(&mt9v111->ctrls); mt9v111 1234 drivers/media/i2c/mt9v111.c mutex_destroy(&mt9v111->pwr_mutex); mt9v111 1235 drivers/media/i2c/mt9v111.c mutex_destroy(&mt9v111->stream_mutex); mt9v111 1243 drivers/media/i2c/mt9v111.c struct mt9v111_dev *mt9v111 = sd_to_mt9v111(sd); mt9v111 1251 drivers/media/i2c/mt9v111.c v4l2_ctrl_handler_free(&mt9v111->ctrls); mt9v111 1253 drivers/media/i2c/mt9v111.c mutex_destroy(&mt9v111->pwr_mutex); mt9v111 1254 drivers/media/i2c/mt9v111.c mutex_destroy(&mt9v111->stream_mutex); mt9v111 1256 drivers/media/i2c/mt9v111.c devm_gpiod_put(mt9v111->dev, mt9v111->oe); mt9v111 1257 drivers/media/i2c/mt9v111.c devm_gpiod_put(mt9v111->dev, mt9v111->standby); mt9v111 1258 drivers/media/i2c/mt9v111.c devm_gpiod_put(mt9v111->dev, mt9v111->reset); mt9v111 1260 drivers/media/i2c/mt9v111.c devm_clk_put(mt9v111->dev, mt9v111->clk);