[media] ec168: re-implement firmware loading
authorAntti Palosaari <crope@iki.fi>
Wed, 13 Jun 2012 01:16:12 +0000 (22:16 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 4 Aug 2012 10:56:31 +0000 (07:56 -0300)
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-usb/ec168.c

index 717c66a4bdddfeaf910aff3e824e6cc98698a6c8..3ed80b01d5fa8bc61dc4d74c7ea485e51da6da81 100644 (file)
@@ -209,31 +209,28 @@ error:
 static int ec168_download_firmware(struct dvb_usb_device *d,
                const struct firmware *fw)
 {
-       int i, len, packets, remainder, ret;
-       u16 addr = 0x0000; /* firmware start address */
+       int ret, len, remaining;
        struct ec168_req req = {DOWNLOAD_FIRMWARE, 0, 0, 0, NULL};
        pr_debug("%s:\n", __func__);
 
-       #define FW_PACKET_MAX_DATA  2048
-       packets = fw->size / FW_PACKET_MAX_DATA;
-       remainder = fw->size % FW_PACKET_MAX_DATA;
-       len = FW_PACKET_MAX_DATA;
-       for (i = 0; i <= packets; i++) {
-               if (i == packets)  /* set size of the last packet */
-                       len = remainder;
+       #define LEN_MAX 2048 /* max packet size */
+       for (remaining = fw->size; remaining > 0; remaining -= LEN_MAX) {
+               len = remaining;
+               if (len > LEN_MAX)
+                       len = LEN_MAX;
 
                req.size = len;
-               req.data = (u8 *)(fw->data + i * FW_PACKET_MAX_DATA);
-               req.index = addr;
-               addr += FW_PACKET_MAX_DATA;
+               req.data = (u8 *) &fw->data[fw->size - remaining];
+               req.index = fw->size - remaining;
 
                ret = ec168_ctrl_msg(d, &req);
                if (ret) {
-                       pr_err("%s: firmware download failed=%d packet=%d\n",
-                                       KBUILD_MODNAME, ret, i);
+                       pr_err("%s: firmware download failed=%d\n",
+                                       KBUILD_MODNAME, ret);
                        goto error;
                }
        }
+
        req.size = 0;
 
        /* set "warm"? */