/dev/mem可没那么简单

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在这段驱动中,由于使用的是AMBA总线,因此无法直接使用ACPI匹配设备。不过,我们可以在驱动中添加代码来读取设备树中的固定波特率信息,从而设置波特率。 下面是一个简单的示例代码,用于在驱动中读取设备树中的固定波特率信息: ``` static int phytium_uart_probe(struct amba_device *dev, const struct amba_id *id) { struct phytium_uart_port *pup; struct vendor_data *vendor = id->data; int portnr, ret; u32 baudrate; // 获取波特率信息 if (of_property_read_u32(dev->dev.of_node, "baudrate", &baudrate)) { dev_info(&dev->dev, "no baudrate specified, using default\n"); baudrate = 115200; } else { dev_info(&dev->dev, "using baudrate %u\n", baudrate); } portnr = phytium_find_free_port(); if (portnr < 0) return portnr; pup = devm_kzalloc(&dev->dev, sizeof(struct phytium_uart_port), GFP_KERNEL); if (!pup) return -ENOMEM; pup->clk = devm_clk_get(&dev->dev, NULL); if (IS_ERR(pup->clk)) return PTR_ERR(pup->clk); pup->port.irq = dev->irq[0]; pup->port.line = portnr; pup->vendor = vendor; pup->fifosize = 32; pup->port.iotype = pup->vendor->access_32b ? UPIO_MEM32 : UPIO_MEM; pup->port.ops = &phytium_uart_ops; snprintf(pup->type, sizeof(pup->type), "PL011 rev%u", amba_rev(dev)); // 设置波特率 pup->port.uartclk = clk_get_rate(pup->clk); baudrate = uart_get_baud_rate(&pup->port, baudrate, baudrate); ret = phytium_setup_port(&dev->dev, pup, &dev->res, portnr); if (ret) return ret; amba_set_drvdata(dev, pup); return phytium_register_port(pup); } ``` 在这个示例代码中,我们使用了`of_property_read_u32()`函数来读取设备树中的`baudrate`属性。如果设备树中有指定该属性,则默认使用115200作为波特率。接下来,我们使用`uart_get_baud_rate()`函数来获取实际使用的波特率,并将其传递给`phytium_setup_port()`函数来进行端口设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值