12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- Implement the SPI-GPIO delay function for busses that need speed limitation.
- --mb
- --- a/drivers/spi/spi-gpio.c
- +++ b/drivers/spi/spi-gpio.c
- @@ -21,6 +21,7 @@
- #include <linux/module.h>
- #include <linux/platform_device.h>
- #include <linux/gpio.h>
- +#include <linux/delay.h>
- #include <linux/of.h>
- #include <linux/of_device.h>
- #include <linux/of_gpio.h>
- @@ -73,6 +74,7 @@ struct spi_gpio {
- * #define SPI_MOSI_GPIO 120
- * #define SPI_SCK_GPIO 121
- * #define SPI_N_CHIPSEL 4
- + * #undef NEED_SPIDELAY
- * #include "spi-gpio.c"
- */
-
- @@ -80,6 +82,7 @@ struct spi_gpio {
- #define DRIVER_NAME "spi_gpio"
-
- #define GENERIC_BITBANG /* vs tight inlines */
- +#define NEED_SPIDELAY 1
-
- /* all functions referencing these symbols must define pdata */
- #define SPI_MISO_GPIO ((pdata)->miso)
- @@ -130,12 +133,20 @@ static inline int getmiso(const struct s
- #undef pdata
-
- /*
- - * NOTE: this clocks "as fast as we can". It "should" be a function of the
- - * requested device clock. Software overhead means we usually have trouble
- - * reaching even one Mbit/sec (except when we can inline bitops), so for now
- - * we'll just assume we never need additional per-bit slowdowns.
- + * NOTE: to clock "as fast as we can", set spi_device.max_speed_hz
- + * and spi_transfer.speed_hz to 0.
- + * Otherwise this is a function of the requested device clock.
- + * Software overhead means we usually have trouble
- + * reaching even one Mbit/sec (except when we can inline bitops). So on small
- + * embedded devices with fast SPI slaves you usually don't need a delay.
- */
- -#define spidelay(nsecs) do {} while (0)
- +static inline void spidelay(unsigned nsecs)
- +{
- +#ifdef NEED_SPIDELAY
- + if (unlikely(nsecs))
- + ndelay(nsecs);
- +#endif /* NEED_SPIDELAY */
- +}
-
- #include "spi-bitbang-txrx.h"
-
|