Linux 如何为连接到I2C gpio扩展器的虚拟mdio gpio设备配置ACPI*.asl

Linux 如何为连接到I2C gpio扩展器的虚拟mdio gpio设备配置ACPI*.asl,linux,gpio,i2c,acpi,Linux,Gpio,I2c,Acpi,我正在使用Q7模块(x86),并尝试在Linux上使用ACPI SSDT覆盖配置外围设备。但我却在挣扎。我想我误解了ACPI的一些核心概念 问题 什么有效 定义块(“abc.asl”、“SSDT”、2、“测试”、“HAL”、2) { 外部(U SB.PCI0.D01D,设备BJ) 范围(\\ U SB.PCI0.D01D) { 设备(ABC0) { Name(_HID,“prp001”)//必须是linux搜索兼容驱动程序的prp001 名称(\u CRS,ResourceTemplate(){

我正在使用Q7模块(x86),并尝试在Linux上使用ACPI SSDT覆盖配置外围设备。但我却在挣扎。我想我误解了ACPI的一些核心概念

问题 什么有效 定义块(“abc.asl”、“SSDT”、2、“测试”、“HAL”、2) { 外部(U SB.PCI0.D01D,设备BJ) 范围(\\ U SB.PCI0.D01D) { 设备(ABC0) { Name(_HID,“prp001”)//必须是linux搜索兼容驱动程序的prp001 名称(\u CRS,ResourceTemplate(){ I2cSerialBusV2( 0x20,//SlaveAddress:I2C地址 ControllerInitiated,//SlaveMode:ControllerInitiated 100000,//连接速度:此设备的最大总线速度 AddressingMode7Bit,//AddressingMode:Addresss模式 “\\\ u SB.PCI0.D01D”,//资源来源:I2C主机控制器 0x00,//ResourceSourceIndex:必须为0 ResourceConsumer,//ResourceUsage:必须是ResourceConsumer ,//描述符名称:整数值的可选名称,它是缓冲区字段的偏移量。。。 独占//共享:共享或独占 ,)//供应商数据:可选字段 }) 名称(_DSD,Package(){ TOUID(“daffd814-6eba-4d8c-8a91-bc9bbf4aa301”), 包(){ 包(2){“兼容”、“nxp、pca9575”}, 包(){“gpio行名称”,包() {“LED_红色”, "", “争取民主变革运动”, “MDIO”, } }, }, TOUID(“dbb8e3e6-5886-4ba6-8795-1319f52a966b”), 包(){ 包(){“led红色”、“LED0”}, 包(){“mdc gpios”、“MDC0”}, 包(){“mdio gpios”,“mdio”}, } }) 名称(LED0,包(){ TOUID(“daffd814-6eba-4d8c-8a91-bc9bbf4aa301”), 包(){ 包(){“gpio hog”,1}, 包(){“gpios”,包(){0,1}, 包(){“输出低”,1}, } }) ... ... } } } 它识别PCA9575 GPIO扩展器,并在Linux中将其注册为gpiochip。LED指示灯固定为低电平且“呈弓形”。这部分似乎并非完全错误

什么不起作用 我将此代码插入到占位符中

设备(MD00)
{
Name(_HID,“prp001”)//必须是linux搜索兼容驱动程序的prp001
名称(_DSD,Package(){
TOUID(“daffd814-6eba-4d8c-8a91-bc9bbf4aa301”),
包(){
包(2){“兼容”、“虚拟、mdio gpio”},
包(){“gpios”,包(){^MDC0,2,0,
^MDIO,3,0,},
}
})
}
但是,当我尝试通过configfs加载此文件时,我可以在
dmesg
中看到一条错误消息,即CRS字段中定义的资源的兼容字段丢失。但我甚至没有定义一个CRS字段

我也不确定我的GPIO是否定义正确。我无法使用
Package(){“gpios”,Package(){0,1}},
命令设置拉模式

我问自己,GPIO扩展器端口是否应该在MDO设备中再次定义为GGIOO结构

Name(\u CRS,ResourceTemplate(){
GpioIo(独占、PullNone、0、0、IoRestrictionNone、,
“\\\ u SB.PCI0.D01D.ABC0”,0,ResourceConsumer){2}
GpioIo(独占、PullNone、0、0、IoRestrictionNone、,
“\\\ u SB.PCI0.D01D.ABC0”,0,ResourceConsumer){3}
})

它似乎也不起作用,我很困惑。我不确定是否正确使用了GPIO PCA9575驱动程序。在哪里可以配置ACPI中的拉偏?驱动程序从的
加载配置,但我不知道在ACPI中在哪里定义它。我希望这里有人有想法。

首先让我们看看设计的主要架构:

+-------------------+
|  HOST             |       +------+
|              MDIO <------>+ MDIO |
|              Intf |       | Phy  |
|                   |       +--^---+
| +------+          |          |       +-----+
| | I²C  |          |          |       | LED |
| | host |          |          |       +--^--+
| +--^---+          |          |          |
|    |              |       +--+---+      |
+-------------------+       | I²C  |      |
     +----------------------> GPIO +------+
                            +------+
本节选为我们提供了系统中的一个新GPIO芯片,其他人可以使用该芯片的资源

例如,在虚拟MDIO Phy情况下(另请参阅)

设备(MD00)
{
名称(“PRP0001”)
名称(\u CRS,ResourceTemplate(){
GpioIo(独占、下拉、0、0、IoRestrictionOutputOnly、,
“\\\ u SB.PCI0.D01D.ABC0”,0,ResourceConsumer){2}//pin 2
GpioIo(独占、下拉、0、0、IoRestrictionOutputOnly、,
“\\\ u SB.PCI0.D01D.ABC0”,0,ResourceConsumer){3}//pin 3
})
名称(_DSD,Package(){
TOUID(“daffd814-6eba-4d8c-8a91-bc9bbf4aa301”),
包(){
包(){“兼容”、“虚拟、mdio gpio”},
包(){
“gpios”,软件包(){
^MD00,0,0,0,//索引0在_CRS->引脚2中
^MD00,1,0,0,//在_CRS->引脚3中的索引1
+-------------------+
|  HOST             |       +------+
|              MDIO <------>+ MDIO |
|              Intf |       | Phy  |
|                   |       +--^---+
| +------+          |          |       +-----+
| | I²C  |          |          |       | LED |
| | host |          |          |       +--^--+
| +--^---+          |          |          |
|    |              |       +--+---+      |
+-------------------+       | I²C  |      |
     +----------------------> GPIO +------+
                            +------+