Em Wed, 03 Feb 2016 21:03:46 -0700 Shuah Khan shuahkh@osg.samsung.com escreveu:
Change au0828 to use Managed Media Controller API to share media device and coordinate creating/deleting the shared media device with the snd-usb-audio driver. The shared media device is created as device resource of the parent usb device of the two drivers.
Signed-off-by: Shuah Khan shuahkh@osg.samsung.com
drivers/media/usb/au0828/au0828-core.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-)
diff --git a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c index df2bc3f..b8c4bdd 100644 --- a/drivers/media/usb/au0828/au0828-core.c +++ b/drivers/media/usb/au0828/au0828-core.c @@ -134,10 +134,10 @@ static void au0828_unregister_media_device(struct au0828_dev *dev) {
#ifdef CONFIG_MEDIA_CONTROLLER
- if (dev->media_dev) {
- if (dev->media_dev &&
media_device_unregister(dev->media_dev); media_device_cleanup(dev->media_dev);media_devnode_is_registered(&dev->media_dev->devnode)) {
dev->media_dev = NULL; }kfree(dev->media_dev);
#endif @@ -223,23 +223,24 @@ static int au0828_media_device_init(struct au0828_dev *dev, #ifdef CONFIG_MEDIA_CONTROLLER struct media_device *mdev;
- mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
- mdev = media_device_get_devres(&udev->dev); if (!mdev) return -ENOMEM;
- mdev->dev = &udev->dev;
- if (!media_devnode_is_registered(&mdev->devnode)) {
mdev->dev = &udev->dev;
- if (!dev->board.name)
strlcpy(mdev->model, "unknown au0828", sizeof(mdev->model));
- else
strlcpy(mdev->model, dev->board.name, sizeof(mdev->model));
- if (udev->serial)
strlcpy(mdev->serial, udev->serial, sizeof(mdev->serial));
- strcpy(mdev->bus_info, udev->devpath);
- mdev->hw_revision = le16_to_cpu(udev->descriptor.bcdDevice);
- mdev->driver_version = LINUX_VERSION_CODE;
if (udev->product)
strlcpy(mdev->model, udev->product,
sizeof(mdev->model));
Why did you change that? On some boards, udev->product doesn't reflect the brand name, but have just some random generic data.
Also, as the other logs associated with the device uses dev->board.name, we want the media controller to use the same name here. Ok, if this is null, we could use udev->product as a replacement.
if (udev->serial)
strlcpy(mdev->serial, udev->serial,
sizeof(mdev->serial));
strcpy(mdev->bus_info, udev->devpath);
mdev->hw_revision = le16_to_cpu(udev->descriptor.bcdDevice);
- media_device_init(mdev);
media_device_init(mdev);
}
dev->media_dev = mdev;
#endif