Hi3519-pinctrl驱动开发②创建mapping table
来源:互联网 发布:java 获取文件路径 编辑:程序博客网 时间:2024/06/09 16:33
参考转载的文章:http://blog.csdn.net/tq384998430/article/details/76269786
Hi3519跑的系统没有使用设备树传递配置信息,所以按照“古老”的方式进行板级的初始化,也就是“Machine Driver”方式,就是在linux系统启动的时候建立pinctrl_map表,pinctrl_map其实就是一个映射consumer driver到pinctrl driver的一个结构体。consumer driver就是系统中使用pinctrl driver提供服务的驱动,例如SDIO driver、IIC driver、LED driver等等都算是consumer driver。pinctrl_map结构体的定义如下:
struct pinctrl_map { const char *dev_name;---使用这个映射条目(mapping entry)的设备名 const char *name;---本mapping entry的名称 enum pinctrl_map_type type;---本mapping entry的映射类型 const char *ctrl_dev_name;---对应的pin controller设备名 union { struct pinctrl_map_mux mux; struct pinctrl_map_configs configs; } data;};
如果结构体中的type为PIN_MAP_TYPE_MUX_GROUP则联合体data表示的是mux,如果是PIN_MAP_TYPE_CONFIGS*则data表示的是configs。先说一下struct pinctrl_map_mux类型:
struct pinctrl_map_mux { const char *group;---对应的group名称 const char *function;---对应的function名称};
这里假设建立一个pinctrl_map对象:
struct pinctrl_map map ={ .dev_name = "spi0", .name = PINCTRL_STATE_DEFAULT, .type = PIN_MAP_TYPE_MUX_GROUP, .ctrl_dev_name = "pinctrl-Hi3519", .data.mux = { .group = "spi0_group", .function = "spi0", }}
创建的map映射条目将spi0设备和pinctrl-Hi3519对应上,同时map type为PIN_MAP_TYPE_MUX_GROUP表示是进行引脚复用映射,映射的引脚组名为spi0_group,功能名为spi0。整个结构体对象的意思就是:“spi0”驱动使用pin controller “pinctrl-Hi3519”提供的服务,并且对应“pinctrl-Hi3519”中的组名为“spi0_group”的组以及功能名为“spi0”的功能。
上面只是建立了一个map,一个系统一般有很多设备使用pin controller提供服务,所以需要建立一个大的map表,一般是建立一个pinctrl_map数组,参考linux源码中U300机器的map表:
static struct pinctrl_map __initdata u300_pinmux_map[] = { /* anonymous maps for chip power and EMIFs */ PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "power"), PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "emif0"), PIN_MAP_MUX_GROUP_HOG_DEFAULT("pinctrl-u300", NULL, "emif1"), /* per-device maps for MMC/SD, SPI and UART */ PIN_MAP_MUX_GROUP_DEFAULT("mmci", "pinctrl-u300", NULL, "mmc0"), PIN_MAP_MUX_GROUP_DEFAULT("pl022", "pinctrl-u300", NULL, "spi0"), PIN_MAP_MUX_GROUP_DEFAULT("uart0", "pinctrl-u300", NULL, "uart0"), /* This pin is used for clock return rather than GPIO */ PIN_MAP_CONFIGS_PIN_DEFAULT("mmci", "pinctrl-u300", "PIO APP GPIO 11", pin_pullup_conf), /* This pin is used for card detect */ PIN_MAP_CONFIGS_PIN_DEFAULT("mmci", "pinctrl-u300", "PIO MS INS", pin_highz_conf),};
我们单看其中的一条mapping entry:
PIN_MAP_MUX_GROUP_DEFAULT("mmci", "pinctrl-u300", NULL, "mmc0"),
其中的PIN_MAP_MUX_GROUP_DEFAULT是一个宏,在文件/include/linux/pinctrl/machine.h文件中定义:
#define PIN_MAP_MUX_GROUP_DEFAULT(dev, pinctrl, grp, func) \ PIN_MAP_MUX_GROUP(dev, PINCTRL_STATE_DEFAULT, pinctrl, grp, func)
PIN_MAP_MUX_GROUP的定义如下:
#define PIN_MAP_MUX_GROUP(dev, state, pinctrl, grp, func) \ { \ .dev_name = dev, \ .name = state, \ .type = PIN_MAP_TYPE_MUX_GROUP, \ .ctrl_dev_name = pinctrl, \ .data.mux = { \ .group = grp, \ .function = func, \ }, \ }
那么这条mapping entry的含义就是pinctrl-u300为设备mmci驱动提供服务,并且mmci驱动使用pinctrl-u300中的名称为“mmc0”功能,group为NULL表示选择pinctrl-u300中拥有名称为“mmc0”功能的groups中的第一个group(因为一个功能可能对应多个group,例如某SOC的SPI0功能可以映射到引脚PA0、1、2、3也可以映射到引脚PB5、6、7、8,所以一个function可以有多个group)。
建立完一个pinctrl_map数组之后需要将这个pinctrl_map数组注册到pinctrl sub system中去,由pinctrl子系统来管理:
pinctrl_register_mappings(u300_pinmux_map, ARRAY_SIZE(u300_pinmux_map));
其实mapping table是在pinctrl驱动写完之后根据pinctrl驱动中的group和function来创建的,这里首先说mapping table是为了说明其他驱动如何pinctrl驱动挂钩的,知道如何挂钩才能编写新的pinctrl驱动。但是目前为止只是知道了在pinctrl sub system中注册了consumer driver和pinctrl driver之间的联系,而consumer driver如果使用pinctrl sub system提供的接口也需要说明清楚。
- Hi3519-pinctrl驱动开发②创建mapping table
- Hi3519-pinctrl驱动开发④pinctrl driver接口
- Hi3519-pinctrl驱动开发①开发环境搭建
- Hi3519-pinctrl驱动开发③consumer driver与pinctrl子系统交互
- hi3519开发流程
- linux pinctrl驱动
- HI3519 开发交流QQ群
- MAPPING TABLE
- mybatis generator 根据table 创建mapping、dao、model
- pinctrl
- 设备驱动中的pinctrl(kernel-4.7)
- 2017海思HI3519开发板 Hi3519 V101+IMX226 4k输入开发板 H.265
- MAPPING TABLE 的作用
- Linux内核移植 part3:pinctrl和gpio驱动
- org.hibernate.mapping.Table.java
- Table Mapping in ADO.NET
- BLToolkit : Mapping a code table
- Trafodion TMUDF(Table-Mapping UDF)
- 博客开始打卡
- Spring MVC
- EXPRESS bodyParser
- CF835B-The number on the board
- jsp页面设置了IE版本Edge但是不生效
- Hi3519-pinctrl驱动开发②创建mapping table
- 值得学习的c语言开源项目
- word审阅功能、查看word文档的好姿势
- 【Java】Servlet基础及应用
- HDU 1465 不容易系列之一
- 【POJ 2407】Relatives(欧拉函数-水题)
- 红木家具之缅甸花梨家具
- J2EE进阶之自定义标签,JSTL标签,国际化 十四
- PDO数据库抽离层