aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2013-03-25 04:36:44 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-03-25 07:40:29 -0400
commitd9ebd623c1912f8f02fc71d4e645973f51f83362 (patch)
treea1094767910fbb7c53a242766b1c4c3bb62fc53f
parent20c5f4925e96719eb83a4f15765a6e653d24bfde (diff)
[media] solo6x10: add v4l2_device
Add support for struct v4l2_device. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/staging/media/solo6x10/core.c8
-rw-r--r--drivers/staging/media/solo6x10/solo6x10.h2
-rw-r--r--drivers/staging/media/solo6x10/v4l2-enc.c2
-rw-r--r--drivers/staging/media/solo6x10/v4l2.c2
4 files changed, 10 insertions, 4 deletions
diff --git a/drivers/staging/media/solo6x10/core.c b/drivers/staging/media/solo6x10/core.c
index 75d98cc61c40..05ecd48e5507 100644
--- a/drivers/staging/media/solo6x10/core.c
+++ b/drivers/staging/media/solo6x10/core.c
@@ -181,6 +181,7 @@ static void free_solo_dev(struct solo_dev *solo_dev)
181 181
182 pci_release_regions(pdev); 182 pci_release_regions(pdev);
183 pci_disable_device(pdev); 183 pci_disable_device(pdev);
184 v4l2_device_unregister(&solo_dev->v4l2_dev);
184 pci_set_drvdata(pdev, NULL); 185 pci_set_drvdata(pdev, NULL);
185 186
186 kfree(solo_dev); 187 kfree(solo_dev);
@@ -511,7 +512,9 @@ static int solo_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
511 solo_dev->type = id->driver_data; 512 solo_dev->type = id->driver_data;
512 solo_dev->pdev = pdev; 513 solo_dev->pdev = pdev;
513 spin_lock_init(&solo_dev->reg_io_lock); 514 spin_lock_init(&solo_dev->reg_io_lock);
514 pci_set_drvdata(pdev, solo_dev); 515 ret = v4l2_device_register(&pdev->dev, &solo_dev->v4l2_dev);
516 if (ret)
517 goto fail_probe;
515 518
516 /* Only for during init */ 519 /* Only for during init */
517 solo_dev->p2m_jiffies = msecs_to_jiffies(100); 520 solo_dev->p2m_jiffies = msecs_to_jiffies(100);
@@ -678,7 +681,8 @@ fail_probe:
678 681
679static void solo_pci_remove(struct pci_dev *pdev) 682static void solo_pci_remove(struct pci_dev *pdev)
680{ 683{
681 struct solo_dev *solo_dev = pci_get_drvdata(pdev); 684 struct v4l2_device *v4l2_dev = pci_get_drvdata(pdev);
685 struct solo_dev *solo_dev = container_of(v4l2_dev, struct solo_dev, v4l2_dev);
682 686
683 free_solo_dev(solo_dev); 687 free_solo_dev(solo_dev);
684} 688}
diff --git a/drivers/staging/media/solo6x10/solo6x10.h b/drivers/staging/media/solo6x10/solo6x10.h
index d8d61deb7237..6501cb9afba3 100644
--- a/drivers/staging/media/solo6x10/solo6x10.h
+++ b/drivers/staging/media/solo6x10/solo6x10.h
@@ -37,6 +37,7 @@
37#include <linux/videodev2.h> 37#include <linux/videodev2.h>
38 38
39#include <media/v4l2-dev.h> 39#include <media/v4l2-dev.h>
40#include <media/v4l2-device.h>
40#include <media/videobuf-core.h> 41#include <media/videobuf-core.h>
41 42
42#include "registers.h" 43#include "registers.h"
@@ -178,6 +179,7 @@ struct solo_dev {
178 u32 irq_mask; 179 u32 irq_mask;
179 u32 motion_mask; 180 u32 motion_mask;
180 spinlock_t reg_io_lock; 181 spinlock_t reg_io_lock;
182 struct v4l2_device v4l2_dev;
181 183
182 /* tw28xx accounting */ 184 /* tw28xx accounting */
183 u8 tw2865, tw2864, tw2815; 185 u8 tw2865, tw2864, tw2815;
diff --git a/drivers/staging/media/solo6x10/v4l2-enc.c b/drivers/staging/media/solo6x10/v4l2-enc.c
index bb5f1b82ddcd..d085e386e087 100644
--- a/drivers/staging/media/solo6x10/v4l2-enc.c
+++ b/drivers/staging/media/solo6x10/v4l2-enc.c
@@ -1670,7 +1670,7 @@ static struct solo_enc_dev *solo_enc_alloc(struct solo_dev *solo_dev,
1670 solo_enc->ch = ch; 1670 solo_enc->ch = ch;
1671 1671
1672 *solo_enc->vfd = solo_enc_template; 1672 *solo_enc->vfd = solo_enc_template;
1673 solo_enc->vfd->parent = &solo_dev->pdev->dev; 1673 solo_enc->vfd->v4l2_dev = &solo_dev->v4l2_dev;
1674 ret = video_register_device(solo_enc->vfd, VFL_TYPE_GRABBER, nr); 1674 ret = video_register_device(solo_enc->vfd, VFL_TYPE_GRABBER, nr);
1675 if (ret < 0) { 1675 if (ret < 0) {
1676 video_device_release(solo_enc->vfd); 1676 video_device_release(solo_enc->vfd);
diff --git a/drivers/staging/media/solo6x10/v4l2.c b/drivers/staging/media/solo6x10/v4l2.c
index 70da9e2187d2..33171161002f 100644
--- a/drivers/staging/media/solo6x10/v4l2.c
+++ b/drivers/staging/media/solo6x10/v4l2.c
@@ -823,7 +823,7 @@ int solo_v4l2_init(struct solo_dev *solo_dev, unsigned nr)
823 return -ENOMEM; 823 return -ENOMEM;
824 824
825 *solo_dev->vfd = solo_v4l2_template; 825 *solo_dev->vfd = solo_v4l2_template;
826 solo_dev->vfd->parent = &solo_dev->pdev->dev; 826 solo_dev->vfd->v4l2_dev = &solo_dev->v4l2_dev;
827 827
828 ret = video_register_device(solo_dev->vfd, VFL_TYPE_GRABBER, nr); 828 ret = video_register_device(solo_dev->vfd, VFL_TYPE_GRABBER, nr);
829 if (ret < 0) { 829 if (ret < 0) {