* [PATCH V7 4/8] MIPS: Move Loongson GPIO driver to drivers/gpio
2015-01-23 8:56 [PATCH V7 3/8] MIPS: Cleanup Loongson-2F's gpio driver Huacai Chen
@ 2015-01-23 8:56 ` Huacai Chen
2015-02-26 9:29 ` Alexandre Courbot
2015-01-23 8:56 ` [PATCH V7 5/8] GPIO: Add Loongson-3A/3B GPIO driver support Huacai Chen
2015-02-26 9:28 ` [PATCH V7 3/8] MIPS: Cleanup Loongson-2F's gpio driver Alexandre Courbot
2 siblings, 1 reply; 5+ messages in thread
From: Huacai Chen @ 2015-01-23 8:56 UTC (permalink / raw)
To: Ralf Baechle
Cc: John Crispin, Steven J. Hill, linux-mips, Fuxin Zhang,
Zhangjin Wu, linux-gpio, Huacai Chen
Move Loongson-2's GPIO driver to drivers/gpio and add Kconfig options.
Signed-off-by: Huacai Chen <chenhc@lemote.com>
---
arch/mips/configs/lemote2f_defconfig | 1 +
arch/mips/loongson/common/Makefile | 1 -
drivers/gpio/Kconfig | 6 ++++++
drivers/gpio/Makefile | 1 +
.../common/gpio.c => drivers/gpio/gpio-loongson.c | 0
5 files changed, 8 insertions(+), 1 deletions(-)
rename arch/mips/loongson/common/gpio.c => drivers/gpio/gpio-loongson.c (100%)
diff --git a/arch/mips/configs/lemote2f_defconfig b/arch/mips/configs/lemote2f_defconfig
index e51aad9..0cbc986 100644
--- a/arch/mips/configs/lemote2f_defconfig
+++ b/arch/mips/configs/lemote2f_defconfig
@@ -171,6 +171,7 @@ CONFIG_SERIAL_8250_FOURPORT=y
CONFIG_LEGACY_PTY_COUNT=16
CONFIG_HW_RANDOM=y
CONFIG_RTC=y
+CONFIG_GPIO_LOONGSON=y
CONFIG_THERMAL=y
CONFIG_MEDIA_SUPPORT=m
CONFIG_VIDEO_DEV=m
diff --git a/arch/mips/loongson/common/Makefile b/arch/mips/loongson/common/Makefile
index d87e033..e70c33f 100644
--- a/arch/mips/loongson/common/Makefile
+++ b/arch/mips/loongson/common/Makefile
@@ -4,7 +4,6 @@
obj-y += setup.o init.o cmdline.o env.o time.o reset.o irq.o \
bonito-irq.o mem.o machtype.o platform.o
-obj-$(CONFIG_GPIOLIB) += gpio.o
obj-$(CONFIG_PCI) += pci.o
#
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index 633ec21..3ac5473 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -475,6 +475,12 @@ config GPIO_GRGPIO
Select this to support Aeroflex Gaisler GRGPIO cores from the GRLIB
VHDL IP core library.
+config GPIO_LOONGSON
+ tristate "Loongson-2 GPIO support"
+ depends on CPU_LOONGSON2
+ help
+ driver for GPIO functionality on Loongson-2F processors.
+
config GPIO_TB10X
bool
select GENERIC_IRQ_CHIP
diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
index 81755f1..caccfad 100644
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
@@ -41,6 +41,7 @@ obj-$(CONFIG_GPIO_JANZ_TTL) += gpio-janz-ttl.o
obj-$(CONFIG_GPIO_KEMPLD) += gpio-kempld.o
obj-$(CONFIG_ARCH_KS8695) += gpio-ks8695.o
obj-$(CONFIG_GPIO_INTEL_MID) += gpio-intel-mid.o
+obj-$(CONFIG_GPIO_LOONGSON) += gpio-loongson.o
obj-$(CONFIG_GPIO_LP3943) += gpio-lp3943.o
obj-$(CONFIG_ARCH_LPC32XX) += gpio-lpc32xx.o
obj-$(CONFIG_GPIO_LYNXPOINT) += gpio-lynxpoint.o
diff --git a/arch/mips/loongson/common/gpio.c b/drivers/gpio/gpio-loongson.c
similarity index 100%
rename from arch/mips/loongson/common/gpio.c
rename to drivers/gpio/gpio-loongson.c
--
1.7.7.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH V7 4/8] MIPS: Move Loongson GPIO driver to drivers/gpio
2015-01-23 8:56 ` [PATCH V7 4/8] MIPS: Move Loongson GPIO driver to drivers/gpio Huacai Chen
@ 2015-02-26 9:29 ` Alexandre Courbot
0 siblings, 0 replies; 5+ messages in thread
From: Alexandre Courbot @ 2015-02-26 9:29 UTC (permalink / raw)
To: Huacai Chen
Cc: Ralf Baechle, John Crispin, Steven J. Hill, linux-mips,
Fuxin Zhang, Zhangjin Wu, linux-gpio@vger.kernel.org
On Fri, Jan 23, 2015 at 5:56 PM, Huacai Chen <chenhc@lemote.com> wrote:
> Move Loongson-2's GPIO driver to drivers/gpio and add Kconfig options.
>
> Signed-off-by: Huacai Chen <chenhc@lemote.com>
Same here, this patch places GPIO driver code where it should be, but
we need to ensure there is no breakage before taking this code.
> ---
> arch/mips/configs/lemote2f_defconfig | 1 +
> arch/mips/loongson/common/Makefile | 1 -
> drivers/gpio/Kconfig | 6 ++++++
> drivers/gpio/Makefile | 1 +
> .../common/gpio.c => drivers/gpio/gpio-loongson.c | 0
> 5 files changed, 8 insertions(+), 1 deletions(-)
> rename arch/mips/loongson/common/gpio.c => drivers/gpio/gpio-loongson.c (100%)
>
> diff --git a/arch/mips/configs/lemote2f_defconfig b/arch/mips/configs/lemote2f_defconfig
> index e51aad9..0cbc986 100644
> --- a/arch/mips/configs/lemote2f_defconfig
> +++ b/arch/mips/configs/lemote2f_defconfig
> @@ -171,6 +171,7 @@ CONFIG_SERIAL_8250_FOURPORT=y
> CONFIG_LEGACY_PTY_COUNT=16
> CONFIG_HW_RANDOM=y
> CONFIG_RTC=y
> +CONFIG_GPIO_LOONGSON=y
> CONFIG_THERMAL=y
> CONFIG_MEDIA_SUPPORT=m
> CONFIG_VIDEO_DEV=m
> diff --git a/arch/mips/loongson/common/Makefile b/arch/mips/loongson/common/Makefile
> index d87e033..e70c33f 100644
> --- a/arch/mips/loongson/common/Makefile
> +++ b/arch/mips/loongson/common/Makefile
> @@ -4,7 +4,6 @@
>
> obj-y += setup.o init.o cmdline.o env.o time.o reset.o irq.o \
> bonito-irq.o mem.o machtype.o platform.o
> -obj-$(CONFIG_GPIOLIB) += gpio.o
> obj-$(CONFIG_PCI) += pci.o
>
> #
> diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
> index 633ec21..3ac5473 100644
> --- a/drivers/gpio/Kconfig
> +++ b/drivers/gpio/Kconfig
> @@ -475,6 +475,12 @@ config GPIO_GRGPIO
> Select this to support Aeroflex Gaisler GRGPIO cores from the GRLIB
> VHDL IP core library.
>
> +config GPIO_LOONGSON
> + tristate "Loongson-2 GPIO support"
> + depends on CPU_LOONGSON2
> + help
> + driver for GPIO functionality on Loongson-2F processors.
> +
> config GPIO_TB10X
> bool
> select GENERIC_IRQ_CHIP
> diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
> index 81755f1..caccfad 100644
> --- a/drivers/gpio/Makefile
> +++ b/drivers/gpio/Makefile
> @@ -41,6 +41,7 @@ obj-$(CONFIG_GPIO_JANZ_TTL) += gpio-janz-ttl.o
> obj-$(CONFIG_GPIO_KEMPLD) += gpio-kempld.o
> obj-$(CONFIG_ARCH_KS8695) += gpio-ks8695.o
> obj-$(CONFIG_GPIO_INTEL_MID) += gpio-intel-mid.o
> +obj-$(CONFIG_GPIO_LOONGSON) += gpio-loongson.o
> obj-$(CONFIG_GPIO_LP3943) += gpio-lp3943.o
> obj-$(CONFIG_ARCH_LPC32XX) += gpio-lpc32xx.o
> obj-$(CONFIG_GPIO_LYNXPOINT) += gpio-lynxpoint.o
> diff --git a/arch/mips/loongson/common/gpio.c b/drivers/gpio/gpio-loongson.c
> similarity index 100%
> rename from arch/mips/loongson/common/gpio.c
> rename to drivers/gpio/gpio-loongson.c
> --
> 1.7.7.3
>
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH V7 5/8] GPIO: Add Loongson-3A/3B GPIO driver support
2015-01-23 8:56 [PATCH V7 3/8] MIPS: Cleanup Loongson-2F's gpio driver Huacai Chen
2015-01-23 8:56 ` [PATCH V7 4/8] MIPS: Move Loongson GPIO driver to drivers/gpio Huacai Chen
@ 2015-01-23 8:56 ` Huacai Chen
2015-02-26 9:28 ` [PATCH V7 3/8] MIPS: Cleanup Loongson-2F's gpio driver Alexandre Courbot
2 siblings, 0 replies; 5+ messages in thread
From: Huacai Chen @ 2015-01-23 8:56 UTC (permalink / raw)
To: Ralf Baechle
Cc: John Crispin, Steven J. Hill, linux-mips, Fuxin Zhang,
Zhangjin Wu, linux-gpio, Huacai Chen
Improve Loongson-2's GPIO driver to support Loongson-3A/3B, and update
Loongson-3's default config file.
Signed-off-by: Huacai Chen <chenhc@lemote.com>
---
arch/mips/Kconfig | 1 +
arch/mips/configs/loongson3_defconfig | 1 +
drivers/gpio/Kconfig | 6 ++--
drivers/gpio/gpio-loongson.c | 44 ++++++++++++++++++++------------
4 files changed, 32 insertions(+), 20 deletions(-)
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 9e0dbff..8849efb 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -1236,6 +1236,7 @@ config CPU_LOONGSON3
select CPU_SUPPORTS_HUGEPAGES
select WEAK_ORDERING
select WEAK_REORDERING_BEYOND_LLSC
+ select ARCH_REQUIRE_GPIOLIB
help
The Loongson 3 processor implements the MIPS64R2 instruction
set with many extensions.
diff --git a/arch/mips/configs/loongson3_defconfig b/arch/mips/configs/loongson3_defconfig
index 7eabcd2..c844299 100644
--- a/arch/mips/configs/loongson3_defconfig
+++ b/arch/mips/configs/loongson3_defconfig
@@ -243,6 +243,7 @@ CONFIG_HW_RANDOM=y
CONFIG_RAW_DRIVER=m
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_PIIX4=y
+CONFIG_GPIO_LOONGSON=y
CONFIG_SENSORS_LM75=m
CONFIG_SENSORS_LM93=m
CONFIG_SENSORS_W83627HF=m
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index 3ac5473..2e19f39 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -476,10 +476,10 @@ config GPIO_GRGPIO
VHDL IP core library.
config GPIO_LOONGSON
- tristate "Loongson-2 GPIO support"
- depends on CPU_LOONGSON2
+ tristate "Loongson-2/3 GPIO support"
+ depends on CPU_LOONGSON2 || CPU_LOONGSON3
help
- driver for GPIO functionality on Loongson-2F processors.
+ driver for GPIO functionality on Loongson-2F/3A/3B processors.
config GPIO_TB10X
bool
diff --git a/drivers/gpio/gpio-loongson.c b/drivers/gpio/gpio-loongson.c
index b4e69e0..ccc65a1 100644
--- a/drivers/gpio/gpio-loongson.c
+++ b/drivers/gpio/gpio-loongson.c
@@ -1,8 +1,10 @@
/*
- * STLS2F GPIO Support
+ * Loongson-2F/3A/3B GPIO Support
*
* Copyright (c) 2008 Richard Liu, STMicroelectronics <richard.liu@st.com>
* Copyright (c) 2008-2010 Arnaud Patard <apatard@mandriva.com>
+ * Copyright (c) 2013 Hongbing Hu <huhb@lemote.com>
+ * Copyright (c) 2014 Huacai Chen <chenhc@lemote.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
@@ -20,11 +22,19 @@
#include <linux/gpio.h>
#define STLS2F_N_GPIO 4
-#define STLS2F_GPIO_IN_OFFSET 16
+#define STLS3A_N_GPIO 16
+
+#ifdef CONFIG_CPU_LOONGSON3
+#define LOONGSON_N_GPIO STLS3A_N_GPIO
+#else
+#define LOONGSON_N_GPIO STLS2F_N_GPIO
+#endif
+
+#define LOONGSON_GPIO_IN_OFFSET 16
static DEFINE_SPINLOCK(gpio_lock);
-static int ls2f_gpio_direction_input(struct gpio_chip *chip, unsigned gpio)
+static int loongson_gpio_direction_input(struct gpio_chip *chip, unsigned gpio)
{
u32 temp;
u32 mask;
@@ -39,7 +49,7 @@ static int ls2f_gpio_direction_input(struct gpio_chip *chip, unsigned gpio)
return 0;
}
-static int ls2f_gpio_direction_output(struct gpio_chip *chip,
+static int loongson_gpio_direction_output(struct gpio_chip *chip,
unsigned gpio, int level)
{
u32 temp;
@@ -56,12 +66,12 @@ static int ls2f_gpio_direction_output(struct gpio_chip *chip,
return 0;
}
-static int ls2f_gpio_get_value(struct gpio_chip *chip, unsigned gpio)
+static int loongson_gpio_get_value(struct gpio_chip *chip, unsigned gpio)
{
u32 val;
u32 mask;
- mask = 1 << (gpio + STLS2F_GPIO_IN_OFFSET);
+ mask = 1 << (gpio + LOONGSON_GPIO_IN_OFFSET);
spin_lock(&gpio_lock);
val = LOONGSON_GPIODATA;
spin_unlock(&gpio_lock);
@@ -69,7 +79,7 @@ static int ls2f_gpio_get_value(struct gpio_chip *chip, unsigned gpio)
return (val & mask) != 0;
}
-static void ls2f_gpio_set_value(struct gpio_chip *chip,
+static void loongson_gpio_set_value(struct gpio_chip *chip,
unsigned gpio, int value)
{
u32 val;
@@ -87,19 +97,19 @@ static void ls2f_gpio_set_value(struct gpio_chip *chip,
spin_unlock(&gpio_lock);
}
-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,
+static struct gpio_chip loongson_chip = {
+ .label = "Loongson-gpio-chip",
+ .direction_input = loongson_gpio_direction_input,
+ .get = loongson_gpio_get_value,
+ .direction_output = loongson_gpio_direction_output,
+ .set = loongson_gpio_set_value,
.base = 0,
- .ngpio = STLS2F_N_GPIO,
+ .ngpio = LOONGSON_N_GPIO,
.can_sleep = false,
};
-static int __init ls2f_gpio_setup(void)
+static int __init loongson_gpio_setup(void)
{
- return gpiochip_add(&ls2f_chip);
+ return gpiochip_add(&loongson_chip);
}
-arch_initcall(ls2f_gpio_setup);
+postcore_initcall(loongson_gpio_setup);
--
1.7.7.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH V7 3/8] MIPS: Cleanup Loongson-2F's gpio driver
2015-01-23 8:56 [PATCH V7 3/8] MIPS: Cleanup Loongson-2F's gpio driver Huacai Chen
2015-01-23 8:56 ` [PATCH V7 4/8] MIPS: Move Loongson GPIO driver to drivers/gpio Huacai Chen
2015-01-23 8:56 ` [PATCH V7 5/8] GPIO: Add Loongson-3A/3B GPIO driver support Huacai Chen
@ 2015-02-26 9:28 ` Alexandre Courbot
2 siblings, 0 replies; 5+ messages in thread
From: Alexandre Courbot @ 2015-02-26 9:28 UTC (permalink / raw)
To: Huacai Chen
Cc: Ralf Baechle, John Crispin, Steven J. Hill, linux-mips,
Fuxin Zhang, Zhangjin Wu, linux-gpio@vger.kernel.org
On Fri, Jan 23, 2015 at 5:56 PM, Huacai Chen <chenhc@lemote.com> wrote:
> This cleanup is prepare to move the driver to drivers/gpio. Custom
> definitions of gpio_get_value()/gpio_set_value() are dropped.
>
> Signed-off-by: Huacai Chen <chenhc@lemote.com>
Sorry for taking ages to come back to this...
This look allright at first sight - but could we have at least a
Tested-by that confirms this driver is still working as expected?
> ---
> arch/mips/include/asm/mach-loongson/gpio.h | 15 +++---
> arch/mips/loongson/common/gpio.c | 80 ++++++++--------------------
> 2 files changed, 31 insertions(+), 64 deletions(-)
>
> diff --git a/arch/mips/include/asm/mach-loongson/gpio.h b/arch/mips/include/asm/mach-loongson/gpio.h
> index 211a7b7..b3b2169 100644
> --- a/arch/mips/include/asm/mach-loongson/gpio.h
> +++ b/arch/mips/include/asm/mach-loongson/gpio.h
> @@ -1,8 +1,9 @@
> /*
> - * STLS2F GPIO Support
> + * Loongson GPIO Support
> *
> * Copyright (c) 2008 Richard Liu, STMicroelectronics <richard.liu@st.com>
> * Copyright (c) 2008-2010 Arnaud Patard <apatard@mandriva.com>
> + * Copyright (c) 2014 Huacai Chen <chenhc@lemote.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
> @@ -10,14 +11,14 @@
> * (at your option) any later version.
> */
>
> -#ifndef __STLS2F_GPIO_H
> -#define __STLS2F_GPIO_H
> +#ifndef __LOONGSON_GPIO_H
> +#define __LOONGSON_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);
> +#define gpio_get_value __gpio_get_value
> +#define gpio_set_value __gpio_set_value
> +#define gpio_cansleep __gpio_cansleep
>
> /* The chip can do interrupt
> * but it has not been tested and doc not clear
> @@ -32,4 +33,4 @@ static inline int irq_to_gpio(int gpio)
> return -EINVAL;
> }
>
> -#endif /* __STLS2F_GPIO_H */
> +#endif /* __LOONGSON_GPIO_H */
> diff --git a/arch/mips/loongson/common/gpio.c b/arch/mips/loongson/common/gpio.c
> index 29dbaa2..b4e69e0 100644
> --- a/arch/mips/loongson/common/gpio.c
> +++ b/arch/mips/loongson/common/gpio.c
> @@ -24,63 +24,11 @@
>
> 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;
> @@ -97,9 +45,6 @@ static int ls2f_gpio_direction_output(struct gpio_chip *chip,
> u32 temp;
> u32 mask;
>
> - if (gpio >= STLS2F_N_GPIO)
> - return -EINVAL;
> -
> gpio_set_value(gpio, level);
> spin_lock(&gpio_lock);
> mask = 1 << gpio;
> @@ -113,13 +58,33 @@ static int ls2f_gpio_direction_output(struct gpio_chip *chip,
>
> static int ls2f_gpio_get_value(struct gpio_chip *chip, unsigned gpio)
> {
> - return gpio_get_value(gpio);
> + u32 val;
> + u32 mask;
> +
> + mask = 1 << (gpio + STLS2F_GPIO_IN_OFFSET);
> + spin_lock(&gpio_lock);
> + val = LOONGSON_GPIODATA;
> + spin_unlock(&gpio_lock);
> +
> + return (val & mask) != 0;
> }
>
> static void ls2f_gpio_set_value(struct gpio_chip *chip,
> unsigned gpio, int value)
> {
> - gpio_set_value(gpio, value);
> + u32 val;
> + u32 mask;
> +
> + mask = 1 << gpio;
> +
> + spin_lock(&gpio_lock);
> + val = LOONGSON_GPIODATA;
> + if (value)
> + val |= mask;
> + else
> + val &= (~mask);
> + LOONGSON_GPIODATA = val;
> + spin_unlock(&gpio_lock);
> }
>
> static struct gpio_chip ls2f_chip = {
> @@ -130,6 +95,7 @@ static struct gpio_chip ls2f_chip = {
> .set = ls2f_gpio_set_value,
> .base = 0,
> .ngpio = STLS2F_N_GPIO,
> + .can_sleep = false,
> };
>
> static int __init ls2f_gpio_setup(void)
> --
> 1.7.7.3
>
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 5+ messages in thread