Update: See the linked comment for more details.
I’ve been in talks with the GSPCA maintainer for a week now discussing possible issues that the Microsoft LifeCam VX-1000 was having in Linux. In case you don’t know (which I didn’t at first either), GSPCA stands for “Generic Software Package for Camera Adapters.”

This software package contains drivers to a wealth of webcams and other video input devices, the Microsoft LifeCam VX-1000 included. The problem I had was that the built in microphone would stop working as soon as you turned on the camera. If you never used the camera and only opened a sound recording application then the microphone would work perfectly. In the long mailing list discussions that let me to this post, we discovered that the bug was is in setting a GPIO register that instantly breaks communication with the microphone. I’ve worked up a patch that I would like to get tested by others. Basically, the patch just includes conditionals that tell the driver not to apply this GPIO register change if the camera is using the OV7660 sensor. What I would like to test is, does disabling for this sensor affect other OV7660 devices? If not, then this patch will likely go into the main Linux kernel. If you’re using the Microsoft LifeCam VX-1000 or VX-3000 and are having trouble with your microphone, could you please do the following?
Testing the Patch
Download my patched GSPCA: gspca-2.9.51-vx1000-patch-20100712.zip
Download the latest version of GSPCA which now includes my patch: http://moinejf.free.fr/- Extract the zip file on your Desktop (so you have the folder “gspca-2.9.51-vx1000-patch-20100712”).
- Open a terminal window and enter the following commands:
cd Desktop/gspca-2.9.51-vx1000-patch-20100712/
make
sudo make install - Reboot your computer and test your webcam in an application such as Cheese (which can easily be found in the Ubuntu Software Center).
Make sure that when you start your webcam in Cheese that the microphone continues to work. You can verify this in the Sound Preferences window if you click on the Input tab (make sure you have selected “LifeCam VX-1000” as your input device). Let me know in the comments below or in the Ubuntu thread regarding this issue how it works for you! In case anyone is interested, here is the “diff -uNr” for the original sonixj.c against my modified version:
--- sonixj-original.c 2010-07-10 05:03:02.000000000 -0400 +++ sonixj-patch.c 2010-07-12 17:52:20.000000000 -0400 @@ -1749,7 +1749,8 @@ reg_w1(gspca_dev, 0x01, 0x62); reg_w1(gspca_dev, 0x01, 0x42); msleep(100); - reg_w1(gspca_dev, 0x02, 0x62); + if (sd->sensor != SENSOR_OV7660) + reg_w1(gspca_dev, 0x02, 0x62); break; default: /* case SENSOR_HV7131R: */ @@ -2317,8 +2318,10 @@ reg2 = 0x40; break; } - reg_w1(gspca_dev, 0x02, reg2); - reg_w1(gspca_dev, 0x02, reg2); + if (sd->sensor != SENSOR_OV7660) { + reg_w1(gspca_dev, 0x02, reg2); + reg_w1(gspca_dev, 0x02, reg2); + } reg_w1(gspca_dev, 0x15, sn9c1xx[0x15]); reg_w1(gspca_dev, 0x16, sn9c1xx[0x16]);
UPDATE 2010-07-13: As of today this patch is included in GSPCA v2.9.52+! It looks like my hard work paid off after all and now all Linux users, not just Ubuntu users, will be able to enjoy the fruit of my labor since GSPCA is merged into the official Linux Kernel. 😉