| From 404f6a94e8473b35f7ee6b2d8f732e211355e53e Mon Sep 17 00:00:00 2001 |
| From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> |
| Date: Thu, 26 Jan 2017 14:09:41 -0600 |
| Subject: [PATCH] ASoC: Intel: cht_bsw_rt5645: harden ACPI device detection |
| |
| commit 42648c2270ca0c96935dfc5d0f5c4f8d2406cf75 upstream. |
| |
| Fix classic issue of having multiple codecs listed in DSDT |
| but a single one actually enabled. The previous code did |
| not handle such errors and could also lead to uninitalized |
| configurations |
| |
| Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/sound/soc/intel/boards/cht_bsw_rt5645.c b/sound/soc/intel/boards/cht_bsw_rt5645.c |
| index 16c94c45ce50..5b3418af6a88 100644 |
| --- a/sound/soc/intel/boards/cht_bsw_rt5645.c |
| +++ b/sound/soc/intel/boards/cht_bsw_rt5645.c |
| @@ -358,22 +358,32 @@ static int snd_cht_mc_probe(struct platform_device *pdev) |
| struct sst_acpi_mach *mach; |
| const char *i2c_name = NULL; |
| int dai_index = 0; |
| + bool found = false; |
| |
| drv = devm_kzalloc(&pdev->dev, sizeof(*drv), GFP_ATOMIC); |
| if (!drv) |
| return -ENOMEM; |
| |
| + mach = (&pdev->dev)->platform_data; |
| + |
| for (i = 0; i < ARRAY_SIZE(snd_soc_cards); i++) { |
| - if (acpi_dev_found(snd_soc_cards[i].codec_id)) { |
| + if (acpi_dev_found(snd_soc_cards[i].codec_id) && |
| + (!strncmp(snd_soc_cards[i].codec_id, mach->id, 8))) { |
| dev_dbg(&pdev->dev, |
| "found codec %s\n", snd_soc_cards[i].codec_id); |
| card = snd_soc_cards[i].soc_card; |
| drv->acpi_card = &snd_soc_cards[i]; |
| + found = true; |
| break; |
| } |
| } |
| + |
| + if (!found) { |
| + dev_err(&pdev->dev, "No matching HID found in supported list\n"); |
| + return -ENODEV; |
| + } |
| + |
| card->dev = &pdev->dev; |
| - mach = card->dev->platform_data; |
| sprintf(drv->codec_name, "i2c-%s:00", drv->acpi_card->codec_id); |
| |
| /* set correct codec name */ |
| -- |
| 2.12.0 |
| |