0

Je n'arrive pas à réveiller k70 (Kinetis) du sommeil profond VLPS par interruption GPIO.réveille k70 du sommeil profond VLPS par interruption GPIO

Ceci est sous uCLinux, où j'ai activé CONFIG_PM. Après cela, je peux mettre K70 en veille profonde par "echo mem>/sys/power/state" et le réveiller de la console de débogage UART. Mais je ne peux pas me réveiller en déclenchant l'interruption GPIO. J'ai confirmé que l'interruption fonctionne avant et après le sommeil en imprimant à partir du gestionnaire d'interruption et j'ai également confirmé que la valeur de la broche GPIO change de 0 à 1 pendant le sommeil après que j'ai déclenché l'interruption GPIO. Selon le manuel de K70, je devrais être capable de réveiller VLPS par une interruption GPIO. Est-ce que quelqu'un a une idée de pourquoi je ne pouvais pas?

Merci

Répondre

1

Tout d'abord, votre pilote GPIO devraient mettre en œuvre la puce IRQ. (De la description ci-dessus je n'ai aucune idée quelle est la plate-forme et quel est le pilote GPIO est utilisé là-bas). Deuxièmement, l'implémentation de la puce IRQ doit avoir un rappel ->irq_set_wake() pour être présent et correctement implémenté.

En troisième lieu, l'appelant, qui ne se GPIO ligne via gpiod_get() doit effectuer:

struct gpio_desc *gd; 
int irq; 

gd = gpiod_get(...); 
if (IS_ERR(gd)) 
    return PTR_ERR(gd); 

irq = gpiod_to_irq(gd); 
if (irq < 0) 
    return irq; 

/* Now! */ 
enable_irq_wake(irq); /* This does the trick */