436
437
if (drv_data->rx) {
437
438
dev_dbg(&drv_data->pdev->dev, "last read\n");
439
*(u16 *) (drv_data->rx) = read_RDBR(drv_data);
440
else if (n_bytes == 1)
441
*(u8 *) (drv_data->rx) = read_RDBR(drv_data);
440
u16 *buf = (u16 *)drv_data->rx;
441
for (loop = 0; loop < n_bytes / 2; loop++)
442
*buf++ = read_RDBR(drv_data);
444
u8 *buf = (u8 *)drv_data->rx;
445
for (loop = 0; loop < n_bytes; loop++)
446
*buf++ = read_RDBR(drv_data);
442
448
drv_data->rx += n_bytes;
458
464
if (drv_data->rx && drv_data->tx) {
460
466
dev_dbg(&drv_data->pdev->dev, "duplex: write_TDBR\n");
461
if (drv_data->n_bytes == 2) {
462
*(u16 *) (drv_data->rx) = read_RDBR(drv_data);
463
write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
464
} else if (drv_data->n_bytes == 1) {
465
*(u8 *) (drv_data->rx) = read_RDBR(drv_data);
466
write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
468
u16 *buf = (u16 *)drv_data->rx;
469
u16 *buf2 = (u16 *)drv_data->tx;
470
for (loop = 0; loop < n_bytes / 2; loop++) {
471
*buf++ = read_RDBR(drv_data);
472
write_TDBR(drv_data, *buf2++);
475
u8 *buf = (u8 *)drv_data->rx;
476
u8 *buf2 = (u8 *)drv_data->tx;
477
for (loop = 0; loop < n_bytes; loop++) {
478
*buf++ = read_RDBR(drv_data);
479
write_TDBR(drv_data, *buf2++);
468
482
} else if (drv_data->rx) {
470
484
dev_dbg(&drv_data->pdev->dev, "read: write_TDBR\n");
471
if (drv_data->n_bytes == 2)
472
*(u16 *) (drv_data->rx) = read_RDBR(drv_data);
473
else if (drv_data->n_bytes == 1)
474
*(u8 *) (drv_data->rx) = read_RDBR(drv_data);
475
write_TDBR(drv_data, chip->idle_tx_val);
486
u16 *buf = (u16 *)drv_data->rx;
487
for (loop = 0; loop < n_bytes / 2; loop++) {
488
*buf++ = read_RDBR(drv_data);
489
write_TDBR(drv_data, chip->idle_tx_val);
492
u8 *buf = (u8 *)drv_data->rx;
493
for (loop = 0; loop < n_bytes; loop++) {
494
*buf++ = read_RDBR(drv_data);
495
write_TDBR(drv_data, chip->idle_tx_val);
476
498
} else if (drv_data->tx) {
478
500
dev_dbg(&drv_data->pdev->dev, "write: write_TDBR\n");
479
bfin_spi_dummy_read(drv_data);
480
if (drv_data->n_bytes == 2)
481
write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
482
else if (drv_data->n_bytes == 1)
483
write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
502
u16 *buf = (u16 *)drv_data->tx;
503
for (loop = 0; loop < n_bytes / 2; loop++) {
505
write_TDBR(drv_data, *buf++);
508
u8 *buf = (u8 *)drv_data->tx;
509
for (loop = 0; loop < n_bytes; loop++) {
511
write_TDBR(drv_data, *buf++);
486
516
if (drv_data->tx)
650
681
drv_data->cs_change = transfer->cs_change;
652
683
/* Bits per word setup */
653
bits_per_word = transfer->bits_per_word ? : message->spi->bits_per_word;
654
if (bits_per_word == 8) {
655
drv_data->n_bytes = 1;
684
bits_per_word = transfer->bits_per_word ? :
685
message->spi->bits_per_word ? : 8;
686
if (bits_per_word % 16 == 0) {
687
drv_data->n_bytes = bits_per_word/8;
688
drv_data->len = (transfer->len) >> 1;
689
cr_width = BIT_CTL_WORDSIZE;
690
drv_data->ops = &bfin_bfin_spi_transfer_ops_u16;
691
} else if (bits_per_word % 8 == 0) {
692
drv_data->n_bytes = bits_per_word/8;
656
693
drv_data->len = transfer->len;
658
695
drv_data->ops = &bfin_bfin_spi_transfer_ops_u8;
659
} else if (bits_per_word == 16) {
660
drv_data->n_bytes = 2;
661
drv_data->len = (transfer->len) >> 1;
662
cr_width = BIT_CTL_WORDSIZE;
663
drv_data->ops = &bfin_bfin_spi_transfer_ops_u16;
665
697
dev_err(&drv_data->pdev->dev, "transfer: unsupported bits_per_word\n");
666
698
message->status = -EINVAL;
815
847
if (drv_data->tx == NULL)
816
848
write_TDBR(drv_data, chip->idle_tx_val);
818
if (bits_per_word == 8)
819
write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
821
write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
851
if (bits_per_word % 16 == 0) {
852
u16 *buf = (u16 *)drv_data->tx;
853
for (loop = 0; loop < bits_per_word / 16;
855
write_TDBR(drv_data, *buf++);
857
} else if (bits_per_word % 8 == 0) {
858
u8 *buf = (u8 *)drv_data->tx;
859
for (loop = 0; loop < bits_per_word / 8; loop++)
860
write_TDBR(drv_data, *buf++);
822
863
drv_data->tx += drv_data->n_bytes;
1244
1285
* friends on every SPI message. Do this instead
1246
1287
drv_data->running = false;
1247
while (!list_empty(&drv_data->queue) && drv_data->busy && limit--) {
1288
while ((!list_empty(&drv_data->queue) || drv_data->busy) && limit--) {
1248
1289
spin_unlock_irqrestore(&drv_data->lock, flags);
1250
1291
spin_lock_irqsave(&drv_data->lock, flags);