【问题标题】:Device tree and GPIO设备树和 GPIO
【发布时间】:2015-07-19 18:07:14
【问题描述】:

我正在尝试在内核驱动程序中连接一个 GPIO 控制器,但我不确定我做的一切是否正确。

这是我的设备树代码:

gpio_screen1:gpio1@20 {
            compatible = "nxp,pca9535";
            gpio-controller;
            #gpio-cells = <2>;
            reg = <0x20>;
//          pinctrl-names = "default";
//          pinctrl-0 = <&pinctrl_pca9505>;
            };

    screen: screen@0x02000 {
        compatible = "myscreen,myscreen";
        #address-cells = <1>;
        #size-cells = <0>;
        reg = < 0x04000 0xF00 >;                    
        interrupts = <1 2>;
        reset-gpios     = <&gpio_screen1 15 0>;
        sleep-gpios     = <&gpio_screen1 14 0>;
        clk_sel1-gpios  = <&gpio_screen1 10 0>;
        lane_sel-gpios  = <&gpio_screen1 9 0>;
    };

这是我注册 GPIO 的驱动程序代码

gpio = of_get_named_gpio(pdev->dev.of_node, "reset-gpios", 0);
if (!gpio_is_valid(gpio)) {
        dev_err(&pdev->dev, "failed to parse reset gpio\n");
        return gpio;
}
dev->reset = gpio;

这个初始化是否正确?

我一直在查看此 GPIO 控制器的文档,但它不是很有帮助。

【问题讨论】:

    标签: linux linux-kernel linux-device-driver gpio device-tree


    【解决方案1】:

    我没有看到驱动程序端的 gpio 初始化有什么问题。这很简单。下一步是请求初始化gpio:

    ret = devm_gpio_request_one(&pdev->dev, dev->reset, GPIOF_OUT_INIT_HIGH, "gpio-reset");
    if (ret) {
        dev_err(&pdev->dev, "failed to request gpio %d: %d\n", dev->reset, ret);
        return -EINVAL;
    }
    

    关于 devicetree 部分,据我了解,您是基于 gpio-pcf857x.txt 或类似的东西做的。你不在这些 gpios 上使用中断吗?

    还有一个主要问题,它有效吗? ;)

    【讨论】:

    • 我不需要来自那个 gpio 的中断,所以我不打算使用任何中断。我还不能在硬件上测试它,我可能只能在下周才能做到。 :S
    • 你成功了吗?你为此写了设备树条目还是设备树覆盖?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2019-07-16
    相关资源
    最近更新 更多