Alles was gpio_is_valid() tut, ist schauen, ob der übergebene Pin >= 0
und < ARCH_NR_GPIO ist.
Der generische ARM code definiert ARCH_NR_GPIO mit CONFIG_ARCH_NR_GPIO.
CONFIG_ARCH_NR_GPIO wiederum kann man in der kernel config beim
compilieren festlegen.
In der raspberry pi defconfig wird CONFIG_ARCH_NR_GPIO aber nicht
festgelegt, und daher mit 0 belegt. Deshalb ist bei meinem selber
compilierten kernel ARCH_NR_GPIO ebenfalls 0.
Ich gehe davon aus, dass dies bei den offiziellen Kerneln genauso ist.
gpio_is_valid() prüft also ob dein übergebener Pin >= 0 && < 0 ist.
Ohne kernel neu compilieren wird gpio_is_valid() also immer false
liefern.
Wenn dein PIN aber tatsächlich ungültig wäre, würde gpio_request() schon
einen Fehler liefern, wodurch dein gpio_is_valid() sowieso redundant
ist.
Edit: Und dein gpio_request() failure könnte dadurch auftreten, dass du
den gpio pin schon vorher requested hast, dann aber nicht freigegeben.
Siehst du diese Meldung auch nach einem reboot?