Edit online

数据结构设计

31 Jan 2024
Read time: 2 minute(s)
  • aic_desc_function
    struct aic_desc_function {
        const unsigned char num;  //pin 脚功能所对应的,最终写入寄存器的索引值
        const char *name;         //pin 脚对应的功能的名字
    };
  • aic_desc_pin
    struct aic_desc_pin {
        struct pinctrl_pin_desc pin;                //pin 脚的描述符
        const struct aic_desc_function *functions;  //该 pin 脚所能设置的功能列表
    };
  • aic_pinctrl_group
    struct aic_pinctrl_group {
        const char *name;       //group 名字
        u32 config;             //pin 脚的配置参数
        u32 pin;                //pin 脚索引值
    };
  • aic_pinctrl_function
    struct aic_pinctrl_function {
        const char *name;       //function 名字
        const char **groups;    //function 所对应的所有 group 列表
        u32 ngroups;            //function 所对应的 group 个数
    };
  • aic_gpio_bank
    struct aic_gpio_bank {
        u32 bank_nr;        //gpio port 索引值,GPIOA 为 0,GPIOB 为 1…
        int irq;
        u32 saved_mask;
        spinlock_t lock;
        struct gpio_chip gpio_chip;         //gpio port 的 chip 结构
        struct pinctrl_gpio_range range;    //该 port 的 range 范围
        struct irq_domain *domain;          //转换 hwirq 到 irq 的结构体指针
        struct aic_gpio_regs regs;          //GPIO 控制器的寄存器
        struct aic_pinctrl *pctl;
    };
  • aic_pinctrl
    struct aic_pinctrl {
        void __iomem *base;
        struct device *dev;
        struct pinctrl_dev *pctl_dev;
        struct pinctrl_desc pctl_desc;
        struct aic_pinctrl_group *groups;       //pin controller 包含的 group 列表
        u32 ngroups;                            //pin controller 包含的 group 个数
        const char **grp_names;                 //pin controller 包含的 group 名字
        struct aic_pinctrl_function     *functions; //pin controller 包含的 functions 列表
        u32 nfunctions;                         //pin controller 包含的 functions 个数
        struct aic_gpio_bank *banks;            //pin controller 包含的 bank 列表
        u32 nbanks;                             //pin controller 包含的 bank 个数
        struct aic_desc_pin *pins;              //pin controller 包含的 pin 列表
        u32 npins;                              //pin controller 包含的 pin 个数
        struct reset_control *reset;
        struct clk *clk;
    };