ASoC: Improve machine driver selection based on quirk data
Use quirk function to select the correct machine driver by checking all codecs instead of only one based on quirk data. Signed-off-by: Naveen M <naveen.m@intel.com> Signed-off-by: Harsha Priya <harshapriya.n@intel.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
7827d66946
commit
54746dabf7
3 changed files with 52 additions and 0 deletions
|
@ -58,5 +58,25 @@ struct sst_acpi_mach {
|
||||||
/* board name */
|
/* board name */
|
||||||
const char *board;
|
const char *board;
|
||||||
struct sst_acpi_mach * (*machine_quirk)(void *arg);
|
struct sst_acpi_mach * (*machine_quirk)(void *arg);
|
||||||
|
const void *quirk_data;
|
||||||
void *pdata;
|
void *pdata;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define SST_ACPI_MAX_CODECS 3
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct sst_codecs: Structure to hold secondary codec information apart from
|
||||||
|
* the matched one, this data will be passed to the quirk function to match
|
||||||
|
* with the ACPI detected devices
|
||||||
|
*
|
||||||
|
* @num_codecs: number of secondary codecs used in the platform
|
||||||
|
* @codecs: holds the codec IDs
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
struct sst_codecs {
|
||||||
|
int num_codecs;
|
||||||
|
u8 codecs[SST_ACPI_MAX_CODECS][ACPI_ID_LEN];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* check all codecs */
|
||||||
|
struct sst_acpi_mach *sst_acpi_codec_list(void *arg);
|
||||||
|
|
|
@ -151,5 +151,23 @@ bool sst_acpi_find_package_from_hid(const u8 hid[ACPI_ID_LEN],
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(sst_acpi_find_package_from_hid);
|
EXPORT_SYMBOL_GPL(sst_acpi_find_package_from_hid);
|
||||||
|
|
||||||
|
struct sst_acpi_mach *sst_acpi_codec_list(void *arg)
|
||||||
|
{
|
||||||
|
struct sst_acpi_mach *mach = arg;
|
||||||
|
struct sst_codecs *codec_list = (struct sst_codecs *) mach->quirk_data;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (mach->quirk_data == NULL)
|
||||||
|
return mach;
|
||||||
|
|
||||||
|
for (i = 0; i < codec_list->num_codecs; i++) {
|
||||||
|
if (sst_acpi_check_hid(codec_list->codecs[i]) != true)
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mach;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(sst_acpi_codec_list);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL v2");
|
MODULE_LICENSE("GPL v2");
|
||||||
MODULE_DESCRIPTION("Intel Common ACPI Match module");
|
MODULE_DESCRIPTION("Intel Common ACPI Match module");
|
||||||
|
|
|
@ -876,6 +876,10 @@ static void skl_remove(struct pci_dev *pci)
|
||||||
dev_set_drvdata(&pci->dev, NULL);
|
dev_set_drvdata(&pci->dev, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct sst_codecs skl_codecs = { 1, {"NAU88L25"} };
|
||||||
|
static struct sst_codecs kbl_codecs = { 1, {"NAU88L25"} };
|
||||||
|
static struct sst_codecs bxt_codecs = { 1, {"MX98357A"} };
|
||||||
|
|
||||||
static struct sst_acpi_mach sst_skl_devdata[] = {
|
static struct sst_acpi_mach sst_skl_devdata[] = {
|
||||||
{
|
{
|
||||||
.id = "INT343A",
|
.id = "INT343A",
|
||||||
|
@ -886,12 +890,16 @@ static struct sst_acpi_mach sst_skl_devdata[] = {
|
||||||
.id = "INT343B",
|
.id = "INT343B",
|
||||||
.drv_name = "skl_n88l25_s4567",
|
.drv_name = "skl_n88l25_s4567",
|
||||||
.fw_filename = "intel/dsp_fw_release.bin",
|
.fw_filename = "intel/dsp_fw_release.bin",
|
||||||
|
.machine_quirk = sst_acpi_codec_list,
|
||||||
|
.quirk_data = &skl_codecs,
|
||||||
.pdata = &skl_dmic_data
|
.pdata = &skl_dmic_data
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = "MX98357A",
|
.id = "MX98357A",
|
||||||
.drv_name = "skl_n88l25_m98357a",
|
.drv_name = "skl_n88l25_m98357a",
|
||||||
.fw_filename = "intel/dsp_fw_release.bin",
|
.fw_filename = "intel/dsp_fw_release.bin",
|
||||||
|
.machine_quirk = sst_acpi_codec_list,
|
||||||
|
.quirk_data = &skl_codecs,
|
||||||
.pdata = &skl_dmic_data
|
.pdata = &skl_dmic_data
|
||||||
},
|
},
|
||||||
{}
|
{}
|
||||||
|
@ -907,6 +915,8 @@ static struct sst_acpi_mach sst_bxtp_devdata[] = {
|
||||||
.id = "DLGS7219",
|
.id = "DLGS7219",
|
||||||
.drv_name = "bxt_da7219_max98357a_i2s",
|
.drv_name = "bxt_da7219_max98357a_i2s",
|
||||||
.fw_filename = "intel/dsp_fw_bxtn.bin",
|
.fw_filename = "intel/dsp_fw_bxtn.bin",
|
||||||
|
.machine_quirk = sst_acpi_codec_list,
|
||||||
|
.quirk_data = &bxt_codecs,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -920,12 +930,16 @@ static struct sst_acpi_mach sst_kbl_devdata[] = {
|
||||||
.id = "INT343B",
|
.id = "INT343B",
|
||||||
.drv_name = "kbl_n88l25_s4567",
|
.drv_name = "kbl_n88l25_s4567",
|
||||||
.fw_filename = "intel/dsp_fw_kbl.bin",
|
.fw_filename = "intel/dsp_fw_kbl.bin",
|
||||||
|
.machine_quirk = sst_acpi_codec_list,
|
||||||
|
.quirk_data = &kbl_codecs,
|
||||||
.pdata = &skl_dmic_data
|
.pdata = &skl_dmic_data
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = "MX98357A",
|
.id = "MX98357A",
|
||||||
.drv_name = "kbl_n88l25_m98357a",
|
.drv_name = "kbl_n88l25_m98357a",
|
||||||
.fw_filename = "intel/dsp_fw_kbl.bin",
|
.fw_filename = "intel/dsp_fw_kbl.bin",
|
||||||
|
.machine_quirk = sst_acpi_codec_list,
|
||||||
|
.quirk_data = &kbl_codecs,
|
||||||
.pdata = &skl_dmic_data
|
.pdata = &skl_dmic_data
|
||||||
},
|
},
|
||||||
{}
|
{}
|
||||||
|
|
Loading…
Add table
Reference in a new issue