return 0;
 }
 
+static unsigned long snd_emu10k1_timer_c_resolution(struct snd_timer *timer)
+{
+       struct snd_emu10k1 *emu = snd_timer_chip(timer);
+
+       if (emu->card_capabilities->emu_model &&
+           emu->emu1010.word_clock == 44100)
+               return 22676;  // 1 sample @ 44.1 kHz = 22.675736...us
+       else
+               return 20833;  // 1 sample @ 48 kHz = 20.833...us
+}
+
 static int snd_emu10k1_timer_precise_resolution(struct snd_timer *timer,
                                               unsigned long *num, unsigned long *den)
 {
+       struct snd_emu10k1 *emu = snd_timer_chip(timer);
+
        *num = 1;
-       *den = 48000;
+       if (emu->card_capabilities->emu_model)
+               *den = emu->emu1010.word_clock;
+       else
+               *den = 48000;
        return 0;
 }
 
 static const struct snd_timer_hardware snd_emu10k1_timer_hw = {
        .flags = SNDRV_TIMER_HW_AUTO,
-       .resolution = 20833, /* 1 sample @ 48KHZ = 20.833...us */
        .ticks = 1024,
        .start = snd_emu10k1_timer_start,
        .stop = snd_emu10k1_timer_stop,
+       .c_resolution = snd_emu10k1_timer_c_resolution,
        .precise_resolution = snd_emu10k1_timer_precise_resolution,
 };