⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.c

📁 linux-2.6.15.6
💻 C
字号:
/* *  Copyright (c) by Lee Revell <rlrevell@joe-job.com> *                   Clemens Ladisch <clemens@ladisch.de> *  Routines for control of EMU10K1 chips * *  BUGS: *    -- * *  TODO: *    -- * *   This program is free software; you can redistribute it and/or modify *   it under the terms of the GNU General Public License as published by *   the Free Software Foundation; either version 2 of the License, or *   (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA * */#include <sound/driver.h>#include <linux/time.h>#include <sound/core.h>#include <sound/emu10k1.h>static int snd_emu10k1_timer_start(snd_timer_t *timer){	emu10k1_t *emu;	unsigned long flags;	unsigned int delay;	emu = snd_timer_chip(timer);	delay = timer->sticks - 1;	if (delay < 5 ) /* minimum time is 5 ticks */		delay = 5;	spin_lock_irqsave(&emu->reg_lock, flags);	snd_emu10k1_intr_enable(emu, INTE_INTERVALTIMERENB);	outw(delay & TIMER_RATE_MASK, emu->port + TIMER);	spin_unlock_irqrestore(&emu->reg_lock, flags);	return 0;}static int snd_emu10k1_timer_stop(snd_timer_t *timer){	emu10k1_t *emu;	unsigned long flags;	emu = snd_timer_chip(timer);	spin_lock_irqsave(&emu->reg_lock, flags);	snd_emu10k1_intr_disable(emu, INTE_INTERVALTIMERENB);	spin_unlock_irqrestore(&emu->reg_lock, flags);	return 0;}static int snd_emu10k1_timer_precise_resolution(snd_timer_t *timer,					       unsigned long *num, unsigned long *den){	*num = 1;	*den = 48000;	return 0;}static 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,	.precise_resolution = snd_emu10k1_timer_precise_resolution,};int __devinit snd_emu10k1_timer(emu10k1_t *emu, int device){	snd_timer_t *timer = NULL;	snd_timer_id_t tid;	int err;	tid.dev_class = SNDRV_TIMER_CLASS_CARD;	tid.dev_sclass = SNDRV_TIMER_SCLASS_NONE;	tid.card = emu->card->number;	tid.device = device;	tid.subdevice = 0;	if ((err = snd_timer_new(emu->card, "EMU10K1", &tid, &timer)) >= 0) {		strcpy(timer->name, "EMU10K1 timer");		timer->private_data = emu;		timer->hw = snd_emu10k1_timer_hw;	}	emu->timer = timer;	return err;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -