IMX6ULL的GPIO子系统驱动代码说明

一.  简介

前面几篇文章简单了解了 Linux设备树文件中的 GPIO设备节点信息。

本文简单了解一下  Linux内核源码中,有关 GPIO子系统的驱动实现。本文继续以 I.MX6ULL-ALPHA 开发板上的 UART1_RTS_B SD 卡的检测引脚)为例,分析GPIO子系统的驱动实现。

注意:本小节会涉及到 Linux 驱动分层与分离、平台设备驱动等还未讲解的知识,所以本小节教
程可以不用看,不会影响后续的实验。

二.  IMX6ULL的GPIO子系统驱动

通过前面几篇文章学习,I.MX6ULL-ALPHA 开发板上的 SD 卡的检测引脚(即UART1_RTS_B)所使用的GPIO为 GPIO1_IO19。也就是 GPIO1组。

打开 imx6ull.dtsi,找到 GPIO1的设备节点信息:

gpio1: gpio@0209c000 {
	    compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio";
		reg = <0x0209c000 0x4000>;
		interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>,
		    <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
};

gpio1 节点的 compatible 属性描述了兼容性,在 Linux 内核中搜索这两个字符串:

“fsl,imx6ul-gpio” 
“fsl,imx35-gpio” 

查找 GPIO 驱动代码实现。可以在 drivers/gpio/gpio-mxc.c文件中匹配到, gpio-mxc.c 就是 I.MX6ULL GPIO 驱动文件。

gpio-mxc.c 文件中有如下所示 of_device_id 匹配表:

static const struct of_device_id mxc_gpio_dt_ids[] = {
	{ .compatible = "fsl,imx1-gpio", .data = &mxc_gpio_devtype[IMX1_GPIO], },
	{ .compatible = "fsl,imx21-gpio", .data = &mxc_gpio_devtype[IMX21_GPIO], },
	{ .compatible = "fsl,imx31-gpio", .data = &mxc_gpio_devtype[IMX31_GPIO], },
	{ .compatible = "fsl,imx35-gpio", .data = &mxc_gpio_devtype[IMX35_GPIO], },
	{ /* sentinel */ }
};
156 行的 compatible 值为“ fsl,imx35-gpio ”,和 gpio1 compatible 属性匹配,因此 gpio-mxc.c 就是 I.MX6ULL GPIO 控制器驱动文件。 gpio-mxc.c 所在的目录为 drivers/gpio ,打开这 个目录可以看到很多芯片的 gpio 驱动文件, “ gpiolib ” 开始的文件是 gpio 驱动的核心文件。

我们重点来看一下 gpio-mxc.c 这个文件,在 gpio-mxc.c 文件中,有如下所示内容:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值