1

私の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 からドライバーにどのように渡されますか?

4

1 に答える 1

0

これらの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);` 

"clock-frequency" propnameのフィールドに一致し、から値をACPIフェッチします。i2c-clock-frequencyACPI object

于 2017-05-03T06:09:12.273 に答える