Question

Je travaille avec l'arbre de périphérique du noyau Linux et à première vue, il semble y avoir une fonctionnalité manquante pour les nœuds avec plusieurs parents d'interruption. J'ai un pilote qui contrôlait une carte intégrée à bras personnalisée, il prend GPIOS et PIN interruptions de plusieurs parents d'interruption GPIO et gère la batterie à bord, la tension basse IRQS, RESET_PETEND IRQ, etc.

J'ai trouvé une source où quelqu'un semble avoir piraté dans des fonctionnalités supplémentaires pour traiter cela, mais ce n'est pas officiel et implique la modification des fichiers source d'interruption que je ne veux pas. La modification ajout de la prise en charge d'un terme appelé "interruptions" étendues "comme celle-ci. Ici, le parent d'interruption est spécifié dans les tuples.

    #interrupt-cells = <2>;
    interrupts-extended = <&gpio3 21 1>, <&gpio7 13 2>; /* voltage/reset irq */

Je n'ai trouvé aucun moyen ni exemple de la manière d'utiliser la propriété d'interruption-carte pour obtenir une simple cartographie d'interruption GPIO, donc je suis une perte là-bas.

Si je n'utilisais qu'un seul parent d'interruption GPIO, le moyen approprié de le faire serait comme ça.

interrupt-parent = <&gpio1>;
interrupts = <9 2>, <8,1>;

Mais cela permet uniquement de déclarer un parent d'interruption avec plusieurs interruptions spécifiées dans "interruptions" et ils doivent tous appartenir au parent spécifié. J'utilise 2 parents d'interruption, GPIO7 et GPIO3.

Quelle est la bonne façon de mettre en œuvre plusieurs interruptions avec différents parents d'interruption dans un seul noeud de périphérique dans l'arborescence de périphérique?

Était-ce utile?

La solution

Je ne sais pas si cela fonctionne pour les parents d'interruption GPIO, mais pour d'autres types de contrôleurs d'interruption, vous utilisez la propriété "Interrupt-map" et spécifiez la liste des interruptions à l'aide de PHANTLES à chacun des contrôleurs distincts.Voici un exemple que j'ai vu où le pilote avait besoin de 3 interruptions, 2 à partir du contrôleur "IntC" et 1 du contrôleur "SPMI":

interrupts = <0 1 2>;
interrupt-map = <0 &intc 0 134 0
                 1 &intc 0 140 0
                 2 &spmi 0 0x9 0 0>;
interrupt-names = "core_irq", "async_irq", "pmic_id_irq";
interrupt-map-mask = <0 0 0 0>;

Dans cet exemple, le nœud IntC avait une valeur de cellules d'interruption # de <3> et le nœud SPMI avait une valeur de cellules d'interruption de 4 (ce qui signifie que de nombreux arguments devaient être utilisés avec leurs pôles respectifs).

Le champ des noms d'interruption est facultatif, mais vous permet de demander à l'IRQ par son nom au lieu de numéroter dans le code (c.-à-d. Utiliser plate-forme_get_irq_byname (), au lieu de plateforme_get_irq ())

Pour être honnête, je suis un peu sûr de ce qu'est l'interruption-masque est utilisé pour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top