Merge tag 'media/v3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[pandora-kernel.git] / drivers / media / pci / cx23885 / cx23885-core.c
index 3bd386c..1d9d0f8 100644 (file)
@@ -1453,17 +1453,12 @@ int cx23885_buf_prepare(struct cx23885_buffer *buf, struct cx23885_tsport *port)
        struct cx23885_dev *dev = port->dev;
        int size = port->ts_packet_size * port->ts_packet_count;
        struct sg_table *sgt = vb2_dma_sg_plane_desc(&buf->vb, 0);
-       int rc;
 
        dprintk(1, "%s: %p\n", __func__, buf);
        if (vb2_plane_size(&buf->vb, 0) < size)
                return -EINVAL;
        vb2_set_plane_payload(&buf->vb, 0, size);
 
-       rc = dma_map_sg(&dev->pci->dev, sgt->sgl, sgt->nents, DMA_FROM_DEVICE);
-       if (!rc)
-               return -EIO;
-
        cx23885_risc_databuffer(dev->pci, &buf->risc,
                                sgt->sgl,
                                port->ts_packet_size, port->ts_packet_count, 0);
@@ -1997,9 +1992,14 @@ static int cx23885_initdev(struct pci_dev *pci_dev,
        if (!pci_dma_supported(pci_dev, 0xffffffff)) {
                printk("%s/0: Oops: no 32bit PCI DMA ???\n", dev->name);
                err = -EIO;
-               goto fail_irq;
+               goto fail_context;
        }
 
+       dev->alloc_ctx = vb2_dma_sg_init_ctx(&pci_dev->dev);
+       if (IS_ERR(dev->alloc_ctx)) {
+               err = PTR_ERR(dev->alloc_ctx);
+               goto fail_context;
+       }
        err = request_irq(pci_dev->irq, cx23885_irq,
                          IRQF_SHARED, dev->name, dev);
        if (err < 0) {
@@ -2028,6 +2028,8 @@ static int cx23885_initdev(struct pci_dev *pci_dev,
        return 0;
 
 fail_irq:
+       vb2_dma_sg_cleanup_ctx(dev->alloc_ctx);
+fail_context:
        cx23885_dev_unregister(dev);
 fail_ctrl:
        v4l2_ctrl_handler_free(hdl);
@@ -2053,6 +2055,7 @@ static void cx23885_finidev(struct pci_dev *pci_dev)
        free_irq(pci_dev->irq, dev);
 
        cx23885_dev_unregister(dev);
+       vb2_dma_sg_cleanup_ctx(dev->alloc_ctx);
        v4l2_ctrl_handler_free(&dev->ctrl_handler);
        v4l2_device_unregister(v4l2_dev);
        kfree(dev);