Hello, I'm trying to use Edgeport sensors on my Openwrt router (Atheros MIPS CPU with 3.3.8 kernel). It does not work and I have enabled debug output below: Feb 11 20:28:42 10.0.0.254 kernel: [5650055.170000] usb 1-1: new full-speed USB device number 10 using ehci-platform Feb 11 20:28:42 10.0.0.254 kernel: [5650055.460000] io_ti 1-1:1.0: Edgeport TI 1 port adapter converter detected Feb 11 20:28:42 10.0.0.254 kernel: [5650055.470000] drivers/usb/serial/io_ti.c: choose_config - Number of Interfaces = 1 Feb 11 20:28:42 10.0.0.254 kernel: [5650055.480000] drivers/usb/serial/io_ti.c: choose_config - MAX Power = 80 Feb 11 20:28:42 10.0.0.254 kernel: [5650055.490000] drivers/usb/serial/io_ti.c: download_fw - RUNNING IN DOWNLOAD MODE Feb 11 20:28:42 10.0.0.254 kernel: [5650055.490000] drivers/usb/serial/io_ti.c: read_download_mem - @ 0 for 1 Feb 11 20:28:42 10.0.0.254 kernel: [5650055.510000] drivers/usb/serial/io_ti.c: read_download_mem - @ 2 for 4 Feb 11 20:28:42 10.0.0.254 kernel: [5650055.510000] drivers/usb/serial/io_ti.c: read_download_mem - @ 2 for 4 Feb 11 20:28:42 10.0.0.254 kernel: [5650055.530000] usb 1-1: read_download_mem - length = 4, data = 06 e4 c9 fb Feb 11 20:28:42 10.0.0.254 kernel: [5650055.530000] drivers/usb/serial/io_ti.c: check_i2c_image - structure too big, erroring out. Feb 11 20:28:42 10.0.0.254 kernel: [5650055.540000] drivers/usb/serial/io_ti.c: download_fw - DOWNLOAD MODE -- BAD I2C Feb 11 20:28:42 10.0.0.254 kernel: [5650055.550000] io_ti: probe of 1-1:1.0 failed with error -5 When I plug the sensor on my x86 server, it works: ... Feb 11 20:13:35 red kernel: [801958.038659] /build/linux-vnts0_/linux-3.2.54/drivers/usb/serial/io_ti.c: download_fw - RUNNING IN DOWNLOAD MODE Feb 11 20:13:35 red kernel: [801958.038664] /build/linux-vnts0_/linux-3.2.54/drivers/usb/serial/io_ti.c: read_download_mem - @ 0 for 1 Feb 11 20:13:35 red kernel: [801958.043284] /build/linux-vnts0_/linux-3.2.54/drivers/usb/serial/io_ti.c: read_download_mem - @ 2 for 4 Feb 11 20:13:35 red kernel: [801958.043292] /build/linux-vnts0_/linux-3.2.54/drivers/usb/serial/io_ti.c: read_download_mem - @ 2 for 4 Feb 11 20:13:35 red kernel: [801958.047275] usb 3-1: read_download_mem - length = 4, data = 01 09 00 b0 Feb 11 20:13:35 red kernel: [801958.047288] /build/linux-vnts0_/linux-3.2.54/drivers/usb/serial/io_ti.c: check_i2c_image Type =0x1 Feb 11 20:13:35 red kernel: [801958.047294] /build/linux-vnts0_/linux-3.2.54/drivers/usb/serial/io_ti.c: read_download_mem - @ 6 for 9 ... ... And the rest of the init continues properly. I've created a little libusb perl script to debug the device, and found that I could simulate the MIPS bug if I would send a read_download_mem address in LE format instead of BE, e.g.: $dev->control_msg((64 + 0 + 128), 0x92 , 0x82, 0x200, $bytes, 4, 1000); => OK returns 01 09 00 b0 $dev->control_msg((64 + 0 + 128), 0x92 , 0x82, 0x0002, $bytes, 4, 1000); => BAD returns 06 e4 c9 fb In the io_ti driver, in read_download_mem(), we have: be_start_address = cpu_to_be16(start_address); status = ti_vread_sync(dev, UMPC_MEMORY_READ, (__u16)address_type, (__force __u16)be_start_address, buffer, read_length); Of course cpu_to_be16() has no effect on MIPS BE, and that's the cause of the bug. I don't know if it should be replaced with a swab16() or something else, I'm not a kernel expert :) and there are a few other lines to fix. Would could fix this bug, or would give me some advice on how to fix it? Best regards, -- L.Drolez. http://www.aopensource.com - The Android Open Source Portal -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html