All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marek Vasut <marek.vasut@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2] M28: Added pin name support in GPIO driver
Date: Wed, 23 Nov 2011 21:24:58 +0100	[thread overview]
Message-ID: <201111232124.58146.marek.vasut@gmail.com> (raw)
In-Reply-To: <031D76D1-A659-4812-820F-2DE6A4B5E453@Delien.nl>

> 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@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

  reply	other threads:[~2011-11-23 20:24 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-23 15:44 [U-Boot] [PATCH v2] M28: Added pin name support in GPIO driver Robert Deliën
2011-11-23 20:24 ` Marek Vasut [this message]
2011-11-23 20:43   ` Robert Deliën
2011-11-23 21:00     ` Marek Vasut
2011-11-23 21:12       ` Robert Deliën

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201111232124.58146.marek.vasut@gmail.com \
    --to=marek.vasut@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.