BIOS vendors sometimes declare multiple devices in the DSDT table that all refer to the same HID. This is not very smart but not illegal as long as only one device reports present with the _STA method. The ACPI subsystem tracks each device with an extension, e.g. 10EC5640:00 and 10EC5640:01 In the ASoC machine driver, the DAI codec name needs to refer to the ACPI device that reported present, e.g. "i2c-10EC5640:01". The extension will vary depending on how the BIOS is written and which ACPI device is activated. This patch adds a translation function that provides the codec name from the ACPI HID to avoid any hard-coded values in the machine driver. Suggested-by: Mika Westerberg <mika.westerberg@linux.intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
37 lines
1.1 KiB
C
37 lines
1.1 KiB
C
/*
|
|
* Copyright (C) 2013-15, Intel Corporation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License version
|
|
* 2 as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
*/
|
|
|
|
#include <linux/acpi.h>
|
|
|
|
/* translation fron HID to I2C name, needed for DAI codec_name */
|
|
const char *sst_acpi_find_name_from_hid(const u8 hid[ACPI_ID_LEN]);
|
|
|
|
/* acpi match */
|
|
struct sst_acpi_mach *sst_acpi_find_machine(struct sst_acpi_mach *machines);
|
|
|
|
/* Descriptor for SST ASoC machine driver */
|
|
struct sst_acpi_mach {
|
|
/* ACPI ID for the matching machine driver. Audio codec for instance */
|
|
const u8 id[ACPI_ID_LEN];
|
|
/* machine driver name */
|
|
const char *drv_name;
|
|
/* firmware file name */
|
|
const char *fw_filename;
|
|
|
|
/* board name */
|
|
const char *board;
|
|
void (*machine_quirk)(void);
|
|
void *pdata;
|
|
};
|