sunxi: gpio: Add support for gpio pins on the AXP209 pmic
Subsystems (4)
PATCH v2 1/1 sunxi: gpio: Add support for gpio pins on the AXP209 pmic
Some boards use GPIO-s on the pmic, one example of this is the A13-OLinuXino board, which uses gpio0 of the axp209 for the lcd-power signal.
This commit adds support for gpio pins on the AXP209 pmic, the sunxi_gpio.c changes are universal, adding gpio support for the other AXP pmics (when necessary) should be a matter of adding the necessary axp_gpio_foo functions to their resp. drivers, and add "#define AXP_GPIO" to their header file.
Note this commit only adds support for the non device-model version of the gpio code, patches for adding support to the device-model version are very welcome.
The string representation for these gpio-s is AXP0-#, the 0 in the AXP0 prefix is there in case we need to support gpio-s on more then 1 pmic in the future. At least A80 boards have 2 pmics, and we may end up needing to support gpio-s on both.
---
Changes in v2:
-Remove duplicate defines for AXP209_GPIO_OUTPUT_LOW / HIGH -Add & improve some comments
--- arch/arm/include/asm/arch-sunxi/gpio.h | 3 ++ drivers/gpio/sunxi_gpio.c | 30 ++++++++++++++ drivers/power/axp209.c | 72 ++++++++++++++++++++++++++++++++++ include/axp209.h | 7 ++++ 4 files changed, 112 insertions(+)
arch/arm/include/asm/arch-sunxi/gpio.h +3 -0
@@ -114,6 +114,7 @@ enum sunxi_gpio_number {SUNXI_GPIO_I_START =SUNXI_GPIO_NEXT (SUNXI_GPIO_H ),SUNXI_GPIO_L_START =352 ,SUNXI_GPIO_M_START =SUNXI_GPIO_NEXT (SUNXI_GPIO_L ), + SUNXI_GPIO_AXP0_START = 1024, };/* SUNXI GPIO number definitions */
@@ -129,6 +130,8 @@ enum sunxi_gpio_number {#define SUNXI_GPL (_nr) (SUNXI_GPIO_L_START + (_nr))#define SUNXI_GPM (_nr) (SUNXI_GPIO_M_START + (_nr)) +#define SUNXI_GPAXP0 (_nr) (SUNXI_GPIO_AXP0_START + (_nr)) +/* GPIO pin function config */ #define SUNXI_GPIO_INPUT 0#define SUNXI_GPIO_OUTPUT 1
drivers/gpio/sunxi_gpio.c +30 -0
@@ -18,6 +18,9 @@#include <asm/io.h> #include <asm/gpio.h> #include <dm/device-internal.h> +#ifdef CONFIG_AXP209_POWER +#include <axp209.h> +#endif DECLARE_GLOBAL_DATA_PTR ;
@@ -73,6 +76,10 @@ int gpio_free(unsigned gpio)int gpio_direction_input (unsigned gpio) { +#ifdef AXP_GPIO +if (gpio >=SUNXI_GPIO_AXP0_START ) +return axp_gpio_direction_input (gpio -SUNXI_GPIO_AXP0_START ); +#endif sunxi_gpio_set_cfgpin (gpio,SUNXI_GPIO_INPUT );return 0 ;
@@ -80,6 +87,11 @@ int gpio_direction_input(unsigned gpio)int gpio_direction_output (unsigned gpio,int value) { +#ifdef AXP_GPIO +if (gpio >=SUNXI_GPIO_AXP0_START ) +return axp_gpio_direction_output (gpio -SUNXI_GPIO_AXP0_START , + value); +#endif sunxi_gpio_set_cfgpin (gpio,SUNXI_GPIO_OUTPUT );return sunxi_gpio_output (gpio, value);
@@ -87,11 +99,19 @@ int gpio_direction_output(unsigned gpio, int value)int gpio_get_value (unsigned gpio) { +#ifdef AXP_GPIO +if (gpio >=SUNXI_GPIO_AXP0_START ) +return axp_gpio_get_value (gpio -SUNXI_GPIO_AXP0_START ); +#endif return sunxi_gpio_input (gpio); }int gpio_set_value (unsigned gpio,int value) { +#ifdef AXP_GPIO +if (gpio >=SUNXI_GPIO_AXP0_START ) +return axp_gpio_set_value (gpio -SUNXI_GPIO_AXP0_START , value); +#endif return sunxi_gpio_output (gpio, value); }
@@ -101,6 +121,16 @@ int sunxi_name_to_gpio(const char *name)int groupsize =9 *32 ;long pin;char *eptr; + +#ifdef AXP_GPIO +if (strncasecmp (name,"AXP0-" ,5 ) ==0 ) { + name +=5 ; + pin =simple_strtol (name, &eptr,10 ); +if (!*name || *eptr) +return -1 ; +return SUNXI_GPIO_AXP0_START + pin; + } +#endif if (*name =='P' || *name =='p' ) name++;if (*name >='A' ) {
drivers/power/axp209.c +72 -0
87 lines not on this page · raw message
include/axp209.h +7 -0
@@ -4,6 +4,8 @@* SPDX-License-Identifier: GPL-2.0+ */ +#define AXP_GPIO +extern int axp209_set_dcdc2 (int mvolt);extern int axp209_set_dcdc3 (int mvolt);extern int axp209_set_ldo2 (int mvolt);
@@ -12,3 +14,8 @@ extern int axp209_set_ldo4(int mvolt);extern int axp209_init (void );extern int axp209_poweron_by_dc (void );extern int axp209_power_button (void ); + +extern int axp_gpio_direction_input (unsigned int pin); +extern int axp_gpio_direction_output (unsigned int pin,unsigned int val); +extern int axp_gpio_get_value (unsigned int pin); +extern int axp_gpio_set_value (unsigned int pin,unsigned int val);
Signature · 1 line
2.1.0
PATCH v2 1/1 sunxi: gpio: Add support for gpio pins on the AXP209 pmic
Quoted 12 lines · Hans de Goede
Some boards use GPIO-s on the pmic, one example of this is the A13-OLinuXino board, which uses gpio0 of the axp209 for the lcd-power signal.
This commit adds support for gpio pins on the AXP209 pmic, the
sunxi_gpio.cchanges are universal, adding gpio support for the other AXP pmics (when necessary) should be a matter of adding the necessaryaxp_gpio_foofunctions to their resp. drivers, and add "#defineAXP_GPIO" to their header file.Note this commit only adds support for the non device-model version of the gpio code, patches for adding support to the device-model version are very welcome.
Quoted 6 lines
The string representation for these gpio-s is AXP0-#, the 0 in the AXP0 prefix is there in case we need to support gpio-s on more then 1 pmic in the future. At least A80 boards have 2 pmics, and we may end up needing to support gpio-s on both.
Signed-off-by Hans de Goede <[email protected]>