i2c 时钟频率值如何从 BIOS 传递到驱动程序?
How is i2c clock frequency value passed from BIOS to driver?
我的 i2c clock-frequency
值来自 BIOS。
我提取了DSDT
和i2c 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 传递给驱动程序的?
这些i2c-clock-frequency
值已经在BIOS source code
中定义(显然)。因为我们有 BIOS
到 select 或者 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
值
我的 i2c clock-frequency
值来自 BIOS。
我提取了DSDT
和i2c 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 传递给驱动程序的?
这些i2c-clock-frequency
值已经在BIOS source code
中定义(显然)。因为我们有 BIOS
到 select 或者 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
值