diff options
author | Jean-François Moine <moinejf@free.fr> | 2010-09-25 05:12:44 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-10-20 23:06:19 -0400 |
commit | 4bf8b679029127fd84e9bfeb8710723a426e89ad (patch) | |
tree | 9d80fc17cf19b998a0f718ee0a952187f03c80f8 /drivers/media/video/gspca/sonixj.c | |
parent | cdd15a0a1b69de00f0809bddb0a9ca66a50509ce (diff) |
V4L/DVB: gspca - sonixj: Propagate USB errors to higher level
Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/gspca/sonixj.c')
-rw-r--r-- | drivers/media/video/gspca/sonixj.c | 85 |
1 files changed, 67 insertions, 18 deletions
diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c index 025f9ba5c681..583c3410a2c2 100644 --- a/drivers/media/video/gspca/sonixj.c +++ b/drivers/media/video/gspca/sonixj.c | |||
@@ -1326,13 +1326,17 @@ static const u8 (*sensor_init[])[8] = { | |||
1326 | static void reg_r(struct gspca_dev *gspca_dev, | 1326 | static void reg_r(struct gspca_dev *gspca_dev, |
1327 | u16 value, int len) | 1327 | u16 value, int len) |
1328 | { | 1328 | { |
1329 | int ret; | ||
1330 | |||
1331 | if (gspca_dev->usb_err < 0) | ||
1332 | return; | ||
1329 | #ifdef GSPCA_DEBUG | 1333 | #ifdef GSPCA_DEBUG |
1330 | if (len > USB_BUF_SZ) { | 1334 | if (len > USB_BUF_SZ) { |
1331 | err("reg_r: buffer overflow"); | 1335 | err("reg_r: buffer overflow"); |
1332 | return; | 1336 | return; |
1333 | } | 1337 | } |
1334 | #endif | 1338 | #endif |
1335 | usb_control_msg(gspca_dev->dev, | 1339 | ret = usb_control_msg(gspca_dev->dev, |
1336 | usb_rcvctrlpipe(gspca_dev->dev, 0), | 1340 | usb_rcvctrlpipe(gspca_dev->dev, 0), |
1337 | 0, | 1341 | 0, |
1338 | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, | 1342 | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, |
@@ -1340,15 +1344,23 @@ static void reg_r(struct gspca_dev *gspca_dev, | |||
1340 | gspca_dev->usb_buf, len, | 1344 | gspca_dev->usb_buf, len, |
1341 | 500); | 1345 | 500); |
1342 | PDEBUG(D_USBI, "reg_r [%02x] -> %02x", value, gspca_dev->usb_buf[0]); | 1346 | PDEBUG(D_USBI, "reg_r [%02x] -> %02x", value, gspca_dev->usb_buf[0]); |
1347 | if (ret < 0) { | ||
1348 | err("reg_r err %d", ret); | ||
1349 | gspca_dev->usb_err = ret; | ||
1350 | } | ||
1343 | } | 1351 | } |
1344 | 1352 | ||
1345 | static void reg_w1(struct gspca_dev *gspca_dev, | 1353 | static void reg_w1(struct gspca_dev *gspca_dev, |
1346 | u16 value, | 1354 | u16 value, |
1347 | u8 data) | 1355 | u8 data) |
1348 | { | 1356 | { |
1357 | int ret; | ||
1358 | |||
1359 | if (gspca_dev->usb_err < 0) | ||
1360 | return; | ||
1349 | PDEBUG(D_USBO, "reg_w1 [%04x] = %02x", value, data); | 1361 | PDEBUG(D_USBO, "reg_w1 [%04x] = %02x", value, data); |
1350 | gspca_dev->usb_buf[0] = data; | 1362 | gspca_dev->usb_buf[0] = data; |
1351 | usb_control_msg(gspca_dev->dev, | 1363 | ret = usb_control_msg(gspca_dev->dev, |
1352 | usb_sndctrlpipe(gspca_dev->dev, 0), | 1364 | usb_sndctrlpipe(gspca_dev->dev, 0), |
1353 | 0x08, | 1365 | 0x08, |
1354 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, | 1366 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, |
@@ -1356,12 +1368,20 @@ static void reg_w1(struct gspca_dev *gspca_dev, | |||
1356 | 0, | 1368 | 0, |
1357 | gspca_dev->usb_buf, 1, | 1369 | gspca_dev->usb_buf, 1, |
1358 | 500); | 1370 | 500); |
1371 | if (ret < 0) { | ||
1372 | err("reg_w1 err %d", ret); | ||
1373 | gspca_dev->usb_err = ret; | ||
1374 | } | ||
1359 | } | 1375 | } |
1360 | static void reg_w(struct gspca_dev *gspca_dev, | 1376 | static void reg_w(struct gspca_dev *gspca_dev, |
1361 | u16 value, | 1377 | u16 value, |
1362 | const u8 *buffer, | 1378 | const u8 *buffer, |
1363 | int len) | 1379 | int len) |
1364 | { | 1380 | { |
1381 | int ret; | ||
1382 | |||
1383 | if (gspca_dev->usb_err < 0) | ||
1384 | return; | ||
1365 | PDEBUG(D_USBO, "reg_w [%04x] = %02x %02x ..", | 1385 | PDEBUG(D_USBO, "reg_w [%04x] = %02x %02x ..", |
1366 | value, buffer[0], buffer[1]); | 1386 | value, buffer[0], buffer[1]); |
1367 | #ifdef GSPCA_DEBUG | 1387 | #ifdef GSPCA_DEBUG |
@@ -1371,20 +1391,27 @@ static void reg_w(struct gspca_dev *gspca_dev, | |||
1371 | } | 1391 | } |
1372 | #endif | 1392 | #endif |
1373 | memcpy(gspca_dev->usb_buf, buffer, len); | 1393 | memcpy(gspca_dev->usb_buf, buffer, len); |
1374 | usb_control_msg(gspca_dev->dev, | 1394 | ret = usb_control_msg(gspca_dev->dev, |
1375 | usb_sndctrlpipe(gspca_dev->dev, 0), | 1395 | usb_sndctrlpipe(gspca_dev->dev, 0), |
1376 | 0x08, | 1396 | 0x08, |
1377 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, | 1397 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, |
1378 | value, 0, | 1398 | value, 0, |
1379 | gspca_dev->usb_buf, len, | 1399 | gspca_dev->usb_buf, len, |
1380 | 500); | 1400 | 500); |
1401 | if (ret < 0) { | ||
1402 | err("reg_w err %d", ret); | ||
1403 | gspca_dev->usb_err = ret; | ||
1404 | } | ||
1381 | } | 1405 | } |
1382 | 1406 | ||
1383 | /* I2C write 1 byte */ | 1407 | /* I2C write 1 byte */ |
1384 | static void i2c_w1(struct gspca_dev *gspca_dev, u8 reg, u8 val) | 1408 | static void i2c_w1(struct gspca_dev *gspca_dev, u8 reg, u8 val) |
1385 | { | 1409 | { |
1386 | struct sd *sd = (struct sd *) gspca_dev; | 1410 | struct sd *sd = (struct sd *) gspca_dev; |
1411 | int ret; | ||
1387 | 1412 | ||
1413 | if (gspca_dev->usb_err < 0) | ||
1414 | return; | ||
1388 | PDEBUG(D_USBO, "i2c_w1 [%02x] = %02x", reg, val); | 1415 | PDEBUG(D_USBO, "i2c_w1 [%02x] = %02x", reg, val); |
1389 | switch (sd->sensor) { | 1416 | switch (sd->sensor) { |
1390 | case SENSOR_ADCM1700: | 1417 | case SENSOR_ADCM1700: |
@@ -1403,7 +1430,7 @@ static void i2c_w1(struct gspca_dev *gspca_dev, u8 reg, u8 val) | |||
1403 | gspca_dev->usb_buf[5] = 0; | 1430 | gspca_dev->usb_buf[5] = 0; |
1404 | gspca_dev->usb_buf[6] = 0; | 1431 | gspca_dev->usb_buf[6] = 0; |
1405 | gspca_dev->usb_buf[7] = 0x10; | 1432 | gspca_dev->usb_buf[7] = 0x10; |
1406 | usb_control_msg(gspca_dev->dev, | 1433 | ret = usb_control_msg(gspca_dev->dev, |
1407 | usb_sndctrlpipe(gspca_dev->dev, 0), | 1434 | usb_sndctrlpipe(gspca_dev->dev, 0), |
1408 | 0x08, | 1435 | 0x08, |
1409 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, | 1436 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, |
@@ -1411,16 +1438,24 @@ static void i2c_w1(struct gspca_dev *gspca_dev, u8 reg, u8 val) | |||
1411 | 0, | 1438 | 0, |
1412 | gspca_dev->usb_buf, 8, | 1439 | gspca_dev->usb_buf, 8, |
1413 | 500); | 1440 | 500); |
1441 | if (ret < 0) { | ||
1442 | err("i2c_w1 err %d", ret); | ||
1443 | gspca_dev->usb_err = ret; | ||
1444 | } | ||
1414 | } | 1445 | } |
1415 | 1446 | ||
1416 | /* I2C write 8 bytes */ | 1447 | /* I2C write 8 bytes */ |
1417 | static void i2c_w8(struct gspca_dev *gspca_dev, | 1448 | static void i2c_w8(struct gspca_dev *gspca_dev, |
1418 | const u8 *buffer) | 1449 | const u8 *buffer) |
1419 | { | 1450 | { |
1451 | int ret; | ||
1452 | |||
1453 | if (gspca_dev->usb_err < 0) | ||
1454 | return; | ||
1420 | PDEBUG(D_USBO, "i2c_w8 [%02x] = %02x ..", | 1455 | PDEBUG(D_USBO, "i2c_w8 [%02x] = %02x ..", |
1421 | buffer[2], buffer[3]); | 1456 | buffer[2], buffer[3]); |
1422 | memcpy(gspca_dev->usb_buf, buffer, 8); | 1457 | memcpy(gspca_dev->usb_buf, buffer, 8); |
1423 | usb_control_msg(gspca_dev->dev, | 1458 | ret = usb_control_msg(gspca_dev->dev, |
1424 | usb_sndctrlpipe(gspca_dev->dev, 0), | 1459 | usb_sndctrlpipe(gspca_dev->dev, 0), |
1425 | 0x08, | 1460 | 0x08, |
1426 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, | 1461 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, |
@@ -1428,6 +1463,10 @@ static void i2c_w8(struct gspca_dev *gspca_dev, | |||
1428 | gspca_dev->usb_buf, 8, | 1463 | gspca_dev->usb_buf, 8, |
1429 | 500); | 1464 | 500); |
1430 | msleep(2); | 1465 | msleep(2); |
1466 | if (ret < 0) { | ||
1467 | err("i2c_w8 err %d", ret); | ||
1468 | gspca_dev->usb_err = ret; | ||
1469 | } | ||
1431 | } | 1470 | } |
1432 | 1471 | ||
1433 | /* sensor read 'len' (1..5) bytes in gspca_dev->usb_buf */ | 1472 | /* sensor read 'len' (1..5) bytes in gspca_dev->usb_buf */ |
@@ -1529,6 +1568,8 @@ static void mi0360_probe(struct gspca_dev *gspca_dev) | |||
1529 | if (val != 0xffff) | 1568 | if (val != 0xffff) |
1530 | break; | 1569 | break; |
1531 | } | 1570 | } |
1571 | if (gspca_dev->usb_err < 0) | ||
1572 | return; | ||
1532 | switch (val) { | 1573 | switch (val) { |
1533 | case 0x823a: | 1574 | case 0x823a: |
1534 | PDEBUG(D_PROBE, "Sensor mt9v111"); | 1575 | PDEBUG(D_PROBE, "Sensor mt9v111"); |
@@ -1556,6 +1597,8 @@ static void ov7630_probe(struct gspca_dev *gspca_dev) | |||
1556 | val = (gspca_dev->usb_buf[3] << 8) | gspca_dev->usb_buf[4]; | 1597 | val = (gspca_dev->usb_buf[3] << 8) | gspca_dev->usb_buf[4]; |
1557 | reg_w1(gspca_dev, 0x01, 0x29); | 1598 | reg_w1(gspca_dev, 0x01, 0x29); |
1558 | reg_w1(gspca_dev, 0x17, 0x42); | 1599 | reg_w1(gspca_dev, 0x17, 0x42); |
1600 | if (gspca_dev->usb_err < 0) | ||
1601 | return; | ||
1559 | if (val == 0x7628) { /* soi768 */ | 1602 | if (val == 0x7628) { /* soi768 */ |
1560 | sd->sensor = SENSOR_SOI768; | 1603 | sd->sensor = SENSOR_SOI768; |
1561 | /*fixme: only valid for 0c45:613e?*/ | 1604 | /*fixme: only valid for 0c45:613e?*/ |
@@ -1593,6 +1636,8 @@ static void ov7648_probe(struct gspca_dev *gspca_dev) | |||
1593 | val = (gspca_dev->usb_buf[3] << 8) | gspca_dev->usb_buf[4]; | 1636 | val = (gspca_dev->usb_buf[3] << 8) | gspca_dev->usb_buf[4]; |
1594 | reg_w1(gspca_dev, 0x01, 0x29); | 1637 | reg_w1(gspca_dev, 0x01, 0x29); |
1595 | reg_w1(gspca_dev, 0x17, 0x42); | 1638 | reg_w1(gspca_dev, 0x17, 0x42); |
1639 | if (gspca_dev->usb_err < 0) | ||
1640 | return; | ||
1596 | if (val == 0x1030) { /* po1030 */ | 1641 | if (val == 0x1030) { /* po1030 */ |
1597 | PDEBUG(D_PROBE, "Sensor po1030"); | 1642 | PDEBUG(D_PROBE, "Sensor po1030"); |
1598 | sd->sensor = SENSOR_PO1030; | 1643 | sd->sensor = SENSOR_PO1030; |
@@ -1631,6 +1676,8 @@ static void po2030n_probe(struct gspca_dev *gspca_dev) | |||
1631 | val = (gspca_dev->usb_buf[3] << 8) | gspca_dev->usb_buf[4]; | 1676 | val = (gspca_dev->usb_buf[3] << 8) | gspca_dev->usb_buf[4]; |
1632 | reg_w1(gspca_dev, 0x01, 0x29); | 1677 | reg_w1(gspca_dev, 0x01, 0x29); |
1633 | reg_w1(gspca_dev, 0x17, 0x42); | 1678 | reg_w1(gspca_dev, 0x17, 0x42); |
1679 | if (gspca_dev->usb_err < 0) | ||
1680 | return; | ||
1634 | if (val == 0x2030) { | 1681 | if (val == 0x2030) { |
1635 | PDEBUG(D_PROBE, "Sensor po2030n"); | 1682 | PDEBUG(D_PROBE, "Sensor po2030n"); |
1636 | /* sd->sensor = SENSOR_PO2030N; */ | 1683 | /* sd->sensor = SENSOR_PO2030N; */ |
@@ -1828,6 +1875,8 @@ static int sd_init(struct gspca_dev *gspca_dev) | |||
1828 | reg_w1(gspca_dev, 0xf1, gspca_dev->usb_buf[0]); | 1875 | reg_w1(gspca_dev, 0xf1, gspca_dev->usb_buf[0]); |
1829 | reg_r(gspca_dev, 0x00, 1); /* get sonix chip id */ | 1876 | reg_r(gspca_dev, 0x00, 1); /* get sonix chip id */ |
1830 | regF1 = gspca_dev->usb_buf[0]; | 1877 | regF1 = gspca_dev->usb_buf[0]; |
1878 | if (gspca_dev->usb_err < 0) | ||
1879 | return gspca_dev->usb_err; | ||
1831 | PDEBUG(D_PROBE, "Sonix chip id: %02x", regF1); | 1880 | PDEBUG(D_PROBE, "Sonix chip id: %02x", regF1); |
1832 | switch (sd->bridge) { | 1881 | switch (sd->bridge) { |
1833 | case BRIDGE_SN9C102P: | 1882 | case BRIDGE_SN9C102P: |
@@ -1881,7 +1930,7 @@ static int sd_init(struct gspca_dev *gspca_dev) | |||
1881 | 1930 | ||
1882 | gspca_dev->ctrl_dis = ctrl_dis[sd->sensor]; | 1931 | gspca_dev->ctrl_dis = ctrl_dis[sd->sensor]; |
1883 | 1932 | ||
1884 | return 0; | 1933 | return gspca_dev->usb_err; |
1885 | } | 1934 | } |
1886 | 1935 | ||
1887 | static u32 setexposure(struct gspca_dev *gspca_dev, | 1936 | static u32 setexposure(struct gspca_dev *gspca_dev, |
@@ -2541,7 +2590,7 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
2541 | setcolors(gspca_dev); | 2590 | setcolors(gspca_dev); |
2542 | setautogain(gspca_dev); | 2591 | setautogain(gspca_dev); |
2543 | setfreq(gspca_dev); | 2592 | setfreq(gspca_dev); |
2544 | return 0; | 2593 | return gspca_dev->usb_err; |
2545 | } | 2594 | } |
2546 | 2595 | ||
2547 | static void sd_stopN(struct gspca_dev *gspca_dev) | 2596 | static void sd_stopN(struct gspca_dev *gspca_dev) |
@@ -2704,7 +2753,7 @@ static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) | |||
2704 | sd->brightness = val; | 2753 | sd->brightness = val; |
2705 | if (gspca_dev->streaming) | 2754 | if (gspca_dev->streaming) |
2706 | setbrightness(gspca_dev); | 2755 | setbrightness(gspca_dev); |
2707 | return 0; | 2756 | return gspca_dev->usb_err; |
2708 | } | 2757 | } |
2709 | 2758 | ||
2710 | static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val) | 2759 | static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -2722,7 +2771,7 @@ static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val) | |||
2722 | sd->contrast = val; | 2771 | sd->contrast = val; |
2723 | if (gspca_dev->streaming) | 2772 | if (gspca_dev->streaming) |
2724 | setcontrast(gspca_dev); | 2773 | setcontrast(gspca_dev); |
2725 | return 0; | 2774 | return gspca_dev->usb_err; |
2726 | } | 2775 | } |
2727 | 2776 | ||
2728 | static int sd_getcontrast(struct gspca_dev *gspca_dev, __s32 *val) | 2777 | static int sd_getcontrast(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -2740,7 +2789,7 @@ static int sd_setcolors(struct gspca_dev *gspca_dev, __s32 val) | |||
2740 | sd->colors = val; | 2789 | sd->colors = val; |
2741 | if (gspca_dev->streaming) | 2790 | if (gspca_dev->streaming) |
2742 | setcolors(gspca_dev); | 2791 | setcolors(gspca_dev); |
2743 | return 0; | 2792 | return gspca_dev->usb_err; |
2744 | } | 2793 | } |
2745 | 2794 | ||
2746 | static int sd_getcolors(struct gspca_dev *gspca_dev, __s32 *val) | 2795 | static int sd_getcolors(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -2758,7 +2807,7 @@ static int sd_setblue_balance(struct gspca_dev *gspca_dev, __s32 val) | |||
2758 | sd->blue = val; | 2807 | sd->blue = val; |
2759 | if (gspca_dev->streaming) | 2808 | if (gspca_dev->streaming) |
2760 | setredblue(gspca_dev); | 2809 | setredblue(gspca_dev); |
2761 | return 0; | 2810 | return gspca_dev->usb_err; |
2762 | } | 2811 | } |
2763 | 2812 | ||
2764 | static int sd_getblue_balance(struct gspca_dev *gspca_dev, __s32 *val) | 2813 | static int sd_getblue_balance(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -2776,7 +2825,7 @@ static int sd_setred_balance(struct gspca_dev *gspca_dev, __s32 val) | |||
2776 | sd->red = val; | 2825 | sd->red = val; |
2777 | if (gspca_dev->streaming) | 2826 | if (gspca_dev->streaming) |
2778 | setredblue(gspca_dev); | 2827 | setredblue(gspca_dev); |
2779 | return 0; | 2828 | return gspca_dev->usb_err; |
2780 | } | 2829 | } |
2781 | 2830 | ||
2782 | static int sd_getred_balance(struct gspca_dev *gspca_dev, __s32 *val) | 2831 | static int sd_getred_balance(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -2794,7 +2843,7 @@ static int sd_setgamma(struct gspca_dev *gspca_dev, __s32 val) | |||
2794 | sd->gamma = val; | 2843 | sd->gamma = val; |
2795 | if (gspca_dev->streaming) | 2844 | if (gspca_dev->streaming) |
2796 | setgamma(gspca_dev); | 2845 | setgamma(gspca_dev); |
2797 | return 0; | 2846 | return gspca_dev->usb_err; |
2798 | } | 2847 | } |
2799 | 2848 | ||
2800 | static int sd_getgamma(struct gspca_dev *gspca_dev, __s32 *val) | 2849 | static int sd_getgamma(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -2812,7 +2861,7 @@ static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val) | |||
2812 | sd->autogain = val; | 2861 | sd->autogain = val; |
2813 | if (gspca_dev->streaming) | 2862 | if (gspca_dev->streaming) |
2814 | setautogain(gspca_dev); | 2863 | setautogain(gspca_dev); |
2815 | return 0; | 2864 | return gspca_dev->usb_err; |
2816 | } | 2865 | } |
2817 | 2866 | ||
2818 | static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val) | 2867 | static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -2830,7 +2879,7 @@ static int sd_setsharpness(struct gspca_dev *gspca_dev, __s32 val) | |||
2830 | sd->sharpness = val; | 2879 | sd->sharpness = val; |
2831 | if (gspca_dev->streaming) | 2880 | if (gspca_dev->streaming) |
2832 | setsharpness(sd); | 2881 | setsharpness(sd); |
2833 | return 0; | 2882 | return gspca_dev->usb_err; |
2834 | } | 2883 | } |
2835 | 2884 | ||
2836 | static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val) | 2885 | static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -2848,7 +2897,7 @@ static int sd_setvflip(struct gspca_dev *gspca_dev, __s32 val) | |||
2848 | sd->vflip = val; | 2897 | sd->vflip = val; |
2849 | if (gspca_dev->streaming) | 2898 | if (gspca_dev->streaming) |
2850 | setvflip(sd); | 2899 | setvflip(sd); |
2851 | return 0; | 2900 | return gspca_dev->usb_err; |
2852 | } | 2901 | } |
2853 | 2902 | ||
2854 | static int sd_getvflip(struct gspca_dev *gspca_dev, __s32 *val) | 2903 | static int sd_getvflip(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -2866,7 +2915,7 @@ static int sd_setinfrared(struct gspca_dev *gspca_dev, __s32 val) | |||
2866 | sd->infrared = val; | 2915 | sd->infrared = val; |
2867 | if (gspca_dev->streaming) | 2916 | if (gspca_dev->streaming) |
2868 | setinfrared(sd); | 2917 | setinfrared(sd); |
2869 | return 0; | 2918 | return gspca_dev->usb_err; |
2870 | } | 2919 | } |
2871 | 2920 | ||
2872 | static int sd_getinfrared(struct gspca_dev *gspca_dev, __s32 *val) | 2921 | static int sd_getinfrared(struct gspca_dev *gspca_dev, __s32 *val) |
@@ -2884,7 +2933,7 @@ static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val) | |||
2884 | sd->freq = val; | 2933 | sd->freq = val; |
2885 | if (gspca_dev->streaming) | 2934 | if (gspca_dev->streaming) |
2886 | setfreq(gspca_dev); | 2935 | setfreq(gspca_dev); |
2887 | return 0; | 2936 | return gspca_dev->usb_err; |
2888 | } | 2937 | } |
2889 | 2938 | ||
2890 | static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val) | 2939 | static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val) |