|
@@ -1225,10 +1225,11 @@ static int atc_dev_free(struct snd_device *dev)
|
|
|
return ct_atc_destroy(atc);
|
|
|
}
|
|
|
|
|
|
-static int __devinit atc_identify_card(struct ct_atc *atc)
|
|
|
+static int __devinit atc_identify_card(struct ct_atc *atc, unsigned int ssid)
|
|
|
{
|
|
|
const struct snd_pci_quirk *p;
|
|
|
const struct snd_pci_quirk *list;
|
|
|
+ u16 vendor_id, device_id;
|
|
|
|
|
|
switch (atc->chip_type) {
|
|
|
case ATC20K1:
|
|
@@ -1242,13 +1243,19 @@ static int __devinit atc_identify_card(struct ct_atc *atc)
|
|
|
default:
|
|
|
return -ENOENT;
|
|
|
}
|
|
|
- p = snd_pci_quirk_lookup(atc->pci, list);
|
|
|
+ if (ssid) {
|
|
|
+ vendor_id = ssid >> 16;
|
|
|
+ device_id = ssid & 0xffff;
|
|
|
+ } else {
|
|
|
+ vendor_id = atc->pci->subsystem_vendor;
|
|
|
+ device_id = atc->pci->subsystem_device;
|
|
|
+ }
|
|
|
+ p = snd_pci_quirk_lookup_id(vendor_id, device_id, list);
|
|
|
if (p) {
|
|
|
if (p->value < 0) {
|
|
|
printk(KERN_ERR "ctxfi: "
|
|
|
"Device %04x:%04x is black-listed\n",
|
|
|
- atc->pci->subsystem_vendor,
|
|
|
- atc->pci->subsystem_device);
|
|
|
+ vendor_id, device_id);
|
|
|
return -ENOENT;
|
|
|
}
|
|
|
atc->model = p->value;
|
|
@@ -1261,8 +1268,7 @@ static int __devinit atc_identify_card(struct ct_atc *atc)
|
|
|
atc->model_name = ct_subsys_name[atc->model];
|
|
|
snd_printd("ctxfi: chip %s model %s (%04x:%04x) is found\n",
|
|
|
atc->chip_name, atc->model_name,
|
|
|
- atc->pci->subsystem_vendor,
|
|
|
- atc->pci->subsystem_device);
|
|
|
+ vendor_id, device_id);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -1636,7 +1642,8 @@ static struct ct_atc atc_preset __devinitdata = {
|
|
|
|
|
|
int __devinit ct_atc_create(struct snd_card *card, struct pci_dev *pci,
|
|
|
unsigned int rsr, unsigned int msr,
|
|
|
- int chip_type, struct ct_atc **ratc)
|
|
|
+ int chip_type, unsigned int ssid,
|
|
|
+ struct ct_atc **ratc)
|
|
|
{
|
|
|
struct ct_atc *atc;
|
|
|
static struct snd_device_ops ops = {
|
|
@@ -1662,7 +1669,7 @@ int __devinit ct_atc_create(struct snd_card *card, struct pci_dev *pci,
|
|
|
mutex_init(&atc->atc_mutex);
|
|
|
|
|
|
/* Find card model */
|
|
|
- err = atc_identify_card(atc);
|
|
|
+ err = atc_identify_card(atc, ssid);
|
|
|
if (err < 0) {
|
|
|
printk(KERN_ERR "ctatc: Card not recognised\n");
|
|
|
goto error1;
|