之前一直有困惑 这属性 到底有没用,到底设置了没有
[ 2.198826] Call trace:
[ 2.198852] dump_backtrace+0x0/0x178
[ 2.198863] show_stack+0x14/0x20
[ 2.198891] dump_stack+0x94/0xb4
[ 2.198912] pinctrl_commit_state+0xf8/0x158
[ 2.198925] pinctrl_select_state+0x18/0x28
[ 2.198942] pinctrl_bind_pins+0x13c/0x150
[ 2.198958] really_probe+0xcc/0x2a0
[ 2.198969] driver_probe_device+0x58/0x100
[ 2.198980] device_driver_attach+0x6c/0x78
[ 2.198990] __driver_attach+0xb0/0xf0
[ 2.199002] bus_for_each_dev+0x68/0xc8
[ 2.199013] driver_attach+0x20/0x28
[ 2.199023] bus_add_driver+0xf8/0x1f0
[ 2.199036] driver_register+0x60/0x110
[ 2.199047] __platform_driver_register+0x40/0x48
[ 2.199065] xxxxx_init+0x18/0x20
[ 2.199078] do_one_initcall+0x48/0x240
[ 2.199092] kernel_init_freeable+0x210/0x37c
[ 2.199100] kernel_init+0x10/0x108
[ 2.199112] ret_from_fork+0x10/0x18
drivers/base/dd.c:489: ret = pinctrl_bind_pins(dev);
drivers/base/pinctrl.c:18: * pinctrl_bind_pins() - called by the device core before probe
drivers/base/pinctrl.c:21:int pinctrl_bind_pins(struct device *dev)
static int really_probe(struct device *dev, struct device_driver *drv)
{
。。。。。。
/* If using pinctrl, bind pins now before probing */
ret = pinctrl_bind_pins(dev);
if (ret)
goto pinctrl_bind_failed;
。。。。
}
/**
* pinctrl_bind_pins() - called by the device core before probe
* @dev: the device that is just about to probe
*/
int pinctrl_bind_pins(struct device *dev)
{
int ret;
if (dev->of_node_reused)
return 0;
dev->pins = devm_kzalloc(dev, sizeof(*(dev->pins)), GFP_KERNEL);
if (!dev->pins)
return -ENOMEM;
dev->pins->p = devm_pinctrl_get(dev);
if (IS_ERR(dev->pins->p)) {
dev_dbg(dev, "no pinctrl handle\n");
ret = PTR_ERR(dev->pins->p);
goto cleanup_alloc;
}
dev->pins->default_state = pinctrl_lookup_state(dev->pins->p,
PINCTRL_STATE_DEFAULT);
if (IS_ERR(dev->pins->default_state)) {
dev_dbg(dev, "no default pinctrl state\n");
ret = 0;
goto cleanup_get;
}
dev->pins->init_state = pinctrl_lookup_state(dev->pins->p,
PINCTRL_STATE_INIT);
if (IS_ERR(dev->pins->init_state)) {
/* Not supplying this state is perfectly legal */
dev_dbg(dev, "no init pinctrl state\n");
ret = pinctrl_select_state(dev->pins->p,
dev->pins->default_state);
} else {
ret = pinctrl_select_state(dev->pins->p, dev->pins->init_state);
}
if (ret) {
dev_dbg(dev, "failed to activate initial pinctrl state\n");
goto cleanup_get;
}
return 0; //找到就想设置,设置失败probe就失败,没有这个pinctrl 节点属性就算了
。。。。。。。
}