Commit 52f16103 authored by Pierre-Louis Bossart's avatar Pierre-Louis Bossart Committed by Mark Brown

ASoC: SOF: Intel: start moving multi-link handling in dedicated file

The multi-link handling needs to be handled with dedicated helpers
before cleanups and extensions.
Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: default avatarRander Wang <rander.wang@intel.com>
Reviewed-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: default avatarPéter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://lore.kernel.org/r/20221027193540.259520-6-pierre-louis.bossart@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 580803a7
...@@ -5,7 +5,7 @@ snd-sof-acpi-intel-bdw-objs := bdw.o ...@@ -5,7 +5,7 @@ snd-sof-acpi-intel-bdw-objs := bdw.o
snd-sof-intel-hda-common-objs := hda.o hda-loader.o hda-stream.o hda-trace.o \ snd-sof-intel-hda-common-objs := hda.o hda-loader.o hda-stream.o hda-trace.o \
hda-dsp.o hda-ipc.o hda-ctrl.o hda-pcm.o \ hda-dsp.o hda-ipc.o hda-ctrl.o hda-pcm.o \
hda-dai.o hda-bus.o \ hda-dai.o hda-bus.o hda-mlink.o \
skl.o hda-loader-skl.o \ skl.o hda-loader-skl.o \
apl.o cnl.o tgl.o icl.o mtl.o hda-common-ops.o apl.o cnl.o tgl.o icl.o mtl.o hda-common-ops.o
......
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
//
// This file is provided under a dual BSD/GPLv2 license. When using or
// redistributing this file, you may do so under either license.
//
// Copyright(c) 2022 Intel Corporation. All rights reserved.
//
/*
* Management of HDaudio multi-link (capabilities, power, coupling)
*/
#include <sound/hdaudio_ext.h>
#include <sound/hda_register.h>
#include <linux/acpi.h>
#include <linux/module.h>
#include <linux/soundwire/sdw.h>
#include <linux/soundwire/sdw_intel.h>
#include <sound/intel-dsp-config.h>
#include <sound/intel-nhlt.h>
#include <sound/sof.h>
#include <sound/sof/xtensa.h>
#include "../sof-audio.h"
#include "../sof-pci-dev.h"
#include "../ops.h"
#include "hda.h"
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
void hda_bus_ml_get_capabilities(struct hdac_bus *bus)
{
if (bus->mlcap)
snd_hdac_ext_bus_get_ml_capabilities(bus);
}
void hda_bus_ml_put_all(struct hdac_bus *bus)
{
struct hdac_ext_link *hlink;
list_for_each_entry(hlink, &bus->hlink_list, list)
snd_hdac_ext_bus_link_put(bus, hlink);
}
#endif
...@@ -871,9 +871,6 @@ static int hda_init_caps(struct snd_sof_dev *sdev) ...@@ -871,9 +871,6 @@ static int hda_init_caps(struct snd_sof_dev *sdev)
{ {
struct hdac_bus *bus = sof_to_bus(sdev); struct hdac_bus *bus = sof_to_bus(sdev);
struct snd_sof_pdata *pdata = sdev->pdata; struct snd_sof_pdata *pdata = sdev->pdata;
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
struct hdac_ext_link *hlink;
#endif
struct sof_intel_hda_dev *hdev = pdata->hw_pdata; struct sof_intel_hda_dev *hdev = pdata->hw_pdata;
u32 link_mask; u32 link_mask;
int ret = 0; int ret = 0;
...@@ -918,9 +915,7 @@ static int hda_init_caps(struct snd_sof_dev *sdev) ...@@ -918,9 +915,7 @@ static int hda_init_caps(struct snd_sof_dev *sdev)
skip_soundwire: skip_soundwire:
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) hda_bus_ml_get_capabilities(bus);
if (bus->mlcap)
snd_hdac_ext_bus_get_ml_capabilities(bus);
/* create codec instances */ /* create codec instances */
hda_codec_probe_bus(sdev); hda_codec_probe_bus(sdev);
...@@ -928,12 +923,8 @@ static int hda_init_caps(struct snd_sof_dev *sdev) ...@@ -928,12 +923,8 @@ static int hda_init_caps(struct snd_sof_dev *sdev)
if (!HDA_IDISP_CODEC(bus->codec_mask)) if (!HDA_IDISP_CODEC(bus->codec_mask))
hda_codec_i915_display_power(sdev, false); hda_codec_i915_display_power(sdev, false);
/* hda_bus_ml_put_all(bus);
* we are done probing so decrement link counts
*/
list_for_each_entry(hlink, &bus->hlink_list, list)
snd_hdac_ext_bus_link_put(bus, hlink);
#endif
return 0; return 0;
} }
......
...@@ -742,6 +742,18 @@ static inline int hda_codec_i915_exit(struct snd_sof_dev *sdev) { return 0; } ...@@ -742,6 +742,18 @@ static inline int hda_codec_i915_exit(struct snd_sof_dev *sdev) { return 0; }
#endif #endif
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
void hda_bus_ml_get_capabilities(struct hdac_bus *bus);
void hda_bus_ml_put_all(struct hdac_bus *bus);
#else
static inline void hda_bus_ml_get_capabilities(struct hdac_bus *bus) { }
static inline void hda_bus_ml_put_all(struct hdac_bus *bus) { }
#endif /* CONFIG_SND_SOC_SOF_HDA */
/* /*
* Trace Control. * Trace Control.
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment