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
188188{
189189    struct atben_prv *prv = spi_master_get_devdata(spi->master);
190190    struct spi_transfer *xfer;
191    struct spi_transfer *x[2];
192    int n;
193191
194192     if (unlikely(list_empty(&msg->transfers))) {
195193        dev_err(prv->dev, "transfer is empty\n");
196194        return -EINVAL;
197195    }
198196
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;
232198
233199    writel(nSEL, PDDATC);
234200    list_for_each_entry(xfer, &msg->transfers, transfer_list) {
...... 
237203
238204        tx = xfer->tx_buf;
239205        rx = xfer->rx_buf;
206        msg->actual_length += xfer->len;
207
240208        if (!tx)
241209            rx_only(prv, rx, xfer->len);
242210        else if (!rx)
...... 
247215    writel(nSEL, PDDATS);
248216
249217    msg->status = 0;
250    msg->actual_length = x[0]->len+(n == 2 ? x[1]->len : 0);
251218    msg->complete(msg->context);
252219
253220    return 0;
254
255bad_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;
262221}
263222
264223static int atben_setup(struct spi_device *spi)

Archive Download the corresponding diff file



interactive