arm-linux sous-système pinctrl et gpio

pinctrl

pinctrl  est de résoudre la manière traditionnelle de configurer pin est d'exploiter directement le registre correspondant, mais cette configuration

La méthode est plus lourde et sujette à des problèmes
Le travail principal du sous-système pinctrl est le suivant :
①. Obtenez les informations sur les broches dans l'arborescence des périphériques.
②. Définissez la fonction de multiplexage de la broche en fonction des informations de broche obtenues
③. Définissez les caractéristiques électriques de la broche en fonction des informations de broche obtenues, telles que pull-up / pull-down, vitesse, capacité d'entraînement, etc.
Pour nos utilisateurs, nous n'avons qu'à définir les propriétés pertinentes d'une certaine broche dans l'arborescence des appareils et d'autres initiales.
Le travail de transformation est effectué par le sous-système pinctrl , et le répertoire de code source du sous-système pinctrl est drivers/pinctrl .
Trouver un nœud appelé iomuxc
iomuxc : iomuxc@020e0000 { compatible = "fsl,imx6ul-iomuxc" ; reg = < 0x020e0000 0x4000 >;};
& iomuxc ajoute des données au nœud iomuxc
&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog_1>;
imx6ul-evk {
pinctrl_hog_1: hoggrp-1 {
fsl,pins = <
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059
MX6UL_PAD_GPIO1_IO05__USDHC1_VSELECT 0x17059
MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0x17059
MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID 0x13058
>;
};
..
pinctrl_flexcan1: flexcan1grp{
fsl,pins = <
MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX 0x1b020
MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX 0x1b020
>;
};
..
pinctrl_wdog: wdoggrp {
fsl,pins = <
MX6UL_PAD_LCD_RESET__WDOG1_WDOG_ANY 0x30b0
>;
};
};
};
Le sous-nœud pinctrl_hog_1 est une collection de codes PIN liés à l'échange à chaud
Le sous-noeud pinctrl_flexcan1 est le PIN utilisé par le périphérique flexcan1 ,
Le sous-nœud pinctrl_wdog est la broche utilisée par le périphérique wdog .
combiné est
示例代码 45.1.2.3 完整的 iomuxc 节点
 iomuxc: iomuxc@020e0000 {
compatible = "fsl,imx6ul-iomuxc";
 reg = <0x020e0000 0x4000>;
 pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog_1>;
imx6ul-evk {
pinctrl_hog_1: hoggrp-1 {
fsl,pins = <
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059
MX6UL_PAD_GPIO1_IO05__USDHC1_VSELECT 0x17059
MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0x17059
MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID 0x13058
>;
..
};
};
;
Regardez d'abord MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 , il s'agit d'une définition de macro, définie dans le fichier
Dans arch/arm/boot/dts/imx6ul-pinfunc.h , imx6ull.dtsi fera référence au fichier d'en-tête imx6ull-pinfunc.h
sous-système gpio
Comme son nom l'indique, le sous-système est utilisé pour initialiser GPIO et fournir les fonctions API correspondantes , telles que la configuration de GPIO
Pour l'entrée et la sortie, lisez la valeur de GPIO , etc. L'objectif principal du sous-système gpio est de faciliter aux développeurs de pilotes l'utilisation de gpio , drive
Les développeurs ajoutent des informations liées à gpio dans l'arborescence des périphériques , puis ils peuvent utiliser l'API fournie par le sous-système gpio dans le pilote
fonction pour faire fonctionner GPIO , le noyau Linux protège le développeur du pilote du processus de réglage GPIO , ce qui facilite grandement le développement du pilote
L'expéditeur utilise GPIO
1 pinctrl_led : ledgrp {
2 fsl , broches = <
3 MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x10B0 /* LED0 */
4 > ;
5 } ;
1  gpiolé {
2 #adresse - cellules = < 1 > ;
3 #taille - cellules = < 1 > ;
4 compatible = "atkalpha-gpioled"  ;
5 pinctrl - noms = "par défaut" ;
6 pinctrl - 0 = <& pinctrl_led > ;
7 led - gpio = <& gpio1 3 GPIO_ACTIVE_LOW > ;
8 statut = "d'accord"  ;
9 }  ;
Ligne 6 , l'attribut pinctrl-0 définit le noeud pinctrl correspondant au PIN utilisé par la lumière LED .
Ligne 7 , l'attribut led-gpio spécifie le GPIO utilisé par la lumière LED , voici IO03 de GPIO1 , niveau bas
efficace. Lors de l'écriture ultérieure du pilote, le contenu de l'attribut led-gpio sera obtenu pour obtenir le numéro GPIO , car le sous-système gpio
Les fonctions d'opération API traditionnelles nécessitent des numéros GPIO .

Je suppose que tu aimes

Origine blog.csdn.net/L1153413073/article/details/125511373
conseillé
Classement