i2c驱动怎么解析设备树clock-frequency 的
时间: 2024-06-13 19:04:54 浏览: 16
在设备树中,I2C设备节点的属性中有一个clock-frequency属性,它表示I2C总线的时钟频率。在I2C驱动中,可以通过of_get_property函数获取设备树中的clock-frequency属性值,然后将其作为I2C总线的时钟频率。具体步骤如下:
1. 在i2c_driver结构体中添加一个of_match_table结构体,用于匹配设备树节点。
2. 在i2c_driver结构体中添加probe函数,用于解析设备树中的clock-frequency属性。
3. 在probe函数中,使用of_get_property函数获取设备树中的clock-frequency属性值,并将其作为I2C总线的时钟频率。
4. 在i2c_driver结构体中添加remove函数,用于注销I2C设备驱动。
相关问题
i2c的设备树怎么编写
编写 i2c 设备树的主要步骤如下:
1. 确定 i2c 设备的地址和总线编号。
2. 在设备树中声明 i2c 控制器节点,包括其名称和硬件地址。
3. 在控制器节点下声明 i2c 设备节点,包括设备名称、硬件地址、设备类型和驱动程序。
4. 配置 i2c 设备节点的属性,例如中断、电源等。
以下是一个 i2c 设备树的示例:
```
i2c1 {
#address-cells = <1>;
#size-cells = <0>;
clock-frequency = <100000>;
my_device@50 {
compatible = "my_device";
reg = <0x50>;
interrupts = <17>;
};
};
```
在上述示例中,`i2c1` 表示 i2c 控制器节点的名称;`#address-cells` 和 `#size-cells` 属性定义了硬件地址和寄存器大小的位数;`clock-frequency` 属性定义了 i2c 的时钟频率。
`my_device@50` 表示 i2c 设备节点的名称和硬件地址,`compatible` 属性指定了设备类型和驱动程序。`reg` 属性是设备的硬件地址,`interrupts` 属性定义了中断号。
需要注意的是,i2c 设备树的编写需要根据具体的硬件和驱动程序进行适当的修改。
Linux的i2c驱动里面使用哪个函数获取DTS的i2c速率
Linux的i2c驱动中使用函数`of_get_property()`来获取DTS中定义的i2c速率。该函数可以从设备树节点的属性列表中获取指定属性的值。在i2c驱动中,通常使用`of_find_property()`函数来检索设备树节点的属性,并使用`of_get_property()`函数来获取属性的值。
例如,以下代码片段演示了如何从设备树节点中获取i2c速率:
```c
struct device_node *np = i2c_dev->dev.of_node;
const __be32 *prop;
int len;
prop = of_get_property(np, "clock-frequency", &len);
if (prop) {
i2c_dev->clk_rate = be32_to_cpup(prop);
}
```
在这个例子中,我们首先获取设备节点的指针`np`,然后使用`of_get_property()`函数检索名为“clock-frequency”的属性。如果属性存在,则将指向属性值的指针存储在`prop`变量中,然后使用`be32_to_cpup()`函数将属性值从big-endian格式转换为本地字节序。最后,我们将i2c速率存储在`i2c_dev->clk_rate`变量中,以便在i2c传输期间使用。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)