Patchwork [U-Boot] nios2: add gpio_is_valid

login
register
mail settings
Submitter Thomas Chou
Date Dec. 27, 2010, 2:46 a.m.
Message ID <1293417961-8247-1-git-send-email-thomas@wytron.com.tw>
Download mbox | patch
Permalink /patch/76731/
State Accepted
Commit d8a593c68bac7b9d9b26af6fa8c392671213ce93
Delegated to: Scott McNutt
Headers show

Comments

Thomas Chou - Dec. 27, 2010, 2:46 a.m.
Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
---
 arch/nios2/include/asm/gpio.h            |    6 ++++++
 board/altera/nios2-generic/custom_fpga.h |    1 +
 board/altera/nios2-generic/gpio.c        |    6 ++++++
 3 files changed, 13 insertions(+), 0 deletions(-)
Sergei Shtylyov - Dec. 27, 2010, 11:35 a.m.
Hello.

On 27-12-2010 5:46, Thomas Chou wrote:

> Signed-off-by: Thomas Chou<thomas@wytron.com.tw>
[...]

> diff --git a/arch/nios2/include/asm/gpio.h b/arch/nios2/include/asm/gpio.h
> index 36a7132..4b21c8f 100644
> --- a/arch/nios2/include/asm/gpio.h
> +++ b/arch/nios2/include/asm/gpio.h
> @@ -52,6 +52,11 @@ static inline void gpio_set_value(unsigned gpio, int value)
>   {
>   	writel(value ? 3 : 2, CONFIG_SYS_GPIO_BASE + (gpio<<  2));
>   }
> +
> +static inline int gpio_is_valid(int number)
> +{
> +	return ((unsigned)number) < CONFIG_SYS_GPIO_WIDTH;

    No need to have parens around '(unsigned)number'.

> diff --git a/board/altera/nios2-generic/gpio.c b/board/altera/nios2-generic/gpio.c
> index 8c639ce..4a30564 100644
> --- a/board/altera/nios2-generic/gpio.c
> +++ b/board/altera/nios2-generic/gpio.c
[...]
> @@ -62,4 +63,9 @@ void gpio_set_value(unsigned gpio, int value)
>   		pio_data_reg&= ~mask;
>   	writel(pio_data_reg, ALTERA_PIO_DATA);
>   }
> +
> +int gpio_is_valid(int number)
> +{
> +	return ((unsigned)number) < ALTERA_PIO_WIDTH;

    Same here...

WBR, Sergei
Thomas Chou - Dec. 27, 2010, 2:51 p.m.
On 12/27/2010 07:35 PM, Sergei Shtylyov wrote:
> Hello.
>
> On 27-12-2010 5:46, Thomas Chou wrote:
>
>> Signed-off-by: Thomas Chou<thomas@wytron.com.tw>
> [...]
>
>> diff --git a/arch/nios2/include/asm/gpio.h
>> b/arch/nios2/include/asm/gpio.h
>> index 36a7132..4b21c8f 100644
>> --- a/arch/nios2/include/asm/gpio.h
>> +++ b/arch/nios2/include/asm/gpio.h
>> @@ -52,6 +52,11 @@ static inline void gpio_set_value(unsigned gpio,
>> int value)
>> {
>> writel(value ? 3 : 2, CONFIG_SYS_GPIO_BASE + (gpio<< 2));
>> }
>> +
>> +static inline int gpio_is_valid(int number)
>> +{
>> + return ((unsigned)number) < CONFIG_SYS_GPIO_WIDTH;
>
> No need to have parens around '(unsigned)number'.
>
>> diff --git a/board/altera/nios2-generic/gpio.c
>> b/board/altera/nios2-generic/gpio.c
>> index 8c639ce..4a30564 100644
>> --- a/board/altera/nios2-generic/gpio.c
>> +++ b/board/altera/nios2-generic/gpio.c
> [...]
>> @@ -62,4 +63,9 @@ void gpio_set_value(unsigned gpio, int value)
>> pio_data_reg&= ~mask;
>> writel(pio_data_reg, ALTERA_PIO_DATA);
>> }
>> +
>> +int gpio_is_valid(int number)
>> +{
>> + return ((unsigned)number) < ALTERA_PIO_WIDTH;
>
> Same here...
>
> WBR, Sergei
>

Hi Sergei,

The casting is needed as the arg is type int, and we might use -1 to 
indicate no-such-gpio as they come from linux asm-generic/gpio.h.

Best regards,
Thomas

/*
  * "valid" GPIO numbers are nonnegative and may be passed to
  * setup routines like gpio_request().  only some valid numbers
  * can successfully be requested and used.
  *
  * Invalid GPIO numbers are useful for indicating no-such-GPIO in
  * platform data and other tables.
  */

static inline int gpio_is_valid(int number)
{
	return ((unsigned)number) < ARCH_NR_GPIOS;
}
Scott McNutt - Jan. 18, 2011, 5:19 p.m.
Added to: git://git.denx.de/u-boot-nios.git 'next'

Thank you,
--Scott



Thomas Chou wrote:
> Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
> ---
>  arch/nios2/include/asm/gpio.h            |    6 ++++++
>  board/altera/nios2-generic/custom_fpga.h |    1 +
>  board/altera/nios2-generic/gpio.c        |    6 ++++++
>  3 files changed, 13 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/nios2/include/asm/gpio.h b/arch/nios2/include/asm/gpio.h
> index 36a7132..4b21c8f 100644
> --- a/arch/nios2/include/asm/gpio.h
> +++ b/arch/nios2/include/asm/gpio.h
> @@ -52,6 +52,11 @@ static inline void gpio_set_value(unsigned gpio, int value)
>  {
>  	writel(value ? 3 : 2, CONFIG_SYS_GPIO_BASE + (gpio << 2));
>  }
> +
> +static inline int gpio_is_valid(int number)
> +{
> +	return ((unsigned)number) < CONFIG_SYS_GPIO_WIDTH;
> +}
>  #else
>  extern int gpio_request(unsigned gpio, const char *label);
>  extern int gpio_free(unsigned gpio);
> @@ -59,6 +64,7 @@ extern int gpio_direction_input(unsigned gpio);
>  extern int gpio_direction_output(unsigned gpio, int value);
>  extern int gpio_get_value(unsigned gpio);
>  extern void gpio_set_value(unsigned gpio, int value);
> +extern int gpio_is_valid(int number);
>  #endif /* CONFIG_SYS_GPIO_BASE */
>  
>  #endif /* _ASM_NIOS2_GPIO_H_ */
> diff --git a/board/altera/nios2-generic/custom_fpga.h b/board/altera/nios2-generic/custom_fpga.h
> index a11add5..f7f3853 100644
> --- a/board/altera/nios2-generic/custom_fpga.h
> +++ b/board/altera/nios2-generic/custom_fpga.h
> @@ -50,6 +50,7 @@
>  
>  /* led_pio.s1 is a altera_avalon_pio */
>  #define LED_PIO_BASE 0x82120870
> +#define LED_PIO_WIDTH 8
>  
>  /* high_res_timer.s1 is a altera_avalon_timer */
>  #define CONFIG_SYS_TIMER_BASE 0x82120820
> diff --git a/board/altera/nios2-generic/gpio.c b/board/altera/nios2-generic/gpio.c
> index 8c639ce..4a30564 100644
> --- a/board/altera/nios2-generic/gpio.c
> +++ b/board/altera/nios2-generic/gpio.c
> @@ -10,6 +10,7 @@
>  #ifndef CONFIG_SYS_GPIO_BASE
>  
>  #define ALTERA_PIO_BASE LED_PIO_BASE
> +#define ALTERA_PIO_WIDTH LED_PIO_WIDTH
>  #define ALTERA_PIO_DATA (ALTERA_PIO_BASE + 0)
>  #define ALTERA_PIO_DIR (ALTERA_PIO_BASE + 4)
>  static u32 pio_data_reg;
> @@ -62,4 +63,9 @@ void gpio_set_value(unsigned gpio, int value)
>  		pio_data_reg &= ~mask;
>  	writel(pio_data_reg, ALTERA_PIO_DATA);
>  }
> +
> +int gpio_is_valid(int number)
> +{
> +	return ((unsigned)number) < ALTERA_PIO_WIDTH;
> +}
>  #endif

Patch

diff --git a/arch/nios2/include/asm/gpio.h b/arch/nios2/include/asm/gpio.h
index 36a7132..4b21c8f 100644
--- a/arch/nios2/include/asm/gpio.h
+++ b/arch/nios2/include/asm/gpio.h
@@ -52,6 +52,11 @@  static inline void gpio_set_value(unsigned gpio, int value)
 {
 	writel(value ? 3 : 2, CONFIG_SYS_GPIO_BASE + (gpio << 2));
 }
+
+static inline int gpio_is_valid(int number)
+{
+	return ((unsigned)number) < CONFIG_SYS_GPIO_WIDTH;
+}
 #else
 extern int gpio_request(unsigned gpio, const char *label);
 extern int gpio_free(unsigned gpio);
@@ -59,6 +64,7 @@  extern int gpio_direction_input(unsigned gpio);
 extern int gpio_direction_output(unsigned gpio, int value);
 extern int gpio_get_value(unsigned gpio);
 extern void gpio_set_value(unsigned gpio, int value);
+extern int gpio_is_valid(int number);
 #endif /* CONFIG_SYS_GPIO_BASE */
 
 #endif /* _ASM_NIOS2_GPIO_H_ */
diff --git a/board/altera/nios2-generic/custom_fpga.h b/board/altera/nios2-generic/custom_fpga.h
index a11add5..f7f3853 100644
--- a/board/altera/nios2-generic/custom_fpga.h
+++ b/board/altera/nios2-generic/custom_fpga.h
@@ -50,6 +50,7 @@ 
 
 /* led_pio.s1 is a altera_avalon_pio */
 #define LED_PIO_BASE 0x82120870
+#define LED_PIO_WIDTH 8
 
 /* high_res_timer.s1 is a altera_avalon_timer */
 #define CONFIG_SYS_TIMER_BASE 0x82120820
diff --git a/board/altera/nios2-generic/gpio.c b/board/altera/nios2-generic/gpio.c
index 8c639ce..4a30564 100644
--- a/board/altera/nios2-generic/gpio.c
+++ b/board/altera/nios2-generic/gpio.c
@@ -10,6 +10,7 @@ 
 #ifndef CONFIG_SYS_GPIO_BASE
 
 #define ALTERA_PIO_BASE LED_PIO_BASE
+#define ALTERA_PIO_WIDTH LED_PIO_WIDTH
 #define ALTERA_PIO_DATA (ALTERA_PIO_BASE + 0)
 #define ALTERA_PIO_DIR (ALTERA_PIO_BASE + 4)
 static u32 pio_data_reg;
@@ -62,4 +63,9 @@  void gpio_set_value(unsigned gpio, int value)
 		pio_data_reg &= ~mask;
 	writel(pio_data_reg, ALTERA_PIO_DATA);
 }
+
+int gpio_is_valid(int number)
+{
+	return ((unsigned)number) < ALTERA_PIO_WIDTH;
+}
 #endif