SND_SOC_DAPM_OUTPUT("TX"),
 };
 
-static const struct snd_soc_dapm_route hdmi_routes[] = {
-       { "TX", NULL, "Playback" },
-};
-
 enum {
        DAI_ID_I2S = 0,
        DAI_ID_SPDIF,
        return snd_ctl_add(rtd->card->snd_card, kctl);
 }
 
+static int hdmi_dai_probe(struct snd_soc_dai *dai)
+{
+       struct snd_soc_dapm_context *dapm;
+       struct snd_soc_dapm_route route = {
+               .sink = "TX",
+               .source = dai->driver->playback.stream_name,
+       };
+
+       dapm = snd_soc_component_get_dapm(dai->component);
+
+       return snd_soc_dapm_add_routes(dapm, &route, 1);
+}
+
 static const struct snd_soc_dai_driver hdmi_i2s_dai = {
        .name = "i2s-hifi",
        .id = DAI_ID_I2S,
+       .probe = hdmi_dai_probe,
        .playback = {
                .stream_name = "I2S Playback",
                .channels_min = 2,
 static const struct snd_soc_dai_driver hdmi_spdif_dai = {
        .name = "spdif-hifi",
        .id = DAI_ID_SPDIF,
+       .probe = hdmi_dai_probe,
        .playback = {
                .stream_name = "SPDIF Playback",
                .channels_min = 2,
 static const struct snd_soc_component_driver hdmi_driver = {
        .dapm_widgets           = hdmi_widgets,
        .num_dapm_widgets       = ARRAY_SIZE(hdmi_widgets),
-       .dapm_routes            = hdmi_routes,
-       .num_dapm_routes        = ARRAY_SIZE(hdmi_routes),
        .of_xlate_dai_id        = hdmi_of_xlate_dai_id,
        .idle_bias_on           = 1,
        .use_pmdown_time        = 1,