Skip to contentSkip to conversation

include/asm-generic/gpio.h: remove the call for __gpio_get_value() and __gpio_set_value() when GPIOLIB disabled

PATCH NAK Chen Gang 2 participants 3 messages Aug 26, 2013 – Aug 30, 2013

Subsystems (2)
lore
Share & tools
lore

Chen Gang

author
#0 lore raw

PATCH 1/1 include/asm-generic/gpio.h: remove the call for __gpio_get_value() and __gpio_set_value() when GPIOLIB disabled

When GPIOLIB disabled, __gpio_get_value() and __gpio_set_value() will not implement, so need remove them, or compiling fails.

e.g. (allmodconfig for h8300)

    CC      arch/h8300/kernel/h8300_ksyms.o
  In file included from arch/h8300/include/generated/asm/gpio.h:1:0,
                   from arch/h8300/kernel/h8300_ksyms.c:17:
  include/asm-generic/gpio.h: In function 'gpio_get_value_cansleep':
  include/asm-generic/gpio.h:270:2: error: implicit declaration of function '__gpio_get_value' [-Werror=implicit-function-declaration]
    return __gpio_get_value(gpio);
    ^

For __gpio_get_value(), according to its implementation, it is enough to use "return 0" instead of, and for __gpio_set_value(), just remove directly.

---
 include/asm-generic/gpio.h |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)
include/asm-generic/gpio.h +1 -2
index bde6469..10a2853 100644
@@ -267,13 +267,12 @@ static inline int gpio_cansleep(unsigned gpio)
 static inline int gpio_get_value_cansleep(unsigned gpio)
 {
 	might_sleep();
-	return __gpio_get_value(gpio);
+	return 0;
 }
 
 static inline void gpio_set_value_cansleep(unsigned gpio, int value)
 {
 	might_sleep();
-	__gpio_set_value(gpio, value);
 }
 
 #endif /* !CONFIG_GPIOLIB */
Signature · 1 line
1.7.7.6
#1 lore raw
Quoted 13 lines · Chen Gang

When GPIOLIB disabled, __gpio_get_value() and __gpio_set_value() will not implement, so need remove them, or compiling fails.

e.g. (allmodconfig for h8300)

    CC      arch/h8300/kernel/h8300_ksyms.o
  In file included from arch/h8300/include/generated/asm/gpio.h:1:0,
                   from arch/h8300/kernel/h8300_ksyms.c:17:
  include/asm-generic/gpio.h: In function 'gpio_get_value_cansleep':
  include/asm-generic/gpio.h:270:2: error: implicit declaration of function '__gpio_get_value' [-Werror=implicit-function-declaration]
    return __gpio_get_value(gpio);
    ^
Quoted 6 lines

For __gpio_get_value(), according to its implementation, it is enough to use "return 0" instead of, and for __gpio_set_value(), just remove directly.

NAK, this is not how you do it. This fallback path is for GENERIC_GPIO without GPIOLIB. Including it from a file indicates that you *are* using GENERIC_GPIO when GPIOLIB is not activated. It can not be used to stub out gpiolib.

This is a better alternative: let h8300 select
ARCH_HAVE_CUSTOM_GPIO_H

This is quite common:

$ git grep ARCH_HAVE_CUSTOM_GPIO_H
arch/arm/Kconfig:       select ARCH_HAVE_CUSTOM_GPIO_H
arch/avr32/Kconfig:     select ARCH_HAVE_CUSTOM_GPIO_H
arch/blackfin/Kconfig:  select ARCH_HAVE_CUSTOM_GPIO_H
arch/m68k/Kconfig.cpu:  select ARCH_HAVE_CUSTOM_GPIO_H
arch/mips/Kconfig:      select ARCH_HAVE_CUSTOM_GPIO_H
arch/sh/Kconfig:        select ARCH_HAVE_CUSTOM_GPIO_H
arch/unicore32/Kconfig: select ARCH_HAVE_CUSTOM_GPIO_H

Then put your stubs for __gpio_get_value() etc in
arch/h8300/include/asm/gpio.h

This way the h8300 will have a stub implementation if GPIOLIB is not selected.

Be sure to put a comment about this in that file.

Note: I'm still a bit rookie as GPIO maintainer so if Grant or Russell tells me I'm telling you wrong things: listen to them.

Yours,
Linus Walleij

author
#2 lore raw
Quoted 20 lines · Linus Walleij
Quoted 18 lines · Chen Gang

When GPIOLIB disabled, __gpio_get_value() and __gpio_set_value() will not implement, so need remove them, or compiling fails.

e.g. (allmodconfig for h8300)

    CC      arch/h8300/kernel/h8300_ksyms.o
  In file included from arch/h8300/include/generated/asm/gpio.h:1:0,
                   from arch/h8300/kernel/h8300_ksyms.c:17:
  include/asm-generic/gpio.h: In function 'gpio_get_value_cansleep':
  include/asm-generic/gpio.h:270:2: error: implicit declaration of function '__gpio_get_value' [-Werror=implicit-function-declaration]
    return __gpio_get_value(gpio);
    ^

For __gpio_get_value(), according to its implementation, it is enough to use "return 0" instead of, and for __gpio_set_value(), just remove directly.

Quoted 7 lines
Quoted 1 line

NAK, this is not how you do it. This fallback path is for GENERIC_GPIO without GPIOLIB. Including it from a file indicates that you *are* using GENERIC_GPIO when GPIOLIB is not activated. It can not be used to stub out gpiolib.

Hmm... what you said above sounds reasonable to me (at least, it can be acceptable).

Quoted 13 lines

This is a better alternative: let h8300 select
ARCH_HAVE_CUSTOM_GPIO_H

This is quite common:

$ git grep ARCH_HAVE_CUSTOM_GPIO_H
arch/arm/Kconfig:       select ARCH_HAVE_CUSTOM_GPIO_H
arch/avr32/Kconfig:     select ARCH_HAVE_CUSTOM_GPIO_H
arch/blackfin/Kconfig:  select ARCH_HAVE_CUSTOM_GPIO_H
arch/m68k/Kconfig.cpu:  select ARCH_HAVE_CUSTOM_GPIO_H
arch/mips/Kconfig:      select ARCH_HAVE_CUSTOM_GPIO_H
arch/sh/Kconfig:        select ARCH_HAVE_CUSTOM_GPIO_H
arch/unicore32/Kconfig: select ARCH_HAVE_CUSTOM_GPIO_H
Quoted 8 lines

Then put your stubs for __gpio_get_value() etc in
arch/h8300/include/asm/gpio.h

This way the h8300 will have a stub implementation if GPIOLIB is not selected.

Be sure to put a comment about this in that file.

That sounds a standard way for it, thanks.

Hmm... but for h8300, it seems it may not include "gpio.h" which is just discussing about it with Geert in another thread (it seems what he said is correct, and now I am just proving it).

Thanks.

Quoted 3 lines

Note: I'm still a bit rookie as GPIO maintainer so if Grant or Russell tells me I'm telling you wrong things: listen to them.

Thank you for your modesty and honesty.

And welcome other members' suggestions or completions.

Thanks.

Quoted 4 lines

Yours,
Linus Walleij

Signature · 1 line
Chen Gang