2016-12-27 10 views
1

Мои значения i2c clock-frequency исходят из BIOS.Как передается значение частоты i2c из 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 
        } 
       } 
      }) 

Но нет никакого упоминания значений частоты тактового сигнала I2C для различных режимов, таких как 400k, 1M и т.д. Где определены эти значения? Как это передается от BIOS к драйверу?

+0

Режимы определяются исключительно ** подчиненными ** устройствами, подключенными к хосту. Вот почему вышеупомянутый _DSD не чувствует себя хорошо. В противном случае часы I2C определяются как самое медленное подключенное устройство. См. Некоторые подробности здесь http://www.spinics.net/lists/linux-i2c/msg24857.html – 0andriy

+0

У меня есть сильное чувство, что эти значения «i2c-clock-frequency» были определены в исходном коде BIOS. Так как у нас есть опции в «BIOS» для выбора «Стандартный режим (100k)», «Быстрый режим (400k)», «Быстрая добавка» (1M) »и« Высокая скорость (3.4M) », эти значения должны быть где-то в исходном коде BIOS. Ядро API 'device_property_read_u32 (& pdev-> dev,« clock-frequency », & dev-> clk_freq);' соответствует частотно-часовому «' пропущенному »поле в' ACPI' и выбирает 'i2c-clock- frequency' из объекта 'ACPI'. –

+0

Подождите, мы говорим о ** существующей ** BIOS в дикой природе ?! – 0andriy

ответ

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-frequency от ACPI object.

 Смежные вопросы

  • Нет связанных вопросов^_^