This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PCM9211:PCM9211 Intel x86驱动程序

Guru**** 2387060 points
Other Parts Discussed in Thread: PCM9211
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1202066/pcm9211-pcm9211-intel-x86-driver

器件型号:PCM9211

嗨、大家好!  

我们目前正在尝试在 Intel x86平台上移植 PCM9211驱动程序。

到目前为止,我们已 对驱动程序进行了修改,使其能够支持 ACPI。

目前、驱动程序和 ALSA 相关模块正在成功加载到内核中、

但是、我们仍然看不到显示声卡设备的 Linux、例如 /dev/snd/pcmC0D0c、/dev/snd/pcmC0D0p

我们了解到,英特尔目前正在使用 HDA (高清晰度音频)架构来控制编解码器和连接 ALSA。

为了正常运行、pcm9211驱动程序必须符合 Intel HDA 要求。

目前的 pcm9211驱动程序用于 ARM 平台、不适合英特尔 HDA 机制。

我们需要 TI 的帮助 来修改或提供基于 Intel 平台的新 pcm9211驱动程序、该驱动程序可用于 Intel HDA 机制。

谢谢。  

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否使用过此代码?   

    src - lpaa-android-drivers/pcmdevice-linux-driver -未命名的存储库;编辑此文件'escription'以命名存储库。

    运行以下命令

    LS /sys/bus/i2c/devices/2- 0048 (2是 i2c 总线编号、48是7位 i2c 地址)

    Cat proc/asound/PCM

    CAT proc/asound/卡

    请与我分享 ACPI 表? 并检查是否调用了 i2c_probe?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好,我把 pcmdevice 代码合并到我们的内核源中。 测试后、我发现 PCM 驱动器存在三个问题:

    1. 我以前的 ASL 代码与 PCM9211 DT 驱动程序兼容、并且测试不使用新的 PCMDEVICE 驱动程序。 新的 PCMDEVICE 驱动程序适用于 ACPI、因此您能提供相应的 ASL 代码吗?
    2. PCMDEVICE 驱动程序需要一个.bin 固件。 您能否提供或指导我如何构建它?
    3. 如何在 ASL 中定义 PCM9211相关初始化参数以将其传递至驱动程序。 此问题与项目1有关

    请告知...  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Kashif

    #2使用 regbin 工具生成 bin 文件,它已经在 pcmdeivce/tool 中共享。

    bin 文件名为 pcm9211.bin。 我们的数据表提供了如何设置寄存器。

    #1 ~#3您可以与我分享 ASL 代码,我可以给您留下一些评论。 还有一点、您是否已经获得了支持平台供应商-英特尔? 我认为他们是 ASL 代码方面的专家。

    Br

    丁圣浩

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shenghao:

    要制作 pcm9211.bin、您的意思是遵循 RegBinFile - logo.pdf? 但是,我们正在使用英特尔凌动平台,因此我不 知道如何配置寄存器。

    对于 ASL、请检查以下各项:

    DefinitionBlock ("pcm9211.aml", "SSDT", 2, "ATX", "DVIS2", 2)
    {
        External (_SB_.PCI0.I2C0, DeviceObj)
    
        Scope (\_SB.PCI0.I2C0)
        {
            Device (PCM) {
                Name (_HID, "PRP0001")
                Name (_CID, "pcm9211")
                Name (_DDN, "ATX Networks DVIS2")
                Name (_CRS, ResourceTemplate()
                {
                    I2cSerialBusV2 (
                        0x0040,              // I2C Slave Address
                        ControllerInitiated,
                        400000,              // Bus speed
                        AddressingMode7Bit,
                        "\\_SB.PCI0.I2C0",       // Link to ACPI I2C host contr oller
                        0,
                        ResourceConsumer, , Exclusive,
                    )
                    GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, IoRestrictionOutputOnly,
                        "\\_SB.GPO0", 0x00, ResourceConsumer)
                    {   // Pin# list (refer to #gpioinfo gpiochip0)
                        29,30,31,32,56,57,71,72  // pcm9211_1_int0, adv7482_1_rst, adv7482_2_rst, pcm9211_1_rst, pcm9211_2_rst
                    }
                    GpioInt (Edge, ActiveHigh, ExclusiveAndWake, PullDefault, 0x0000, 
                        "\\_SB.PCI0.GPO0", 0x00, ResourceConsumer)
                    {   // Pin# list (refer to #gpioinfo gpiochip0)
                        29      // pcm9211_1_int0, pcm9211_2_int0, pcm9211_1_int1, pcm9211_2_int2
                    }
                })
    
    	        Name (_DSD, Package() {
    		        ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),     // generic UUIDs defined by kernel
    		        Package () {
    		                Package () {"compatible", "ti,pcm9211"},
    		                Package () {"reg", 0x48},
    		                Package () {"reset-gpios", Package() {^PCM, 0, 6, 0}},
    		                				                    /* ref, idx, pin, active-high */
    		                Package () {"int0-gpios", Package() {^PCM, 0, 0, 0}},
    		                Package () {"ti,group-function", Package(3) {0, 3, 0}},
    		                Package () {"ti,mpio-b-flags-gpio", Package(4) {0, 0, 0, 0}},
    		                Package () {"ti,mpio-b-flag", Package(4) {14, 0, 0, 0}},
    		        },
    	        })
            }
        }
    }
    
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我们可以在如何设置 conf-Call。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    该平台是否支持 I2S?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    名称(_HID、"PRP0001")改成Name (_HID、"pcm9211")试一下

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    static int adv748x_parse_acpi (struct adv748x_state *state)

    struct fwnode_handle * local_fwnode = NULL;
    struct fwnode_endpoint ep;
    bool out_found = false;
    bool in_found = false;

    fwnode_graph_for_each_endpoint(state->dev->fwnode, local_fwnode){
    fwnode_graph_parse_endpoint (local_fwnode、&EP);
    adv_info (state、"端点%p 在端口%d 上"、local_fwnode、ep.port);

    如果(EP.port >= ADV748X_PORT_MAX){
    adv_err (state、"端口%d 上无效端点%p"、
    ep.local_fwnode、ep.port);

    继续;
    }

    if (state->endpoints[EP.port]){
    adv_err (状态、
    "不支持多端口端点");
    继续;
    }

    状态->端点[EP.port]=&EP;

    /*
    *至少有一个输入端点和一个输出端点
    *可以定义。
    */
    如果(EP.port < ADV748X_PORT_TXA)
    in_found = true;
    方案
    out_found = true;
    }

    返回 in_found && out_found? 0:-ENODEV;
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    DefinitionBlock ("adv7482.aml"、"SSDT"、1、"TI"、"ATX"、 2)

    外部(_SB_.PCI0.I2C0、DeviceObj)

    范围(\_SB.PCI0.I2C0)

    器件(DVIS){
    名称(_HID、"PRP0001")
    名称(_DDN、"ATX 网络 DVIS2")
    名称(_CRS、ResourceTemplate())

    I2cSerialBusV2 (.
    0x0070、// I2C 从器件地址
    控制器初始化、
    400000、//总线速度
    AddressingMode7Bit、
    "\\_SB.PCI0.I2C0"、//链接到 ACPI I2C 主机控制器连接器
    0、
    ResourceConsumer,专享
    )
    GpioIo (专用、PullDefault、0x0000、0x0000、IoRestrictionOutputOnly、
    "\\_SB.GPO0"、0x00、ResourceConsumer)
    {// Pin#列表(请参阅#gpioinfo gpiochip0)
    58、59、60、615、57 // adv7482_1_INT1、adv7482_1_INT2、adv7482_2_INT1、adv7482_2_INT2、adv7482_1_rst、 adv7482_rst
    }
    中断(ResourceConsumer、Level、ActiveLow、独占)
    {// Pin#列表(请参阅#gpioinfo gpiochip0)
    30、31 // pcm9211_1_int0、pcm9211_2_int0、pcm9211_1_INT1、pcm9211_2_INT2
    }
    })
    名称(_dd、package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、//内核定义的通用 UUID
    包(){
    软件包(){"compatible"、"Adi, adv7482"},
    Package (){"reg",Package(){ 0x70,0x71,0x72,0x73,0x74,0x74,0x75,0x60,0x61,0x62,0x63,0x64,0x65 },
    软件包(){"reg-names",Package(){"main","DPLL","cp","HDMI","EDID","trongerter","inforframe","cbus","cecp","sdp","txa","TXB"},
    包(){"地址单元格",1 },
    软件包(){"size-cells",0 },
    软件包(){"interrupt-names",Package(){"intrq1","intrq2"},
    }、
    ToUUID ("dbb8e3e6-5886-4ba6-8795-1319f52a966b")、//内核定义的子节点 UUID
    包(){
    软件包(){"port@1","PRT1"},
    封装(){"port@2","PRT2"},
    封装(){"port@3","PRT3"},
    封装(){"port@4","PRT4"},
    封装(){"port@8","PRT8"},
    封装(){"port@a","PRTA"},
    封装(){"port@b","PRTB"},
    }、
    })
    名称(PRT1, Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg",1 },
    }、
    ToUUID ("dbb8e3e6-5886-4ba6-8795-1319f52a966b")、
    包(){
    数据包(){"端点@1","EP10"},
    }、
    })
    名称(EP10, Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg",1 },
    软件包(){"remote-endpoint",软件包(){
    \_SB.PCI0.ISP、"端口@1"、"端点@1"}
    }、
    }
    })

    名称(PRT2、Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg",2 },
    }、
    ToUUID ("dbb8e3e6-5886-4ba6-8795-1319f52a966b")、
    包(){
    数据包(){"端点@2","EP20"},
    }、
    })
    名称(EP20, Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg",2 },
    软件包(){"remote-endpoint",软件包(){
    \_SB.PCI0.ISP、"port@2"、"endpoint@2"}
    }、
    }
    })

    名称(PRT3, Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg",3 },
    }、
    ToUUID ("dbb8e3e6-5886-4ba6-8795-1319f52a966b")、
    包(){
    数据包(){"端点@3","EP30"},
    }、
    })
    名称(EP30, Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg",3 },
    软件包(){"remote-endpoint",软件包(){
    \_SB.PCI0.ISP、"port@3"、"endpoint@3"}
    }、
    }
    })

    名称(PRT4, Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg",4 },
    }、
    ToUUID ("dbb8e3e6-5886-4ba6-8795-1319f52a966b")、
    包(){
    数据包(){"端点@4","EP40"},
    }、
    })
    名称(EP40, Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg",4 },
    软件包(){"remote-endpoint",软件包(){
    \_SB.PCI0.ISP、"port@4"、"Endpoint@4"}
    }、
    }
    })

    名称(PRT8, Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg",8 },
    }、
    ToUUID ("dbb8e3e6-5886-4ba6-8795-1319f52a966b")、
    包(){
    数据包(){"端点@8"、"EP80"},
    }、
    })
    名称(EP80, Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg",8 },
    软件包(){"remote-endpoint",软件包(){
    \_SB.PCI0.ISP、"端口@8"、"端点@8"}
    }、
    }
    })

    名称(PRTA, Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg",10 },
    }、
    ToUUID ("dbb8e3e6-5886-4ba6-8795-1319f52a966b")、
    包(){
    数据包(){"端点@A"、"EPA0"},
    }、
    })
    名称(EPA0, Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg",10 },
    软件包(){"时钟通道",0 },
    数据包(){"data-lannes",数据包(){ 1、2、3、4 },
    软件包(){"remote-endpoint",软件包(){
    \_SB.PCI0.ISP、"port@a"、"endpoint@A"}
    }、
    }
    })

    名称(PRTB, Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg", 11 },
    }、
    ToUUID ("dbb8e3e6-5886-4ba6-8795-1319f52a966b")、
    包(){
    数据包(){"端点@b","EPB0"},
    }、
    })
    名称(EPB0、Package(){
    ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301")、
    包(){
    软件包(){"reg", 11 },
    软件包(){"时钟通道",0 },
    数据包(){"data-lannes",1 },
    软件包(){"remote-endpoint",软件包(){
    \_SB.PCI0.ISP、"port@b"、"端点@b"}
    }、
    }
    })
    }
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您安装了哪款 Ubuntu 18.04、台式机或服务器?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../pcm9211.bine2e.ti.com/.../pcm9211_2D00_1pcs.json

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    为不同 i2c 总线上的芯片编码 iready、请注册两个声卡

    lpaa-android-drivers/pcmdevice-linux-driver -未命名的存储库;编辑此文件"说明"以命名存储库。

    BIN 文件名:pcm9211.bin

    lpaa-android-drivers/tasdevice-linux-driver -未命名的存储库;编辑此文件"说明"以命名存储库。

    BIN 文件名: pcm9211s.bin