The following is a very beta patch and is not meant to be merged yet. It has been compile-tested only because I haven't the those cards. Hopefully I'll be able to test it myself soon.
As you can see, I reused the existing IndigoIO and IndigoDJ driver because they are the same cards with a different interface. The firmware is different, though. The driver registers the card as a plain -IO or -DJ without the trailing "x" (I will fix it later if someone thinks it's important).
diff -dup alsa-driver__orig/alsa-kernel/pci/echoaudio/echoaudio.h alsa-driver/alsa-kernel/pci/echoaudio/echoaudio.h --- alsa-driver__orig/alsa-kernel/pci/echoaudio/echoaudio.h 2009-02-01 15:37:54.000000000 +0100 +++ alsa-driver/alsa-kernel/pci/echoaudio/echoaudio.h 2009-02-01 21:59:38.000000000 +0100 @@ -189,6 +189,9 @@ #define INDIGO 0x0090 #define INDIGO_IO 0x00a0 #define INDIGO_DJ 0x00b0 +#define DC8 0x00c0 +#define INDIGO_IOX 0x00d0 +#define INDIGO_DJX 0x00e0 #define ECHO3G 0x0100
diff -dup alsa-driver__orig/alsa-kernel/pci/echoaudio/indigodj.c alsa-driver/alsa-kernel/pci/echoaudio/indigodj.c --- alsa-driver__orig/alsa-kernel/pci/echoaudio/indigodj.c 2009-02-01 15:37:54.000000000 +0100 +++ alsa-driver/alsa-kernel/pci/echoaudio/indigodj.c 2009-02-01 22:26:02.000000000 +0100 @@ -59,17 +59,21 @@
MODULE_FIRMWARE("ea/loader_dsp.fw"); MODULE_FIRMWARE("ea/indigo_dj_dsp.fw"); +MODULE_FIRMWARE("ea/indigo_djx_dsp.fw");
#define FW_361_LOADER 0 #define FW_INDIGO_DJ_DSP 1 +#define FW_INDIGO_DJX_DSP 2
static const struct firmware card_fw[] = { {0, "loader_dsp.fw"}, - {0, "indigo_dj_dsp.fw"} + {0, "indigo_dj_dsp.fw"}, + {0, "indigo_djx_dsp.fw"} };
static struct pci_device_id snd_echo_ids[] = { - {0x1057, 0x3410, 0xECC0, 0x00B0, 0, 0, 0}, /* Indigo DJ*/ + {0x1057, 0x3410, 0xECC0, 0x00B0, 0, 0, 0}, /* Indigo DJ */ + {0x1057, 0x3410, 0xECC0, 0x00E0, 0, 0, 0}, /* Indigo DJx */ {0,} };
diff -dup alsa-driver__orig/alsa-kernel/pci/echoaudio/indigodj_dsp.c alsa-driver/alsa-kernel/pci/echoaudio/indigodj_dsp.c --- alsa-driver__orig/alsa-kernel/pci/echoaudio/indigodj_dsp.c 2009-02-01 15:37:54.000000000 +0100 +++ alsa-driver/alsa-kernel/pci/echoaudio/indigodj_dsp.c 2009-02-01 21:53:55.000000000 +0100 @@ -37,9 +37,11 @@ static int update_vmixer_level(struct ec static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) { int err; + u16 subdev;
DE_INIT(("init_hw() - Indigo DJ\n")); - if (snd_BUG_ON((subdevice_id & 0xfff0) != INDIGO_DJ)) + subdev = subdevice_id & 0xfff0; + if (snd_BUG_ON(subdev != INDIGO_DJ && subdev != INDIGO_DJX)) return -ENODEV;
if ((err = init_dsp_comm_page(chip))) { @@ -50,7 +52,10 @@ static int init_hw(struct echoaudio *chi chip->device_id = device_id; chip->subdevice_id = subdevice_id; chip->bad_board = TRUE; - chip->dsp_code_to_load = &card_fw[FW_INDIGO_DJ_DSP]; + if (subdev == INDIGO_DJ) + chip->dsp_code_to_load = &card_fw[FW_INDIGO_DJ_DSP]; + else + chip->dsp_code_to_load = &card_fw[FW_INDIGO_DJX_DSP]; /* Since this card has no ASIC, mark it as loaded so everything works OK */ chip->asic_loaded = TRUE; diff -dup alsa-driver__orig/alsa-kernel/pci/echoaudio/indigoio.c alsa-driver/alsa-kernel/pci/echoaudio/indigoio.c --- alsa-driver__orig/alsa-kernel/pci/echoaudio/indigoio.c 2009-02-01 15:37:54.000000000 +0100 +++ alsa-driver/alsa-kernel/pci/echoaudio/indigoio.c 2009-02-01 22:26:11.000000000 +0100 @@ -60,17 +60,21 @@
MODULE_FIRMWARE("ea/loader_dsp.fw"); MODULE_FIRMWARE("ea/indigo_io_dsp.fw"); +MODULE_FIRMWARE("ea/indigo_iox_dsp.fw");
#define FW_361_LOADER 0 #define FW_INDIGO_IO_DSP 1 +#define FW_INDIGO_IOX_DSP 2
static const struct firmware card_fw[] = { {0, "loader_dsp.fw"}, - {0, "indigo_io_dsp.fw"} + {0, "indigo_io_dsp.fw"}, + {0, "indigo_iox_dsp.fw"} };
static struct pci_device_id snd_echo_ids[] = { - {0x1057, 0x3410, 0xECC0, 0x00A0, 0, 0, 0}, /* Indigo IO*/ + {0x1057, 0x3410, 0xECC0, 0x00A0, 0, 0, 0}, /* Indigo IO */ + {0x1057, 0x3410, 0xECC0, 0x00D0, 0, 0, 0}, /* Indigo IOx */ {0,} };
diff -dup alsa-driver__orig/alsa-kernel/pci/echoaudio/indigoio_dsp.c alsa-driver/alsa-kernel/pci/echoaudio/indigoio_dsp.c --- alsa-driver__orig/alsa-kernel/pci/echoaudio/indigoio_dsp.c 2009-02-01 15:37:54.000000000 +0100 +++ alsa-driver/alsa-kernel/pci/echoaudio/indigoio_dsp.c 2009-02-01 21:59:05.000000000 +0100 @@ -37,9 +37,11 @@ static int update_vmixer_level(struct ec static int init_hw(struct echoaudio *chip, u16 device_id, u16 subdevice_id) { int err; + u16 subdev;
DE_INIT(("init_hw() - Indigo IO\n")); - if (snd_BUG_ON((subdevice_id & 0xfff0) != INDIGO_IO)) + subdev = subdevice_id & 0xfff0; + if (snd_BUG_ON(subdev != INDIGO_IO && subdev != INDIGO_IOX)) return -ENODEV;
if ((err = init_dsp_comm_page(chip))) { @@ -50,7 +52,10 @@ static int init_hw(struct echoaudio *chi chip->device_id = device_id; chip->subdevice_id = subdevice_id; chip->bad_board = TRUE; - chip->dsp_code_to_load = &card_fw[FW_INDIGO_IO_DSP]; + if (subdev == INDIGO_IO) + chip->dsp_code_to_load = &card_fw[FW_INDIGO_IO_DSP]; + else + chip->dsp_code_to_load = &card_fw[FW_INDIGO_IOX_DSP]; /* Since this card has no ASIC, mark it as loaded so everything works OK */ chip->asic_loaded = TRUE;
-- Giuliano.