]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - sound/sh/aica.c
ALSA: aica: Fix a long-time build breakage
[mirror_ubuntu-bionic-kernel.git] / sound / sh / aica.c
index 2b26311405a422206e869ce186bd17255a847d0a..ad3f71358486ad695ddaf6b99c93506dc7652d15 100644 (file)
@@ -303,7 +303,7 @@ static void aica_period_elapsed(struct timer_list *t)
 {
        struct snd_card_aica *dreamcastcard = from_timer(dreamcastcard,
                                                              t, timer);
-       struct snd_pcm_substream *substream = dreamcastcard->timer_substream;
+       struct snd_pcm_substream *substream = dreamcastcard->substream;
        /*timer function - so cannot sleep */
        int play_period;
        struct snd_pcm_runtime *runtime;
@@ -335,13 +335,6 @@ static void spu_begin_dma(struct snd_pcm_substream *substream)
        dreamcastcard = substream->pcm->private_data;
        /*get the queue to do the work */
        schedule_work(&(dreamcastcard->spu_dma_work));
-       /* Timer may already be running */
-       if (unlikely(dreamcastcard->timer_substream)) {
-               mod_timer(&dreamcastcard->timer, jiffies + 4);
-               return;
-       }
-       timer_setup(&dreamcastcard->timer, aica_period_elapsed, 0);
-       dreamcastcard->timer_substream = substream;
        mod_timer(&dreamcastcard->timer, jiffies + 4);
 }
 
@@ -379,8 +372,8 @@ static int snd_aicapcm_pcm_close(struct snd_pcm_substream
 {
        struct snd_card_aica *dreamcastcard = substream->pcm->private_data;
        flush_work(&(dreamcastcard->spu_dma_work));
-       if (dreamcastcard->timer_substream)
-               del_timer(&dreamcastcard->timer);
+       del_timer(&dreamcastcard->timer);
+       dreamcastcard->substream = NULL;
        kfree(dreamcastcard->channel);
        spu_disable();
        return 0;
@@ -615,6 +608,7 @@ static int snd_aica_probe(struct platform_device *devptr)
               "Yamaha AICA Super Intelligent Sound Processor for SEGA Dreamcast");
        /* Prepare to use the queue */
        INIT_WORK(&(dreamcastcard->spu_dma_work), run_spu_dma);
+       timer_setup(&dreamcastcard->timer, aica_period_elapsed, 0);
        /* Load the PCM 'chip' */
        err = snd_aicapcmchip(dreamcastcard, 0);
        if (unlikely(err < 0))