Merge branch 'linus' of master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa
[sfrench/cifs-2.6.git] / sound / pci / ice1712 / aureon.c
index 9e76cebd2d228c1680465e40757ad2cca4063153..ec0699c89952f9c0d5b9ecc62163afd6483a39eb 100644 (file)
@@ -294,7 +294,7 @@ static unsigned short aureon_ac97_read(struct snd_ice1712 *ice, unsigned short r
 static int aureon_ac97_init (struct snd_ice1712 *ice)
 {
        int i;
-       static unsigned short ac97_defaults[] = {
+       static const unsigned short ac97_defaults[] = {
                0x00, 0x9640,
                0x02, 0x8000,
                0x04, 0x8000,
@@ -394,7 +394,7 @@ static int aureon_ac97_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl_ele
 /*
  * AC'97 mute controls
  */
-#define aureon_ac97_mute_info  aureon_mono_bool_info
+#define aureon_ac97_mute_info  snd_ctl_boolean_mono_info
 
 static int aureon_ac97_mute_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
@@ -430,7 +430,7 @@ static int aureon_ac97_mute_put(struct snd_kcontrol *kcontrol, struct snd_ctl_el
 /*
  * AC'97 mute controls
  */
-#define aureon_ac97_micboost_info      aureon_mono_bool_info
+#define aureon_ac97_micboost_info      snd_ctl_boolean_mono_info
 
 static int aureon_ac97_micboost_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
@@ -474,7 +474,8 @@ static void aureon_spi_write(struct snd_ice1712 *ice, unsigned int cs, unsigned
 
        tmp = snd_ice1712_gpio_read(ice);
 
-       if (ice->eeprom.subvendor == VT1724_SUBDEVICE_PRODIGY71LT) {
+       if (ice->eeprom.subvendor == VT1724_SUBDEVICE_PRODIGY71LT ||
+           ice->eeprom.subvendor == VT1724_SUBDEVICE_PRODIGY71XT) {
                snd_ice1712_gpio_set_mask(ice, ~(PRODIGY_SPI_MOSI|PRODIGY_SPI_CLK|PRODIGY_WM_CS));
                mosi = PRODIGY_SPI_MOSI;
                clk = PRODIGY_SPI_CLK;
@@ -601,7 +602,9 @@ static unsigned short wm_get(struct snd_ice1712 *ice, int reg)
 static void wm_put_nocache(struct snd_ice1712 *ice, int reg, unsigned short val)
 {
        aureon_spi_write(ice,
-                       (ice->eeprom.subvendor == VT1724_SUBDEVICE_PRODIGY71LT ? PRODIGY_WM_CS : AUREON_WM_CS),
+                        ((ice->eeprom.subvendor == VT1724_SUBDEVICE_PRODIGY71LT ||
+                          ice->eeprom.subvendor == VT1724_SUBDEVICE_PRODIGY71XT) ?
+                        PRODIGY_WM_CS : AUREON_WM_CS),
                        (reg << 9) | (val & 0x1ff), 16);
 }
 
@@ -618,19 +621,12 @@ static void wm_put(struct snd_ice1712 *ice, int reg, unsigned short val)
 
 /*
  */
-static int aureon_mono_bool_info(struct snd_kcontrol *k, struct snd_ctl_elem_info *uinfo)
-{
-       uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
-       uinfo->count = 1;
-       uinfo->value.integer.min = 0;
-       uinfo->value.integer.max = 1;
-       return 0;
-}
+#define aureon_mono_bool_info          snd_ctl_boolean_mono_info
 
 /*
  * AC'97 master playback mute controls (Mute on WM8770 chip)
  */
-#define aureon_ac97_mmute_info aureon_mono_bool_info
+#define aureon_ac97_mmute_info         snd_ctl_boolean_mono_info
 
 static int aureon_ac97_mmute_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
@@ -661,17 +657,17 @@ static int aureon_ac97_mmute_put(struct snd_kcontrol *kcontrol, struct snd_ctl_e
        return change;
 }
 
-static DECLARE_TLV_DB_SCALE(db_scale_wm_dac, -12700, 100, 1);
-static DECLARE_TLV_DB_SCALE(db_scale_wm_pcm, -6400, 50, 1);
-static DECLARE_TLV_DB_SCALE(db_scale_wm_adc, -1200, 100, 0);
-static DECLARE_TLV_DB_SCALE(db_scale_ac97_master, -4650, 150, 0);
-static DECLARE_TLV_DB_SCALE(db_scale_ac97_gain, -3450, 150, 0);
+static const DECLARE_TLV_DB_SCALE(db_scale_wm_dac, -12700, 100, 1);
+static const DECLARE_TLV_DB_SCALE(db_scale_wm_pcm, -6400, 50, 1);
+static const DECLARE_TLV_DB_SCALE(db_scale_wm_adc, -1200, 100, 0);
+static const DECLARE_TLV_DB_SCALE(db_scale_ac97_master, -4650, 150, 0);
+static const DECLARE_TLV_DB_SCALE(db_scale_ac97_gain, -3450, 150, 0);
 
 /*
  * Logarithmic volume values for WM8770
  * Computed as 20 * Log10(255 / x)
  */
-static unsigned char wm_vol[256] = {
+static const unsigned char wm_vol[256] = {
        127, 48, 42, 39, 36, 34, 33, 31, 30, 29, 28, 27, 27, 26, 25, 25, 24, 24, 23,
        23, 22, 22, 21, 21, 21, 20, 20, 20, 19, 19, 19, 18, 18, 18, 18, 17, 17, 17,
        17, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 13, 13, 13,
@@ -705,7 +701,7 @@ static void wm_set_vol(struct snd_ice1712 *ice, unsigned int index, unsigned sho
 /*
  * DAC mute control
  */
-#define wm_pcm_mute_info       aureon_mono_bool_info
+#define wm_pcm_mute_info       snd_ctl_boolean_mono_info
 
 static int wm_pcm_mute_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
@@ -876,13 +872,7 @@ static int wm_mute_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value
 /*
  * WM8770 master mute control
  */
-static int wm_master_mute_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) {
-       uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
-       uinfo->count = 2;
-       uinfo->value.integer.min = 0;
-       uinfo->value.integer.max = 1;
-       return 0;
-}
+#define wm_master_mute_info            snd_ctl_boolean_stereo_info
 
 static int wm_master_mute_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
@@ -966,14 +956,7 @@ static int wm_pcm_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_val
 /*
  * ADC mute control
  */
-static int wm_adc_mute_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
-{
-       uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
-       uinfo->count = 2;
-       uinfo->value.integer.min = 0;
-       uinfo->value.integer.max = 1;
-       return 0;
-}
+#define wm_adc_mute_info               snd_ctl_boolean_stereo_info
 
 static int wm_adc_mute_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
@@ -1064,14 +1047,14 @@ static int wm_adc_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_val
  */
 static int wm_adc_mux_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 {
-       static char *texts[] = {
+       static const char * const texts[] = {
                "CD",           //AIN1
                "Aux",          //AIN2
                "Line",         //AIN3
                "Mic",          //AIN4
                "AC97"          //AIN5
        };
-       static char *universe_texts[] = {
+       static const char * const universe_texts[] = {
                "Aux1",         //AIN1
                "CD",           //AIN2
                "Phono",        //AIN3
@@ -1137,11 +1120,11 @@ static int wm_adc_mux_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_val
 static int aureon_cs8415_mux_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
 {
        struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol);
-       static char *aureon_texts[] = {
+       static const char * const aureon_texts[] = {
                "CD",           //RXP0
                "Optical"       //RXP1
        };
-       static char *prodigy_texts[] = {
+       static const char * const prodigy_texts[] = {
                "CD",
                "Coax"
        };
@@ -1207,12 +1190,7 @@ static int aureon_cs8415_rate_get (struct snd_kcontrol *kcontrol, struct snd_ctl
 /*
  * CS8415A Mute
  */
-static int aureon_cs8415_mute_info (struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
-{
-       uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
-       uinfo->count = 1;
-       return 0;
-}
+#define aureon_cs8415_mute_info                snd_ctl_boolean_mono_info
 
 static int aureon_cs8415_mute_get (struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
@@ -1288,12 +1266,14 @@ static int aureon_set_headphone_amp(struct snd_ice1712 *ice, int enable)
 
        tmp2 = tmp = snd_ice1712_gpio_read(ice);
        if (enable)
-               if (ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71LT)
+               if (ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71LT &&
+                   ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71XT)
                        tmp |= AUREON_HP_SEL;
                else
                        tmp |= PRODIGY_HP_SEL;
        else
-               if (ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71LT)
+               if (ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71LT &&
+                   ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71XT)
                        tmp &= ~ AUREON_HP_SEL;
                else
                        tmp &= ~ PRODIGY_HP_SEL;
@@ -1311,7 +1291,7 @@ static int aureon_get_headphone_amp(struct snd_ice1712 *ice)
        return ( tmp & AUREON_HP_SEL )!= 0;
 }
 
-#define aureon_hpamp_info      aureon_mono_bool_info
+#define aureon_hpamp_info      snd_ctl_boolean_mono_info
 
 static int aureon_hpamp_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
@@ -1333,7 +1313,7 @@ static int aureon_hpamp_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_v
  * Deemphasis
  */
 
-#define aureon_deemp_info      aureon_mono_bool_info
+#define aureon_deemp_info      snd_ctl_boolean_mono_info
 
 static int aureon_deemp_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
@@ -1363,7 +1343,7 @@ static int aureon_deemp_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_v
  */
 static int aureon_oversampling_info(struct snd_kcontrol *k, struct snd_ctl_elem_info *uinfo)
 {
-       static char *texts[2] = { "128x", "64x" };
+       static const char * const texts[2] = { "128x", "64x"    };
 
        uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
        uinfo->count = 1;
@@ -1824,7 +1804,6 @@ static struct snd_kcontrol_new universe_ac97_controls[] __devinitdata = {
 
 };
 
-       
 static struct snd_kcontrol_new cs8415_controls[] __devinitdata = {
        {
                .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
@@ -1870,7 +1849,6 @@ static struct snd_kcontrol_new cs8415_controls[] __devinitdata = {
        }
 };
 
 static int __devinit aureon_add_controls(struct snd_ice1712 *ice)
 {
        unsigned int i, counts;
@@ -1898,7 +1876,8 @@ static int __devinit aureon_add_controls(struct snd_ice1712 *ice)
                                return err;
                }
        }
-       else if (ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71LT) {
+       else if (ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71LT &&
+                ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71XT) {
                for (i = 0; i < ARRAY_SIZE(ac97_controls); i++) {
                        err = snd_ctl_add(ice->card, snd_ctl_new1(&ac97_controls[i], ice));
                        if (err < 0)
@@ -1906,7 +1885,8 @@ static int __devinit aureon_add_controls(struct snd_ice1712 *ice)
                }
        }
 
-       if (ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71LT) {
+       if (ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71LT &&
+           ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71XT) {
                unsigned char id;
                snd_ice1712_save_gpio_status(ice);
                id = aureon_cs8415_get(ice, CS8415_ID);
@@ -1936,7 +1916,7 @@ static int __devinit aureon_add_controls(struct snd_ice1712 *ice)
  */
 static int __devinit aureon_init(struct snd_ice1712 *ice)
 {
-       static unsigned short wm_inits_aureon[] = {
+       static const unsigned short wm_inits_aureon[] = {
                /* These come first to reduce init pop noise */
                0x1b, 0x044,            /* ADC Mux (AC'97 source) */
                0x1c, 0x00B,            /* Out Mux1 (VOUT1 = DAC+AUX, VOUT2 = DAC) */
@@ -1972,7 +1952,7 @@ static int __devinit aureon_init(struct snd_ice1712 *ice)
                0x1a, 0x000,            /* -12dB ADC/R */
                (unsigned short)-1
        };
-       static unsigned short wm_inits_prodigy[] = {
+       static const unsigned short wm_inits_prodigy[] = {
 
                /* These come first to reduce init pop noise */
                0x1b, 0x000,            /* ADC Mux */
@@ -2014,7 +1994,7 @@ static int __devinit aureon_init(struct snd_ice1712 *ice)
                (unsigned short)-1
 
        };
-       static unsigned short cs_inits[] = {
+       static const unsigned short cs_inits[] = {
                0x0441, /* RUN */
                0x0180, /* no mute, OMCK output on RMCK pin */
                0x0201, /* S/PDIF source on RXP1 */
@@ -2022,7 +2002,7 @@ static int __devinit aureon_init(struct snd_ice1712 *ice)
                (unsigned short)-1
        };
        unsigned int tmp;
-       unsigned short *p;
+       const unsigned short *p;
        int err, i;
 
        if (ice->eeprom.subvendor == VT1724_SUBDEVICE_AUREON51_SKY) {
@@ -2062,7 +2042,8 @@ static int __devinit aureon_init(struct snd_ice1712 *ice)
 
        /* initialize WM8770 codec */
        if (ice->eeprom.subvendor == VT1724_SUBDEVICE_PRODIGY71 ||
-               ice->eeprom.subvendor == VT1724_SUBDEVICE_PRODIGY71LT)
+               ice->eeprom.subvendor == VT1724_SUBDEVICE_PRODIGY71LT ||
+               ice->eeprom.subvendor == VT1724_SUBDEVICE_PRODIGY71XT)
                p = wm_inits_prodigy;
        else
                p = wm_inits_aureon;
@@ -2070,7 +2051,8 @@ static int __devinit aureon_init(struct snd_ice1712 *ice)
                wm_put(ice, p[0], p[1]);
 
        /* initialize CS8415A codec */
-       if (ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71LT) {
+       if (ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71LT &&
+           ice->eeprom.subvendor != VT1724_SUBDEVICE_PRODIGY71XT) {
                for (p = cs_inits; *p != (unsigned short)-1; p++)
                        aureon_spi_write(ice, AUREON_CS8415_CS, *p | 0x200000, 24);
                ice->spec.aureon.cs8415_mux = 1;
@@ -2101,69 +2083,54 @@ static int __devinit aureon_init(struct snd_ice1712 *ice)
  */
 
 static unsigned char aureon51_eeprom[] __devinitdata = {
-       0x0a,   /* SYSCONF: clock 512, spdif-in/ADC, 3DACs */
-       0x80,   /* ACLINK: I2S */
-       0xfc,   /* I2S: vol, 96k, 24bit, 192k */
-       0xc3,   /* SPDIF: out-en, out-int, spdif-in */
-       0xff,   /* GPIO_DIR */
-       0xff,   /* GPIO_DIR1 */
-       0x5f,   /* GPIO_DIR2 */
-       0x00,   /* GPIO_MASK */
-       0x00,   /* GPIO_MASK1 */
-       0x00,   /* GPIO_MASK2 */
-       0x00,   /* GPIO_STATE */
-       0x00,   /* GPIO_STATE1 */
-       0x00,   /* GPIO_STATE2 */
+       [ICE_EEP2_SYSCONF]     = 0x0a,  /* clock 512, spdif-in/ADC, 3DACs */
+       [ICE_EEP2_ACLINK]      = 0x80,  /* I2S */
+       [ICE_EEP2_I2S]         = 0xfc,  /* vol, 96k, 24bit, 192k */
+       [ICE_EEP2_SPDIF]       = 0xc3,  /* out-en, out-int, spdif-in */
+       [ICE_EEP2_GPIO_DIR]    = 0xff,
+       [ICE_EEP2_GPIO_DIR1]   = 0xff,
+       [ICE_EEP2_GPIO_DIR2]   = 0x5f,
+       [ICE_EEP2_GPIO_MASK]   = 0x00,
+       [ICE_EEP2_GPIO_MASK1]  = 0x00,
+       [ICE_EEP2_GPIO_MASK2]  = 0x00,
+       [ICE_EEP2_GPIO_STATE]  = 0x00,
+       [ICE_EEP2_GPIO_STATE1] = 0x00,
+       [ICE_EEP2_GPIO_STATE2] = 0x00,
 };
 
 static unsigned char aureon71_eeprom[] __devinitdata = {
-       0x0b,   /* SYSCONF: clock 512, spdif-in/ADC, 4DACs */
-       0x80,   /* ACLINK: I2S */
-       0xfc,   /* I2S: vol, 96k, 24bit, 192k */
-       0xc3,   /* SPDIF: out-en, out-int, spdif-in */
-       0xff,   /* GPIO_DIR */
-       0xff,   /* GPIO_DIR1 */
-       0x5f,   /* GPIO_DIR2 */
-       0x00,   /* GPIO_MASK */
-       0x00,   /* GPIO_MASK1 */
-       0x00,   /* GPIO_MASK2 */
-       0x00,   /* GPIO_STATE */
-       0x00,   /* GPIO_STATE1 */
-       0x00,   /* GPIO_STATE2 */
-};
-
-static unsigned char prodigy71_eeprom[] __devinitdata = {
-       0x0b,   /* SYSCONF: clock 512, spdif-in/ADC, 4DACs */
-       0x80,   /* ACLINK: I2S */
-       0xfc,   /* I2S: vol, 96k, 24bit, 192k */
-       0xc3,   /* SPDIF: out-en, out-int, spdif-in */
-       0xff,   /* GPIO_DIR */
-       0xff,   /* GPIO_DIR1 */
-       0x5f,   /* GPIO_DIR2 */
-       0x00,   /* GPIO_MASK */
-       0x00,   /* GPIO_MASK1 */
-       0x00,   /* GPIO_MASK2 */
-       0x00,   /* GPIO_STATE */
-       0x00,   /* GPIO_STATE1 */
-       0x00,   /* GPIO_STATE2 */
+       [ICE_EEP2_SYSCONF]     = 0x0b,  /* clock 512, spdif-in/ADC, 4DACs */
+       [ICE_EEP2_ACLINK]      = 0x80,  /* I2S */
+       [ICE_EEP2_I2S]         = 0xfc,  /* vol, 96k, 24bit, 192k */
+       [ICE_EEP2_SPDIF]       = 0xc3,  /* out-en, out-int, spdif-in */
+       [ICE_EEP2_GPIO_DIR]    = 0xff,
+       [ICE_EEP2_GPIO_DIR1]   = 0xff,
+       [ICE_EEP2_GPIO_DIR2]   = 0x5f,
+       [ICE_EEP2_GPIO_MASK]   = 0x00,
+       [ICE_EEP2_GPIO_MASK1]  = 0x00,
+       [ICE_EEP2_GPIO_MASK2]  = 0x00,
+       [ICE_EEP2_GPIO_STATE]  = 0x00,
+       [ICE_EEP2_GPIO_STATE1] = 0x00,
+       [ICE_EEP2_GPIO_STATE2] = 0x00,
 };
+#define prodigy71_eeprom aureon71_eeprom
 
 static unsigned char prodigy71lt_eeprom[] __devinitdata = {
-       0x4b,   /* SYSCINF: clock 512, spdif-in/ADC, 4DACs */
-       0x80,   /* ACLINK: I2S */
-       0xfc,   /* I2S: vol, 96k, 24bit, 192k */
-       0xc3,   /* SPDIF: out-en, out-int, spdif-in */
-       0xff,   /* GPIO_DIR */
-       0xff,   /* GPIO_DIR1 */
-       0x5f,   /* GPIO_DIR2 */
-       0x00,   /* GPIO_MASK */
-       0x00,   /* GPIO_MASK1 */
-       0x00,   /* GPIO_MASK2 */
-       0x00,   /* GPIO_STATE */
-       0x00,   /* GPIO_STATE1 */
-       0x00,   /* GPIO_STATE2 */
+       [ICE_EEP2_SYSCONF]     = 0x4b,  /* clock 384, spdif-in/ADC, 4DACs */
+       [ICE_EEP2_ACLINK]      = 0x80,  /* I2S */
+       [ICE_EEP2_I2S]         = 0xfc,  /* vol, 96k, 24bit, 192k */
+       [ICE_EEP2_SPDIF]       = 0xc3,  /* out-en, out-int, spdif-in */
+       [ICE_EEP2_GPIO_DIR]    = 0xff,
+       [ICE_EEP2_GPIO_DIR1]   = 0xff,
+       [ICE_EEP2_GPIO_DIR2]   = 0x5f,
+       [ICE_EEP2_GPIO_MASK]   = 0x00,
+       [ICE_EEP2_GPIO_MASK1]  = 0x00,
+       [ICE_EEP2_GPIO_MASK2]  = 0x00,
+       [ICE_EEP2_GPIO_STATE]  = 0x00,
+       [ICE_EEP2_GPIO_STATE1] = 0x00,
+       [ICE_EEP2_GPIO_STATE2] = 0x00,
 };
-       
+#define prodigy71xt_eeprom prodigy71lt_eeprom
 
 /* entry point */
 struct snd_ice1712_card_info snd_vt1724_aureon_cards[] __devinitdata = {
@@ -2217,5 +2184,15 @@ struct snd_ice1712_card_info snd_vt1724_aureon_cards[] __devinitdata = {
                .eeprom_data = prodigy71lt_eeprom,
                .driver = "Prodigy71LT",
        },
+       {
+               .subvendor = VT1724_SUBDEVICE_PRODIGY71XT,
+               .name = "Audiotrak Prodigy 7.1 XT",
+               .model = "prodigy71xt",
+               .chip_init = aureon_init,
+               .build_controls = aureon_add_controls,
+               .eeprom_size = sizeof(prodigy71xt_eeprom),
+               .eeprom_data = prodigy71xt_eeprom,
+               .driver = "Prodigy71LT",
+       },
        { } /* terminator */
 };