* [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver
@ 2015-03-26 2:34 Huacai Chen
2015-03-26 2:34 ` [PATCH 2/3] MIPS: Move Loongson GPIO driver to drivers/gpio Huacai Chen
` (3 more replies)
0 siblings, 4 replies; 11+ messages in thread
From: Huacai Chen @ 2015-03-26 2:34 UTC (permalink / raw)
To: Linus Walleij
Cc: Alexandre Courbot, linux-gpio, Fuxin Zhang, Zhangjin Wu, Huacai Chen
This cleanup is prepare to move the driver to drivers/gpio. Custom
definitions of gpio_get_value()/gpio_set_value() are dropped.
Acked-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Huacai Chen <chenhc@lemote.com>
---
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
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/3] MIPS: Move Loongson GPIO driver to drivers/gpio
2015-03-26 2:34 [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver Huacai Chen
@ 2015-03-26 2:34 ` Huacai Chen
2015-04-07 9:12 ` Linus Walleij
2015-03-26 2:34 ` [PATCH 3/3] GPIO: Add Loongson-3A/3B GPIO driver support Huacai Chen
` (2 subsequent siblings)
3 siblings, 1 reply; 11+ messages in thread
From: Huacai Chen @ 2015-03-26 2:34 UTC (permalink / raw)
To: Linus Walleij
Cc: Alexandre Courbot, linux-gpio, Fuxin Zhang, Zhangjin Wu, Huacai Chen
Move Loongson-2's GPIO driver to drivers/gpio and add Kconfig options.
Acked-by: Ralf Baechle <ralf@linux-mips.org>
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 c1e2ca3..6454160 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -499,6 +499,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 bdda6a9..1b5be76 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] 11+ messages in thread
* [PATCH 3/3] GPIO: Add Loongson-3A/3B GPIO driver support
2015-03-26 2:34 [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver Huacai Chen
2015-03-26 2:34 ` [PATCH 2/3] MIPS: Move Loongson GPIO driver to drivers/gpio Huacai Chen
@ 2015-03-26 2:34 ` Huacai Chen
2015-03-31 14:45 ` Alexandre Courbot
2015-03-27 10:29 ` [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver Linus Walleij
2015-04-07 9:11 ` Linus Walleij
3 siblings, 1 reply; 11+ messages in thread
From: Huacai Chen @ 2015-03-26 2:34 UTC (permalink / raw)
To: Linus Walleij
Cc: Alexandre Courbot, linux-gpio, Fuxin Zhang, Zhangjin Wu, Huacai Chen
Improve Loongson-2's GPIO driver to support Loongson-3A/3B, and update
Loongson-3's default config file.
Acked-by: Ralf Baechle <ralf@linux-mips.org>
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 915e689..b2a5827 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -1245,6 +1245,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 6454160..7e8227b 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -500,10 +500,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] 11+ messages in thread
* Re: [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver
2015-03-26 2:34 [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver Huacai Chen
2015-03-26 2:34 ` [PATCH 2/3] MIPS: Move Loongson GPIO driver to drivers/gpio Huacai Chen
2015-03-26 2:34 ` [PATCH 3/3] GPIO: Add Loongson-3A/3B GPIO driver support Huacai Chen
@ 2015-03-27 10:29 ` Linus Walleij
2015-03-27 10:48 ` 陈华才
2015-04-07 9:11 ` Linus Walleij
3 siblings, 1 reply; 11+ messages in thread
From: Linus Walleij @ 2015-03-27 10:29 UTC (permalink / raw)
To: Huacai Chen; +Cc: Alexandre Courbot, linux-gpio, Fuxin Zhang, Zhangjin Wu
On Thu, Mar 26, 2015 at 3:34 AM, 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.
>
> Acked-by: Ralf Baechle <ralf@linux-mips.org>
> Signed-off-by: Huacai Chen <chenhc@lemote.com>
Looks neat, and I do want to collect GPIO drivers into drivers/gpio if
possible.
Can I take this patch in the GPIO tree or do you want it in
through the MIPS tree?
In the latter case Acked-by: Linus Walleij <linus.walleij@linaro.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver
2015-03-27 10:29 ` [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver Linus Walleij
@ 2015-03-27 10:48 ` 陈华才
0 siblings, 0 replies; 11+ messages in thread
From: 陈华才 @ 2015-03-27 10:48 UTC (permalink / raw)
To: Linus Walleij; +Cc: Alexandre Courbot, linux-gpio, Fuxin Zhang, wuzhangjin
Hi, Linus,
Both Ralf and me think it is better to merged in GPIO tree.
Huacai
------------------ Original ------------------
From: "Linus Walleij"<linus.walleij@linaro.org>;
Date: Fri, Mar 27, 2015 06:29 PM
To: "Huacai Chen"<chenhc@lemote.com>;
Cc: "Alexandre Courbot"<gnurou@gmail.com>; "linux-gpio@vger.kernel.org"<linux-gpio@vger.kernel.org>; "Fuxin Zhang"<zhangfx@lemote.com>; "wuzhangjin"<wuzhangjin@gmail.com>;
Subject: Re: [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver
On Thu, Mar 26, 2015 at 3:34 AM, 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.
>
> Acked-by: Ralf Baechle <ralf@linux-mips.org>
> Signed-off-by: Huacai Chen <chenhc@lemote.com>
Looks neat, and I do want to collect GPIO drivers into drivers/gpio if
possible.
Can I take this patch in the GPIO tree or do you want it in
through the MIPS tree?
In the latter case Acked-by: Linus Walleij <linus.walleij@linaro.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/3] GPIO: Add Loongson-3A/3B GPIO driver support
2015-03-26 2:34 ` [PATCH 3/3] GPIO: Add Loongson-3A/3B GPIO driver support Huacai Chen
@ 2015-03-31 14:45 ` Alexandre Courbot
2015-04-01 1:19 ` 陈华才
0 siblings, 1 reply; 11+ messages in thread
From: Alexandre Courbot @ 2015-03-31 14:45 UTC (permalink / raw)
To: Huacai Chen; +Cc: Linus Walleij, linux-gpio, Fuxin Zhang, Zhangjin Wu
On Thu, Mar 26, 2015 at 11:34 AM, Huacai Chen <chenhc@lemote.com> wrote:
> Improve Loongson-2's GPIO driver to support Loongson-3A/3B, and update
> Loongson-3's default config file.
>
> Acked-by: Ralf Baechle <ralf@linux-mips.org>
> 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 915e689..b2a5827 100644
> --- a/arch/mips/Kconfig
> +++ b/arch/mips/Kconfig
> @@ -1245,6 +1245,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 6454160..7e8227b 100644
> --- a/drivers/gpio/Kconfig
> +++ b/drivers/gpio/Kconfig
> @@ -500,10 +500,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);
This driver does not have a probe function and its device is added by
this initcall. I am ok with this but in that case, isn't it illegal to
allow the driver to be compiled as a module, like your patch 2/3 does?
As a future work, it would be nice to convert this to a platform
driver, unless the GPIOs are needed too early in the system's
lifecycle.
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/3] GPIO: Add Loongson-3A/3B GPIO driver support
2015-03-31 14:45 ` Alexandre Courbot
@ 2015-04-01 1:19 ` 陈华才
0 siblings, 0 replies; 11+ messages in thread
From: 陈华才 @ 2015-04-01 1:19 UTC (permalink / raw)
To: Alexandre Courbot; +Cc: Linus Walleij, linux-gpio, Fuxin Zhang, wuzhangjin
Hi, Alexandre
Yes, the GPIO is needed very early, I will send new paches to replace 'tristate' with 'bool'. Thanks.
Huacai
------------------ Original ------------------
From: "Alexandre Courbot"<gnurou@gmail.com>;
Date: Tue, Mar 31, 2015 10:45 PM
To: "Huacai Chen"<chenhc@lemote.com>;
Cc: "Linus Walleij"<linus.walleij@linaro.org>; "linux-gpio@vger.kernel.org"<linux-gpio@vger.kernel.org>; "Fuxin Zhang"<zhangfx@lemote.com>; "wuzhangjin"<wuzhangjin@gmail.com>;
Subject: Re: [PATCH 3/3] GPIO: Add Loongson-3A/3B GPIO driver support
On Thu, Mar 26, 2015 at 11:34 AM, Huacai Chen <chenhc@lemote.com> wrote:
> Improve Loongson-2's GPIO driver to support Loongson-3A/3B, and update
> Loongson-3's default config file.
>
> Acked-by: Ralf Baechle <ralf@linux-mips.org>
> 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 915e689..b2a5827 100644
> --- a/arch/mips/Kconfig
> +++ b/arch/mips/Kconfig
> @@ -1245,6 +1245,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 6454160..7e8227b 100644
> --- a/drivers/gpio/Kconfig
> +++ b/drivers/gpio/Kconfig
> @@ -500,10 +500,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);
This driver does not have a probe function and its device is added by
this initcall. I am ok with this but in that case, isn't it illegal to
allow the driver to be compiled as a module, like your patch 2/3 does?
As a future work, it would be nice to convert this to a platform
driver, unless the GPIOs are needed too early in the system's
lifecycle.
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver
2015-03-26 2:34 [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver Huacai Chen
` (2 preceding siblings ...)
2015-03-27 10:29 ` [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver Linus Walleij
@ 2015-04-07 9:11 ` Linus Walleij
3 siblings, 0 replies; 11+ messages in thread
From: Linus Walleij @ 2015-04-07 9:11 UTC (permalink / raw)
To: Huacai Chen; +Cc: Alexandre Courbot, linux-gpio, Fuxin Zhang, Zhangjin Wu
On Thu, Mar 26, 2015 at 3:34 AM, 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.
>
> Acked-by: Ralf Baechle <ralf@linux-mips.org>
> Signed-off-by: Huacai Chen <chenhc@lemote.com>
Patch applied to the GPIO tree.
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] MIPS: Move Loongson GPIO driver to drivers/gpio
2015-03-26 2:34 ` [PATCH 2/3] MIPS: Move Loongson GPIO driver to drivers/gpio Huacai Chen
@ 2015-04-07 9:12 ` Linus Walleij
0 siblings, 0 replies; 11+ messages in thread
From: Linus Walleij @ 2015-04-07 9:12 UTC (permalink / raw)
To: Huacai Chen; +Cc: Alexandre Courbot, linux-gpio, Fuxin Zhang, Zhangjin Wu
On Thu, Mar 26, 2015 at 3:34 AM, Huacai Chen <chenhc@lemote.com> wrote:
> Move Loongson-2's GPIO driver to drivers/gpio and add Kconfig options.
>
> Acked-by: Ralf Baechle <ralf@linux-mips.org>
> Signed-off-by: Huacai Chen <chenhc@lemote.com>
Patch applied to the GPIO tree.
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] MIPS: Move Loongson GPIO driver to drivers/gpio
2015-04-01 2:20 ` [PATCH 2/3] MIPS: Move Loongson GPIO driver to drivers/gpio Huacai Chen
@ 2015-04-07 9:16 ` Linus Walleij
0 siblings, 0 replies; 11+ messages in thread
From: Linus Walleij @ 2015-04-07 9:16 UTC (permalink / raw)
To: Huacai Chen; +Cc: Alexandre Courbot, linux-gpio, Fuxin Zhang, Zhangjin Wu
On Wed, Apr 1, 2015 at 4:20 AM, Huacai Chen <chenhc@lemote.com> wrote:
> Move Loongson-2's GPIO driver to drivers/gpio and add Kconfig options.
>
> Acked-by: Ralf Baechle <ralf@linux-mips.org>
> Signed-off-by: Huacai Chen <chenhc@lemote.com>
This v2 patch applied.
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/3] MIPS: Move Loongson GPIO driver to drivers/gpio
2015-04-01 2:20 Huacai Chen
@ 2015-04-01 2:20 ` Huacai Chen
2015-04-07 9:16 ` Linus Walleij
0 siblings, 1 reply; 11+ messages in thread
From: Huacai Chen @ 2015-04-01 2:20 UTC (permalink / raw)
To: Linus Walleij
Cc: Alexandre Courbot, linux-gpio, Fuxin Zhang, Zhangjin Wu, Huacai Chen
Move Loongson-2's GPIO driver to drivers/gpio and add Kconfig options.
Acked-by: Ralf Baechle <ralf@linux-mips.org>
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 c1e2ca3..6454160 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -499,6 +499,12 @@ config GPIO_GRGPIO
Select this to support Aeroflex Gaisler GRGPIO cores from the GRLIB
VHDL IP core library.
+config GPIO_LOONGSON
+ bool "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 bdda6a9..1b5be76 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] 11+ messages in thread
end of thread, other threads:[~2015-04-07 9:16 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-26 2:34 [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver Huacai Chen
2015-03-26 2:34 ` [PATCH 2/3] MIPS: Move Loongson GPIO driver to drivers/gpio Huacai Chen
2015-04-07 9:12 ` Linus Walleij
2015-03-26 2:34 ` [PATCH 3/3] GPIO: Add Loongson-3A/3B GPIO driver support Huacai Chen
2015-03-31 14:45 ` Alexandre Courbot
2015-04-01 1:19 ` 陈华才
2015-03-27 10:29 ` [PATCH 1/3] MIPS: Cleanup Loongson-2F's gpio driver Linus Walleij
2015-03-27 10:48 ` 陈华才
2015-04-07 9:11 ` Linus Walleij
2015-04-01 2:20 Huacai Chen
2015-04-01 2:20 ` [PATCH 2/3] MIPS: Move Loongson GPIO driver to drivers/gpio Huacai Chen
2015-04-07 9:16 ` Linus Walleij
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.