int snd_sb8dsp_midi(struct snd_sb *chip, int device);
 
 /* sb16_init.c */
-int snd_sb16dsp_pcm(struct snd_sb *chip, int device, struct snd_pcm ** rpcm);
+int snd_sb16dsp_pcm(struct snd_sb *chip, int device);
 const struct snd_pcm_ops *snd_sb16dsp_get_pcm_ops(int direction);
 int snd_sb16dsp_configure(struct snd_sb *chip);
 /* sb16.c */
 
                        irq[dev], dma8[dev], dma16[dev]);
        }
 
-       if ((error = snd_sb16dsp_pcm(chip, 0, &chip->pcm)) < 0) {
+       if ((error = snd_sb16dsp_pcm(chip, 0)) < 0) {
                snd_card_free(card);
                return error;
        }
 
        if (! is_isapnp_selected(dev) && (err = snd_sb16dsp_configure(chip)) < 0)
                return err;
 
-       if ((err = snd_sb16dsp_pcm(chip, 0, &chip->pcm)) < 0)
+       if ((err = snd_sb16dsp_pcm(chip, 0)) < 0)
                return err;
 
        strcpy(card->driver,
 
        .pointer =      snd_sb16_capture_pointer,
 };
 
-int snd_sb16dsp_pcm(struct snd_sb * chip, int device, struct snd_pcm ** rpcm)
+int snd_sb16dsp_pcm(struct snd_sb *chip, int device)
 {
        struct snd_card *card = chip->card;
        struct snd_pcm *pcm;
        int err;
 
-       if (rpcm)
-               *rpcm = NULL;
        if ((err = snd_pcm_new(card, "SB16 DSP", device, 1, 1, &pcm)) < 0)
                return err;
        sprintf(pcm->name, "DSP v%i.%i", chip->version >> 8, chip->version & 0xff);
        pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
        pcm->private_data = chip;
+       chip->pcm = pcm;
 
        snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_sb16_playback_ops);
        snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_sb16_capture_ops);
        snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
                                              snd_dma_isa_data(),
                                              64*1024, 128*1024);
-
-       if (rpcm)
-               *rpcm = pcm;
        return 0;
 }
 
 
                return err;
        }
 
-       err = snd_sb16dsp_pcm(chip->sb, 0, &chip->sb->pcm);
+       err = snd_sb16dsp_pcm(chip->sb, 0);
        if (err < 0) {
                dev_err(card->dev, "Could not create PCM\n");
                snd_cs5530_free(chip);