diff options
author | Jean-François Moine <moinejf@free.fr> | 2011-01-13 03:58:04 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-01-19 08:45:41 -0500 |
commit | 14b67c2969ebf50bd5534b2a0c441f8569a9361e (patch) | |
tree | ffb78ff549032ae87feb2a93a7e9a78a86914756 /drivers | |
parent | ddffa49e257e2b28e23f1e2729c0560bcad89937 (diff) |
[media] gspca - ov534: Propagate 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')
-rw-r--r-- | drivers/media/video/gspca/ov534.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/media/video/gspca/ov534.c b/drivers/media/video/gspca/ov534.c index a837f2942a8c..04da22802736 100644 --- a/drivers/media/video/gspca/ov534.c +++ b/drivers/media/video/gspca/ov534.c | |||
@@ -479,6 +479,9 @@ static void ov534_reg_write(struct gspca_dev *gspca_dev, u16 reg, u8 val) | |||
479 | struct usb_device *udev = gspca_dev->dev; | 479 | struct usb_device *udev = gspca_dev->dev; |
480 | int ret; | 480 | int ret; |
481 | 481 | ||
482 | if (gspca_dev->usb_err < 0) | ||
483 | return; | ||
484 | |||
482 | PDEBUG(D_USBO, "SET 01 0000 %04x %02x", reg, val); | 485 | PDEBUG(D_USBO, "SET 01 0000 %04x %02x", reg, val); |
483 | gspca_dev->usb_buf[0] = val; | 486 | gspca_dev->usb_buf[0] = val; |
484 | ret = usb_control_msg(udev, | 487 | ret = usb_control_msg(udev, |
@@ -486,8 +489,10 @@ static void ov534_reg_write(struct gspca_dev *gspca_dev, u16 reg, u8 val) | |||
486 | 0x01, | 489 | 0x01, |
487 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | 490 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, |
488 | 0x00, reg, gspca_dev->usb_buf, 1, CTRL_TIMEOUT); | 491 | 0x00, reg, gspca_dev->usb_buf, 1, CTRL_TIMEOUT); |
489 | if (ret < 0) | 492 | if (ret < 0) { |
490 | err("write failed %d", ret); | 493 | err("write failed %d", ret); |
494 | gspca_dev->usb_err = ret; | ||
495 | } | ||
491 | } | 496 | } |
492 | 497 | ||
493 | static u8 ov534_reg_read(struct gspca_dev *gspca_dev, u16 reg) | 498 | static u8 ov534_reg_read(struct gspca_dev *gspca_dev, u16 reg) |
@@ -495,14 +500,18 @@ static u8 ov534_reg_read(struct gspca_dev *gspca_dev, u16 reg) | |||
495 | struct usb_device *udev = gspca_dev->dev; | 500 | struct usb_device *udev = gspca_dev->dev; |
496 | int ret; | 501 | int ret; |
497 | 502 | ||
503 | if (gspca_dev->usb_err < 0) | ||
504 | return 0; | ||
498 | ret = usb_control_msg(udev, | 505 | ret = usb_control_msg(udev, |
499 | usb_rcvctrlpipe(udev, 0), | 506 | usb_rcvctrlpipe(udev, 0), |
500 | 0x01, | 507 | 0x01, |
501 | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | 508 | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, |
502 | 0x00, reg, gspca_dev->usb_buf, 1, CTRL_TIMEOUT); | 509 | 0x00, reg, gspca_dev->usb_buf, 1, CTRL_TIMEOUT); |
503 | PDEBUG(D_USBI, "GET 01 0000 %04x %02x", reg, gspca_dev->usb_buf[0]); | 510 | PDEBUG(D_USBI, "GET 01 0000 %04x %02x", reg, gspca_dev->usb_buf[0]); |
504 | if (ret < 0) | 511 | if (ret < 0) { |
505 | err("read failed %d", ret); | 512 | err("read failed %d", ret); |
513 | gspca_dev->usb_err = ret; | ||
514 | } | ||
506 | return gspca_dev->usb_buf[0]; | 515 | return gspca_dev->usb_buf[0]; |
507 | } | 516 | } |
508 | 517 | ||
@@ -563,8 +572,10 @@ static void sccb_reg_write(struct gspca_dev *gspca_dev, u8 reg, u8 val) | |||
563 | ov534_reg_write(gspca_dev, OV534_REG_WRITE, val); | 572 | ov534_reg_write(gspca_dev, OV534_REG_WRITE, val); |
564 | ov534_reg_write(gspca_dev, OV534_REG_OPERATION, OV534_OP_WRITE_3); | 573 | ov534_reg_write(gspca_dev, OV534_REG_OPERATION, OV534_OP_WRITE_3); |
565 | 574 | ||
566 | if (!sccb_check_status(gspca_dev)) | 575 | if (!sccb_check_status(gspca_dev)) { |
567 | err("sccb_reg_write failed"); | 576 | err("sccb_reg_write failed"); |
577 | gspca_dev->usb_err = -EIO; | ||
578 | } | ||
568 | } | 579 | } |
569 | 580 | ||
570 | static u8 sccb_reg_read(struct gspca_dev *gspca_dev, u16 reg) | 581 | static u8 sccb_reg_read(struct gspca_dev *gspca_dev, u16 reg) |
@@ -885,7 +896,7 @@ static int sd_init(struct gspca_dev *gspca_dev) | |||
885 | ov534_set_led(gspca_dev, 0); | 896 | ov534_set_led(gspca_dev, 0); |
886 | set_frame_rate(gspca_dev); | 897 | set_frame_rate(gspca_dev); |
887 | 898 | ||
888 | return 0; | 899 | return gspca_dev->usb_err; |
889 | } | 900 | } |
890 | 901 | ||
891 | static int sd_start(struct gspca_dev *gspca_dev) | 902 | static int sd_start(struct gspca_dev *gspca_dev) |
@@ -920,7 +931,7 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
920 | 931 | ||
921 | ov534_set_led(gspca_dev, 1); | 932 | ov534_set_led(gspca_dev, 1); |
922 | ov534_reg_write(gspca_dev, 0xe0, 0x00); | 933 | ov534_reg_write(gspca_dev, 0xe0, 0x00); |
923 | return 0; | 934 | return gspca_dev->usb_err; |
924 | } | 935 | } |
925 | 936 | ||
926 | static void sd_stopN(struct gspca_dev *gspca_dev) | 937 | static void sd_stopN(struct gspca_dev *gspca_dev) |