@@ -358,11 +358,25 @@ int smn_read(struct pci_dev *dev, u32 smn_addr)
358358}
359359EXPORT_SYMBOL_NS_GPL (smn_read , SND_SOC_ACP_COMMON );
360360
361- int check_acp_pdm ( struct pci_dev * pci , struct acp_chip_info * chip )
361+ static void check_acp3x_config ( struct acp_chip_info * chip )
362362{
363- struct acpi_device * pdm_dev ;
364- const union acpi_object * obj ;
365- u32 pdm_addr , val ;
363+ u32 val ;
364+
365+ val = readl (chip -> base + ACP3X_PIN_CONFIG );
366+ switch (val ) {
367+ case ACP_CONFIG_4 :
368+ chip -> is_i2s_config = true;
369+ chip -> is_pdm_config = true;
370+ break ;
371+ default :
372+ chip -> is_pdm_config = true;
373+ break ;
374+ }
375+ }
376+
377+ static void check_acp6x_config (struct acp_chip_info * chip )
378+ {
379+ u32 val ;
366380
367381 val = readl (chip -> base + ACP_PIN_CONFIG );
368382 switch (val ) {
@@ -371,42 +385,94 @@ int check_acp_pdm(struct pci_dev *pci, struct acp_chip_info *chip)
371385 case ACP_CONFIG_6 :
372386 case ACP_CONFIG_7 :
373387 case ACP_CONFIG_8 :
374- case ACP_CONFIG_10 :
375388 case ACP_CONFIG_11 :
389+ case ACP_CONFIG_14 :
390+ chip -> is_pdm_config = true;
391+ break ;
392+ case ACP_CONFIG_9 :
393+ chip -> is_i2s_config = true;
394+ break ;
395+ case ACP_CONFIG_10 :
376396 case ACP_CONFIG_12 :
377397 case ACP_CONFIG_13 :
398+ chip -> is_i2s_config = true;
399+ chip -> is_pdm_config = true;
400+ break ;
401+ default :
402+ break ;
403+ }
404+ }
405+
406+ static void check_acp70_config (struct acp_chip_info * chip )
407+ {
408+ u32 val ;
409+
410+ val = readl (chip -> base + ACP_PIN_CONFIG );
411+ switch (val ) {
412+ case ACP_CONFIG_4 :
413+ case ACP_CONFIG_5 :
414+ case ACP_CONFIG_6 :
415+ case ACP_CONFIG_7 :
416+ case ACP_CONFIG_8 :
417+ case ACP_CONFIG_11 :
378418 case ACP_CONFIG_14 :
419+ case ACP_CONFIG_17 :
420+ case ACP_CONFIG_18 :
421+ chip -> is_pdm_config = true;
422+ break ;
423+ case ACP_CONFIG_9 :
424+ chip -> is_i2s_config = true;
425+ break ;
426+ case ACP_CONFIG_10 :
427+ case ACP_CONFIG_12 :
428+ case ACP_CONFIG_13 :
429+ case ACP_CONFIG_19 :
430+ case ACP_CONFIG_20 :
431+ chip -> is_i2s_config = true;
432+ chip -> is_pdm_config = true;
379433 break ;
380434 default :
381- return - EINVAL ;
435+ break ;
382436 }
437+ }
438+
439+ void check_acp_config (struct pci_dev * pci , struct acp_chip_info * chip )
440+ {
441+ struct acpi_device * pdm_dev ;
442+ const union acpi_object * obj ;
443+ u32 pdm_addr ;
383444
384445 switch (chip -> acp_rev ) {
385446 case ACP3X_DEV :
386447 pdm_addr = ACP_RENOIR_PDM_ADDR ;
448+ check_acp3x_config (chip );
387449 break ;
388450 case ACP6X_DEV :
389451 pdm_addr = ACP_REMBRANDT_PDM_ADDR ;
452+ check_acp6x_config (chip );
390453 break ;
391454 case ACP63_DEV :
392455 pdm_addr = ACP63_PDM_ADDR ;
456+ check_acp6x_config (chip );
393457 break ;
394458 case ACP70_DEV :
395459 pdm_addr = ACP70_PDM_ADDR ;
460+ check_acp70_config (chip );
396461 break ;
397462 default :
398- return - EINVAL ;
463+ break ;
399464 }
400465
401- pdm_dev = acpi_find_child_device (ACPI_COMPANION (& pci -> dev ), pdm_addr , 0 );
402- if (pdm_dev ) {
403- if (!acpi_dev_get_property (pdm_dev , "acp-audio-device-type" ,
404- ACPI_TYPE_INTEGER , & obj ) &&
405- obj -> integer .value == pdm_addr )
406- return 0 ;
466+ if (chip -> is_pdm_config ) {
467+ pdm_dev = acpi_find_child_device (ACPI_COMPANION (& pci -> dev ), pdm_addr , 0 );
468+ if (pdm_dev ) {
469+ if (!acpi_dev_get_property (pdm_dev , "acp-audio-device-type" ,
470+ ACPI_TYPE_INTEGER , & obj ) &&
471+ obj -> integer .value == pdm_addr )
472+ chip -> is_pdm_dev = true;
473+ }
407474 }
408- return - ENODEV ;
409475}
410- EXPORT_SYMBOL_NS_GPL (check_acp_pdm , SND_SOC_ACP_COMMON );
476+ EXPORT_SYMBOL_NS_GPL (check_acp_config , SND_SOC_ACP_COMMON );
411477
412478MODULE_LICENSE ("Dual BSD/GPL" );
0 commit comments