mt9t001 135 drivers/media/i2c/mt9t001.c static inline struct mt9t001 *to_mt9t001(struct v4l2_subdev *sd) mt9t001 137 drivers/media/i2c/mt9t001.c return container_of(sd, struct mt9t001, subdev); mt9t001 150 drivers/media/i2c/mt9t001.c static int mt9t001_set_output_control(struct mt9t001 *mt9t001, u16 clear, mt9t001 153 drivers/media/i2c/mt9t001.c struct i2c_client *client = v4l2_get_subdevdata(&mt9t001->subdev); mt9t001 154 drivers/media/i2c/mt9t001.c u16 value = (mt9t001->output_control & ~clear) | set; mt9t001 157 drivers/media/i2c/mt9t001.c if (value == mt9t001->output_control) mt9t001 164 drivers/media/i2c/mt9t001.c mt9t001->output_control = value; mt9t001 168 drivers/media/i2c/mt9t001.c static int mt9t001_reset(struct mt9t001 *mt9t001) mt9t001 170 drivers/media/i2c/mt9t001.c struct i2c_client *client = v4l2_get_subdevdata(&mt9t001->subdev); mt9t001 182 drivers/media/i2c/mt9t001.c mt9t001->output_control = MT9T001_OUTPUT_CONTROL_DEF; mt9t001 184 drivers/media/i2c/mt9t001.c return mt9t001_set_output_control(mt9t001, mt9t001 189 drivers/media/i2c/mt9t001.c static int mt9t001_power_on(struct mt9t001 *mt9t001) mt9t001 194 drivers/media/i2c/mt9t001.c ret = regulator_bulk_enable(ARRAY_SIZE(mt9t001->regulators), mt9t001 195 drivers/media/i2c/mt9t001.c mt9t001->regulators); mt9t001 200 drivers/media/i2c/mt9t001.c ret = clk_prepare_enable(mt9t001->clk); mt9t001 202 drivers/media/i2c/mt9t001.c regulator_bulk_disable(ARRAY_SIZE(mt9t001->regulators), mt9t001 203 drivers/media/i2c/mt9t001.c mt9t001->regulators); mt9t001 208 drivers/media/i2c/mt9t001.c static void mt9t001_power_off(struct mt9t001 *mt9t001) mt9t001 210 drivers/media/i2c/mt9t001.c regulator_bulk_disable(ARRAY_SIZE(mt9t001->regulators), mt9t001 211 drivers/media/i2c/mt9t001.c mt9t001->regulators); mt9t001 213 drivers/media/i2c/mt9t001.c clk_disable_unprepare(mt9t001->clk); mt9t001 216 drivers/media/i2c/mt9t001.c static int __mt9t001_set_power(struct mt9t001 *mt9t001, bool on) mt9t001 218 drivers/media/i2c/mt9t001.c struct i2c_client *client = v4l2_get_subdevdata(&mt9t001->subdev); mt9t001 222 drivers/media/i2c/mt9t001.c mt9t001_power_off(mt9t001); mt9t001 226 drivers/media/i2c/mt9t001.c ret = mt9t001_power_on(mt9t001); mt9t001 230 drivers/media/i2c/mt9t001.c ret = mt9t001_reset(mt9t001); mt9t001 236 drivers/media/i2c/mt9t001.c ret = v4l2_ctrl_handler_setup(&mt9t001->ctrls); mt9t001 245 drivers/media/i2c/mt9t001.c mt9t001_power_off(mt9t001); mt9t001 255 drivers/media/i2c/mt9t001.c __mt9t001_get_pad_format(struct mt9t001 *mt9t001, struct v4l2_subdev_pad_config *cfg, mt9t001 260 drivers/media/i2c/mt9t001.c return v4l2_subdev_get_try_format(&mt9t001->subdev, cfg, pad); mt9t001 262 drivers/media/i2c/mt9t001.c return &mt9t001->format; mt9t001 269 drivers/media/i2c/mt9t001.c __mt9t001_get_pad_crop(struct mt9t001 *mt9t001, struct v4l2_subdev_pad_config *cfg, mt9t001 274 drivers/media/i2c/mt9t001.c return v4l2_subdev_get_try_crop(&mt9t001->subdev, cfg, pad); mt9t001 276 drivers/media/i2c/mt9t001.c return &mt9t001->crop; mt9t001 287 drivers/media/i2c/mt9t001.c struct mt9t001 *mt9t001 = to_mt9t001(subdev); mt9t001 288 drivers/media/i2c/mt9t001.c struct v4l2_mbus_framefmt *format = &mt9t001->format; mt9t001 289 drivers/media/i2c/mt9t001.c struct v4l2_rect *crop = &mt9t001->crop; mt9t001 295 drivers/media/i2c/mt9t001.c return mt9t001_set_output_control(mt9t001, mode, 0); mt9t001 334 drivers/media/i2c/mt9t001.c return mt9t001_set_output_control(mt9t001, 0, mode); mt9t001 367 drivers/media/i2c/mt9t001.c struct mt9t001 *mt9t001 = to_mt9t001(subdev); mt9t001 369 drivers/media/i2c/mt9t001.c format->format = *__mt9t001_get_pad_format(mt9t001, cfg, format->pad, mt9t001 378 drivers/media/i2c/mt9t001.c struct mt9t001 *mt9t001 = to_mt9t001(subdev); mt9t001 386 drivers/media/i2c/mt9t001.c __crop = __mt9t001_get_pad_crop(mt9t001, cfg, format->pad, mt9t001 402 drivers/media/i2c/mt9t001.c __format = __mt9t001_get_pad_format(mt9t001, cfg, format->pad, mt9t001 416 drivers/media/i2c/mt9t001.c struct mt9t001 *mt9t001 = to_mt9t001(subdev); mt9t001 421 drivers/media/i2c/mt9t001.c sel->r = *__mt9t001_get_pad_crop(mt9t001, cfg, sel->pad, sel->which); mt9t001 429 drivers/media/i2c/mt9t001.c struct mt9t001 *mt9t001 = to_mt9t001(subdev); mt9t001 458 drivers/media/i2c/mt9t001.c __crop = __mt9t001_get_pad_crop(mt9t001, cfg, sel->pad, sel->which); mt9t001 464 drivers/media/i2c/mt9t001.c __format = __mt9t001_get_pad_format(mt9t001, cfg, sel->pad, mt9t001 518 drivers/media/i2c/mt9t001.c static int mt9t001_ctrl_freeze(struct mt9t001 *mt9t001, bool freeze) mt9t001 520 drivers/media/i2c/mt9t001.c return mt9t001_set_output_control(mt9t001, mt9t001 532 drivers/media/i2c/mt9t001.c struct mt9t001 *mt9t001 = mt9t001 533 drivers/media/i2c/mt9t001.c container_of(ctrl->handler, struct mt9t001, ctrls); mt9t001 534 drivers/media/i2c/mt9t001.c struct i2c_client *client = v4l2_get_subdevdata(&mt9t001->subdev); mt9t001 550 drivers/media/i2c/mt9t001.c struct v4l2_ctrl *gain = mt9t001->gains[i]; mt9t001 557 drivers/media/i2c/mt9t001.c ret = mt9t001_ctrl_freeze(mt9t001, true); mt9t001 564 drivers/media/i2c/mt9t001.c struct v4l2_ctrl *gain = mt9t001->gains[i]; mt9t001 572 drivers/media/i2c/mt9t001.c mt9t001_ctrl_freeze(mt9t001, false); mt9t001 579 drivers/media/i2c/mt9t001.c ret = mt9t001_ctrl_freeze(mt9t001, false); mt9t001 596 drivers/media/i2c/mt9t001.c return mt9t001_set_output_control(mt9t001, mt9t001 610 drivers/media/i2c/mt9t001.c mt9t001->black_level = value; mt9t001 631 drivers/media/i2c/mt9t001.c mt9t001->black_level); mt9t001 740 drivers/media/i2c/mt9t001.c struct mt9t001 *mt9t001 = to_mt9t001(subdev); mt9t001 743 drivers/media/i2c/mt9t001.c mutex_lock(&mt9t001->power_lock); mt9t001 748 drivers/media/i2c/mt9t001.c if (mt9t001->power_count == !on) { mt9t001 749 drivers/media/i2c/mt9t001.c ret = __mt9t001_set_power(mt9t001, !!on); mt9t001 755 drivers/media/i2c/mt9t001.c mt9t001->power_count += on ? 1 : -1; mt9t001 756 drivers/media/i2c/mt9t001.c WARN_ON(mt9t001->power_count < 0); mt9t001 759 drivers/media/i2c/mt9t001.c mutex_unlock(&mt9t001->power_lock); mt9t001 770 drivers/media/i2c/mt9t001.c struct mt9t001 *mt9t001 = to_mt9t001(subdev); mt9t001 774 drivers/media/i2c/mt9t001.c ret = mt9t001_power_on(mt9t001); mt9t001 782 drivers/media/i2c/mt9t001.c mt9t001_power_off(mt9t001); mt9t001 855 drivers/media/i2c/mt9t001.c struct mt9t001 *mt9t001; mt9t001 871 drivers/media/i2c/mt9t001.c mt9t001 = devm_kzalloc(&client->dev, sizeof(*mt9t001), GFP_KERNEL); mt9t001 872 drivers/media/i2c/mt9t001.c if (!mt9t001) mt9t001 875 drivers/media/i2c/mt9t001.c mutex_init(&mt9t001->power_lock); mt9t001 876 drivers/media/i2c/mt9t001.c mt9t001->output_control = MT9T001_OUTPUT_CONTROL_DEF; mt9t001 878 drivers/media/i2c/mt9t001.c mt9t001->regulators[0].supply = "vdd"; mt9t001 879 drivers/media/i2c/mt9t001.c mt9t001->regulators[1].supply = "vaa"; mt9t001 881 drivers/media/i2c/mt9t001.c ret = devm_regulator_bulk_get(&client->dev, 2, mt9t001->regulators); mt9t001 887 drivers/media/i2c/mt9t001.c mt9t001->clk = devm_clk_get(&client->dev, NULL); mt9t001 888 drivers/media/i2c/mt9t001.c if (IS_ERR(mt9t001->clk)) { mt9t001 890 drivers/media/i2c/mt9t001.c return PTR_ERR(mt9t001->clk); mt9t001 893 drivers/media/i2c/mt9t001.c v4l2_ctrl_handler_init(&mt9t001->ctrls, ARRAY_SIZE(mt9t001_ctrls) + mt9t001 896 drivers/media/i2c/mt9t001.c v4l2_ctrl_new_std(&mt9t001->ctrls, &mt9t001_ctrl_ops, mt9t001 900 drivers/media/i2c/mt9t001.c v4l2_ctrl_new_std(&mt9t001->ctrls, &mt9t001_ctrl_ops, mt9t001 902 drivers/media/i2c/mt9t001.c v4l2_ctrl_new_std(&mt9t001->ctrls, &mt9t001_ctrl_ops, mt9t001 905 drivers/media/i2c/mt9t001.c v4l2_ctrl_new_std_menu_items(&mt9t001->ctrls, &mt9t001_ctrl_ops, mt9t001 911 drivers/media/i2c/mt9t001.c v4l2_ctrl_new_custom(&mt9t001->ctrls, &mt9t001_ctrls[i], NULL); mt9t001 914 drivers/media/i2c/mt9t001.c mt9t001->gains[i] = v4l2_ctrl_new_custom(&mt9t001->ctrls, mt9t001 917 drivers/media/i2c/mt9t001.c v4l2_ctrl_cluster(ARRAY_SIZE(mt9t001_gains), mt9t001->gains); mt9t001 919 drivers/media/i2c/mt9t001.c mt9t001->subdev.ctrl_handler = &mt9t001->ctrls; mt9t001 921 drivers/media/i2c/mt9t001.c if (mt9t001->ctrls.error) { mt9t001 923 drivers/media/i2c/mt9t001.c __func__, mt9t001->ctrls.error); mt9t001 928 drivers/media/i2c/mt9t001.c mt9t001->crop.left = MT9T001_COLUMN_START_DEF; mt9t001 929 drivers/media/i2c/mt9t001.c mt9t001->crop.top = MT9T001_ROW_START_DEF; mt9t001 930 drivers/media/i2c/mt9t001.c mt9t001->crop.width = MT9T001_WINDOW_WIDTH_DEF + 1; mt9t001 931 drivers/media/i2c/mt9t001.c mt9t001->crop.height = MT9T001_WINDOW_HEIGHT_DEF + 1; mt9t001 933 drivers/media/i2c/mt9t001.c mt9t001->format.code = MEDIA_BUS_FMT_SGRBG10_1X10; mt9t001 934 drivers/media/i2c/mt9t001.c mt9t001->format.width = MT9T001_WINDOW_WIDTH_DEF + 1; mt9t001 935 drivers/media/i2c/mt9t001.c mt9t001->format.height = MT9T001_WINDOW_HEIGHT_DEF + 1; mt9t001 936 drivers/media/i2c/mt9t001.c mt9t001->format.field = V4L2_FIELD_NONE; mt9t001 937 drivers/media/i2c/mt9t001.c mt9t001->format.colorspace = V4L2_COLORSPACE_SRGB; mt9t001 939 drivers/media/i2c/mt9t001.c v4l2_i2c_subdev_init(&mt9t001->subdev, client, &mt9t001_subdev_ops); mt9t001 940 drivers/media/i2c/mt9t001.c mt9t001->subdev.internal_ops = &mt9t001_subdev_internal_ops; mt9t001 941 drivers/media/i2c/mt9t001.c mt9t001->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; mt9t001 943 drivers/media/i2c/mt9t001.c mt9t001->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR; mt9t001 944 drivers/media/i2c/mt9t001.c mt9t001->pad.flags = MEDIA_PAD_FL_SOURCE; mt9t001 945 drivers/media/i2c/mt9t001.c ret = media_entity_pads_init(&mt9t001->subdev.entity, 1, &mt9t001->pad); mt9t001 949 drivers/media/i2c/mt9t001.c v4l2_ctrl_handler_free(&mt9t001->ctrls); mt9t001 950 drivers/media/i2c/mt9t001.c media_entity_cleanup(&mt9t001->subdev.entity); mt9t001 959 drivers/media/i2c/mt9t001.c struct mt9t001 *mt9t001 = to_mt9t001(subdev); mt9t001 961 drivers/media/i2c/mt9t001.c v4l2_ctrl_handler_free(&mt9t001->ctrls);