[alsa-devel] [PATCH 1/5 v1] ASoC Add TLV320AIC23 codec driver

Arun KS arunks at mistralsolutions.com
Tue Sep 30 12:47:38 CEST 2008


On Tue, Sep 30, 2008 at 3:49 PM, Mark Brown <broonie at sirena.org.uk> wrote:
> On Tue, Sep 30, 2008 at 03:29:32PM +0530, Arun KS wrote:
>
> Thanks!  It looks like you've addressed pretty much all the comments
> from the first round of reviews but a few additional (fairly minor
> comments):
>
>> +static const char *tlv320aic23_rec_src[] = { "Line", "Mic" };
>> +static const char *tlv320aic23_sidetone_src[] =
>> +    { "-6db", "-9db", "-12db", "-18db", "0db" };
>> +
>> +static const struct soc_enum tlv320aic23_enum[] = {
>> +     SOC_ENUM_SINGLE(TLV320AIC23_ANALOG_AUDIO_CONTROL, 2, 2,
>> +                     tlv320aic23_rec_src),
>> +     SOC_ENUM_SINGLE(TLV320AIC23_ANALOG_AUDIO_CONTROL, 6, 5,
>> +                     tlv320aic23_sidetone_src),
>> +};
>> +
>
> sidetone_src really ought to be a SOC_SINGLE_TLV rather than an enum
> from the looks of it - it's not selecting between sources for the
> sidetone, it's determining the level of the signal so a gain control
> with TLV information would present better in UIs.

Thanks for the comments. Will do that.

>
>> +static const struct snd_kcontrol_new tlv320aic23_rec_src_mux_controls =
>> +SOC_DAPM_ENUM("Route", tlv320aic23_enum[0]);
>
>> +static const struct snd_kcontrol_new tlv320aic23_sidetone_src_controls =
>> +SOC_DAPM_ENUM("Route", tlv320aic23_enum[1]);
>
> I know some of the older codec drivers do it but there's no need to have
> the enums be an array and it doesn't help clarity.  Equally well, it's
> not a blocker for merge.
>
>> +static const struct snd_kcontrol_new tlv320aic23_snd_controls[] = {
>> +     SOC_DOUBLE_R("PCM Playback Volume", TLV320AIC23_LEFT_CHANNEL_VOLUME,
>> +                  TLV320AIC23_RIGHT_CHANNEL_VOLUME, 0, 0x7f, 0),
>
> TLV information might be nice here too (but it's not required).  I
> suspect "Digital Playback Volume" would be a better name, but I'm not
> 100% sure on that one.
>
>> +     SOC_DOUBLE_R("Line Input Mute", TLV320AIC23_LEFT_LINE_VOLUME,
>> +                  TLV320AIC23_RIGHT_LINE_VOLUME, 7, 0x01, 0),
>
> This should be "Line Input Switch" for user interfaces to pick it up
> prop
>
>> +static const struct snd_soc_dapm_route intercon[] = {
>> +
>> +     {"LHPOUT", NULL, "DAC"},
>> +     {"RHPOUT", NULL, "DAC"},
>> +
>> +     {"LOUT", NULL, "DAC"},
>> +     {"ROUT", NULL, "DAC"},
>> +
>> +     {"Capture Source", "Line", "LLINEIN"},
>> +     {"Capture Source", "Line", "RLINEIN"},
>> +
>> +     {"Capture Source", "Mic", "MICIN"},
>> +
>> +     {"PGA Mixer", "Line Switch", "Capture Source"},
>> +     {"PGA Mixer", "Mic Switch", "Capture Source"},
>> +
>> +     {"ADC", NULL, "PGA Mixer"},
>> +};
>
> There are no routes here for your bypass path(s) - this will mean that
> DAPM won't power them on unless there's an active playback and record.
> At present that's fine for digital only bypass paths but if there are
> analogue ones they should be visible here.

I made the bypass and sidetone as controls. The user can switchon them
through amixer controls.

sh-3.00# amixer controls
numid=2,iface=MIXER,name='PCM Playback Switch'
numid=1,iface=MIXER,name='PCM Playback Volume'
numid=3,iface=MIXER,name='Line Input Mute'
numid=4,iface=MIXER,name='Line Input Volume'
numid=9,iface=MIXER,name='Line Bypass'
numid=6,iface=MIXER,name='Mic Booster Switch'
numid=5,iface=MIXER,name='Mic Switch'
numid=10,iface=MIXER,name='Capture Source'
numid=11,iface=MIXER,name='PGA Mixer Line Switch'
numid=12,iface=MIXER,name='PGA Mixer Mic Switch'
numid=8,iface=MIXER,name='Sidetone Gain'
numid=7,iface=MIXER,name='Sidetone Switch'

 sh-3.00# amixer cset numid=9 1
numid=9,iface=MIXER,name='Line Bypass'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
sh-3.00# amixer cset numid=11 1
numid=11,iface=MIXER,name='PGA Mixer Line Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on

Its working.

>
>> +static int tlv320aic23_mute(struct snd_soc_dai *dai, int mute)
>> +{
>> +     struct snd_soc_codec *codec = dai->codec;
>> +     u16 reg;
>> +
>> +     reg =
>> +         tlv320aic23_read_reg_cache(codec,
>> +                                    TLV320AIC23_DIGITAL_AUDIO_CONTROL) &
>> +         ~DACM_MUTE;
>
> Have you resolved the word wrapping issues with your mailer?  I've not
> tried applying the patch but things like this make me think that it has
> been mangled.
>
>> +static int tlv320aic23_set_dai_sysclk(struct snd_soc_dai *codec_dai,
>> +                                   int clk_id, unsigned int freq, int dir)
>> +{
>> +     struct snd_soc_codec *codec = codec_dai->codec;
>> +     struct tlv320aic23_priv *tlv320aic23 = codec->private_data;
>> +
>> +     tlv320aic23->sysclk = freq;
>> +     return 0;
>> +}
>
> You don't actually use sysclk for anything so you may as well drop this
> function and the local variable.

I'll do it.
>
>> +             tlv320aic23->master = 1;
>> +             iface_reg |= MS_MASTER;
>> +             break;
>> +     case SND_SOC_DAIFMT_CBS_CFS:
>> +             tlv320aic23->master = 0;
>> +             break;
>
> You don't seem to use master anywhere either so it could also be
> dropped?

Ok i'll drop.
>
>> +
>> +/* Left (right) line input volume control register */
>> +#define LRS_ENABLED                  0x0100
>> +#define LIM_MUTED                    0x0080
>> +#define LIV_DEFAULT                  0x0017
>> +#define LIV_MAX                              0x001f
>> +#define LIV_MIN                              0x0000
>
> All the definitions in the header should be namespaced - there's things
> like:
>
>> +/* Power control down register */
>> +#define DEVICE_POWER_OFF             0x0080
>> +#define CLK_OFF                              0x0040
>> +#define OSC_OFF                              0x0020
>> +#define OUT_OFF                              0x0010
>> +#define DAC_OFF                              0x0008
>> +#define ADC_OFF                              0x0004
>> +#define MIC_OFF                              0x0002
>> +#define LINE_OFF                     0x0001
>
> which are very likely to collide with other chips.
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>


More information about the Alsa-devel mailing list