m68knommu: refactor Coldfire GPIO not to require GPIOLIB, eliminate mcf_gpio_chips.
authorSteven King <sfking@fdwdc.com>
Mon, 21 May 2012 20:10:19 +0000 (13:10 -0700)
committerGreg Ungerer <gerg@uclinux.org>
Sun, 15 Jul 2012 23:59:21 +0000 (09:59 +1000)
If we're not connecting external GPIO extenders via i2c or spi or whatever, we
probably don't need GPIOLIB.  If we provide an alternate implementation of
the GPIOLIB functions to use when only on-chip GPIO is needed, we can change
ARCH_REQUIRE_GPIOLIB to ARCH_WANTS_OPTIONAL_GPIOLIB so that GPIOLIB becomes
optional.

The downside is that in the GPIOLIB=n case, we lose all error checking done by
gpiolib, ie multiply allocating the gpio, free'ing gpio etc., so that the
only checking that can be done is if we reference a gpio on an external part.
Targets that need the extra error checking can still select GPIOLIB=y.

For the case where GPIOLIB=y, we can simplify the table of gpio chips to use a
single chip, eliminating the tables of chips in the 5xxx.c files.  The
original motivation for the definition of multiple chips was to match the way
many of the Coldfire variants defined their gpio as a spare array in memory.
However, all this really gains us is some error checking when we request a
gpio, gpiolib can check that it doesn't fall in one of the holes.  If thats
important, I think we can still come up with a better way of accomplishing
that.

Also in this patch is some general cleanup and reorganizing of the gpio header
files (I'm sure I must have had a reason why I sometimes used a prefix of
mcf_gpio and other times mcfgpio but for the life of me I can't think of it
now).

Signed-off-by: Steven King <sfking@fdwdc.com>
Signed-off-by: Greg Ungerer <gerg@uclinux.org>
18 files changed:
arch/m68k/Kconfig.cpu
arch/m68k/include/asm/gpio.h
arch/m68k/include/asm/mcfgpio.h
arch/m68k/include/asm/pinmux.h [deleted file]
arch/m68k/platform/coldfire/Makefile
arch/m68k/platform/coldfire/gpio.c
arch/m68k/platform/coldfire/m5206.c
arch/m68k/platform/coldfire/m520x.c
arch/m68k/platform/coldfire/m523x.c
arch/m68k/platform/coldfire/m5249.c
arch/m68k/platform/coldfire/m5272.c
arch/m68k/platform/coldfire/m527x.c
arch/m68k/platform/coldfire/m528x.c
arch/m68k/platform/coldfire/m5307.c
arch/m68k/platform/coldfire/m532x.c
arch/m68k/platform/coldfire/m5407.c
arch/m68k/platform/coldfire/m54xx.c
arch/m68k/platform/coldfire/pinmux.c [deleted file]

index 2b53254ad994abad15b6f8e3a047aaecbd6a0694..ff2314d5d934f375478da7c3bb37f0df28b0c653 100644 (file)
@@ -23,7 +23,7 @@ config M68KCLASSIC
 config COLDFIRE
        bool "Coldfire CPU family support"
        select GENERIC_GPIO
-       select ARCH_REQUIRE_GPIOLIB
+       select ARCH_WANT_OPTIONAL_GPIOLIB
        select ARCH_HAVE_CUSTOM_GPIO_H
        select CPU_HAS_NO_BITFIELDS
        select CPU_HAS_NO_MULDIV64
index 00d0071de4c3a83e613755e0b314b28a48007a4c..530862207ecf77f43e2d96af72e2cf075f12688e 100644 (file)
 #define coldfire_gpio_h
 
 #include <linux/io.h>
-#include <asm-generic/gpio.h>
 #include <asm/coldfire.h>
 #include <asm/mcfsim.h>
-
-/*
- * The Freescale Coldfire family is quite varied in how they implement GPIO.
- * Some parts have 8 bit ports, some have 16bit and some have 32bit; some have
- * only one port, others have multiple ports; some have a single data latch
- * for both input and output, others have a separate pin data register to read
- * input; some require a read-modify-write access to change an output, others
- * have set and clear registers for some of the outputs; Some have all the
- * GPIOs in a single control area, others have some GPIOs implemented in
- * different modules.
- *
- * This implementation attempts accommodate the differences while presenting
- * a generic interface that will optimize to as few instructions as possible.
- */
-#if defined(CONFIG_M5206) || defined(CONFIG_M5206e) || \
-    defined(CONFIG_M520x) || defined(CONFIG_M523x) || \
-    defined(CONFIG_M527x) || defined(CONFIG_M528x) || \
-    defined(CONFIG_M532x) || defined(CONFIG_M54xx)
-
-/* These parts have GPIO organized by 8 bit ports */
-
-#define MCFGPIO_PORTTYPE               u8
-#define MCFGPIO_PORTSIZE               8
-#define mcfgpio_read(port)             __raw_readb(port)
-#define mcfgpio_write(data, port)      __raw_writeb(data, port)
-
-#elif defined(CONFIG_M5307) || defined(CONFIG_M5407) || defined(CONFIG_M5272)
-
-/* These parts have GPIO organized by 16 bit ports */
-
-#define MCFGPIO_PORTTYPE               u16
-#define MCFGPIO_PORTSIZE               16
-#define mcfgpio_read(port)             __raw_readw(port)
-#define mcfgpio_write(data, port)      __raw_writew(data, port)
-
-#elif defined(CONFIG_M5249)
-
-/* These parts have GPIO organized by 32 bit ports */
-
-#define MCFGPIO_PORTTYPE               u32
-#define MCFGPIO_PORTSIZE               32
-#define mcfgpio_read(port)             __raw_readl(port)
-#define mcfgpio_write(data, port)      __raw_writel(data, port)
-
-#endif
-
-#define mcfgpio_bit(gpio)              (1 << ((gpio) %  MCFGPIO_PORTSIZE))
-#define mcfgpio_port(gpio)             ((gpio) / MCFGPIO_PORTSIZE)
-
-#if defined(CONFIG_M520x) || defined(CONFIG_M523x) || \
-    defined(CONFIG_M527x) || defined(CONFIG_M528x) || defined(CONFIG_M532x)
-/*
- * These parts have an 'Edge' Port module (external interrupt/GPIO) which uses
- * read-modify-write to change an output and a GPIO module which has separate
- * set/clr registers to directly change outputs with a single write access.
- */
-#if defined(CONFIG_M528x)
-/*
- * The 528x also has GPIOs in other modules (GPT, QADC) which use
- * read-modify-write as well as those controlled by the EPORT and GPIO modules.
- */
-#define MCFGPIO_SCR_START              40
-#else
-#define MCFGPIO_SCR_START              8
-#endif
-
-#define MCFGPIO_SETR_PORT(gpio)                (MCFGPIO_SETR + \
-                                       mcfgpio_port(gpio - MCFGPIO_SCR_START))
-
-#define MCFGPIO_CLRR_PORT(gpio)                (MCFGPIO_CLRR + \
-                                       mcfgpio_port(gpio - MCFGPIO_SCR_START))
-#else
-
-#define MCFGPIO_SCR_START              MCFGPIO_PIN_MAX
-/* with MCFGPIO_SCR == MCFGPIO_PIN_MAX, these will be optimized away */
-#define MCFGPIO_SETR_PORT(gpio)                0
-#define MCFGPIO_CLRR_PORT(gpio)                0
-
-#endif
-/*
- * Coldfire specific helper functions
- */
-
-/* return the port pin data register for a gpio */
-static inline u32 __mcf_gpio_ppdr(unsigned gpio)
-{
-#if defined(CONFIG_M5206) || defined(CONFIG_M5206e) || \
-    defined(CONFIG_M5307) || defined(CONFIG_M5407)
-       return MCFSIM_PADAT;
-#elif defined(CONFIG_M5272)
-       if (gpio < 16)
-               return MCFSIM_PADAT;
-       else if (gpio < 32)
-               return MCFSIM_PBDAT;
-       else
-               return MCFSIM_PCDAT;
-#elif defined(CONFIG_M5249)
-       if (gpio < 32)
-               return MCFSIM2_GPIOREAD;
-       else
-               return MCFSIM2_GPIO1READ;
-#elif defined(CONFIG_M520x) || defined(CONFIG_M523x) || \
-      defined(CONFIG_M527x) || defined(CONFIG_M528x) || defined(CONFIG_M532x)
-       if (gpio < 8)
-               return MCFEPORT_EPPDR;
-#if defined(CONFIG_M528x)
-       else if (gpio < 16)
-               return MCFGPTA_GPTPORT;
-       else if (gpio < 24)
-               return MCFGPTB_GPTPORT;
-       else if (gpio < 32)
-               return MCFQADC_PORTQA;
-       else if (gpio < 40)
-               return MCFQADC_PORTQB;
-#endif
-       else
-               return MCFGPIO_PPDR + mcfgpio_port(gpio - MCFGPIO_SCR_START);
-#else
-       return 0;
-#endif
-}
-
-/* return the port output data register for a gpio */
-static inline u32 __mcf_gpio_podr(unsigned gpio)
-{
-#if defined(CONFIG_M5206) || defined(CONFIG_M5206e) || \
-    defined(CONFIG_M5307) || defined(CONFIG_M5407)
-       return MCFSIM_PADAT;
-#elif defined(CONFIG_M5272)
-       if (gpio < 16)
-               return MCFSIM_PADAT;
-       else if (gpio < 32)
-               return MCFSIM_PBDAT;
-       else
-               return MCFSIM_PCDAT;
-#elif defined(CONFIG_M5249)
-       if (gpio < 32)
-               return MCFSIM2_GPIOWRITE;
-       else
-               return MCFSIM2_GPIO1WRITE;
-#elif defined(CONFIG_M520x) || defined(CONFIG_M523x) || \
-      defined(CONFIG_M527x) || defined(CONFIG_M528x) || defined(CONFIG_M532x)
-       if (gpio < 8)
-               return MCFEPORT_EPDR;
-#if defined(CONFIG_M528x)
-       else if (gpio < 16)
-               return MCFGPTA_GPTPORT;
-       else if (gpio < 24)
-               return MCFGPTB_GPTPORT;
-       else if (gpio < 32)
-               return MCFQADC_PORTQA;
-       else if (gpio < 40)
-               return MCFQADC_PORTQB;
-#endif
-       else
-               return MCFGPIO_PODR + mcfgpio_port(gpio - MCFGPIO_SCR_START);
-#else
-       return 0;
-#endif
-}
-
+#include <asm/mcfgpio.h>
 /*
  * The Generic GPIO functions
  *
@@ -191,7 +30,7 @@ static inline u32 __mcf_gpio_podr(unsigned gpio)
 static inline int gpio_get_value(unsigned gpio)
 {
        if (__builtin_constant_p(gpio) && gpio < MCFGPIO_PIN_MAX)
-               return mcfgpio_read(__mcf_gpio_ppdr(gpio)) & mcfgpio_bit(gpio);
+               return mcfgpio_read(__mcfgpio_ppdr(gpio)) & mcfgpio_bit(gpio);
        else
                return __gpio_get_value(gpio);
 }
@@ -204,12 +43,12 @@ static inline void gpio_set_value(unsigned gpio, int value)
                        MCFGPIO_PORTTYPE data;
 
                        local_irq_save(flags);
-                       data = mcfgpio_read(__mcf_gpio_podr(gpio));
+                       data = mcfgpio_read(__mcfgpio_podr(gpio));
                        if (value)
                                data |= mcfgpio_bit(gpio);
                        else
                                data &= ~mcfgpio_bit(gpio);
-                       mcfgpio_write(data, __mcf_gpio_podr(gpio));
+                       mcfgpio_write(data, __mcfgpio_podr(gpio));
                        local_irq_restore(flags);
                } else {
                        if (value)
index fe468eaa51e07a8f25094f37a328efc45fa2def1..67ba20ffedbe45615704e54d5e7990b9c7c3c0ee 100644 (file)
 #ifndef mcfgpio_h
 #define mcfgpio_h
 
-#include <linux/io.h>
+#ifdef CONFIG_GPIOLIB
 #include <asm-generic/gpio.h>
+#else
+
+int __mcfgpio_get_value(unsigned gpio);
+void __mcfgpio_set_value(unsigned gpio, int value);
+int __mcfgpio_direction_input(unsigned gpio);
+int __mcfgpio_direction_output(unsigned gpio, int value);
+int __mcfgpio_request(unsigned gpio);
+void __mcfgpio_free(unsigned gpio);
+
+/* our alternate 'gpiolib' functions */
+static inline int __gpio_get_value(unsigned gpio)
+{
+       if (gpio < MCFGPIO_PIN_MAX)
+               return __mcfgpio_get_value(gpio);
+       else
+               return -EINVAL;
+}
+
+static inline void __gpio_set_value(unsigned gpio, int value)
+{
+       if (gpio < MCFGPIO_PIN_MAX)
+               __mcfgpio_set_value(gpio, value);
+}
+
+static inline int __gpio_cansleep(unsigned gpio)
+{
+       if (gpio < MCFGPIO_PIN_MAX)
+               return 0;
+       else
+               return -EINVAL;
+}
+
+static inline int __gpio_to_irq(unsigned gpio)
+{
+       return -EINVAL;
+}
+
+static inline int gpio_direction_input(unsigned gpio)
+{
+       if (gpio < MCFGPIO_PIN_MAX)
+               return __mcfgpio_direction_input(gpio);
+       else
+               return -EINVAL;
+}
+
+static inline int gpio_direction_output(unsigned gpio, int value)
+{
+       if (gpio < MCFGPIO_PIN_MAX)
+               return __mcfgpio_direction_output(gpio, value);
+       else
+               return -EINVAL;
+}
+
+static inline int gpio_request(unsigned gpio, const char *label)
+{
+       if (gpio < MCFGPIO_PIN_MAX)
+               return __mcfgpio_request(gpio);
+       else
+               return -EINVAL;
+}
+
+static inline void gpio_free(unsigned gpio)
+{
+       if (gpio < MCFGPIO_PIN_MAX)
+               __mcfgpio_free(gpio);
+}
+
+#endif /* CONFIG_GPIOLIB */
 
-struct mcf_gpio_chip {
-       struct gpio_chip gpio_chip;
-       void __iomem *pddr;
-       void __iomem *podr;
-       void __iomem *ppdr;
-       void __iomem *setr;
-       void __iomem *clrr;
-       const u8 *gpio_to_pinmux;
-};
-
-extern struct mcf_gpio_chip mcf_gpio_chips[];
-extern unsigned int mcf_gpio_chips_size;
-
-int mcf_gpio_direction_input(struct gpio_chip *, unsigned);
-int mcf_gpio_get_value(struct gpio_chip *, unsigned);
-int mcf_gpio_direction_output(struct gpio_chip *, unsigned, int);
-void mcf_gpio_set_value(struct gpio_chip *, unsigned, int);
-void mcf_gpio_set_value_fast(struct gpio_chip *, unsigned, int);
-int mcf_gpio_request(struct gpio_chip *, unsigned);
-void mcf_gpio_free(struct gpio_chip *, unsigned);
 
 /*
- *     Define macros to ease the pain of setting up the GPIO tables. There
- *     are two cases we need to deal with here, they cover all currently
- *     available ColdFire GPIO hardware. There are of course minor differences
- *     in the layout and number of bits in each ColdFire part, but the macros
- *     take all that in.
+ * The Freescale Coldfire family is quite varied in how they implement GPIO.
+ * Some parts have 8 bit ports, some have 16bit and some have 32bit; some have
+ * only one port, others have multiple ports; some have a single data latch
+ * for both input and output, others have a separate pin data register to read
+ * input; some require a read-modify-write access to change an output, others
+ * have set and clear registers for some of the outputs; Some have all the
+ * GPIOs in a single control area, others have some GPIOs implemented in
+ * different modules.
  *
- *     Firstly is the conventional GPIO registers where we toggle individual
- *     bits in a register, preserving the other bits in the register. For
- *     lack of a better term I have called this the slow method.
+ * This implementation attempts accommodate the differences while presenting
+ * a generic interface that will optimize to as few instructions as possible.
  */
-#define        MCFGPS(mlabel, mbase, mngpio, mpddr, mpodr, mppdr)                  \
-       {                                                                   \
-               .gpio_chip                      = {                         \
-                       .label                  = #mlabel,                  \
-                       .request                = mcf_gpio_request,         \
-                       .free                   = mcf_gpio_free,            \
-                       .direction_input        = mcf_gpio_direction_input, \
-                       .direction_output       = mcf_gpio_direction_output,\
-                       .get                    = mcf_gpio_get_value,       \
-                       .set                    = mcf_gpio_set_value,       \
-                       .base                   = mbase,                    \
-                       .ngpio                  = mngpio,                   \
-               },                                                          \
-               .pddr           = (void __iomem *) mpddr,                   \
-               .podr           = (void __iomem *) mpodr,                   \
-               .ppdr           = (void __iomem *) mppdr,                   \
-       }
+#if defined(CONFIG_M5206) || defined(CONFIG_M5206e) || \
+    defined(CONFIG_M520x) || defined(CONFIG_M523x) || \
+    defined(CONFIG_M527x) || defined(CONFIG_M528x) || \
+    defined(CONFIG_M532x) || defined(CONFIG_M54xx)
+
+/* These parts have GPIO organized by 8 bit ports */
+
+#define MCFGPIO_PORTTYPE               u8
+#define MCFGPIO_PORTSIZE               8
+#define mcfgpio_read(port)             __raw_readb(port)
+#define mcfgpio_write(data, port)      __raw_writeb(data, port)
+
+#elif defined(CONFIG_M5307) || defined(CONFIG_M5407) || defined(CONFIG_M5272)
+
+/* These parts have GPIO organized by 16 bit ports */
+
+#define MCFGPIO_PORTTYPE               u16
+#define MCFGPIO_PORTSIZE               16
+#define mcfgpio_read(port)             __raw_readw(port)
+#define mcfgpio_write(data, port)      __raw_writew(data, port)
+
+#elif defined(CONFIG_M5249)
+
+/* These parts have GPIO organized by 32 bit ports */
+
+#define MCFGPIO_PORTTYPE               u32
+#define MCFGPIO_PORTSIZE               32
+#define mcfgpio_read(port)             __raw_readl(port)
+#define mcfgpio_write(data, port)      __raw_writel(data, port)
+
+#endif
 
+#define mcfgpio_bit(gpio)              (1 << ((gpio) %  MCFGPIO_PORTSIZE))
+#define mcfgpio_port(gpio)             ((gpio) / MCFGPIO_PORTSIZE)
+
+#if defined(CONFIG_M520x) || defined(CONFIG_M523x) || \
+    defined(CONFIG_M527x) || defined(CONFIG_M528x) || defined(CONFIG_M532x)
+/*
+ * These parts have an 'Edge' Port module (external interrupt/GPIO) which uses
+ * read-modify-write to change an output and a GPIO module which has separate
+ * set/clr registers to directly change outputs with a single write access.
+ */
+#if defined(CONFIG_M528x)
 /*
- *     Secondly is the faster case, where we have set and clear registers
- *     that allow us to set or clear a bit with a single write, not having
- *     to worry about preserving other bits.
+ * The 528x also has GPIOs in other modules (GPT, QADC) which use
+ * read-modify-write as well as those controlled by the EPORT and GPIO modules.
  */
-#define        MCFGPF(mlabel, mbase, mngpio)                                       \
-       {                                                                   \
-               .gpio_chip                      = {                         \
-                       .label                  = #mlabel,                  \
-                       .request                = mcf_gpio_request,         \
-                       .free                   = mcf_gpio_free,            \
-                       .direction_input        = mcf_gpio_direction_input, \
-                       .direction_output       = mcf_gpio_direction_output,\
-                       .get                    = mcf_gpio_get_value,       \
-                       .set                    = mcf_gpio_set_value_fast,  \
-                       .base                   = mbase,                    \
-                       .ngpio                  = mngpio,                   \
-               },                                                          \
-               .pddr           = (void __iomem *) MCFGPIO_PDDR_##mlabel,   \
-               .podr           = (void __iomem *) MCFGPIO_PODR_##mlabel,   \
-               .ppdr           = (void __iomem *) MCFGPIO_PPDSDR_##mlabel, \
-               .setr           = (void __iomem *) MCFGPIO_PPDSDR_##mlabel, \
-               .clrr           = (void __iomem *) MCFGPIO_PCLRR_##mlabel,  \
-       }
+#define MCFGPIO_SCR_START              40
+#else
+#define MCFGPIO_SCR_START              8
+#endif
+
+#define MCFGPIO_SETR_PORT(gpio)                (MCFGPIO_SETR + \
+                                       mcfgpio_port(gpio - MCFGPIO_SCR_START))
+
+#define MCFGPIO_CLRR_PORT(gpio)                (MCFGPIO_CLRR + \
+                                       mcfgpio_port(gpio - MCFGPIO_SCR_START))
+#else
+
+#define MCFGPIO_SCR_START              MCFGPIO_PIN_MAX
+/* with MCFGPIO_SCR == MCFGPIO_PIN_MAX, these will be optimized away */
+#define MCFGPIO_SETR_PORT(gpio)                0
+#define MCFGPIO_CLRR_PORT(gpio)                0
 
 #endif
+/*
+ * Coldfire specific helper functions
+ */
+
+/* return the port pin data register for a gpio */
+static inline u32 __mcfgpio_ppdr(unsigned gpio)
+{
+#if defined(CONFIG_M5206) || defined(CONFIG_M5206e) || \
+    defined(CONFIG_M5307) || defined(CONFIG_M5407)
+       return MCFSIM_PADAT;
+#elif defined(CONFIG_M5272)
+       if (gpio < 16)
+               return MCFSIM_PADAT;
+       else if (gpio < 32)
+               return MCFSIM_PBDAT;
+       else
+               return MCFSIM_PCDAT;
+#elif defined(CONFIG_M5249)
+       if (gpio < 32)
+               return MCFSIM2_GPIOREAD;
+       else
+               return MCFSIM2_GPIO1READ;
+#elif defined(CONFIG_M520x) || defined(CONFIG_M523x) || \
+      defined(CONFIG_M527x) || defined(CONFIG_M528x) || defined(CONFIG_M532x)
+       if (gpio < 8)
+               return MCFEPORT_EPPDR;
+#if defined(CONFIG_M528x)
+       else if (gpio < 16)
+               return MCFGPTA_GPTPORT;
+       else if (gpio < 24)
+               return MCFGPTB_GPTPORT;
+       else if (gpio < 32)
+               return MCFQADC_PORTQA;
+       else if (gpio < 40)
+               return MCFQADC_PORTQB;
+#endif
+       else
+               return MCFGPIO_PPDR + mcfgpio_port(gpio - MCFGPIO_SCR_START);
+#else
+       return 0;
+#endif
+}
+
+/* return the port output data register for a gpio */
+static inline u32 __mcfgpio_podr(unsigned gpio)
+{
+#if defined(CONFIG_M5206) || defined(CONFIG_M5206e) || \
+    defined(CONFIG_M5307) || defined(CONFIG_M5407)
+       return MCFSIM_PADAT;
+#elif defined(CONFIG_M5272)
+       if (gpio < 16)
+               return MCFSIM_PADAT;
+       else if (gpio < 32)
+               return MCFSIM_PBDAT;
+       else
+               return MCFSIM_PCDAT;
+#elif defined(CONFIG_M5249)
+       if (gpio < 32)
+               return MCFSIM2_GPIOWRITE;
+       else
+               return MCFSIM2_GPIO1WRITE;
+#elif defined(CONFIG_M520x) || defined(CONFIG_M523x) || \
+      defined(CONFIG_M527x) || defined(CONFIG_M528x) || defined(CONFIG_M532x)
+       if (gpio < 8)
+               return MCFEPORT_EPDR;
+#if defined(CONFIG_M528x)
+       else if (gpio < 16)
+               return MCFGPTA_GPTPORT;
+       else if (gpio < 24)
+               return MCFGPTB_GPTPORT;
+       else if (gpio < 32)
+               return MCFQADC_PORTQA;
+       else if (gpio < 40)
+               return MCFQADC_PORTQB;
+#endif
+       else
+               return MCFGPIO_PODR + mcfgpio_port(gpio - MCFGPIO_SCR_START);
+#else
+       return 0;
+#endif
+}
+
+/* return the port direction data register for a gpio */
+static inline u32 __mcfgpio_pddr(unsigned gpio)
+{
+#if defined(CONFIG_M5206) || defined(CONFIG_M5206e) || \
+    defined(CONFIG_M5307) || defined(CONFIG_M5407)
+       return MCFSIM_PADDR;
+#elif defined(CONFIG_M5272)
+       if (gpio < 16)
+               return MCFSIM_PADDR;
+       else if (gpio < 32)
+               return MCFSIM_PBDDR;
+       else
+               return MCFSIM_PCDDR;
+#elif defined(CONFIG_M5249)
+       if (gpio < 32)
+               return MCFSIM2_GPIOENABLE;
+       else
+               return MCFSIM2_GPIO1ENABLE;
+#elif defined(CONFIG_M520x) || defined(CONFIG_M523x) || \
+      defined(CONFIG_M527x) || defined(CONFIG_M528x) || defined(CONFIG_M532x)
+       if (gpio < 8)
+               return MCFEPORT_EPDDR;
+#if defined(CONFIG_M528x)
+       else if (gpio < 16)
+               return MCFGPTA_GPTDDR;
+       else if (gpio < 24)
+               return MCFGPTB_GPTDDR;
+       else if (gpio < 32)
+               return MCFQADC_DDRQA;
+       else if (gpio < 40)
+               return MCFQADC_DDRQB;
+#endif
+       else
+               return MCFGPIO_PDDR + mcfgpio_port(gpio - MCFGPIO_SCR_START);
+#else
+       return 0;
+#endif
+}
+
+#endif /* mcfgpio_h */
diff --git a/arch/m68k/include/asm/pinmux.h b/arch/m68k/include/asm/pinmux.h
deleted file mode 100644 (file)
index 119ee68..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Coldfire generic GPIO pinmux support.
- *
- * (C) Copyright 2009, Steven King <sfking@fdwdc.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-
-#ifndef pinmux_h
-#define pinmux_h
-
-#define MCFPINMUX_NONE         -1
-
-extern int mcf_pinmux_request(unsigned, unsigned);
-extern void mcf_pinmux_release(unsigned, unsigned);
-
-static inline int mcf_pinmux_is_valid(unsigned pinmux)
-{
-       return pinmux != MCFPINMUX_NONE;
-}
-
-#endif
-
index 76d389d9a84ed029fcb07af668d00c490e600abd..69bc0ae2538d288e8e20b0f9bd908a6c02c777a2 100644 (file)
@@ -32,5 +32,5 @@ obj-$(CONFIG_NETtel)  += nettel.o
 obj-$(CONFIG_CLEOPATRA)        += nettel.o
 obj-$(CONFIG_FIREBEE)  += firebee.o
 
-obj-y                  += pinmux.o gpio.o
+obj-y                  += gpio.o
 extra-y := head.o
index 4c8c42450a4e0ea995c5571d190fc865fc5f7269..9cd2b5c70519a63c8614c5995b5876845bb9d9fc 100644 (file)
  */
 
 #include <linux/kernel.h>
+#include <linux/module.h>
 #include <linux/init.h>
 #include <linux/device.h>
 
-#include <asm/gpio.h>
-#include <asm/pinmux.h>
+#include <linux/io.h>
+#include <asm/coldfire.h>
+#include <asm/mcfsim.h>
 #include <asm/mcfgpio.h>
 
-#define MCF_CHIP(chip) container_of(chip, struct mcf_gpio_chip, gpio_chip)
+int __mcfgpio_get_value(unsigned gpio)
+{
+       return mcfgpio_read(__mcfgpio_ppdr(gpio)) & mcfgpio_bit(gpio);
+}
+EXPORT_SYMBOL(__mcfgpio_get_value);
+
+void __mcfgpio_set_value(unsigned gpio, int value)
+{
+       if (gpio < MCFGPIO_SCR_START) {
+               unsigned long flags;
+               MCFGPIO_PORTTYPE data;
+
+               local_irq_save(flags);
+               data = mcfgpio_read(__mcfgpio_podr(gpio));
+               if (value)
+                       data |= mcfgpio_bit(gpio);
+               else
+                       data &= ~mcfgpio_bit(gpio);
+               mcfgpio_write(data, __mcfgpio_podr(gpio));
+               local_irq_restore(flags);
+       } else {
+               if (value)
+                       mcfgpio_write(mcfgpio_bit(gpio),
+                                       MCFGPIO_SETR_PORT(gpio));
+               else
+                       mcfgpio_write(~mcfgpio_bit(gpio),
+                                       MCFGPIO_CLRR_PORT(gpio));
+       }
+}
+EXPORT_SYMBOL(__mcfgpio_set_value);
 
-int mcf_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
+int __mcfgpio_direction_input(unsigned gpio)
 {
        unsigned long flags;
        MCFGPIO_PORTTYPE dir;
-       struct mcf_gpio_chip *mcf_chip = MCF_CHIP(chip);
 
        local_irq_save(flags);
-       dir = mcfgpio_read(mcf_chip->pddr);
-       dir &= ~mcfgpio_bit(chip->base + offset);
-       mcfgpio_write(dir, mcf_chip->pddr);
+       dir = mcfgpio_read(__mcfgpio_pddr(gpio));
+       dir &= ~mcfgpio_bit(gpio);
+       mcfgpio_write(dir, __mcfgpio_pddr(gpio));
        local_irq_restore(flags);
 
        return 0;
 }
+EXPORT_SYMBOL(__mcfgpio_direction_input);
 
-int mcf_gpio_get_value(struct gpio_chip *chip, unsigned offset)
-{
-       struct mcf_gpio_chip *mcf_chip = MCF_CHIP(chip);
-
-       return mcfgpio_read(mcf_chip->ppdr) & mcfgpio_bit(chip->base + offset);
-}
-
-int mcf_gpio_direction_output(struct gpio_chip *chip, unsigned offset,
-               int value)
+int __mcfgpio_direction_output(unsigned gpio, int value)
 {
        unsigned long flags;
        MCFGPIO_PORTTYPE data;
-       struct mcf_gpio_chip *mcf_chip = MCF_CHIP(chip);
 
        local_irq_save(flags);
-       /* write the value to the output latch */
-       data = mcfgpio_read(mcf_chip->podr);
+       data = mcfgpio_read(__mcfgpio_pddr(gpio));
        if (value)
-               data |= mcfgpio_bit(chip->base + offset);
+               data |= mcfgpio_bit(gpio);
        else
-               data &= ~mcfgpio_bit(chip->base + offset);
-       mcfgpio_write(data, mcf_chip->podr);
-
-       /* now set the direction to output */
-       data = mcfgpio_read(mcf_chip->pddr);
-       data |= mcfgpio_bit(chip->base + offset);
-       mcfgpio_write(data, mcf_chip->pddr);
+               data &= mcfgpio_bit(gpio);
+       mcfgpio_write(data, __mcfgpio_pddr(gpio));
+
+       /* now set the data to output */
+       if (gpio < MCFGPIO_SCR_START) {
+               data = mcfgpio_read(__mcfgpio_podr(gpio));
+               if (value)
+                       data |= mcfgpio_bit(gpio);
+               else
+                       data &= ~mcfgpio_bit(gpio);
+               mcfgpio_write(data, __mcfgpio_podr(gpio));
+       } else {
+                if (value)
+                       mcfgpio_write(mcfgpio_bit(gpio),
+                                       MCFGPIO_SETR_PORT(gpio));
+                else
+                        mcfgpio_write(~mcfgpio_bit(gpio),
+                                        MCFGPIO_CLRR_PORT(gpio));
+       }
        local_irq_restore(flags);
+       return 0;
+}
+EXPORT_SYMBOL(__mcfgpio_direction_output);
 
+int __mcfgpio_request(unsigned gpio)
+{
        return 0;
 }
+EXPORT_SYMBOL(__mcfgpio_request);
 
-void mcf_gpio_set_value(struct gpio_chip *chip, unsigned offset, int value)
+void __mcfgpio_free(unsigned gpio)
 {
-       struct mcf_gpio_chip *mcf_chip = MCF_CHIP(chip);
+       __mcfgpio_direction_input(gpio);
+}
+EXPORT_SYMBOL(__mcfgpio_free);
 
-       unsigned long flags;
-       MCFGPIO_PORTTYPE data;
+#ifdef CONFIG_GPIOLIB
 
-       local_irq_save(flags);
-       data = mcfgpio_read(mcf_chip->podr);
-       if (value)
-               data |= mcfgpio_bit(chip->base + offset);
-       else
-               data &= ~mcfgpio_bit(chip->base + offset);
-       mcfgpio_write(data, mcf_chip->podr);
-       local_irq_restore(flags);
+int mcfgpio_direction_input(struct gpio_chip *chip, unsigned offset)
+{
+       return __mcfgpio_direction_input(offset);
 }
 
-void mcf_gpio_set_value_fast(struct gpio_chip *chip, unsigned offset, int value)
+int mcfgpio_get_value(struct gpio_chip *chip, unsigned offset)
 {
-       struct mcf_gpio_chip *mcf_chip = MCF_CHIP(chip);
-
-       if (value)
-               mcfgpio_write(mcfgpio_bit(chip->base + offset), mcf_chip->setr);
-       else
-               mcfgpio_write(~mcfgpio_bit(chip->base + offset), mcf_chip->clrr);
+       return __mcfgpio_get_value(offset);
 }
 
-int mcf_gpio_request(struct gpio_chip *chip, unsigned offset)
+int mcfgpio_direction_output(struct gpio_chip *chip, unsigned offset, int value)
 {
-       struct mcf_gpio_chip *mcf_chip = MCF_CHIP(chip);
-
-       return mcf_chip->gpio_to_pinmux ?
-               mcf_pinmux_request(mcf_chip->gpio_to_pinmux[offset], 0) : 0;
+       return __mcfgpio_direction_output(offset, value);
 }
 
-void mcf_gpio_free(struct gpio_chip *chip, unsigned offset)
+void mcfgpio_set_value(struct gpio_chip *chip, unsigned offset, int value)
 {
-       struct mcf_gpio_chip *mcf_chip = MCF_CHIP(chip);
+       __mcfgpio_set_value(offset, value);
+}
 
-       mcf_gpio_direction_input(chip, offset);
+int mcfgpio_request(struct gpio_chip *chip, unsigned offset)
+{
+       return __mcfgpio_request(offset);
+}
 
-       if (mcf_chip->gpio_to_pinmux)
-               mcf_pinmux_release(mcf_chip->gpio_to_pinmux[offset], 0);
+void mcfgpio_free(struct gpio_chip *chip, unsigned offset)
+{
+       __mcfgpio_free(offset);
 }
 
-struct bus_type mcf_gpio_subsys = {
+struct bus_type mcfgpio_subsys = {
        .name           = "gpio",
        .dev_name       = "gpio",
 };
 
-static int __init mcf_gpio_sysinit(void)
-{
-       unsigned int i = 0;
+static struct gpio_chip mcfgpio_chip = {
+       .label                  = "mcfgpio",
+       .request                = mcfgpio_request,
+       .free                   = mcfgpio_free,
+       .direction_input        = mcfgpio_direction_input,
+       .direction_output       = mcfgpio_direction_output,
+       .get                    = mcfgpio_get_value,
+       .set                    = mcfgpio_set_value,
+       .base                   = 0,
+       .ngpio                  = MCFGPIO_PIN_MAX,
+};
 
-       while (i < mcf_gpio_chips_size)
-               gpiochip_add((struct gpio_chip *)&mcf_gpio_chips[i++]);
-       return subsys_system_register(&mcf_gpio_subsys, NULL);
+static int __init mcfgpio_sysinit(void)
+{
+       gpiochip_add(&mcfgpio_chip);
+       return subsys_system_register(&mcfgpio_subsys, NULL);
 }
 
-core_initcall(mcf_gpio_sysinit);
+core_initcall(mcfgpio_sysinit);
+#endif
index a8b81df653f0295a1f85676483a4b8df9d5f412a..6bfbeebd231be8eef5f461361275abd65e6de5b7 100644 (file)
 #include <asm/machdep.h>
 #include <asm/coldfire.h>
 #include <asm/mcfsim.h>
-#include <asm/mcfgpio.h>
-
-/***************************************************************************/
-
-struct mcf_gpio_chip mcf_gpio_chips[] = {
-       MCFGPS(PP, 0, 8, MCFSIM_PADDR, MCFSIM_PADAT, MCFSIM_PADAT),
-};
-
-unsigned int mcf_gpio_chips_size = ARRAY_SIZE(mcf_gpio_chips);
 
 /***************************************************************************/
 
index 3264b8883d5f8cc1afdf5b98c2a8dabe29a7cfea..09df4b89e8be1ee04711df00fb715037edc473d7 100644 (file)
 #include <asm/coldfire.h>
 #include <asm/mcfsim.h>
 #include <asm/mcfuart.h>
-#include <asm/mcfgpio.h>
-
-/***************************************************************************/
-
-struct mcf_gpio_chip mcf_gpio_chips[] = {
-       MCFGPS(PIRQ, 0, 8, MCFEPORT_EPDDR, MCFEPORT_EPDR, MCFEPORT_EPPDR),
-       MCFGPF(CS, 9, 3),
-       MCFGPF(FECI2C, 16, 4),
-       MCFGPF(QSPI, 24, 4),
-       MCFGPF(TIMER, 32, 4),
-       MCFGPF(UART, 40, 8),
-       MCFGPF(FECH, 48, 8),
-       MCFGPF(FECL, 56, 8),
-};
-
-unsigned int mcf_gpio_chips_size = ARRAY_SIZE(mcf_gpio_chips);
 
 /***************************************************************************/
 
index 5d57a4249412dd68ded25f6ddb9fd88f1ab16251..d47dfd8f50a2dbfb292933de84f6b764931153c9 100644 (file)
 #include <asm/machdep.h>
 #include <asm/coldfire.h>
 #include <asm/mcfsim.h>
-#include <asm/mcfgpio.h>
-
-/***************************************************************************/
-
-struct mcf_gpio_chip mcf_gpio_chips[] = {
-       MCFGPS(PIRQ, 1, 7, MCFEPORT_EPDDR, MCFEPORT_EPDR, MCFEPORT_EPPDR),
-       MCFGPF(ADDR, 13, 3),
-       MCFGPF(DATAH, 16, 8),
-       MCFGPF(DATAL, 24, 8),
-       MCFGPF(BUSCTL, 32, 8),
-       MCFGPF(BS, 40, 4),
-       MCFGPF(CS, 49, 7),
-       MCFGPF(SDRAM, 56, 6),
-       MCFGPF(FECI2C, 64, 4),
-       MCFGPF(UARTH, 72, 2),
-       MCFGPF(UARTL, 80, 8),
-       MCFGPF(QSPI, 88, 5),
-       MCFGPF(TIMER, 96, 8),
-       MCFGPF(ETPU, 104, 3),
-};
-
-unsigned int mcf_gpio_chips_size = ARRAY_SIZE(mcf_gpio_chips);
 
 /***************************************************************************/
 
index fdfa1edfd1acb0e629d198d506167dcdcb58d322..300e729a58d0fa2ed0a31b190f1837f43a6ac8c3 100644 (file)
 #include <asm/machdep.h>
 #include <asm/coldfire.h>
 #include <asm/mcfsim.h>
-#include <asm/mcfgpio.h>
-
-/***************************************************************************/
-
-struct mcf_gpio_chip mcf_gpio_chips[] = {
-       MCFGPS(GPIO0, 0, 32, MCFSIM2_GPIOENABLE, MCFSIM2_GPIOWRITE, MCFSIM2_GPIOREAD),
-       MCFGPS(GPIO1, 32, 32, MCFSIM2_GPIO1ENABLE, MCFSIM2_GPIO1WRITE, MCFSIM2_GPIO1READ),
-};
-
-unsigned int mcf_gpio_chips_size = ARRAY_SIZE(mcf_gpio_chips);
 
 /***************************************************************************/
 
index 43e36060da186f6e8b0db445001b89fb576c5350..e68bc7a148eb1b15f3b511fbfaf1e94bbc9eca77 100644 (file)
@@ -19,7 +19,6 @@
 #include <asm/coldfire.h>
 #include <asm/mcfsim.h>
 #include <asm/mcfuart.h>
-#include <asm/mcfgpio.h>
 
 /***************************************************************************/
 
@@ -31,16 +30,6 @@ unsigned char ledbank = 0xff;
 
 /***************************************************************************/
 
-struct mcf_gpio_chip mcf_gpio_chips[] = {
-       MCFGPS(PA,  0, 16, MCFSIM_PADDR, MCFSIM_PADAT, MCFSIM_PADAT),
-       MCFGPS(PB, 16, 16, MCFSIM_PBDDR, MCFSIM_PBDAT, MCFSIM_PBDAT),
-       MCFGPS(Pc, 32, 16, MCFSIM_PCDDR, MCFSIM_PCDAT, MCFSIM_PCDAT),
-};
-
-unsigned int mcf_gpio_chips_size = ARRAY_SIZE(mcf_gpio_chips);
-
-/***************************************************************************/
-
 static void __init m5272_uarts_init(void)
 {
        u32 v;
index 9b0b66aabd1b1afd449256e38f31b7ad31b26944..b3cb378c5e942012a07a81fb3837ddfac7acbaa1 100644 (file)
 #include <asm/coldfire.h>
 #include <asm/mcfsim.h>
 #include <asm/mcfuart.h>
-#include <asm/mcfgpio.h>
-
-/***************************************************************************/
-
-struct mcf_gpio_chip mcf_gpio_chips[] = {
-#if defined(CONFIG_M5271)
-       MCFGPS(PIRQ, 1, 7, MCFEPORT_EPDDR, MCFEPORT_EPDR, MCFEPORT_EPPDR),
-       MCFGPF(ADDR, 13, 3),
-       MCFGPF(DATAH, 16, 8),
-       MCFGPF(DATAL, 24, 8),
-       MCFGPF(BUSCTL, 32, 8),
-       MCFGPF(BS, 40, 4),
-       MCFGPF(CS, 49, 7),
-       MCFGPF(SDRAM, 56, 6),
-       MCFGPF(FECI2C, 64, 4),
-       MCFGPF(UARTH, 72, 2),
-       MCFGPF(UARTL, 80, 8),
-       MCFGPF(QSPI, 88, 5),
-       MCFGPF(TIMER, 96, 8),
-#elif defined(CONFIG_M5275)
-       MCFGPS(PIRQ, 1, 7, MCFEPORT_EPDDR, MCFEPORT_EPDR, MCFEPORT_EPPDR),
-       MCFGPF(BUSCTL, 8, 8),
-       MCFGPF(ADDR, 21, 3),
-       MCFGPF(CS, 25, 7),
-       MCFGPF(FEC0H, 32, 8),
-       MCFGPF(FEC0L, 40, 8),
-       MCFGPF(FECI2C, 48, 6),
-       MCFGPF(QSPI, 56, 7),
-       MCFGPF(SDRAM, 64, 8),
-       MCFGPF(TIMERH, 72, 4),
-       MCFGPF(TIMERL, 80, 4),
-       MCFGPF(UARTL, 88, 8),
-       MCFGPF(FEC1H, 96, 8),
-       MCFGPF(FEC1L, 104, 8),
-       MCFGPF(BS, 114, 2),
-       MCFGPF(IRQ, 121, 7),
-       MCFGPF(USBH, 128, 1),
-       MCFGPF(USBL, 136, 8),
-       MCFGPF(UARTH, 144, 4),
-#endif
-};
-
-unsigned int mcf_gpio_chips_size = ARRAY_SIZE(mcf_gpio_chips);
 
 /***************************************************************************/
 
index 7ed1276b29dc48aa675f46ccd0aef22958dd0b55..f1319e5d25461cb1b90aceadcd1162fafe5e0b55 100644 (file)
 #include <asm/coldfire.h>
 #include <asm/mcfsim.h>
 #include <asm/mcfuart.h>
-#include <asm/mcfgpio.h>
-
-/***************************************************************************/
-
-struct mcf_gpio_chip mcf_gpio_chips[] = {
-       MCFGPS(NQ, 1, 7, MCFEPORT_EPDDR, MCFEPORT_EPDR, MCFEPORT_EPPDR),
-       MCFGPS(TA, 8, 4, MCFGPTA_GPTDDR, MCFGPTA_GPTPORT, MCFGPTB_GPTPORT),
-       MCFGPS(TB, 16, 4, MCFGPTB_GPTDDR, MCFGPTB_GPTPORT, MCFGPTB_GPTPORT),
-       MCFGPS(QA, 24, 4, MCFQADC_DDRQA, MCFQADC_PORTQA, MCFQADC_PORTQA),
-       MCFGPS(QB, 32, 4, MCFQADC_DDRQB, MCFQADC_PORTQB, MCFQADC_PORTQB),
-       MCFGPF(A, 40, 8),
-       MCFGPF(B, 48, 8),
-       MCFGPF(C, 56, 8),
-       MCFGPF(D, 64, 8),
-       MCFGPF(E, 72, 8),
-       MCFGPF(F, 80, 8),
-       MCFGPF(G, 88, 8),
-       MCFGPF(H, 96, 8),
-       MCFGPF(J, 104, 8),
-       MCFGPF(DD, 112, 8),
-       MCFGPF(EH, 120, 8),
-       MCFGPF(EL, 128, 8),
-       MCFGPF(AS, 136, 6),
-       MCFGPF(QS, 144, 7),
-       MCFGPF(SD, 152, 6),
-       MCFGPF(TC, 160, 4),
-       MCFGPF(TD, 168, 4),
-       MCFGPF(UA, 176, 4),
-};
-
-unsigned int mcf_gpio_chips_size = ARRAY_SIZE(mcf_gpio_chips);
 
 /***************************************************************************/
 
@@ -74,7 +43,7 @@ static void __init m528x_uarts_init(void)
        /* make sure PUAPAR is set for UART0 and UART1 */
        port = readb(MCF5282_GPIO_PUAPAR);
        port |= 0x03 | (0x03 << 2);
-       writeb(port, MCF5282_GPIO_PUAPAR);
+       writeb(port, MCFGPIO_PUAPAR);
 }
 
 /***************************************************************************/
index 93b484976ab39d8447a2a44d80ced4067a2889ee..a568d2870d15c6cec6d758f550934be3c7b441af 100644 (file)
@@ -16,7 +16,6 @@
 #include <asm/machdep.h>
 #include <asm/coldfire.h>
 #include <asm/mcfsim.h>
-#include <asm/mcfgpio.h>
 #include <asm/mcfwdebug.h>
 
 /***************************************************************************/
@@ -29,14 +28,6 @@ unsigned char ledbank = 0xff;
 
 /***************************************************************************/
 
-struct mcf_gpio_chip mcf_gpio_chips[] = {
-       MCFGPS(PP, 0, 16, MCFSIM_PADDR, MCFSIM_PADAT, MCFSIM_PADAT),
-};
-
-unsigned int mcf_gpio_chips_size = ARRAY_SIZE(mcf_gpio_chips);
-
-/***************************************************************************/
-
 void __init config_BSP(char *commandp, int size)
 {
 #if defined(CONFIG_NETtel) || \
index 5394223639f8f5d5bc4c508895562d9075394d20..21d6cb1c7004fe5fab4db5905500c14a8bf6a66f 100644 (file)
 #include <asm/mcfsim.h>
 #include <asm/mcfuart.h>
 #include <asm/mcfdma.h>
-#include <asm/mcfgpio.h>
 #include <asm/mcfwdebug.h>
 
 /***************************************************************************/
 
-struct mcf_gpio_chip mcf_gpio_chips[] = {
-       MCFGPS(PIRQ, 0, 8, MCFEPORT_EPDDR, MCFEPORT_EPDR, MCFEPORT_EPPDR),
-       MCFGPF(FECH, 8, 8),
-       MCFGPF(FECL, 16, 8),
-       MCFGPF(SSI, 24, 5),
-       MCFGPF(BUSCTL, 32, 4),
-       MCFGPF(BE, 40, 4),
-       MCFGPF(CS, 49, 5),
-       MCFGPF(PWM, 58, 4),
-       MCFGPF(FECI2C, 64, 4),
-       MCFGPF(UART, 72, 8),
-       MCFGPF(QSPI, 80, 6),
-       MCFGPF(TIMER, 88, 4),
-       MCFGPF(LCDDATAH, 96, 2),
-       MCFGPF(LCDDATAM, 104, 8),
-       MCFGPF(LCDDATAL, 112, 8),
-       MCFGPF(LCDCTLH, 120, 1),
-       MCFGPF(LCDCTLL, 128, 8),
-};
-
-unsigned int mcf_gpio_chips_size = ARRAY_SIZE(mcf_gpio_chips);
-
-/***************************************************************************/
-
 #if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
 
 static void __init m532x_qspi_init(void)
index faa6680b34046d023bdf6b3b1345b4cd39870d8b..bb6c746ae819ab388eba2dbd429997771124338f 100644 (file)
 #include <asm/machdep.h>
 #include <asm/coldfire.h>
 #include <asm/mcfsim.h>
-#include <asm/mcfgpio.h>
-
-/***************************************************************************/
-
-struct mcf_gpio_chip mcf_gpio_chips[] = {
-       MCFGPS(PP, 0, 16, MCFSIM_PADDR, MCFSIM_PADAT, MCFSIM_PADAT),
-};
-
-unsigned int mcf_gpio_chips_size = ARRAY_SIZE(mcf_gpio_chips);
 
 /***************************************************************************/
 
index 20672dadb25276c4c629ad4bf5516b9a6a4ce396..2081c6cbb3de95f6c5b182e878067dc1952e97bf 100644 (file)
 #include <asm/m54xxsim.h>
 #include <asm/mcfuart.h>
 #include <asm/m54xxgpt.h>
-#include <asm/mcfgpio.h>
 #ifdef CONFIG_MMU
 #include <asm/mmu_context.h>
 #endif
 
 /***************************************************************************/
 
-struct mcf_gpio_chip mcf_gpio_chips[] = { };
-
-unsigned int mcf_gpio_chips_size = ARRAY_SIZE(mcf_gpio_chips);
-
-/***************************************************************************/
-
 static void __init m54xx_uarts_init(void)
 {
        /* enable io pins */
diff --git a/arch/m68k/platform/coldfire/pinmux.c b/arch/m68k/platform/coldfire/pinmux.c
deleted file mode 100644 (file)
index 8c62b82..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Coldfire generic GPIO pinmux support.
- *
- * (C) Copyright 2009, Steven King <sfking@fdwdc.com>
- *
- *  This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; version 2 of the License.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- */
-
-#include <linux/kernel.h>
-
-#include <asm/pinmux.h>
-
-int mcf_pinmux_request(unsigned pinmux, unsigned func)
-{
-       return 0;
-}
-
-void mcf_pinmux_release(unsigned pinmux, unsigned func)
-{
-}