Hans,
If you read the mail to Oliver Neukum on the linux-usb list, then you know
that I found a cure for the mysterious problem that the MR97310a CIF
"type 1" cameras have been freezing up and refusing to stream if hooked
up to a machine with a UHCI controller.
Namely, the cure is that if the camera is an mr97310a CIF type 1 camera,
you have to send it 0xa0, 0x00. Somehow, this is a timing reset command,
or such. It un-blocks whatever was previously stopping the CIF type 1
cameras from working on the UHCI-based machines.
I have made a patch from your tree, which is below. I think that you
should use all efforts to get your version of mr97310a.c with this patch
applied to it, into upstream immediately. For, it fixes the
rather nasty problem that the CIF type 1 cameras refuse to stream on a
machine with a UHCI-based controller.
Fixing that problem is on top of the fact that the code which is at
present in 2.6.32-rc6 uses the old detection scheme for the sensor type of
the camera and is inferior in several other aspects, too. Therefore, I
strongly support the idea of replacing the file gspca/mr97310a.c in
2.6.32-rc6 with the patched version of the file from your tree.
As I said, the patch is based upon the code in your tree, not upon the
version which is in 2.6.32-rc6. But the resulting version of mr97310a.c
has been tested here on several machines, including one running
2.6.32-rc6 which has a UHCI controller inside. And it works nicely on all
of them.
Theodore Kilgore
Signed off by: Theodore Kilgore <kilgota@xxxxxxxxxx>
-------------------------------------------------------------------------
diff -r 577440e8b8df linux/drivers/media/video/gspca/mr97310a.c
--- a/linux/drivers/media/video/gspca/mr97310a.c Sun Nov 01
17:09:15 2009 +0100
+++ b/linux/drivers/media/video/gspca/mr97310a.c Sat Nov 14
16:32:18 2009 -0600
@@ -697,6 +697,11 @@
{0x13, 0x00, {0x01}, 1},
{0, 0, {0}, 0}
};
+ /* Without this command the cam won't work with USB-UHCI
*/
+ gspca_dev->usb_buf[0] = 0x0a;
+ gspca_dev->usb_buf[1] = 0x00;
+ if (mr_write(gspca_dev, 2) < 0)
+ PDEBUG(D_ERR, "start_cif_cam fails");
err_code = sensor_write_regs(gspca_dev,
cif_sensor1_init_data,
ARRAY_SIZE(cif_sensor1_init_data));
}
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html