Skip to content

Commit

Permalink
[media] dvb_usb_v2: implement .get_adapter_count()
Browse files Browse the repository at this point in the history
Callback to resolve adapter count of current device.
Old static .num_adapters field can be still used but
the new .get_adapter_count() has priority if both
offered by the driver.

Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Antti Palosaari authored and Mauro Carvalho Chehab committed Aug 4, 2012
1 parent 7dfd124 commit 5b85300
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
1 change: 1 addition & 0 deletions drivers/media/dvb/dvb-usb/dvb_usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@ struct dvb_usb_device_properties {
int size_of_priv;

int num_adapters;
int (*get_adapter_count) (struct dvb_usb_device *);
struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];

int (*power_ctrl) (struct dvb_usb_device *, int);
Expand Down
19 changes: 16 additions & 3 deletions drivers/media/dvb/dvb-usb/dvb_usb_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,19 @@ MODULE_PARM_DESC(force_pid_filter_usage, "force all dvb-usb-devices to use a" \
static int dvb_usb_adapter_init(struct dvb_usb_device *d)
{
struct dvb_usb_adapter *adap;
int ret, n, o;
int ret, n, o, adapter_count;

for (n = 0; n < d->props.num_adapters; n++) {
/* resolve adapter count */
adapter_count = d->props.num_adapters;
if (d->props.get_adapter_count) {
ret = d->props.get_adapter_count(d);
if (ret < 0)
goto err;

adapter_count = ret;
}

for (n = 0; n < adapter_count; n++) {
adap = &d->adapter[n];
adap->dev = d;
adap->id = n;
Expand Down Expand Up @@ -133,6 +143,9 @@ static int dvb_usb_adapter_init(struct dvb_usb_device *d)
}

return 0;
err:
pr_debug("%s: failed=%d\n", __func__, ret);
return ret;
}

static int dvb_usb_adapter_exit(struct dvb_usb_device *d)
Expand Down Expand Up @@ -297,7 +310,7 @@ EXPORT_SYMBOL(dvb_usbv2_device_init);
void dvb_usbv2_device_exit(struct usb_interface *intf)
{
struct dvb_usb_device *d = usb_get_intfdata(intf);
const char *name;
const char *name = NULL;

usb_set_intfdata(intf, NULL);
if (d) {
Expand Down

0 comments on commit 5b85300

Please sign in to comment.