]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
V4L/DVB (9079): gspca: Return error code from stream start functions.
authorJean-Francois Moine <moinejf@free.fr>
Sat, 20 Sep 2008 09:39:08 +0000 (06:39 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 12 Oct 2008 11:37:12 +0000 (09:37 -0200)
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
22 files changed:
drivers/media/video/gspca/conex.c
drivers/media/video/gspca/etoms.c
drivers/media/video/gspca/gspca.c
drivers/media/video/gspca/gspca.h
drivers/media/video/gspca/mars.c
drivers/media/video/gspca/ov519.c
drivers/media/video/gspca/pac207.c
drivers/media/video/gspca/pac7311.c
drivers/media/video/gspca/sonixb.c
drivers/media/video/gspca/sonixj.c
drivers/media/video/gspca/spca500.c
drivers/media/video/gspca/spca501.c
drivers/media/video/gspca/spca505.c
drivers/media/video/gspca/spca506.c
drivers/media/video/gspca/spca508.c
drivers/media/video/gspca/spca561.c
drivers/media/video/gspca/stk014.c
drivers/media/video/gspca/sunplus.c
drivers/media/video/gspca/t613.c
drivers/media/video/gspca/tv8532.c
drivers/media/video/gspca/vc032x.c
drivers/media/video/gspca/zc3xx.c

index 4d9f4cc255a9540fe13e1fb36806f36cd7af6f7e..a9d51ba7c57ce7f79f736f3e1cf462afeea75ac3 100644 (file)
@@ -837,12 +837,13 @@ static int sd_init(struct gspca_dev *gspca_dev)
        return 0;
 }
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        cx11646_initsize(gspca_dev);
        cx11646_fw(gspca_dev);
        cx_sensor(gspca_dev);
        cx11646_jpeg(gspca_dev);
+       return 0;
 }
 
 static void sd_stop0(struct gspca_dev *gspca_dev)
index 4ff0e386914baf87d37482f0abdb7611c66720a2..3be30b420a26fea30eb09674c82798152f0519b2 100644 (file)
@@ -691,7 +691,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 }
 
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
 
@@ -704,6 +704,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 
        reg_w_val(gspca_dev, ET_RESET_ALL, 0x08);
        et_video(gspca_dev, 1);         /* video on */
+       return 0;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index 4694dc14a2495b3827cf7a67dbd89506c6d25816..a286b91965fa820d95ebf9ef82c3c868c72271f8 100644 (file)
@@ -584,7 +584,11 @@ static int gspca_init_transfer(struct gspca_dev *gspca_dev)
                        goto out;
 
                /* start the cam */
-               gspca_dev->sd_desc->start(gspca_dev);
+               ret = gspca_dev->sd_desc->start(gspca_dev);
+               if (ret < 0) {
+                       destroy_urbs(gspca_dev);
+                       goto out;
+               }
                gspca_dev->streaming = 1;
                atomic_set(&gspca_dev->nevent, 0);
 
index 72a28857305151dbf06933939c3290f5b96f0200..b0bdae194bb641d55b5b229435700e0caeae8bd2 100644 (file)
@@ -93,7 +93,7 @@ struct sd_desc {
 /* mandatory operations */
        cam_cf_op config;       /* called on probe */
        cam_op init;            /* called on probe and resume */
-       cam_v_op start;         /* called on stream on */
+       cam_op start;           /* called on stream on */
        cam_pkt_op pkt_scan;
 /* optional operations */
        cam_v_op stopN;         /* called on stream off - main alt */
index 4d5db47ba8cbf3564d9287a86153e4f46733f2e8..277ca34a881775cf8ee72a7801bb4202e2864f5c 100644 (file)
@@ -134,7 +134,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
        return 0;
 }
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        int err_code;
        __u8 *data;
@@ -143,9 +143,10 @@ static void sd_start(struct gspca_dev *gspca_dev)
        int intpipe;
 
        PDEBUG(D_STREAM, "camera start, iface %d, alt 8", gspca_dev->iface);
-       if (usb_set_interface(gspca_dev->dev, gspca_dev->iface, 8) < 0) {
+       err_code = usb_set_interface(gspca_dev->dev, gspca_dev->iface, 8);
+       if (err_code < 0) {
                PDEBUG(D_ERR|D_STREAM, "Set packet size: set interface error");
-               return;
+               return err_code;
        }
 
        data = gspca_dev->usb_buf;
@@ -154,7 +155,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 
        err_code = reg_w(gspca_dev, data[0], 2);
        if (err_code < 0)
-               return;
+               return err_code;
 
        /*
           Initialize the MR97113 chip register
@@ -180,14 +181,14 @@ static void sd_start(struct gspca_dev *gspca_dev)
 
        err_code = reg_w(gspca_dev, data[0], 11);
        if (err_code < 0)
-               return;
+               return err_code;
 
        data[0] = 0x23;         /* address */
        data[1] = 0x09;         /* reg 35, append frame header */
 
        err_code = reg_w(gspca_dev, data[0], 2);
        if (err_code < 0)
-               return;
+               return err_code;
 
        data[0] = 0x3c;         /* address */
 /*     if (gspca_dev->width == 1280) */
@@ -198,7 +199,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
                                 *      (unit: 4KB) 200KB */
        err_code = reg_w(gspca_dev, data[0], 2);
        if (err_code < 0)
-               return;
+               return err_code;
 
        if (0) {                        /* fixed dark-gain */
                data[1] = 0;            /* reg 94, Y Gain (1.75) */
@@ -240,13 +241,13 @@ static void sd_start(struct gspca_dev *gspca_dev)
 
        err_code = reg_w(gspca_dev, data[0], 6);
        if (err_code < 0)
-               return;
+               return err_code;
 
        data[0] = 0x67;
        data[1] = 0x13;         /* reg 103, first pixel B, disable sharpness */
        err_code = reg_w(gspca_dev, data[0], 2);
        if (err_code < 0)
-               return;
+               return err_code;
 
        /*
         * initialize the value of MI sensor...
@@ -326,6 +327,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
        data[0] = 0x00;
        data[1] = 0x4d;         /* ISOC transfering enable... */
        reg_w(gspca_dev, data[0], 2);
+       return err_code;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index 4df4eec9f7e71163fe35950bf02a303ca5a3272c..ca671194679e3adef083dbbe3f3e20df8956ebf2 100644 (file)
@@ -1854,7 +1854,7 @@ static int set_ov_sensor_window(struct sd *sd)
 }
 
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
        int ret;
@@ -1871,9 +1871,10 @@ static void sd_start(struct gspca_dev *gspca_dev)
                goto out;
        PDEBUG(D_STREAM, "camera started alt: 0x%02x", gspca_dev->alt);
        ov51x_led_control(sd, 1);
-       return;
+       return 0;
 out:
        PDEBUG(D_ERR, "camera start error:%d", ret);
+       return ret;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index 34e923d00b7e943f99bdabbe9e4248e24eb5e4b3..0b0c573d06da1ee3da37fed3d3f74948375845c4 100644 (file)
@@ -281,7 +281,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 }
 
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
        __u8 mode;
@@ -323,6 +323,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
        sd->sof_read = 0;
        sd->autogain_ignore_frames = 0;
        atomic_set(&sd->avg_lum, -1);
+       return 0;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index ba865b7f1ed81710e902fdf86eb2ae1c1cf06e8a..e5ff9a6199ef16261e85faec7d9ab85d97ebfc49 100644 (file)
@@ -675,7 +675,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
        return 0;
 }
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
 
@@ -724,6 +724,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
                reg_w(gspca_dev, 0x78, 0x01);
        else
                reg_w(gspca_dev, 0x78, 0x05);
+       return 0;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index 4328ad44c40aa975a542f952f5b98fcf0bc1a1c7..6c69bc7778fc2f9cf322d0282a3151a91bcc9f82 100644 (file)
@@ -892,7 +892,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 }
 
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
        struct cam *cam = &gspca_dev->cam;
@@ -976,6 +976,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
        sd->frames_to_drop = 0;
        sd->autogain_ignore_frames = 0;
        atomic_set(&sd->avg_lum, -1);
+       return 0;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index 2ca4d9f23fe425ed448ec88aaa1819260f7a3aeb..9c6a874be990484bfe3f0d076714b49aff89b0bf 100644 (file)
@@ -1203,7 +1203,7 @@ static void setvflip(struct sd *sd)
 }
 
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
        int i;
@@ -1357,6 +1357,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
        }
        setautogain(gspca_dev);
        reg_w1(gspca_dev, 0x01, reg1);
+       return 0;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index 6e733901fcca24129457aba26946e4229af6ca0f..bca106c153faa3dc4708ad77a6e33eac2c73615d 100644 (file)
@@ -660,7 +660,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
        return 0;
 }
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
        int err;
@@ -867,6 +867,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
                write_vector(gspca_dev, Clicksmart510_defaults);
                break;
        }
+       return 0;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index e9eb59bae4fbf1b82effe0d21d5496213a86db80..b742f260c7caa6bb4fd8b1769be95c87988bafcb 100644 (file)
@@ -1980,7 +1980,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
        return 0;
 }
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        struct usb_device *dev = gspca_dev->dev;
        int mode;
@@ -2012,6 +2012,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
        setbrightness(gspca_dev);
        setcontrast(gspca_dev);
        setcolors(gspca_dev);
+       return 0;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index f601daf19ebeabacaf044af300f1914ed69caa61..b345749213cf16e9e0bd9e5cf2703d4cb9c9388f 100644 (file)
@@ -688,7 +688,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
        return 0;
 }
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        struct usb_device *dev = gspca_dev->dev;
        int ret;
@@ -733,6 +733,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 /*     reg_write(dev, 0x5, 0x0, 0x0); */
 /*     reg_write(dev, 0x5, 0x0, 0x1); */
 /*     reg_write(dev, 0x5, 0x11, 0x2); */
+       return ret;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index 195dce96ef068d5579b1cd896c623ed242619378..645ee9d44d0267dbb908ddf2e9beea692b413d05 100644 (file)
@@ -422,7 +422,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
        return 0;
 }
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        struct usb_device *dev = gspca_dev->dev;
        __u16 norme;
@@ -549,6 +549,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
        PDEBUG(D_STREAM, "webcam started");
        spca506_GetNormeInput(gspca_dev, &norme, &channel);
        spca506_SetNormeInput(gspca_dev, norme, channel);
+       return 0;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index 281ce02103a336ced7a1d10042b3c830fdcf1155..63ec902c895d0398116f30732e098d8d74daeb69 100644 (file)
@@ -1528,7 +1528,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
        return 0;
 }
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        int mode;
 
@@ -1546,6 +1546,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
                break;
        }
        reg_write(gspca_dev->dev, 0x8112, 0x10 | 0x20);
+       return 0;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index 4d8e2c0018b1121756b1f103bedc4659d6ac16f7..29089d9526b617944556983f732d41343e13fe56 100644 (file)
@@ -699,7 +699,7 @@ static void setautogain(struct gspca_dev *gspca_dev)
                sd->ag_cnt = -1;
 }
 
-static void sd_start_12a(struct gspca_dev *gspca_dev)
+static int sd_start_12a(struct gspca_dev *gspca_dev)
 {
        struct usb_device *dev = gspca_dev->dev;
        int Clck = 0x8a; /* lower 0x8X values lead to fps > 30 */
@@ -725,8 +725,9 @@ static void sd_start_12a(struct gspca_dev *gspca_dev)
        setwhite(gspca_dev);
        setautogain(gspca_dev);
        setexposure(gspca_dev);
+       return 0;
 }
-static void sd_start_72a(struct gspca_dev *gspca_dev)
+static int sd_start_72a(struct gspca_dev *gspca_dev)
 {
        struct usb_device *dev = gspca_dev->dev;
        int Clck;
@@ -750,6 +751,7 @@ static void sd_start_72a(struct gspca_dev *gspca_dev)
        reg_w_val(dev, 0x8700, Clck);   /* 0x27 clock */
        reg_w_val(dev, 0x8112, 0x10 | 0x20);
        setautogain(gspca_dev);
+       return 0;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index 2f2de429e273470669c42aa7d25749add1a33800..d9d64911f22a21220e73f0aa05ea5e415419ea87 100644 (file)
@@ -324,7 +324,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 }
 
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        int ret, value;
 
@@ -374,9 +374,10 @@ static void sd_start(struct gspca_dev *gspca_dev)
        set_par(gspca_dev, 0x01000000);
        set_par(gspca_dev, 0x01000000);
        PDEBUG(D_STREAM, "camera started alt: 0x%02x", gspca_dev->alt);
-       return;
+       return 0;
 out:
        PDEBUG(D_ERR|D_STREAM, "camera start err %d", ret);
+       return ret;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index 1cfcc6c4955874ab0bb05da32ef387136967c701..bd9288665a80c26c9e98e8bd451643652c19b023 100644 (file)
@@ -961,7 +961,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
        return 0;
 }
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
        struct usb_device *dev = gspca_dev->dev;
@@ -1042,6 +1042,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
                break;
        }
        sp5xx_initContBrigHueRegisters(gspca_dev);
+       return 0;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index f034c748fc7ef5c3a608ff88e6ca1ab18e94261e..78c674297592c01ca02940b66d8a8bd9a173a1f6 100644 (file)
@@ -849,7 +849,7 @@ static int sd_getlowlight(struct gspca_dev *gspca_dev, __s32 *val)
        return 0;
 }
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        int mode;
 
@@ -898,6 +898,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
        setbrightness(gspca_dev);
        setcontrast(gspca_dev);
        setcolors(gspca_dev);
+       return 0;
 }
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
index 084af05302a0399f7e84e993437557d7433e3a3e..968a5911704fd381c2fe8ac67ead6b49d361b72f 100644 (file)
@@ -390,7 +390,7 @@ static void setbrightness(struct gspca_dev *gspca_dev)
 }
 
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        reg_w_1(gspca_dev, TV8532_AD_SLOPE, 0x32);
        reg_w_1(gspca_dev, TV8532_AD_BITCTRL, 0x00);
@@ -443,6 +443,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
        /************************************************/
        tv_8532_PollReg(gspca_dev);
        reg_w_1(gspca_dev, TV8532_UDP_UPDATE, 0x00);    /* 0x31 */
+       return 0;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index 0c68f433bb9b06f448e27e9e6428196e0582dd05..be46d92325404d66b48c6e527005c736c5102812 100644 (file)
@@ -1501,7 +1501,7 @@ static void setlightfreq(struct gspca_dev *gspca_dev)
        usb_exchange(gspca_dev, ov7660_freq_tb[sd->lightfreq]);
 }
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
        const __u8 *GammaT = NULL;
@@ -1585,7 +1585,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
                break;
        default:
                PDEBUG(D_PROBE, "Damned !! no sensor found Bye");
-               return;
+               return -EMEDIUMTYPE;
        }
        if (GammaT && MatrixT) {
                put_tab_to_reg(gspca_dev, GammaT, 17, 0xb84a);
@@ -1621,6 +1621,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
                setautogain(gspca_dev);
                setlightfreq(gspca_dev);
        }
+       return 0;
 }
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
index d61ef727e0c241e08fe65b4f972450c154828da3..d0a4451dc46f2cf48ff3e73bba6e415aed9f086b 100644 (file)
@@ -7178,7 +7178,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
        return 0;
 }
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
        struct sd *sd = (struct sd *) gspca_dev;
        struct usb_device *dev = gspca_dev->dev;
@@ -7331,6 +7331,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
                reg_w(dev, 0x02, 0x0008);
                break;
        }
+       return 0;
 }
 
 static void sd_stop0(struct gspca_dev *gspca_dev)