* Timer section - /dev/snd/timer
*/
-#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 3)
+#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 4)
enum sndrv_timer_class {
SNDRV_TIMER_CLASS_NONE = -1,
SNDRV_TIMER_IOCTL_INFO = _IOR('T', 0x11, struct sndrv_timer_info),
SNDRV_TIMER_IOCTL_PARAMS = _IOW('T', 0x12, struct sndrv_timer_params),
SNDRV_TIMER_IOCTL_STATUS = _IOR('T', 0x14, struct sndrv_timer_status),
- SNDRV_TIMER_IOCTL_START = _IO('T', 0x20),
- SNDRV_TIMER_IOCTL_STOP = _IO('T', 0x21),
- SNDRV_TIMER_IOCTL_CONTINUE = _IO('T', 0x22),
- SNDRV_TIMER_IOCTL_PAUSE = _IO('T', 0x23),
+ /* The following four ioctls are changed since 1.0.9 due to confliction */
+ SNDRV_TIMER_IOCTL_START = _IO('T', 0xa0),
+ SNDRV_TIMER_IOCTL_STOP = _IO('T', 0xa1),
+ SNDRV_TIMER_IOCTL_CONTINUE = _IO('T', 0xa2),
+ SNDRV_TIMER_IOCTL_PAUSE = _IO('T', 0xa3),
};
struct sndrv_timer_read {
#define SNDRV_TIMER_IOCTL_STATUS_OLD _IOW('T', 0x14, struct sndrv_timer_status)
+enum {
+ SNDRV_TIMER_IOCTL_START_OLD = _IO('T', 0x20),
+ SNDRV_TIMER_IOCTL_STOP_OLD = _IO('T', 0x21),
+ SNDRV_TIMER_IOCTL_CONTINUE_OLD = _IO('T', 0x22),
+ SNDRV_TIMER_IOCTL_PAUSE_OLD = _IO('T', 0x23),
+};
+
static int snd_timer_hw_close(snd_timer_t *handle)
{
snd_timer_t *tmr = handle;
static int snd_timer_hw_start(snd_timer_t *handle)
{
snd_timer_t *tmr;
+ unsigned int cmd;
tmr = handle;
if (!tmr)
return -EINVAL;
- if (ioctl(tmr->poll_fd, SNDRV_TIMER_IOCTL_START) < 0)
+ if (tmr->version < SNDRV_PROTOCOL_VERSION(2, 0, 4))
+ cmd = SNDRV_TIMER_IOCTL_START_OLD;
+ else
+ cmd = SNDRV_TIMER_IOCTL_START;
+ if (ioctl(tmr->poll_fd, cmd) < 0)
return -errno;
return 0;
}
static int snd_timer_hw_stop(snd_timer_t *handle)
{
snd_timer_t *tmr;
+ unsigned int cmd;
tmr = handle;
if (!tmr)
return -EINVAL;
- if (ioctl(tmr->poll_fd, SNDRV_TIMER_IOCTL_STOP) < 0)
+ if (tmr->version < SNDRV_PROTOCOL_VERSION(2, 0, 4))
+ cmd = SNDRV_TIMER_IOCTL_STOP_OLD;
+ else
+ cmd = SNDRV_TIMER_IOCTL_STOP;
+ if (ioctl(tmr->poll_fd, cmd) < 0)
return -errno;
return 0;
}
static int snd_timer_hw_continue(snd_timer_t *handle)
{
snd_timer_t *tmr;
+ unsigned int cmd;
tmr = handle;
if (!tmr)
return -EINVAL;
- if (ioctl(tmr->poll_fd, SNDRV_TIMER_IOCTL_CONTINUE) < 0)
+ if (tmr->version < SNDRV_PROTOCOL_VERSION(2, 0, 4))
+ cmd = SNDRV_TIMER_IOCTL_CONTINUE_OLD;
+ else
+ cmd = SNDRV_TIMER_IOCTL_CONTINUE;
+ if (ioctl(tmr->poll_fd, cmd) < 0)
return -errno;
return 0;
}