aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-11-18 18:08:02 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-11-18 18:08:02 -0500
commita310410f616c78f24490de1274487a7b7b137d97 (patch)
treedbc2fc187800e6e7014263bf83e10d0155620029 /drivers/staging
parentcdd278db0e3dd714e8076e58f723f3c59547591b (diff)
parent80f93c7b0f4599ffbdac8d964ecd1162b8b618b9 (diff)
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media updates from Mauro Carvalho Chehab: "This series include: - a new Remote Controller driver for ST SoC with the corresponding DT bindings - a new frontend (cx24117) - a new I2C camera flash driver (lm3560) - a new mem2mem driver for TI SoC (ti-vpe) - support for Raphael r828d added to r820t driver - some improvements on buffer allocation at VB2 core - usual driver fixes and improvements PS this time, we have a smaller number of patches. While it is hard to pinpoint to the reasons, I believe that it is mainly due to: 1) there are several patch series ready, but depending on DT review. I decided to grant some extra time for DT maintainers to look on it, as they're expecting to have more time with the changes agreed during ARM mini-summit and KS. If they can't review in time for 3.14, I'll review myself and apply for the next merge window. 2) I suspect that having both LinuxCon EU and LinuxCon NA happening during the same merge window affected the development productivity, as several core media developers participated on both events" * 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (151 commits) [media] media: st-rc: Add ST remote control driver [media] gpio-ir-recv: Include linux/of.h header [media] tvp7002: Include linux/of.h header [media] tvp514x: Include linux/of.h header [media] ths8200: Include linux/of.h header [media] adv7343: Include linux/of.h header [media] v4l: Fix typo in v4l2_subdev_get_try_crop() [media] media: i2c: add driver for dual LED Flash, lm3560 [media] rtl28xxu: add 15f4:0131 Astrometa DVB-T2 [media] rtl28xxu: add RTL2832P + R828D support [media] rtl2832: add new tuner R828D [media] r820t: add support for R828D [media] media/i2c: ths8200: fix build failure with gcc 4.5.4 [media] Add support for KWorld UB435-Q V2 [media] staging/media: fix msi3101 build errors [media] ddbridge: Remove casting the return value which is a void pointer [media] ngene: Remove casting the return value which is a void pointer [media] dm1105: remove unneeded not-null test [media] sh_mobile_ceu_camera: remove deprecated IRQF_DISABLED [media] media: rcar_vin: Add preliminary r8a7790 support ...
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/media/lirc/TODO5
-rw-r--r--drivers/staging/media/lirc/lirc_bt829.c33
-rw-r--r--drivers/staging/media/msi3101/Kconfig3
-rw-r--r--drivers/staging/media/solo6x10/solo6x10-disp.c25
-rw-r--r--drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c170
-rw-r--r--drivers/staging/media/solo6x10/solo6x10.h1
6 files changed, 152 insertions, 85 deletions
diff --git a/drivers/staging/media/lirc/TODO b/drivers/staging/media/lirc/TODO
index b6cb593f55c6..cbea5d84fed3 100644
--- a/drivers/staging/media/lirc/TODO
+++ b/drivers/staging/media/lirc/TODO
@@ -2,6 +2,11 @@
2 (see drivers/media/IR/mceusb.c vs. lirc_mceusb.c in lirc cvs for an 2 (see drivers/media/IR/mceusb.c vs. lirc_mceusb.c in lirc cvs for an
3 example of a previously completed port). 3 example of a previously completed port).
4 4
5- lirc_bt829 uses registers on a Mach64 VT, which has a separate kernel
6 framebuffer driver (atyfb) and userland X driver (mach64). It can't
7 simply be converted to a normal PCI driver, but ideally it should be
8 coordinated with the other drivers.
9
5Please send patches to: 10Please send patches to:
6Jarod Wilson <jarod@wilsonet.com> 11Jarod Wilson <jarod@wilsonet.com>
7Greg Kroah-Hartman <greg@kroah.com> 12Greg Kroah-Hartman <greg@kroah.com>
diff --git a/drivers/staging/media/lirc/lirc_bt829.c b/drivers/staging/media/lirc/lirc_bt829.c
index fbbdce4c119f..30edc740ac25 100644
--- a/drivers/staging/media/lirc/lirc_bt829.c
+++ b/drivers/staging/media/lirc/lirc_bt829.c
@@ -63,7 +63,7 @@ static bool debug;
63 } while (0) 63 } while (0)
64 64
65static int atir_minor; 65static int atir_minor;
66static unsigned long pci_addr_phys; 66static phys_addr_t pci_addr_phys;
67static unsigned char *pci_addr_lin; 67static unsigned char *pci_addr_lin;
68 68
69static struct lirc_driver atir_driver; 69static struct lirc_driver atir_driver;
@@ -78,11 +78,11 @@ static struct pci_dev *do_pci_probe(void)
78 pci_addr_phys = 0; 78 pci_addr_phys = 0;
79 if (my_dev->resource[0].flags & IORESOURCE_MEM) { 79 if (my_dev->resource[0].flags & IORESOURCE_MEM) {
80 pci_addr_phys = my_dev->resource[0].start; 80 pci_addr_phys = my_dev->resource[0].start;
81 pr_info("memory at 0x%08X\n", 81 pr_info("memory at %pa\n", &pci_addr_phys);
82 (unsigned int)pci_addr_phys);
83 } 82 }
84 if (pci_addr_phys == 0) { 83 if (pci_addr_phys == 0) {
85 pr_err("no memory resource ?\n"); 84 pr_err("no memory resource ?\n");
85 pci_dev_put(my_dev);
86 return NULL; 86 return NULL;
87 } 87 }
88 } else { 88 } else {
@@ -120,13 +120,20 @@ static void atir_set_use_dec(void *data)
120int init_module(void) 120int init_module(void)
121{ 121{
122 struct pci_dev *pdev; 122 struct pci_dev *pdev;
123 int rc;
123 124
124 pdev = do_pci_probe(); 125 pdev = do_pci_probe();
125 if (pdev == NULL) 126 if (pdev == NULL)
126 return -ENODEV; 127 return -ENODEV;
127 128
128 if (!atir_init_start()) 129 rc = pci_enable_device(pdev);
129 return -ENODEV; 130 if (rc)
131 goto err_put_dev;
132
133 if (!atir_init_start()) {
134 rc = -ENODEV;
135 goto err_disable;
136 }
130 137
131 strcpy(atir_driver.name, "ATIR"); 138 strcpy(atir_driver.name, "ATIR");
132 atir_driver.minor = -1; 139 atir_driver.minor = -1;
@@ -142,17 +149,31 @@ int init_module(void)
142 atir_minor = lirc_register_driver(&atir_driver); 149 atir_minor = lirc_register_driver(&atir_driver);
143 if (atir_minor < 0) { 150 if (atir_minor < 0) {
144 pr_err("failed to register driver!\n"); 151 pr_err("failed to register driver!\n");
145 return atir_minor; 152 rc = atir_minor;
153 goto err_unmap;
146 } 154 }
147 dprintk("driver is registered on minor %d\n", atir_minor); 155 dprintk("driver is registered on minor %d\n", atir_minor);
148 156
149 return 0; 157 return 0;
158
159err_unmap:
160 iounmap(pci_addr_lin);
161err_disable:
162 pci_disable_device(pdev);
163err_put_dev:
164 pci_dev_put(pdev);
165 return rc;
150} 166}
151 167
152 168
153void cleanup_module(void) 169void cleanup_module(void)
154{ 170{
171 struct pci_dev *pdev = to_pci_dev(atir_driver.dev);
172
155 lirc_unregister_driver(atir_minor); 173 lirc_unregister_driver(atir_minor);
174 iounmap(pci_addr_lin);
175 pci_disable_device(pdev);
176 pci_dev_put(pdev);
156} 177}
157 178
158 179
diff --git a/drivers/staging/media/msi3101/Kconfig b/drivers/staging/media/msi3101/Kconfig
index 76d5bbd4d93c..0c349c8595e4 100644
--- a/drivers/staging/media/msi3101/Kconfig
+++ b/drivers/staging/media/msi3101/Kconfig
@@ -1,4 +1,5 @@
1config USB_MSI3101 1config USB_MSI3101
2 tristate "Mirics MSi3101 SDR Dongle" 2 tristate "Mirics MSi3101 SDR Dongle"
3 depends on USB && VIDEO_DEV && VIDEO_V4L2 3 depends on USB && VIDEO_DEV && VIDEO_V4L2
4 select VIDEOBUF2_VMALLOC 4 select VIDEOBUF2_CORE
5 select VIDEOBUF2_VMALLOC
diff --git a/drivers/staging/media/solo6x10/solo6x10-disp.c b/drivers/staging/media/solo6x10/solo6x10-disp.c
index 32d9953bc36e..145295a5db72 100644
--- a/drivers/staging/media/solo6x10/solo6x10-disp.c
+++ b/drivers/staging/media/solo6x10/solo6x10-disp.c
@@ -176,18 +176,27 @@ static void solo_vout_config(struct solo_dev *solo_dev)
176static int solo_dma_vin_region(struct solo_dev *solo_dev, u32 off, 176static int solo_dma_vin_region(struct solo_dev *solo_dev, u32 off,
177 u16 val, int reg_size) 177 u16 val, int reg_size)
178{ 178{
179 u16 buf[64]; 179 u16 *buf;
180 int i; 180 const int n = 64, size = n * sizeof(*buf);
181 int ret = 0; 181 int i, ret = 0;
182
183 buf = kmalloc(size, GFP_KERNEL);
184 if (!buf)
185 return -ENOMEM;
182 186
183 for (i = 0; i < sizeof(buf) >> 1; i++) 187 for (i = 0; i < n; i++)
184 buf[i] = cpu_to_le16(val); 188 buf[i] = cpu_to_le16(val);
185 189
186 for (i = 0; i < reg_size; i += sizeof(buf)) 190 for (i = 0; i < reg_size; i += size) {
187 ret |= solo_p2m_dma(solo_dev, 1, buf, 191 ret = solo_p2m_dma(solo_dev, 1, buf,
188 SOLO_MOTION_EXT_ADDR(solo_dev) + off + i, 192 SOLO_MOTION_EXT_ADDR(solo_dev) + off + i,
189 sizeof(buf), 0, 0); 193 size, 0, 0);
194
195 if (ret)
196 break;
197 }
190 198
199 kfree(buf);
191 return ret; 200 return ret;
192} 201}
193 202
diff --git a/drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c b/drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c
index a4c589604b02..d582c5b84c14 100644
--- a/drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c
+++ b/drivers/staging/media/solo6x10/solo6x10-v4l2-enc.c
@@ -95,38 +95,11 @@ static unsigned char vop_6110_pal_cif[] = {
95 0x01, 0x68, 0xce, 0x32, 0x28, 0x00, 0x00, 0x00, 95 0x01, 0x68, 0xce, 0x32, 0x28, 0x00, 0x00, 0x00,
96}; 96};
97 97
98struct vop_header { 98typedef __le32 vop_header[16];
99 /* VE_STATUS0 */
100 u32 mpeg_size:20, sad_motion_flag:1, video_motion_flag:1, vop_type:2,
101 channel:5, source_fl:1, interlace:1, progressive:1;
102
103 /* VE_STATUS1 */
104 u32 vsize:8, hsize:8, last_queue:4, nop0:8, scale:4;
105
106 /* VE_STATUS2 */
107 u32 mpeg_off;
108
109 /* VE_STATUS3 */
110 u32 jpeg_off;
111
112 /* VE_STATUS4 */
113 u32 jpeg_size:20, interval:10, nop1:2;
114
115 /* VE_STATUS5/6 */
116 u32 sec, usec;
117
118 /* VE_STATUS7/8/9 */
119 u32 nop2[3];
120
121 /* VE_STATUS10 */
122 u32 mpeg_size_alt:20, nop3:12;
123
124 u32 end_nops[5];
125} __packed;
126 99
127struct solo_enc_buf { 100struct solo_enc_buf {
128 enum solo_enc_types type; 101 enum solo_enc_types type;
129 struct vop_header *vh; 102 const vop_header *vh;
130 int motion; 103 int motion;
131}; 104};
132 105
@@ -346,7 +319,7 @@ static int enc_get_mpeg_dma(struct solo_dev *solo_dev, dma_addr_t dma,
346/* Build a descriptor queue out of an SG list and send it to the P2M for 319/* Build a descriptor queue out of an SG list and send it to the P2M for
347 * processing. */ 320 * processing. */
348static int solo_send_desc(struct solo_enc_dev *solo_enc, int skip, 321static int solo_send_desc(struct solo_enc_dev *solo_enc, int skip,
349 struct vb2_dma_sg_desc *vbuf, int off, int size, 322 struct sg_table *vbuf, int off, int size,
350 unsigned int base, unsigned int base_size) 323 unsigned int base, unsigned int base_size)
351{ 324{
352 struct solo_dev *solo_dev = solo_enc->solo_dev; 325 struct solo_dev *solo_dev = solo_enc->solo_dev;
@@ -359,7 +332,7 @@ static int solo_send_desc(struct solo_enc_dev *solo_enc, int skip,
359 332
360 solo_enc->desc_count = 1; 333 solo_enc->desc_count = 1;
361 334
362 for_each_sg(vbuf->sglist, sg, vbuf->num_pages, i) { 335 for_each_sg(vbuf->sgl, sg, vbuf->nents, i) {
363 struct solo_p2m_desc *desc; 336 struct solo_p2m_desc *desc;
364 dma_addr_t dma; 337 dma_addr_t dma;
365 int len; 338 int len;
@@ -430,84 +403,145 @@ static int solo_send_desc(struct solo_enc_dev *solo_enc, int skip,
430 solo_enc->desc_count - 1); 403 solo_enc->desc_count - 1);
431} 404}
432 405
406/* Extract values from VOP header - VE_STATUSxx */
407static inline int vop_interlaced(const vop_header *vh)
408{
409 return (__le32_to_cpu((*vh)[0]) >> 30) & 1;
410}
411
412static inline u8 vop_channel(const vop_header *vh)
413{
414 return (__le32_to_cpu((*vh)[0]) >> 24) & 0x1F;
415}
416
417static inline u8 vop_type(const vop_header *vh)
418{
419 return (__le32_to_cpu((*vh)[0]) >> 22) & 3;
420}
421
422static inline u32 vop_mpeg_size(const vop_header *vh)
423{
424 return __le32_to_cpu((*vh)[0]) & 0xFFFFF;
425}
426
427static inline u8 vop_hsize(const vop_header *vh)
428{
429 return (__le32_to_cpu((*vh)[1]) >> 8) & 0xFF;
430}
431
432static inline u8 vop_vsize(const vop_header *vh)
433{
434 return __le32_to_cpu((*vh)[1]) & 0xFF;
435}
436
437static inline u32 vop_mpeg_offset(const vop_header *vh)
438{
439 return __le32_to_cpu((*vh)[2]);
440}
441
442static inline u32 vop_jpeg_offset(const vop_header *vh)
443{
444 return __le32_to_cpu((*vh)[3]);
445}
446
447static inline u32 vop_jpeg_size(const vop_header *vh)
448{
449 return __le32_to_cpu((*vh)[4]) & 0xFFFFF;
450}
451
452static inline u32 vop_sec(const vop_header *vh)
453{
454 return __le32_to_cpu((*vh)[5]);
455}
456
457static inline u32 vop_usec(const vop_header *vh)
458{
459 return __le32_to_cpu((*vh)[6]);
460}
461
433static int solo_fill_jpeg(struct solo_enc_dev *solo_enc, 462static int solo_fill_jpeg(struct solo_enc_dev *solo_enc,
434 struct vb2_buffer *vb, struct vop_header *vh) 463 struct vb2_buffer *vb, const vop_header *vh)
435{ 464{
436 struct solo_dev *solo_dev = solo_enc->solo_dev; 465 struct solo_dev *solo_dev = solo_enc->solo_dev;
437 struct vb2_dma_sg_desc *vbuf = vb2_dma_sg_plane_desc(vb, 0); 466 struct sg_table *vbuf = vb2_dma_sg_plane_desc(vb, 0);
438 int frame_size; 467 int frame_size;
439 int ret; 468 int ret;
440 469
441 vb->v4l2_buf.flags |= V4L2_BUF_FLAG_KEYFRAME; 470 vb->v4l2_buf.flags |= V4L2_BUF_FLAG_KEYFRAME;
442 471
443 if (vb2_plane_size(vb, 0) < vh->jpeg_size + solo_enc->jpeg_len) 472 if (vb2_plane_size(vb, 0) < vop_jpeg_size(vh) + solo_enc->jpeg_len)
444 return -EIO; 473 return -EIO;
445 474
446 sg_copy_from_buffer(vbuf->sglist, vbuf->num_pages, 475 frame_size = (vop_jpeg_size(vh) + solo_enc->jpeg_len + (DMA_ALIGN - 1))
447 solo_enc->jpeg_header,
448 solo_enc->jpeg_len);
449
450 frame_size = (vh->jpeg_size + solo_enc->jpeg_len + (DMA_ALIGN - 1))
451 & ~(DMA_ALIGN - 1); 476 & ~(DMA_ALIGN - 1);
452 vb2_set_plane_payload(vb, 0, vh->jpeg_size + solo_enc->jpeg_len); 477 vb2_set_plane_payload(vb, 0, vop_jpeg_size(vh) + solo_enc->jpeg_len);
453 478
454 dma_map_sg(&solo_dev->pdev->dev, vbuf->sglist, vbuf->num_pages, 479 /* may discard all previous data in vbuf->sgl */
480 dma_map_sg(&solo_dev->pdev->dev, vbuf->sgl, vbuf->nents,
455 DMA_FROM_DEVICE); 481 DMA_FROM_DEVICE);
456 ret = solo_send_desc(solo_enc, solo_enc->jpeg_len, vbuf, vh->jpeg_off, 482 ret = solo_send_desc(solo_enc, solo_enc->jpeg_len, vbuf,
457 frame_size, SOLO_JPEG_EXT_ADDR(solo_dev), 483 vop_jpeg_offset(vh) - SOLO_JPEG_EXT_ADDR(solo_dev),
458 SOLO_JPEG_EXT_SIZE(solo_dev)); 484 frame_size, SOLO_JPEG_EXT_ADDR(solo_dev),
459 dma_unmap_sg(&solo_dev->pdev->dev, vbuf->sglist, vbuf->num_pages, 485 SOLO_JPEG_EXT_SIZE(solo_dev));
486 dma_unmap_sg(&solo_dev->pdev->dev, vbuf->sgl, vbuf->nents,
460 DMA_FROM_DEVICE); 487 DMA_FROM_DEVICE);
488
489 /* add the header only after dma_unmap_sg() */
490 sg_copy_from_buffer(vbuf->sgl, vbuf->nents,
491 solo_enc->jpeg_header, solo_enc->jpeg_len);
492
461 return ret; 493 return ret;
462} 494}
463 495
464static int solo_fill_mpeg(struct solo_enc_dev *solo_enc, 496static int solo_fill_mpeg(struct solo_enc_dev *solo_enc,
465 struct vb2_buffer *vb, struct vop_header *vh) 497 struct vb2_buffer *vb, const vop_header *vh)
466{ 498{
467 struct solo_dev *solo_dev = solo_enc->solo_dev; 499 struct solo_dev *solo_dev = solo_enc->solo_dev;
468 struct vb2_dma_sg_desc *vbuf = vb2_dma_sg_plane_desc(vb, 0); 500 struct sg_table *vbuf = vb2_dma_sg_plane_desc(vb, 0);
469 int frame_off, frame_size; 501 int frame_off, frame_size;
470 int skip = 0; 502 int skip = 0;
471 int ret; 503 int ret;
472 504
473 if (vb2_plane_size(vb, 0) < vh->mpeg_size) 505 if (vb2_plane_size(vb, 0) < vop_mpeg_size(vh))
474 return -EIO; 506 return -EIO;
475 507
476 /* If this is a key frame, add extra header */ 508 /* If this is a key frame, add extra header */
477 if (!vh->vop_type) { 509 vb->v4l2_buf.flags &= ~(V4L2_BUF_FLAG_KEYFRAME | V4L2_BUF_FLAG_PFRAME | V4L2_BUF_FLAG_BFRAME);
478 sg_copy_from_buffer(vbuf->sglist, vbuf->num_pages, 510 if (!vop_type(vh)) {
479 solo_enc->vop,
480 solo_enc->vop_len);
481
482 skip = solo_enc->vop_len; 511 skip = solo_enc->vop_len;
483
484 vb->v4l2_buf.flags |= V4L2_BUF_FLAG_KEYFRAME; 512 vb->v4l2_buf.flags |= V4L2_BUF_FLAG_KEYFRAME;
485 vb2_set_plane_payload(vb, 0, vh->mpeg_size + solo_enc->vop_len); 513 vb2_set_plane_payload(vb, 0, vop_mpeg_size(vh) + solo_enc->vop_len);
486 } else { 514 } else {
487 vb->v4l2_buf.flags |= V4L2_BUF_FLAG_PFRAME; 515 vb->v4l2_buf.flags |= V4L2_BUF_FLAG_PFRAME;
488 vb2_set_plane_payload(vb, 0, vh->mpeg_size); 516 vb2_set_plane_payload(vb, 0, vop_mpeg_size(vh));
489 } 517 }
490 518
491 /* Now get the actual mpeg payload */ 519 /* Now get the actual mpeg payload */
492 frame_off = (vh->mpeg_off + sizeof(*vh)) 520 frame_off = (vop_mpeg_offset(vh) - SOLO_MP4E_EXT_ADDR(solo_dev) + sizeof(*vh))
493 % SOLO_MP4E_EXT_SIZE(solo_dev); 521 % SOLO_MP4E_EXT_SIZE(solo_dev);
494 frame_size = (vh->mpeg_size + skip + (DMA_ALIGN - 1)) 522 frame_size = (vop_mpeg_size(vh) + skip + (DMA_ALIGN - 1))
495 & ~(DMA_ALIGN - 1); 523 & ~(DMA_ALIGN - 1);
496 524
497 dma_map_sg(&solo_dev->pdev->dev, vbuf->sglist, vbuf->num_pages, 525 /* may discard all previous data in vbuf->sgl */
526 dma_map_sg(&solo_dev->pdev->dev, vbuf->sgl, vbuf->nents,
498 DMA_FROM_DEVICE); 527 DMA_FROM_DEVICE);
499 ret = solo_send_desc(solo_enc, skip, vbuf, frame_off, frame_size, 528 ret = solo_send_desc(solo_enc, skip, vbuf, frame_off, frame_size,
500 SOLO_MP4E_EXT_ADDR(solo_dev), 529 SOLO_MP4E_EXT_ADDR(solo_dev),
501 SOLO_MP4E_EXT_SIZE(solo_dev)); 530 SOLO_MP4E_EXT_SIZE(solo_dev));
502 dma_unmap_sg(&solo_dev->pdev->dev, vbuf->sglist, vbuf->num_pages, 531 dma_unmap_sg(&solo_dev->pdev->dev, vbuf->sgl, vbuf->nents,
503 DMA_FROM_DEVICE); 532 DMA_FROM_DEVICE);
533
534 /* add the header only after dma_unmap_sg() */
535 if (!vop_type(vh))
536 sg_copy_from_buffer(vbuf->sgl, vbuf->nents,
537 solo_enc->vop, solo_enc->vop_len);
504 return ret; 538 return ret;
505} 539}
506 540
507static int solo_enc_fillbuf(struct solo_enc_dev *solo_enc, 541static int solo_enc_fillbuf(struct solo_enc_dev *solo_enc,
508 struct vb2_buffer *vb, struct solo_enc_buf *enc_buf) 542 struct vb2_buffer *vb, struct solo_enc_buf *enc_buf)
509{ 543{
510 struct vop_header *vh = enc_buf->vh; 544 const vop_header *vh = enc_buf->vh;
511 int ret; 545 int ret;
512 546
513 /* Check for motion flags */ 547 /* Check for motion flags */
@@ -531,8 +565,8 @@ static int solo_enc_fillbuf(struct solo_enc_dev *solo_enc,
531 565
532 if (!ret) { 566 if (!ret) {
533 vb->v4l2_buf.sequence = solo_enc->sequence++; 567 vb->v4l2_buf.sequence = solo_enc->sequence++;
534 vb->v4l2_buf.timestamp.tv_sec = vh->sec; 568 vb->v4l2_buf.timestamp.tv_sec = vop_sec(vh);
535 vb->v4l2_buf.timestamp.tv_usec = vh->usec; 569 vb->v4l2_buf.timestamp.tv_usec = vop_usec(vh);
536 } 570 }
537 571
538 vb2_buffer_done(vb, ret ? VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE); 572 vb2_buffer_done(vb, ret ? VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE);
@@ -605,15 +639,13 @@ static void solo_handle_ring(struct solo_dev *solo_dev)
605 639
606 /* FAIL... */ 640 /* FAIL... */
607 if (enc_get_mpeg_dma(solo_dev, solo_dev->vh_dma, off, 641 if (enc_get_mpeg_dma(solo_dev, solo_dev->vh_dma, off,
608 sizeof(struct vop_header))) 642 sizeof(vop_header)))
609 continue; 643 continue;
610 644
611 enc_buf.vh = (struct vop_header *)solo_dev->vh_buf; 645 enc_buf.vh = solo_dev->vh_buf;
612 enc_buf.vh->mpeg_off -= SOLO_MP4E_EXT_ADDR(solo_dev);
613 enc_buf.vh->jpeg_off -= SOLO_JPEG_EXT_ADDR(solo_dev);
614 646
615 /* Sanity check */ 647 /* Sanity check */
616 if (enc_buf.vh->mpeg_off != off) 648 if (vop_mpeg_offset(enc_buf.vh) != SOLO_MP4E_EXT_ADDR(solo_dev) + off)
617 continue; 649 continue;
618 650
619 if (solo_motion_detected(solo_enc)) 651 if (solo_motion_detected(solo_enc))
@@ -1329,7 +1361,7 @@ int solo_enc_v4l2_init(struct solo_dev *solo_dev, unsigned nr)
1329 1361
1330 init_waitqueue_head(&solo_dev->ring_thread_wait); 1362 init_waitqueue_head(&solo_dev->ring_thread_wait);
1331 1363
1332 solo_dev->vh_size = sizeof(struct vop_header); 1364 solo_dev->vh_size = sizeof(vop_header);
1333 solo_dev->vh_buf = pci_alloc_consistent(solo_dev->pdev, 1365 solo_dev->vh_buf = pci_alloc_consistent(solo_dev->pdev,
1334 solo_dev->vh_size, 1366 solo_dev->vh_size,
1335 &solo_dev->vh_dma); 1367 &solo_dev->vh_dma);
diff --git a/drivers/staging/media/solo6x10/solo6x10.h b/drivers/staging/media/solo6x10/solo6x10.h
index 6f91d2e34b2a..f1bbb8cb74e6 100644
--- a/drivers/staging/media/solo6x10/solo6x10.h
+++ b/drivers/staging/media/solo6x10/solo6x10.h
@@ -94,7 +94,6 @@
94#define SOLO_ENC_MODE_HD1 1 94#define SOLO_ENC_MODE_HD1 1
95#define SOLO_ENC_MODE_D1 9 95#define SOLO_ENC_MODE_D1 9
96 96
97#define SOLO_DEFAULT_GOP 30
98#define SOLO_DEFAULT_QP 3 97#define SOLO_DEFAULT_QP 3
99 98
100#ifndef V4L2_BUF_FLAG_MOTION_ON 99#ifndef V4L2_BUF_FLAG_MOTION_ON