[alsa-devel] [PATCH v6, 2/2] ASoC: AMD: Enable/Disable auxiliary clock via common clock framework
Agrawal, Akshu
Akshu.Agrawal at amd.com
Wed Apr 11 12:04:23 CEST 2018
On 4/9/2018 5:58 PM, Adam Thomson wrote:
> On 09 April 2018 10:20, Akshu Agrawal wrote:
>
>> This enables/disables and sets auxiliary clock at 25Mhz. It uses
>> common clock framework for proper ref counting. This approach will
>> save power in comparison to keeping it always On in firmware.
>>
>> TEST= aplay -vv <file>
>> check register to see clock enabled
>> kill aplay
>> check register to see clock disabled
>>
>> Signed-off-by: Akshu Agrawal <akshu.agrawal at amd.com>
>> Acked-by: Alex Deucher <alexander.deucher at amd.com>
>> ---
>> V2: Correcting the pin to OSCOUT1 from OSCOUT2
>> V3: Fix error/warnings from kbuild test
>> V4: Fix build errors for platform which do not support CONFIG_COMMON_CLK
>> V5: Review comments by Dan and Sriram
>> V6: Adding COMMON_CLK to Kconfig, moving clk_get to register, var name changes
>>
>> sound/soc/amd/Kconfig | 2 +-
>> sound/soc/amd/acp-da7219-max98357a.c | 150
>> +++++++++++++++++++++++++++++++++--
>> 2 files changed, 146 insertions(+), 6 deletions(-)
>>
>> diff --git a/sound/soc/amd/Kconfig b/sound/soc/amd/Kconfig
>> index 6cbf9cf..8104f8f 100644
>> --- a/sound/soc/amd/Kconfig
>> +++ b/sound/soc/amd/Kconfig
>> @@ -8,7 +8,7 @@ config SND_SOC_AMD_CZ_DA7219MX98357_MACH
>> select SND_SOC_DA7219
>> select SND_SOC_MAX98357A
>> select SND_SOC_ADAU7002
>> - depends on SND_SOC_AMD_ACP && I2C
>> + depends on SND_SOC_AMD_ACP && I2C && COMMON_CLK
>> help
>> This option enables machine driver for DA7219 and MAX9835.
>>
>> diff --git a/sound/soc/amd/acp-da7219-max98357a.c b/sound/soc/amd/acp-
>> da7219-max98357a.c
>> index 1012a80..29847f7 100644
>> --- a/sound/soc/amd/acp-da7219-max98357a.c
>> +++ b/sound/soc/amd/acp-da7219-max98357a.c
>> @@ -30,21 +30,42 @@
>> #include <sound/soc-dapm.h>
>> #include <sound/jack.h>
>> #include <linux/clk.h>
>> +#include <linux/clkdev.h>
>> +#include <linux/clk-provider.h>
>> #include <linux/gpio.h>
>> #include <linux/module.h>
>> #include <linux/i2c.h>
>> #include <linux/input.h>
>> #include <linux/acpi.h>
>> +#include <linux/types.h>
>>
>> #include "../codecs/da7219.h"
>> #include "../codecs/da7219-aad.h"
>>
>> -#define CZ_PLAT_CLK 24000000
>> -#define MCLK_RATE 24576000
>> +#define CZ_PLAT_CLK 25000000
>> +#define DA7219_PLL_OUT 24576000
>> #define DUAL_CHANNEL 2
>>
>> +/* Clock Driving Strength 2 register */
>> +#define CLKDRVSTR2 0x28
>> +/* Clock Control 1 register */
>> +#define MISCCLKCNTL1 0x40
>> +/* Auxiliary clock1 enable bit */
>> +#define OSCCLKENB 2
>> +/* 25Mhz auxiliary output clock freq bit */
>> +#define OSCOUT1CLK25MHZ 16
>> +
>> +struct cz_clock {
>> + const char* acp_clk_name;
>> + struct clk_hw acp_clk_hw;
>> + struct clk_lookup *acp_clk_lookup;
>> + struct clk *acp_clk;
>> + void __iomem *res_base;
>> +};
>> +
>> static struct snd_soc_jack cz_jack;
>> -struct clk *da7219_dai_clk;
>> +static struct clk *da7219_dai_clk;
>> +static struct clk *acpd7219_clk;
>>
>> static int cz_da7219_init(struct snd_soc_pcm_runtime *rtd)
>> {
>> @@ -64,13 +85,18 @@ static int cz_da7219_init(struct snd_soc_pcm_runtime *rtd)
>> }
>>
>> ret = snd_soc_dai_set_pll(codec_dai, 0, DA7219_SYSCLK_PLL,
>> - CZ_PLAT_CLK, MCLK_RATE);
>> + CZ_PLAT_CLK, DA7219_PLL_OUT);
>
> For the PLL_OUT value you should use one of the following:
>
> - For 48KHz family of SRs: 'DA7219_PLL_FREQ_OUT_98304'
> - For 44.1KHz family of SRs: 'DA7219_PLL_FREQ_OUT_90316'
>
> These will ensure correct calculations in the codec's set_pll() function for the
> sampling rate family you require.
>
Changing to DA7219_PLL_FREQ_OUT_98304 as we are using 48Khz SR.
Thanks,
Akshu
More information about the Alsa-devel
mailing list