diff options
author | Patrice Chotard <patrice.chotard@sfr.fr> | 2011-04-18 16:38:37 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-05-20 08:27:18 -0400 |
commit | 8715b16eadef74e9cf167f44961354f54b547e2a (patch) | |
tree | ba8cb4deb8a85adc418fe58779e3dc62dda4f4b9 /drivers/media/video/gspca | |
parent | c3d8692758dfaaf0049d6112c94c819de9237577 (diff) |
[media] gspca - jeilinj: use gspca_dev->usb_err to forward error to upper layer
Signed-off-by: Patrice CHOTARD <patricechotard@free.fr>
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')
-rw-r--r-- | drivers/media/video/gspca/jeilinj.c | 43 |
1 files changed, 20 insertions, 23 deletions
diff --git a/drivers/media/video/gspca/jeilinj.c b/drivers/media/video/gspca/jeilinj.c index 33de1771b191..32494fbf1cf1 100644 --- a/drivers/media/video/gspca/jeilinj.c +++ b/drivers/media/video/gspca/jeilinj.c | |||
@@ -71,39 +71,44 @@ static struct v4l2_pix_format jlj_mode[] = { | |||
71 | */ | 71 | */ |
72 | 72 | ||
73 | /* All commands are two bytes only */ | 73 | /* All commands are two bytes only */ |
74 | static int jlj_write2(struct gspca_dev *gspca_dev, unsigned char *command) | 74 | static void jlj_write2(struct gspca_dev *gspca_dev, unsigned char *command) |
75 | { | 75 | { |
76 | int retval; | 76 | int retval; |
77 | 77 | ||
78 | if (gspca_dev->usb_err < 0) | ||
79 | return; | ||
78 | memcpy(gspca_dev->usb_buf, command, 2); | 80 | memcpy(gspca_dev->usb_buf, command, 2); |
79 | retval = usb_bulk_msg(gspca_dev->dev, | 81 | retval = usb_bulk_msg(gspca_dev->dev, |
80 | usb_sndbulkpipe(gspca_dev->dev, 3), | 82 | usb_sndbulkpipe(gspca_dev->dev, 3), |
81 | gspca_dev->usb_buf, 2, NULL, 500); | 83 | gspca_dev->usb_buf, 2, NULL, 500); |
82 | if (retval < 0) | 84 | if (retval < 0) { |
83 | err("command write [%02x] error %d", | 85 | err("command write [%02x] error %d", |
84 | gspca_dev->usb_buf[0], retval); | 86 | gspca_dev->usb_buf[0], retval); |
85 | return retval; | 87 | gspca_dev->usb_err = retval; |
88 | } | ||
86 | } | 89 | } |
87 | 90 | ||
88 | /* Responses are one byte only */ | 91 | /* Responses are one byte only */ |
89 | static int jlj_read1(struct gspca_dev *gspca_dev, unsigned char response) | 92 | static void jlj_read1(struct gspca_dev *gspca_dev, unsigned char response) |
90 | { | 93 | { |
91 | int retval; | 94 | int retval; |
92 | 95 | ||
96 | if (gspca_dev->usb_err < 0) | ||
97 | return; | ||
93 | retval = usb_bulk_msg(gspca_dev->dev, | 98 | retval = usb_bulk_msg(gspca_dev->dev, |
94 | usb_rcvbulkpipe(gspca_dev->dev, 0x84), | 99 | usb_rcvbulkpipe(gspca_dev->dev, 0x84), |
95 | gspca_dev->usb_buf, 1, NULL, 500); | 100 | gspca_dev->usb_buf, 1, NULL, 500); |
96 | response = gspca_dev->usb_buf[0]; | 101 | response = gspca_dev->usb_buf[0]; |
97 | if (retval < 0) | 102 | if (retval < 0) { |
98 | err("read command [%02x] error %d", | 103 | err("read command [%02x] error %d", |
99 | gspca_dev->usb_buf[0], retval); | 104 | gspca_dev->usb_buf[0], retval); |
100 | return retval; | 105 | gspca_dev->usb_err = retval; |
106 | } | ||
101 | } | 107 | } |
102 | 108 | ||
103 | static int jlj_start(struct gspca_dev *gspca_dev) | 109 | static int jlj_start(struct gspca_dev *gspca_dev) |
104 | { | 110 | { |
105 | int i; | 111 | int i; |
106 | int retval = -1; | ||
107 | u8 response = 0xff; | 112 | u8 response = 0xff; |
108 | struct sd *sd = (struct sd *) gspca_dev; | 113 | struct sd *sd = (struct sd *) gspca_dev; |
109 | struct jlj_command start_commands[] = { | 114 | struct jlj_command start_commands[] = { |
@@ -138,16 +143,13 @@ static int jlj_start(struct gspca_dev *gspca_dev) | |||
138 | 143 | ||
139 | sd->blocks_left = 0; | 144 | sd->blocks_left = 0; |
140 | for (i = 0; i < ARRAY_SIZE(start_commands); i++) { | 145 | for (i = 0; i < ARRAY_SIZE(start_commands); i++) { |
141 | retval = jlj_write2(gspca_dev, start_commands[i].instruction); | 146 | jlj_write2(gspca_dev, start_commands[i].instruction); |
142 | if (retval < 0) | ||
143 | return retval; | ||
144 | if (start_commands[i].ack_wanted) | 147 | if (start_commands[i].ack_wanted) |
145 | retval = jlj_read1(gspca_dev, response); | 148 | jlj_read1(gspca_dev, response); |
146 | if (retval < 0) | ||
147 | return retval; | ||
148 | } | 149 | } |
149 | PDEBUG(D_ERR, "jlj_start retval is %d", retval); | 150 | if (gspca_dev->usb_err < 0) |
150 | return retval; | 151 | PDEBUG(D_ERR, "Start streaming command failed"); |
152 | return gspca_dev->usb_err; | ||
151 | } | 153 | } |
152 | 154 | ||
153 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, | 155 | static void sd_pkt_scan(struct gspca_dev *gspca_dev, |
@@ -250,26 +252,21 @@ static void sd_stopN(struct gspca_dev *gspca_dev) | |||
250 | /* this function is called at probe and resume time */ | 252 | /* this function is called at probe and resume time */ |
251 | static int sd_init(struct gspca_dev *gspca_dev) | 253 | static int sd_init(struct gspca_dev *gspca_dev) |
252 | { | 254 | { |
253 | return 0; | 255 | return gspca_dev->usb_err; |
254 | } | 256 | } |
255 | 257 | ||
256 | /* Set up for getting frames. */ | 258 | /* Set up for getting frames. */ |
257 | static int sd_start(struct gspca_dev *gspca_dev) | 259 | static int sd_start(struct gspca_dev *gspca_dev) |
258 | { | 260 | { |
259 | struct sd *dev = (struct sd *) gspca_dev; | 261 | struct sd *dev = (struct sd *) gspca_dev; |
260 | int ret; | ||
261 | 262 | ||
262 | /* create the JPEG header */ | 263 | /* create the JPEG header */ |
263 | jpeg_define(dev->jpeg_hdr, gspca_dev->height, gspca_dev->width, | 264 | jpeg_define(dev->jpeg_hdr, gspca_dev->height, gspca_dev->width, |
264 | 0x21); /* JPEG 422 */ | 265 | 0x21); /* JPEG 422 */ |
265 | jpeg_set_qual(dev->jpeg_hdr, dev->quality); | 266 | jpeg_set_qual(dev->jpeg_hdr, dev->quality); |
266 | PDEBUG(D_STREAM, "Start streaming at 320x240"); | 267 | PDEBUG(D_STREAM, "Start streaming at 320x240"); |
267 | ret = jlj_start(gspca_dev); | 268 | jlj_start(gspca_dev); |
268 | if (ret < 0) { | 269 | return gspca_dev->usb_err; |
269 | PDEBUG(D_ERR, "Start streaming command failed"); | ||
270 | return ret; | ||
271 | } | ||
272 | return 0; | ||
273 | } | 270 | } |
274 | 271 | ||
275 | /* Table of supported USB devices */ | 272 | /* Table of supported USB devices */ |