mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-12-25 15:35:30 +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