diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/usb/au0828/au0828-core.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c index 4448399e73c5..cafe57f37e3d 100644 --- a/drivers/media/usb/au0828/au0828-core.c +++ b/drivers/media/usb/au0828/au0828-core.c @@ -195,13 +195,35 @@ static int au0828_media_device_init(struct au0828_dev *dev, if (!mdev) return -ENOMEM; - media_device_usb_init(mdev, udev, udev->product); + /* check if media device is already initialized */ + if (!mdev->dev) + media_device_usb_init(mdev, udev, udev->product); dev->media_dev = mdev; #endif return 0; } +static int au0828_media_device_register(struct au0828_dev *dev, + struct usb_device *udev) +{ +#ifdef CONFIG_MEDIA_CONTROLLER + int ret; + + if (dev->media_dev && + !media_devnode_is_registered(&dev->media_dev->devnode)) { + + /* register media device */ + ret = media_device_register(dev->media_dev); + if (ret) { + dev_err(&udev->dev, + "Media Device Register Error: %d\n", ret); + return ret; + } + } +#endif + return 0; +} static int au0828_usb_probe(struct usb_interface *interface, const struct usb_device_id *id) @@ -305,9 +327,7 @@ static int au0828_usb_probe(struct usb_interface *interface, mutex_unlock(&dev->lock); -#ifdef CONFIG_MEDIA_CONTROLLER - retval = media_device_register(dev->media_dev); -#endif + retval = au0828_media_device_register(dev, usbdev); done: if (retval < 0) |