【问题标题】:How is i2c clock frequency value passed from BIOS to driver?i2c 时钟频率值如何从 BIOS 传递到驱动程序?
【发布时间】:2016-12-27 03:54:07
【问题描述】:

我的i2c clock-frequency 值来自 BIOS。

我提取了DSDTi2c clock-frequency字段如下:

         Device (I2C1)
        {
            Name (_ADR, 0x00160001)  // _ADR: Address
            Name (_DDN, "Intel(R) I2C Controller #1")  // _DDN: DOS Device Name
            Name (_UID, 0x02)  // _UID: Unique ID
            Name (LINK, "\\_SB.PCI0.I2C1")
            Name (RBUF, ResourceTemplate ()
            {
            })
            Name (_DSD, Package (0x02)
            {
                Buffer (0x10)
                {
                    /* 0000 */   0x14, 0xD8, 0xFF, 0xDA, 0xBA, 0x6E, 0x8C, 0x4D,
                    /* 0008 */   0x8A, 0x91, 0xBC, 0x9B, 0xBF, 0x4A, 0xA3, 0x01
                }, 

                Package (0x01)
                {
                    Package (0x02)
                    {
                        "clock-frequency", 
                        IC1S
                    }
                }
            })

但没有提及不同模式(如 400k、1M 等)的 i2c 时钟频率值。这些值在哪里定义?它是如何从 BIOS 传递到驱动程序的?

【问题讨论】:

  • 模式仅由连接到主机的 slave 设备定义。这就是为什么上面的_DSD 感觉不对的原因。否则,I2C 时钟被定义为连接的最慢设备。在此处查看一些详细信息spinics.net/lists/linux-i2c/msg24857.html
  • 我有一种强烈的感觉,这些i2c-clock-frequency 值已在 BIOS 源代码中定义。因为我们在BIOS 中有选项可以选择Standard Mode (100k)Fast Mode (400k)Fast Plus (1M)High Speed (3.4M),所以这些值应该在 BIOS 源代码中的某处匹配。内核 API device_property_read_u32(&pdev->dev, "clock-frequency", &dev->clk_freq);ACPI 中的 "clock-frequency" propname 字段匹配,并从 ACPI 对象中获取 i2c-clock-frequency 值。
  • 等等,我们是在谈论现有的 BIOS 吗?!
  • 顺便说一句,这个,即clock-frequency属性,在设备树中被广泛使用。对于 ACPI,根本不需要定义它,因为我已经解释过了。在 ACPI 中,I2cSerialBus() 定义了某个从设备的速度。
  • 是的,市场上的现有 BIOS!我知道这些值目前在 BIOS 源代码中为defined。就DT 的实现而言,这是有道理的。不知道他们为什么在现有 BIOS 中hard-code?不能动手!

标签: linux-kernel linux-device-driver acpi


【解决方案1】:

这些i2c-clock-frequency 值已在BIOS source code 中定义(显然)。因为我们在BIOS 中有选项可以选择Standard Mode (100k), Fast Mode (400k), Fast Plus (1M) & High Speed (3.4M),所以这些值应该在BIOS 源代码中的某处匹配。内核 API

`device_property_read_u32(&pdev->dev, "clock-frequency", &dev->clk_freq);` 

匹配ACPI 中的"clock-frequency" propname 字段并从ACPI object 中获取i2c-clock-frequency 值。

【讨论】:

    猜你喜欢
    • 2016-05-28
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2017-05-31
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多