修改一个已经被驱动占用的管脚,将其修改为普通gpio

这里使用天嵌的e9v2板子,
内核版本4.1.15
以下使用EIM_D28为例介绍修改一个被驱动占用的管脚,将其修改为普通gpio
1.在 imx6q-pinfunc.h 文件中搜索 EIM_D28,搜索的结果如下所示:

#define MX6QDL_PAD_EIM_D28__EIM_DATA28              0x0c4 0x3d8 0x000 0x0 0x0
#define MX6QDL_PAD_EIM_D28__I2C1_SDA                0x0c4 0x3d8 0x89c 0x1 0x0
#define MX6QDL_PAD_EIM_D28__ECSPI4_MOSI             0x0c4 0x3d8 0x000 0x2 0x0
#define MX6QDL_PAD_EIM_D28__IPU2_CSI1_DATA12        0x0c4 0x3d8 0x8b8 0x3 0x0
#define MX6QDL_PAD_EIM_D28__UART2_CTS_B             0x0c4 0x3d8 0x000 0x4 0x0
#define MX6QDL_PAD_EIM_D28__UART2_RTS_B             0x0c4 0x3d8 0x924 0x4 0x0
#define MX6QDL_PAD_EIM_D28__UART2_DTE_CTS_B         0x0c4 0x3d8 0x924 0x4 0x0
#define MX6QDL_PAD_EIM_D28__UART2_DTE_RTS_B         0x0c4 0x3d8 0x000 0x4 0x0
#define MX6QDL_PAD_EIM_D28__GPIO3_IO28              0x0c4 0x3d8 0x000 0x5 0x0
#define MX6QDL_PAD_EIM_D28__IPU1_EXT_TRIG           0x0c4 0x3d8 0x000 0x6 0x0
#define MX6QDL_PAD_EIM_D28__IPU1_DI0_PIN13          0x0c4 0x3d8 0x000 0x7 0x0

从搜索可以看出,EIM_D28对应的GPIO是GPIO3_IO28管脚
2.打开 arch/arm/boot/dts/目录下的 e9v2qdl-sabresd.dtsi(e9 板卡使用),imx6qdl-sabresd.dtsi(imx6q corec 板卡使用)文件,搜索 EIM_D28,

pinctrl_uart2: uart2grp {
             fsl,pins = <  
                MX6QDL_PAD_EIM_D26__UART2_TX_DATA   0x1b0b1  
                MX6QDL_PAD_EIM_D27__UART2_RX_DATA   0x1b0b1  
			  MX6QDL_PAD_EIM_D28__UART2_CTS_B 0x1b0b1  
              MX6QDL_PAD_EIM_D29__UART2_RTS_B 0x1b0b1 

可知 EIM_D28 被用于串口 2.
搜索pinctrl_uart2将其注释掉

 /*
&uart2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart2>;
	status = "okay";
};
*/

5.将 EIM_D26 配置成 gpio:
搜索 imx6qdl-sabresd,在组里面添加步骤 1搜索到的 gpio,MX6QDL_PAD_EIM_D28__GPIO3_IO28

imx6qdl-sabresd {
	pinctrl_hog: hoggrp {
		fsl,pins = <
		...
			MX6QDL_PAD_EIM_D28__GPIO3_IO28 0x80000000	/*AWD  EIM_D28*/
			MX6QDL_PAD_EIM_D29__GPIO3_IO29  0x80000000	/*AWD  EIM_D29*/
			MX6QDL_PAD_SD3_DAT2__GPIO7_IO06 0x80000000	/*AWD  SD3_DAT2*/
			MX6QDL_PAD_SD3_DAT3__GPIO7_IO07 0x80000000	/*AWD  SD3_DAT3*/
			MX6QDL_PAD_SD3_CMD__GPIO7_IO02 0x80000000	/*AWD  SD3_CMD*/
			MX6QDL_PAD_EIM_A25__GPIO5_IO02 0x80000000	/*AWD  EIM_A25*/
			MX6QDL_PAD_SD3_CLK__GPIO7_IO03 0x80000000	/*AWD  SD3_CLK*/
			MX6QDL_PAD_SD3_DAT0__GPIO7_IO04 0x80000000	/*AWD  SD3_DAT0*/
			MX6QDL_PAD_SD3_DAT1__GPIO7_IO05 0x80000000	/*AWD  SD3_DAT1*/
			MX6QDL_PAD_SD1_DAT1__GPIO1_IO17  0x80000000	/*AWD  PWM3*/
			MX6QDL_PAD_SD1_CMD__GPIO1_IO18 0x80000000	/*AWD  PWM4*/
		>;
	};

然后重新编译,将修改后的设备树烧写进去即可。

应用层测试:

echo 92 > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio92/direction
echo 1 > /sys/class/gpio/gpio92/value
echo 1 > /sys/class/gpio/gpio92/value

使用万用表测量电压变化

你可能感兴趣的:(linux)