On Tue, Sep 30, 2008 at 3:49 PM, Mark Brown broonie@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@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel