Re: broken pas2 ioctl followup

Thomas Sailer (sailer@ife.ee.ethz.ch)
Thu, 08 Jan 1998 13:29:36 +0100


> The return value of pas_audio_ioctl has changed. Before, it returned
> the return value of pcm_set_channels. Now, it returns the return
> value of __put_user.

Does the following work for you?

diff -u linux/drivers/sound.orig/dmabuf.c linux/drivers/sound/dmabuf.c
--- linux/drivers/sound.orig/dmabuf.c Thu Jan 8 14:28:42 1998
+++ linux/drivers/sound/dmabuf.c Thu Jan 8 14:40:03 1998
@@ -124,35 +124,32 @@
static unsigned int default_set_bits(int dev, unsigned int bits)
{
mm_segment_t fs = get_fs();
- unsigned int r;

set_fs(get_ds());
- r = audio_devs[dev]->d->ioctl(dev, SNDCTL_DSP_SETFMT, (caddr_t)&bits);
+ audio_devs[dev]->d->ioctl(dev, SNDCTL_DSP_SETFMT, (caddr_t)&bits);
set_fs(fs);
- return r;
+ return bits;
}

static int default_set_speed(int dev, int speed)
{
mm_segment_t fs = get_fs();
- int r;

set_fs(get_ds());
- r = audio_devs[dev]->d->ioctl(dev, SNDCTL_DSP_SPEED, (caddr_t)&speed);
+ audio_devs[dev]->d->ioctl(dev, SNDCTL_DSP_SPEED, (caddr_t)&speed);
set_fs(fs);
- return r;
+ return speed;
}

static short default_set_channels(int dev, short channels)
{
int c = channels;
mm_segment_t fs = get_fs();
- short r;

set_fs(get_ds());
- r = audio_devs[dev]->d->ioctl(dev, SNDCTL_DSP_CHANNELS, (caddr_t)&c);
+ audio_devs[dev]->d->ioctl(dev, SNDCTL_DSP_CHANNELS, (caddr_t)&c);
set_fs(fs);
- return r;
+ return c;
}

static void

Tom