[alsa-devel] ASoC Sound Driver I2S over LPE, Intel Baytrail SoC. MinnowBoard Max
Hi all, I have the MinnowBoard Max with Baytrail Atom (ValleyView) SoC. I'm attempting to write an Alsa (ASoC) driver for my sound card to work with this board. PCM should work through I2S for this sound card I have.
From my understanding Baytrail's I2S goes over LPE. I read this
thread:https://www.mail-archive.com/elinux-minnowboard@lists.elinux.org/msg01572.ht...
So I understand that I need the 3 components for my ASoC driver. However I am having trouble at understanding how to communicate with the LPE to get the I2S working.
Here is what I have done so far: I am running Ubuntu 14.04 LTS, kernel : 4.3.0-040300rc4
First of all I downloaded the firmware fw_sst_0f28.bin-48kHz_i2s_master fromhttps://kernel.googlesource.com/pub/scm/linux/kernel/git/firmware/linux-firm...
And put it /lib/firmware/intel/. Later I went to the Bios and enabled LPE in PCI mode. I do see the LPE controller now, but it shows as UNCLAIMED.
Later I looked at the sound/soc/inte/baytrail/ and from my understanding in order for me to get the I2S working I need to load this module so I did modprobe snd-soc-sst-baytrail-pcm. Later I wrote a simple codec and machine driver (looking at the example of sound/soc/intel/boards/byt_max98090) however everytime I attempt to register the sound card with snd_soc_register_card, I get the following error message in dmesg : "ASoC: CPU DAI baytrail-pcm-audio not registered".
From this I deduct that although I loaded the snd-soc-sst-baytrail-pcm
module, the driver has not actually been loaded. I'm clueless on how to proceed from here.
I would highly appreciate your help.
Hi Michael,
I have the MinnowBoard Max with Baytrail Atom (ValleyView) SoC. I'm attempting to write an Alsa (ASoC) driver for my sound card to work with this board. PCM should work through I2S for this sound card I have.
Good to hear. There are several folks in Intel trying to enable I2S over the low-speed connector for 3rd party enablement or help 'makers'. This is still work-in-progress but we can already share some elements of information based on our own experience: 1. the default 0.82 firmware doesn't enable the I2S pins, we are currently using a DSDT override to configure them. 2. the audio codec needs to be registered as a child of I2C6 (it's typically I2C2 on regular baytrail platforms). this is also part of the DSDT override. 3. since we need to support multiple audio codecs, we'd like to add a mechanism to add information in the SSDT table to be able to boot the same kernel and select the right drivers. Alternatively you will have to use the DSDT override method until this mechanism is ready. 4. there is no MCLK on existing MinnowBoards, so your codec will have to drive its PLL from the BLCK. newer versions of the MinnowBoard Turbot will support an MCLK but they are in pre-production stage and to the best of my knowledge not available commercially yet. 5. to get the best long-term support you really want to use the newer DPCM-based driver/firmware for e.g 24-bit, TDM and deep-buffer support. We have a set of patches that have not been published upstream yet but if you are interested you can look at my github https://github.com/plbossart/sound/tree/minnow-v4.3-24bit. In theory if you take this code and change the DSDT to support your _HID just like it was done for the rt5651 the drivers should load and register a sound card. Disclaimer: there is no official support on this branch and rebases/fixes may happen at any time. the code will be submitted upstream when ready.
If you provide more information on which codec you are trying to link to we can help further. -Pierre
Hi Pierre, Thank you so much for your reply, and for sharing your repo. This is great news for me, as I was blocked for a while on this issue. And I'm particularly happy that this is all done on top of the 4.3 Kernel, this is very professional of you. I will try the code, and definitely let you know how it goes, or if I have any issues.
Thank you again, Michael
On Tue, Nov 10, 2015 at 10:53 AM, Pierre-Louis Bossart < pierre-louis.bossart@linux.intel.com> wrote:
Hi Michael,
I have the MinnowBoard Max with Baytrail Atom (ValleyView) SoC.
I'm attempting to write an Alsa (ASoC) driver for my sound card to work with this board. PCM should work through I2S for this sound card I have.
Good to hear. There are several folks in Intel trying to enable I2S over the low-speed connector for 3rd party enablement or help 'makers'. This is still work-in-progress but we can already share some elements of information based on our own experience:
- the default 0.82 firmware doesn't enable the I2S pins, we are currently
using a DSDT override to configure them. 2. the audio codec needs to be registered as a child of I2C6 (it's typically I2C2 on regular baytrail platforms). this is also part of the DSDT override. 3. since we need to support multiple audio codecs, we'd like to add a mechanism to add information in the SSDT table to be able to boot the same kernel and select the right drivers. Alternatively you will have to use the DSDT override method until this mechanism is ready. 4. there is no MCLK on existing MinnowBoards, so your codec will have to drive its PLL from the BLCK. newer versions of the MinnowBoard Turbot will support an MCLK but they are in pre-production stage and to the best of my knowledge not available commercially yet. 5. to get the best long-term support you really want to use the newer DPCM-based driver/firmware for e.g 24-bit, TDM and deep-buffer support. We have a set of patches that have not been published upstream yet but if you are interested you can look at my github https://github.com/plbossart/sound/tree/minnow-v4.3-24bit. In theory if you take this code and change the DSDT to support your _HID just like it was done for the rt5651 the drivers should load and register a sound card. Disclaimer: there is no official support on this branch and rebases/fixes may happen at any time. the code will be submitted upstream when ready.
If you provide more information on which codec you are trying to link to we can help further. -Pierre
Hi Pierre, I downloaded 4.3 stable kernel, and I applied all the commits in the repo you forwarded to me. I'm running into an issue, where after doing those instructions: "iasl -tc dsdt_minnow.dsl
mv dsdt_minnow.hex include/
the options following options need to be set in the .config for the tables to be taken into account:
CONFIG_ACPI_CUSTOM_DSDT_FILE=dsdt_minnow.hex CONFIG_ACPI_CUSTOM_DSDT=y"
" I am not able to boot the kernel. The last message I see on the screen before it goes blank is the system is trying to load rmfs. If I take the kernel with your patches however, and do not set the Config_ACPI_CUSTOM_DST_FILE to dsdt_minnow.hex and do not run the iasl tool. ( I just take the kernel with the patches) the system loads.
On the same note I should mention that I am running on Atom E3825 64 bit. Thanks, Michael
On Tue, Nov 10, 2015 at 11:59 AM, Michael Pogrebinsky < michael.pogrebinsky@daqri.com> wrote:
Hi Pierre, Thank you so much for your reply, and for sharing your repo. This is great news for me, as I was blocked for a while on this issue. And I'm particularly happy that this is all done on top of the 4.3 Kernel, this is very professional of you. I will try the code, and definitely let you know how it goes, or if I have any issues.
Thank you again, Michael
On Tue, Nov 10, 2015 at 10:53 AM, Pierre-Louis Bossart < pierre-louis.bossart@linux.intel.com> wrote:
Hi Michael,
I have the MinnowBoard Max with Baytrail Atom (ValleyView) SoC.
I'm attempting to write an Alsa (ASoC) driver for my sound card to work with this board. PCM should work through I2S for this sound card I have.
Good to hear. There are several folks in Intel trying to enable I2S over the low-speed connector for 3rd party enablement or help 'makers'. This is still work-in-progress but we can already share some elements of information based on our own experience:
- the default 0.82 firmware doesn't enable the I2S pins, we are
currently using a DSDT override to configure them. 2. the audio codec needs to be registered as a child of I2C6 (it's typically I2C2 on regular baytrail platforms). this is also part of the DSDT override. 3. since we need to support multiple audio codecs, we'd like to add a mechanism to add information in the SSDT table to be able to boot the same kernel and select the right drivers. Alternatively you will have to use the DSDT override method until this mechanism is ready. 4. there is no MCLK on existing MinnowBoards, so your codec will have to drive its PLL from the BLCK. newer versions of the MinnowBoard Turbot will support an MCLK but they are in pre-production stage and to the best of my knowledge not available commercially yet. 5. to get the best long-term support you really want to use the newer DPCM-based driver/firmware for e.g 24-bit, TDM and deep-buffer support. We have a set of patches that have not been published upstream yet but if you are interested you can look at my github https://github.com/plbossart/sound/tree/minnow-v4.3-24bit. In theory if you take this code and change the DSDT to support your _HID just like it was done for the rt5651 the drivers should load and register a sound card. Disclaimer: there is no official support on this branch and rebases/fixes may happen at any time. the code will be submitted upstream when ready.
If you provide more information on which codec you are trying to link to we can help further. -Pierre
--
[image: DAQRI] http://daqri.com/
Michael Pogrebinsky
Senior Android Developer - DAQRI Smart Helmet Applications
*Tel:* *844-327-7443*
michael.pogrebinsky@daqri.com stephen.keegan@daqri.com DAQRI.com http://daqri.com/
On 11/10/15 8:18 PM, Michael Pogrebinsky wrote:
Hi Pierre, I downloaded 4.3 stable kernel, and I applied all the commits in the repo you forwarded to me. I'm running into an issue, where after doing those instructions: "iasl -tc dsdt_minnow.dsl
mv dsdt_minnow.hex include/
This is only needed if you modified dsdt_minnow.dsl. if you did, can you provide the log of iasl to make sure the .hex file generation goes well.
the options following options need to be set in the .config for the tables to be taken into account:
CONFIG_ACPI_CUSTOM_DSDT_FILE=dsdt_minnow.hex CONFIG_ACPI_CUSTOM_DSDT=y"
yes
I am not able to boot the kernel.
did you try with the unmodified .hex file but those two options set?
Another thing to look at is that you need to enable the LPSS (and specifically I2C6) and disable HDAudio in the boot menu.
Hi Pierre, Thank you for your reply, Did you mean enabling and disabling LPSS and HDAudio in the BIOS or Kernel config? I checked in the BIOS and LPSS is enabled ( ACPI Mode). And I2C6 is enabled as well. Regarding the HDAudio - Do you mean South Cluster Configuration - >Audio Configuration - >Audio Controller ? I see only 2 options there, LPE Audio Support and "Audio Controller --Azalia VCi Enable --Azalia Docking Support Enable --Azalia PME Enable --Azalia HDMI Codec" I disabled it and it didn't make a difference, LPE controller is enabled ( I tried both ACPI and PCI mode)
Regarding the dsdt_minnow.hex , I did not modify it, I simply run the instruction and copied the hex file to include/. The output of iasl command is :
iasl -tc dsdt_minnow.dsl
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20140214-64 [Mar 29 2014]
Copyright (c) 2000 - 2014 Intel Corporation
dsdt_minnow.dsl 2780: Method (XDEP, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 2784: Name (_DEP, Package (0x01)
Remark 2089 - Object is not referenced ^ (Name is within method [XDEP])
dsdt_minnow.dsl 3570: Name (_T_0, Zero)
Remark 2011 - Use of compiler reserved name ^ (_T_0)
dsdt_minnow.dsl 3672: Name (_T_0, Zero)
Remark 2011 - Use of compiler reserved name ^ (_T_0)
dsdt_minnow.dsl 3774: Name (_T_0, Zero)
Remark 2011 - Use of compiler reserved name ^ (_T_0)
dsdt_minnow.dsl 3876: Name (_T_0, Zero)
Remark 2011 - Use of compiler reserved name ^ (_T_0)
dsdt_minnow.dsl 4607: Method (_CRS, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 4643: Method (GDEP, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 4647: Name (_DEP, Package (0x01)
Remark 2089 - Object is not referenced ^ (Name is within method [GDEP])
dsdt_minnow.dsl 7690: Method (_CRS, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8194: Method (SSCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8205: Method (FMCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8216: Method (FPCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8300: Method (SSCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8311: Method (FMCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8322: Method (FPCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8407: Method (SSCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8418: Method (FMCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8429: Method (FPCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8513: Method (SSCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8524: Method (FMCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8535: Method (FPCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8659: Method (SSCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8670: Method (FMCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8681: Method (FPCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8765: Method (SSCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8776: Method (FMCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8787: Method (FPCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8913: Method (SSCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8924: Method (FMCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
dsdt_minnow.dsl 8935: Method (FPCN, 0, NotSerialized)
Remark 2120 - ^ Control Method should be made Serialized (due to creation of named objects within)
ASL Input: dsdt_minnow.dsl - 9261 lines, 257789 bytes, 3258 keywords
AML Output: dsdt.aml - 31359 bytes, 1147 named objects, 2111 executable opcodes
Hex Dump: dsdt_minnow.hex - 294325 bytes
Compilation complete. 0 Errors, 0 Warnings, 31 Remarks, 130 Optimizations
Thanks again for your help Pierre,
Michael
On Wed, Nov 11, 2015 at 7:50 AM, Pierre-Louis Bossart < pierre-louis.bossart@linux.intel.com> wrote:
On 11/10/15 8:18 PM, Michael Pogrebinsky wrote:
Hi Pierre, I downloaded 4.3 stable kernel, and I applied all the commits in the repo you forwarded to me. I'm running into an issue, where after doing those instructions: "iasl -tc dsdt_minnow.dsl
mv dsdt_minnow.hex include/
This is only needed if you modified dsdt_minnow.dsl. if you did, can you provide the log of iasl to make sure the .hex file generation goes well.
the options following options need to be set in the .config
for the tables to be taken into account:
CONFIG_ACPI_CUSTOM_DSDT_FILE=dsdt_minnow.hex CONFIG_ACPI_CUSTOM_DSDT=y"
yes
I am not able to boot the kernel.
did you try with the unmodified .hex file but those two options set?
Another thing to look at is that you need to enable the LPSS (and specifically I2C6) and disable HDAudio in the boot menu.
Dear Pierre Louis
We are having problems enabling I2S output with the UP board.
We have currently two boards one based on Cherry Trail Platform and one on the Apollo Lake.
We want for now enable only I2S output without codec on kernel 4.9/4.10.
Can you give us some hint about the required ACPI asl code to add in the ACPI and if there's something else required in the Linux kernel?
Best Regards
Nicola Lunghi
On 10/02/2017 11:14 AM, Nicola Lunghi wrote:
Dear Pierre Louis
We are having problems enabling I2S output with the UP board.
We have currently two boards one based on Cherry Trail Platform and one on the Apollo Lake.
We want for now enable only I2S output without codec on kernel 4.9/4.10.
Can you give us some hint about the required ACPI asl code to add in the ACPI and if there's something else required in the Linux kernel?
in theory all you need to do is enable the NOCODEC option, make sure that all other machine drivers are removed from the build and only add in ASL the bare minimum to make the audio DSP enumerate (as in make sure that all codecs are removed from the BIOS as well).
On Minnowboard MAX, I used this code https://github.com/plbossart/MinnowBoardMaxFirmware/blob/master/AudioSsdtUpd...
You would need to compare with the existing BIOS since there might be some differences with CHT.
I have not done this work on APL and it's likely different since it's based on PCI.
participants (3)
-
Michael Pogrebinsky
-
Nicola Lunghi
-
Pierre-Louis Bossart