diff options
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/video/cx231xx/cx231xx-avcore.c | 16 | ||||
-rw-r--r-- | drivers/media/video/cx231xx/cx231xx-cards.c | 2 | ||||
-rw-r--r-- | drivers/media/video/cx231xx/cx231xx-video.c | 46 | ||||
-rw-r--r-- | drivers/media/video/cx231xx/cx231xx.h | 3 |
4 files changed, 11 insertions, 56 deletions
diff --git a/drivers/media/video/cx231xx/cx231xx-avcore.c b/drivers/media/video/cx231xx/cx231xx-avcore.c index 64e07d335e77..362a4311cdee 100644 --- a/drivers/media/video/cx231xx/cx231xx-avcore.c +++ b/drivers/media/video/cx231xx/cx231xx-avcore.c | |||
@@ -992,7 +992,7 @@ int cx231xx_do_mode_ctrl_overrides(struct cx231xx *dev) | |||
992 | VID_BLK_I2C_ADDRESS, | 992 | VID_BLK_I2C_ADDRESS, |
993 | VERT_TIM_CTRL, | 993 | VERT_TIM_CTRL, |
994 | FLD_VACTIVE_CNT, | 994 | FLD_VACTIVE_CNT, |
995 | 0x1E6000); | 995 | 0x1E7000); |
996 | status = cx231xx_read_modify_write_i2c_dword(dev, | 996 | status = cx231xx_read_modify_write_i2c_dword(dev, |
997 | VID_BLK_I2C_ADDRESS, | 997 | VID_BLK_I2C_ADDRESS, |
998 | VERT_TIM_CTRL, | 998 | VERT_TIM_CTRL, |
@@ -1220,20 +1220,6 @@ int cx231xx_set_audio_decoder_input(struct cx231xx *dev, | |||
1220 | return status; | 1220 | return status; |
1221 | } | 1221 | } |
1222 | 1222 | ||
1223 | /* Set resolution of the video */ | ||
1224 | int cx231xx_resolution_set(struct cx231xx *dev) | ||
1225 | { | ||
1226 | /* set horzontal scale */ | ||
1227 | int status = vid_blk_write_word(dev, HSCALE_CTRL, dev->hscale); | ||
1228 | if (status) | ||
1229 | return status; | ||
1230 | |||
1231 | /* set vertical scale */ | ||
1232 | status = vid_blk_write_word(dev, VSCALE_CTRL, dev->vscale); | ||
1233 | |||
1234 | return status; | ||
1235 | } | ||
1236 | |||
1237 | /****************************************************************************** | 1223 | /****************************************************************************** |
1238 | * C H I P Specific C O N T R O L functions * | 1224 | * C H I P Specific C O N T R O L functions * |
1239 | ******************************************************************************/ | 1225 | ******************************************************************************/ |
diff --git a/drivers/media/video/cx231xx/cx231xx-cards.c b/drivers/media/video/cx231xx/cx231xx-cards.c index 4e63c194df01..ed8139acf19a 100644 --- a/drivers/media/video/cx231xx/cx231xx-cards.c +++ b/drivers/media/video/cx231xx/cx231xx-cards.c | |||
@@ -726,8 +726,6 @@ static int cx231xx_init_dev(struct cx231xx **devhandle, struct usb_device *udev, | |||
726 | dev->width = maxw; | 726 | dev->width = maxw; |
727 | dev->height = maxh; | 727 | dev->height = maxh; |
728 | dev->interlaced = 0; | 728 | dev->interlaced = 0; |
729 | dev->hscale = 0; | ||
730 | dev->vscale = 0; | ||
731 | dev->video_input = 0; | 729 | dev->video_input = 0; |
732 | 730 | ||
733 | errCode = cx231xx_config(dev); | 731 | errCode = cx231xx_config(dev); |
diff --git a/drivers/media/video/cx231xx/cx231xx-video.c b/drivers/media/video/cx231xx/cx231xx-video.c index 585c0316a48c..03a94e6a30ef 100644 --- a/drivers/media/video/cx231xx/cx231xx-video.c +++ b/drivers/media/video/cx231xx/cx231xx-video.c | |||
@@ -1009,22 +1009,6 @@ static int check_dev(struct cx231xx *dev) | |||
1009 | return 0; | 1009 | return 0; |
1010 | } | 1010 | } |
1011 | 1011 | ||
1012 | static void get_scale(struct cx231xx *dev, | ||
1013 | unsigned int width, unsigned int height, | ||
1014 | unsigned int *hscale, unsigned int *vscale) | ||
1015 | { | ||
1016 | unsigned int maxw = norm_maxw(dev); | ||
1017 | unsigned int maxh = norm_maxh(dev); | ||
1018 | |||
1019 | *hscale = (((unsigned long)maxw) << 12) / width - 4096L; | ||
1020 | if (*hscale >= 0x4000) | ||
1021 | *hscale = 0x3fff; | ||
1022 | |||
1023 | *vscale = (((unsigned long)maxh) << 12) / height - 4096L; | ||
1024 | if (*vscale >= 0x4000) | ||
1025 | *vscale = 0x3fff; | ||
1026 | } | ||
1027 | |||
1028 | /* ------------------------------------------------------------------ | 1012 | /* ------------------------------------------------------------------ |
1029 | IOCTL vidioc handling | 1013 | IOCTL vidioc handling |
1030 | ------------------------------------------------------------------*/ | 1014 | ------------------------------------------------------------------*/ |
@@ -1071,7 +1055,6 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, | |||
1071 | unsigned int height = f->fmt.pix.height; | 1055 | unsigned int height = f->fmt.pix.height; |
1072 | unsigned int maxw = norm_maxw(dev); | 1056 | unsigned int maxw = norm_maxw(dev); |
1073 | unsigned int maxh = norm_maxh(dev); | 1057 | unsigned int maxh = norm_maxh(dev); |
1074 | unsigned int hscale, vscale; | ||
1075 | struct cx231xx_fmt *fmt; | 1058 | struct cx231xx_fmt *fmt; |
1076 | 1059 | ||
1077 | fmt = format_by_fourcc(f->fmt.pix.pixelformat); | 1060 | fmt = format_by_fourcc(f->fmt.pix.pixelformat); |
@@ -1085,11 +1068,6 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, | |||
1085 | height must be even because of interlacing */ | 1068 | height must be even because of interlacing */ |
1086 | v4l_bound_align_image(&width, 48, maxw, 1, &height, 32, maxh, 1, 0); | 1069 | v4l_bound_align_image(&width, 48, maxw, 1, &height, 32, maxh, 1, 0); |
1087 | 1070 | ||
1088 | get_scale(dev, width, height, &hscale, &vscale); | ||
1089 | |||
1090 | width = (((unsigned long)maxw) << 12) / (hscale + 4096L); | ||
1091 | height = (((unsigned long)maxh) << 12) / (vscale + 4096L); | ||
1092 | |||
1093 | f->fmt.pix.width = width; | 1071 | f->fmt.pix.width = width; |
1094 | f->fmt.pix.height = height; | 1072 | f->fmt.pix.height = height; |
1095 | f->fmt.pix.pixelformat = fmt->fourcc; | 1073 | f->fmt.pix.pixelformat = fmt->fourcc; |
@@ -1140,15 +1118,11 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv, | |||
1140 | dev->width = f->fmt.pix.width; | 1118 | dev->width = f->fmt.pix.width; |
1141 | dev->height = f->fmt.pix.height; | 1119 | dev->height = f->fmt.pix.height; |
1142 | dev->format = fmt; | 1120 | dev->format = fmt; |
1143 | get_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale); | ||
1144 | 1121 | ||
1145 | v4l2_fill_mbus_format(&mbus_fmt, &f->fmt.pix, V4L2_MBUS_FMT_FIXED); | 1122 | v4l2_fill_mbus_format(&mbus_fmt, &f->fmt.pix, V4L2_MBUS_FMT_FIXED); |
1146 | call_all(dev, video, s_mbus_fmt, &mbus_fmt); | 1123 | call_all(dev, video, s_mbus_fmt, &mbus_fmt); |
1147 | v4l2_fill_pix_format(&f->fmt.pix, &mbus_fmt); | 1124 | v4l2_fill_pix_format(&f->fmt.pix, &mbus_fmt); |
1148 | 1125 | ||
1149 | /* Set the correct alternate setting for this resolution */ | ||
1150 | cx231xx_resolution_set(dev); | ||
1151 | |||
1152 | out: | 1126 | out: |
1153 | mutex_unlock(&dev->lock); | 1127 | mutex_unlock(&dev->lock); |
1154 | return rc; | 1128 | return rc; |
@@ -1167,6 +1141,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *norm) | |||
1167 | { | 1141 | { |
1168 | struct cx231xx_fh *fh = priv; | 1142 | struct cx231xx_fh *fh = priv; |
1169 | struct cx231xx *dev = fh->dev; | 1143 | struct cx231xx *dev = fh->dev; |
1144 | struct v4l2_mbus_framefmt mbus_fmt; | ||
1170 | struct v4l2_format f; | 1145 | struct v4l2_format f; |
1171 | int rc; | 1146 | int rc; |
1172 | 1147 | ||
@@ -1184,17 +1159,21 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *norm) | |||
1184 | f.fmt.pix.height = dev->height; | 1159 | f.fmt.pix.height = dev->height; |
1185 | vidioc_try_fmt_vid_cap(file, priv, &f); | 1160 | vidioc_try_fmt_vid_cap(file, priv, &f); |
1186 | 1161 | ||
1162 | call_all(dev, core, s_std, dev->norm); | ||
1163 | |||
1164 | /* We need to reset basic properties in the decoder related to | ||
1165 | resolution (since a standard change effects things like the number | ||
1166 | of lines in VACT, etc) */ | ||
1167 | v4l2_fill_mbus_format(&mbus_fmt, &f.fmt.pix, V4L2_MBUS_FMT_FIXED); | ||
1168 | call_all(dev, video, s_mbus_fmt, &mbus_fmt); | ||
1169 | v4l2_fill_pix_format(&f.fmt.pix, &mbus_fmt); | ||
1170 | |||
1187 | /* set new image size */ | 1171 | /* set new image size */ |
1188 | dev->width = f.fmt.pix.width; | 1172 | dev->width = f.fmt.pix.width; |
1189 | dev->height = f.fmt.pix.height; | 1173 | dev->height = f.fmt.pix.height; |
1190 | get_scale(dev, dev->width, dev->height, &dev->hscale, &dev->vscale); | ||
1191 | |||
1192 | call_all(dev, core, s_std, dev->norm); | ||
1193 | 1174 | ||
1194 | mutex_unlock(&dev->lock); | 1175 | mutex_unlock(&dev->lock); |
1195 | 1176 | ||
1196 | cx231xx_resolution_set(dev); | ||
1197 | |||
1198 | /* do mode control overrides */ | 1177 | /* do mode control overrides */ |
1199 | cx231xx_do_mode_ctrl_overrides(dev); | 1178 | cx231xx_do_mode_ctrl_overrides(dev); |
1200 | 1179 | ||
@@ -2279,8 +2258,6 @@ static int cx231xx_v4l2_open(struct file *filp) | |||
2279 | if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE && dev->users == 0) { | 2258 | if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE && dev->users == 0) { |
2280 | dev->width = norm_maxw(dev); | 2259 | dev->width = norm_maxw(dev); |
2281 | dev->height = norm_maxh(dev); | 2260 | dev->height = norm_maxh(dev); |
2282 | dev->hscale = 0; | ||
2283 | dev->vscale = 0; | ||
2284 | 2261 | ||
2285 | /* Power up in Analog TV mode */ | 2262 | /* Power up in Analog TV mode */ |
2286 | if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER) | 2263 | if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER) |
@@ -2292,7 +2269,6 @@ static int cx231xx_v4l2_open(struct file *filp) | |||
2292 | #if 0 | 2269 | #if 0 |
2293 | cx231xx_set_mode(dev, CX231XX_ANALOG_MODE); | 2270 | cx231xx_set_mode(dev, CX231XX_ANALOG_MODE); |
2294 | #endif | 2271 | #endif |
2295 | cx231xx_resolution_set(dev); | ||
2296 | 2272 | ||
2297 | /* set video alternate setting */ | 2273 | /* set video alternate setting */ |
2298 | cx231xx_set_video_alternate(dev); | 2274 | cx231xx_set_video_alternate(dev); |
@@ -2688,8 +2664,6 @@ int cx231xx_register_analog_devices(struct cx231xx *dev) | |||
2688 | dev->width = norm_maxw(dev); | 2664 | dev->width = norm_maxw(dev); |
2689 | dev->height = norm_maxh(dev); | 2665 | dev->height = norm_maxh(dev); |
2690 | dev->interlaced = 0; | 2666 | dev->interlaced = 0; |
2691 | dev->hscale = 0; | ||
2692 | dev->vscale = 0; | ||
2693 | 2667 | ||
2694 | /* Analog specific initialization */ | 2668 | /* Analog specific initialization */ |
2695 | dev->format = &format[0]; | 2669 | dev->format = &format[0]; |
diff --git a/drivers/media/video/cx231xx/cx231xx.h b/drivers/media/video/cx231xx/cx231xx.h index 634d595818d8..aa273428d021 100644 --- a/drivers/media/video/cx231xx/cx231xx.h +++ b/drivers/media/video/cx231xx/cx231xx.h | |||
@@ -645,8 +645,6 @@ struct cx231xx { | |||
645 | /* frame properties */ | 645 | /* frame properties */ |
646 | int width; /* current frame width */ | 646 | int width; /* current frame width */ |
647 | int height; /* current frame height */ | 647 | int height; /* current frame height */ |
648 | unsigned hscale; /* horizontal scale factor (see datasheet) */ | ||
649 | unsigned vscale; /* vertical scale factor (see datasheet) */ | ||
650 | int interlaced; /* 1=interlace fileds, 0=just top fileds */ | 648 | int interlaced; /* 1=interlace fileds, 0=just top fileds */ |
651 | 649 | ||
652 | struct cx231xx_audio adev; | 650 | struct cx231xx_audio adev; |
@@ -876,7 +874,6 @@ int cx231xx_set_audio_decoder_input(struct cx231xx *dev, | |||
876 | enum AUDIO_INPUT audio_input); | 874 | enum AUDIO_INPUT audio_input); |
877 | 875 | ||
878 | int cx231xx_capture_start(struct cx231xx *dev, int start, u8 media_type); | 876 | int cx231xx_capture_start(struct cx231xx *dev, int start, u8 media_type); |
879 | int cx231xx_resolution_set(struct cx231xx *dev); | ||
880 | int cx231xx_set_video_alternate(struct cx231xx *dev); | 877 | int cx231xx_set_video_alternate(struct cx231xx *dev); |
881 | int cx231xx_set_alt_setting(struct cx231xx *dev, u8 index, u8 alt); | 878 | int cx231xx_set_alt_setting(struct cx231xx *dev, u8 index, u8 alt); |
882 | int is_fw_load(struct cx231xx *dev); | 879 | int is_fw_load(struct cx231xx *dev); |