ASoC: Intel: Boards: Fix NULL pointer deref in BYT/CHT
Merge series from Hans de Goede <hdegoede@redhat.com>: While testing 6.8 on a Bay Trail device with a ALC5640 codec I noticed a regression in 6.8 which causes a NULL pointer deref in probe(). All BYT/CHT Intel machine drivers are affected. Patch 1/2 of this series fixes all of them. Patch 2/2 adds some small cleanups to cht_bsw_rt5645.c for issues which I noticed while working on 1/2.
This commit is contained in:
commit
8c41be2599
@ -241,7 +241,8 @@ static int snd_byt_cht_cx2072x_probe(struct platform_device *pdev)
|
||||
|
||||
/* fix index of codec dai */
|
||||
for (i = 0; i < ARRAY_SIZE(byt_cht_cx2072x_dais); i++) {
|
||||
if (!strcmp(byt_cht_cx2072x_dais[i].codecs->name,
|
||||
if (byt_cht_cx2072x_dais[i].codecs->name &&
|
||||
!strcmp(byt_cht_cx2072x_dais[i].codecs->name,
|
||||
"i2c-14F10720:00")) {
|
||||
dai_index = i;
|
||||
break;
|
||||
|
@ -245,7 +245,8 @@ static int bytcht_da7213_probe(struct platform_device *pdev)
|
||||
|
||||
/* fix index of codec dai */
|
||||
for (i = 0; i < ARRAY_SIZE(dailink); i++) {
|
||||
if (!strcmp(dailink[i].codecs->name, "i2c-DLGS7213:00")) {
|
||||
if (dailink[i].codecs->name &&
|
||||
!strcmp(dailink[i].codecs->name, "i2c-DLGS7213:00")) {
|
||||
dai_index = i;
|
||||
break;
|
||||
}
|
||||
|
@ -546,7 +546,8 @@ static int snd_byt_cht_es8316_mc_probe(struct platform_device *pdev)
|
||||
|
||||
/* fix index of codec dai */
|
||||
for (i = 0; i < ARRAY_SIZE(byt_cht_es8316_dais); i++) {
|
||||
if (!strcmp(byt_cht_es8316_dais[i].codecs->name,
|
||||
if (byt_cht_es8316_dais[i].codecs->name &&
|
||||
!strcmp(byt_cht_es8316_dais[i].codecs->name,
|
||||
"i2c-ESSX8316:00")) {
|
||||
dai_index = i;
|
||||
break;
|
||||
|
@ -1652,7 +1652,8 @@ static int snd_byt_rt5640_mc_probe(struct platform_device *pdev)
|
||||
|
||||
/* fix index of codec dai */
|
||||
for (i = 0; i < ARRAY_SIZE(byt_rt5640_dais); i++) {
|
||||
if (!strcmp(byt_rt5640_dais[i].codecs->name,
|
||||
if (byt_rt5640_dais[i].codecs->name &&
|
||||
!strcmp(byt_rt5640_dais[i].codecs->name,
|
||||
"i2c-10EC5640:00")) {
|
||||
dai_index = i;
|
||||
break;
|
||||
|
@ -910,7 +910,8 @@ static int snd_byt_rt5651_mc_probe(struct platform_device *pdev)
|
||||
|
||||
/* fix index of codec dai */
|
||||
for (i = 0; i < ARRAY_SIZE(byt_rt5651_dais); i++) {
|
||||
if (!strcmp(byt_rt5651_dais[i].codecs->name,
|
||||
if (byt_rt5651_dais[i].codecs->name &&
|
||||
!strcmp(byt_rt5651_dais[i].codecs->name,
|
||||
"i2c-10EC5651:00")) {
|
||||
dai_index = i;
|
||||
break;
|
||||
|
@ -605,7 +605,8 @@ static int snd_byt_wm5102_mc_probe(struct platform_device *pdev)
|
||||
|
||||
/* find index of codec dai */
|
||||
for (i = 0; i < ARRAY_SIZE(byt_wm5102_dais); i++) {
|
||||
if (!strcmp(byt_wm5102_dais[i].codecs->name,
|
||||
if (byt_wm5102_dais[i].codecs->name &&
|
||||
!strcmp(byt_wm5102_dais[i].codecs->name,
|
||||
"wm5102-codec")) {
|
||||
dai_index = i;
|
||||
break;
|
||||
|
@ -40,7 +40,6 @@ struct cht_acpi_card {
|
||||
struct cht_mc_private {
|
||||
struct snd_soc_jack jack;
|
||||
struct cht_acpi_card *acpi_card;
|
||||
char codec_name[SND_ACPI_I2C_ID_LEN];
|
||||
struct clk *mclk;
|
||||
};
|
||||
|
||||
@ -567,14 +566,14 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
card->dev = &pdev->dev;
|
||||
sprintf(drv->codec_name, "i2c-%s:00", drv->acpi_card->codec_id);
|
||||
|
||||
/* set correct codec name */
|
||||
for (i = 0; i < ARRAY_SIZE(cht_dailink); i++)
|
||||
if (!strcmp(card->dai_link[i].codecs->name,
|
||||
if (cht_dailink[i].codecs->name &&
|
||||
!strcmp(cht_dailink[i].codecs->name,
|
||||
"i2c-10EC5645:00")) {
|
||||
card->dai_link[i].codecs->name = drv->codec_name;
|
||||
dai_index = i;
|
||||
break;
|
||||
}
|
||||
|
||||
/* fixup codec name based on HID */
|
||||
|
@ -466,7 +466,8 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
|
||||
|
||||
/* find index of codec dai */
|
||||
for (i = 0; i < ARRAY_SIZE(cht_dailink); i++) {
|
||||
if (!strcmp(cht_dailink[i].codecs->name, RT5672_I2C_DEFAULT)) {
|
||||
if (cht_dailink[i].codecs->name &&
|
||||
!strcmp(cht_dailink[i].codecs->name, RT5672_I2C_DEFAULT)) {
|
||||
dai_index = i;
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user