aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2012-05-24 22:18:37 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-08-04 07:56:22 -0300
commit43402bbde52e96f950994bc55700814db8d5bc81 (patch)
tree991ee44b56f8ad9ee4e9ad98a07bfebb31002d52
parent[media] dvb_usb_v2: implement .get_adapter_count() (diff)
[media] dvb_usb_v2: implement .read_config()
That callback is called only once when device is connected. Call is done after the possible firmware is downloaded to the device, just after the .power_ctrl() and before adapters are created. Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/dvb/dvb-usb/dvb_usb.h1
-rw-r--r--drivers/media/dvb/dvb-usb/dvb_usb_init.c10
2 files changed, 11 insertions, 0 deletions
diff --git a/drivers/media/dvb/dvb-usb/dvb_usb.h b/drivers/media/dvb/dvb-usb/dvb_usb.h
index a3cc557298b4..8ddae58e8e72 100644
--- a/drivers/media/dvb/dvb-usb/dvb_usb.h
+++ b/drivers/media/dvb/dvb-usb/dvb_usb.h
@@ -275,6 +275,7 @@ struct dvb_usb_device_properties {
struct dvb_usb_adapter_properties adapter[MAX_NO_OF_ADAPTER_PER_DEVICE];
int (*power_ctrl) (struct dvb_usb_device *, int);
+ int (*read_config) (struct dvb_usb_device *d);
int (*read_mac_address) (struct dvb_usb_device *, u8 []);
#define WARM 0
diff --git a/drivers/media/dvb/dvb-usb/dvb_usb_init.c b/drivers/media/dvb/dvb-usb/dvb_usb_init.c
index 11d5c96a4600..d694ea9ecc91 100644
--- a/drivers/media/dvb/dvb-usb/dvb_usb_init.c
+++ b/drivers/media/dvb/dvb-usb/dvb_usb_init.c
@@ -190,6 +190,13 @@ static int dvb_usb_init(struct dvb_usb_device *d)
/* check the capabilities and set appropriate variables */
dvb_usb_device_power_ctrl(d, 1);
+ /* read config */
+ if (d->props.read_config) {
+ ret = d->props.read_config(d);
+ if (ret < 0)
+ goto err;
+ }
+
ret = dvb_usb_i2c_init(d);
if (ret == 0)
ret = dvb_usb_adapter_init(d);
@@ -209,6 +216,9 @@ static int dvb_usb_init(struct dvb_usb_device *d)
dvb_usb_device_power_ctrl(d, 0);
return 0;
+err:
+ pr_debug("%s: failed=%d\n", __func__, ret);
+ return ret;
}
int dvb_usb_device_power_ctrl(struct dvb_usb_device *d, int onoff)