Lines 358-368
int smn_read(struct pci_dev *dev, u32 smn_addr)
Link Here
|
358 |
} |
358 |
} |
359 |
EXPORT_SYMBOL_NS_GPL(smn_read, SND_SOC_ACP_COMMON); |
359 |
EXPORT_SYMBOL_NS_GPL(smn_read, SND_SOC_ACP_COMMON); |
360 |
|
360 |
|
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) |
362 |
{ |
362 |
{ |
363 |
struct acpi_device *pdm_dev; |
363 |
u32 val; |
364 |
const union acpi_object *obj; |
364 |
|
365 |
u32 pdm_addr, val; |
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; |
366 |
|
380 |
|
367 |
val = readl(chip->base + ACP_PIN_CONFIG); |
381 |
val = readl(chip->base + ACP_PIN_CONFIG); |
368 |
switch (val) { |
382 |
switch (val) { |
Lines 371-412
int check_acp_pdm(struct pci_dev *pci, struct acp_chip_info *chip)
Link Here
|
371 |
case ACP_CONFIG_6: |
385 |
case ACP_CONFIG_6: |
372 |
case ACP_CONFIG_7: |
386 |
case ACP_CONFIG_7: |
373 |
case ACP_CONFIG_8: |
387 |
case ACP_CONFIG_8: |
374 |
case ACP_CONFIG_10: |
|
|
375 |
case ACP_CONFIG_11: |
388 |
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: |
376 |
case ACP_CONFIG_12: |
396 |
case ACP_CONFIG_12: |
377 |
case ACP_CONFIG_13: |
397 |
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: |
378 |
case ACP_CONFIG_14: |
418 |
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; |
379 |
break; |
433 |
break; |
380 |
default: |
434 |
default: |
381 |
return -EINVAL; |
435 |
break; |
382 |
} |
436 |
} |
|
|
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; |
383 |
|
444 |
|
384 |
switch (chip->acp_rev) { |
445 |
switch (chip->acp_rev) { |
385 |
case ACP3X_DEV: |
446 |
case ACP3X_DEV: |
386 |
pdm_addr = ACP_RENOIR_PDM_ADDR; |
447 |
pdm_addr = ACP_RENOIR_PDM_ADDR; |
|
|
448 |
check_acp3x_config(chip); |
387 |
break; |
449 |
break; |
388 |
case ACP6X_DEV: |
450 |
case ACP6X_DEV: |
389 |
pdm_addr = ACP_REMBRANDT_PDM_ADDR; |
451 |
pdm_addr = ACP_REMBRANDT_PDM_ADDR; |
|
|
452 |
check_acp6x_config(chip); |
390 |
break; |
453 |
break; |
391 |
case ACP63_DEV: |
454 |
case ACP63_DEV: |
392 |
pdm_addr = ACP63_PDM_ADDR; |
455 |
pdm_addr = ACP63_PDM_ADDR; |
|
|
456 |
check_acp6x_config(chip); |
393 |
break; |
457 |
break; |
394 |
case ACP70_DEV: |
458 |
case ACP70_DEV: |
395 |
pdm_addr = ACP70_PDM_ADDR; |
459 |
pdm_addr = ACP70_PDM_ADDR; |
|
|
460 |
check_acp70_config(chip); |
396 |
break; |
461 |
break; |
397 |
default: |
462 |
default: |
398 |
return -EINVAL; |
463 |
break; |
399 |
} |
464 |
} |
400 |
|
465 |
|
401 |
pdm_dev = acpi_find_child_device(ACPI_COMPANION(&pci->dev), pdm_addr, 0); |
466 |
if (chip->is_pdm_config) { |
402 |
if (pdm_dev) { |
467 |
pdm_dev = acpi_find_child_device(ACPI_COMPANION(&pci->dev), pdm_addr, 0); |
403 |
if (!acpi_dev_get_property(pdm_dev, "acp-audio-device-type", |
468 |
if (pdm_dev) { |
404 |
ACPI_TYPE_INTEGER, &obj) && |
469 |
if (!acpi_dev_get_property(pdm_dev, "acp-audio-device-type", |
405 |
obj->integer.value == pdm_addr) |
470 |
ACPI_TYPE_INTEGER, &obj) && |
406 |
return 0; |
471 |
obj->integer.value == pdm_addr) |
|
|
472 |
chip->is_pdm_dev = true; |
473 |
} |
407 |
} |
474 |
} |
408 |
return -ENODEV; |
|
|
409 |
} |
475 |
} |
410 |
EXPORT_SYMBOL_NS_GPL(check_acp_pdm, SND_SOC_ACP_COMMON); |
476 |
EXPORT_SYMBOL_NS_GPL(check_acp_config, SND_SOC_ACP_COMMON); |
411 |
|
477 |
|
412 |
MODULE_LICENSE("Dual BSD/GPL"); |
478 |
MODULE_LICENSE("Dual BSD/GPL"); |