Date: | 2011-07-06 16:56:25 (12 years 5 months ago) |
---|---|
Author: | Werner Almesberger |
Commit: | 247b48a72cfd14d1c5b1ae2f9e9addea14ceb310 |
Message: | atusb: merged error checking and request completion for control
transfers Most of the processing in atusb_ctrl_cb and atusb_read_fb_cb was identical. Merged it. Also changed bare printk to dev_dbg or dev_info. Signed-off-by: Werner Almesberger <werner@almesberger.net> |
Files: |
drivers/spi/atusb.c (3 diffs) |
Change Details
drivers/spi/atusb.c | ||
---|---|---|
109 | 109 | /* ----- Control transfers ------------------------------------------------- */ |
110 | 110 | |
111 | 111 | |
112 | static void atusb_ctrl_cb(struct urb *urb) | |
112 | static int atusb_async_errchk(struct urb *urb) | |
113 | 113 | { |
114 | 114 | struct atusb_local *atusb = urb->context; |
115 | 115 | struct spi_message *msg = atusb->msg; |
116 | struct usb_device *dev = atusb->udev; | |
116 | 117 | |
117 | if (urb->status) { | |
118 | if (!(urb->status == -ENOENT || | |
119 | urb->status == -ECONNRESET || | |
120 | urb->status == -ESHUTDOWN)) | |
121 | printk("Async USB failed with error %i\n", urb->status); | |
122 | msg->actual_length = 0; | |
123 | } else { | |
124 | printk("Async USB succeeded with length %i\n", | |
118 | if (!urb->status) { | |
119 | dev_dbg(&dev->dev, "atusb_async_errchk OK len %d\n", | |
125 | 120 | urb->actual_length); |
121 | return 0; | |
126 | 122 | } |
123 | ||
124 | if (urb->status != -ENOENT && urb->status != -ECONNRESET && | |
125 | urb->status != -ESHUTDOWN) | |
126 | dev_info(&dev->dev, "atusb_async_errchk FAIL error %d\n", | |
127 | urb->status); | |
128 | ||
129 | msg->actual_length = 0; | |
130 | ||
131 | return urb->status; | |
132 | } | |
133 | ||
134 | static void atusb_async_finish(struct urb *urb) | |
135 | { | |
136 | struct atusb_local *atusb = urb->context; | |
137 | struct spi_message *msg = atusb->msg; | |
127 | 138 | |
128 | 139 | msg->status = urb->status; |
129 | 140 | msg->complete(msg->context); |
... | ... | |
132 | 143 | usb_free_urb(urb); |
133 | 144 | } |
134 | 145 | |
146 | static void atusb_ctrl_cb(struct urb *urb) | |
147 | { | |
148 | atusb_async_errchk(urb); | |
149 | atusb_async_finish(urb); | |
150 | } | |
151 | ||
135 | 152 | static void atusb_read_fb_cb(struct urb *urb) |
136 | 153 | { |
137 | 154 | struct atusb_local *atusb = urb->context; |
... | ... | |
139 | 156 | const struct spi_transfer *xfer; |
140 | 157 | uint8_t *rx; |
141 | 158 | |
142 | if (urb->status) { | |
143 | if (!(urb->status == -ENOENT || | |
144 | urb->status == -ECONNRESET || | |
145 | urb->status == -ESHUTDOWN)) | |
146 | printk("Async USB failed with error %i\n", urb->status); | |
147 | msg->actual_length = 0; | |
148 | } else { | |
149 | printk("Async USB succeeded with length %i\n", | |
150 | urb->actual_length); | |
159 | if (!atusb_async_errchk(urb)) { | |
151 | 160 | BUG_ON(!urb->actual_length); |
161 | ||
152 | 162 | xfer = list_first_entry(&msg->transfers, struct spi_transfer, |
153 | 163 | transfer_list); |
154 | 164 | rx = xfer->rx_buf; |
155 | 165 | rx[1] = atusb->buffer[0]; |
166 | ||
156 | 167 | xfer = list_entry(xfer->transfer_list.next, |
157 | 168 | struct spi_transfer, transfer_list); |
158 | 169 | memcpy(xfer->rx_buf, atusb->buffer+1, urb->actual_length-1); |
159 | 170 | } |
160 | 171 | |
161 | msg->status = urb->status; | |
162 | msg->complete(msg->context); | |
163 | ||
164 | kfree(urb->setup_packet); | |
165 | usb_free_urb(urb); | |
172 | atusb_async_finish(urb); | |
166 | 173 | } |
167 | 174 | |
168 | 175 | static int submit_control_msg(struct atusb_local *atusb, |
Branches:
ben-wpan
ben-wpan-stefan
5396a9238205f20f811ea57898980d3ca82df0b6
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9