Skip to content

Commit

Permalink
[media] dvb-usb: create one media_dev per adapter
Browse files Browse the repository at this point in the history
Instead of assuming just one adapter, change the code to store
one media controller per adapter.

This works fine for dvb-usb, as, on all drivers here, it is not
possible to write a media graph that would mix resources between
the two different adapters.

Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  • Loading branch information
mchehab committed Feb 26, 2015
1 parent 496ccf9 commit a3dfc6d
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 20 deletions.
28 changes: 12 additions & 16 deletions drivers/media/usb/dvb-usb/dvb-usb-dvb.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,11 @@ static int dvb_usb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
return dvb_usb_ctrl_feed(dvbdmxfeed,0);
}

static void dvb_usb_media_device_register(struct dvb_usb_device *d)
static void dvb_usb_media_device_register(struct dvb_usb_adapter *adap)
{
#ifdef CONFIG_MEDIA_CONTROLLER_DVB

struct media_device *mdev;
struct dvb_usb_device *d = adap->dev;
struct usb_device *udev = d->udev;
int ret;

Expand All @@ -122,24 +122,21 @@ static void dvb_usb_media_device_register(struct dvb_usb_device *d)
kfree(mdev);
return;
}

d->media_dev = mdev;
adap->dvb_adap.mdev = mdev;

dev_info(&d->udev->dev, "media controller created\n");

#endif
}

static void dvb_usb_media_device_unregister(struct dvb_usb_device *d)
static void dvb_usb_media_device_unregister(struct dvb_usb_adapter *adap)
{
#ifdef CONFIG_MEDIA_CONTROLLER_DVB
if (!d->media_dev)
if (!adap->dvb_adap.mdev)
return;

media_device_unregister(d->media_dev);
kfree(d->media_dev);
d->media_dev = NULL;

media_device_unregister(adap->dvb_adap.mdev);
kfree(adap->dvb_adap.mdev);
adap->dvb_adap.mdev = NULL;
#endif
}

Expand All @@ -157,8 +154,7 @@ int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap, short *adapter_nums)
adap->dvb_adap.priv = adap;

#ifdef CONFIG_MEDIA_CONTROLLER_DVB
dvb_usb_media_device_register(adap->dev);
adap->dvb_adap.mdev = adap->dev->media_dev;
dvb_usb_media_device_register(adap);
#endif

if (adap->dev->props.read_mac_address) {
Expand Down Expand Up @@ -208,7 +204,7 @@ int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap, short *adapter_nums)
err_dmx_dev:
dvb_dmx_release(&adap->demux);
err_dmx:
dvb_usb_media_device_unregister(adap->dev);
dvb_usb_media_device_unregister(adap);
dvb_unregister_adapter(&adap->dvb_adap);
err:
return ret;
Expand All @@ -222,7 +218,7 @@ int dvb_usb_adapter_dvb_exit(struct dvb_usb_adapter *adap)
adap->demux.dmx.close(&adap->demux.dmx);
dvb_dmxdev_release(&adap->dmxdev);
dvb_dmx_release(&adap->demux);
dvb_usb_media_device_unregister(adap->dev);
dvb_usb_media_device_unregister(adap);
dvb_unregister_adapter(&adap->dvb_adap);
adap->state &= ~DVB_USB_ADAP_STATE_DVB;
}
Expand Down Expand Up @@ -324,7 +320,7 @@ int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap)
adap->num_frontends_initialized++;
}

dvb_create_media_graph(adap->dev->media_dev);
dvb_create_media_graph(adap->dvb_adap.mdev);

return 0;
}
Expand Down
4 changes: 0 additions & 4 deletions drivers/media/usb/dvb-usb/dvb-usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -453,10 +453,6 @@ struct dvb_usb_device {
struct module *owner;

void *priv;

#ifdef CONFIG_MEDIA_CONTROLLER_DVB
struct media_device *media_dev;
#endif
};

extern int dvb_usb_device_init(struct usb_interface *,
Expand Down

0 comments on commit a3dfc6d

Please sign in to comment.