【发布时间】:2021-01-29 09:32:16
【问题描述】:
我正在研究 imx8mm 并使用 Linux 内核 v4.14.98 测试 GPIO。
设备树节点为:
&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>;
};
我写了一个驱动来测试这个
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, 0);
mdelay(100);
gpiod_set_value(drvdata->reset, 1);
return 0;
}
但是,当我将 pinctrl-names 注释为上面显示的设备树时,我无法控制 GPIO 引脚。 GPIO 引脚始终保持高电平。
在devicetree.c 中,statename 将被替换为propname 后缀,这里是“0”。但它只是一个常量名称,可以是任何字符串。所以我的问题是为什么我不能在不设置 pinctrl-names 的情况下控制 GPIO 引脚?
【问题讨论】:
-
您指的是电源管理阶段引脚控制的所谓状态。
default表示您定义了设备处于 D0 模式(启动并运行)时的状态。
标签: linux-device-driver gpio device-tree