[alsa-devel] [PATCH] MLK-22197 sound: asoc: add micfil dc remover amixer control
Viorel Suman
viorel.suman at nxp.com
Thu Jul 4 15:22:30 CEST 2019
Hi Irina,
Some nitpicks inline.
/Viorel
On Jo, 2019-07-04 at 12:52 +0000, Irina Patru wrote:
<snip>
+static int micfil_put_dc_remover_state(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_component *comp = snd_kcontrol_chip(kcontrol);
+ struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
+ struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp);
+ unsigned int *item = ucontrol->value.enumerated.item;
+ int val = snd_soc_enum_item_to_val(e, item[0]);
+ int i = 0, ret = 0;
+ u32 reg_val = 0;
+
+ if (val < 0 || val > 3)
+ return -1;
Maybe return -EINVAL here ?
+ micfil->dc_remover = val;
+
+ /* Calculate total value for all channels */
+ for (i = 0; i < 8; i++)
+ reg_val |= MICFIL_DC_MODE(val, i);
+
+ /* Update DC Remover mode for all channels */
+ ret = snd_soc_component_update_bits(comp,
+ REG_MICFIL_DC_CTRL,
+ MICFIL_DC_CTRL_MASK,
+ reg_val);
Please check the description of snd_soc_component_update_bits return value:
==========
* Return: 1 if the operation was successful and the value of the register
* changed, 0 if the operation was successful, but the value did not change.
* Returns a negative error code otherwise.
==========
We may need to return a non-zero value in case of error only, ie:
=============
if (ret < 0)
return ret;
return 0;
=============
+ return ret;
+}
+
+static int micfil_get_dc_remover_state(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_component *comp = snd_kcontrol_chip(kcontrol);
+ struct fsl_micfil *micfil = snd_soc_component_get_drvdata(comp);
+
+ ucontrol->value.enumerated.item[0] = micfil->dc_remover;
+
+ return 0;
+}
+
+
static int hwvad_put_init_mode(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
@@ -676,6 +731,10 @@ static const struct snd_kcontrol_new fsl_micfil_snd_controls[] = {
SOC_ENUM_EXT("Clock Source",
fsl_micfil_clk_src_enum,
micfil_get_clk_src, micfil_put_clk_src),
+ SOC_ENUM_EXT("MICFIL DC Remover Control",
+ fsl_micfil_dc_remover_enum,
+ micfil_get_dc_remover_state,
+ micfil_put_dc_remover_state),
{
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "HWVAD Input Gain",
diff --git a/sound/soc/fsl/fsl_micfil.h b/sound/soc/fsl/fsl_micfil.h
index 792187b717f0..e47dba9b90b8 100644
--- a/sound/soc/fsl/fsl_micfil.h
+++ b/sound/soc/fsl/fsl_micfil.h
@@ -278,6 +278,16 @@
#define MICFIL_HWVAD_HPF_102HZ 3
#define MICFIL_HWVAD_FRAMET_DEFAULT 10
+/* MICFIL DC Remover Control Register -- REG_MICFIL_DC_CTRL */
+#define MICFIL_DC_CTRL_SHIFT 0
+#define MICFIL_DC_CTRL_MASK 0xFFFF
+#define MICFIL_DC_CTRL_WIDTH 2
+#define MICFIL_DC_CHX_SHIFT(v) (2 * (v))
+#define MICFIL_DC_CHX_MASK(v) ((BIT(MICFIL_DC_CTRL_WIDTH) - 1) \
+ << MICFIL_DC_CHX_SHIFT(v))
+#define MICFIL_DC_MODE(v1, v2) (((v1) << MICFIL_DC_CHX_SHIFT(v2)) \
+ & MICFIL_DC_CHX_MASK(v2))
+
/* MICFIL Output Control Register */
#define MICFIL_OUTGAIN_CHX_SHIFT(v) (4 * (v))
More information about the Alsa-devel
mailing list