From 88fbaf381ba858f01d8b9d5efff3f3c2f6bcdb16 Mon Sep 17 00:00:00 2001 From: Mike Isely Date: Sat, 30 Aug 2008 15:09:31 -0300 Subject: [PATCH] --- yaml --- r: 113891 b: refs/heads/master c: 5f33df1443cd53283279d017b45ed1b1bc66f622 h: refs/heads/master i: 113889: 851035465442f5c3d83b10582f9aff73c160d874 113887: 3639224d6e1d7bfe1cb6ac26dd9028ca47049175 v: v3 --- [refs] | 2 +- trunk/drivers/media/video/pvrusb2/pvrusb2-hdw.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 0a7fca3cf27a..029f28a921d2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 83512e207479d0bdb83ee1e000a306af9e6e870e +refs/heads/master: 5f33df1443cd53283279d017b45ed1b1bc66f622 diff --git a/trunk/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/trunk/drivers/media/video/pvrusb2/pvrusb2-hdw.c index 7fa903ad26bb..c8dedbab6e39 100644 --- a/trunk/drivers/media/video/pvrusb2/pvrusb2-hdw.c +++ b/trunk/drivers/media/video/pvrusb2/pvrusb2-hdw.c @@ -1313,6 +1313,17 @@ int pvr2_upload_firmware2(struct pvr2_hdw *hdw) if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE; memcpy(fw_ptr, fw_entry->data + fw_done, bcnt); /* Usbsnoop log shows that we must swap bytes... */ + /* Some background info: The data being swapped here is a + firmware image destined for the mpeg encoder chip that + lives at the other end of a USB endpoint. The encoder + chip always talks in 32 bit chunks and its storage is + organized into 32 bit words. However from the file + system to the encoder chip everything is purely a byte + stream. The firmware file's contents are always 32 bit + swapped from what the encoder expects. Thus the need + always exists to swap the bytes regardless of the endian + type of the host processor and therefore swab32() makes + the most sense. */ for (icnt = 0; icnt < bcnt/4 ; icnt++) ((u32 *)fw_ptr)[icnt] = swab32(((u32 *)fw_ptr)[icnt]);