#define SUN8I_AIF1CLK_CTRL_AIF1_WORD_SIZ_MASK  GENMASK(5, 4)
 #define SUN8I_AIF1CLK_CTRL_AIF1_DATA_FMT_MASK  GENMASK(3, 2)
 
+enum {
+       SUN8I_CODEC_AIF1,
+       SUN8I_CODEC_NAIFS
+};
+
 struct sun8i_codec_quirks {
        bool legacy_widgets     : 1;
        bool lrck_inversion     : 1;
        }
 }
 
-static int sun8i_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
+static int sun8i_codec_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
 {
        struct sun8i_codec *scodec = snd_soc_dai_get_drvdata(dai);
        u32 value;
        return 0;
 }
 
+static const struct snd_soc_dai_ops sun8i_codec_dai_ops = {
+       .set_fmt        = sun8i_codec_set_fmt,
+       .hw_params      = sun8i_codec_hw_params,
+};
+
+static struct snd_soc_dai_driver sun8i_codec_dais[] = {
+       {
+               .name   = "sun8i-codec-aif1",
+               .id     = SUN8I_CODEC_AIF1,
+               .ops    = &sun8i_codec_dai_ops,
+               /* capture capabilities */
+               .capture = {
+                       .stream_name    = "AIF1 Capture",
+                       .channels_min   = 1,
+                       .channels_max   = 2,
+                       .rates          = SNDRV_PCM_RATE_8000_192000,
+                       .formats        = SNDRV_PCM_FMTBIT_S16_LE,
+                       .sig_bits       = 24,
+               },
+               /* playback capabilities */
+               .playback = {
+                       .stream_name    = "AIF1 Playback",
+                       .channels_min   = 1,
+                       .channels_max   = 2,
+                       .rates          = SNDRV_PCM_RATE_8000_192000,
+                       .formats        = SNDRV_PCM_FMTBIT_S16_LE,
+               },
+       },
+};
+
 static const char *const sun8i_aif_stereo_mux_enum_values[] = {
        "Stereo", "Reverse Stereo", "Sum Mono", "Mix Mono"
 };
                            SUN8I_DAC_DIG_CTRL_ENDA, 0, NULL, 0),
 
        /* AIF "ADC" Outputs */
-       SND_SOC_DAPM_AIF_OUT("AIF1 AD0L", "Capture", 0,
+       SND_SOC_DAPM_AIF_OUT("AIF1 AD0L", "AIF1 Capture", 0,
                             SUN8I_AIF1_ADCDAT_CTRL,
                             SUN8I_AIF1_ADCDAT_CTRL_AIF1_AD0L_ENA, 0),
-       SND_SOC_DAPM_AIF_OUT("AIF1 AD0R", "Capture", 1,
+       SND_SOC_DAPM_AIF_OUT("AIF1 AD0R", "AIF1 Capture", 1,
                             SUN8I_AIF1_ADCDAT_CTRL,
                             SUN8I_AIF1_ADCDAT_CTRL_AIF1_AD0R_ENA, 0),
 
                         &sun8i_aif1_da0_stereo_mux_control),
 
        /* AIF "DAC" Inputs */
-       SND_SOC_DAPM_AIF_IN("AIF1 DA0L", "Playback", 0,
+       SND_SOC_DAPM_AIF_IN("AIF1 DA0L", "AIF1 Playback", 0,
                            SUN8I_AIF1_DACDAT_CTRL,
                            SUN8I_AIF1_DACDAT_CTRL_AIF1_DA0L_ENA, 0),
-       SND_SOC_DAPM_AIF_IN("AIF1 DA0R", "Playback", 1,
+       SND_SOC_DAPM_AIF_IN("AIF1 DA0R", "AIF1 Playback", 1,
                            SUN8I_AIF1_DACDAT_CTRL,
                            SUN8I_AIF1_DACDAT_CTRL_AIF1_DA0R_ENA, 0),
 
        return 0;
 }
 
-static const struct snd_soc_dai_ops sun8i_codec_dai_ops = {
-       .hw_params = sun8i_codec_hw_params,
-       .set_fmt = sun8i_set_fmt,
-};
-
-static struct snd_soc_dai_driver sun8i_codec_dai = {
-       .name = "sun8i",
-       /* playback capabilities */
-       .playback = {
-               .stream_name = "Playback",
-               .channels_min = 1,
-               .channels_max = 2,
-               .rates = SNDRV_PCM_RATE_8000_192000,
-               .formats = SNDRV_PCM_FMTBIT_S16_LE,
-       },
-       /* capture capabilities */
-       .capture = {
-               .stream_name = "Capture",
-               .channels_min = 1,
-               .channels_max = 2,
-               .rates = SNDRV_PCM_RATE_8000_192000,
-               .formats = SNDRV_PCM_FMTBIT_S16_LE,
-               .sig_bits = 24,
-       },
-       /* pcm operations */
-       .ops = &sun8i_codec_dai_ops,
-};
-
 static const struct snd_soc_component_driver sun8i_soc_component = {
        .dapm_widgets           = sun8i_codec_dapm_widgets,
        .num_dapm_widgets       = ARRAY_SIZE(sun8i_codec_dapm_widgets),
        }
 
        ret = devm_snd_soc_register_component(&pdev->dev, &sun8i_soc_component,
-                                    &sun8i_codec_dai, 1);
+                                             sun8i_codec_dais,
+                                             ARRAY_SIZE(sun8i_codec_dais));
        if (ret) {
                dev_err(&pdev->dev, "Failed to register codec\n");
                goto err_suspend;