Messages in this thread | | | Subject | Re: [PATCH 2/2] ALSA: hda/tegra: fix tegra-hda on tegra30 soc | From | Sameer Pujar <> | Date | Tue, 5 Jan 2021 12:00:29 +0530 |
| |
On 12/25/2020 6:50 AM, Peter Geis wrote: > External email: Use caution opening links or attachments > > > Currently hda on tegra30 fails to open a stream with an input/output error. > This is similar to the issue referenced in [1]. > > For example: > speaker-test -Dhw:0,3 -c 2 > > speaker-test 1.2.2 > > Playback device is hw:0,3 > Stream parameters are 48000Hz, S16_LE, 2 channels > Using 16 octaves of pink noise > Rate set to 48000Hz (requested 48000Hz) > Buffer size range from 64 to 16384 > Period size range from 32 to 8192 > Using max buffer size 16384 > Periods = 4 > was set period_size = 4096 > was set buffer_size = 16384 > 0 - Front Left > Write error: -5,Input/output error > xrun_recovery failed: -5,Input/output error > Transfer failed: Input/output error > > [1] states "Due to a legacy HW design problem", implying the issue applies to all previous tegra-hda devices. > The tegra-hda device was introduced in tegra30 but only utilized in tegra124 until now. > For this reason it is unknown when this issue first manifested. > > Applying the fix in [1] universally resolves this issue on tegra30. > Tested on the Ouya game console and the tf201 tablet. > > [1] 60019d8c650d ("ALSA: hda/tegra: workaround playback failure on Tegra194")
This issue was never seen on Tegra210/Tegra186 and hence at that time it was thought to be specific to Tegra194. I never tested this on Tegra30 since I don't have this device. I will clarify this with HW folks if workaround is safer for all chips.
> > Signed-off-by: Peter Geis <pgwipeout@gmail.com> > Tested-by: Ion Agorria <ion@agorria.com> > --- > sound/pci/hda/hda_tegra.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/sound/pci/hda/hda_tegra.c b/sound/pci/hda/hda_tegra.c > index 70164d1428d4..f8d61e677a09 100644 > --- a/sound/pci/hda/hda_tegra.c > +++ b/sound/pci/hda/hda_tegra.c > @@ -388,8 +388,7 @@ static int hda_tegra_first_init(struct azx *chip, struct platform_device *pdev) > * in powers of 2, next available ratio is 16 which can be > * used as a limiting factor here. > */ > - if (of_device_is_compatible(np, "nvidia,tegra194-hda")) > - chip->bus.core.sdo_limit = 16; > + chip->bus.core.sdo_limit = 16;
Future Tegra chips address this problem and hence cannot be enforced by default. May be we can have like below:
if (of_device_is_compatible(np, "nvidia,tegra30-hda")) chip->bus.core.sdo_limit = 16;
> > /* codec detection */ > if (!bus->codec_mask) { > -- > 2.25.1 >
| |