Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

vicam: use request_firmware()

Although it wasn't actually using ihex records before, we use the Intel
HEX record format for this firmware -- because that gives us a simple
way to split it into separate chunks internally as we need, without
loading each part as a separate file.

Signed-off-by: Jaswinder Singh <jaswinder@infradead.org>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>

authored by

Jaswinder Singh and committed by
David Woodhouse
fb54be87 c4667746

+37 -294
+19 -294
drivers/media/video/usbvideo/vicam.c
··· 43 43 #include <linux/vmalloc.h> 44 44 #include <linux/slab.h> 45 45 #include <linux/mutex.h> 46 + #include <linux/firmware.h> 47 + #include <linux/ihex.h> 46 48 #include "usbvideo.h" 47 49 48 50 // #define VICAM_DEBUG ··· 71 69 #define VICAM_FRAMES 2 72 70 73 71 #define VICAM_HEADER_SIZE 64 74 - 75 - /* Not sure what all the bytes in these char 76 - * arrays do, but they're necessary to make 77 - * the camera work. 78 - */ 79 - 80 - static unsigned char setup1[] = { 81 - 0xB6, 0xC3, 0x1F, 0x00, 0x02, 0x64, 0xE7, 0x67, 82 - 0xFD, 0xFF, 0x0E, 0xC0, 0xE7, 0x09, 0xDE, 0x00, 83 - 0x8E, 0x00, 0xC0, 0x09, 0x40, 0x03, 0xC0, 0x17, 84 - 0x44, 0x03, 0x4B, 0xAF, 0xC0, 0x07, 0x00, 0x00, 85 - 0x4B, 0xAF, 0x97, 0xCF, 0x00, 0x00 86 - }; 87 - 88 - static unsigned char setup2[] = { 89 - 0xB6, 0xC3, 0x03, 0x00, 0x03, 0x64, 0x18, 0x00, 90 - 0x00, 0x00 91 - }; 92 - 93 - static unsigned char setup3[] = { 94 - 0xB6, 0xC3, 0x01, 0x00, 0x06, 0x64, 0x00, 0x00 95 - }; 96 - 97 - static unsigned char setup4[] = { 98 - 0xB6, 0xC3, 0x8F, 0x06, 0x02, 0x64, 0xE7, 0x07, 99 - 0x00, 0x00, 0x08, 0xC0, 0xE7, 0x07, 0x00, 0x00, 100 - 0x3E, 0xC0, 0xE7, 0x07, 0x54, 0x01, 0xAA, 0x00, 101 - 0xE7, 0x07, 0xC8, 0x05, 0xB6, 0x00, 0xE7, 0x07, 102 - 0x42, 0x01, 0xD2, 0x00, 0xE7, 0x07, 0x7C, 0x00, 103 - 0x16, 0x00, 0xE7, 0x07, 0x56, 0x00, 0x18, 0x00, 104 - 0xE7, 0x07, 0x06, 0x00, 0x92, 0xC0, 0xE7, 0x07, 105 - 0x00, 0x00, 0x1E, 0xC0, 0xE7, 0x07, 0xFF, 0xFF, 106 - 0x22, 0xC0, 0xE7, 0x07, 0x04, 0x00, 0x24, 0xC0, 107 - 0xE7, 0x07, 0xEC, 0x27, 0x28, 0xC0, 0xE7, 0x07, 108 - 0x16, 0x01, 0x8E, 0x00, 0xE7, 0x87, 0x01, 0x00, 109 - 0x0E, 0xC0, 0x97, 0xCF, 0xD7, 0x09, 0x00, 0xC0, 110 - 0xE7, 0x77, 0x01, 0x00, 0x92, 0xC0, 0x09, 0xC1, 111 - 0xE7, 0x09, 0xFE, 0x05, 0x24, 0x01, 0xE7, 0x09, 112 - 0x04, 0x06, 0x26, 0x01, 0xE7, 0x07, 0x07, 0x00, 113 - 0x92, 0xC0, 0xE7, 0x05, 0x00, 0xC0, 0xC0, 0xDF, 114 - 0x97, 0xCF, 0x17, 0x00, 0x57, 0x00, 0x17, 0x02, 115 - 0xD7, 0x09, 0x00, 0xC0, 0xE7, 0x77, 0x01, 0x00, 116 - 0x92, 0xC0, 0x0A, 0xC1, 0xE7, 0x57, 0xFF, 0xFF, 117 - 0xFA, 0x05, 0x0D, 0xC0, 0xE7, 0x57, 0x00, 0x00, 118 - 0xFA, 0x05, 0x0F, 0xC0, 0x9F, 0xAF, 0xC6, 0x00, 119 - 0xE7, 0x05, 0x00, 0xC0, 0xC8, 0x05, 0xC1, 0x05, 120 - 0xC0, 0x05, 0xC0, 0xDF, 0x97, 0xCF, 0x27, 0xDA, 121 - 0xFA, 0x05, 0xEF, 0x07, 0x01, 0x00, 0x0B, 0x06, 122 - 0x73, 0xCF, 0x9F, 0xAF, 0x78, 0x01, 0x9F, 0xAF, 123 - 0x1A, 0x03, 0x6E, 0xCF, 0xE7, 0x09, 0xFC, 0x05, 124 - 0x24, 0x01, 0xE7, 0x09, 0x02, 0x06, 0x26, 0x01, 125 - 0xE7, 0x07, 0x07, 0x00, 0x92, 0xC0, 0xE7, 0x09, 126 - 0xFC, 0x05, 0xFE, 0x05, 0xE7, 0x09, 0x02, 0x06, 127 - 0x04, 0x06, 0xE7, 0x09, 0x00, 0x06, 0xFC, 0x05, 128 - 0xE7, 0x09, 0xFE, 0x05, 0x00, 0x06, 0x27, 0xDA, 129 - 0xFA, 0x05, 0xE7, 0x57, 0x01, 0x00, 0xFA, 0x05, 130 - 0x02, 0xCA, 0x04, 0xC0, 0x97, 0xCF, 0x9F, 0xAF, 131 - 0x66, 0x05, 0x97, 0xCF, 0xE7, 0x07, 0x40, 0x00, 132 - 0x02, 0x06, 0xC8, 0x09, 0xFC, 0x05, 0x9F, 0xAF, 133 - 0xDA, 0x02, 0x97, 0xCF, 0xCF, 0x17, 0x02, 0x00, 134 - 0xEF, 0x57, 0x81, 0x00, 0x09, 0x06, 0x9F, 0xA0, 135 - 0xB6, 0x01, 0xEF, 0x57, 0x80, 0x00, 0x09, 0x06, 136 - 0x9F, 0xA0, 0x40, 0x02, 0xEF, 0x57, 0x01, 0x00, 137 - 0x0B, 0x06, 0x9F, 0xA0, 0x46, 0x03, 0xE7, 0x07, 138 - 0x01, 0x00, 0x0A, 0xC0, 0x46, 0xAF, 0x47, 0xAF, 139 - 0x9F, 0xAF, 0x40, 0x02, 0xE7, 0x07, 0x2E, 0x00, 140 - 0x0A, 0xC0, 0xEF, 0x87, 0x80, 0x00, 0x09, 0x06, 141 - 0x97, 0xCF, 0x00, 0x0E, 0x01, 0x00, 0xC0, 0x57, 142 - 0x51, 0x00, 0x9F, 0xC0, 0x9E, 0x02, 0xC0, 0x57, 143 - 0x50, 0x00, 0x20, 0xC0, 0xC0, 0x57, 0x55, 0x00, 144 - 0x12, 0xC0, 0xC0, 0x57, 0x56, 0x00, 0x9F, 0xC0, 145 - 0x72, 0x02, 0x9F, 0xCF, 0xD6, 0x02, 0xC1, 0x0B, 146 - 0x08, 0x06, 0x01, 0xD0, 0x6F, 0x90, 0x08, 0x06, 147 - 0xC0, 0x07, 0x08, 0x00, 0xC1, 0x0B, 0x08, 0x06, 148 - 0x9F, 0xAF, 0x28, 0x05, 0x97, 0xCF, 0x2F, 0x0E, 149 - 0x02, 0x00, 0x08, 0x06, 0xC0, 0x07, 0x08, 0x00, 150 - 0xC1, 0x0B, 0x08, 0x06, 0x9F, 0xAF, 0x28, 0x05, 151 - 0x9F, 0xCF, 0xD6, 0x02, 0x2F, 0x0E, 0x02, 0x00, 152 - 0x09, 0x06, 0xEF, 0x87, 0x80, 0x00, 0x09, 0x06, 153 - 0x9F, 0xCF, 0xD6, 0x02, 0xEF, 0x67, 0x7F, 0xFF, 154 - 0x09, 0x06, 0xE7, 0x67, 0xFF, 0xFD, 0x22, 0xC0, 155 - 0xE7, 0x67, 0xEF, 0xFF, 0x24, 0xC0, 0xE7, 0x87, 156 - 0x10, 0x00, 0x28, 0xC0, 0x9F, 0xAF, 0xB8, 0x05, 157 - 0xE7, 0x87, 0xE0, 0x21, 0x24, 0xC0, 0x9F, 0xAF, 158 - 0xA8, 0x05, 0xE7, 0x87, 0x08, 0x00, 0x24, 0xC0, 159 - 0xE7, 0x67, 0xDF, 0xFF, 0x24, 0xC0, 0xC8, 0x07, 160 - 0x0A, 0x00, 0xC0, 0x07, 0x00, 0x00, 0xC1, 0x07, 161 - 0x01, 0x00, 0x9F, 0xAF, 0x28, 0x05, 0x9F, 0xAF, 162 - 0xB8, 0x05, 0xC0, 0x07, 0x9E, 0x00, 0x9F, 0xAF, 163 - 0x44, 0x05, 0xE7, 0x67, 0xFF, 0xFE, 0x24, 0xC0, 164 - 0xC0, 0x09, 0x20, 0xC0, 0xE7, 0x87, 0x00, 0x01, 165 - 0x24, 0xC0, 0xC0, 0x77, 0x00, 0x02, 0x0F, 0xC1, 166 - 0xE7, 0x67, 0xF7, 0xFF, 0x24, 0xC0, 0xE7, 0x67, 167 - 0xF7, 0xFF, 0x24, 0xC0, 0xE7, 0x87, 0x08, 0x00, 168 - 0x24, 0xC0, 0x08, 0xDA, 0x5E, 0xC1, 0xEF, 0x07, 169 - 0x80, 0x00, 0x09, 0x06, 0x97, 0xCF, 0xEF, 0x07, 170 - 0x01, 0x00, 0x0A, 0x06, 0x97, 0xCF, 0xEF, 0x07, 171 - 0x00, 0x00, 0x0B, 0x06, 0xEF, 0x07, 0x00, 0x00, 172 - 0x0A, 0x06, 0xEF, 0x67, 0x7F, 0xFF, 0x09, 0x06, 173 - 0xEF, 0x07, 0x00, 0x00, 0x0D, 0x06, 0xE7, 0x67, 174 - 0xEF, 0xFF, 0x28, 0xC0, 0xE7, 0x67, 0x17, 0xD8, 175 - 0x24, 0xC0, 0xE7, 0x07, 0x00, 0x00, 0x1E, 0xC0, 176 - 0xE7, 0x07, 0xFF, 0xFF, 0x22, 0xC0, 0x97, 0xCF, 177 - 0xC8, 0x07, 0x0E, 0x06, 0x9F, 0xAF, 0xDA, 0x02, 178 - 0xE7, 0x07, 0x00, 0x00, 0xF2, 0x05, 0xE7, 0x07, 179 - 0x10, 0x00, 0xF6, 0x05, 0xE7, 0x07, 0x0E, 0x06, 180 - 0xF4, 0x05, 0xE7, 0x07, 0xD6, 0x02, 0xF8, 0x05, 181 - 0xC8, 0x07, 0xF2, 0x05, 0xC1, 0x07, 0x00, 0x80, 182 - 0x50, 0xAF, 0x97, 0xCF, 0x2F, 0x0C, 0x02, 0x00, 183 - 0x07, 0x06, 0x2F, 0x0C, 0x04, 0x00, 0x06, 0x06, 184 - 0xE7, 0x07, 0x00, 0x00, 0xF2, 0x05, 0xE7, 0x07, 185 - 0x10, 0x00, 0xF6, 0x05, 0xE7, 0x07, 0xE2, 0x05, 186 - 0xF4, 0x05, 0xE7, 0x07, 0xCE, 0x02, 0xF8, 0x05, 187 - 0xC8, 0x07, 0xF2, 0x05, 0xC1, 0x07, 0x00, 0x80, 188 - 0x51, 0xAF, 0x97, 0xCF, 0x9F, 0xAF, 0x66, 0x04, 189 - 0x9F, 0xAF, 0x1A, 0x03, 0x59, 0xAF, 0x97, 0xCF, 190 - 0xC0, 0x07, 0x0E, 0x00, 0xC1, 0x0B, 0x0C, 0x06, 191 - 0x41, 0xD1, 0x9F, 0xAF, 0x28, 0x05, 0xC0, 0x07, 192 - 0x3C, 0x00, 0x9F, 0xAF, 0x44, 0x05, 0x68, 0x00, 193 - 0xC0, 0x07, 0x3B, 0x00, 0x9F, 0xAF, 0x44, 0x05, 194 - 0x6F, 0x00, 0x0C, 0x06, 0x68, 0x00, 0xE0, 0x07, 195 - 0x04, 0x01, 0xE8, 0x0B, 0x0A, 0x06, 0xE8, 0x07, 196 - 0x00, 0x00, 0xE0, 0x07, 0x00, 0x02, 0xE0, 0x07, 197 - 0xEC, 0x01, 0xE0, 0x07, 0xFC, 0xFF, 0x97, 0xCF, 198 - 0xE7, 0x07, 0xFF, 0xFF, 0xFA, 0x05, 0xEF, 0x07, 199 - 0x00, 0x00, 0x0B, 0x06, 0xE7, 0x07, 0x0E, 0x06, 200 - 0x24, 0x01, 0xE7, 0x07, 0x0E, 0x06, 0xFE, 0x05, 201 - 0xE7, 0x07, 0x40, 0x00, 0x26, 0x01, 0xE7, 0x07, 202 - 0x40, 0x00, 0x04, 0x06, 0xE7, 0x07, 0x07, 0x00, 203 - 0x92, 0xC0, 0x97, 0xCF, 0xEF, 0x07, 0x02, 0x00, 204 - 0x0B, 0x06, 0x9F, 0xAF, 0x78, 0x01, 0xEF, 0x77, 205 - 0x80, 0x00, 0x07, 0x06, 0x9F, 0xC0, 0x14, 0x04, 206 - 0xEF, 0x77, 0x01, 0x00, 0x07, 0x06, 0x37, 0xC0, 207 - 0xEF, 0x77, 0x01, 0x00, 0x0D, 0x06, 0x0F, 0xC1, 208 - 0xEF, 0x07, 0x01, 0x00, 0x0D, 0x06, 0xC0, 0x07, 209 - 0x02, 0x00, 0xC1, 0x07, 0x30, 0x00, 0x9F, 0xAF, 210 - 0x28, 0x05, 0xC0, 0x07, 0x01, 0x00, 0xC1, 0x07, 211 - 0x02, 0x00, 0x9F, 0xAF, 0x28, 0x05, 0xC8, 0x07, 212 - 0xFF, 0x4F, 0x9F, 0xAF, 0xA8, 0x05, 0xC0, 0x07, 213 - 0x38, 0x00, 0x9F, 0xAF, 0x44, 0x05, 0xC1, 0x77, 214 - 0x03, 0x00, 0x02, 0xC1, 0x08, 0xDA, 0x75, 0xC1, 215 - 0xC1, 0x77, 0x01, 0x00, 0x0A, 0xC1, 0xC0, 0x07, 216 - 0x01, 0x00, 0xC1, 0x07, 0x02, 0x00, 0x9F, 0xAF, 217 - 0x28, 0x05, 0xEF, 0x07, 0x01, 0x00, 0x06, 0x06, 218 - 0x2C, 0xCF, 0xC0, 0x07, 0x01, 0x00, 0xC1, 0x07, 219 - 0x04, 0x00, 0x9F, 0xAF, 0x28, 0x05, 0xEF, 0x07, 220 - 0x00, 0x00, 0x06, 0x06, 0x22, 0xCF, 0xEF, 0x07, 221 - 0x00, 0x00, 0x0D, 0x06, 0xEF, 0x57, 0x01, 0x00, 222 - 0x06, 0x06, 0x1B, 0xC0, 0xC0, 0x07, 0x01, 0x00, 223 - 0xC1, 0x07, 0x01, 0x00, 0x9F, 0xAF, 0x28, 0x05, 224 - 0xC0, 0x07, 0x02, 0x00, 0xC1, 0x07, 0x30, 0x00, 225 - 0x9F, 0xAF, 0x28, 0x05, 0xC8, 0x07, 0xFF, 0x4F, 226 - 0x9F, 0xAF, 0xA8, 0x05, 0xC0, 0x07, 0x38, 0x00, 227 - 0x9F, 0xAF, 0x44, 0x05, 0xC1, 0x67, 0x03, 0x00, 228 - 0xC1, 0x57, 0x03, 0x00, 0x02, 0xC0, 0x08, 0xDA, 229 - 0x73, 0xC1, 0xC0, 0x07, 0x02, 0x00, 0xC1, 0x07, 230 - 0x12, 0x00, 0xEF, 0x57, 0x00, 0x00, 0x06, 0x06, 231 - 0x02, 0xC0, 0xC1, 0x07, 0x23, 0x00, 0x9F, 0xAF, 232 - 0x28, 0x05, 0xC0, 0x07, 0x14, 0x00, 0xC1, 0x0B, 233 - 0xEA, 0x05, 0x9F, 0xAF, 0x28, 0x05, 0xC0, 0x07, 234 - 0x3E, 0x00, 0x9F, 0xAF, 0x0A, 0x05, 0xE7, 0x09, 235 - 0xE4, 0x05, 0xFA, 0x05, 0x27, 0xD8, 0xFA, 0x05, 236 - 0xE7, 0x07, 0x0E, 0x06, 0xFC, 0x05, 0xE7, 0x07, 237 - 0x4E, 0x06, 0x00, 0x06, 0xE7, 0x07, 0x40, 0x00, 238 - 0x02, 0x06, 0x9F, 0xAF, 0x66, 0x05, 0x9F, 0xAF, 239 - 0xC6, 0x00, 0x97, 0xCF, 0xC1, 0x0B, 0xE2, 0x05, 240 - 0x41, 0xD0, 0x01, 0xD2, 0xC1, 0x17, 0x23, 0x00, 241 - 0x9F, 0xAF, 0xDC, 0x04, 0xC0, 0x07, 0x04, 0x00, 242 - 0xC1, 0x0B, 0xE3, 0x05, 0x9F, 0xAF, 0x28, 0x05, 243 - 0xC0, 0x07, 0x06, 0x00, 0xC1, 0x09, 0xE6, 0x05, 244 - 0x9F, 0xAF, 0x28, 0x05, 0xC0, 0x07, 0x07, 0x00, 245 - 0xC1, 0x09, 0xE6, 0x05, 0xC1, 0xD1, 0x9F, 0xAF, 246 - 0x28, 0x05, 0xC0, 0x07, 0x0B, 0x00, 0xC1, 0x09, 247 - 0xE8, 0x05, 0x9F, 0xAF, 0x28, 0x05, 0xC0, 0x07, 248 - 0x0C, 0x00, 0xC1, 0x09, 0xE8, 0x05, 0xC1, 0xD1, 249 - 0x9F, 0xAF, 0x28, 0x05, 0xC0, 0x07, 0x0D, 0x00, 250 - 0xC1, 0x07, 0x09, 0x00, 0x9F, 0xAF, 0x28, 0x05, 251 - 0xC0, 0x07, 0x03, 0x00, 0xC1, 0x07, 0x32, 0x00, 252 - 0x9F, 0xAF, 0x28, 0x05, 0xC0, 0x07, 0x0F, 0x00, 253 - 0xC1, 0x07, 0x00, 0x00, 0x9F, 0xAF, 0x28, 0x05, 254 - 0x97, 0xCF, 0xE7, 0x67, 0xFF, 0xD9, 0x24, 0xC0, 255 - 0xC8, 0x07, 0x0A, 0x00, 0x40, 0x00, 0xC0, 0x67, 256 - 0x00, 0x02, 0x27, 0x80, 0x24, 0xC0, 0xE7, 0x87, 257 - 0x00, 0x04, 0x24, 0xC0, 0xE7, 0x67, 0xFF, 0xF9, 258 - 0x24, 0xC0, 0x01, 0xD2, 0x08, 0xDA, 0x72, 0xC1, 259 - 0xE7, 0x87, 0x00, 0x20, 0x24, 0xC0, 0x97, 0xCF, 260 - 0x27, 0x00, 0x1E, 0xC0, 0xE7, 0x87, 0xFF, 0x00, 261 - 0x22, 0xC0, 0xE7, 0x67, 0x7F, 0xFF, 0x24, 0xC0, 262 - 0xE7, 0x87, 0x80, 0x00, 0x24, 0xC0, 0xE7, 0x87, 263 - 0x80, 0x00, 0x24, 0xC0, 0x97, 0xCF, 0x9F, 0xAF, 264 - 0x0A, 0x05, 0x67, 0x00, 0x1E, 0xC0, 0xE7, 0x67, 265 - 0xBF, 0xFF, 0x24, 0xC0, 0xE7, 0x87, 0x40, 0x00, 266 - 0x24, 0xC0, 0xE7, 0x87, 0x40, 0x00, 0x24, 0xC0, 267 - 0x97, 0xCF, 0x9F, 0xAF, 0x0A, 0x05, 0xE7, 0x67, 268 - 0x00, 0xFF, 0x22, 0xC0, 0xE7, 0x67, 0xFF, 0xFE, 269 - 0x24, 0xC0, 0xE7, 0x67, 0xFF, 0xFE, 0x24, 0xC0, 270 - 0xC1, 0x09, 0x20, 0xC0, 0xE7, 0x87, 0x00, 0x01, 271 - 0x24, 0xC0, 0x97, 0xCF, 0xC0, 0x07, 0x40, 0x00, 272 - 0xC8, 0x09, 0xFC, 0x05, 0xE7, 0x67, 0x00, 0xFF, 273 - 0x22, 0xC0, 0xE7, 0x67, 0xFF, 0xFE, 0x24, 0xC0, 274 - 0xE7, 0x67, 0xBF, 0xFF, 0x24, 0xC0, 0xE7, 0x67, 275 - 0xBF, 0xFF, 0x24, 0xC0, 0x00, 0xDA, 0xE8, 0x09, 276 - 0x20, 0xC0, 0xE7, 0x87, 0x40, 0x00, 0x24, 0xC0, 277 - 0xE7, 0x87, 0x40, 0x00, 0x24, 0xC0, 0x00, 0xDA, 278 - 0xE8, 0x09, 0x20, 0xC0, 0x6D, 0xC1, 0xE7, 0x87, 279 - 0x00, 0x01, 0x24, 0xC0, 0x97, 0xCF, 0xE7, 0x07, 280 - 0x32, 0x00, 0x12, 0xC0, 0xE7, 0x77, 0x00, 0x80, 281 - 0x12, 0xC0, 0x7C, 0xC0, 0x97, 0xCF, 0xE7, 0x07, 282 - 0x20, 0x4E, 0x12, 0xC0, 0xE7, 0x77, 0x00, 0x80, 283 - 0x12, 0xC0, 0x7C, 0xC0, 0x97, 0xCF, 0x09, 0x02, 284 - 0x19, 0x00, 0x01, 0x01, 0x00, 0x80, 0x96, 0x09, 285 - 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 286 - 0x07, 0x05, 0x81, 0x02, 0x40, 0x00, 0x00, 0x00, 287 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 288 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 289 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 290 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 291 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 292 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 293 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 294 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 295 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 296 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 297 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 298 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 299 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 300 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 301 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 302 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 303 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 304 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 305 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 306 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 307 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 308 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 309 - }; 310 - 311 - static unsigned char setup5[] = { 312 - 0xB6, 0xC3, 0x2F, 0x01, 0x03, 0x64, 0x0E, 0x00, 313 - 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 314 - 0x4A, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x92, 0x00, 315 - 0x9A, 0x00, 0xA0, 0x00, 0xB2, 0x00, 0xB8, 0x00, 316 - 0xBE, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE, 0x00, 317 - 0xDC, 0x00, 0xDA, 0x00, 0xE2, 0x00, 0xE0, 0x00, 318 - 0xE8, 0x00, 0xE6, 0x00, 0xEE, 0x00, 0xEC, 0x00, 319 - 0xF2, 0x00, 0xF8, 0x00, 0x02, 0x01, 0x0A, 0x01, 320 - 0x0E, 0x01, 0x12, 0x01, 0x1E, 0x01, 0x22, 0x01, 321 - 0x28, 0x01, 0x2C, 0x01, 0x32, 0x01, 0x36, 0x01, 322 - 0x44, 0x01, 0x50, 0x01, 0x5E, 0x01, 0x72, 0x01, 323 - 0x76, 0x01, 0x7A, 0x01, 0x80, 0x01, 0x88, 0x01, 324 - 0x8C, 0x01, 0x94, 0x01, 0x9C, 0x01, 0xA0, 0x01, 325 - 0xA4, 0x01, 0xAA, 0x01, 0xB0, 0x01, 0xB4, 0x01, 326 - 0xBA, 0x01, 0xD0, 0x01, 0xDA, 0x01, 0xF6, 0x01, 327 - 0xFA, 0x01, 0x02, 0x02, 0x34, 0x02, 0x3C, 0x02, 328 - 0x44, 0x02, 0x4A, 0x02, 0x50, 0x02, 0x56, 0x02, 329 - 0x74, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84, 0x02, 330 - 0x8A, 0x02, 0x88, 0x02, 0x90, 0x02, 0x8E, 0x02, 331 - 0x94, 0x02, 0xA2, 0x02, 0xA8, 0x02, 0xAE, 0x02, 332 - 0xB4, 0x02, 0xBA, 0x02, 0xB8, 0x02, 0xC0, 0x02, 333 - 0xBE, 0x02, 0xC4, 0x02, 0xD0, 0x02, 0xD4, 0x02, 334 - 0xE0, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF8, 0x02, 335 - 0xFC, 0x02, 0x06, 0x03, 0x1E, 0x03, 0x24, 0x03, 336 - 0x28, 0x03, 0x30, 0x03, 0x2E, 0x03, 0x3C, 0x03, 337 - 0x4A, 0x03, 0x4E, 0x03, 0x54, 0x03, 0x58, 0x03, 338 - 0x5E, 0x03, 0x66, 0x03, 0x6E, 0x03, 0x7A, 0x03, 339 - 0x86, 0x03, 0x8E, 0x03, 0x96, 0x03, 0xB2, 0x03, 340 - 0xB8, 0x03, 0xC6, 0x03, 0xCC, 0x03, 0xD4, 0x03, 341 - 0xDA, 0x03, 0xE8, 0x03, 0xF4, 0x03, 0xFC, 0x03, 342 - 0x04, 0x04, 0x20, 0x04, 0x2A, 0x04, 0x32, 0x04, 343 - 0x36, 0x04, 0x3E, 0x04, 0x44, 0x04, 0x42, 0x04, 344 - 0x48, 0x04, 0x4E, 0x04, 0x4C, 0x04, 0x54, 0x04, 345 - 0x52, 0x04, 0x5A, 0x04, 0x5E, 0x04, 0x62, 0x04, 346 - 0x68, 0x04, 0x74, 0x04, 0x7C, 0x04, 0x80, 0x04, 347 - 0x88, 0x04, 0x8C, 0x04, 0x94, 0x04, 0x9A, 0x04, 348 - 0xA2, 0x04, 0xA6, 0x04, 0xAE, 0x04, 0xB4, 0x04, 349 - 0xC0, 0x04, 0xCC, 0x04, 0xD8, 0x04, 0x2A, 0x05, 350 - 0x46, 0x05, 0x6C, 0x05, 0x00, 0x00 351 - }; 352 72 353 73 /* rvmalloc / rvfree copied from usbvideo.c 354 74 * ··· 188 464 static int 189 465 initialize_camera(struct vicam_camera *cam) 190 466 { 191 - const struct { 192 - u8 *data; 193 - u32 size; 194 - } firmware[] = { 195 - { .data = setup1, .size = sizeof(setup1) }, 196 - { .data = setup2, .size = sizeof(setup2) }, 197 - { .data = setup3, .size = sizeof(setup3) }, 198 - { .data = setup4, .size = sizeof(setup4) }, 199 - { .data = setup5, .size = sizeof(setup5) }, 200 - { .data = setup3, .size = sizeof(setup3) }, 201 - { .data = NULL, .size = 0 } 202 - }; 467 + int err; 468 + const struct ihex_binrec *rec; 469 + const struct firmware *fw; 203 470 204 - int err, i; 471 + err = request_ihex_firmware(&fw, "vicam/firmware.fw", &cam->udev->dev); 472 + if (err) { 473 + printk(KERN_ERR "Failed to load \"vicam/firmware.fw\": %d\n", 474 + err); 475 + return err; 476 + } 205 477 206 - for (i = 0, err = 0; firmware[i].data && !err; i++) { 207 - memcpy(cam->cntrlbuf, firmware[i].data, firmware[i].size); 478 + for (rec = (void *)fw->data; rec; rec = ihex_next_binrec(rec)) { 479 + memcpy(cam->cntrlbuf, rec->data, be16_to_cpu(rec->len)); 208 480 209 481 err = send_control_msg(cam, 0xff, 0, 0, 210 - cam->cntrlbuf, firmware[i].size); 482 + cam->cntrlbuf, be16_to_cpu(rec->len)); 483 + if (err) 484 + break; 211 485 } 486 + 487 + release_firmware(fw); 212 488 213 489 return err; 214 490 } ··· 950 1226 MODULE_AUTHOR(DRIVER_AUTHOR); 951 1227 MODULE_DESCRIPTION(DRIVER_DESC); 952 1228 MODULE_LICENSE("GPL"); 1229 + MODULE_FIRMWARE("vicam/firmware.fw");
+1
firmware/Makefile
··· 63 63 # whiteheat_loader_debug.fw 64 64 fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_PDA) += keyspan_pda/keyspan_pda.fw 65 65 fw-shipped-$(CONFIG_USB_SERIAL_XIRCOM) += keyspan_pda/xircom_pgs.fw 66 + fw-shipped-$(CONFIG_USB_VICAM) += vicam/firmware.fw 66 67 fw-shipped-$(CONFIG_VIDEO_CPIA2) += cpia2/stv0672_vp4.bin 67 68 68 69 fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-)
+10
firmware/WHENCE
··· 265 265 * modification. 266 266 267 267 -------------------------------------------------------------------------- 268 + 269 + Driver: USB_VICAM -- USB 3com HomeConnect (aka vicam) 270 + 271 + File: vicam/firmware.fw 272 + 273 + Licence: Unknown 274 + 275 + Found in hex form in kernel source. 276 + 277 + --------------------------------------------------------------------------
+7
firmware/vicam/firmware.H16
··· 1 + :0026000000B6C31F000264E767FDFF0EC0E709DE008E00C0094003C01744034BAFC00700004BAF97CF00001D 2 + :000A000000B6C30300036418000000FB 3 + :0008000000B6C301000664000014 4 + :0696000000B6C38F060264E707000008C0E70700003EC0E7075401AA00E707C805B600E7074201D200E7077C001600E70756001800E707060092C0E70700001EC0E707FFFF22C0E707040024C0E707EC2728C0E70716018E00E78701000EC097CFD70900C0E777010092C009C1E709FE052401E70904062601E707070092C0E70500C0C0DF97CF170057001702D70900C0E777010092C00AC1E757FFFFFA050DC0E7570000FA050FC09FAFC600E70500C0C805C105C005C0DF97CF27DAFA05EF0701000B0673CF9FAF78019FAF1A036ECFE709FC052401E70902062601E707070092C0E709FC05FE05E70902060406E7090006FC05E709FE05000627DAFA05E7570100FA0502CA04C097CF9FAF660597CFE70740000206C809FC059FAFDA0297CFCF170200EF57810009069FA0B601EF57800009069FA04002EF5701000B069FA04603E70701000AC046AF47AF9FAF4002E7072E000AC0EF878000090697CF000E0100C05751009FC09E02C057500020C0C057550012C0C05756009FC072029FCFD602C10B080601D06F900806C0070800C10B08069FAF280597CF2F0E02000806C0070800C10B08069FAF28059FCFD6022F0E02000906EF87800009069FCFD602EF677FFF0906E767FFFD22C0E767EFFF24C0E787100028C09FAFB805E787E02124C09FAFA805E787080024C0E767DFFF24C0C8070A00C0070000C10701009FAF28059FAFB805C0079E009FAF4405E767FFFE24C0C00920C0E787000124C0C07700020FC1E767F7FF24C0E767F7FF24C0E787080024C008DA5EC1EF078000090697CFEF0701000A0697CFEF0700000B06EF0700000A06EF677FFF0906EF0700000D06E767EFFF28C0E76717D824C0E70700001EC0E707FFFF22C097CFC8070E069FAFDA02E7070000F205E7071000F605E7070E06F405E707D602F805C807F205C107008050AF97CF2F0C020007062F0C04000606E7070000F205E7071000F605E707E205F405E707CE02F805C807F205C107008051AF97CF9FAF66049FAF1A0359AF97CFC0070E00C10B0C0641D19FAF2805C0073C009FAF44056800C0073B009FAF44056F000C066800E0070401E80B0A06E8070000E0070002E007EC01E007FCFF97CFE707FFFFFA05EF0700000B06E7070E062401E7070E06FE05E70740002601E70740000406E707070092C097CFEF0702000B069FAF7801EF77800007069FC01404EF770100070637C0EF7701000D060FC1EF0701000D06C0070200C10730009FAF2805C0070100C10702009FAF2805C807FF4F9FAFA805C00738009FAF4405C177030002C108DA75C1C17701000AC1C0070100C10702009FAF2805EF07010006062CCFC0070100C10704009FAF2805EF070000060622CFEF0700000D06EF57010006061BC0C0070100C10701009FAF2805C0070200C10730009FAF2805C807FF4F9FAFA805C00738009FAF4405C1670300C157030002C008DA73C1C0070200C1071200EF570000060602C0C10723009FAF2805C0071400C10BEA059FAF2805C0073E009FAF0A05E709E405FA0527D8FA05E7070E06FC05E7074E060006E707400002069FAF66059FAFC60097CFC10BE20541D001D2C11723009FAFDC04C0070400C10BE3059FAF2805C0070600C109E6059FAF2805C0070700C109E605C1D19FAF2805C0070B00C109E8059FAF2805C0070C00C109E805C1D19FAF2805C0070D00C10709009FAF2805C0070300C10732009FAF2805C0070F00C10700009FAF280597CFE767FFD924C0C8070A004000C0670002278024C0E787000424C0E767FFF924C001D208DA72C1E787002024C097CF27001EC0E787FF0022C0E7677FFF24C0E787800024C0E787800024C097CF9FAF0A0567001EC0E767BFFF24C0E787400024C0E787400024C097CF9FAF0A05E76700FF22C0E767FFFE24C0E767FFFE24C0C10920C0E787000124C097CFC0074000C809FC05E76700FF22C0E767FFFE24C0E767BFFF24C0E767BFFF24C000DAE80920C0E787400024C0E787400024C000DAE80920C06DC1E787000124C097CFE707320012C0E777008012C07CC097CFE707204E12C0E777008012C07CC097CF0902190001010080960904000001000000000705810240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A1 5 + :0136000000B6C32F0103640E0014001A00200026004A0064006A0092009A00A000B200B800BE00C200C800CE00DC00DA00E200E000E800E600EE00EC00F200F80002010A010E0112011E01220128012C0132013601440150015E01720176017A01800188018C0194019C01A001A401AA01B001B401BA01D001DA01F601FA01020234023C0244024A0250025602740278027E0284028A02880290028E029402A202A802AE02B402BA02B802C002BE02C402D002D402E002E602EE02F802FC0206031E032403280330032E033C034A034E03540358035E0366036E037A0386038E039603B203B803C603CC03D403DA03E803F403FC03040420042A04320436043E044404420448044E044C04540452045A045E046204680474047C04800488048C0494049A04A204A604AE04B404C004CC04D8042A0546056C0500005E 6 + :0008000000B6C301000664000014 7 + :0000000001FF