linux内核UART驱动,作为platform设备使用acpi匹配,且在acpi表内描述了固定波特率信息,给出详细probe代码
时间: 2024-03-02 16:54:21 浏览: 138
下面是一个简单的probe函数示例,用于在ACPI表中匹配UART设备,并读取固定波特率信息:
```
static int my_uart_probe(struct platform_device *pdev)
{
struct resource *res;
struct acpi_device_pnp *pnp;
unsigned long baudrate;
int ret;
// 获取platform设备描述符的pnp信息
pnp = acpi_dev_pnp_get(pdev->dev.parent);
if (!pnp) {
dev_err(&pdev->dev, "failed to get ACPI PNP info\n");
return -ENODEV;
}
// 检查pnp信息是否描述了固定波特率
if (pnp->speed.valid) {
baudrate = pnp->speed.value;
dev_info(&pdev->dev, "Found UART with fixed baudrate %lu\n", baudrate);
} else {
dev_info(&pdev->dev, "Found UART with unknown baudrate\n");
}
// 获取UART设备的资源信息
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
dev_err(&pdev->dev, "failed to get resource info\n");
return -EINVAL;
}
// 在此处对UART进行初始化和配置
ret = uart_add_one_port(&my_uart_driver, &my_uart_port);
if (ret) {
dev_err(&pdev->dev, "failed to add UART port\n");
return ret;
}
return 0;
}
```
在这个例子中,我们首先获取了platform设备的ACPI PNP信息,并检查了其中是否描述了固定波特率。如果有固定波特率信息,我们就读取该信息并打印出来。接下来,我们使用`platform_get_resource()`函数获取UART设备的资源信息,并在此处对UART进行初始化和配置。最后,我们调用`uart_add_one_port()`函数将UART端口添加到系统中。
需要注意的是,这只是一个简单的示例,实际的probe函数需要根据具体的硬件和驱动进行相应的修改和扩展。
阅读全文