[media] dvb_usb_v2: .read_mac_address() callback changes
authorAntti Palosaari <crope@iki.fi>
Sat, 16 Jun 2012 00:17:04 +0000 (21:17 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 4 Aug 2012 10:56:34 +0000 (07:56 -0300)
Give DVB adapter as a parameter for callback. MAC address is
adapter property and it could be (at least in theory) there
is devices having multiple adapters and all has own MAC.

Also add error handling. If callback fails error is returned
which leads device unregister.

Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-usb/dvb_usb.h
drivers/media/dvb/dvb-usb/dvb_usb_dvb.c

index 6392fd3d416478f3c44c3ff9853b373debd5d120..e7015ce5b3b438aa1db51d19afb2d539a19d7d5e 100644 (file)
@@ -181,7 +181,7 @@ struct dvb_usb_device_properties {
 
        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 []);
+       int (*read_mac_address) (struct dvb_usb_adapter *, u8 []);
        int (*frontend_attach) (struct dvb_usb_adapter *);
        int (*tuner_attach) (struct dvb_usb_adapter *);
        int (*frontend_ctrl) (struct dvb_frontend *, int);
index bc94874039e81adff6e0bcf35e964eba5ba2db16..3cbae02ea51ec68edd1bd91a1d4e62d892552950 100644 (file)
@@ -203,22 +203,21 @@ int dvb_usbv2_adapter_dvb_init(struct dvb_usb_adapter *adap)
                                ret);
                goto err;
        }
+
        adap->dvb_adap.priv = adap;
 
        if (adap->dev->props->read_mac_address) {
-               if (adap->dev->props->read_mac_address(adap->dev,
-                               adap->dvb_adap.proposed_mac) == 0)
-                       pr_info("%s: MAC address: %pM\n", KBUILD_MODNAME,
-                                       adap->dvb_adap.proposed_mac);
-               else
-                       pr_err("%s: MAC address reading failed\n",
-                                       KBUILD_MODNAME);
-       }
+               ret = adap->dev->props->read_mac_address(adap,
+                               adap->dvb_adap.proposed_mac);
+               if (ret < 0)
+                       goto err_dmx;
 
+               pr_info("%s: MAC address: %pM\n", KBUILD_MODNAME,
+                               adap->dvb_adap.proposed_mac);
+       }
 
        adap->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING;
        adap->demux.priv             = adap;
-
        adap->demux.filternum        = 0;
        if (adap->demux.filternum < adap->max_feed_count)
                adap->demux.filternum = adap->max_feed_count;