Skip to content

Commit

Permalink
ALSA: dice: fix detection of Weiss devices
Browse files Browse the repository at this point in the history
While most DICE devices keep TCAT's default category ID of 0x04, Weiss
devices identify themselves with 0x00.

Reported-by: Rolf Anderegg <rolf.anderegg@weiss.ch>
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
  • Loading branch information
Clemens Ladisch committed Oct 20, 2013
1 parent ed7e482 commit a471fcd
Showing 1 changed file with 12 additions and 5 deletions.
17 changes: 12 additions & 5 deletions sound/firewire/dice.c
Original file line number Diff line number Diff line change
Expand Up @@ -1109,7 +1109,10 @@ static void dice_card_free(struct snd_card *card)
mutex_destroy(&dice->mutex);
}

#define DICE_CATEGORY_ID 0x04
#define OUI_WEISS 0x001c6a

#define DICE_CATEGORY_ID 0x04
#define WEISS_CATEGORY_ID 0x00

static int dice_interface_check(struct fw_unit *unit)
{
Expand All @@ -1123,15 +1126,15 @@ static int dice_interface_check(struct fw_unit *unit)
struct fw_device *device = fw_parent_device(unit);
struct fw_csr_iterator it;
int key, value, vendor = -1, model = -1, err;
unsigned int i;
unsigned int category, i;
__be32 pointers[ARRAY_SIZE(min_values)];
__be32 version;

/*
* Check that GUID and unit directory are constructed according to DICE
* rules, i.e., that the specifier ID is the GUID's OUI, and that the
* GUID chip ID consists of the 8-bit DICE category ID, the 10-bit
* product ID, and a 22-bit serial number.
* GUID chip ID consists of the 8-bit category ID, the 10-bit product
* ID, and a 22-bit serial number.
*/
fw_csr_iterator_init(&it, unit->directory);
while (fw_csr_iterator_next(&it, &key, &value)) {
Expand All @@ -1144,7 +1147,11 @@ static int dice_interface_check(struct fw_unit *unit)
break;
}
}
if (device->config_rom[3] != ((vendor << 8) | DICE_CATEGORY_ID) ||
if (vendor == OUI_WEISS)
category = WEISS_CATEGORY_ID;
else
category = DICE_CATEGORY_ID;
if (device->config_rom[3] != ((vendor << 8) | category) ||
device->config_rom[4] >> 22 != model)
return -ENODEV;

Expand Down

0 comments on commit a471fcd

Please sign in to comment.