该代码段演示了在 Linux 设备驱动中如何初始化一个 GPIO 控制器。

  1. devm_gpiochip_add_data(&pdev->dev, &port->gc, port):向内核注册设备的 GPIO 操作,将注册信息保存在 port 中。

  2. irq_alloc_descs(-1, 0, 32, numa_node_id()):分配 32 个中断号,保存在 irq_base 中。

  3. irq_domain_add_legacy(np, 32, irq_base, 0, &irq_domain_simple_ops, NULL):创建一个中断域,并将 irq_base 中的中断号与该中断域关联,保存在 port->domain 中。

  4. mxc_gpio_init_gc(port, irq_base, &pdev->dev):初始化 GPIO 控制器,将 GPIO 操作和中断相关信息配置到 GPIO 控制器中。

  5. list_add_tail(&port->node, &mxc_gpio_ports):将该 GPIO 设备的信息添加到一个全局链表中,以便后续操作可以轻松访问该设备。

  6. platform_set_drvdata(pdev, port):将 port 指针保存在设备的驱动数据中,以便在驱动中可以访问该设备。

  7. pm_runtime_put(&pdev->dev):增加设备的引用计数。

  8. 返回 0 或错误码。如果有错误,要进行相应的清理工作。

该代码展示了 GPIO 控制器初始化的典型流程,并为理解 Linux 设备驱动中的 GPIO 操作提供了参考。

Linux 设备驱动中GPIO 控制器初始化分析

原文地址: https://www.cveoy.top/t/topic/n6kS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录