AnsweredAssumed Answered

Updating audio Codec for an old kernel

Question asked by Robert Murch on Oct 23, 2018
Latest reply on Oct 31, 2018 by Robert Murch

Hello NXP community! Well I have been struggling with a project. The old audio codec (wm8753) for one of our products has gone EOL. The replacement for the codec is the wm8750. I was tasked with attempting to get it working but I am at an impasse. I am going to go ahead and attach a few relevant files: circuit diagram (how the new codec is hooked up), codec datasheet, original and altered machine driver and a log file of the Uboot startup with the altered kernel.

 

Please understand that I started on this project a month ago knowing absolutely nothing about audio codecs or the ASoC system. That being said I believe I have narrowed down the problem to one of two things:

 

1) My altered machine-driver (glue driver) code for the wm8750 is incomplete or incorrect.

2) There is a problem with how the wm8750 has been hooked up. (probobly not the problem)

 

Let me address a few specifics. The kernel is 2.6.35.14 and the first thing I did was alter the Kconfig file @ sound/soc/imx so that the wm8750 would been configured:

 

config SND_SOC_IMX_CCWMX51_WM8750
tristate "SoC Audio support for IMX - WM8750"
select SND_MXC_SOC_SSI
select SND_SOC_WM8750
help
   Say Y if you want to add support for Soc audio on IMX CCWMX51
   with the WM8750

I then ran make menuconfig and turned on the wm8750:

 <*>     SoC Audio support for IMX - WM8750

 

1) After that I altered the machine driver which I found in sound/soc/imx. I have attached the original machine driver for the wm8753. The only code that I changed was the clocking schema:

 

Original clocking schema:

priv->sysclk = pll_out;
snd_soc_dai_set_sysclk(codec_dai, WM8753_MCLK, priv->sysclk, 0);
snd_soc_dai_set_pll(codec_dai, WM8753_PLL1 , WM8753_MCLK, 13000000, pll_out);

 

Altered clocking schema:

priv->sysclk = pll_out;
    snd_soc_dai_set_sysclk(codec_dai, WM8750_SYSCLK, priv->sysclk, SND_SOC_CLOCK_IN);
    //snd_soc_dai_set_pll(codec_dai, WM8753_PLL1 , WM8753_MCLK, 13000000, pll_out);

 

Other than replacing all references to wm8753 with wm8750 no other changes have been made in the machine driver. Please take a look at KernelLog to see the debugging report for the bootup attempt of the altered kernel. Specifically, take a look at lines: 408-412 and 479.

 

2) I am no EE! So this is just a guess but it might be possible that the device was not hooked up correctly by the hardware boys. Note that in the circuit diagram ADCLRC has been driven to ground. However, in the datasheet on page 37 there is a diagram which shows all of these lines connected: BCLK, ADCLRC, DACLRC, ADCDAT,  and DACDAT. Could this be my issue?

 

Please, any assistance with resolving this problem would be greatly appreciated.

Outcomes