26 #include <linux/pci.h>
27 #include <linux/slab.h>
28 #include <linux/module.h>
44 static int ac97_clock = 48000;
46 static bool spdif_aclink = 1;
47 static int ac97_codec = -1;
70 #define ATI_REG_ISR 0x00
71 #define ATI_REG_ISR_IN_XRUN (1U<<0)
72 #define ATI_REG_ISR_IN_STATUS (1U<<1)
73 #define ATI_REG_ISR_OUT_XRUN (1U<<2)
74 #define ATI_REG_ISR_OUT_STATUS (1U<<3)
75 #define ATI_REG_ISR_SPDF_XRUN (1U<<4)
76 #define ATI_REG_ISR_SPDF_STATUS (1U<<5)
77 #define ATI_REG_ISR_PHYS_INTR (1U<<8)
78 #define ATI_REG_ISR_PHYS_MISMATCH (1U<<9)
79 #define ATI_REG_ISR_CODEC0_NOT_READY (1U<<10)
80 #define ATI_REG_ISR_CODEC1_NOT_READY (1U<<11)
81 #define ATI_REG_ISR_CODEC2_NOT_READY (1U<<12)
82 #define ATI_REG_ISR_NEW_FRAME (1U<<13)
84 #define ATI_REG_IER 0x04
85 #define ATI_REG_IER_IN_XRUN_EN (1U<<0)
86 #define ATI_REG_IER_IO_STATUS_EN (1U<<1)
87 #define ATI_REG_IER_OUT_XRUN_EN (1U<<2)
88 #define ATI_REG_IER_OUT_XRUN_COND (1U<<3)
89 #define ATI_REG_IER_SPDF_XRUN_EN (1U<<4)
90 #define ATI_REG_IER_SPDF_STATUS_EN (1U<<5)
91 #define ATI_REG_IER_PHYS_INTR_EN (1U<<8)
92 #define ATI_REG_IER_PHYS_MISMATCH_EN (1U<<9)
93 #define ATI_REG_IER_CODEC0_INTR_EN (1U<<10)
94 #define ATI_REG_IER_CODEC1_INTR_EN (1U<<11)
95 #define ATI_REG_IER_CODEC2_INTR_EN (1U<<12)
96 #define ATI_REG_IER_NEW_FRAME_EN (1U<<13)
97 #define ATI_REG_IER_SET_BUS_BUSY (1U<<14)
99 #define ATI_REG_CMD 0x08
100 #define ATI_REG_CMD_POWERDOWN (1U<<0)
101 #define ATI_REG_CMD_RECEIVE_EN (1U<<1)
102 #define ATI_REG_CMD_SEND_EN (1U<<2)
103 #define ATI_REG_CMD_STATUS_MEM (1U<<3)
104 #define ATI_REG_CMD_SPDF_OUT_EN (1U<<4)
105 #define ATI_REG_CMD_SPDF_STATUS_MEM (1U<<5)
106 #define ATI_REG_CMD_SPDF_THRESHOLD (3U<<6)
107 #define ATI_REG_CMD_SPDF_THRESHOLD_SHIFT 6
108 #define ATI_REG_CMD_IN_DMA_EN (1U<<8)
109 #define ATI_REG_CMD_OUT_DMA_EN (1U<<9)
110 #define ATI_REG_CMD_SPDF_DMA_EN (1U<<10)
111 #define ATI_REG_CMD_SPDF_OUT_STOPPED (1U<<11)
112 #define ATI_REG_CMD_SPDF_CONFIG_MASK (7U<<12)
113 #define ATI_REG_CMD_SPDF_CONFIG_34 (1U<<12)
114 #define ATI_REG_CMD_SPDF_CONFIG_78 (2U<<12)
115 #define ATI_REG_CMD_SPDF_CONFIG_69 (3U<<12)
116 #define ATI_REG_CMD_SPDF_CONFIG_01 (4U<<12)
117 #define ATI_REG_CMD_INTERLEAVE_SPDF (1U<<16)
118 #define ATI_REG_CMD_AUDIO_PRESENT (1U<<20)
119 #define ATI_REG_CMD_INTERLEAVE_IN (1U<<21)
120 #define ATI_REG_CMD_INTERLEAVE_OUT (1U<<22)
121 #define ATI_REG_CMD_LOOPBACK_EN (1U<<23)
122 #define ATI_REG_CMD_PACKED_DIS (1U<<24)
123 #define ATI_REG_CMD_BURST_EN (1U<<25)
124 #define ATI_REG_CMD_PANIC_EN (1U<<26)
125 #define ATI_REG_CMD_MODEM_PRESENT (1U<<27)
126 #define ATI_REG_CMD_ACLINK_ACTIVE (1U<<28)
127 #define ATI_REG_CMD_AC_SOFT_RESET (1U<<29)
128 #define ATI_REG_CMD_AC_SYNC (1U<<30)
129 #define ATI_REG_CMD_AC_RESET (1U<<31)
131 #define ATI_REG_PHYS_OUT_ADDR 0x0c
132 #define ATI_REG_PHYS_OUT_CODEC_MASK (3U<<0)
133 #define ATI_REG_PHYS_OUT_RW (1U<<2)
134 #define ATI_REG_PHYS_OUT_ADDR_EN (1U<<8)
135 #define ATI_REG_PHYS_OUT_ADDR_SHIFT 9
136 #define ATI_REG_PHYS_OUT_DATA_SHIFT 16
138 #define ATI_REG_PHYS_IN_ADDR 0x10
139 #define ATI_REG_PHYS_IN_READ_FLAG (1U<<8)
140 #define ATI_REG_PHYS_IN_ADDR_SHIFT 9
141 #define ATI_REG_PHYS_IN_DATA_SHIFT 16
143 #define ATI_REG_SLOTREQ 0x14
145 #define ATI_REG_COUNTER 0x18
146 #define ATI_REG_COUNTER_SLOT (3U<<0)
147 #define ATI_REG_COUNTER_BITCLOCK (31U<<8)
149 #define ATI_REG_IN_FIFO_THRESHOLD 0x1c
151 #define ATI_REG_IN_DMA_LINKPTR 0x20
152 #define ATI_REG_IN_DMA_DT_START 0x24
153 #define ATI_REG_IN_DMA_DT_NEXT 0x28
154 #define ATI_REG_IN_DMA_DT_CUR 0x2c
155 #define ATI_REG_IN_DMA_DT_SIZE 0x30
157 #define ATI_REG_OUT_DMA_SLOT 0x34
158 #define ATI_REG_OUT_DMA_SLOT_BIT(x) (1U << ((x) - 3))
159 #define ATI_REG_OUT_DMA_SLOT_MASK 0x1ff
160 #define ATI_REG_OUT_DMA_THRESHOLD_MASK 0xf800
161 #define ATI_REG_OUT_DMA_THRESHOLD_SHIFT 11
163 #define ATI_REG_OUT_DMA_LINKPTR 0x38
164 #define ATI_REG_OUT_DMA_DT_START 0x3c
165 #define ATI_REG_OUT_DMA_DT_NEXT 0x40
166 #define ATI_REG_OUT_DMA_DT_CUR 0x44
167 #define ATI_REG_OUT_DMA_DT_SIZE 0x48
169 #define ATI_REG_SPDF_CMD 0x4c
170 #define ATI_REG_SPDF_CMD_LFSR (1U<<4)
171 #define ATI_REG_SPDF_CMD_SINGLE_CH (1U<<5)
172 #define ATI_REG_SPDF_CMD_LFSR_ACC (0xff<<8)
174 #define ATI_REG_SPDF_DMA_LINKPTR 0x50
175 #define ATI_REG_SPDF_DMA_DT_START 0x54
176 #define ATI_REG_SPDF_DMA_DT_NEXT 0x58
177 #define ATI_REG_SPDF_DMA_DT_CUR 0x5c
178 #define ATI_REG_SPDF_DMA_DT_SIZE 0x60
180 #define ATI_REG_MODEM_MIRROR 0x7c
181 #define ATI_REG_AUDIO_MIRROR 0x80
183 #define ATI_REG_6CH_REORDER 0x84
184 #define ATI_REG_6CH_REORDER_EN (1U<<0)
186 #define ATI_REG_FIFO_FLUSH 0x88
187 #define ATI_REG_FIFO_OUT_FLUSH (1U<<0)
188 #define ATI_REG_FIFO_IN_FLUSH (1U<<1)
191 #define ATI_REG_LINKPTR_EN (1U<<0)
194 #define ATI_REG_DMA_DT_SIZE (0xffffU<<0)
195 #define ATI_REG_DMA_FIFO_USED (0x1fU<<16)
196 #define ATI_REG_DMA_FIFO_FREE (0x1fU<<21)
197 #define ATI_REG_DMA_STATE (7U<<26)
200 #define ATI_MAX_DESCRIPTORS 256
223 #define NUM_ATI_CODECS 3
299 static struct snd_pci_quirk atiixp_quirks[]
__devinitdata = {
300 SND_PCI_QUIRK(0x105b, 0x0c81,
"Foxconn RC4107MA-RS2", 0),
301 SND_PCI_QUIRK(0x15bd, 0x3100,
"DFI RS482", 0),
313 static int snd_atiixp_update_bits(
struct atiixp *
chip,
unsigned int reg,
317 unsigned int data, old_data;
318 old_data = data =
readl(addr);
321 if (old_data == data)
330 #define atiixp_write(chip,reg,value) \
331 writel(value, chip->remap_addr + ATI_REG_##reg)
332 #define atiixp_read(chip,reg) \
333 readl(chip->remap_addr + ATI_REG_##reg)
334 #define atiixp_update(chip,reg,mask,val) \
335 snd_atiixp_update_bits(chip, ATI_REG_##reg, mask, val)
344 #define ATI_DESC_LIST_SIZE \
345 PAGE_ALIGN(ATI_MAX_DESCRIPTORS * sizeof(struct atiixp_dma_desc))
358 unsigned int periods,
359 unsigned int period_bytes)
383 dma->
ops->enable_dma(chip, 0);
384 dma->
ops->enable_dma(chip, 1);
385 spin_unlock_irqrestore(&chip->
reg_lock, flags);
390 for (i = 0; i < periods; i++) {
395 desc->
size = period_bytes >> 2;
397 if (i == periods - 1)
401 addr += period_bytes;
429 static int snd_atiixp_acquire_codec(
struct atiixp *chip)
443 static unsigned short snd_atiixp_codec_read(
struct atiixp *chip,
unsigned short codec,
unsigned short reg)
448 if (snd_atiixp_acquire_codec(chip) < 0)
451 ATI_REG_PHYS_OUT_ADDR_EN |
455 if (snd_atiixp_acquire_codec(chip) < 0)
471 static void snd_atiixp_codec_write(
struct atiixp *chip,
unsigned short codec,
472 unsigned short reg,
unsigned short val)
476 if (snd_atiixp_acquire_codec(chip) < 0)
480 ATI_REG_PHYS_OUT_ADDR_EN |
codec;
485 static unsigned short snd_atiixp_ac97_read(
struct snd_ac97 *ac97,
489 return snd_atiixp_codec_read(chip, ac97->
num, reg);
493 static void snd_atiixp_ac97_write(
struct snd_ac97 *
ac97,
unsigned short reg,
497 snd_atiixp_codec_write(chip, ac97->
num, reg, val);
503 static int snd_atiixp_aclink_reset(
struct atiixp *chip)
538 #ifdef CONFIG_PM_SLEEP
539 static int snd_atiixp_aclink_down(
struct atiixp *chip)
558 #define ALL_CODEC_NOT_READY \
559 (ATI_REG_ISR_CODEC0_NOT_READY |\
560 ATI_REG_ISR_CODEC1_NOT_READY |\
561 ATI_REG_ISR_CODEC2_NOT_READY)
562 #define CODEC_CHECK_BITS (ALL_CODEC_NOT_READY|ATI_REG_ISR_NEW_FRAME)
566 const struct snd_pci_quirk *
q;
568 q = snd_pci_quirk_lookup(pci, atiixp_quirks);
571 "Forcing codec %d\n", q->name, q->value);
583 if (ac97_codec == -1)
584 ac97_codec = ac97_probing_bugs(chip->
pci);
585 if (ac97_codec >= 0) {
594 while (timeout-- > 0) {
612 static int snd_atiixp_chip_start(
struct atiixp *chip)
642 static int snd_atiixp_chip_stop(
struct atiixp *chip)
676 return bytes_to_frames(runtime, curptr);
678 snd_printd(
"atiixp: invalid DMA pointer read 0x%x (buf=%x)\n",
686 static void snd_atiixp_xrun_dma(
struct atiixp *chip,
struct atiixp_dma *dma)
697 static void snd_atiixp_update_dma(
struct atiixp *chip,
struct atiixp_dma *dma)
706 static void snd_atiixp_check_bus_busy(
struct atiixp *chip)
708 unsigned int bus_busy;
728 !dma->
ops->flush_dma))
736 dma->
ops->enable_transfer(chip, 1);
743 dma->
ops->enable_transfer(chip, 0);
752 snd_atiixp_check_bus_busy(chip);
754 dma->
ops->flush_dma(chip);
755 snd_atiixp_check_bus_busy(chip);
770 static void atiixp_out_flush_dma(
struct atiixp *chip)
776 static void atiixp_out_enable_dma(
struct atiixp *chip,
int on)
783 atiixp_out_flush_dma(chip);
791 static void atiixp_out_enable_transfer(
struct atiixp *chip,
int on)
798 static void atiixp_in_enable_dma(
struct atiixp *chip,
int on)
805 static void atiixp_in_enable_transfer(
struct atiixp *chip,
int on)
824 static void atiixp_in_flush_dma(
struct atiixp *chip)
830 static void atiixp_spdif_enable_dma(
struct atiixp *chip,
int on)
837 static void atiixp_spdif_enable_transfer(
struct atiixp *chip,
int on)
849 static void atiixp_spdif_flush_dma(
struct atiixp *chip)
854 atiixp_spdif_enable_dma(chip, 0);
855 atiixp_spdif_enable_transfer(chip, 1);
862 }
while (timeout-- > 0);
864 atiixp_spdif_enable_transfer(chip, 0);
902 switch (substream->
runtime->channels) {
968 err = atiixp_build_dma_packets(chip, dma, substream,
970 params_period_bytes(hw_params));
1003 atiixp_clear_dma_packets(chip, dma, substream);
1045 runtime->
hw = snd_atiixp_pcm_hw;
1047 if (pcm_type >= 0) {
1048 runtime->
hw.rates = chip->
pcms[pcm_type]->rates;
1060 dma->
ops->enable_dma(chip, 1);
1075 dma->
ops->enable_dma(chip, 0);
1151 static struct snd_pcm_ops snd_atiixp_playback_ops = {
1152 .open = snd_atiixp_playback_open,
1153 .close = snd_atiixp_playback_close,
1155 .hw_params = snd_atiixp_pcm_hw_params,
1156 .hw_free = snd_atiixp_pcm_hw_free,
1157 .prepare = snd_atiixp_playback_prepare,
1158 .trigger = snd_atiixp_pcm_trigger,
1159 .pointer = snd_atiixp_pcm_pointer,
1163 static struct snd_pcm_ops snd_atiixp_capture_ops = {
1164 .open = snd_atiixp_capture_open,
1165 .close = snd_atiixp_capture_close,
1167 .hw_params = snd_atiixp_pcm_hw_params,
1168 .hw_free = snd_atiixp_pcm_hw_free,
1169 .prepare = snd_atiixp_capture_prepare,
1170 .trigger = snd_atiixp_pcm_trigger,
1171 .pointer = snd_atiixp_pcm_pointer,
1175 static struct snd_pcm_ops snd_atiixp_spdif_ops = {
1176 .open = snd_atiixp_spdif_open,
1177 .close = snd_atiixp_spdif_close,
1179 .hw_params = snd_atiixp_pcm_hw_params,
1180 .hw_free = snd_atiixp_pcm_hw_free,
1181 .prepare = snd_atiixp_spdif_prepare,
1182 .trigger = snd_atiixp_pcm_trigger,
1183 .pointer = snd_atiixp_pcm_pointer,
1226 .enable_dma = atiixp_out_enable_dma,
1227 .enable_transfer = atiixp_out_enable_transfer,
1228 .flush_dma = atiixp_out_flush_dma,
1235 .enable_dma = atiixp_in_enable_dma,
1236 .enable_transfer = atiixp_in_enable_transfer,
1237 .flush_dma = atiixp_in_flush_dma,
1244 .enable_dma = atiixp_spdif_enable_dma,
1245 .enable_transfer = atiixp_spdif_enable_transfer,
1246 .flush_dma = atiixp_spdif_flush_dma,
1255 int err,
i, num_pcms;
1271 for (i = 0; i < num_pcms; i++)
1323 strcpy(pcm->
name,
"ATI IXP IEC958 (Direct)");
1335 0x03 << 4, 0x03 << 4);
1374 unsigned int detected;
1393 static struct ac97_quirk ac97_quirks[] __devinitdata = {
1395 .subvendor = 0x103c,
1396 .subdevice = 0x006b,
1397 .name =
"HP Pavilion ZV5030US",
1401 .subvendor = 0x103c,
1402 .subdevice = 0x308b,
1403 .name =
"HP nx6125",
1407 .subvendor = 0x103c,
1408 .subdevice = 0x3091,
1409 .name =
"unknown HP",
1416 const char *quirk_override)
1423 .write = snd_atiixp_ac97_write,
1424 .read = snd_atiixp_ac97_read,
1432 if (snd_atiixp_codec_detect(chip) < 0)
1444 memset(&ac97, 0,
sizeof(ac97));
1453 snd_printdd(
"atiixp: codec %d not available for audio\n", i);
1459 if (! codec_count) {
1470 #ifdef CONFIG_PM_SLEEP
1474 static int snd_atiixp_suspend(
struct device *
dev)
1488 snd_pcm_suspend_all(chip->
pcmdevs[i]);
1491 snd_ac97_suspend(chip->
ac97[i]);
1492 snd_atiixp_aclink_down(chip);
1493 snd_atiixp_chip_stop(chip);
1501 static int snd_atiixp_resume(
struct device *dev)
1512 "disabling device\n");
1518 snd_atiixp_aclink_reset(chip);
1519 snd_atiixp_chip_start(chip);
1522 snd_ac97_resume(chip->
ac97[i]);
1528 dma->
ops->enable_dma(chip, 1);
1542 #define SND_ATIIXP_PM_OPS &snd_atiixp_pm
1544 #define SND_ATIIXP_PM_OPS NULL
1548 #ifdef CONFIG_PROC_FS
1559 for (i = 0; i < 256; i += 4)
1567 if (! snd_card_proc_new(chip->
card,
"atiixp", &entry))
1568 snd_info_set_text_ops(entry, chip, snd_atiixp_proc_read);
1571 #define snd_atiixp_proc_init(chip)
1579 static int snd_atiixp_free(
struct atiixp *chip)
1583 snd_atiixp_chip_stop(chip);
1599 return snd_atiixp_free(chip);
1610 .dev_free = snd_atiixp_dev_free,
1638 snd_atiixp_free(chip);
1643 KBUILD_MODNAME, chip)) {
1645 snd_atiixp_free(chip);
1653 snd_atiixp_free(chip);
1675 strcpy(card->
driver, spdif_aclink ?
"ATIIXP" :
"ATIIXP-SPDMA");
1677 if ((err = snd_atiixp_create(card, pci, &chip)) < 0)
1681 if ((err = snd_atiixp_aclink_reset(chip)) < 0)
1686 if ((err = snd_atiixp_mixer_new(chip, ac97_clock,
ac97_quirk)) < 0)
1689 if ((err = snd_atiixp_pcm_new(chip)) < 0)
1694 snd_atiixp_chip_start(chip);
1697 "%s rev %x with %s at %#lx, irq %i", card->
shortname,
1705 pci_set_drvdata(pci, card);
1716 pci_set_drvdata(pci,
NULL);
1720 .name = KBUILD_MODNAME,
1721 .id_table = snd_atiixp_ids,
1722 .probe = snd_atiixp_probe,