diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-14 14:23:37 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-14 14:23:37 -0400 |
commit | b6255ee3d82798eb1eee9fb1cca713317b5afae8 (patch) | |
tree | 5b34f32a965dc772a99188293387022d21c5532e /drivers/media/video | |
parent | d69c5c2cf21e734210029afd803a96a942084af3 (diff) | |
parent | 788ab1bb03d304232711b6ca9718534f588ee9fc (diff) |
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media fixes from Mauro Carvalho Chehab:
"For a some fix patches for v3.4, including a regression fix at DVB core"
Fix up trivial conflicts in Documentation/feature-removal-schedule.txt
* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media:
[media] gspca - sonixj: Fix a zero divide in isoc interrupt
[media] media: videobuf2-dma-contig: include header for exported symbols
[media] media: videobuf2-dma-contig: quiet sparse noise about plain integer as NULL pointer
[media] media: vb2-memops: Export vb2_get_vma symbol
[media] s5p-fimc: Correct memory allocation for VIDIOC_CREATE_BUFS
[media] s5p-fimc: Fix locking in subdev set_crop op
[media] dvb_frontend: fix a regression with DVB-S zig-zag
[media] fintek-cir: change || to &&
[media] V4L: Schedule V4L2_CID_HCENTER, V4L2_CID_VCENTER controls for removal
[media] rc: Postpone ISR registration
[media] marvell-cam: fix an ARM build error
[media] V4L: soc-camera: protect hosts during probing from overzealous user-space
Diffstat (limited to 'drivers/media/video')
-rw-r--r-- | drivers/media/video/gspca/sonixj.c | 8 | ||||
-rw-r--r-- | drivers/media/video/marvell-ccic/mmp-driver.c | 1 | ||||
-rw-r--r-- | drivers/media/video/s5p-fimc/fimc-capture.c | 33 | ||||
-rw-r--r-- | drivers/media/video/s5p-fimc/fimc-core.c | 4 | ||||
-rw-r--r-- | drivers/media/video/s5p-fimc/fimc-core.h | 2 | ||||
-rw-r--r-- | drivers/media/video/soc_camera.c | 8 | ||||
-rw-r--r-- | drivers/media/video/videobuf2-dma-contig.c | 3 | ||||
-rw-r--r-- | drivers/media/video/videobuf2-memops.c | 1 |
8 files changed, 37 insertions, 23 deletions
diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c index db8e5084df06..863c755dd2b7 100644 --- a/drivers/media/video/gspca/sonixj.c +++ b/drivers/media/video/gspca/sonixj.c | |||
@@ -2923,6 +2923,10 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
2923 | * not the JPEG end of frame ('ff d9'). | 2923 | * not the JPEG end of frame ('ff d9'). |
2924 | */ | 2924 | */ |
2925 | 2925 | ||
2926 | /* count the packets and their size */ | ||
2927 | sd->npkt++; | ||
2928 | sd->pktsz += len; | ||
2929 | |||
2926 | /*fixme: assumption about the following code: | 2930 | /*fixme: assumption about the following code: |
2927 | * - there can be only one marker in a packet | 2931 | * - there can be only one marker in a packet |
2928 | */ | 2932 | */ |
@@ -2945,10 +2949,6 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
2945 | data += i; | 2949 | data += i; |
2946 | } | 2950 | } |
2947 | 2951 | ||
2948 | /* count the packets and their size */ | ||
2949 | sd->npkt++; | ||
2950 | sd->pktsz += len; | ||
2951 | |||
2952 | /* search backwards if there is a marker in the packet */ | 2952 | /* search backwards if there is a marker in the packet */ |
2953 | for (i = len - 1; --i >= 0; ) { | 2953 | for (i = len - 1; --i >= 0; ) { |
2954 | if (data[i] != 0xff) { | 2954 | if (data[i] != 0xff) { |
diff --git a/drivers/media/video/marvell-ccic/mmp-driver.c b/drivers/media/video/marvell-ccic/mmp-driver.c index d23552323f45..c4c17fe76c0d 100644 --- a/drivers/media/video/marvell-ccic/mmp-driver.c +++ b/drivers/media/video/marvell-ccic/mmp-driver.c | |||
@@ -181,7 +181,6 @@ static int mmpcam_probe(struct platform_device *pdev) | |||
181 | INIT_LIST_HEAD(&cam->devlist); | 181 | INIT_LIST_HEAD(&cam->devlist); |
182 | 182 | ||
183 | mcam = &cam->mcam; | 183 | mcam = &cam->mcam; |
184 | mcam->platform = MHP_Armada610; | ||
185 | mcam->plat_power_up = mmpcam_power_up; | 184 | mcam->plat_power_up = mmpcam_power_up; |
186 | mcam->plat_power_down = mmpcam_power_down; | 185 | mcam->plat_power_down = mmpcam_power_down; |
187 | mcam->dev = &pdev->dev; | 186 | mcam->dev = &pdev->dev; |
diff --git a/drivers/media/video/s5p-fimc/fimc-capture.c b/drivers/media/video/s5p-fimc/fimc-capture.c index b06efd208328..7e9b2c612b03 100644 --- a/drivers/media/video/s5p-fimc/fimc-capture.c +++ b/drivers/media/video/s5p-fimc/fimc-capture.c | |||
@@ -246,28 +246,37 @@ int fimc_capture_resume(struct fimc_dev *fimc) | |||
246 | 246 | ||
247 | } | 247 | } |
248 | 248 | ||
249 | static unsigned int get_plane_size(struct fimc_frame *fr, unsigned int plane) | 249 | static int queue_setup(struct vb2_queue *vq, const struct v4l2_format *pfmt, |
250 | { | ||
251 | if (!fr || plane >= fr->fmt->memplanes) | ||
252 | return 0; | ||
253 | return fr->f_width * fr->f_height * fr->fmt->depth[plane] / 8; | ||
254 | } | ||
255 | |||
256 | static int queue_setup(struct vb2_queue *vq, const struct v4l2_format *pfmt, | ||
257 | unsigned int *num_buffers, unsigned int *num_planes, | 250 | unsigned int *num_buffers, unsigned int *num_planes, |
258 | unsigned int sizes[], void *allocators[]) | 251 | unsigned int sizes[], void *allocators[]) |
259 | { | 252 | { |
253 | const struct v4l2_pix_format_mplane *pixm = NULL; | ||
260 | struct fimc_ctx *ctx = vq->drv_priv; | 254 | struct fimc_ctx *ctx = vq->drv_priv; |
261 | struct fimc_fmt *fmt = ctx->d_frame.fmt; | 255 | struct fimc_frame *frame = &ctx->d_frame; |
256 | struct fimc_fmt *fmt = frame->fmt; | ||
257 | unsigned long wh; | ||
262 | int i; | 258 | int i; |
263 | 259 | ||
264 | if (!fmt) | 260 | if (pfmt) { |
261 | pixm = &pfmt->fmt.pix_mp; | ||
262 | fmt = fimc_find_format(&pixm->pixelformat, NULL, | ||
263 | FMT_FLAGS_CAM | FMT_FLAGS_M2M, -1); | ||
264 | wh = pixm->width * pixm->height; | ||
265 | } else { | ||
266 | wh = frame->f_width * frame->f_height; | ||
267 | } | ||
268 | |||
269 | if (fmt == NULL) | ||
265 | return -EINVAL; | 270 | return -EINVAL; |
266 | 271 | ||
267 | *num_planes = fmt->memplanes; | 272 | *num_planes = fmt->memplanes; |
268 | 273 | ||
269 | for (i = 0; i < fmt->memplanes; i++) { | 274 | for (i = 0; i < fmt->memplanes; i++) { |
270 | sizes[i] = get_plane_size(&ctx->d_frame, i); | 275 | unsigned int size = (wh * fmt->depth[i]) / 8; |
276 | if (pixm) | ||
277 | sizes[i] = max(size, pixm->plane_fmt[i].sizeimage); | ||
278 | else | ||
279 | sizes[i] = size; | ||
271 | allocators[i] = ctx->fimc_dev->alloc_ctx; | 280 | allocators[i] = ctx->fimc_dev->alloc_ctx; |
272 | } | 281 | } |
273 | 282 | ||
@@ -1383,7 +1392,7 @@ static int fimc_subdev_set_crop(struct v4l2_subdev *sd, | |||
1383 | fimc_capture_try_crop(ctx, r, crop->pad); | 1392 | fimc_capture_try_crop(ctx, r, crop->pad); |
1384 | 1393 | ||
1385 | if (crop->which == V4L2_SUBDEV_FORMAT_TRY) { | 1394 | if (crop->which == V4L2_SUBDEV_FORMAT_TRY) { |
1386 | mutex_lock(&fimc->lock); | 1395 | mutex_unlock(&fimc->lock); |
1387 | *v4l2_subdev_get_try_crop(fh, crop->pad) = *r; | 1396 | *v4l2_subdev_get_try_crop(fh, crop->pad) = *r; |
1388 | return 0; | 1397 | return 0; |
1389 | } | 1398 | } |
diff --git a/drivers/media/video/s5p-fimc/fimc-core.c b/drivers/media/video/s5p-fimc/fimc-core.c index e184e650022a..e09ba7b0076e 100644 --- a/drivers/media/video/s5p-fimc/fimc-core.c +++ b/drivers/media/video/s5p-fimc/fimc-core.c | |||
@@ -1048,14 +1048,14 @@ static int fimc_m2m_g_fmt_mplane(struct file *file, void *fh, | |||
1048 | * @mask: the color flags to match | 1048 | * @mask: the color flags to match |
1049 | * @index: offset in the fimc_formats array, ignored if negative | 1049 | * @index: offset in the fimc_formats array, ignored if negative |
1050 | */ | 1050 | */ |
1051 | struct fimc_fmt *fimc_find_format(u32 *pixelformat, u32 *mbus_code, | 1051 | struct fimc_fmt *fimc_find_format(const u32 *pixelformat, const u32 *mbus_code, |
1052 | unsigned int mask, int index) | 1052 | unsigned int mask, int index) |
1053 | { | 1053 | { |
1054 | struct fimc_fmt *fmt, *def_fmt = NULL; | 1054 | struct fimc_fmt *fmt, *def_fmt = NULL; |
1055 | unsigned int i; | 1055 | unsigned int i; |
1056 | int id = 0; | 1056 | int id = 0; |
1057 | 1057 | ||
1058 | if (index >= ARRAY_SIZE(fimc_formats)) | 1058 | if (index >= (int)ARRAY_SIZE(fimc_formats)) |
1059 | return NULL; | 1059 | return NULL; |
1060 | 1060 | ||
1061 | for (i = 0; i < ARRAY_SIZE(fimc_formats); ++i) { | 1061 | for (i = 0; i < ARRAY_SIZE(fimc_formats); ++i) { |
diff --git a/drivers/media/video/s5p-fimc/fimc-core.h b/drivers/media/video/s5p-fimc/fimc-core.h index a18291e648e2..84fd83550bd7 100644 --- a/drivers/media/video/s5p-fimc/fimc-core.h +++ b/drivers/media/video/s5p-fimc/fimc-core.h | |||
@@ -718,7 +718,7 @@ void fimc_alpha_ctrl_update(struct fimc_ctx *ctx); | |||
718 | int fimc_fill_format(struct fimc_frame *frame, struct v4l2_format *f); | 718 | int fimc_fill_format(struct fimc_frame *frame, struct v4l2_format *f); |
719 | void fimc_adjust_mplane_format(struct fimc_fmt *fmt, u32 width, u32 height, | 719 | void fimc_adjust_mplane_format(struct fimc_fmt *fmt, u32 width, u32 height, |
720 | struct v4l2_pix_format_mplane *pix); | 720 | struct v4l2_pix_format_mplane *pix); |
721 | struct fimc_fmt *fimc_find_format(u32 *pixelformat, u32 *mbus_code, | 721 | struct fimc_fmt *fimc_find_format(const u32 *pixelformat, const u32 *mbus_code, |
722 | unsigned int mask, int index); | 722 | unsigned int mask, int index); |
723 | 723 | ||
724 | int fimc_check_scaler_ratio(struct fimc_ctx *ctx, int sw, int sh, | 724 | int fimc_check_scaler_ratio(struct fimc_ctx *ctx, int sw, int sh, |
diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c index eb25756a07af..aedb970d13f6 100644 --- a/drivers/media/video/soc_camera.c +++ b/drivers/media/video/soc_camera.c | |||
@@ -530,7 +530,10 @@ static int soc_camera_open(struct file *file) | |||
530 | if (icl->reset) | 530 | if (icl->reset) |
531 | icl->reset(icd->pdev); | 531 | icl->reset(icd->pdev); |
532 | 532 | ||
533 | /* Don't mess with the host during probe */ | ||
534 | mutex_lock(&ici->host_lock); | ||
533 | ret = ici->ops->add(icd); | 535 | ret = ici->ops->add(icd); |
536 | mutex_unlock(&ici->host_lock); | ||
534 | if (ret < 0) { | 537 | if (ret < 0) { |
535 | dev_err(icd->pdev, "Couldn't activate the camera: %d\n", ret); | 538 | dev_err(icd->pdev, "Couldn't activate the camera: %d\n", ret); |
536 | goto eiciadd; | 539 | goto eiciadd; |
@@ -956,7 +959,7 @@ static void scan_add_host(struct soc_camera_host *ici) | |||
956 | { | 959 | { |
957 | struct soc_camera_device *icd; | 960 | struct soc_camera_device *icd; |
958 | 961 | ||
959 | mutex_lock(&list_lock); | 962 | mutex_lock(&ici->host_lock); |
960 | 963 | ||
961 | list_for_each_entry(icd, &devices, list) { | 964 | list_for_each_entry(icd, &devices, list) { |
962 | if (icd->iface == ici->nr) { | 965 | if (icd->iface == ici->nr) { |
@@ -967,7 +970,7 @@ static void scan_add_host(struct soc_camera_host *ici) | |||
967 | } | 970 | } |
968 | } | 971 | } |
969 | 972 | ||
970 | mutex_unlock(&list_lock); | 973 | mutex_unlock(&ici->host_lock); |
971 | } | 974 | } |
972 | 975 | ||
973 | #ifdef CONFIG_I2C_BOARDINFO | 976 | #ifdef CONFIG_I2C_BOARDINFO |
@@ -1313,6 +1316,7 @@ int soc_camera_host_register(struct soc_camera_host *ici) | |||
1313 | list_add_tail(&ici->list, &hosts); | 1316 | list_add_tail(&ici->list, &hosts); |
1314 | mutex_unlock(&list_lock); | 1317 | mutex_unlock(&list_lock); |
1315 | 1318 | ||
1319 | mutex_init(&ici->host_lock); | ||
1316 | scan_add_host(ici); | 1320 | scan_add_host(ici); |
1317 | 1321 | ||
1318 | return 0; | 1322 | return 0; |
diff --git a/drivers/media/video/videobuf2-dma-contig.c b/drivers/media/video/videobuf2-dma-contig.c index f17ad98fcc5f..4b7132660a93 100644 --- a/drivers/media/video/videobuf2-dma-contig.c +++ b/drivers/media/video/videobuf2-dma-contig.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/dma-mapping.h> | 15 | #include <linux/dma-mapping.h> |
16 | 16 | ||
17 | #include <media/videobuf2-core.h> | 17 | #include <media/videobuf2-core.h> |
18 | #include <media/videobuf2-dma-contig.h> | ||
18 | #include <media/videobuf2-memops.h> | 19 | #include <media/videobuf2-memops.h> |
19 | 20 | ||
20 | struct vb2_dc_conf { | 21 | struct vb2_dc_conf { |
@@ -85,7 +86,7 @@ static void *vb2_dma_contig_vaddr(void *buf_priv) | |||
85 | { | 86 | { |
86 | struct vb2_dc_buf *buf = buf_priv; | 87 | struct vb2_dc_buf *buf = buf_priv; |
87 | if (!buf) | 88 | if (!buf) |
88 | return 0; | 89 | return NULL; |
89 | 90 | ||
90 | return buf->vaddr; | 91 | return buf->vaddr; |
91 | } | 92 | } |
diff --git a/drivers/media/video/videobuf2-memops.c b/drivers/media/video/videobuf2-memops.c index c41cb60245d6..504cd4cbe29e 100644 --- a/drivers/media/video/videobuf2-memops.c +++ b/drivers/media/video/videobuf2-memops.c | |||
@@ -55,6 +55,7 @@ struct vm_area_struct *vb2_get_vma(struct vm_area_struct *vma) | |||
55 | 55 | ||
56 | return vma_copy; | 56 | return vma_copy; |
57 | } | 57 | } |
58 | EXPORT_SYMBOL_GPL(vb2_get_vma); | ||
58 | 59 | ||
59 | /** | 60 | /** |
60 | * vb2_put_userptr() - release a userspace virtual memory area | 61 | * vb2_put_userptr() - release a userspace virtual memory area |