这里介绍一下imx6q平台的gpio配置方式,如下图所示为原理图(从原理图中可看到每个引脚的名称)。
比如引脚名称为GPIO_16,打开kernel_imx/arch/arm/boot/dts/imx6q-pinfunc.h文件,搜索GPIO_16,可看到如下结果
<mux_reg conf_reg input_reg mux_mode input_val>
#define MX6QDL_PAD_GPIO_16__ESAI_TX3_RX2 0x248 0x618 0x880 0x0 0x1 #define MX6QDL_PAD_GPIO_16__ENET_1588_EVENT2_IN 0x248 0x618 0x000 0x1 0x0 #define MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x248 0x618 0x83c 0x2 0x1 #define MX6QDL_PAD_GPIO_16__SD1_LCTL 0x248 0x618 0x000 0x3 0x0 #define MX6QDL_PAD_GPIO_16__SPDIF_IN 0x248 0x618 0x914 0x4 0x3 #define MX6QDL_PAD_GPIO_16__GPIO7_IO11 0x248 0x618 0x000 0x5 0x0 #define MX6QDL_PAD_GPIO_16__I2C3_SDA 0x248 0x618 0x8ac 0x6 0x2 #define MX6QDL_PAD_GPIO_16__JTAG_DE_B 0x248 0x618 0x000 0x7 0x0
这是引脚这个引脚可设置成7中种功能中的一种,这里以设置成普通的GPIO口为例。
打开kernel_imx/arch/arm/boot/dts/imx6qdl-sabresd.dtsi,找到iomuxc节点,添加
MX6QDL_PAD_GPIO_16__GPIO7_IO11 0x80000000即可配置成普通IO模式。
MX6QDL_PAD_GPIO_16__GPIO7_IO11代表第7组gpio中的第11个gpio口,其中每组32个gpio口.
在驱动中使用gpio_request时,io端口号为IMX_GPIO_NR(7,11)=32×(7-1)+11=203;
在arch/arm/mach-imx/hardware.h,IMX_GPIO_NR定义为
#define IMX_GPIO_NR(bank, nr) (((bank) - 1) * 32 + (nr))