On 7/20/23 11:26, Brent Lu wrote:
Implement a helper function to get number of codecs from ACPI subsystem to remove the need of quirk flag in machine driver.
Signed-off-by: Brent Lu brent.lu@intel.com
sound/soc/intel/boards/sof_maxim_common.c | 174 +++++++++++++--------- sound/soc/intel/boards/sof_maxim_common.h | 21 ++- 2 files changed, 113 insertions(+), 82 deletions(-)
diff --git a/sound/soc/intel/boards/sof_maxim_common.c b/sound/soc/intel/boards/sof_maxim_common.c index 112e89951da0..f8b44a81fec1 100644 --- a/sound/soc/intel/boards/sof_maxim_common.c +++ b/sound/soc/intel/boards/sof_maxim_common.c @@ -4,6 +4,7 @@ #include <linux/module.h> #include <linux/string.h> #include <sound/pcm.h> +#include <sound/pcm_params.h> #include <sound/soc.h> #include <sound/soc-acpi.h> #include <sound/soc-dai.h> @@ -11,6 +12,21 @@ #include <uapi/sound/asound.h> #include "sof_maxim_common.h"
+/* helper function to get the number of specific codec */ +static int get_num_codecs(const char *hid) +{
- struct acpi_device *adev = NULL;
- int dev_num = 0;
- do {
adev = acpi_dev_get_next_match_dev(adev, hid, NULL, -1);
Humm, I am a bit worried about reference counts.
See https://elixir.bootlin.com/linux/latest/source/drivers/acpi/utils.c#L916, it's not clear to me where the get() is done.
Adding Andy to make sure this is done right.
if (adev)
dev_num++;
- } while (adev != NULL);
- return dev_num;
+}