什么是 cawake gpio 引脚以及如何在设备树中禁用它

问题描述

当我的内核 4.2 armv7l(和硬件 OMAP35xSOM-LV​​,一个 LogicPD 板)启动时,我在启动日志中收到一个错误

[  14.893432] omap_ssi 48058000.ssi-controller: ssi controller 0 initialized (2 ports)!
[   14.959777] omap_ssi_port 4805a000.ssi-port: Couldn't get cawake gpio (err=-2)!
[   15.034698] omap_ssi_port: probe of 4805a000.ssi-port Failed with error -2
[   15.130096] omap_ssi_port 4805b000.ssi-port: Couldn't get cawake gpio (err=-2)!

我可以在其中一个设备树文件 (omap3.dtsi) 中看到此 ssi 端口控制器已禁用,但在内核启动时仍会出现此错误。如何抑制这个错误?我是设备树概念的新手。为更清楚起见,omap3.dtsi 中涉及讨论中的端口的相关代码如下:

ssi: ssi-controller@48058000 {
    compatible = "ti,omap3-ssi";
    ti,hwmods = "ssi";

    status = "disabled";

    reg = <0x48058000 0x1000>,<0x48059000 0x1000>;
    reg-names = "sys","gdd";

    interrupts = <71>;
    interrupt-names = "gdd_mpu";

    #address-cells = <1>;
    #size-cells = <1>;
    ranges;

    ssi_port1: ssi-port@4805a000 {
        compatible = "ti,omap3-ssi-port";
        reg = <0x4805a000 0x800>,<0x4805a800 0x800>;
        reg-names = "tx","rx";
        interrupts = <67>,<68>;
    };

    ssi_port2: ssi-port@4805b000 {
        compatible = "ti,omap3-ssi-port";
        reg = <0x4805b000 0x800>,<0x4805b800 0x800>;
        reg-names = "tx","rx";
        interrupts = <69>,<70>;
    };
};

解决方法

可以从drivers/hsi/controllers/omap_ssi_port.c 中抑制警告。该文档将 cawake gpio 保留为可选组件。由于 cawake gpio 只是一种多路复用形式(而不是实际的硬件引脚),因此在设备树(至少对于 omap3 系列)中禁用它没有任何意义。

cawake_gpio = devm_gpiod_get(&pd->dev,"ti,ssi-cawake",GPIOD_IN);
/*        if (IS_ERR(cawake_gpio)) {
                err = PTR_ERR(cawake_gpio);
                dev_err(&pd->dev,"couldn't get cawake gpio (err=%d)!\n",err);
                goto error;
        }
*/