[alsa-devel] [PATCH] ASoC: add RT5640 CODEC driver
Bard
bardliao at realtek.com
Mon Apr 22 09:03:05 CEST 2013
Dear Mark,
Please see my reply below.
Thanks.
-----Original Message-----
From: Mark Brown [mailto:broonie at opensource.wolfsonmicro.com]
Sent: Tuesday, April 16, 2013 10:38 PM
To: Bard
Cc: Flove; Oder Chiou; swarren at nvidia.com; bard
Subject: Re: [PATCH] ASoC: add RT5640 CODEC driver
On Tue, Apr 16, 2013 at 10:10:37PM +0800, bardliao at realtek.com wrote:
Please remember to post things to the list... just a quick scan through
here:
> +static int rt5640_reg_init(struct snd_soc_codec *codec) {
> + int i;
> + for (i = 0; i < RT5640_INIT_REG_LEN; i++)
> + snd_soc_write(codec, init_list[i].reg, init_list[i].val);
> + return 0;
> +}
This should be converted over to regmap. There's support for paging in the core, look at regmap_range.
Bard: I will use regmap_register_patch to do that.
> +/* IN1/IN2 Input Type */
> +static const char * const rt5640_input_mode[] = {
> + "Single ended", "Differential"};
> +
> +static const SOC_ENUM_SINGLE_DECL(
> + rt5640_in1_mode_enum, RT5640_IN1_IN2,
> + RT5640_IN_SFT1, rt5640_input_mode);
> +
> +static const SOC_ENUM_SINGLE_DECL(
> + rt5640_in2_mode_enum, RT5640_IN3_IN4,
> + RT5640_IN_SFT2, rt5640_input_mode);
Platform data...
Bard: Can I export a function that machine can configure it by this function?
> +static int rt5640_vol_rescale_put(struct snd_kcontrol *kcontrol,
> + struct snd_ctl_elem_value *ucontrol) {
> + struct soc_mixer_control *mc =
> + (struct soc_mixer_control *)kcontrol->private_value;
> + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
> + unsigned int val, val2;
> +
> + val = VOL_RESCALE_MAX_VOL - ucontrol->value.integer.value[0];
> + val2 = VOL_RESCALE_MAX_VOL - ucontrol->value.integer.value[1];
> + return snd_soc_update_bits_locked(codec, mc->reg, RT5640_L_VOL_MASK |
> + RT5640_R_VOL_MASK, val << mc->shift | val2); }
This looks like a variant on the _RANGE controls?
Bard: Yes, we want to limit the max value of volume.
If it is not good, I will change it.
> +static int hp_event(struct snd_soc_dapm_widget *w,
> + struct snd_kcontrol *kcontrol, int event) {
> + switch (event) {
> + case SND_SOC_DAPM_POST_PMU:
> + break;
> +
> + case SND_SOC_DAPM_PRE_PMD:
> + break;
> +
> + default:
> + return 0;
> + }
> + return 0;
> +}
Remove this, it doesn't actually do anything any more.
Bard: I will remove it.
------Please consider the environment before printing this e-mail.
More information about the Alsa-devel
mailing list