Skip to content

Commit

Permalink
ASoC: Intel: bxt_pcm512x: make HDMI optional
Browse files Browse the repository at this point in the history
Make sure we can test without the HDMI/HDAC dependencies

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
  • Loading branch information
plbossart committed Nov 9, 2018
1 parent 69ae10c commit 7ce1ad6
Showing 1 changed file with 63 additions and 53 deletions.
116 changes: 63 additions & 53 deletions sound/soc/intel/boards/bxt_pcm512x.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include "../../codecs/pcm512x.h"
#include "../atom/sst-atom-controls.h"

#ifdef CONFIG_SND_SOC_HDAC_HDMI
static struct snd_soc_jack broxton_hdmi[3];

struct bxt_hdmi_pcm {
Expand All @@ -40,6 +41,64 @@ struct bxt_hdmi_pcm {
int device;
};

static int broxton_hdmi_init(struct snd_soc_pcm_runtime *rtd)
{
struct bxt_card_private *ctx = snd_soc_card_get_drvdata(rtd->card);
struct snd_soc_dai *dai = rtd->codec_dai;
struct bxt_hdmi_pcm *pcm;

pcm = devm_kzalloc(rtd->card->dev, sizeof(*pcm), GFP_KERNEL);
if (!pcm)
return -ENOMEM;

pcm->device = dai->id;
pcm->codec_dai = dai;

list_add_tail(&pcm->head, &ctx->hdmi_pcm_list);

return 0;
}

#define NAME_SIZE 32
static int bxt_card_late_probe(struct snd_soc_card *card)
{
struct bxt_card_private *ctx = snd_soc_card_get_drvdata(card);
struct bxt_hdmi_pcm *pcm;
struct snd_soc_component *component = NULL;
int err, i = 0;
char jack_name[NAME_SIZE];

list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) {
component = pcm->codec_dai->component;
snprintf(jack_name, sizeof(jack_name),
"HDMI/DP, pcm=%d Jack", pcm->device);
err = snd_soc_card_jack_new(card, jack_name,
SND_JACK_AVOUT, &broxton_hdmi[i],
NULL, 0);

if (err)
return err;

err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device,
&broxton_hdmi[i]);
if (err < 0)
return err;

i++;
}

if (!component)
return -EINVAL;

return hdac_hdmi_jack_port_init(component, &card->dapm);
}
#else
static int bxt_card_late_probe(struct snd_soc_card *card)
{
return 0;
}
#endif

struct bxt_card_private {
struct list_head hdmi_pcm_list;
};
Expand Down Expand Up @@ -114,24 +173,6 @@ static const struct snd_soc_ops aif1_ops = {
.shutdown = aif1_shutdown,
};

static int broxton_hdmi_init(struct snd_soc_pcm_runtime *rtd)
{
struct bxt_card_private *ctx = snd_soc_card_get_drvdata(rtd->card);
struct snd_soc_dai *dai = rtd->codec_dai;
struct bxt_hdmi_pcm *pcm;

pcm = devm_kzalloc(rtd->card->dev, sizeof(*pcm), GFP_KERNEL);
if (!pcm)
return -ENOMEM;

pcm->device = dai->id;
pcm->codec_dai = dai;

list_add_tail(&pcm->head, &ctx->hdmi_pcm_list);

return 0;
}

static struct snd_soc_dai_link dailink[] = {
/* CODEC<->CODEC link */
/* back ends */
Expand All @@ -151,6 +192,7 @@ static struct snd_soc_dai_link dailink[] = {
.dpcm_playback = 1,
.dpcm_capture = 1,
},
#ifdef CONFIG_SND_SOC_HDAC_HDMI
{
.name = "iDisp1",
.id = 1,
Expand Down Expand Up @@ -184,42 +226,9 @@ static struct snd_soc_dai_link dailink[] = {
.dpcm_playback = 1,
.no_pcm = 1,
},

#endif
};

#define NAME_SIZE 32
static int bxt_card_late_probe(struct snd_soc_card *card)
{
struct bxt_card_private *ctx = snd_soc_card_get_drvdata(card);
struct bxt_hdmi_pcm *pcm;
struct snd_soc_component *component = NULL;
int err, i = 0;
char jack_name[NAME_SIZE];

list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) {
component = pcm->codec_dai->component;
snprintf(jack_name, sizeof(jack_name),
"HDMI/DP, pcm=%d Jack", pcm->device);
err = snd_soc_card_jack_new(card, jack_name,
SND_JACK_AVOUT, &broxton_hdmi[i],
NULL, 0);

if (err)
return err;

err = hdac_hdmi_jack_init(pcm->codec_dai, pcm->device,
&broxton_hdmi[i]);
if (err < 0)
return err;

i++;
}

if (!component)
return -EINVAL;

return hdac_hdmi_jack_port_init(component, &card->dapm);
}

/* SoC card */
static struct snd_soc_card bxt_pcm512x_card = {
Expand Down Expand Up @@ -250,7 +259,8 @@ static int bxt_pcm512x_probe(struct platform_device *pdev)
if (!ctx)
return -ENOMEM;

INIT_LIST_HEAD(&ctx->hdmi_pcm_list);
if (IS_ENABLED(CONFIG_SND_SOC_HDAC_HDMI))
INIT_LIST_HEAD(&ctx->hdmi_pcm_list);

mach = (&pdev->dev)->platform_data;
card = &bxt_pcm512x_card;
Expand Down

0 comments on commit 7ce1ad6

Please sign in to comment.