@@ -28,6 +28,7 @@
#include <sound/pcm_params.h>
#include "../../codecs/nau8825.h"
#include "../../codecs/hdac_hdmi.h"
+#include "hdac_hdmi_common.h"
#define SKL_NUVOTON_CODEC_DAI "nau8825-hifi"
#define SKL_SSM_CODEC_DAI "ssm4567-hifi"
@@ -46,6 +47,7 @@ struct skl_hdmi_pcm {
struct skl_nau88125_private {
struct list_head hdmi_pcm_list;
+ struct device_link *link;
};
enum {
SKL_DPCM_AUDIO_PB = 0,
@@ -232,7 +234,8 @@ static int skylake_hdmi1_init(struct snd_soc_pcm_runtime *rtd)
list_add_tail(&pcm->head, &ctx->hdmi_pcm_list);
- return 0;
+ /* Setup a device_link between machine device and HDMI codec device. */
+ return hdac_hdmi_add_device_link(rtd->card->dev, dai->dev, &ctx->link);
}
static int skylake_hdmi2_init(struct snd_soc_pcm_runtime *rtd)
@@ -250,7 +253,8 @@ static int skylake_hdmi2_init(struct snd_soc_pcm_runtime *rtd)
list_add_tail(&pcm->head, &ctx->hdmi_pcm_list);
- return 0;
+ /* Setup a device_link between machine device and HDMI codec device. */
+ return hdac_hdmi_add_device_link(rtd->card->dev, dai->dev, &ctx->link);
}
@@ -269,7 +273,8 @@ static int skylake_hdmi3_init(struct snd_soc_pcm_runtime *rtd)
list_add_tail(&pcm->head, &ctx->hdmi_pcm_list);
- return 0;
+ /* Setup a device_link between machine device and HDMI codec device. */
+ return hdac_hdmi_add_device_link(rtd->card->dev, dai->dev, &ctx->link);
}
static int skylake_nau8825_fe_init(struct snd_soc_pcm_runtime *rtd)
@@ -719,8 +724,17 @@ static const struct platform_device_id skl_board_ids[] = {
{ }
};
+static int skylake_audio_remove(struct platform_device *pdev)
+{
+ struct snd_soc_card *card = platform_get_drvdata(pdev);
+ struct skl_nau88125_private *ctx = snd_soc_card_get_drvdata(card);
+
+ return hdac_hdmi_del_device_link(&ctx->link);
+}
+
static struct platform_driver skylake_audio = {
.probe = skylake_audio_probe,
+ .remove = skylake_audio_remove,
.driver = {
.name = "skl_n88l25_s4567",
.pm = &snd_soc_pm_ops,