V4L/DVB (13900): gspca - sunplus: Fix bridge exchanges.
authorJean-Francois Moine <moinejf@free.fr>
Sun, 10 Jan 2010 07:32:11 +0000 (04:32 -0300)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 25 Jan 2010 18:49:13 +0000 (10:49 -0800)
commit 07d1c69b2dcfdd1b21e36af0ff8b9506234908ee upstream.

A previous code optimization inverted bridge registers and values,
doing a regression in kernel  2.6.32.

Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/media/video/gspca/sunplus.c

index aa8f995ce04ec1f263df04e1b123923fc2689ca8..28b4625bc1a8f7443b34e1670a7cfb9440ae4825 100644 (file)
@@ -705,7 +705,7 @@ static void spca504B_SetSizeType(struct gspca_dev *gspca_dev)
                rc = spca504B_PollingDataReady(gspca_dev);
 
                /* Init the cam width height with some values get on init ? */
-               reg_w_riv(dev, 0x31, 0, 0x04);
+               reg_w_riv(dev, 0x31, 0x04, 0);
                spca504B_WaitCmdStatus(gspca_dev);
                rc = spca504B_PollingDataReady(gspca_dev);
                break;
@@ -807,14 +807,14 @@ static void init_ctl_reg(struct gspca_dev *gspca_dev)
        default:
 /*     case BRIDGE_SPCA533: */
 /*     case BRIDGE_SPCA504B: */
-               reg_w_riv(dev, 0, 0x00, 0x21ad);        /* hue */
-               reg_w_riv(dev, 0, 0x01, 0x21ac);        /* sat/hue */
-               reg_w_riv(dev, 0, 0x00, 0x21a3);        /* gamma */
+               reg_w_riv(dev, 0, 0x21ad, 0x00);        /* hue */
+               reg_w_riv(dev, 0, 0x21ac, 0x01);        /* sat/hue */
+               reg_w_riv(dev, 0, 0x21a3, 0x00);        /* gamma */
                break;
        case BRIDGE_SPCA536:
-               reg_w_riv(dev, 0, 0x40, 0x20f5);
-               reg_w_riv(dev, 0, 0x01, 0x20f4);
-               reg_w_riv(dev, 0, 0x00, 0x2089);
+               reg_w_riv(dev, 0, 0x20f5, 0x40);
+               reg_w_riv(dev, 0, 0x20f4, 0x01);
+               reg_w_riv(dev, 0, 0x2089, 0x00);
                break;
        }
        if (pollreg)
@@ -888,11 +888,11 @@ static int sd_init(struct gspca_dev *gspca_dev)
        switch (sd->bridge) {
        case BRIDGE_SPCA504B:
                reg_w_riv(dev, 0x1d, 0x00, 0);
-               reg_w_riv(dev, 0, 0x01, 0x2306);
-               reg_w_riv(dev, 0, 0x00, 0x0d04);
-               reg_w_riv(dev, 0, 0x00, 0x2000);
-               reg_w_riv(dev, 0, 0x13, 0x2301);
-               reg_w_riv(dev, 0, 0x00, 0x2306);
+               reg_w_riv(dev, 0, 0x2306, 0x01);
+               reg_w_riv(dev, 0, 0x0d04, 0x00);
+               reg_w_riv(dev, 0, 0x2000, 0x00);
+               reg_w_riv(dev, 0, 0x2301, 0x13);
+               reg_w_riv(dev, 0, 0x2306, 0x00);
                /* fall thru */
        case BRIDGE_SPCA533:
                spca504B_PollingDataReady(gspca_dev);
@@ -1011,7 +1011,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
                        spca504B_WaitCmdStatus(gspca_dev);
                        break;
                default:
-                       reg_w_riv(dev, 0x31, 0, 0x04);
+                       reg_w_riv(dev, 0x31, 0x04, 0);
                        spca504B_WaitCmdStatus(gspca_dev);
                        spca504B_PollingDataReady(gspca_dev);
                        break;