问题描述
我正在研究 imx8mm 并使用 Linux 内核 v4.14.98 测试 GPIO。
设备树节点为:
Error - <class 'sqlalchemy.exc.TimeoutError'>: QueuePool limit of size 5 overflow 10 reached,connection timed out,timeout 30
URL: https://url/dataset/dataset1/resource/0797383e-bac0-4114-943b-87c74d2677a9
File '/usr/lib/ckan/default/lib/python2.7/site-packages/weberror/errormiddleware.py',line 171 in __call__
app_iter = self.application(environ,sr_checker)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/webob/dec.py',line 147 in __call__
resp = self.call_func(req,*args,**self.kwargs)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/webob/dec.py',line 208 in call_func
return self.func(req,**kwargs)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/fanstatic/publisher.py',line 234 in __call__
return request.get_response(self.app)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/webob/request.py',line 1053 in get_response
application,catch_exc_info=False)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/webob/request.py',line 1022 in call_application
app_iter = application(self.environ,start_response)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/webob/dec.py',**kwargs)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/fanstatic/injector.py',line 54 in __call__
response = request.get_response(self.app)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/webob/request.py',start_response)
File '/usr/lib/ckan/default/src/ckan/ckan/config/middleware/pylons_app.py',line 250 in inner
result = application(environ,start_response)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/beaker/middleware.py',line 73 in __call__
return self.app(environ,line 156 in __call__
return self.wrap_app(environ,session_start_response)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/routes/middleware.py',line 131 in __call__
response = self.app(environ,start_response)
File '/usr/lib/ckan/default/src/ckan/ckan/config/middleware/common_middleware.py',line 80 in __call__
return self.app(environ,start_response)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/pylons/wsgiapp.py',line 125 in __call__
response = self.dispatch(controller,environ,line 324 in dispatch
return controller(environ,start_response)
File '/usr/lib/ckan/default/src/ckan/ckan/lib/base.py',line 212 in __call__
res = WsgiController.__call__(self,start_response)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/pylons/controllers/core.py',line 221 in __call__
response = self._dispatch_call()
File '/usr/lib/ckan/default/lib/python2.7/site-packages/pylons/controllers/core.py',line 172 in _dispatch_call
response = self._inspect_call(func)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/pylons/controllers/core.py',line 107 in _inspect_call
result = self._perform_call(func,args)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/pylons/controllers/core.py',line 60 in _perform_call
return func(**args)
File '/usr/lib/ckan/default/src/ckan/ckan/controllers/package.py',line 1123 in resource_read
return render(template,extra_vars=vars)
File '/usr/lib/ckan/default/src/ckan/ckan/lib/base.py',line 177 in render
return cached_template(template_name,render_template)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/pylons/templating.py',line 249 in cached_template
return render_func()
File '/usr/lib/ckan/default/src/ckan/ckan/lib/base.py',line 131 in render_template
return render_jinja2(template_name,globs)
File '/usr/lib/ckan/default/src/ckan/ckan/lib/base.py',line 88 in render_jinja2
return template.render(**extra_vars)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/jinja2/environment.py',line 989 in render
return self.environment.handle_exception(exc_info,True)
File '/usr/lib/ckan/default/lib/python2.7/site-packages/jinja2/environment.py',line 754 in handle_exception
reraise(exc_type,exc_value,tb)
File '/usr/lib/ckan/default/src/ckanext-fiware_theme_basic/ckanext/fiware_theme_basic/templates/package/resource_read.html',line 1 in top-level template code
{% ckan_extends %}
TimeoutError: QueuePool limit of size 5 overflow 10 reached,timeout 30
我写了一个驱动程序来测试这个
&iomuxc {
pinctrl-names = "default";
...
imx8mm-evk {
pinctrl_gpio_plural: gpiopluralgrp {
fsl,pins = <
MX8MM_IOMUXC_GPIO1_IO11_GPIO1_IO11 0x41
>;
};
};
};
...
plural {
compatible = "gpio-plural";
/* pinctrl-names = "default"; */
pinctrl-0 = <&pinctrl_gpio_plural>;
reset-gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>;
};
但是,当我将 pinctrl-names 注释为上面显示的设备树时,我无法控制 GPIO 引脚。 GPIO 引脚始终保持高电平。
在 devicetree.c 中,static int gpio_plural_probe(struct platform_device *pdev)
{
struct gpio_plural_data *drvdata;
drvdata = devm_kzalloc(&pdev->dev,sizeof(*drvdata),GFP_KERNEL);
if (drvdata == NULL)
return -ENOMEM;
drvdata->reset = devm_gpiod_get(&pdev->dev,"reset",GPIOD_OUT_HIGH);
if (IS_ERR(drvdata->reset)) {
printk("Error: reset not found\n");
return -EINVAL;
}
gpiod_set_value(drvdata->reset,0);
mdelay(100);
gpiod_set_value(drvdata->reset,1);
mdelay(100);
gpiod_set_value(drvdata->reset,1);
return 0;
}
将替换为 statename
后缀,此处为“0”。但它只是一个常量名称,可以是任何字符串。所以我的问题是为什么我不能在不设置 pinctrl-names 的情况下控制 GPIO 引脚?
解决方法
它不能是任何名称,大多数节点都会有 pinctrl-names = "default";
,因为这使 pinctrl-0
成为设备引脚的默认状态。
这实际上非常重要,因为设备核心将在探测设备之前使用它来检索和设置正确的状态,请参阅pinctrl_bind_pins。它确实:
dev->pins->default_state = pinctrl_lookup_state(dev->pins->p,PINCTRL_STATE_DEFAULT);
其中 PINCTRL_STATE_DEFAULT
是 "default"
。
然后,它选择状态:
ret = pinctrl_select_state(dev->pins->p,dev->pins->init_state);
如果您不想使用 default
名称,则必须在驱动程序中选择正确的状态。
其他通用状态名称是:
#define PINCTRL_STATE_DEFAULT "default"
#define PINCTRL_STATE_INIT "init"
#define PINCTRL_STATE_IDLE "idle"
#define PINCTRL_STATE_SLEEP "sleep"