View | Details | Raw Unified | Return to bug 218780
Collapse All | Expand All

(-)a/sound/soc/amd/acp/acp-legacy-common.c (-15 / +81 lines)
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");
(-)a/sound/soc/amd/acp/acp-pci.c (-6 / +5 lines)
Lines 100-106 static int acp_pci_probe(struct pci_dev *pci, const struct pci_device_id *pci_id Link Here
100
		ret = -EINVAL;
100
		ret = -EINVAL;
101
		goto release_regions;
101
		goto release_regions;
102
	}
102
	}
103
103
	chip->flag = flag;
104
	dmic_dev = platform_device_register_data(dev, "dmic-codec", PLATFORM_DEVID_NONE, NULL, 0);
104
	dmic_dev = platform_device_register_data(dev, "dmic-codec", PLATFORM_DEVID_NONE, NULL, 0);
105
	if (IS_ERR(dmic_dev)) {
105
	if (IS_ERR(dmic_dev)) {
106
		dev_err(dev, "failed to create DMIC device\n");
106
		dev_err(dev, "failed to create DMIC device\n");
Lines 119-124 static int acp_pci_probe(struct pci_dev *pci, const struct pci_device_id *pci_id Link Here
119
	if (ret)
119
	if (ret)
120
		goto unregister_dmic_dev;
120
		goto unregister_dmic_dev;
121
121
122
	check_acp_config(pci, chip);
123
	if (!chip->is_pdm_dev && !chip->is_i2s_config)
124
		goto skip_pdev_creation;
125
122
	res = devm_kcalloc(&pci->dev, num_res, sizeof(struct resource), GFP_KERNEL);
126
	res = devm_kcalloc(&pci->dev, num_res, sizeof(struct resource), GFP_KERNEL);
123
	if (!res) {
127
	if (!res) {
124
		ret = -ENOMEM;
128
		ret = -ENOMEM;
Lines 136-146 static int acp_pci_probe(struct pci_dev *pci, const struct pci_device_id *pci_id Link Here
136
		}
140
		}
137
	}
141
	}
138
142
139
	ret = check_acp_pdm(pci, chip);
140
	if (ret < 0)
141
		goto skip_pdev_creation;
142
143
	chip->flag = flag;
144
	memset(&pdevinfo, 0, sizeof(pdevinfo));
143
	memset(&pdevinfo, 0, sizeof(pdevinfo));
145
144
146
	pdevinfo.name = chip->name;
145
	pdevinfo.name = chip->name;
(-)a/sound/soc/amd/acp/amd.h (-1 / +9 lines)
Lines 138-143 struct acp_chip_info { Link Here
138
	void __iomem *base;	/* ACP memory PCI base */
138
	void __iomem *base;	/* ACP memory PCI base */
139
	struct platform_device *chip_pdev;
139
	struct platform_device *chip_pdev;
140
	unsigned int flag;	/* Distinguish b/w Legacy or Only PDM */
140
	unsigned int flag;	/* Distinguish b/w Legacy or Only PDM */
141
	bool is_pdm_dev;	/* flag set to true when ACP PDM controller exists */
142
	bool is_pdm_config;	/* flag set to true when PDM configuration is selected from BIOS */
143
	bool is_i2s_config;	/* flag set to true when I2S configuration is selected from BIOS */
141
};
144
};
142
145
143
struct acp_stream {
146
struct acp_stream {
Lines 212-217 enum acp_config { Link Here
212
	ACP_CONFIG_13,
215
	ACP_CONFIG_13,
213
	ACP_CONFIG_14,
216
	ACP_CONFIG_14,
214
	ACP_CONFIG_15,
217
	ACP_CONFIG_15,
218
	ACP_CONFIG_16,
219
	ACP_CONFIG_17,
220
	ACP_CONFIG_18,
221
	ACP_CONFIG_19,
222
	ACP_CONFIG_20,
215
};
223
};
216
224
217
extern const struct snd_soc_dai_ops asoc_acp_cpu_dai_ops;
225
extern const struct snd_soc_dai_ops asoc_acp_cpu_dai_ops;
Lines 240-246 void restore_acp_pdm_params(struct snd_pcm_substream *substream, Link Here
240
int restore_acp_i2s_params(struct snd_pcm_substream *substream,
248
int restore_acp_i2s_params(struct snd_pcm_substream *substream,
241
			   struct acp_dev_data *adata, struct acp_stream *stream);
249
			   struct acp_dev_data *adata, struct acp_stream *stream);
242
250
243
int check_acp_pdm(struct pci_dev *pci, struct acp_chip_info *chip);
251
void check_acp_config(struct pci_dev *pci, struct acp_chip_info *chip);
244
252
245
static inline u64 acp_get_byte_count(struct acp_dev_data *adata, int dai_id, int direction)
253
static inline u64 acp_get_byte_count(struct acp_dev_data *adata, int dai_id, int direction)
246
{
254
{
(-)a/sound/soc/amd/acp/chip_offset_byte.h (-1 / +1 lines)
Lines 20-25 Link Here
20
#define ACP_SOFT_RESET                          0x1000
20
#define ACP_SOFT_RESET                          0x1000
21
#define ACP_CONTROL                             0x1004
21
#define ACP_CONTROL                             0x1004
22
#define ACP_PIN_CONFIG				0x1440
22
#define ACP_PIN_CONFIG				0x1440
23
#define ACP3X_PIN_CONFIG			0x1400
23
24
24
#define ACP_EXTERNAL_INTR_REG_ADDR(adata, offset, ctrl) \
25
#define ACP_EXTERNAL_INTR_REG_ADDR(adata, offset, ctrl) \
25
	(adata->acp_base + adata->rsrc->irq_reg_offset + offset + (ctrl * 0x04))
26
	(adata->acp_base + adata->rsrc->irq_reg_offset + offset + (ctrl * 0x04))
26
- 

Return to bug 218780