Date: | 2011-06-26 00:53:57 (12 years 9 months ago) |
---|---|
Author: | Werner Almesberger |
Commit: | ccfe8ad21cc541ff201e3c03dfd57c593d44b59f |
Message: | spi_atben: removed classifier The classifier was just a proof of concept to illustrate what spi_atusb will need. spi_atben just implements a general-purpose SPI engine. |
Files: |
drivers/spi/spi_atben.c (3 diffs) |
Change Details
drivers/spi/spi_atben.c | ||
---|---|---|
188 | 188 | { |
189 | 189 | struct atben_prv *prv = spi_master_get_devdata(spi->master); |
190 | 190 | struct spi_transfer *xfer; |
191 | struct spi_transfer *x[2]; | |
192 | int n; | |
193 | 191 | |
194 | 192 | if (unlikely(list_empty(&msg->transfers))) { |
195 | 193 | dev_err(prv->dev, "transfer is empty\n"); |
196 | 194 | return -EINVAL; |
197 | 195 | } |
198 | 196 | |
199 | /* | |
200 | * Classify the request. This is just a proof of concept - we don't | |
201 | * need it in this driver. | |
202 | */ | |
203 | n = 0; | |
204 | list_for_each_entry(xfer, &msg->transfers, transfer_list) { | |
205 | if (n == ARRAY_SIZE(x)) { | |
206 | dev_err(prv->dev, "too many transfers\n"); | |
207 | return -EINVAL; | |
208 | } | |
209 | x[n] = xfer; | |
210 | n++; | |
211 | } | |
212 | ||
213 | if (!x[0]->tx_buf || x[0]->len != 2) | |
214 | goto bad_req; | |
215 | if (n == 1) { | |
216 | if (x[0]->rx_buf) { | |
217 | dev_dbg(prv->dev, "read 1\n"); | |
218 | } else { | |
219 | dev_dbg(prv->dev, "write 2\n"); | |
220 | } | |
221 | } else { | |
222 | if (x[0]->rx_buf) { | |
223 | if (x[1]->tx_buf || !x[1]->rx_buf) | |
224 | goto bad_req; | |
225 | dev_dbg(prv->dev, "read 1+\n"); | |
226 | } else { | |
227 | if (!x[1]->tx_buf ||x[1]->rx_buf) | |
228 | goto bad_req; | |
229 | dev_dbg(prv->dev, "write 2+n\n"); | |
230 | } | |
231 | } | |
197 | msg->actual_length = 0; | |
232 | 198 | |
233 | 199 | writel(nSEL, PDDATC); |
234 | 200 | list_for_each_entry(xfer, &msg->transfers, transfer_list) { |
... | ... | |
237 | 203 | |
238 | 204 | tx = xfer->tx_buf; |
239 | 205 | rx = xfer->rx_buf; |
206 | msg->actual_length += xfer->len; | |
207 | ||
240 | 208 | if (!tx) |
241 | 209 | rx_only(prv, rx, xfer->len); |
242 | 210 | else if (!rx) |
... | ... | |
247 | 215 | writel(nSEL, PDDATS); |
248 | 216 | |
249 | 217 | msg->status = 0; |
250 | msg->actual_length = x[0]->len+(n == 2 ? x[1]->len : 0); | |
251 | 218 | msg->complete(msg->context); |
252 | 219 | |
253 | 220 | return 0; |
254 | ||
255 | bad_req: | |
256 | dev_err(prv->dev, "unrecognized request:\n"); | |
257 | list_for_each_entry(xfer, &msg->transfers, transfer_list) | |
258 | dev_err(prv->dev, "%stx %srx len %u\n", | |
259 | xfer->tx_buf ? "" : "!", xfer->rx_buf ? " " : "!", | |
260 | xfer->len); | |
261 | return -EINVAL; | |
262 | 221 | } |
263 | 222 | |
264 | 223 | static int atben_setup(struct spi_device *spi) |
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