period_size = params_period_bytes(hw_params);
        periods = params_periods(hw_params);
 
-       snd_assert(period_size >= 0x100 && period_size <= 0x10000,
-                  return -EINVAL);
-       snd_assert(periods >= 4, return -EINVAL);
-       snd_assert(period_size * periods <= 1024 * 1024, return -EINVAL);
+       if (period_size < 0x100 || period_size > 0x10000)
+               return -EINVAL;
+       if (periods < 4)
+               return -EINVAL;
+       if (period_size * periods > 1024 * 1024)
+               return -EINVAL;
 
        dev = saa7134->dev;
 
        unsigned int idx;
        int err;
 
-       snd_assert(chip != NULL, return -EINVAL);
+       if (snd_BUG_ON(!chip))
+               return -EINVAL;
        strcpy(card->mixername, "SAA7134 Mixer");
 
        for (idx = 0; idx < ARRAY_SIZE(snd_saa7134_controls); idx++) {
 
  */
 static inline int vx_test_and_ack(struct vx_core *chip)
 {
-       snd_assert(chip->ops->test_and_ack, return -ENXIO);
        return chip->ops->test_and_ack(chip);
 }
 
 static inline void vx_validate_irq(struct vx_core *chip, int enable)
 {
-       snd_assert(chip->ops->validate_irq, return);
        chip->ops->validate_irq(chip, enable);
 }
 
 static inline unsigned char snd_vx_inb(struct vx_core *chip, int reg)
 {
-       snd_assert(chip->ops->in8, return 0);
        return chip->ops->in8(chip, reg);
 }
 
 static inline unsigned int snd_vx_inl(struct vx_core *chip, int reg)
 {
-       snd_assert(chip->ops->in32, return 0);
        return chip->ops->in32(chip, reg);
 }
 
 static inline void snd_vx_outb(struct vx_core *chip, int reg, unsigned char val)
 {
-       snd_assert(chip->ops->out8, return);
        chip->ops->out8(chip, reg, val);
 }
 
 static inline void snd_vx_outl(struct vx_core *chip, int reg, unsigned int val)
 {
-       snd_assert(chip->ops->out32, return);
        chip->ops->out32(chip, reg, val);
 }
 
 
 static inline void vx_reset_dsp(struct vx_core *chip)
 {
-       snd_assert(chip->ops->reset_dsp, return);
        chip->ops->reset_dsp(chip);
 }
 
 static inline void vx_pseudo_dma_write(struct vx_core *chip, struct snd_pcm_runtime *runtime,
                                       struct vx_pipe *pipe, int count)
 {
-       snd_assert(chip->ops->dma_write, return);
        chip->ops->dma_write(chip, runtime, pipe, count);
 }
 
 static inline void vx_pseudo_dma_read(struct vx_core *chip, struct snd_pcm_runtime *runtime,
                                      struct vx_pipe *pipe, int count)
 {
-       snd_assert(chip->ops->dma_read, return);
        chip->ops->dma_read(chip, runtime, pipe, count);
 }
 
 
                 
        /* we are requested to process synchronization DMA transfer */
        if (s->tx_spin) {
-               snd_assert(s->stream_id == SNDRV_PCM_STREAM_PLAYBACK, return);
+               if (snd_BUG_ON(s->stream_id != SNDRV_PCM_STREAM_PLAYBACK))
+                       return;
                /* fill the xmit dma buffers and return */
 #ifdef HH_VERSION
                sa1100_dma_set_spin(s->dmach, FORCE_CLOCK_ADDR, FORCE_CLOCK_SIZE);
                                continue;               /* special case */
                } else {
                        offset = dma_size * s->period;
-                       snd_assert(dma_size <= DMA_BUF_SIZE, );
+                       snd_BUG_ON(dma_size > DMA_BUF_SIZE);
                }
 #ifdef HH_VERSION
                ret = sa1100_dma_queue_buffer(s->dmach, s, runtime->dma_addr + offset, dma_size);
 
        unsigned int idx;
        int err;
 
-       snd_assert(dummy != NULL, return -EINVAL);
+       if (snd_BUG_ON(!dummy))
+               return -EINVAL;
        spin_lock_init(&dummy->mixer_lock);
        strcpy(card->mixername, "Dummy Mixer");
 
 
                 * If we had an OPL4 chip, opl3->hardware would have been set
                 * by the OPL4 driver; so we can assume OPL3 here.
                 */
-               snd_assert(opl3->r_port != 0, return -ENODEV);
+               if (snd_BUG_ON(!opl3->r_port))
+                       return -ENODEV;
                opl3->hardware = OPL3_HW_OPL3;
        }
        return 0;
 
 static int snd_opl3_free(struct snd_opl3 *opl3)
 {
-       snd_assert(opl3 != NULL, return -ENXIO);
+       if (snd_BUG_ON(!opl3))
+               return -ENXIO;
        if (opl3->private_free)
                opl3->private_free(opl3);
        snd_opl3_clear_patches(opl3);
 
 
        struct snd_opl3_voice *vp, *vp2;
 
-       snd_assert(voice < MAX_OPL3_VOICES, return);
+       if (snd_BUG_ON(voice >= MAX_OPL3_VOICES))
+               return;
 
        vp = &opl3->voices[voice];
        if (voice < MAX_OPL2_VOICES) {
 
        struct snd_opl3_voice *vp;
 
-       snd_assert(voice < MAX_OPL3_VOICES, return);
+       if (snd_BUG_ON(voice >= MAX_OPL3_VOICES))
+               return;
 
        vp = &opl3->voices[voice];
        if (vp->chan == NULL)
 
        struct snd_opl3 *opl3 = closure;
        int err;
 
-       snd_assert(arg != NULL, return -ENXIO);
+       if (snd_BUG_ON(!arg))
+               return -ENXIO;
 
        if ((err = snd_opl3_synth_setup(opl3)) < 0)
                return err;
 {
        struct snd_opl3 *opl3;
 
-       snd_assert(arg != NULL, return -ENXIO);
+       if (snd_BUG_ON(!arg))
+               return -ENXIO;
        opl3 = arg->private_data;
 
        snd_opl3_synth_cleanup(opl3);
        char name[32];
        int err, type;
 
-       snd_assert(arg != NULL, return -ENXIO);
+       if (snd_BUG_ON(!arg))
+               return -ENXIO;
        opl3 = arg->private_data;
 
        if (format == FM_PATCH)
 {
        struct snd_opl3 *opl3;
 
-       snd_assert(arg != NULL, return -ENXIO);
+       if (snd_BUG_ON(!arg))
+               return -ENXIO;
        opl3 = arg->private_data;
        switch (cmd) {
                case SNDCTL_FM_LOAD_INSTR:
 {
        struct snd_opl3 *opl3;
 
-       snd_assert(arg != NULL, return -ENXIO);
+       if (snd_BUG_ON(!arg))
+               return -ENXIO;
        opl3 = arg->private_data;
 
        return 0;
 
        struct snd_opl3 *opl3 = hw->private_data;
        void __user *argp = (void __user *)arg;
 
-       snd_assert(opl3 != NULL, return -EINVAL);
+       if (snd_BUG_ON(!opl3))
+               return -EINVAL;
 
        switch (cmd) {
                /* get information */
 
        if (!list_empty(&opl4->off_voices))
                return list_entry(opl4->off_voices.next, struct opl4_voice, list);
        /* then get the oldest key-on voice */
-       snd_assert(!list_empty(&opl4->on_voices), );
+       snd_BUG_ON(list_empty(&opl4->on_voices));
        return list_entry(opl4->on_voices.next, struct opl4_voice, list);
 }
 
 
  */
 void vx_init_rmh(struct vx_rmh *rmh, unsigned int cmd)
 {
-       snd_assert(cmd < CMD_LAST_INDEX, return);
+       if (snd_BUG_ON(cmd >= CMD_LAST_INDEX))
+               return;
        rmh->LgCmd = vx_dsp_cmds[cmd].length;
        rmh->LgStat = vx_dsp_cmds[cmd].st_length;
        rmh->DspStat = vx_dsp_cmds[cmd].st_type;
 
 
        if (size < 1)
                return 0;
-       snd_assert(size <= SIZE_MAX_STATUS, return -EINVAL);
+       if (snd_BUG_ON(size > SIZE_MAX_STATUS))
+               return -EINVAL;
 
        for (i = 1; i <= size; i++) {
                /* trigger an irq MESS_WRITE_NEXT */
        int no_fillup = vx_has_new_dsp(chip);
 
        /* check the length of boot image */
-       snd_assert(boot->size > 0, return -EINVAL);
-       snd_assert(boot->size % 3 == 0, return -EINVAL);
+       if (boot->size <= 0)
+               return -EINVAL;
+       if (boot->size % 3)
+               return -EINVAL;
 #if 0
        {
                /* more strict check */
                unsigned int c = ((u32)boot->data[0] << 16) | ((u32)boot->data[1] << 8) | boot->data[2];
-               snd_assert(boot->size == (c + 2) * 3, return -EINVAL);
+               if (boot->size != (c + 2) * 3)
+                       return -EINVAL;
        }
 #endif
 
  */
 static void vx_reset_board(struct vx_core *chip, int cold_reset)
 {
-       snd_assert(chip->ops->reset_board, return);
+       if (snd_BUG_ON(!chip->ops->reset_board))
+               return;
 
        /* current source, later sync'ed with target */
        chip->audio_source = VX_AUDIO_SRC_LINE;
        unsigned int csum = 0;
        const unsigned char *image, *cptr;
 
-       snd_assert(dsp->size % 3 == 0, return -EINVAL);
+       if (dsp->size % 3)
+               return -EINVAL;
 
        vx_toggle_dac_mute(chip, 1);
 
 {
        struct vx_core *chip;
 
-       snd_assert(card && hw && ops, return NULL);
+       if (snd_BUG_ON(!card || !hw || !ops))
+               return NULL;
 
        chip = kzalloc(sizeof(*chip) + extra_size, GFP_KERNEL);
        if (! chip) {
 
        };
        struct vx_core *vx = hw->private_data;
 
-       snd_assert(type_ids[vx->type], return -EINVAL);
+       if (snd_BUG_ON(!type_ids[vx->type]))
+               return -EINVAL;
        strcpy(info->id, type_ids[vx->type]);
        if (vx_is_pcmcia(vx))
                info->num_dsps = 4;
        int index, err;
        struct firmware *fw;
 
-       snd_assert(vx->ops->load_dsp, return -ENXIO);
+       if (snd_BUG_ON(!vx->ops->load_dsp))
+               return -ENXIO;
 
        fw = kmalloc(sizeof(*fw), GFP_KERNEL);
        if (! fw) {
 
 {
        unsigned long flags;
 
-       snd_assert(chip->ops->write_codec, return);
+       if (snd_BUG_ON(!chip->ops->write_codec))
+               return;
 
        if (chip->chip_status & VX_STAT_IS_STALE)
                return;
 
                return -EBUSY;
 
        audio = subs->pcm->device * 2;
-       snd_assert(audio < chip->audio_outs, return -EINVAL);
+       if (snd_BUG_ON(audio >= chip->audio_outs))
+               return -EINVAL;
        
        /* playback pipe may have been already allocated for monitoring */
        pipe = chip->playback_pipes[audio];
                return -EBUSY;
 
        audio = subs->pcm->device * 2;
-       snd_assert(audio < chip->audio_ins, return -EINVAL);
+       if (snd_BUG_ON(audio >= chip->audio_ins))
+               return -EINVAL;
        err = vx_alloc_pipe(chip, 1, audio, 2, &pipe);
        if (err < 0)
                return err;
                        }
                        if (capture)
                                continue;
-                       snd_assert(p >= 0 && (unsigned int)p < chip->audio_outs,);
+                       if (snd_BUG_ON(p < 0 || p >= chip->audio_outs))
+                               continue;
                        pipe = chip->playback_pipes[p];
                        if (pipe && pipe->substream) {
                                vx_pcm_playback_update(chip, pipe->substream, pipe);
 
 {
        int hexfreq;
 
-       snd_assert(freq > 0, return 0);
+       if (snd_BUG_ON(freq <= 0))
+               return 0;
 
        hexfreq = (28224000 * 10) / freq;
        hexfreq = (hexfreq + 5) / 10;
 
        /* max freq = 55125 Hz */
-       snd_assert(hexfreq > 0x00000200, return 0);
+       if (snd_BUG_ON(hexfreq <= 0x00000200))
+               return 0;
 
        if (hexfreq <= 0x03ff)
                return hexfreq - 0x00000201;
 
        unsigned long end_time;
        int data, aes3input = 0;
 
-       snd_assert(cs8427, return);
+       if (snd_BUG_ON(!cs8427))
+               return;
        chip = cs8427->private_data;
        snd_i2c_lock(cs8427->bus);
        if ((chip->regmap[CS8427_REG_CLOCKSOURCE] & CS8427_RXDAES3INPUT) ==
        unsigned int idx;
        int err;
 
-       snd_assert(play_substream && cap_substream, return -EINVAL);
+       if (snd_BUG_ON(!play_substream || !cap_substream))
+               return -EINVAL;
        for (idx = 0; idx < ARRAY_SIZE(snd_cs8427_iec958_controls); idx++) {
                kctl = snd_ctl_new1(&snd_cs8427_iec958_controls[idx], cs8427);
                if (kctl == NULL)
 
        chip->playback.substream = play_substream;
        chip->capture.substream = cap_substream;
-       snd_assert(chip->playback.pcm_ctl, return -EIO);
+       if (snd_BUG_ON(!chip->playback.pcm_ctl))
+               return -EIO;
        return 0;
 }
 
 {
        struct cs8427 *chip;
 
-       snd_assert(cs8427, return -ENXIO);
+       if (snd_BUG_ON(!cs8427))
+               return -ENXIO;
        chip = cs8427->private_data;
        if (active)
                memcpy(chip->playback.pcm_status,
        char *status;
        int err, reset;
 
-       snd_assert(cs8427, return -ENXIO);
+       if (snd_BUG_ON(!cs8427))
+               return -ENXIO;
        chip = cs8427->private_data;
        status = chip->playback.pcm_status;
        snd_i2c_lock(cs8427->bus);
 
        struct snd_i2c_bus *slave;
        struct snd_i2c_device *device;
 
-       snd_assert(bus != NULL, return -EINVAL);
+       if (snd_BUG_ON(!bus))
+               return -EINVAL;
        while (!list_empty(&bus->devices)) {
                device = snd_i2c_device(bus->devices.next);
                snd_i2c_device_free(device);
        struct snd_i2c_device *device;
 
        *rdevice = NULL;
-       snd_assert(bus != NULL, return -EINVAL);
+       if (snd_BUG_ON(!bus))
+               return -EINVAL;
        device = kzalloc(sizeof(*device), GFP_KERNEL);
        if (device == NULL)
                return -ENOMEM;
 
        struct l3_client *clnt;
        int idx, err;
 
-       snd_assert(card != NULL, return -EINVAL);
+       if (snd_BUG_ON(!card))
+               return -EINVAL;
 
        clnt = kzalloc(sizeof(*clnt), GFP_KERNEL);
        if (clnt == NULL)
 
        unsigned int idx;
        int err;
 
-       snd_assert(cap_substream, return -EINVAL);
+       if (snd_BUG_ON(!cap_substream))
+               return -EINVAL;
        ak4114->playback_substream = ply_substream;
        ak4114->capture_substream = cap_substream;
        for (idx = 0; idx < AK4114_CONTROLS; idx++) {
 
        unsigned int idx;
        int err;
 
-       snd_assert(cap_substream, return -EINVAL);
+       if (snd_BUG_ON(!cap_substream))
+               return -EINVAL;
        ak4117->substream = cap_substream;
        for (idx = 0; idx < AK4117_CONTROLS; idx++) {
                kctl = snd_ctl_new1(&snd_ak4117_iec958_controls[idx], ak4117);
 
 static void
 au1000_dma_stop(struct audio_stream *stream)
 {
-       snd_assert(stream->buffer, return);
+       if (snd_BUG_ON(!stream->buffer))
+               return;
        disable_dma(stream->dma);
 }
 
 static void
 au1000_dma_start(struct audio_stream *stream)
 {
-       snd_assert(stream->buffer, return);
+       if (snd_BUG_ON(!stream->buffer))
+               return;
 
        init_dma(stream->dma);
        if (get_dma_active_buffer(stream->dma) == 0) {
 
        struct snd_card *card = h->card;
        int idx, err;
 
-       snd_assert(h != NULL, return -EINVAL);
+       if (snd_BUG_ON(!h))
+               reutrn -EINVAL;
        strcpy(card->mixername, "Harmony Gain control interface");
 
        for (idx = 0; idx < HARMONY_CONTROLS; idx++) {
 
        int offset = pipe->hw_ptr;
        unsigned short *addr = (unsigned short *)(runtime->dma_area + offset);
 
-       snd_assert(count % 2 == 0, return);
+       if (snd_BUG_ON(count % 2))
+               return;
        vx_setup_pseudo_dma(chip, 0);
        if (offset + count > pipe->buffer_bytes) {
                int length = pipe->buffer_bytes - offset;
 
 static void awacs_amp_free(struct snd_pmac *chip)
 {
        struct awacs_amp *amp = chip->mixer_data;
-       snd_assert(amp, return);
+       if (!amp)
+               return;
        kfree(amp);
        chip->mixer_data = NULL;
        chip->mixer_free = NULL;
        struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
        int index = kcontrol->private_value;
        struct awacs_amp *amp = chip->mixer_data;
-       snd_assert(amp, return -EINVAL);
-       snd_assert(index >= 0 && index <= 1, return -EINVAL);
+
        ucontrol->value.integer.value[0] = 31 - (amp->amp_vol[index][0] & 31);
        ucontrol->value.integer.value[1] = 31 - (amp->amp_vol[index][1] & 31);
        return 0;
        int index = kcontrol->private_value;
        int vol[2];
        struct awacs_amp *amp = chip->mixer_data;
-       snd_assert(amp, return -EINVAL);
-       snd_assert(index >= 0 && index <= 1, return -EINVAL);
 
        vol[0] = (31 - (ucontrol->value.integer.value[0] & 31))
                | (amp->amp_vol[index][0] & 32);
        struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
        int index = kcontrol->private_value;
        struct awacs_amp *amp = chip->mixer_data;
-       snd_assert(amp, return -EINVAL);
-       snd_assert(index >= 0 && index <= 1, return -EINVAL);
+
        ucontrol->value.integer.value[0] = (amp->amp_vol[index][0] & 32)
                                        ? 0 : 1;
        ucontrol->value.integer.value[1] = (amp->amp_vol[index][1] & 32)
        int index = kcontrol->private_value;
        int vol[2];
        struct awacs_amp *amp = chip->mixer_data;
-       snd_assert(amp, return -EINVAL);
-       snd_assert(index >= 0 && index <= 1, return -EINVAL);
 
        vol[0] = (ucontrol->value.integer.value[0] ? 0 : 32)
                | (amp->amp_vol[index][0] & 31);
        struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
        int index = kcontrol->private_value;
        struct awacs_amp *amp = chip->mixer_data;
-       snd_assert(amp, return -EINVAL);
-       snd_assert(index >= 0 && index <= 1, return -EINVAL);
+
        ucontrol->value.integer.value[0] = amp->amp_tone[index];
        return 0;
 }
        int index = kcontrol->private_value;
        struct awacs_amp *amp = chip->mixer_data;
        unsigned int val;
-       snd_assert(amp, return -EINVAL);
-       snd_assert(index >= 0 && index <= 1, return -EINVAL);
+
        val = ucontrol->value.integer.value[0];
        if (val > 14)
                return -EINVAL;
 {
        struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
        struct awacs_amp *amp = chip->mixer_data;
-       snd_assert(amp, return -EINVAL);
+
        ucontrol->value.integer.value[0] = amp->amp_master;
        return 0;
 }
        struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
        struct awacs_amp *amp = chip->mixer_data;
        unsigned int val;
-       snd_assert(amp, return -EINVAL);
+
        val = ucontrol->value.integer.value[0];
        if (val > 99)
                return -EINVAL;
 
                             struct snd_ctl_elem_value *ucontrol)
 {
        struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
-       snd_assert(chip->beep, return -ENXIO);
+       if (snd_BUG_ON(!chip->beep))
+               return -ENXIO;
        ucontrol->value.integer.value[0] = chip->beep->volume;
        return 0;
 }
 {
        struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
        unsigned int oval, nval;
-       snd_assert(chip->beep, return -ENXIO);
+       if (snd_BUG_ON(!chip->beep))
+               return -ENXIO;
        oval = chip->beep->volume;
        nval = ucontrol->value.integer.value[0];
        if (nval > 100)
 
 {
        struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
        struct pmac_tumbler *mix = chip->mixer_data;
-       snd_assert(mix, return -ENODEV);
+
        ucontrol->value.integer.value[0] = mix->master_vol[0];
        ucontrol->value.integer.value[1] = mix->master_vol[1];
        return 0;
        unsigned int vol[2];
        int change;
 
-       snd_assert(mix, return -ENODEV);
        vol[0] = ucontrol->value.integer.value[0];
        vol[1] = ucontrol->value.integer.value[1];
        if (vol[0] >= ARRAY_SIZE(master_volume_table) ||
 {
        struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
        struct pmac_tumbler *mix = chip->mixer_data;
-       snd_assert(mix, return -ENODEV);
+
        ucontrol->value.integer.value[0] = mix->master_switch[0];
        ucontrol->value.integer.value[1] = mix->master_switch[1];
        return 0;
        struct pmac_tumbler *mix = chip->mixer_data;
        int change;
 
-       snd_assert(mix, return -ENODEV);
        change = mix->master_switch[0] != ucontrol->value.integer.value[0] ||
                mix->master_switch[1] != ucontrol->value.integer.value[1];
        if (change) {
        struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
        struct pmac_tumbler *mix = chip->mixer_data;
 
-       snd_assert(mix, return -ENODEV);
        ucontrol->value.enumerated.item[0] = mix->capture_source;
        return 0;
 }
        struct pmac_tumbler *mix = chip->mixer_data;
        int change;
 
-       snd_assert(mix, return -ENODEV);
        change = ucontrol->value.enumerated.item[0] != mix->capture_source;
        if (change) {
                mix->capture_source = !!ucontrol->value.enumerated.item[0];
                return;
 
        mix = chip->mixer_data;
-       snd_assert(mix, return);
+       if (snd_BUG_ON(!mix))
+               return;
 
        headphone = tumbler_detect_headphone(chip);
        lineout = tumbler_detect_lineout(chip);
        if (chip->auto_mute) {
                struct pmac_tumbler *mix;
                mix = chip->mixer_data;
-               snd_assert(mix, return);
+               if (snd_BUG_ON(!mix))
+                       return;
                mix->auto_mute_notify = do_notify;
                schedule_work(&device_change);
        }
 {
        struct pmac_tumbler *mix = chip->mixer_data;
 
-       snd_assert(mix, return);
-
        mix->acs &= ~1;
        mix->master_switch[0] = mix->save_master_switch[0];
        mix->master_switch[1] = mix->save_master_switch[1];
 {
        int irq;
        struct pmac_tumbler *mix = chip->mixer_data;
-       snd_assert(mix, return -EINVAL);
 
        if (tumbler_find_device("audio-hw-reset",
                                "platform-do-hw-reset",
 
 {
        int i;
        unsigned long flags;
-       snd_assert(length % 4 == 0, return);
+       if (snd_BUG_ON(length % 4))
+               return;
        for (i = 0; i < length; i++) {
                if (!(i % 8))
                        spu_write_wait();
 
                               /* playback count */ 1,
                               /* capture count */  1, &pcm)) < 0)
                return err;
-       snd_assert(pcm != NULL, return -EINVAL);
 
        snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_amd7930_playback_ops);
        snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_amd7930_capture_ops);
 
 static int snd_amd7930_info_volume(struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
 {
-       int type = kctl->private_value;
-
-       snd_assert(type == VOLUME_MONITOR ||
-                  type == VOLUME_CAPTURE ||
-                  type == VOLUME_PLAYBACK, return -EINVAL);
-       (void) type;
-
        uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
        uinfo->count = 1;
        uinfo->value.integer.min = 0;
        int type = kctl->private_value;
        int *swval;
 
-       snd_assert(type == VOLUME_MONITOR ||
-                  type == VOLUME_CAPTURE ||
-                  type == VOLUME_PLAYBACK, return -EINVAL);
-
        switch (type) {
        case VOLUME_MONITOR:
                swval = &amd->mgain;
        int type = kctl->private_value;
        int *swval, change;
 
-       snd_assert(type == VOLUME_MONITOR ||
-                  type == VOLUME_CAPTURE ||
-                  type == VOLUME_PLAYBACK, return -EINVAL);
-
        switch (type) {
        case VOLUME_MONITOR:
                swval = &amd->mgain;
        struct snd_card *card;
        int idx, err;
 
-       snd_assert(amd != NULL && amd->card != NULL, return -EINVAL);
+       if (snd_BUG_ON(!amd || !amd->card))
+               return -EINVAL;
 
        card = amd->card;
        strcpy(card->mixername, card->shortname);
 
        struct snd_cs4231 *chip = card->private_data;
        int err, idx;
 
-       snd_assert(chip != NULL && chip->pcm != NULL, return -EINVAL);
+       if (snd_BUG_ON(!chip || !chip->pcm))
+               return -EINVAL;
 
        strcpy(card->mixername, chip->pcm->name);
 
 
                               /* playback count */ 1,
                               /* capture count */  1, &pcm)) < 0)
                return err;
-       snd_assert(pcm != NULL, return -EINVAL);
 
        snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_dbri_ops);
        snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_dbri_ops);
 {
        struct snd_dbri *dbri = snd_kcontrol_chip(kcontrol);
        struct dbri_streaminfo *info;
-       snd_assert(dbri != NULL, return -EINVAL);
+
+       if (snd_BUG_ON(!dbri))
+               return -EINVAL;
        info = &dbri->stream_info[kcontrol->private_value];
-       snd_assert(info != NULL, return -EINVAL);
 
        ucontrol->value.integer.value[0] = info->left_gain;
        ucontrol->value.integer.value[1] = info->right_gain;
        int shift = (kcontrol->private_value >> 8) & 0xff;
        int mask = (kcontrol->private_value >> 16) & 0xff;
        int invert = (kcontrol->private_value >> 24) & 1;
-       snd_assert(dbri != NULL, return -EINVAL);
+
+       if (snd_BUG_ON(!dbri))
+               return -EINVAL;
 
        if (elem < 4)
                ucontrol->value.integer.value[0] =
        int invert = (kcontrol->private_value >> 24) & 1;
        int changed = 0;
        unsigned short val;
-       snd_assert(dbri != NULL, return -EINVAL);
+
+       if (snd_BUG_ON(!dbri))
+               return -EINVAL;
 
        val = (ucontrol->value.integer.value[0] & mask);
        if (invert == 1)
        int idx, err;
        struct snd_dbri *dbri;
 
-       snd_assert(card != NULL && card->private_data != NULL, return -EINVAL);
+       if (snd_BUG_ON(!card || !card->private_data))
+               return -EINVAL;
        dbri = card->private_data;
 
        strcpy(card->mixername, card->shortname);
 
        int err;
        struct snd_sf_callback sf_cb;
 
-       snd_assert(emu->hw != NULL, return -EINVAL);
-       snd_assert(emu->max_voices > 0, return -EINVAL);
-       snd_assert(card != NULL, return -EINVAL);
-       snd_assert(name != NULL, return -EINVAL);
+       if (snd_BUG_ON(!emu->hw || emu->max_voices <= 0))
+               return -EINVAL;
+       if (snd_BUG_ON(!card || !name))
+               return -EINVAL;
 
        emu->card = card;
        emu->name = kstrdup(name, GFP_KERNEL);
 
        struct snd_emux_port *port;
 
        port = p;
-       snd_assert(port != NULL, return);
-       snd_assert(chan != NULL, return);
+       if (snd_BUG_ON(!port || !chan))
+               return;
 
        if (chan->control[MIDI_CTL_NONREG_PARM_NUM_MSB] == 127 &&
            chan->control[MIDI_CTL_NONREG_PARM_NUM_LSB] <= 26) {
        struct snd_emux *emu;
 
        port = p;
-       snd_assert(port != NULL, return);
-       snd_assert(chset != NULL, return);
+       if (snd_BUG_ON(!port || !chset))
+               return;
        emu = port->emu;
 
        switch (parsed) {
 
        char tmpname[64];
 
        emu = closure;
-       snd_assert(arg != NULL && emu != NULL, return -ENXIO);
+       if (snd_BUG_ON(!arg || !emu))
+               return -ENXIO;
 
        mutex_lock(&emu->register_mutex);
 
        struct snd_emux *emu;
        struct snd_emux_port *p;
 
-       snd_assert(arg != NULL, return -ENXIO);
+       if (snd_BUG_ON(!arg))
+               return -ENXIO;
        p = arg->private_data;
-       snd_assert(p != NULL, return -ENXIO);
+       if (snd_BUG_ON(!p))
+               return -ENXIO;
 
        emu = p->emu;
-       snd_assert(emu != NULL, return -ENXIO);
+       if (snd_BUG_ON(!emu))
+               return -ENXIO;
 
        mutex_lock(&emu->register_mutex);
        snd_emux_sounds_off_all(p);
        struct snd_emux_port *p;
        int rc;
 
-       snd_assert(arg != NULL, return -ENXIO);
+       if (snd_BUG_ON(!arg))
+               return -ENXIO;
        p = arg->private_data;
-       snd_assert(p != NULL, return -ENXIO);
+       if (snd_BUG_ON(!p))
+               return -ENXIO;
 
        emu = p->emu;
-       snd_assert(emu != NULL, return -ENXIO);
+       if (snd_BUG_ON(!emu))
+               return -ENXIO;
 
        if (format == GUS_PATCH)
                rc = snd_soundfont_load_guspatch(emu->sflist, buf, count,
        struct snd_emux_port *p;
        struct snd_emux *emu;
 
-       snd_assert(arg != NULL, return -ENXIO);
+       if (snd_BUG_ON(!arg))
+               return -ENXIO;
        p = arg->private_data;
-       snd_assert(p != NULL, return -ENXIO);
+       if (snd_BUG_ON(!p))
+               return -ENXIO;
 
        emu = p->emu;
-       snd_assert(emu != NULL, return -ENXIO);
+       if (snd_BUG_ON(!emu))
+               return -ENXIO;
 
        switch (cmd) {
        case SNDCTL_SEQ_RESETSAMPLES:
 {
        struct snd_emux_port *p;
 
-       snd_assert(arg != NULL, return -ENXIO);
+       if (snd_BUG_ON(!arg))
+               return -ENXIO;
        p = arg->private_data;
-       snd_assert(p != NULL, return -ENXIO);
+       if (snd_BUG_ON(!p))
+               return -ENXIO;
        snd_emux_reset_port(p);
        return 0;
 }
        unsigned char cmd, *data;
 
        p = private_data;
-       snd_assert(p != NULL, return -EINVAL);
+       if (snd_BUG_ON(!p))
+               return -EINVAL;
        emu = p->emu;
-       snd_assert(emu != NULL, return -EINVAL);
+       if (snd_BUG_ON(!emu))
+               return -EINVAL;
        if (ev->type != SNDRV_SEQ_EVENT_OSS)
                return snd_emux_event_input(ev, direct, private_data, atomic, hop);
 
 
        struct snd_emux_port *port;
 
        port = private_data;
-       snd_assert(port != NULL && ev != NULL, return -EINVAL);
+       if (snd_BUG_ON(!port || !ev))
+               return -EINVAL;
 
        snd_midi_process_event(&emux_ops, ev, &port->chset);
 
        struct snd_emux *emu;
 
        p = private_data;
-       snd_assert(p != NULL, return -EINVAL);
+       if (snd_BUG_ON(!p))
+               return -EINVAL;
        emu = p->emu;
-       snd_assert(emu != NULL, return -EINVAL);
+       if (snd_BUG_ON(!emu))
+               return -EINVAL;
 
        mutex_lock(&emu->register_mutex);
        snd_emux_init_port(p);
        struct snd_emux *emu;
 
        p = private_data;
-       snd_assert(p != NULL, return -EINVAL);
+       if (snd_BUG_ON(!p))
+               return -EINVAL;
        emu = p->emu;
-       snd_assert(emu != NULL, return -EINVAL);
+       if (snd_BUG_ON(!emu))
+               return -EINVAL;
 
        mutex_lock(&emu->register_mutex);
        snd_emux_sounds_off_all(p);
 
        struct snd_emux_port *port;
 
        port = p;
-       snd_assert(port != NULL && chan != NULL, return);
+       if (snd_BUG_ON(!port || !chan))
+               return;
 
        emu = port->emu;
-       snd_assert(emu != NULL, return);
-       snd_assert(emu->ops.get_voice != NULL, return);
-       snd_assert(emu->ops.trigger != NULL, return);
+       if (snd_BUG_ON(!emu || !emu->ops.get_voice || !emu->ops.trigger))
+               return;
 
        key = note; /* remember the original note */
        nvoices = get_zone(emu, port, ¬e, vel, chan, table);
        struct snd_emux_port *port;
 
        port = p;
-       snd_assert(port != NULL && chan != NULL, return);
+       if (snd_BUG_ON(!port || !chan))
+               return;
 
        emu = port->emu;
-       snd_assert(emu != NULL, return);
-       snd_assert(emu->ops.release != NULL, return);
+       if (snd_BUG_ON(!emu || !emu->ops.release))
+               return;
 
        spin_lock_irqsave(&emu->voice_lock, flags);
        for (ch = 0; ch < emu->max_voices; ch++) {
        struct snd_emux_port *port;
 
        port = p;
-       snd_assert(port != NULL && chan != NULL, return);
+       if (snd_BUG_ON(!port || !chan))
+               return;
 
        emu = port->emu;
-       snd_assert(emu != NULL, return);
-       snd_assert(emu->ops.update != NULL, return);
+       if (snd_BUG_ON(!emu || !emu->ops.update))
+               return;
 
        spin_lock_irqsave(&emu->voice_lock, flags);
        for (ch = 0; ch < emu->max_voices; ch++) {
                return;
 
        emu = port->emu;
-       snd_assert(emu != NULL, return);
-       snd_assert(emu->ops.update != NULL, return);
+       if (snd_BUG_ON(!emu || !emu->ops.update))
+               return;
 
        spin_lock_irqsave(&emu->voice_lock, flags);
        for (i = 0; i < emu->max_voices; i++) {
                return;
 
        emu = port->emu;
-       snd_assert(emu != NULL, return);
-       snd_assert(emu->ops.update != NULL, return);
+       if (snd_BUG_ON(!emu || !emu->ops.update))
+               return;
 
        spin_lock_irqsave(&emu->voice_lock, flags);
        for (i = 0; i < emu->max_voices; i++) {
        struct snd_emux_port *port;
 
        port = p;
-       snd_assert(port != NULL && chan != NULL, return);
+       if (snd_BUG_ON(!port || !chan))
+               return;
 
        switch (type) {
        case MIDI_CTL_MSB_MAIN_VOLUME:
        struct snd_emux_port *port;
 
        port = p;
-       snd_assert(port != NULL && chan != NULL, return);
+       if (snd_BUG_ON(!port || !chan))
+               return;
 
        emu = port->emu;
-       snd_assert(emu != NULL, return);
-       snd_assert(emu->ops.terminate != NULL, return);
+       if (snd_BUG_ON(!emu || !emu->ops.terminate))
+               return;
 
        terminate_note1(emu, note, chan, 1);
 }
        struct snd_emux_voice *vp;
        unsigned long flags;
 
-       snd_assert(port != NULL, return);
+       if (snd_BUG_ON(!port))
+               return;
        emu = port->emu;
-       snd_assert(emu != NULL, return);
-       snd_assert(emu->ops.terminate != NULL, return);
+       if (snd_BUG_ON(!emu || !emu->ops.terminate))
+               return;
 
        spin_lock_irqsave(&emu->voice_lock, flags);
        for (i = 0; i < emu->max_voices; i++) {
 
 {
        struct list_head *p;
 
-       snd_assert(hdr != NULL, return);
+       if (!hdr)
+               return;
        /* release all blocks */
        while ((p = hdr->block.next) != &hdr->block) {
                list_del(p);
        unsigned int units, prev_offset;
        struct list_head *p;
 
-       snd_assert(hdr != NULL, return NULL);
-       snd_assert(size > 0, return NULL);
+       if (snd_BUG_ON(!hdr || size <= 0))
+               return NULL;
 
        /* word alignment */
        units = size;
  */
 int snd_util_mem_free(struct snd_util_memhdr *hdr, struct snd_util_memblk *blk)
 {
-       snd_assert(hdr && blk, return -EINVAL);
+       if (snd_BUG_ON(!hdr || !blk))
+               return -EINVAL;
 
        mutex_lock(&hdr->block_mutex);
        __snd_util_mem_free(hdr, blk);
 
                return -EBADFD;
 
        for (i = 0; i < subs->nurbs; i++) {
-               snd_assert(subs->dataurb[i].urb, return -EINVAL);
+               if (snd_BUG_ON(!subs->dataurb[i].urb))
+                       return -EINVAL;
                if (subs->ops.prepare(subs, runtime, subs->dataurb[i].urb) < 0) {
                        snd_printk(KERN_ERR "cannot prepare datapipe for urb %d\n", i);
                        goto __error;
        }
        if (subs->syncpipe) {
                for (i = 0; i < SYNC_URBS; i++) {
-                       snd_assert(subs->syncurb[i].urb, return -EINVAL);
+                       if (snd_BUG_ON(!subs->syncurb[i].urb))
+                               return -EINVAL;
                        if (subs->ops.prepare_sync(subs, runtime, subs->syncurb[i].urb) < 0) {
                                snd_printk(KERN_ERR "cannot prepare syncpipe for urb %d\n", i);
                                goto __error;
        int err;
 
        iface = usb_ifnum_to_if(dev, fmt->iface);
-       snd_assert(iface, return -EINVAL);
+       if (WARN_ON(!iface))
+               return -EINVAL;
        alts = &iface->altsetting[fmt->altset_idx];
        altsd = get_iface_desc(alts);
-       snd_assert(altsd->bAlternateSetting == fmt->altsetting, return -EINVAL);
+       if (WARN_ON(altsd->bAlternateSetting != fmt->altsetting))
+               return -EINVAL;
 
        if (fmt == subs->cur_audiofmt)
                return 0;
 
        struct usb_mixer_elem_info *cval = kcontrol->private_data;
        char **itemlist = (char **)kcontrol->private_value;
 
-       snd_assert(itemlist, return -EINVAL);
+       if (snd_BUG_ON(!itemlist))
+               return -EINVAL;
        uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
        uinfo->count = 1;
        uinfo->value.enumerated.items = cval->max;