[alsa-devel] [PATCH 1/5 v1] ASoC Add TLV320AIC23 codec driver
Mark Brown
broonie at sirena.org.uk
Tue Sep 30 12:19:52 CEST 2008
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.
> +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
properly.
> +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.
> +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.
> + 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?
> +
> +/* 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.
More information about the Alsa-devel
mailing list