* [PATCH] loongson 2f: Add gpio/gpioilb support
@ 2010-04-29 9:58 Arnaud Patard
2010-04-29 12:11 ` Wu Zhangjin
0 siblings, 1 reply; 4+ messages in thread
From: Arnaud Patard @ 2010-04-29 9:58 UTC (permalink / raw)
To: linux-mips
[-- Attachment #1: Type: text/plain, Size: 134 bytes --]
This patch is adding support for the 4 GPIO availables on the ST LS2F
cpus.
Signed-off-by: Arnaud Patard <apatard@mandriva.com>
---
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: stls2f_gpio.patch --]
[-- Type: text/x-patch, Size: 5574 bytes --]
arch/mips/Kconfig | 2 2 + 0 - 0 !
arch/mips/include/asm/mach-lemote/gpio.h | 33 33 + 0 - 0 !
arch/mips/loongson/common/Makefile | 2 2 + 0 - 0 !
arch/mips/loongson/common/gpio.c | 128 128 + 0 - 0 !
arch/mips/loongson/common/platform.c | 25 25 + 0 - 0 !
5 files changed, 190 insertions(+)
Index: linux-2.6/arch/mips/Kconfig
===================================================================
--- linux-2.6.orig/arch/mips/Kconfig
+++ linux-2.6/arch/mips/Kconfig
@@ -1073,6 +1073,8 @@ config CPU_LOONGSON2F
bool "Loongson 2F"
depends on SYS_HAS_CPU_LOONGSON2F
select CPU_LOONGSON2
+ select GENERIC_GPIO
+ select ARCH_REQUIRE_GPIOLIB
help
The Loongson 2F processor implements the MIPS III instruction set
with many extensions.
Index: linux-2.6/arch/mips/loongson/common/gpio.c
===================================================================
--- /dev/null
+++ linux-2.6/arch/mips/loongson/common/gpio.c
@@ -0,0 +1,140 @@
+/*
+ * STLS2F GPIO Support
+ *
+ * Copyright (c) 2008 Richard Liu, STMicroelectronics <richard.liu@st.com>
+ * Copyright (c) 2008-2010 Arnaud Patard <apatard@mandriva.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; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/spinlock.h>
+#include <linux/err.h>
+#include <asm/types.h>
+#include <loongson.h>
+#include <linux/gpio.h>
+
+#define STLS2F_N_GPIO 4
+#define STLS2F_GPIO_IN_OFFSET 16
+
+static DEFINE_SPINLOCK(gpio_lock);
+
+int gpio_get_value(unsigned gpio)
+{
+ u32 val;
+ u32 mask;
+
+ if (gpio >= STLS2F_N_GPIO)
+ return __gpio_get_value(gpio);
+
+ mask = 1 << (gpio + STLS2F_GPIO_IN_OFFSET);
+ spin_lock(&gpio_lock);
+ val = LOONGSON_GPIODATA;
+ spin_unlock(&gpio_lock);
+
+ return ((val & mask) != 0);
+}
+EXPORT_SYMBOL(gpio_get_value);
+
+void gpio_set_value(unsigned gpio, int state)
+{
+ u32 val;
+ u32 mask;
+
+ if (gpio >= STLS2F_N_GPIO) {
+ __gpio_set_value(gpio, state);
+ return ;
+ }
+
+ mask = 1 << gpio;
+
+ spin_lock(&gpio_lock);
+ val = LOONGSON_GPIODATA;
+ if (state)
+ val |= mask;
+ else
+ val &= (~mask);
+ LOONGSON_GPIODATA = val;
+ spin_unlock(&gpio_lock);
+}
+EXPORT_SYMBOL(gpio_set_value);
+
+int gpio_cansleep(unsigned gpio)
+{
+ if (gpio < STLS2F_N_GPIO)
+ return 0;
+ else
+ return __gpio_cansleep(gpio);
+}
+EXPORT_SYMBOL(gpio_cansleep);
+
+static int ls2f_gpio_direction_input(struct gpio_chip *chip, unsigned gpio)
+{
+ u32 temp;
+ u32 mask;
+
+ if (gpio >= STLS2F_N_GPIO)
+ return -EINVAL;
+
+ spin_lock(&gpio_lock);
+ mask = 1 << gpio;
+ temp = LOONGSON_GPIOIE;
+ temp |= mask;
+ LOONGSON_GPIOIE = temp;
+ spin_unlock(&gpio_lock);
+
+ return 0;
+}
+
+static int ls2f_gpio_direction_output(struct gpio_chip *chip,
+ unsigned gpio, int level)
+{
+ u32 temp;
+ u32 mask;
+
+ if (gpio >= STLS2F_N_GPIO)
+ return -EINVAL;
+
+ gpio_set_value(gpio, level);
+ spin_lock(&gpio_lock);
+ mask = 1 << gpio;
+ temp = LOONGSON_GPIOIE;
+ temp &= (~mask);
+ LOONGSON_GPIOIE = temp;
+ spin_unlock(&gpio_lock);
+
+ return 0;
+}
+
+static int ls2f_gpio_get_value(struct gpio_chip *chip, unsigned gpio)
+{
+ return gpio_get_value(gpio);
+}
+
+static void ls2f_gpio_set_value(struct gpio_chip *chip,
+ unsigned gpio, int value)
+{
+ gpio_set_value(gpio, value);
+}
+
+static struct gpio_chip ls2f_chip = {
+ .label = "ls2f",
+ .direction_input = ls2f_gpio_direction_input,
+ .get = ls2f_gpio_get_value,
+ .direction_output = ls2f_gpio_direction_output,
+ .set = ls2f_gpio_set_value,
+ .base = 0,
+ .ngpio = STLS2F_N_GPIO,
+};
+
+static int __init ls2f_gpio_setup(void)
+{
+ return gpiochip_add(&ls2f_chip);
+}
+arch_initcall(ls2f_gpio_setup);
+
Index: linux-2.6/arch/mips/loongson/common/Makefile
===================================================================
--- linux-2.6.orig/arch/mips/loongson/common/Makefile
+++ linux-2.6/arch/mips/loongson/common/Makefile
@@ -4,6 +4,7 @@
obj-y += setup.o init.o cmdline.o env.o time.o reset.o irq.o \
pci.o bonito-irq.o mem.o machtype.o platform.o
+obj-$(CONFIG_GENERIC_GPIO) += gpio.o
#
# Serial port support
Index: linux-2.6/arch/mips/include/asm/mach-loongson/gpio.h
===================================================================
--- /dev/null
+++ linux-2.6/arch/mips/include/asm/mach-loongson/gpio.h
@@ -0,0 +1,35 @@
+/*
+ * STLS2F GPIO Support
+ *
+ * Copyright (c) 2008 Richard Liu, STMicroelectronics <richard.liu@st.com>
+ * Copyright (c) 2008-2010 Arnaud Patard <apatard@mandriva.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; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef __STLS2F_GPIO_H
+#define __STLS2F_GPIO_H
+
+#include <asm-generic/gpio.h>
+
+extern void gpio_set_value(unsigned gpio, int value);
+extern int gpio_get_value(unsigned gpio);
+extern int gpio_cansleep(unsigned gpio);
+
+/* The chip can do interrupt
+ * but it has not been tested and doc not clear
+ */
+static inline int gpio_to_irq(int gpio)
+{
+ return -EINVAL;
+}
+
+static inline int irq_to_gpio(int gpio)
+{
+ return -EINVAL;
+}
+
+#endif /* __STLS2F_GPIO_H */
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] loongson 2f: Add gpio/gpioilb support
2010-04-29 9:58 [PATCH] loongson 2f: Add gpio/gpioilb support Arnaud Patard
@ 2010-04-29 12:11 ` Wu Zhangjin
2010-04-29 12:23 ` Arnaud Patard
0 siblings, 1 reply; 4+ messages in thread
From: Wu Zhangjin @ 2010-04-29 12:11 UTC (permalink / raw)
To: Arnaud Patard; +Cc: linux-mips
On Thu, 2010-04-29 at 11:58 +0200, Arnaud Patard wrote:
> This patch is adding support for the 4 GPIO availables on the ST LS2F
> cpus.
>
> Signed-off-by: Arnaud Patard <apatard@mandriva.com>
> ---
[...]
> Index: linux-2.6/arch/mips/loongson/common/gpio.c
[...]
> +
> +static int __init ls2f_gpio_setup(void)
> +{
> + return gpiochip_add(&ls2f_chip);
> +}
> +arch_initcall(ls2f_gpio_setup);
> +
The above blank line is at the end of the file, we can remove it,
otherwise, "git am" will complain about it.
Regards,
Wu Zhangjin
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] loongson 2f: Add gpio/gpioilb support
2010-04-29 12:11 ` Wu Zhangjin
@ 2010-04-29 12:23 ` Arnaud Patard
2010-04-29 15:46 ` Ralf Baechle
0 siblings, 1 reply; 4+ messages in thread
From: Arnaud Patard @ 2010-04-29 12:23 UTC (permalink / raw)
To: wuzhangjin; +Cc: linux-mips
Wu Zhangjin <wuzhangjin@gmail.com> writes:
> On Thu, 2010-04-29 at 11:58 +0200, Arnaud Patard wrote:
>> This patch is adding support for the 4 GPIO availables on the ST LS2F
>> cpus.
>>
>> Signed-off-by: Arnaud Patard <apatard@mandriva.com>
>> ---
> [...]
>> Index: linux-2.6/arch/mips/loongson/common/gpio.c
> [...]
>> +
>> +static int __init ls2f_gpio_setup(void)
>> +{
>> + return gpiochip_add(&ls2f_chip);
>> +}
>> +arch_initcall(ls2f_gpio_setup);
>> +
>
> The above blank line is at the end of the file, we can remove it,
> otherwise, "git am" will complain about it.
Then, please, either fix your tool or fix it yourself. Last time I've
looked at Documentation/SubmittingPatches, it was not
mentionned. Moreover, checkpatch.pl is not complaining. If you really
think, it's a must have, ask to fix checkpatch.pl first otherwise it's
going to be missed again and again.
Thanks,
Arnaud
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] loongson 2f: Add gpio/gpioilb support
2010-04-29 12:23 ` Arnaud Patard
@ 2010-04-29 15:46 ` Ralf Baechle
0 siblings, 0 replies; 4+ messages in thread
From: Ralf Baechle @ 2010-04-29 15:46 UTC (permalink / raw)
To: Arnaud Patard; +Cc: wuzhangjin, linux-mips
On Thu, Apr 29, 2010 at 02:23:01PM +0200, Arnaud Patard wrote:
> > The above blank line is at the end of the file, we can remove it,
> > otherwise, "git am" will complain about it.
>
> Then, please, either fix your tool or fix it yourself. Last time I've
> looked at Documentation/SubmittingPatches, it was not
> mentionned. Moreover, checkpatch.pl is not complaining. If you really
> think, it's a must have, ask to fix checkpatch.pl first otherwise it's
> going to be missed again and again.
git-am will complain about it - with a not terribly helpful message that
does not mention the offending file. I've configured git to strip
trailing whitespace and blank lines automatically. In a patch series
this could lead to the problem where a subsequent patch fails to apply
because got modified.
> arch/mips/Kconfig | 2 2 + 0 - 0 !
> arch/mips/include/asm/mach-lemote/gpio.h | 33 33 + 0 - 0 !
> arch/mips/loongson/common/Makefile | 2 2 + 0 - 0 !
> arch/mips/loongson/common/gpio.c | 128 128 + 0 - 0 !
> arch/mips/loongson/common/platform.c | 25 25 + 0 - 0 !
> 5 files changed, 190 insertions(+)
Your diffstat doesn't match what's in the patch:
arch/mips/Kconfig | 2
arch/mips/loongson/common/gpio.c | 140 ++++++++++++++++++++++++++++
arch/mips/loongson/common/Makefile | 1
arch/mips/include/asm/mach-loongson/gpio.h | 35 +++++++
4 files changed, 178 insertions(+), 0 deletions(-)
So what's wrong, diffstat or patch?
Ralf
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-04-29 15:46 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-29 9:58 [PATCH] loongson 2f: Add gpio/gpioilb support Arnaud Patard
2010-04-29 12:11 ` Wu Zhangjin
2010-04-29 12:23 ` Arnaud Patard
2010-04-29 15:46 ` Ralf Baechle
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.