[alsa-devel] [PATCH V4 1/5] sound: asoc: Adding support for STA529 Audio Codec
rajeev
rajeev-dlh.kumar at st.com
Mon Jun 6 12:19:30 CEST 2011
Hi Lars
On 6/6/2011 1:05 PM, Lars-Peter Clausen wrote:
> On 06/06/2011 09:08 AM, rajeev wrote:
>> Hi Lars-Peter Clausen
>> Please find my answer inline below.
>>
>> On 6/6/2011 11:53 AM, Lars-Peter Clausen wrote:
>>> On 06/06/2011 07:57 AM, Rajeev Kumar wrote:
>>>> This patch adds the support for STA529 audio codec.
>>>> Details of the audio codec can be seen here:
>>>> http://www.st.com/internet/imag_video/product/159187.jsp
>>>>
>>>> Signed-off-by: Rajeev Kumar <rajeev-dlh.kumar at st.com>
>>>> ---
>>>> sound/soc/codecs/Kconfig | 5 +
>>>> sound/soc/codecs/Makefile | 2 +
>>>> sound/soc/codecs/sta529.c | 374 +++++++++++++++++++++++++++++++++++++++++++++
>>>> 3 files changed, 381 insertions(+), 0 deletions(-)
>>>> create mode 100644 sound/soc/codecs/sta529.c
>>>>
>>>> [...]
>>>> +
>>>> +static const struct snd_kcontrol_new sta529_new_snd_controls[] = {
>>>> + SOC_ENUM("PWM Select", pwm_src_enum),
>>>> + SOC_ENUM("MODE Select", mode_src_enum),
>>>
>>> The mode should be configured by the dai_drivers set_fmt callback, and not by a
>>> control.
>>>
>> I think giving a interface to the user is better option rather than doing it in set_fmt callback.
> Why? Both the codec_dai and the cpu_dai have to agree on who is the master and
> who is the slave. So letting the user select the codec mode instead of defining
> it in the board driver doesn't make sense, since the setup will stop working if
> the cpu dai isn't configured to match the codec dais mode.
> Furthermore you don't want to switch the mode while playback is active and
> generally you won't even change it at all, once it has been setup.
>
Ok.
>> [...[
>>>> +
>>>> +static int sta529_mute(struct snd_soc_dai *dai, int mute)
>>>> +{
>>>> + struct snd_soc_codec *codec = dai->codec;
>>>> +
>>>> + u8 mute_reg = snd_soc_read(codec, STA529_FFXCFG0) & ~CODEC_MUTE_VAL;
>>>> +
>>>> + if (mute)
>>>> + mute_reg |= CODEC_MUTE_VAL;
>>>> +
>>>> + snd_soc_update_bits(codec, STA529_FFXCFG0, 0x80, 00);
>>> I guess, it should be mute_reg instead of 00
>>>
>> No, This is value, register is STA529_FFXCFG0
>
> You are always clearing the mute bit, regardless of whether mute is enabled or
> disabled.
> snd_soc_update_bits(codec, STA529_FFXCFG0, 0x80, mute_reg); is probably what
> you want to do.
>
Ok will be corrected in next patch
>> [...]
>>>> +static struct snd_soc_dai_ops sta529_dai_ops = {
>>> Can be const
>> It can not be. Please check snd_soc_dai_ops structure in include/sound/soc-dai.h
>
> Yes, it can. Maybe you are using an outdated ASoC version. Check line 206 of
> include/sound/soc-dai.h in Mark's for-next branch.
>
Ok.
>> [...]
>>>> +
>>>> + snd_soc_add_controls(codec, sta529_snd_controls,
>>>> + ARRAY_SIZE(sta529_snd_controls));
>>>> +
>>>> + snd_soc_add_controls(codec, sta529_new_snd_controls,
>>>> + ARRAY_SIZE(sta529_new_snd_controls));
>>> You should use table based controls setup. i.e assign the control table to the
>>> 'controls' field of your codec_driver.
>>>
>> You can do it in either way.
> Yes, you can, but you should use the codec_driver fields unless you have good
> reasoning not to.
could you please suggest any driver for refrence?
>
>>>> [...]
>>>
>>> Your driver doesn't use any DAPM. You should at least define input and output
>>> pins and their routing, but I would expect that there is more that can be done,
>>> like dynamicly powering unused sections of the codec down, like the DAC or ADC.
>>> .
>>>
>> Right now since my driver has not support for DAPM, so definitions for input and output pins
>> are not there.Once I will implement DAPM feature in future I will send separate patch for that.
>>
>
> Currently there is a bug in the ASoC core, which will cause codec drivers
> without DAPM to be not powered down, even though if they are not used.
> Given that it will maybe take 5 minutes or so to add basic DAPM (Input/Output
> pins and ADC/DAC) it would be a good idea to add it to the inital version of
> the driver.
>
OK,I Wlll.
Please check the steps I need to do for dapm update.
1. static const struct snd_soc_dapm_widget sta529_dapm_widgets[] = {
SND_SOC_DAPM_ADC("ADC", "Capture", STA529_ADCCGF, 3, 0),
SND_SOC_DAPM_OUTPUT("HPL"),
SND_SOC_DAPM_OUTPUT("HPR"),
SND_SOC_DAPM_OUTPUT("SPKL"),
SND_SOC_DAPM_OUTPUT("SPKR"),
SND_SOC_DAPM_INPUT("MIC1"),
};
2. static const struct snd_soc_dapm_route sat529_audio_map[] = {
{"ADC", NULL, " ADC Mixer"},
{"HPL", NULL, "HP Left Out"},
{"HPR", NULL, "HP Right Out"},
{"SPKL", NULL, "SPK Left Out"},
{"SPKR", NULL, "SPK Right Out"},
{"Left HP Mixer", "MIC Switch", "MIC Input"},
};
3. struct snd_soc_codec_driver soc_codec_dev_sta529 = {
.probe = sta529_probe,
.remove = sta529_remove,
.set_bias_level = sta529_set_bias_level,
.suspend = sta529_suspend,
.resume = sta529_resume,
.reg_cache_size = STA529_CACHEREGNUM,
.reg_word_size = sizeof(u8),
.reg_cache_default = sta529_reg,
.dapm_widgets = sta529_dapm_widgets,
.num_dapm_widgets = ARRAY_SIZE(sta529_dapm_widgets),
.dapm_routes = sta529_audio_map,
.num_dapm_routes = ARRAY_SIZE(sta529_audio_map),
};
Please let me know is it fine for you?
Best Rgds
Rajeev
> - Lars
> .
>
More information about the Alsa-devel
mailing list