mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-12-26 03:07:41 +02:00
spi-gpio: Implement spidelay for busses that need it.
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@14525 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
8fa8c599e9
commit
965d3c6198
@ -0,0 +1,60 @@
|
|||||||
|
Implement the SPI-GPIO delay function for busses that need speed limitation.
|
||||||
|
|
||||||
|
--mb
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Index: linux-2.6.28.5/drivers/spi/spi_gpio.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.28.5.orig/drivers/spi/spi_gpio.c 2009-02-15 18:53:47.000000000 +0100
|
||||||
|
+++ linux-2.6.28.5/drivers/spi/spi_gpio.c 2009-02-15 19:08:58.000000000 +0100
|
||||||
|
@@ -21,6 +21,7 @@
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
|
+#include <linux/delay.h>
|
||||||
|
|
||||||
|
#include <linux/spi/spi.h>
|
||||||
|
#include <linux/spi/spi_bitbang.h>
|
||||||
|
@@ -69,6 +70,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"
|
||||||
|
*/
|
||||||
|
|
||||||
|
@@ -76,6 +78,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)
|
||||||
|
@@ -120,12 +123,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 */
|
||||||
|
+}
|
||||||
|
|
||||||
|
#define EXPAND_BITBANG_TXRX
|
||||||
|
#include <linux/spi/spi_bitbang.h>
|
Loading…
Reference in New Issue
Block a user