Linux pinctrl子系统分析之五 pinctrl map注册与注销

        前面我们分析了pinctrl device的注册与注销接口。本章我们分析pinctrl maps的注册,pinctrl maps属于board pin描述相关的范畴。

 

         针对pinctrl map的注册与注销主要涉及两方面:

  1. 当内核不支持设备树时,则通过调用pinctrl_register_mappings、pinctrl_register_map接口实现pinctrl maps的注册;
  2. 当内核支持设备树时,则在设备与驱动match后,在设备驱动的probe接口调用pinctrl_bind_pins,进行设备与pinctrl map、pinctrl device绑定时,若该设备所对应的pinctrl map未注册到系统中,则调用pinctrl_dt_to_map,将该设备对应pinctrl map添加系统pinctrl map list上(该方式下也是调用pinctrl_register_map)。

 

Pinctrl map注册与注销实现的功能

       pinctrl_register_mappings、pinctrl_register_map均是pinctrl map的注册接口,其中pinctrl_register_mappings也是通过调用pinctrl_register_map实现pinctrl map的注册。

pinctrl_register_map接口

针对pinctrl_register接口就是建立下图的数据结构间的关联图,下面我们具体说明:

     pinctrl_map对应三个主要的类型:pin config、group config、mux group。其中pin config则表示对于pin引脚的配置信息、group config表示对group里引脚的配置信息、mux group则对应一个function下group的引脚复用配置信息(包含function名称、group名称,且该pinctrl map是其所属device某一个状态下的map信息(default、init、idle、sleep等))。

Linux pinctrl子系统分析之五 pinctrl map注册与注销_第1张图片

而针对pinctrl map主要功能即是实现上述数据结构的关联,主要内容:

  1. 对要注册的pinctrl_map进行合法性检查(若出现devname为空/state name为空/ctrldev name为空,则pinctrl map为无效参数;若为pin/group config map,则出现pin/group 名称为空或配置信息为空,则参数无效;若为mux group信息,则出现function 名称为空,则参数无效);
  2. 申请struct pinctrl_maps的内存空间,并将配置该变量,设置其num_maps、maps成员;
  3. 将新创建的pinctrl_maps注册到链表pinctrl_maps中即可。

     下面是函数pinctrl_register_map的实现,其实现的内容就是上述的三个内容,但又增加了一个选项,即若设置dup为true,则在创建pinctrl_maps时,dup传递的pinctrl_map的内存。

Linux pinctrl子系统分析之五 pinctrl map注册与注销_第2张图片

    pinctrl_unregister_map接口则主要将struct pinctrl_maps类型的变量从链表pinctrl_maps中移除,并释放其内存。

 

 

以上便是pinctrl maps的注册接口,相对来说比较简单。

你可能感兴趣的:(Linux,内核)