Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
9649745c
Commit
9649745c
authored
Dec 25, 2008
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'topic/snd-hrtimer' into to-push
parents
a9c3c7e0
5e03c54e
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
182 additions
and
1 deletion
+182
-1
include/sound/asound.h
include/sound/asound.h
+1
-0
sound/core/Kconfig
sound/core/Kconfig
+21
-0
sound/core/Makefile
sound/core/Makefile
+2
-0
sound/core/hrtimer.c
sound/core/hrtimer.c
+155
-0
sound/core/seq/seq.c
sound/core/seq/seq.c
+3
-1
No files found.
include/sound/asound.h
View file @
9649745c
...
...
@@ -575,6 +575,7 @@ enum {
#define SNDRV_TIMER_GLOBAL_SYSTEM 0
#define SNDRV_TIMER_GLOBAL_RTC 1
#define SNDRV_TIMER_GLOBAL_HPET 2
#define SNDRV_TIMER_GLOBAL_HRTIMER 3
/* info flags */
#define SNDRV_TIMER_FLG_SLAVE (1<<0)
/* cannot be controlled */
...
...
sound/core/Kconfig
View file @
9649745c
...
...
@@ -95,6 +95,26 @@ config SND_SEQUENCER_OSS
this will be compiled as a module. The module will be called
snd-seq-oss.
config SND_HRTIMER
tristate "HR-timer backend support"
depends on HIGH_RES_TIMERS
select SND_TIMER
help
Say Y here to enable HR-timer backend for ALSA timer. ALSA uses
the hrtimer as a precise timing source. The ALSA sequencer code
also can use this timing source.
To compile this driver as a module, choose M here: the module
will be called snd-hrtimer.
config SND_SEQ_HRTIMER_DEFAULT
bool "Use HR-timer as default sequencer timer"
depends on SND_HRTIMER && SND_SEQUENCER
default y
help
Say Y here to use the HR-timer backend as the default sequencer
timer.
config SND_RTCTIMER
tristate "RTC Timer support"
depends on RTC
...
...
@@ -114,6 +134,7 @@ config SND_RTCTIMER
config SND_SEQ_RTCTIMER_DEFAULT
bool "Use RTC as default sequencer timer"
depends on SND_RTCTIMER && SND_SEQUENCER
depends on !SND_SEQ_HRTIMER_DEFAULT
default y
help
Say Y here to use the RTC timer as the default sequencer
...
...
sound/core/Makefile
View file @
9649745c
...
...
@@ -17,12 +17,14 @@ snd-page-alloc-$(CONFIG_HAS_DMA) += sgbuf.o
snd-rawmidi-objs
:=
rawmidi.o
snd-timer-objs
:=
timer.o
snd-hrtimer-objs
:=
hrtimer.o
snd-rtctimer-objs
:=
rtctimer.o
snd-hwdep-objs
:=
hwdep.o
obj-$(CONFIG_SND)
+=
snd.o
obj-$(CONFIG_SND_HWDEP)
+=
snd-hwdep.o
obj-$(CONFIG_SND_TIMER)
+=
snd-timer.o
obj-$(CONFIG_SND_HRTIMER)
+=
snd-hrtimer.o
obj-$(CONFIG_SND_RTCTIMER)
+=
snd-rtctimer.o
obj-$(CONFIG_SND_PCM)
+=
snd-pcm.o snd-page-alloc.o
obj-$(CONFIG_SND_RAWMIDI)
+=
snd-rawmidi.o
...
...
sound/core/hrtimer.c
0 → 100644
View file @
9649745c
/*
* ALSA timer back-end using hrtimer
* Copyright (C) 2008 Takashi Iwai
*
* 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 <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/hrtimer.h>
#include <sound/core.h>
#include <sound/timer.h>
MODULE_AUTHOR
(
"Takashi Iwai <tiwai@suse.de>"
);
MODULE_DESCRIPTION
(
"ALSA hrtimer backend"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_ALIAS
(
"snd-timer-"
__stringify
(
SNDRV_TIMER_GLOBAL_HRTIMER
));
#define NANO_SEC 1000000000UL
/* 10^9 in sec */
static
unsigned
int
resolution
;
struct
snd_hrtimer
{
struct
snd_timer
*
timer
;
struct
hrtimer
hrt
;
};
static
enum
hrtimer_restart
snd_hrtimer_callback
(
struct
hrtimer
*
hrt
)
{
struct
snd_hrtimer
*
stime
=
container_of
(
hrt
,
struct
snd_hrtimer
,
hrt
);
struct
snd_timer
*
t
=
stime
->
timer
;
hrtimer_forward_now
(
hrt
,
ns_to_ktime
(
t
->
sticks
*
resolution
));
snd_timer_interrupt
(
stime
->
timer
,
t
->
sticks
);
return
HRTIMER_RESTART
;
}
static
int
snd_hrtimer_open
(
struct
snd_timer
*
t
)
{
struct
snd_hrtimer
*
stime
;
stime
=
kmalloc
(
sizeof
(
*
stime
),
GFP_KERNEL
);
if
(
!
stime
)
return
-
ENOMEM
;
hrtimer_init
(
&
stime
->
hrt
,
CLOCK_MONOTONIC
,
HRTIMER_MODE_REL
);
stime
->
timer
=
t
;
stime
->
hrt
.
cb_mode
=
HRTIMER_CB_IRQSAFE_UNLOCKED
;
stime
->
hrt
.
function
=
snd_hrtimer_callback
;
t
->
private_data
=
stime
;
return
0
;
}
static
int
snd_hrtimer_close
(
struct
snd_timer
*
t
)
{
struct
snd_hrtimer
*
stime
=
t
->
private_data
;
if
(
stime
)
{
hrtimer_cancel
(
&
stime
->
hrt
);
kfree
(
stime
);
t
->
private_data
=
NULL
;
}
return
0
;
}
static
int
snd_hrtimer_start
(
struct
snd_timer
*
t
)
{
struct
snd_hrtimer
*
stime
=
t
->
private_data
;
hrtimer_start
(
&
stime
->
hrt
,
ns_to_ktime
(
t
->
sticks
*
resolution
),
HRTIMER_MODE_REL
);
return
0
;
}
static
int
snd_hrtimer_stop
(
struct
snd_timer
*
t
)
{
struct
snd_hrtimer
*
stime
=
t
->
private_data
;
hrtimer_cancel
(
&
stime
->
hrt
);
return
0
;
}
static
struct
snd_timer_hardware
hrtimer_hw
=
{
.
flags
=
SNDRV_TIMER_HW_AUTO
,
.
open
=
snd_hrtimer_open
,
.
close
=
snd_hrtimer_close
,
.
start
=
snd_hrtimer_start
,
.
stop
=
snd_hrtimer_stop
,
};
/*
* entry functions
*/
static
struct
snd_timer
*
mytimer
;
static
int
__init
snd_hrtimer_init
(
void
)
{
struct
snd_timer
*
timer
;
struct
timespec
tp
;
int
err
;
hrtimer_get_res
(
CLOCK_MONOTONIC
,
&
tp
);
if
(
tp
.
tv_sec
>
0
||
!
tp
.
tv_nsec
)
{
snd_printk
(
KERN_ERR
"snd-hrtimer: Invalid resolution %u.%09u"
,
(
unsigned
)
tp
.
tv_sec
,
(
unsigned
)
tp
.
tv_nsec
);
return
-
EINVAL
;
}
resolution
=
tp
.
tv_nsec
;
/* Create a new timer and set up the fields */
err
=
snd_timer_global_new
(
"hrtimer"
,
SNDRV_TIMER_GLOBAL_HRTIMER
,
&
timer
);
if
(
err
<
0
)
return
err
;
timer
->
module
=
THIS_MODULE
;
strcpy
(
timer
->
name
,
"HR timer"
);
timer
->
hw
=
hrtimer_hw
;
timer
->
hw
.
resolution
=
resolution
;
timer
->
hw
.
ticks
=
NANO_SEC
/
resolution
;
err
=
snd_timer_global_register
(
timer
);
if
(
err
<
0
)
{
snd_timer_global_free
(
timer
);
return
err
;
}
mytimer
=
timer
;
/* remember this */
return
0
;
}
static
void
__exit
snd_hrtimer_exit
(
void
)
{
if
(
mytimer
)
{
snd_timer_global_free
(
mytimer
);
mytimer
=
NULL
;
}
}
module_init
(
snd_hrtimer_init
);
module_exit
(
snd_hrtimer_exit
);
sound/core/seq/seq.c
View file @
9649745c
...
...
@@ -43,7 +43,9 @@ int seq_default_timer_class = SNDRV_TIMER_CLASS_GLOBAL;
int
seq_default_timer_sclass
=
SNDRV_TIMER_SCLASS_NONE
;
int
seq_default_timer_card
=
-
1
;
int
seq_default_timer_device
=
#ifdef CONFIG_SND_SEQ_RTCTIMER_DEFAULT
#ifdef CONFIG_SND_SEQ_HRTIMER_DEFAULT
SNDRV_TIMER_GLOBAL_HRTIMER
#elif defined(CONFIG_SND_SEQ_RTCTIMER_DEFAULT)
SNDRV_TIMER_GLOBAL_RTC
#else
SNDRV_TIMER_GLOBAL_SYSTEM
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment