aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb')
-rw-r--r--drivers/media/dvb/frontends/af9013.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/drivers/media/dvb/frontends/af9013.c b/drivers/media/dvb/frontends/af9013.c
index 6f50f0673994..345311c33383 100644
--- a/drivers/media/dvb/frontends/af9013.c
+++ b/drivers/media/dvb/frontends/af9013.c
@@ -1323,13 +1323,11 @@ static struct dvb_frontend_ops af9013_ops;
1323 1323
1324static int af9013_download_firmware(struct af9013_state *state) 1324static int af9013_download_firmware(struct af9013_state *state)
1325{ 1325{
1326 int i, len, packets, remainder, ret; 1326 int i, len, remaining, ret;
1327 const struct firmware *fw; 1327 const struct firmware *fw;
1328 u16 addr = 0x5100; /* firmware start address */
1329 u16 checksum = 0; 1328 u16 checksum = 0;
1330 u8 val; 1329 u8 val;
1331 u8 fw_params[4]; 1330 u8 fw_params[4];
1332 u8 *data;
1333 u8 *fw_file = AF9013_DEFAULT_FIRMWARE; 1331 u8 *fw_file = AF9013_DEFAULT_FIRMWARE;
1334 1332
1335 msleep(100); 1333 msleep(100);
@@ -1373,21 +1371,18 @@ static int af9013_download_firmware(struct af9013_state *state)
1373 if (ret) 1371 if (ret)
1374 goto error_release; 1372 goto error_release;
1375 1373
1376 #define FW_PACKET_MAX_DATA 16 1374 #define FW_ADDR 0x5100 /* firmware start address */
1377 1375 #define LEN_MAX 16 /* max packet size */
1378 packets = fw->size / FW_PACKET_MAX_DATA; 1376 for (remaining = fw->size; remaining > 0; remaining -= LEN_MAX) {
1379 remainder = fw->size % FW_PACKET_MAX_DATA; 1377 len = remaining;
1380 len = FW_PACKET_MAX_DATA; 1378 if (len > LEN_MAX)
1381 for (i = 0; i <= packets; i++) { 1379 len = LEN_MAX;
1382 if (i == packets) /* set size of the last packet */
1383 len = remainder;
1384
1385 data = (u8 *)(fw->data + i * FW_PACKET_MAX_DATA);
1386 ret = af9013_write_ofsm_regs(state, addr, data, len);
1387 addr += FW_PACKET_MAX_DATA;
1388 1380
1381 ret = af9013_write_ofsm_regs(state,
1382 FW_ADDR + fw->size - remaining,
1383 (u8 *) &fw->data[fw->size - remaining], len);
1389 if (ret) { 1384 if (ret) {
1390 err("firmware download failed at %d with %d", i, ret); 1385 err("firmware download failed:%d", ret);
1391 goto error_release; 1386 goto error_release;
1392 } 1387 }
1393 } 1388 }