GPIO在dts中的定义
HI,各位大师们,比如说有下面的原理图:比如说像图中的GPIO7_A3_D,我在dts中是不是该如下定义fpc,gpio_reset = <&gpio7 GPIO_A3 GPIO_ACTIVE_HIGH>;
我这样定义对吗
像图中的GPIO0_A7_U,我在dts中是这样定义的,这样对吗,fpc,gpio_reset = <&gpio7 GPIO_A3 GPIO_ACTIVE_HIGH>;
不知道这样定义对不对
fpc1020@00 {
compatible = "fpc,fpc1020";
reg = <0>;
spi-max-frequency = <24000000>;
//spi-cpha;
//spi-cpol;
fpc,gpio_irq = <&gpio0 GPIO_A7GPIO_ACTIVE_LOW >;
fpc,gpio_reset = <&gpio7 GPIO_A3 GPIO_ACTIVE_HIGH>;
fpc,gpio_cs = <>;
//fpc,vddtx_mv =<1>;
//fpc,txout_boost_enable = <1>;
poll_mode = <0>;
type = <0>;
enable_dma = <0>;
};
这是我在SPI中的定义,这里的reg=<0>,不知道有没有人知道是什么意思,这样定义对吗
GPIO是这样配置,但关键还是要看源码里面怎么处理fpc,gpio_reset,可以直接打印出来看看那他的值 我现在移植的是一个指纹模块的驱动,FPC1020,驱动里面也打印出来了值 fpc,gpio_irq = <&gpio0 GPIO_A7GPIO_ACTIVE_LOW >;
关于GPIO IRQ的这个居然gpio_get_value失败啦,我应该传入的GPIO值没错啊,然后供应商的驱动应该也不会有问题啊,现在真不知道该如何处理啦,
在这里失败:
error = gpio_get_value(fpc1020->irq_gpio) ? 0 : -EIO;
if (!error) {
printk(KERN_INFO "%s OK !\n", __func__);
counter = 0;
} else {
printk(KERN_INFO "%s timed out,retrying ...\n",
__func__);
udelay(1250);
}
}
return error;
} 可以打印一下这个值fpc1020->irq_gpio,并跟进gpio_get_value里面,看看具体报什么错误。 HI,
zhansb,
我现在忽然发现了一个问题, 就是好像我无法控制到我的GPIO的电平,比如说像上图的GPIO7_A3_D,我是把它当作复位引脚来用的,今天我尝试着用gpio_direction_output去控制它的电压,发现他的电压根本无法让我受控啊,fpc1020@00 {
compatible = "fpc,fpc1020";
reg = <0>;
spi-max-frequency = <24000000>;
//spi-cpha;
//spi-cpol;
fpc,gpio_irq = <&gpio0 GPIO_A7GPIO_ACTIVE_LOW >;
fpc,gpio_reset = <&gpio7 GPIO_A3 GPIO_ACTIVE_HIGH>;
fpc,gpio_cs = <>;
//fpc,vddtx_mv =<1>;
//fpc,txout_boost_enable = <1>;
poll_mode = <0>;
type = <0>;
enable_dma = <0>;
};
fpc,gpio_reset = <&gpio7 GPIO_A3 GPIO_ACTIVE_HIGH>;,这个是我对复位IO的定义
我的程序代码片段是这样的,static int __devinit fpc1020_reset_init(fpc1020_data_t *fpc1020,
struct fpc1020_platform_data *pdata)
{
int error = 0;
if (gpio_is_valid(pdata->reset_gpio)) {
dev_info(&fpc1020->spi->dev,
"Assign HW reset -> GPIO%d\n", pdata->reset_gpio);
fpc1020->soft_reset_enabled = false;
error = gpio_request(pdata->reset_gpio, "fpc1020_reset");
if (error) {
dev_err(&fpc1020->spi->dev,
"gpio_request (reset) failed.\n");
return error;
}
fpc1020->reset_gpio = pdata->reset_gpio;
printk("has already begin to input a high voltage================================================\n");
while(1){
//error = gpio_direction_output(fpc1020->reset_gpio, 1);
error = gpio_direction_output(fpc1020->reset_gpio, 1);
}
我现在是不断的输出高电平,但是发现根本就没有高电平出来,
fpc1020 spi0.0: Assign HW reset -> GPIO143
就这个复位引脚,GPIO分配为143,这对吗,
我现在实在不知道什么情况呢,我居然去输出高电平它也不受控,到底是我GPIO引脚定义有问题还是怎么回事,你能不能给一点好的建议等
用这个接口:rst_pin = of_get_named_gpio_flags(np, "reset-gpio", 0, &rst_flags);
143是错的 好的,明白 想了解更多,可以查看官网wiki:http://wiki.t-firefly.com/index.php/Firefly-RK3288/GPIO 厉害,多学习
页:
[1]