> This patch adds adds adds adds ?
> pin name support in the GPIO driver. With this patch > applied, the gpio command supports pins to be addressed with friendly > names. > > Please note: > Function gpio_name_to_pin checks for set bits getting lost in translation > and returns -EINVAL if this occurs, but a correctly translated name > doesn't automatically produce a valid pin. It only means the bank/pin > numbers fit the designated bitfields. After successful translation, > validity needs to be checked separately. > > Signed-off-by: Robert Deliën <robert at delien.nl> > > diff --git a/arch/arm/include/asm/arch-mx28/gpio.h > b/arch/arm/include/asm/arch-mx28/gpio.h index 36f3be8..1eb54ee 100644 > --- a/arch/arm/include/asm/arch-mx28/gpio.h > +++ b/arch/arm/include/asm/arch-mx28/gpio.h > @@ -26,6 +26,9 @@ > #ifdef CONFIG_MXS_GPIO > void mxs_gpio_init(void); > > +extern int gpio_name_to_pin(const char *name); > +#define gpio_name_to_pin(name) gpio_name_to_pin(name) > + Wasn't this called differently in the previous patch? > extern int gpio_invalid(int gp); > #define gpio_invalid(gpio) gpio_invalid(gpio) > > diff --git a/arch/blackfin/include/asm/gpio.h > b/arch/blackfin/include/asm/gpio.h index 224688f..8128df1 100644 > --- a/arch/blackfin/include/asm/gpio.h > +++ b/arch/blackfin/include/asm/gpio.h > @@ -1,7 +1,24 @@ > /* > - * Copyright 2006-2009 Analog Devices Inc. > + * (C) Copyright 2006-2009 > + * Analog Devices Inc. > * > - * Licensed under the GPL-2 or later. > + * See file CREDITS for list of people who contributed to this > + * project. > + * > + * 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. > + * > + * 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. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > + * MA 02111-1307 USA > */ > > #ifndef __ARCH_BLACKFIN_GPIO_H__ > @@ -199,7 +216,7 @@ static inline int gpio_is_valid(int number) > > #include <linux/ctype.h> > > -static inline int name_to_gpio(const char *name) > +static inline int gpio_name_to_pin(const char *name) > { > int port_base; > > @@ -246,7 +263,7 @@ static inline int name_to_gpio(const char *name) > > return port_base + simple_strtoul(name, NULL, 10); > } > -#define name_to_gpio(n) name_to_gpio(n) > +#define gpio_name_to_pin(n) gpio_name_to_pin(n) I see, make it a series, don't intermix such changes in one patch. > > #define gpio_status() bfin_gpio_labels() > > diff --git a/common/cmd_gpio.c b/common/cmd_gpio.c > index f81c7d8..d214f7a 100644 > --- a/common/cmd_gpio.c > +++ b/common/cmd_gpio.c > @@ -1,9 +1,24 @@ > /* > - * Control GPIO pins on the fly > + * (C) Copyright 2008-2011 > + * Analog Devices Inc. > * > - * Copyright (c) 2008-2011 Analog Devices Inc. > + * See file CREDITS for list of people who contributed to this > + * project. > * > - * Licensed under the GPL-2 or later. > + * 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. > + * > + * 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. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > + * MA 02111-1307 USA > */ > > #include <common.h> > @@ -11,8 +26,8 @@ > > #include <asm/gpio.h> > > -#ifndef name_to_gpio > -#define name_to_gpio(name) simple_strtoul(name, NULL, 10) > +#ifndef gpio_name_to_pin > +#define gpio_name_to_pin(name) simple_strtoul(name, NULL, 10) > #endif > > #ifndef gpio_invalid > @@ -36,13 +51,13 @@ static int do_gpio(cmd_tbl_t *cmdtp, int flag, int > argc, char * const argv[]) #ifdef gpio_status > if (argc == 2 && !strcmp(argv[1], "status")) { > gpio_status(); > - return 0; > + return (0); > } > #endif > > if (argc != 3) > - show_usage: > - return cmd_usage(cmdtp); > + goto show_usage; > + > str_cmd = argv[1]; > str_gpio = argv[2]; > > @@ -56,9 +71,11 @@ static int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, > char * const argv[]) } > > /* turn the gpio name into a gpio number */ > - gpio = name_to_gpio(str_gpio); > - if (gpio < 0) > - goto show_usage; > + gpio = gpio_name_to_pin(str_gpio); > + if (gpio < 0) { > + printf("gpio: unknown pin %s\n", str_gpio); > + return (-1); > + } > > /* check bank and pin number for validity */ > if (gpio_invalid(gpio)) { > @@ -69,7 +86,7 @@ static int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, > char * const argv[]) /* grab the pin before we tweak it */ > if (gpio_request(gpio, "cmd_gpio")) { > printf("gpio: requesting pin %u failed\n", gpio); > - return -1; > + return (-1); > } > > /* finally, let's do it: set direction and exec command */ > @@ -90,7 +107,9 @@ static int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, > char * const argv[]) > > gpio_free(gpio); > > - return value; > + return (value); > +show_usage: > } > > U_BOOT_CMD(gpio, 3, 0, do_gpio, > diff --git a/drivers/gpio/mxs_gpio.c b/drivers/gpio/mxs_gpio.c > index d2e9bac..50a0e6a 100644 > --- a/drivers/gpio/mxs_gpio.c > +++ b/drivers/gpio/mxs_gpio.c > @@ -23,6 +23,7 @@ > * MA 02111-1307 USA > */ > > +#include <linux/ctype.h> > #include <common.h> > #include <netdev.h> > #include <asm/errno.h> > @@ -81,6 +82,45 @@ void mxs_gpio_init(void) > } > } > > +int gpio_name_to_pin(const char *name) > +{ > + int bank; > + int pin; > + > + if (!name) > + return (-EINVAL); > + > + if (name[0] >= '0' && name[0] <= '9') { > + pin = simple_strtoul(name, (char **)&name, 10); > + if (name[0]) > + return (-EINVAL); > + if (pin & ~(MXS_PAD_BANK_MASK | MXS_PAD_PIN_MASK)) > + return (-EINVAL); > + > + return (pin); > + } > + > + if (tolower(name[0]) != 'b') > + return (-EINVAL); > + name++; > + bank = simple_strtoul(name, (char **)&name, 10); > + if (bank & ~(MXS_PAD_BANK_MASK >> MXS_PAD_BANK_SHIFT)) > + return (-EINVAL); > + > + if (tolower(name[0]) != 'p') > + return (-EINVAL); > + name++; > + pin = simple_strtoul(name, (char **)&name, 10); > + if (pin & ~(MXS_PAD_PIN_MASK >> MXS_PAD_PIN_SHIFT)) > + return (-EINVAL); > + > + if (name[0]) > + return (-EINVAL); Why the parenthesis ? > + > + return ( ((bank << MXS_PAD_BANK_SHIFT) & MXS_PAD_BANK_MASK) | > + ((pin << MXS_PAD_PIN_SHIFT ) & MXS_PAD_PIN_MASK ) ); > +} > + > int gpio_invalid(int gp) > { > if ( (gp & ~(MXS_PAD_BANK_MASK | MXS_PAD_PIN_MASK)) || This was there before or are we missing some previous commit here ? M _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot