5454ty 发表于 2015-1-23 10:22:46

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>,不知道有没有人知道是什么意思,这样定义对吗

zhansb 发表于 2015-1-23 14:33:19

GPIO是这样配置,但关键还是要看源码里面怎么处理fpc,gpio_reset,可以直接打印出来看看那他的值

5454ty 发表于 2015-1-23 15:26:14

我现在移植的是一个指纹模块的驱动,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;
}

zhansb 发表于 2015-1-23 19:05:56

可以打印一下这个值fpc1020->irq_gpio,并跟进gpio_get_value里面,看看具体报什么错误。

5454ty 发表于 2015-1-24 13:47:20

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引脚定义有问题还是怎么回事,你能不能给一点好的建议等


zhansb 发表于 2015-1-27 11:51:14

用这个接口:rst_pin = of_get_named_gpio_flags(np, "reset-gpio", 0, &rst_flags);

143是错的

5454ty 发表于 2015-1-27 14:00:28

好的,明白

zhansb 发表于 2015-1-27 14:44:40

想了解更多,可以查看官网wiki:http://wiki.t-firefly.com/index.php/Firefly-RK3288/GPIO

luminmin882001 发表于 2016-8-16 16:14:26

厉害,多学习
页: [1]
查看完整版本: GPIO在dts中的定义