lkml.org 
[lkml]   [2012]   [Aug]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 3/3 v2] [media] sta2x11_vip: convert to videobuf2 and control framework
    Date
    On Mon August 6 2012 10:17:39 Federico Vaga wrote:
    > Signed-off-by: Federico Vaga <federico.vaga@gmail.com>
    > Acked-by: Giancarlo Asnaghi <giancarlo.asnaghi@st.com>
    >
    > ---
    > drivers/media/video/sta2x11_vip.c | 1239 +++++++++++++------------------------
    > 1 file modificato, 414 inserzioni(+), 825 rimozioni(-)
    >
    > diff --git a/drivers/media/video/sta2x11_vip.c b/drivers/media/video/sta2x11_vip.c
    > index 4c10205..ffd9f0a 100644
    > --- a/drivers/media/video/sta2x11_vip.c
    > +++ b/drivers/media/video/sta2x11_vip.c
    > @@ -1186,25 +798,6 @@ static void vip_gpio_release(struct device *dev, int pin, const char *name)
    > }
    > }
    >
    > -/**
    > - * sta2x11_vip_init_one - init one instance of video device
    > - * @pdev: PCI device
    > - * @ent: (not used)
    > - *
    > - * allocate reset pins for DAC.
    > - * Reset video DAC, this is done via reset line.
    > - * allocate memory for managing device
    > - * request interrupt
    > - * map IO region
    > - * register device
    > - * find and initialize video DAC
    > - *
    > - * return value: 0, no error
    > - *
    > - * -ENOMEM, no memory
    > - *
    > - * -ENODEV, device could not be detected or registered
    > - */
    > static int __devinit sta2x11_vip_init_one(struct pci_dev *pdev,
    > const struct pci_device_id *ent)
    > {
    > @@ -1212,10 +805,17 @@ static int __devinit sta2x11_vip_init_one(struct pci_dev *pdev,
    > struct sta2x11_vip *vip;
    > struct vip_config *config;
    >
    > + /* Check if hardware support 26-bit DMA */
    > + if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(26))) {
    > + dev_err(&pdev->dev, "26-bit DMA addressing not available\n");
    > + return -EINVAL;
    > + }
    > + /* Enable PCI */
    > ret = pci_enable_device(pdev);
    > if (ret)
    > return ret;
    >
    > + /* Get VIP platform data */
    > config = dev_get_platdata(&pdev->dev);
    > if (!config) {
    > dev_info(&pdev->dev, "VIP slot disabled\n");
    > @@ -1223,6 +823,7 @@ static int __devinit sta2x11_vip_init_one(struct pci_dev *pdev,
    > goto disable;
    > }
    >
    > + /* Power configuration */
    > ret = vip_gpio_reserve(&pdev->dev, config->pwr_pin, 0,
    > config->pwr_name);
    > if (ret)
    > @@ -1237,7 +838,6 @@ static int __devinit sta2x11_vip_init_one(struct pci_dev *pdev,
    > goto disable;
    > }
    > }
    > -
    > if (config->pwr_pin != -1) {
    > /* Datasheet says 5ms between PWR and RST */
    > usleep_range(5000, 25000);
    > @@ -1251,17 +851,20 @@ static int __devinit sta2x11_vip_init_one(struct pci_dev *pdev,
    > }
    > usleep_range(5000, 25000);
    >
    > + /* Allocate a new VIP instance */
    > vip = kzalloc(sizeof(struct sta2x11_vip), GFP_KERNEL);
    > if (!vip) {
    > ret = -ENOMEM;
    > goto release_gpios;
    > }
    > -
    > vip->pdev = pdev;
    > vip->std = V4L2_STD_PAL;
    > vip->format = formats_50[0];
    > vip->config = config;
    >
    > + ret = sta2x11_vip_init_controls(vip);
    > + if (ret)
    > + goto free_mem;
    > if (v4l2_device_register(&pdev->dev, &vip->v4l2_dev))
    > goto free_mem;
    >
    > @@ -1271,46 +874,52 @@ static int __devinit sta2x11_vip_init_one(struct pci_dev *pdev,
    >
    > pci_set_master(pdev);
    >
    > - ret = pci_request_regions(pdev, DRV_NAME);
    > + ret = pci_request_regions(pdev, KBUILD_MODNAME);
    > if (ret)
    > goto unreg;
    >
    > vip->iomem = pci_iomap(pdev, 0, 0x100);
    > if (!vip->iomem) {
    > - ret = -ENOMEM; /* FIXME */
    > + ret = -ENOMEM;
    > goto release;
    > }
    >
    > pci_enable_msi(pdev);
    >
    > - INIT_LIST_HEAD(&vip->capture);
    > + /* Initialize buffer */
    > + ret = sta2x11_vip_init_buffer(vip);
    > + if (ret)
    > + goto unmap;
    > +
    > spin_lock_init(&vip->slock);
    > - mutex_init(&vip->mutex);
    > - vip->started = 0;
    > - vip->disabled = 0;
    >
    > ret = request_irq(pdev->irq,
    > (irq_handler_t) vip_irq,
    > - IRQF_SHARED, DRV_NAME, vip);
    > + IRQF_SHARED, KBUILD_MODNAME, vip);
    > if (ret) {
    > dev_err(&pdev->dev, "request_irq failed\n");
    > ret = -ENODEV;
    > - goto unmap;
    > + goto release_buf;
    > }
    >
    > + /* Alloc, initialize and register video device */
    > vip->video_dev = video_device_alloc();
    > if (!vip->video_dev) {
    > ret = -ENOMEM;
    > goto release_irq;
    > }
    >
    > - *(vip->video_dev) = video_dev_template;
    > + vip->video_dev = &video_dev_template;
    > + vip->video_dev->v4l2_dev = &vip->v4l2_dev;
    > + vip->video_dev->queue = &vip->vb_vidq;
    > + vip->video_dev->flags |= V4L2_FL_USES_V4L2_FH | V4L2_FL_USE_FH_PRIO;

    Been there, done that :-)

    V4L2_FL_USE_FH_PRIO is a bit number, not a bit mask. Use set_bit instead:

    set_bit(V4L2_FL_USE_FH_PRIO, &vip->video_dev->flags);

    No need to set V4L2_FL_USES_V4L2_FH, BTW. That will be set automatically as soon
    as v4l2_fh_open is called.

    Regards,

    Hans


    \
     
     \ /
      Last update: 2012-08-06 11:22    [W:0.036 / U:59.904 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site