bool imx;
        bool use_edma;
        bool use_verid;
+       bool volume_sx;
        u64  formats;
 };
 
        .fifo_depth = 8,
        .dataline =  0xf,
        .formats = SNDRV_PCM_FMTBIT_S16_LE,
+       .volume_sx = true,
 };
 
 static struct fsl_micfil_soc_data fsl_micfil_imx8mp = {
        .fifo_depth = 32,
        .dataline =  0xf,
        .formats = SNDRV_PCM_FMTBIT_S32_LE,
+       .volume_sx = false,
 };
 
 static struct fsl_micfil_soc_data fsl_micfil_imx93 = {
        .formats = SNDRV_PCM_FMTBIT_S32_LE,
        .use_edma = true,
        .use_verid = true,
+       .volume_sx = false,
 };
 
 static const struct of_device_id fsl_micfil_dt_ids[] = {
        return 0;
 }
 
-static const struct snd_kcontrol_new fsl_micfil_snd_controls[] = {
+static const struct snd_kcontrol_new fsl_micfil_volume_controls[] = {
+       SOC_SINGLE_TLV("CH0 Volume", REG_MICFIL_OUT_CTRL,
+                      MICFIL_OUTGAIN_CHX_SHIFT(0), 0xF, 0, gain_tlv),
+       SOC_SINGLE_TLV("CH1 Volume", REG_MICFIL_OUT_CTRL,
+                      MICFIL_OUTGAIN_CHX_SHIFT(1), 0xF, 0, gain_tlv),
+       SOC_SINGLE_TLV("CH2 Volume", REG_MICFIL_OUT_CTRL,
+                      MICFIL_OUTGAIN_CHX_SHIFT(2), 0xF, 0, gain_tlv),
+       SOC_SINGLE_TLV("CH3 Volume", REG_MICFIL_OUT_CTRL,
+                      MICFIL_OUTGAIN_CHX_SHIFT(3), 0xF, 0, gain_tlv),
+       SOC_SINGLE_TLV("CH4 Volume", REG_MICFIL_OUT_CTRL,
+                      MICFIL_OUTGAIN_CHX_SHIFT(4), 0xF, 0, gain_tlv),
+       SOC_SINGLE_TLV("CH5 Volume", REG_MICFIL_OUT_CTRL,
+                      MICFIL_OUTGAIN_CHX_SHIFT(5), 0xF, 0, gain_tlv),
+       SOC_SINGLE_TLV("CH6 Volume", REG_MICFIL_OUT_CTRL,
+                      MICFIL_OUTGAIN_CHX_SHIFT(6), 0xF, 0, gain_tlv),
+       SOC_SINGLE_TLV("CH7 Volume", REG_MICFIL_OUT_CTRL,
+                      MICFIL_OUTGAIN_CHX_SHIFT(7), 0xF, 0, gain_tlv),
+};
+
+static const struct snd_kcontrol_new fsl_micfil_volume_sx_controls[] = {
        SOC_SINGLE_SX_TLV("CH0 Volume", REG_MICFIL_OUT_CTRL,
                          MICFIL_OUTGAIN_CHX_SHIFT(0), 0x8, 0xF, gain_tlv),
        SOC_SINGLE_SX_TLV("CH1 Volume", REG_MICFIL_OUT_CTRL,
                          MICFIL_OUTGAIN_CHX_SHIFT(6), 0x8, 0xF, gain_tlv),
        SOC_SINGLE_SX_TLV("CH7 Volume", REG_MICFIL_OUT_CTRL,
                          MICFIL_OUTGAIN_CHX_SHIFT(7), 0x8, 0xF, gain_tlv),
+};
+
+static const struct snd_kcontrol_new fsl_micfil_snd_controls[] = {
        SOC_ENUM_EXT("MICFIL Quality Select",
                     fsl_micfil_quality_enum,
                     micfil_quality_get, micfil_quality_set),
        return 0;
 }
 
+static int fsl_micfil_component_probe(struct snd_soc_component *component)
+{
+       struct fsl_micfil *micfil = snd_soc_component_get_drvdata(component);
+
+       if (micfil->soc->volume_sx)
+               snd_soc_add_component_controls(component, fsl_micfil_volume_sx_controls,
+                                              ARRAY_SIZE(fsl_micfil_volume_sx_controls));
+       else
+               snd_soc_add_component_controls(component, fsl_micfil_volume_controls,
+                                              ARRAY_SIZE(fsl_micfil_volume_controls));
+
+       return 0;
+}
+
 static const struct snd_soc_dai_ops fsl_micfil_dai_ops = {
        .probe          = fsl_micfil_dai_probe,
        .startup        = fsl_micfil_startup,
 
 static const struct snd_soc_component_driver fsl_micfil_component = {
        .name           = "fsl-micfil-dai",
+       .probe          = fsl_micfil_component_probe,
        .controls       = fsl_micfil_snd_controls,
        .num_controls   = ARRAY_SIZE(fsl_micfil_snd_controls),
        .legacy_dai_naming      = 1,