ctrl_pdata->pin_res.pinctrl =devm_pinctrl_get(&pdev->dev);if(IS_ERR_OR_NULL(ctrl_pdata->pin_res.pinctrl)) { pr_err("%s: failed to get pinctrl\n", __func__);returnPTR_ERR(ctrl_pdata->pin_res.pinctrl); } ctrl_pdata->pin_res.gpio_state_active = pinctrl_lookup_state(ctrl_...
只要错误退出,就会自动释放所申请的资源。...1)devm_pinctrl_get:用于获取设备树中自己用 pinctrl 建立的节点的句柄; 2) pinctrl_lookup_state:用于选择其中一个 pinctrl 的状态,同一个 pinctrl...(&pdev->dev); if(IS_ERR(pctrl)){ ret = PTR_ERR(pctrl); printk("devm_pinctrl_get error\n"); ...
samsung_pinctrl_probe->samsung_pinctrl_get_soc_data函数中会根据device tree的信息和静态定义的table来初始化该描述符,具体的代码如下: static struct samsung_pin_ctrl *samsung_pinctrl_get_soc_data( struct samsung_pinctrl_drv_data *d, struct platform_device *pdev) { int id; const struct of_device_...
1:externvoid*devm_kzalloc(structdevice *dev, size_t size, gfp_t gfp);2:3:void__iomem *devm_ioremap_resource(structdevice *dev,4:structresource *res);5:void__iomem *devm_ioremap(structdevice *dev, resource_size_t offset,6: unsignedlongsize);7:8:structclk *devm_clk_get(structdevice *...
2、pinctrl 子系统 API pinctrl 子系统的 API 有很多,对于驱动工程师来说,pinctrl 操作一个 GPIO 只需要三步: 1、devm_pinctrl_get 2、pinctrl_lookup_state...3、pinctrl_select_state 在 Linux 中,加 devm_ 开头的函数,代表这个函数支持资源管理。...后来 Linux 开发出了很多 devm_ 开头的函数,代表这个函...
pinctrl-1 = <pin-config-1-a pin-config-1-b>; }; (1)pinctrl-names定义了一个state列表。那么什么是state呢?具体说应该是pin state,对于一个client device,它使用了一组pin,这一组pin应该同时处于某种状态,毕竟这些pin是属于一个具体的设备功能。state的定义和电源管理关系比较紧密,例如当设备active的时候,...
8: struct clk *devm_clk_get(struct device *dev, const char *id); 9: 10: int devm_gpio_request(struct device *dev, unsigned gpio, 11: const char *label); 12: 13: static inline struct pinctrl * devm_pinctrl_get_select( 14: struct device *dev, const char *name) ...