Skip to content

Commit

Permalink
[media] ec168: re-implement firmware loading
Browse files Browse the repository at this point in the history
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 d32be21 commit 77e28ec
Showing 1 changed file with 11 additions and 14 deletions.
25 changes: 11 additions & 14 deletions drivers/media/dvb/dvb-usb/ec168.c
Original file line number Diff line number Diff line change
Expand Up @@ -209,31 +209,28 @@ static int ec168_identify_state(struct dvb_usb_device *d)
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"? */
Expand Down

0 comments on commit 77e28ec

Please sign in to comment.