mt9p031.c (92fa766bb4189dc1110ba1fa10a391e27826725d) | mt9p031.c (69681cd04164812e4089f3f57e450e9b7c27c1c2) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Driver for MT9P031 CMOS Image Sensor from Aptina 4 * 5 * Copyright (C) 2011, Laurent Pinchart <laurent.pinchart@ideasonboard.com> 6 * Copyright (C) 2011, Javier Martin <javier.martin@vista-silicon.com> 7 * Copyright (C) 2011, Guennadi Liakhovetski <g.liakhovetski@gmx.de> 8 * --- 668 unchanged lines hidden (view full) --- 677 } 678 679 *__crop = rect; 680 sel->r = rect; 681 682 return 0; 683} 684 | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Driver for MT9P031 CMOS Image Sensor from Aptina 4 * 5 * Copyright (C) 2011, Laurent Pinchart <laurent.pinchart@ideasonboard.com> 6 * Copyright (C) 2011, Javier Martin <javier.martin@vista-silicon.com> 7 * Copyright (C) 2011, Guennadi Liakhovetski <g.liakhovetski@gmx.de> 8 * --- 668 unchanged lines hidden (view full) --- 677 } 678 679 *__crop = rect; 680 sel->r = rect; 681 682 return 0; 683} 684 |
685static int mt9p031_init_cfg(struct v4l2_subdev *subdev, 686 struct v4l2_subdev_state *sd_state) 687{ 688 struct mt9p031 *mt9p031 = to_mt9p031(subdev); 689 struct v4l2_mbus_framefmt *format; 690 struct v4l2_rect *crop; 691 const int which = sd_state == NULL ? V4L2_SUBDEV_FORMAT_ACTIVE : 692 V4L2_SUBDEV_FORMAT_TRY; 693 694 crop = __mt9p031_get_pad_crop(mt9p031, sd_state, 0, which); 695 v4l2_subdev_get_try_crop(subdev, sd_state, 0); 696 crop->left = MT9P031_COLUMN_START_DEF; 697 crop->top = MT9P031_ROW_START_DEF; 698 crop->width = MT9P031_WINDOW_WIDTH_DEF; 699 crop->height = MT9P031_WINDOW_HEIGHT_DEF; 700 701 format = __mt9p031_get_pad_format(mt9p031, sd_state, 0, which); 702 703 if (mt9p031->model == MT9P031_MODEL_MONOCHROME) 704 format->code = MEDIA_BUS_FMT_Y12_1X12; 705 else 706 format->code = MEDIA_BUS_FMT_SGRBG12_1X12; 707 708 format->width = MT9P031_WINDOW_WIDTH_DEF; 709 format->height = MT9P031_WINDOW_HEIGHT_DEF; 710 format->field = V4L2_FIELD_NONE; 711 format->colorspace = V4L2_COLORSPACE_SRGB; 712 713 return 0; 714} 715 |
|
685/* ----------------------------------------------------------------------------- 686 * V4L2 subdev control operations 687 */ 688 689#define V4L2_CID_BLC_AUTO (V4L2_CID_USER_BASE | 0x1002) 690#define V4L2_CID_BLC_TARGET_LEVEL (V4L2_CID_USER_BASE | 0x1003) 691#define V4L2_CID_BLC_ANALOG_OFFSET (V4L2_CID_USER_BASE | 0x1004) 692#define V4L2_CID_BLC_DIGITAL_OFFSET (V4L2_CID_USER_BASE | 0x1005) --- 282 unchanged lines hidden (view full) --- 975 dev_info(&client->dev, "MT9P031 detected at address 0x%02x\n", 976 client->addr); 977 978 return 0; 979} 980 981static int mt9p031_open(struct v4l2_subdev *subdev, struct v4l2_subdev_fh *fh) 982{ | 716/* ----------------------------------------------------------------------------- 717 * V4L2 subdev control operations 718 */ 719 720#define V4L2_CID_BLC_AUTO (V4L2_CID_USER_BASE | 0x1002) 721#define V4L2_CID_BLC_TARGET_LEVEL (V4L2_CID_USER_BASE | 0x1003) 722#define V4L2_CID_BLC_ANALOG_OFFSET (V4L2_CID_USER_BASE | 0x1004) 723#define V4L2_CID_BLC_DIGITAL_OFFSET (V4L2_CID_USER_BASE | 0x1005) --- 282 unchanged lines hidden (view full) --- 1006 dev_info(&client->dev, "MT9P031 detected at address 0x%02x\n", 1007 client->addr); 1008 1009 return 0; 1010} 1011 1012static int mt9p031_open(struct v4l2_subdev *subdev, struct v4l2_subdev_fh *fh) 1013{ |
983 struct mt9p031 *mt9p031 = to_mt9p031(subdev); 984 struct v4l2_mbus_framefmt *format; 985 struct v4l2_rect *crop; 986 987 crop = v4l2_subdev_get_try_crop(subdev, fh->state, 0); 988 crop->left = MT9P031_COLUMN_START_DEF; 989 crop->top = MT9P031_ROW_START_DEF; 990 crop->width = MT9P031_WINDOW_WIDTH_DEF; 991 crop->height = MT9P031_WINDOW_HEIGHT_DEF; 992 993 format = v4l2_subdev_get_try_format(subdev, fh->state, 0); 994 995 if (mt9p031->model == MT9P031_MODEL_MONOCHROME) 996 format->code = MEDIA_BUS_FMT_Y12_1X12; 997 else 998 format->code = MEDIA_BUS_FMT_SGRBG12_1X12; 999 1000 format->width = MT9P031_WINDOW_WIDTH_DEF; 1001 format->height = MT9P031_WINDOW_HEIGHT_DEF; 1002 format->field = V4L2_FIELD_NONE; 1003 format->colorspace = V4L2_COLORSPACE_SRGB; 1004 | |
1005 return mt9p031_set_power(subdev, 1); 1006} 1007 1008static int mt9p031_close(struct v4l2_subdev *subdev, struct v4l2_subdev_fh *fh) 1009{ 1010 return mt9p031_set_power(subdev, 0); 1011} 1012 1013static const struct v4l2_subdev_core_ops mt9p031_subdev_core_ops = { 1014 .s_power = mt9p031_set_power, 1015}; 1016 1017static const struct v4l2_subdev_video_ops mt9p031_subdev_video_ops = { 1018 .s_stream = mt9p031_s_stream, 1019}; 1020 1021static const struct v4l2_subdev_pad_ops mt9p031_subdev_pad_ops = { | 1014 return mt9p031_set_power(subdev, 1); 1015} 1016 1017static int mt9p031_close(struct v4l2_subdev *subdev, struct v4l2_subdev_fh *fh) 1018{ 1019 return mt9p031_set_power(subdev, 0); 1020} 1021 1022static const struct v4l2_subdev_core_ops mt9p031_subdev_core_ops = { 1023 .s_power = mt9p031_set_power, 1024}; 1025 1026static const struct v4l2_subdev_video_ops mt9p031_subdev_video_ops = { 1027 .s_stream = mt9p031_s_stream, 1028}; 1029 1030static const struct v4l2_subdev_pad_ops mt9p031_subdev_pad_ops = { |
1031 .init_cfg = mt9p031_init_cfg, |
|
1022 .enum_mbus_code = mt9p031_enum_mbus_code, 1023 .enum_frame_size = mt9p031_enum_frame_size, 1024 .get_fmt = mt9p031_get_format, 1025 .set_fmt = mt9p031_set_format, 1026 .get_selection = mt9p031_get_selection, 1027 .set_selection = mt9p031_set_selection, 1028}; 1029 --- 131 unchanged lines hidden (view full) --- 1161 mt9p031->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR; 1162 mt9p031->pad.flags = MEDIA_PAD_FL_SOURCE; 1163 ret = media_entity_pads_init(&mt9p031->subdev.entity, 1, &mt9p031->pad); 1164 if (ret < 0) 1165 goto done; 1166 1167 mt9p031->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; 1168 | 1032 .enum_mbus_code = mt9p031_enum_mbus_code, 1033 .enum_frame_size = mt9p031_enum_frame_size, 1034 .get_fmt = mt9p031_get_format, 1035 .set_fmt = mt9p031_set_format, 1036 .get_selection = mt9p031_get_selection, 1037 .set_selection = mt9p031_set_selection, 1038}; 1039 --- 131 unchanged lines hidden (view full) --- 1171 mt9p031->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR; 1172 mt9p031->pad.flags = MEDIA_PAD_FL_SOURCE; 1173 ret = media_entity_pads_init(&mt9p031->subdev.entity, 1, &mt9p031->pad); 1174 if (ret < 0) 1175 goto done; 1176 1177 mt9p031->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; 1178 |
1169 mt9p031->crop.width = MT9P031_WINDOW_WIDTH_DEF; 1170 mt9p031->crop.height = MT9P031_WINDOW_HEIGHT_DEF; 1171 mt9p031->crop.left = MT9P031_COLUMN_START_DEF; 1172 mt9p031->crop.top = MT9P031_ROW_START_DEF; | 1179 ret = mt9p031_init_cfg(&mt9p031->subdev, NULL); 1180 if (ret) 1181 goto done; |
1173 | 1182 |
1174 if (mt9p031->model == MT9P031_MODEL_MONOCHROME) 1175 mt9p031->format.code = MEDIA_BUS_FMT_Y12_1X12; 1176 else 1177 mt9p031->format.code = MEDIA_BUS_FMT_SGRBG12_1X12; 1178 1179 mt9p031->format.width = MT9P031_WINDOW_WIDTH_DEF; 1180 mt9p031->format.height = MT9P031_WINDOW_HEIGHT_DEF; 1181 mt9p031->format.field = V4L2_FIELD_NONE; 1182 mt9p031->format.colorspace = V4L2_COLORSPACE_SRGB; 1183 | |
1184 mt9p031->reset = devm_gpiod_get_optional(&client->dev, "reset", 1185 GPIOD_OUT_HIGH); 1186 1187 ret = mt9p031_clk_setup(mt9p031); 1188 if (ret) 1189 goto done; 1190 1191 ret = v4l2_async_register_subdev(&mt9p031->subdev); --- 57 unchanged lines hidden --- | 1183 mt9p031->reset = devm_gpiod_get_optional(&client->dev, "reset", 1184 GPIOD_OUT_HIGH); 1185 1186 ret = mt9p031_clk_setup(mt9p031); 1187 if (ret) 1188 goto done; 1189 1190 ret = v4l2_async_register_subdev(&mt9p031->subdev); --- 57 unchanged lines hidden --- |