.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /* |
---|
2 | 3 | * Freescale eSPI controller driver. |
---|
3 | 4 | * |
---|
4 | 5 | * Copyright 2010 Freescale Semiconductor, Inc. |
---|
5 | | - * |
---|
6 | | - * This program is free software; you can redistribute it and/or modify it |
---|
7 | | - * under the terms of the GNU General Public License as published by the |
---|
8 | | - * Free Software Foundation; either version 2 of the License, or (at your |
---|
9 | | - * option) any later version. |
---|
10 | 6 | */ |
---|
11 | 7 | #include <linux/delay.h> |
---|
12 | 8 | #include <linux/err.h> |
---|
.. | .. |
---|
431 | 427 | |
---|
432 | 428 | ret = fsl_espi_bufs(spi, trans); |
---|
433 | 429 | |
---|
434 | | - if (trans->delay_usecs) |
---|
435 | | - udelay(trans->delay_usecs); |
---|
| 430 | + spi_transfer_delay_exec(trans); |
---|
436 | 431 | |
---|
437 | 432 | return ret; |
---|
438 | 433 | } |
---|
.. | .. |
---|
441 | 436 | struct spi_message *m) |
---|
442 | 437 | { |
---|
443 | 438 | unsigned int delay_usecs = 0, rx_nbits = 0; |
---|
| 439 | + unsigned int delay_nsecs = 0, delay_nsecs1 = 0; |
---|
444 | 440 | struct spi_transfer *t, trans = {}; |
---|
445 | 441 | int ret; |
---|
446 | 442 | |
---|
.. | .. |
---|
449 | 445 | goto out; |
---|
450 | 446 | |
---|
451 | 447 | list_for_each_entry(t, &m->transfers, transfer_list) { |
---|
452 | | - if (t->delay_usecs > delay_usecs) |
---|
453 | | - delay_usecs = t->delay_usecs; |
---|
| 448 | + if (t->delay_usecs) { |
---|
| 449 | + if (t->delay_usecs > delay_usecs) { |
---|
| 450 | + delay_usecs = t->delay_usecs; |
---|
| 451 | + delay_nsecs = delay_usecs * 1000; |
---|
| 452 | + } |
---|
| 453 | + } else { |
---|
| 454 | + delay_nsecs1 = spi_delay_to_ns(&t->delay, t); |
---|
| 455 | + if (delay_nsecs1 > delay_nsecs) |
---|
| 456 | + delay_nsecs = delay_nsecs1; |
---|
| 457 | + } |
---|
454 | 458 | if (t->rx_nbits > rx_nbits) |
---|
455 | 459 | rx_nbits = t->rx_nbits; |
---|
456 | 460 | } |
---|
.. | .. |
---|
461 | 465 | trans.len = m->frame_length; |
---|
462 | 466 | trans.speed_hz = t->speed_hz; |
---|
463 | 467 | trans.bits_per_word = t->bits_per_word; |
---|
464 | | - trans.delay_usecs = delay_usecs; |
---|
| 468 | + trans.delay.value = delay_nsecs; |
---|
| 469 | + trans.delay.unit = SPI_DELAY_UNIT_NSECS; |
---|
465 | 470 | trans.rx_nbits = rx_nbits; |
---|
466 | 471 | |
---|
467 | 472 | if (trans.len) |
---|
.. | .. |
---|
726 | 731 | if (ret < 0) |
---|
727 | 732 | goto err_pm; |
---|
728 | 733 | |
---|
729 | | - dev_info(dev, "at 0x%p (irq = %u)\n", espi->reg_base, irq); |
---|
| 734 | + dev_info(dev, "irq = %u\n", irq); |
---|
730 | 735 | |
---|
731 | 736 | pm_runtime_mark_last_busy(dev); |
---|
732 | 737 | pm_runtime_put_autosuspend(dev); |
---|
.. | .. |
---|
799 | 804 | int ret; |
---|
800 | 805 | |
---|
801 | 806 | ret = spi_master_suspend(master); |
---|
802 | | - if (ret) { |
---|
803 | | - dev_warn(dev, "cannot suspend master\n"); |
---|
| 807 | + if (ret) |
---|
804 | 808 | return ret; |
---|
805 | | - } |
---|
806 | 809 | |
---|
807 | 810 | return pm_runtime_force_suspend(dev); |
---|
808 | 811 | } |
---|