hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/spi/spi-fsl-espi.c
....@@ -1,12 +1,8 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * Freescale eSPI controller driver.
34 *
45 * 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.
106 */
117 #include <linux/delay.h>
128 #include <linux/err.h>
....@@ -431,8 +427,7 @@
431427
432428 ret = fsl_espi_bufs(spi, trans);
433429
434
- if (trans->delay_usecs)
435
- udelay(trans->delay_usecs);
430
+ spi_transfer_delay_exec(trans);
436431
437432 return ret;
438433 }
....@@ -441,6 +436,7 @@
441436 struct spi_message *m)
442437 {
443438 unsigned int delay_usecs = 0, rx_nbits = 0;
439
+ unsigned int delay_nsecs = 0, delay_nsecs1 = 0;
444440 struct spi_transfer *t, trans = {};
445441 int ret;
446442
....@@ -449,8 +445,16 @@
449445 goto out;
450446
451447 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
+ }
454458 if (t->rx_nbits > rx_nbits)
455459 rx_nbits = t->rx_nbits;
456460 }
....@@ -461,7 +465,8 @@
461465 trans.len = m->frame_length;
462466 trans.speed_hz = t->speed_hz;
463467 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;
465470 trans.rx_nbits = rx_nbits;
466471
467472 if (trans.len)
....@@ -726,7 +731,7 @@
726731 if (ret < 0)
727732 goto err_pm;
728733
729
- dev_info(dev, "at 0x%p (irq = %u)\n", espi->reg_base, irq);
734
+ dev_info(dev, "irq = %u\n", irq);
730735
731736 pm_runtime_mark_last_busy(dev);
732737 pm_runtime_put_autosuspend(dev);
....@@ -799,10 +804,8 @@
799804 int ret;
800805
801806 ret = spi_master_suspend(master);
802
- if (ret) {
803
- dev_warn(dev, "cannot suspend master\n");
807
+ if (ret)
804808 return ret;
805
- }
806809
807810 return pm_runtime_force_suspend(dev);
808811 }