Linux 设备驱动中GPIO 控制器初始化分析
该代码段演示了在 Linux 设备驱动中如何初始化一个 GPIO 控制器。
-
devm_gpiochip_add_data(&pdev->dev, &port->gc, port):向内核注册设备的 GPIO 操作,将注册信息保存在port中。 -
irq_alloc_descs(-1, 0, 32, numa_node_id()):分配 32 个中断号,保存在irq_base中。 -
irq_domain_add_legacy(np, 32, irq_base, 0, &irq_domain_simple_ops, NULL):创建一个中断域,并将irq_base中的中断号与该中断域关联,保存在port->domain中。 -
mxc_gpio_init_gc(port, irq_base, &pdev->dev):初始化 GPIO 控制器,将 GPIO 操作和中断相关信息配置到 GPIO 控制器中。 -
list_add_tail(&port->node, &mxc_gpio_ports):将该 GPIO 设备的信息添加到一个全局链表中,以便后续操作可以轻松访问该设备。 -
platform_set_drvdata(pdev, port):将port指针保存在设备的驱动数据中,以便在驱动中可以访问该设备。 -
pm_runtime_put(&pdev->dev):增加设备的引用计数。 -
返回 0 或错误码。如果有错误,要进行相应的清理工作。
该代码展示了 GPIO 控制器初始化的典型流程,并为理解 Linux 设备驱动中的 GPIO 操作提供了参考。
原文地址: https://www.cveoy.top/t/topic/n6kS 著作权归作者所有。请勿转载和采集!