[PATCH] UBUNTU: [Hardy SRU] LP#310760 Fix the MIC of the Lenovo webcam problem
AceLan Kao
acelan.kao at canonical.com
Tue Sep 1 09:58:38 UTC 2009
SRU JUSTIFICATION
IMPACT: The MIC of the Lenovo webcam doesn't work after launching the
camera, because of the i2c command that turn on/off the LED for the
camera is wrong and will impact the MIC function.
FIX: By snooping the USB traffic from Windows and extracting the correct
i2c commands that turn on/off the LED. The patch goes to the V4L/DVB
tree contains other bug fixes that introduced from the following two
2.6.29 commits
6af4e7a V4L/DVB (10424): gspca - vc032x: Add resolution 1280x1024 for
sensor mi1310_soc.
a92e906 V4L/DVB (10420): gspca - vc032x: Webcam 041e:405b added and
mi1310_soc updated.
I only merge back the LED part, since Hardy doesn't have that problem.
The patch is already accepted by the V4L/DVB branch and will be merged
into upstream kernel later.
http://linuxtv.org/hg/v4l-dvb/rev/49966c5f2052
TEST: This patch work fine with the Lenovo webcam I have.
git://kernel.ubuntu.com/acelan/ubuntu-hardy-lum.git lp310760
Signed-off-by: AceLan Kao <acelan.kao at canonical.com>
---
ubuntu/media/gspcav1/Vimicro/vc032x.h | 14 ++++++++++++--
1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/ubuntu/media/gspcav1/Vimicro/vc032x.h b/ubuntu/media/gspcav1/Vimicro/vc032x.h
index 2bd1f67..7a1a02c 100644
--- a/ubuntu/media/gspcav1/Vimicro/vc032x.h
+++ b/ubuntu/media/gspcav1/Vimicro/vc032x.h
@@ -509,6 +509,8 @@ static void vc0321_start(struct usb_spca50x *spca50x)
/* 640x480 */
err = vc0321WriteVector(spca50x, mi1310_socinitVGA_JPG);
}
+ // turn on LED
+ spca5xxRegWrite(spca50x->dev, 0x89, 0x058c, 0x0000, NULL, 0);
break;
default:
PDEBUG(0, "Damned !! no sensor found Bye");
@@ -554,7 +556,12 @@ static void vc0321_start(struct usb_spca50x *spca50x)
static void vc0321_stopN(struct usb_spca50x *spca50x)
{
struct usb_device *dev = spca50x->dev;
- spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0);
+
+ if( spca50x->sensor == SENSOR_MI1310_SOC)
+ spca5xxRegWrite(dev, 0x89, 0x058c, 0x00ff, NULL, 0);
+ else
+ spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0);
+
spca5xxRegWrite(dev, 0xa0, 0x01, 0xb301, NULL, 0);
spca5xxRegWrite(dev, 0xa0, 0x09, 0xb003, NULL, 0);
}
@@ -562,7 +569,10 @@ static void vc0321_stopN(struct usb_spca50x *spca50x)
static void vc0321_stop0(struct usb_spca50x *spca50x)
{
struct usb_device *dev = spca50x->dev;
- spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0);
+ if( spca50x->sensor == SENSOR_MI1310_SOC)
+ spca5xxRegWrite(dev, 0x89, 0x058c, 0x00ff, NULL, 0);
+ else
+ spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0);
}
static void vc0321_shutdown(struct usb_spca50x *spca50x)
--
1.6.0.4
More information about the kernel-team
mailing list