Update of /cvsroot/alsa/alsa-kernel/isa/sb
In directory sc8-pr-cvs1:/tmp/cvs-serv393/isa/sb

Modified Files:
        sb_common.c sb_mixer.c 
Log Message:
- added the exported mixer stuffs for cmi8330.
- mixer elements are built from struct sbmix_elem.



Index: sb_common.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/isa/sb/sb_common.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- sb_common.c 19 Nov 2002 17:21:59 -0000      1.15
+++ sb_common.c 9 Jan 2003 10:51:09 -0000       1.16
@@ -297,6 +297,7 @@
 EXPORT_SYMBOL(snd_sbmixer_write);
 EXPORT_SYMBOL(snd_sbmixer_read);
 EXPORT_SYMBOL(snd_sbmixer_new);
+EXPORT_SYMBOL(snd_sbmixer_add_ctl);
 
 /*
  *  INIT part

Index: sb_mixer.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/isa/sb/sb_mixer.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- sb_mixer.c  7 Jan 2003 10:40:04 -0000       1.11
+++ sb_mixer.c  9 Jan 2003 10:51:10 -0000       1.12
@@ -60,14 +60,6 @@
  * Single channel mixer element
  */
 
-#define SB_SINGLE(xname, reg, shift, mask) \
-{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
-  .name = xname, \
-  .info = snd_sbmixer_info_single, \
-  .get = snd_sbmixer_get_single, \
-  .put = snd_sbmixer_put_single, \
-  .private_value = reg | (shift << 16) | (mask << 24) }
-
 static int snd_sbmixer_info_single(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * 
uinfo)
 {
        int mask = (kcontrol->private_value >> 24) & 0xff;
@@ -120,14 +112,6 @@
  * Double channel mixer element
  */
 
-#define SB_DOUBLE(xname, left_reg, right_reg, left_shift, right_shift, mask) \
-{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
-  .name = xname, \
-  .info = snd_sbmixer_info_double, \
-  .get = snd_sbmixer_get_double, \
-  .put = snd_sbmixer_put_double, \
-  .private_value = left_reg | (right_reg << 8) | (left_shift << 16) | (right_shift << 
19) | (mask << 24) }
-
 static int snd_sbmixer_info_double(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * 
uinfo)
 {
        int mask = (kcontrol->private_value >> 24) & 0xff;
@@ -364,14 +348,6 @@
  * SB16 input switch
  */
 
-#define SB16_INPUT_SW(xname, reg1, reg2, left_shift, right_shift) \
-{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
-  .name = xname, \
-  .info = snd_sb16mixer_info_input_sw, \
-  .get = snd_sb16mixer_get_input_sw, \
-  .put = snd_sb16mixer_put_input_sw, \
-  .private_value = reg1 | (reg2 << 8) | (left_shift << 16) | (right_shift << 24) }
-
 static int snd_sb16mixer_info_input_sw(snd_kcontrol_t * kcontrol, snd_ctl_elem_info_t 
* uinfo)
 {
        uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
@@ -431,61 +407,114 @@
        return change;
 }
 
-#define SB20_CONTROLS (sizeof(snd_sb20_controls)/sizeof(snd_kcontrol_new_t *))
 
-static snd_kcontrol_new_t snd_sb20_ctl_master_play_vol =
+/*
+ */
+/*
+ */
+int snd_sbmixer_add_ctl(sb_t *chip, const char *name, int index, int type, unsigned 
+long value)
+{
+       static snd_kcontrol_new_t newctls[] = {
+               [SB_MIX_SINGLE] = {
+                       .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+                       .info = snd_sbmixer_info_single,
+                       .get = snd_sbmixer_get_single,
+                       .put = snd_sbmixer_put_single,
+               },
+               [SB_MIX_DOUBLE] = {
+                       .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+                       .info = snd_sbmixer_info_double,
+                       .get = snd_sbmixer_get_double,
+                       .put = snd_sbmixer_put_double,
+               },
+               [SB_MIX_INPUT_SW] = {
+                       .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+                       .info = snd_sb16mixer_info_input_sw,
+                       .get = snd_sb16mixer_get_input_sw,
+                       .put = snd_sb16mixer_put_input_sw,
+               },
+               [SB_MIX_CAPTURE_PRO] = {
+                       .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+                       .info = snd_sb8mixer_info_mux,
+                       .get = snd_sb8mixer_get_mux,
+                       .put = snd_sb8mixer_put_mux,
+               },
+               [SB_MIX_CAPTURE_DT019X] = {
+                       .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+                       .info = snd_dt019x_input_sw_info,
+                       .get = snd_dt019x_input_sw_get,
+                       .put = snd_dt019x_input_sw_put,
+               },
+       };
+       snd_kcontrol_t *ctl;
+       int err;
+
+       ctl = snd_ctl_new1(&newctls[type], chip);
+       if (! ctl)
+               return -ENOMEM;
+       strncpy(ctl->id.name, name, sizeof(ctl->id.name)-1);
+       ctl->id.index = index;
+       ctl->private_value = value;
+       if ((err = snd_ctl_add(chip->card, ctl)) < 0) {
+               snd_ctl_free_one(ctl);
+               return err;
+       }
+       return 0;
+}
+
+/*
+ * SB 2.0 specific mixer elements
+ */
+
+static struct sbmix_elem snd_sb20_ctl_master_play_vol =
        SB_SINGLE("Master Playback Volume", SB_DSP20_MASTER_DEV, 1, 7);
-static snd_kcontrol_new_t snd_sb20_ctl_pcm_play_vol =
+static struct sbmix_elem snd_sb20_ctl_pcm_play_vol =
        SB_SINGLE("PCM Playback Volume", SB_DSP20_PCM_DEV, 1, 3);
-static snd_kcontrol_new_t snd_sb20_ctl_synth_play_vol =
+static struct sbmix_elem snd_sb20_ctl_synth_play_vol =
        SB_SINGLE("Synth Playback Volume", SB_DSP20_FM_DEV, 1, 7);
-static snd_kcontrol_new_t snd_sb20_ctl_cd_play_vol =
+static struct sbmix_elem snd_sb20_ctl_cd_play_vol =
        SB_SINGLE("CD Playback Volume", SB_DSP20_CD_DEV, 1, 7);
 
-static snd_kcontrol_new_t *snd_sb20_controls[] = {
+static struct sbmix_elem *snd_sb20_controls[] = {
        &snd_sb20_ctl_master_play_vol,
        &snd_sb20_ctl_pcm_play_vol,
        &snd_sb20_ctl_synth_play_vol,
        &snd_sb20_ctl_cd_play_vol
 };
 
-#define SB20_INIT_VALUES (sizeof(snd_sb20_init_values)/sizeof(unsigned char)/2)
-
 static unsigned char snd_sb20_init_values[][2] = {
        { SB_DSP20_MASTER_DEV, 0 },
        { SB_DSP20_FM_DEV, 0 },
 };
 
-#define SBPRO_CONTROLS (sizeof(snd_sbpro_controls)/sizeof(snd_kcontrol_new_t *))
-
-static snd_kcontrol_new_t snd_sbpro_ctl_master_play_vol =
+/*
+ * SB Pro specific mixer elements
+ */
+static struct sbmix_elem snd_sbpro_ctl_master_play_vol =
        SB_DOUBLE("Master Playback Volume", SB_DSP_MASTER_DEV, SB_DSP_MASTER_DEV, 5, 
1, 7);
-static snd_kcontrol_new_t snd_sbpro_ctl_pcm_play_vol =
+static struct sbmix_elem snd_sbpro_ctl_pcm_play_vol =
        SB_DOUBLE("PCM Playback Volume", SB_DSP_PCM_DEV, SB_DSP_PCM_DEV, 5, 1, 7);
-static snd_kcontrol_new_t snd_sbpro_ctl_pcm_play_filter =
+static struct sbmix_elem snd_sbpro_ctl_pcm_play_filter =
        SB_SINGLE("PCM Playback Filter", SB_DSP_PLAYBACK_FILT, 5, 1);
-static snd_kcontrol_new_t snd_sbpro_ctl_synth_play_vol =
+static struct sbmix_elem snd_sbpro_ctl_synth_play_vol =
        SB_DOUBLE("Synth Playback Volume", SB_DSP_FM_DEV, SB_DSP_FM_DEV, 5, 1, 7);
-static snd_kcontrol_new_t snd_sbpro_ctl_cd_play_vol =
+static struct sbmix_elem snd_sbpro_ctl_cd_play_vol =
        SB_DOUBLE("CD Playback Volume", SB_DSP_CD_DEV, SB_DSP_CD_DEV, 5, 1, 7);
-static snd_kcontrol_new_t snd_sbpro_ctl_line_play_vol =
+static struct sbmix_elem snd_sbpro_ctl_line_play_vol =
        SB_DOUBLE("Line Playback Volume", SB_DSP_LINE_DEV, SB_DSP_LINE_DEV, 5, 1, 7);
-static snd_kcontrol_new_t snd_sbpro_ctl_mic_play_vol =
+static struct sbmix_elem snd_sbpro_ctl_mic_play_vol =
        SB_SINGLE("Mic Playback Volume", SB_DSP_MIC_DEV, 1, 3);
-static snd_kcontrol_new_t snd_sbpro_ctl_capture_source =
+static struct sbmix_elem snd_sbpro_ctl_capture_source =
        {
-               .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
                .name = "Capture Source",
-               .info = snd_sb8mixer_info_mux,
-               .get = snd_sb8mixer_get_mux,
-               .put = snd_sb8mixer_put_mux,
+               .type = SB_MIX_CAPTURE_PRO
        };
-static snd_kcontrol_new_t snd_sbpro_ctl_capture_filter =
+static struct sbmix_elem snd_sbpro_ctl_capture_filter =
        SB_SINGLE("Capture Filter", SB_DSP_CAPTURE_FILT, 5, 1);
-static snd_kcontrol_new_t snd_sbpro_ctl_capture_low_filter =
+static struct sbmix_elem snd_sbpro_ctl_capture_low_filter =
        SB_SINGLE("Capture Low-Pass Filter", SB_DSP_CAPTURE_FILT, 3, 1);
 
-static snd_kcontrol_new_t *snd_sbpro_controls[] = {
+static struct sbmix_elem *snd_sbpro_controls[] = {
        &snd_sbpro_ctl_master_play_vol,
        &snd_sbpro_ctl_pcm_play_vol,
        &snd_sbpro_ctl_pcm_play_filter,
@@ -498,58 +527,57 @@
        &snd_sbpro_ctl_capture_low_filter
 };
 
-#define SBPRO_INIT_VALUES (sizeof(snd_sbpro_init_values)/sizeof(unsigned char)/2)
-
 static unsigned char snd_sbpro_init_values[][2] = {
        { SB_DSP_MASTER_DEV, 0 },
        { SB_DSP_PCM_DEV, 0 },
        { SB_DSP_FM_DEV, 0 },
 };
 
-#define SB16_CONTROLS (sizeof(snd_sb16_controls)/sizeof(snd_kcontrol_new_t *))
-
-static snd_kcontrol_new_t snd_sb16_ctl_master_play_vol =
+/*
+ * SB16 specific mixer elements
+ */
+static struct sbmix_elem snd_sb16_ctl_master_play_vol =
        SB_DOUBLE("Master Playback Volume", SB_DSP4_MASTER_DEV, (SB_DSP4_MASTER_DEV + 
1), 3, 3, 31);
-static snd_kcontrol_new_t snd_sb16_ctl_3d_enhance_switch =
+static struct sbmix_elem snd_sb16_ctl_3d_enhance_switch =
        SB_SINGLE("3D Enhancement Switch", SB_DSP4_3DSE, 0, 1);
-static snd_kcontrol_new_t snd_sb16_ctl_tone_bass =
+static struct sbmix_elem snd_sb16_ctl_tone_bass =
        SB_DOUBLE("Tone Control - Bass", SB_DSP4_BASS_DEV, (SB_DSP4_BASS_DEV + 1), 4, 
4, 15);
-static snd_kcontrol_new_t snd_sb16_ctl_tone_treble =
+static struct sbmix_elem snd_sb16_ctl_tone_treble =
        SB_DOUBLE("Tone Control - Treble", SB_DSP4_TREBLE_DEV, (SB_DSP4_TREBLE_DEV + 
1), 4, 4, 15);
-static snd_kcontrol_new_t snd_sb16_ctl_pcm_play_vol =
+static struct sbmix_elem snd_sb16_ctl_pcm_play_vol =
        SB_DOUBLE("PCM Playback Volume", SB_DSP4_PCM_DEV, (SB_DSP4_PCM_DEV + 1), 3, 3, 
31);
-static snd_kcontrol_new_t snd_sb16_ctl_synth_capture_route =
+static struct sbmix_elem snd_sb16_ctl_synth_capture_route =
        SB16_INPUT_SW("Synth Capture Route", SB_DSP4_INPUT_LEFT, SB_DSP4_INPUT_RIGHT, 
6, 5);
-static snd_kcontrol_new_t snd_sb16_ctl_synth_play_vol =
+static struct sbmix_elem snd_sb16_ctl_synth_play_vol =
        SB_DOUBLE("Synth Playback Volume", SB_DSP4_SYNTH_DEV, (SB_DSP4_SYNTH_DEV + 1), 
3, 3, 31);
-static snd_kcontrol_new_t snd_sb16_ctl_cd_capture_route =
+static struct sbmix_elem snd_sb16_ctl_cd_capture_route =
        SB16_INPUT_SW("CD Capture Route", SB_DSP4_INPUT_LEFT, SB_DSP4_INPUT_RIGHT, 2, 
1);
-static snd_kcontrol_new_t snd_sb16_ctl_cd_play_switch =
+static struct sbmix_elem snd_sb16_ctl_cd_play_switch =
        SB_DOUBLE("CD Playback Switch", SB_DSP4_OUTPUT_SW, SB_DSP4_OUTPUT_SW, 2, 1, 1);
-static snd_kcontrol_new_t snd_sb16_ctl_cd_play_vol =
+static struct sbmix_elem snd_sb16_ctl_cd_play_vol =
        SB_DOUBLE("CD Playback Volume", SB_DSP4_CD_DEV, (SB_DSP4_CD_DEV + 1), 3, 3, 
31);
-static snd_kcontrol_new_t snd_sb16_ctl_line_capture_route =
+static struct sbmix_elem snd_sb16_ctl_line_capture_route =
        SB16_INPUT_SW("Line Capture Route", SB_DSP4_INPUT_LEFT, SB_DSP4_INPUT_RIGHT, 
4, 3);
-static snd_kcontrol_new_t snd_sb16_ctl_line_play_switch =
+static struct sbmix_elem snd_sb16_ctl_line_play_switch =
        SB_DOUBLE("Line Playback Switch", SB_DSP4_OUTPUT_SW, SB_DSP4_OUTPUT_SW, 4, 3, 
1);
-static snd_kcontrol_new_t snd_sb16_ctl_line_play_vol =
+static struct sbmix_elem snd_sb16_ctl_line_play_vol =
        SB_DOUBLE("Line Playback Volume", SB_DSP4_LINE_DEV, (SB_DSP4_LINE_DEV + 1), 3, 
3, 31);
-static snd_kcontrol_new_t snd_sb16_ctl_mic_capture_route =
+static struct sbmix_elem snd_sb16_ctl_mic_capture_route =
        SB16_INPUT_SW("Mic Capture Route", SB_DSP4_INPUT_LEFT, SB_DSP4_INPUT_RIGHT, 0, 
0);
-static snd_kcontrol_new_t snd_sb16_ctl_mic_play_switch =
+static struct sbmix_elem snd_sb16_ctl_mic_play_switch =
        SB_SINGLE("Mic Playback Switch", SB_DSP4_OUTPUT_SW, 0, 1);
-static snd_kcontrol_new_t snd_sb16_ctl_mic_play_vol =
+static struct sbmix_elem snd_sb16_ctl_mic_play_vol =
        SB_SINGLE("Mic Playback Volume", SB_DSP4_MIC_DEV, 3, 31);
-static snd_kcontrol_new_t snd_sb16_ctl_pc_speaker_vol =
+static struct sbmix_elem snd_sb16_ctl_pc_speaker_vol =
        SB_SINGLE("PC Speaker Volume", SB_DSP4_SPEAKER_DEV, 6, 3);
-static snd_kcontrol_new_t snd_sb16_ctl_capture_vol =
+static struct sbmix_elem snd_sb16_ctl_capture_vol =
        SB_DOUBLE("Capture Volume", SB_DSP4_IGAIN_DEV, (SB_DSP4_IGAIN_DEV + 1), 6, 6, 
3);
-static snd_kcontrol_new_t snd_sb16_ctl_play_vol =
+static struct sbmix_elem snd_sb16_ctl_play_vol =
        SB_DOUBLE("Playback Volume", SB_DSP4_OGAIN_DEV, (SB_DSP4_OGAIN_DEV + 1), 6, 6, 
3);
-static snd_kcontrol_new_t snd_sb16_ctl_auto_mic_gain =
+static struct sbmix_elem snd_sb16_ctl_auto_mic_gain =
        SB_SINGLE("Mic Auto Gain", SB_DSP4_MIC_AGC, 0, 1);
 
-static snd_kcontrol_new_t *snd_sb16_controls[] = {
+static struct sbmix_elem *snd_sb16_controls[] = {
        &snd_sb16_ctl_master_play_vol,
        &snd_sb16_ctl_3d_enhance_switch,
        &snd_sb16_ctl_tone_bass,
@@ -572,8 +600,6 @@
        &snd_sb16_ctl_auto_mic_gain
 };
 
-#define SB16_INIT_VALUES (sizeof(snd_sb16_init_values)/sizeof(unsigned char)/2)
-
 static unsigned char snd_sb16_init_values[][2] = {
        { SB_DSP4_MASTER_DEV + 0, 0 },
        { SB_DSP4_MASTER_DEV + 1, 0 },
@@ -587,37 +613,34 @@
        { SB_DSP4_SPEAKER_DEV, 0 },
 };
 
-#define DT019X_CONTROLS (sizeof(snd_dt019x_controls)/sizeof(snd_kcontrol_new_t *))
-
-
-static snd_kcontrol_new_t snd_dt019x_ctl_master_play_vol =
+/*
+ * DT019x specific mixer elements
+ */
+static struct sbmix_elem snd_dt019x_ctl_master_play_vol =
        SB_DOUBLE("Master Playback Volume", SB_DT019X_MASTER_DEV, 
SB_DT019X_MASTER_DEV, 4,0, 15);
-static snd_kcontrol_new_t snd_dt019x_ctl_pcm_play_vol =
+static struct sbmix_elem snd_dt019x_ctl_pcm_play_vol =
        SB_DOUBLE("PCM Playback Volume", SB_DT019X_PCM_DEV, SB_DT019X_PCM_DEV, 4,0, 
15);
-static snd_kcontrol_new_t snd_dt019x_ctl_synth_play_vol =
+static struct sbmix_elem snd_dt019x_ctl_synth_play_vol =
        SB_DOUBLE("Synth Playback Volume", SB_DT019X_SYNTH_DEV, SB_DT019X_SYNTH_DEV, 
4,0, 15);
-static snd_kcontrol_new_t snd_dt019x_ctl_cd_play_vol =
+static struct sbmix_elem snd_dt019x_ctl_cd_play_vol =
        SB_DOUBLE("CD Playback Volume", SB_DT019X_CD_DEV, SB_DT019X_CD_DEV, 4,0, 15);
-static snd_kcontrol_new_t snd_dt019x_ctl_mic_play_vol =
+static struct sbmix_elem snd_dt019x_ctl_mic_play_vol =
        SB_SINGLE("Mic Playback Volume", SB_DT019X_MIC_DEV, 4, 7);
-static snd_kcontrol_new_t snd_dt019x_ctl_pc_speaker_vol =
+static struct sbmix_elem snd_dt019x_ctl_pc_speaker_vol =
        SB_SINGLE("PC Speaker Volume", SB_DT019X_SPKR_DEV, 0,  7);
-static snd_kcontrol_new_t snd_dt019x_ctl_line_play_vol =
+static struct sbmix_elem snd_dt019x_ctl_line_play_vol =
        SB_DOUBLE("Line Playback Volume", SB_DT019X_LINE_DEV, SB_DT019X_LINE_DEV, 4,0, 
15);
-static snd_kcontrol_new_t snd_dt019x_ctl_pcm_play_switch =
+static struct sbmix_elem snd_dt019x_ctl_pcm_play_switch =
        SB_DOUBLE("PCM Playback Switch", SB_DT019X_OUTPUT_SW2, SB_DT019X_OUTPUT_SW2, 
2,1, 1);
-static snd_kcontrol_new_t snd_dt019x_ctl_synth_play_switch =
+static struct sbmix_elem snd_dt019x_ctl_synth_play_switch =
        SB_DOUBLE("Synth Playback Switch", SB_DT019X_OUTPUT_SW2, SB_DT019X_OUTPUT_SW2, 
4,3, 1);
-static snd_kcontrol_new_t snd_dt019x_ctl_capture_source =
+static struct sbmix_elem snd_dt019x_ctl_capture_source =
        {
-               .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
                .name = "Capture Source",
-               .info = snd_dt019x_input_sw_info,
-               .get = snd_dt019x_input_sw_get,
-               .put = snd_dt019x_input_sw_put,
+               .type = SB_MIX_CAPTURE_DT019X
        };
 
-static snd_kcontrol_new_t *snd_dt019x_controls[] = {
+static struct sbmix_elem *snd_dt019x_controls[] = {
        &snd_dt019x_ctl_master_play_vol,
        &snd_dt019x_ctl_pcm_play_vol,
        &snd_dt019x_ctl_synth_play_vol,
@@ -633,8 +656,6 @@
        &snd_dt019x_ctl_capture_source
 };
 
-#define DT019X_INIT_VALUES (sizeof(snd_dt019x_init_values)/sizeof(unsigned char)/2)
-
 static unsigned char snd_dt019x_init_values[][2] = {
         { SB_DT019X_MASTER_DEV, 0 },
         { SB_DT019X_PCM_DEV, 0 },
@@ -647,35 +668,36 @@
         { SB_DT019X_CAPTURE_SW, 0x06 },
 };
 
+/*
+ * ALS4000 specific mixer elements
+ */
 /* FIXME: SB_ALS4000_MONO_IO_CTRL needs output select ctrl ! */
-static snd_kcontrol_new_t snd_als4000_ctl_mono_output_switch =
+static struct sbmix_elem snd_als4000_ctl_mono_output_switch =
        SB_SINGLE("Mono Output Switch", SB_ALS4000_MONO_IO_CTRL, 5, 1);
 /* FIXME: mono input switch also available on DT019X ? */
-static snd_kcontrol_new_t snd_als4000_ctl_mono_input_switch =
+static struct sbmix_elem snd_als4000_ctl_mono_input_switch =
        SB_SINGLE("Mono Input Switch", SB_DT019X_OUTPUT_SW2, 0, 1);
-static snd_kcontrol_new_t snd_als4000_ctl_mic_20db_boost =
+static struct sbmix_elem snd_als4000_ctl_mic_20db_boost =
        SB_SINGLE("Mic Boost (+20dB)", SB_ALS4000_MIC_IN_GAIN, 0, 0x03);
-static snd_kcontrol_new_t snd_als4000_ctl_mixer_out_to_in =
+static struct sbmix_elem snd_als4000_ctl_mixer_out_to_in =
        SB_SINGLE("Mixer Out To In", SB_ALS4000_MIC_IN_GAIN, 7, 0x01);
 /* FIXME: 3D needs much more sophisticated controls, many more features ! */
-static snd_kcontrol_new_t snd_als4000_ctl_3d_output_switch =
+static struct sbmix_elem snd_als4000_ctl_3d_output_switch =
        SB_SINGLE("3D Output Switch", SB_ALS4000_3D_SND_FX, 6, 0x01);
-static snd_kcontrol_new_t snd_als4000_ctl_3d_output_ratio =
+static struct sbmix_elem snd_als4000_ctl_3d_output_ratio =
        SB_SINGLE("3D Output Ratio", SB_ALS4000_3D_SND_FX, 0, 0x07);
-static snd_kcontrol_new_t snd_als4000_ctl_3d_poweroff_switch =
+static struct sbmix_elem snd_als4000_ctl_3d_poweroff_switch =
        SB_SINGLE("3D PowerOff Switch", SB_ALS4000_3D_TIME_DELAY, 4, 0x01);
-static snd_kcontrol_new_t snd_als4000_ctl_3d_delay =
+static struct sbmix_elem snd_als4000_ctl_3d_delay =
        SB_SINGLE("3D Delay", SB_ALS4000_3D_TIME_DELAY, 0, 0x0f);
 #if NOT_AVAILABLE
-static snd_kcontrol_new_t snd_als4000_ctl_fmdac =
+static struct sbmix_elem snd_als4000_ctl_fmdac =
        SB_SINGLE("FMDAC Switch (Option ?)", SB_ALS4000_FMDAC, 0, 0x01);
-static snd_kcontrol_new_t snd_als4000_ctl_qsound =
+static struct sbmix_elem snd_als4000_ctl_qsound =
        SB_SINGLE("QSound Mode", SB_ALS4000_QSOUND, 1, 0x1f);
 #endif
 
-#define ALS4000_CONTROLS (sizeof(snd_als4000_controls)/sizeof(snd_kcontrol_new_t *))
-
-static snd_kcontrol_new_t *snd_als4000_controls[] = {
+static struct sbmix_elem *snd_als4000_controls[] = {
        &snd_sb16_ctl_master_play_vol,
        &snd_dt019x_ctl_pcm_play_switch,
        &snd_sb16_ctl_pcm_play_vol,
@@ -709,8 +731,6 @@
 #endif
 };
 
-#define ALS4000_INIT_VALUES (sizeof(snd_als4000_init_values)/sizeof(unsigned char)/2)
-
 static unsigned char snd_als4000_init_values[][2] = {
        { SB_DSP4_MASTER_DEV + 0, 0 },
        { SB_DSP4_MASTER_DEV + 1, 0 },
@@ -726,8 +746,11 @@
        { SB_ALS4000_MIC_IN_GAIN, 0 },
 };
 
+
+/*
+ */
 static int snd_sbmixer_init(sb_t *chip,
-                           snd_kcontrol_new_t **controls,
+                           struct sbmix_elem **controls,
                            int controls_count,
                            unsigned char map[][2],
                            int map_count,
@@ -750,7 +773,7 @@
        }
 
        for (idx = 0; idx < controls_count; idx++) {
-               if ((err = snd_ctl_add(card, snd_ctl_new1(controls[idx], chip))) < 0)
+               if ((err = snd_sbmixer_add_ctl_elem(chip, controls[idx])) < 0)
                        return err;
        }
        snd_component_add(card, name);
@@ -773,37 +796,47 @@
        case SB_HW_20:
        case SB_HW_201:
                if ((err = snd_sbmixer_init(chip,
-                                           snd_sb20_controls, SB20_CONTROLS,
-                                           snd_sb20_init_values, SB20_INIT_VALUES,
+                                           snd_sb20_controls,
+                                           ARRAY_SIZE(snd_sb20_controls),
+                                           snd_sb20_init_values,
+                                           ARRAY_SIZE(snd_sb20_init_values),
                                            "CTL1335")) < 0)
                        return err;
                break;
        case SB_HW_PRO:
                if ((err = snd_sbmixer_init(chip,
-                                           snd_sbpro_controls, SBPRO_CONTROLS,
-                                           snd_sbpro_init_values, SBPRO_INIT_VALUES,
+                                           snd_sbpro_controls,
+                                           ARRAY_SIZE(snd_sbpro_controls),
+                                           snd_sbpro_init_values,
+                                           ARRAY_SIZE(snd_sbpro_init_values),
                                            "CTL1345")) < 0)
                        return err;
                break;
        case SB_HW_16:
        case SB_HW_ALS100:
                if ((err = snd_sbmixer_init(chip,
-                                           snd_sb16_controls, SB16_CONTROLS,
-                                           snd_sb16_init_values, SB16_INIT_VALUES,
+                                           snd_sb16_controls,
+                                           ARRAY_SIZE(snd_sb16_controls),
+                                           snd_sb16_init_values,
+                                           ARRAY_SIZE(snd_sb16_init_values),
                                            "CTL1745")) < 0)
                        return err;
                break;
        case SB_HW_ALS4000:
                if ((err = snd_sbmixer_init(chip,
-                                           snd_als4000_controls, ALS4000_CONTROLS,
-                                           snd_als4000_init_values, 
ALS4000_INIT_VALUES,
+                                           snd_als4000_controls,
+                                           ARRAY_SIZE(snd_als4000_controls),
+                                           snd_als4000_init_values,
+                                           ARRAY_SIZE(snd_als4000_init_values),
                                            "ALS4000")) < 0)
                        return err;
                break;
        case SB_HW_DT019X:
                if ((err = snd_sbmixer_init(chip,
-                                           snd_dt019x_controls, DT019X_CONTROLS,
-                                           snd_dt019x_init_values, DT019X_INIT_VALUES,
+                                           snd_dt019x_controls,
+                                           ARRAY_SIZE(snd_dt019x_controls),
+                                           snd_dt019x_init_values,
+                                           ARRAY_SIZE(snd_dt019x_init_values),
                                            "DT019X")) < 0)
                break;
        default:



-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to