···516516 }517517 }518518519519+#ifdef CONFIG_PM520520+ /* wake up sleepers here before other callbacks for avoiding potential521521+ * deadlocks with other locks (e.g. in kctls);522522+ * then this notifies the shutdown and sleepers would abort immediately523523+ */524524+ wake_up_all(&card->power_sleep);525525+#endif526526+519527 /* notify all connected devices about disconnection */520528 /* at this point, they cannot respond to any calls except release() */521529···551543 }552544553545#ifdef CONFIG_PM554554- wake_up(&card->power_sleep);555546 snd_power_sync_ref(card);556547#endif557548}
+82-16
sound/soc/amd/acp/acp-legacy-common.c
···358358}359359EXPORT_SYMBOL_NS_GPL(smn_read, SND_SOC_ACP_COMMON);360360361361-int check_acp_pdm(struct pci_dev *pci, struct acp_chip_info *chip)361361+static void check_acp3x_config(struct acp_chip_info *chip)362362{363363- struct acpi_device *pdm_dev;364364- const union acpi_object *obj;365365- u32 pdm_addr, val;363363+ u32 val;364364+365365+ val = readl(chip->base + ACP3X_PIN_CONFIG);366366+ switch (val) {367367+ case ACP_CONFIG_4:368368+ chip->is_i2s_config = true;369369+ chip->is_pdm_config = true;370370+ break;371371+ default:372372+ chip->is_pdm_config = true;373373+ break;374374+ }375375+}376376+377377+static void check_acp6x_config(struct acp_chip_info *chip)378378+{379379+ u32 val;366380367381 val = readl(chip->base + ACP_PIN_CONFIG);368382 switch (val) {···385371 case ACP_CONFIG_6:386372 case ACP_CONFIG_7:387373 case ACP_CONFIG_8:388388- case ACP_CONFIG_10:389374 case ACP_CONFIG_11:375375+ case ACP_CONFIG_14:376376+ chip->is_pdm_config = true;377377+ break;378378+ case ACP_CONFIG_9:379379+ chip->is_i2s_config = true;380380+ break;381381+ case ACP_CONFIG_10:390382 case ACP_CONFIG_12:391383 case ACP_CONFIG_13:392392- case ACP_CONFIG_14:384384+ chip->is_i2s_config = true;385385+ chip->is_pdm_config = true;393386 break;394387 default:395395- return -EINVAL;388388+ break;396389 }390390+}391391+392392+static void check_acp70_config(struct acp_chip_info *chip)393393+{394394+ u32 val;395395+396396+ val = readl(chip->base + ACP_PIN_CONFIG);397397+ switch (val) {398398+ case ACP_CONFIG_4:399399+ case ACP_CONFIG_5:400400+ case ACP_CONFIG_6:401401+ case ACP_CONFIG_7:402402+ case ACP_CONFIG_8:403403+ case ACP_CONFIG_11:404404+ case ACP_CONFIG_14:405405+ case ACP_CONFIG_17:406406+ case ACP_CONFIG_18:407407+ chip->is_pdm_config = true;408408+ break;409409+ case ACP_CONFIG_9:410410+ chip->is_i2s_config = true;411411+ break;412412+ case ACP_CONFIG_10:413413+ case ACP_CONFIG_12:414414+ case ACP_CONFIG_13:415415+ case ACP_CONFIG_19:416416+ case ACP_CONFIG_20:417417+ chip->is_i2s_config = true;418418+ chip->is_pdm_config = true;419419+ break;420420+ default:421421+ break;422422+ }423423+}424424+425425+void check_acp_config(struct pci_dev *pci, struct acp_chip_info *chip)426426+{427427+ struct acpi_device *pdm_dev;428428+ const union acpi_object *obj;429429+ u32 pdm_addr;397430398431 switch (chip->acp_rev) {399432 case ACP3X_DEV:400433 pdm_addr = ACP_RENOIR_PDM_ADDR;434434+ check_acp3x_config(chip);401435 break;402436 case ACP6X_DEV:403437 pdm_addr = ACP_REMBRANDT_PDM_ADDR;438438+ check_acp6x_config(chip);404439 break;405440 case ACP63_DEV:406441 pdm_addr = ACP63_PDM_ADDR;442442+ check_acp6x_config(chip);407443 break;408444 case ACP70_DEV:409445 pdm_addr = ACP70_PDM_ADDR;446446+ check_acp70_config(chip);410447 break;411448 default:412412- return -EINVAL;449449+ break;413450 }414451415415- pdm_dev = acpi_find_child_device(ACPI_COMPANION(&pci->dev), pdm_addr, 0);416416- if (pdm_dev) {417417- if (!acpi_dev_get_property(pdm_dev, "acp-audio-device-type",418418- ACPI_TYPE_INTEGER, &obj) &&419419- obj->integer.value == pdm_addr)420420- return 0;452452+ if (chip->is_pdm_config) {453453+ pdm_dev = acpi_find_child_device(ACPI_COMPANION(&pci->dev), pdm_addr, 0);454454+ if (pdm_dev) {455455+ if (!acpi_dev_get_property(pdm_dev, "acp-audio-device-type",456456+ ACPI_TYPE_INTEGER, &obj) &&457457+ obj->integer.value == pdm_addr)458458+ chip->is_pdm_dev = true;459459+ }421460 }422422- return -ENODEV;423461}424424-EXPORT_SYMBOL_NS_GPL(check_acp_pdm, SND_SOC_ACP_COMMON);462462+EXPORT_SYMBOL_NS_GPL(check_acp_config, SND_SOC_ACP_COMMON);425463426464MODULE_LICENSE("Dual BSD/GPL");
+4-5
sound/soc/amd/acp/acp-pci.c
···100100 ret = -EINVAL;101101 goto release_regions;102102 }103103-104103 dmic_dev = platform_device_register_data(dev, "dmic-codec", PLATFORM_DEVID_NONE, NULL, 0);105104 if (IS_ERR(dmic_dev)) {106105 dev_err(dev, "failed to create DMIC device\n");···118119 if (ret)119120 goto unregister_dmic_dev;120121122122+ check_acp_config(pci, chip);123123+ if (!chip->is_pdm_dev && !chip->is_i2s_config)124124+ goto skip_pdev_creation;125125+121126 res = devm_kcalloc(&pci->dev, num_res, sizeof(struct resource), GFP_KERNEL);122127 if (!res) {123128 ret = -ENOMEM;···138135 res[i].end = res[i].start;139136 }140137 }141141-142142- ret = check_acp_pdm(pci, chip);143143- if (ret < 0)144144- goto skip_pdev_creation;145138146139 chip->flag = flag;147140 memset(&pdevinfo, 0, sizeof(pdevinfo));
+9-1
sound/soc/amd/acp/amd.h
···138138 void __iomem *base; /* ACP memory PCI base */139139 struct platform_device *chip_pdev;140140 unsigned int flag; /* Distinguish b/w Legacy or Only PDM */141141+ bool is_pdm_dev; /* flag set to true when ACP PDM controller exists */142142+ bool is_pdm_config; /* flag set to true when PDM configuration is selected from BIOS */143143+ bool is_i2s_config; /* flag set to true when I2S configuration is selected from BIOS */141144};142145143146struct acp_stream {···215212 ACP_CONFIG_13,216213 ACP_CONFIG_14,217214 ACP_CONFIG_15,215215+ ACP_CONFIG_16,216216+ ACP_CONFIG_17,217217+ ACP_CONFIG_18,218218+ ACP_CONFIG_19,219219+ ACP_CONFIG_20,218220};219221220222extern const struct snd_soc_dai_ops asoc_acp_cpu_dai_ops;···248240int restore_acp_i2s_params(struct snd_pcm_substream *substream,249241 struct acp_dev_data *adata, struct acp_stream *stream);250242251251-int check_acp_pdm(struct pci_dev *pci, struct acp_chip_info *chip);243243+void check_acp_config(struct pci_dev *pci, struct acp_chip_info *chip);252244253245static inline u64 acp_get_byte_count(struct acp_dev_data *adata, int dai_id, int direction)254246{
···113113 if (!pins)114114 return -ENOMEM;115115116116- ret = snd_soc_card_jack_new_pins(card, "Headset", SND_JACK_HEADSET | SND_JACK_BTN_0,116116+ ret = snd_soc_card_jack_new_pins(card, "Headset Jack", SND_JACK_HEADSET | SND_JACK_BTN_0,117117 &data->jack, pins, num_pins);118118 if (ret)119119 return ret;
+1-1
sound/soc/intel/avs/boards/nau8825.c
···9696 * 4 buttons here map to the google Reference headset.9797 * The use of these buttons can be decided by the user space.9898 */9999- ret = snd_soc_card_jack_new_pins(card, "Headset", SND_JACK_HEADSET | SND_JACK_BTN_0 |9999+ ret = snd_soc_card_jack_new_pins(card, "Headset Jack", SND_JACK_HEADSET | SND_JACK_BTN_0 |100100 SND_JACK_BTN_1 | SND_JACK_BTN_2 | SND_JACK_BTN_3,101101 jack, pins, num_pins);102102 if (ret)
+2-1
sound/soc/intel/avs/boards/rt274.c
···102102 if (!pins)103103 return -ENOMEM;104104105105- ret = snd_soc_card_jack_new_pins(card, "Headset", SND_JACK_HEADSET, jack, pins, num_pins);105105+ ret = snd_soc_card_jack_new_pins(card, "Headset Jack", SND_JACK_HEADSET, jack, pins,106106+ num_pins);106107 if (ret)107108 return ret;108109
+2-2
sound/soc/intel/avs/boards/rt286.c
···6363 if (!pins)6464 return -ENOMEM;65656666- ret = snd_soc_card_jack_new_pins(card, "Headset", SND_JACK_HEADSET | SND_JACK_BTN_0, jack,6767- pins, num_pins);6666+ ret = snd_soc_card_jack_new_pins(card, "Headset Jack", SND_JACK_HEADSET | SND_JACK_BTN_0,6767+ jack, pins, num_pins);6868 if (ret)6969 return ret;7070
+2-2
sound/soc/intel/avs/boards/rt298.c
···7474 if (!pins)7575 return -ENOMEM;76767777- ret = snd_soc_card_jack_new_pins(card, "Headset", SND_JACK_HEADSET | SND_JACK_BTN_0, jack,7878- pins, num_pins);7777+ ret = snd_soc_card_jack_new_pins(card, "Headset Jack", SND_JACK_HEADSET | SND_JACK_BTN_0,7878+ jack, pins, num_pins);7979 if (ret)8080 return ret;8181