aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/ctxfi/ctatc.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/ctxfi/ctatc.c')
-rw-r--r--sound/pci/ctxfi/ctatc.c41
1 files changed, 19 insertions, 22 deletions
diff --git a/sound/pci/ctxfi/ctatc.c b/sound/pci/ctxfi/ctatc.c
index 75454648d50c..1bff80cde0a2 100644
--- a/sound/pci/ctxfi/ctatc.c
+++ b/sound/pci/ctxfi/ctatc.c
@@ -24,6 +24,7 @@
24#include "ctdaio.h" 24#include "ctdaio.h"
25#include "cttimer.h" 25#include "cttimer.h"
26#include <linux/delay.h> 26#include <linux/delay.h>
27#include <linux/slab.h>
27#include <sound/pcm.h> 28#include <sound/pcm.h>
28#include <sound/control.h> 29#include <sound/control.h>
29#include <sound/asoundef.h> 30#include <sound/asoundef.h>
@@ -166,18 +167,7 @@ static void ct_unmap_audio_buffer(struct ct_atc *atc, struct ct_atc_pcm *apcm)
166 167
167static unsigned long atc_get_ptp_phys(struct ct_atc *atc, int index) 168static unsigned long atc_get_ptp_phys(struct ct_atc *atc, int index)
168{ 169{
169 struct ct_vm *vm; 170 return atc->vm->get_ptp_phys(atc->vm, index);
170 void *kvirt_addr;
171 unsigned long phys_addr;
172
173 vm = atc->vm;
174 kvirt_addr = vm->get_ptp_virt(vm, index);
175 if (kvirt_addr == NULL)
176 phys_addr = (~0UL);
177 else
178 phys_addr = virt_to_phys(kvirt_addr);
179
180 return phys_addr;
181} 171}
182 172
183static unsigned int convert_format(snd_pcm_format_t snd_format) 173static unsigned int convert_format(snd_pcm_format_t snd_format)
@@ -240,7 +230,7 @@ static int select_rom(unsigned int pitch)
240 } else if (pitch == 0x02000000) { 230 } else if (pitch == 0x02000000) {
241 /* pitch == 2 */ 231 /* pitch == 2 */
242 return 3; 232 return 3;
243 } else if (pitch >= 0x0 && pitch <= 0x08000000) { 233 } else if (pitch <= 0x08000000) {
244 /* 0 <= pitch <= 8 */ 234 /* 0 <= pitch <= 8 */
245 return 0; 235 return 0;
246 } else { 236 } else {
@@ -1225,10 +1215,11 @@ static int atc_dev_free(struct snd_device *dev)
1225 return ct_atc_destroy(atc); 1215 return ct_atc_destroy(atc);
1226} 1216}
1227 1217
1228static int __devinit atc_identify_card(struct ct_atc *atc) 1218static int __devinit atc_identify_card(struct ct_atc *atc, unsigned int ssid)
1229{ 1219{
1230 const struct snd_pci_quirk *p; 1220 const struct snd_pci_quirk *p;
1231 const struct snd_pci_quirk *list; 1221 const struct snd_pci_quirk *list;
1222 u16 vendor_id, device_id;
1232 1223
1233 switch (atc->chip_type) { 1224 switch (atc->chip_type) {
1234 case ATC20K1: 1225 case ATC20K1:
@@ -1242,13 +1233,19 @@ static int __devinit atc_identify_card(struct ct_atc *atc)
1242 default: 1233 default:
1243 return -ENOENT; 1234 return -ENOENT;
1244 } 1235 }
1245 p = snd_pci_quirk_lookup(atc->pci, list); 1236 if (ssid) {
1237 vendor_id = ssid >> 16;
1238 device_id = ssid & 0xffff;
1239 } else {
1240 vendor_id = atc->pci->subsystem_vendor;
1241 device_id = atc->pci->subsystem_device;
1242 }
1243 p = snd_pci_quirk_lookup_id(vendor_id, device_id, list);
1246 if (p) { 1244 if (p) {
1247 if (p->value < 0) { 1245 if (p->value < 0) {
1248 printk(KERN_ERR "ctxfi: " 1246 printk(KERN_ERR "ctxfi: "
1249 "Device %04x:%04x is black-listed\n", 1247 "Device %04x:%04x is black-listed\n",
1250 atc->pci->subsystem_vendor, 1248 vendor_id, device_id);
1251 atc->pci->subsystem_device);
1252 return -ENOENT; 1249 return -ENOENT;
1253 } 1250 }
1254 atc->model = p->value; 1251 atc->model = p->value;
@@ -1261,8 +1258,7 @@ static int __devinit atc_identify_card(struct ct_atc *atc)
1261 atc->model_name = ct_subsys_name[atc->model]; 1258 atc->model_name = ct_subsys_name[atc->model];
1262 snd_printd("ctxfi: chip %s model %s (%04x:%04x) is found\n", 1259 snd_printd("ctxfi: chip %s model %s (%04x:%04x) is found\n",
1263 atc->chip_name, atc->model_name, 1260 atc->chip_name, atc->model_name,
1264 atc->pci->subsystem_vendor, 1261 vendor_id, device_id);
1265 atc->pci->subsystem_device);
1266 return 0; 1262 return 0;
1267} 1263}
1268 1264
@@ -1636,7 +1632,8 @@ static struct ct_atc atc_preset __devinitdata = {
1636 1632
1637int __devinit ct_atc_create(struct snd_card *card, struct pci_dev *pci, 1633int __devinit ct_atc_create(struct snd_card *card, struct pci_dev *pci,
1638 unsigned int rsr, unsigned int msr, 1634 unsigned int rsr, unsigned int msr,
1639 int chip_type, struct ct_atc **ratc) 1635 int chip_type, unsigned int ssid,
1636 struct ct_atc **ratc)
1640{ 1637{
1641 struct ct_atc *atc; 1638 struct ct_atc *atc;
1642 static struct snd_device_ops ops = { 1639 static struct snd_device_ops ops = {
@@ -1662,14 +1659,14 @@ int __devinit ct_atc_create(struct snd_card *card, struct pci_dev *pci,
1662 mutex_init(&atc->atc_mutex); 1659 mutex_init(&atc->atc_mutex);
1663 1660
1664 /* Find card model */ 1661 /* Find card model */
1665 err = atc_identify_card(atc); 1662 err = atc_identify_card(atc, ssid);
1666 if (err < 0) { 1663 if (err < 0) {
1667 printk(KERN_ERR "ctatc: Card not recognised\n"); 1664 printk(KERN_ERR "ctatc: Card not recognised\n");
1668 goto error1; 1665 goto error1;
1669 } 1666 }
1670 1667
1671 /* Set up device virtual memory management object */ 1668 /* Set up device virtual memory management object */
1672 err = ct_vm_create(&atc->vm); 1669 err = ct_vm_create(&atc->vm, pci);
1673 if (err < 0) 1670 if (err < 0)
1674 goto error1; 1671 goto error1;
1675 1672