[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