Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 1541
b: refs/heads/master
c: 434b7f5
h: refs/heads/master
i:
  1539: 1677d40
v: v3
  • Loading branch information
Clemens Ladisch authored and Jaroslav Kysela committed May 29, 2005
1 parent 89bd59f commit 546a0bb
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ca81090a00e3e7152fe1f3d7398f11d57919428e
refs/heads/master: 434b7f56872fc5783c77f362e895da8e22168325
39 changes: 37 additions & 2 deletions trunk/sound/usb/usbmixer.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,18 @@

#include "usbaudio.h"

#if 0
#include <linux/lirc.h>
#else
/* only those symbols from lirc.h we actually need: */
#include <linux/ioctl.h>
#define LIRC_MODE2REC(x) ((x) << 16)
#define LIRC_MODE_CODE 0x00000008
#define LIRC_CAN_REC_CODE LIRC_MODE2REC(LIRC_MODE_CODE)
#define LIRC_GET_FEATURES _IOR('i', 0x00000000, __u32)
#define LIRC_GET_REC_MODE _IOR('i', 0x00000002, __u32)
#define LIRC_SET_REC_MODE _IOW('i', 0x00000012, __u32)
#endif

/*
*/
Expand Down Expand Up @@ -1739,12 +1751,15 @@ static long snd_usb_sbrc_hwdep_read(snd_hwdep_t *hw, char __user *buf,
int err;
u32 rc_code;

if (count != 1)
if (count != 1 && count != 4)
return -EINVAL;
err = wait_event_interruptible(mixer->rc_waitq,
(rc_code = xchg(&mixer->rc_code, 0)) != 0);
if (err == 0) {
err = put_user(rc_code, buf);
if (count == 1)
err = put_user(rc_code, buf);
else
err = put_user(rc_code, (u32 __user *)buf);
}
return err < 0 ? err : count;
}
Expand All @@ -1758,6 +1773,25 @@ static unsigned int snd_usb_sbrc_hwdep_poll(snd_hwdep_t *hw, struct file *file,
return mixer->rc_code ? POLLIN | POLLRDNORM : 0;
}

static int snd_usb_sbrc_hwdep_ioctl(snd_hwdep_t *hw, struct file *file,
unsigned int cmd, unsigned long arg)
{
u32 __user *argp = (u32 __user *)arg;
u32 mode;

switch (cmd) {
case LIRC_GET_FEATURES:
return put_user(LIRC_CAN_REC_CODE, argp);
case LIRC_GET_REC_MODE:
return put_user(LIRC_MODE_CODE, argp);
case LIRC_SET_REC_MODE:
if (get_user(mode, argp))
return -EFAULT;
return mode == LIRC_MODE_CODE ? 0 : -ENOSYS;
}
return -ENOTTY;
}

static int snd_usb_soundblaster_remote_init(struct usb_mixer_interface *mixer)
{
snd_hwdep_t *hwdep;
Expand Down Expand Up @@ -1788,6 +1822,7 @@ static int snd_usb_soundblaster_remote_init(struct usb_mixer_interface *mixer)
hwdep->ops.open = snd_usb_sbrc_hwdep_open;
hwdep->ops.release = snd_usb_sbrc_hwdep_release;
hwdep->ops.poll = snd_usb_sbrc_hwdep_poll;
hwdep->ops.ioctl = snd_usb_sbrc_hwdep_ioctl;

mixer->rc_urb = usb_alloc_urb(0, GFP_KERNEL);
if (!mixer->rc_urb)
Expand Down

0 comments on commit 546a0bb

Please sign in to comment.