Commit 7b12adf6 authored by Shuah Khan's avatar Shuah Khan Committed by Mauro Carvalho Chehab

[media] media: au0828 handle media_init and media_register window

Media device initialization and registration steps are split. There is a
window between media device init and media device register during usb
probe.

au0828 bridge driver and snd-usb-audio could try to initialize the media
device, if they simply checked, whether the device has been registered.
They also need to check whether the device has been initialized.

Change the au0828-core to check if media device is already initialized
during initialization step and check if media device is already
registered during the registration step.

[mchehab@osg.samsung.com: fix a merge conflict]
Signed-off-by: default avatarShuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 182dde7c
...@@ -195,6 +195,8 @@ static int au0828_media_device_init(struct au0828_dev *dev, ...@@ -195,6 +195,8 @@ static int au0828_media_device_init(struct au0828_dev *dev,
if (!mdev) if (!mdev)
return -ENOMEM; return -ENOMEM;
/* check if media device is already initialized */
if (!mdev->dev)
media_device_usb_init(mdev, udev, udev->product); media_device_usb_init(mdev, udev, udev->product);
dev->media_dev = mdev; dev->media_dev = mdev;
...@@ -202,6 +204,26 @@ static int au0828_media_device_init(struct au0828_dev *dev, ...@@ -202,6 +204,26 @@ static int au0828_media_device_init(struct au0828_dev *dev,
return 0; 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, static int au0828_usb_probe(struct usb_interface *interface,
const struct usb_device_id *id) const struct usb_device_id *id)
...@@ -305,9 +327,7 @@ static int au0828_usb_probe(struct usb_interface *interface, ...@@ -305,9 +327,7 @@ static int au0828_usb_probe(struct usb_interface *interface,
mutex_unlock(&dev->lock); mutex_unlock(&dev->lock);
#ifdef CONFIG_MEDIA_CONTROLLER retval = au0828_media_device_register(dev, usbdev);
retval = media_device_register(dev->media_dev);
#endif
done: done:
if (retval < 0) if (retval < 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment