kern/31398: [sound] newpcm does not play back the tail of sound

Jean-Yves Lefort jylefort at FreeBSD.org
Wed Nov 9 18:55:06 GMT 2005


On Wed, 9 Nov 2005 19:25:54 +0100
Alexander Leidinger <Alexander at Leidinger.net> wrote:

> On Thu, 10 Nov 2005 00:07:38 +0800
> Ariff Abdullah <skywizard at MyBSD.org.my> wrote:
> 
> > On Wed, 9 Nov 2005 14:34:35 +0100
> > Jean-Yves Lefort <jylefort at FreeBSD.org> wrote:
> > > 
> > > Excellent. While here, could you also incorporate kern/40132 (and
> > > kern/20297 can be closed)?
> 
> > Looks good. I'll incorporate it. Thanks.
> 
> Did anyone actually looked if the joy device is there (dmesg | grep
> joy)? I once tried such a patch (I don't remember ATM if it was the
> same PR) and "joy" didn't attach. Do I have wrong expectations or did I
> something wrong?

The following lines need to be added to /boot/device.hints:

hint.joy.0.at="isa"
hint.joy.0.port="0x201"
hint.joy.1.at="isa"
hint.joy.1.port="0x201"

$ grep joy /var/run/dmesg.boot
joy0 at port 0x201 on isa0
joy1 at port 0x201 on isa0

The "two" joysticks (I actually have one joystick with 3 axes and 4
buttons) work perfectly. Note that for supporting the second joystick,
the patch from kern/46734 is required. Since it does not apply
anymore, here's an updated patch:

--- sys/dev/joy/joy.c.orig	Wed Jun 16 11:46:48 2004
+++ sys/dev/joy/joy.c	Wed Oct  5 22:49:49 2005
@@ -104,13 +104,13 @@
 
 	joy->rid = 0;
 	joy->res = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &joy->rid,
-	    RF_ACTIVE);
+	    RF_ACTIVE|RF_SHAREABLE);
 	if (joy->res == NULL)
 		return ENXIO;
 	joy->bt = rman_get_bustag(joy->res);
 	joy->port = rman_get_bushandle(joy->res);
 	joy->timeout[0] = joy->timeout[1] = 0;
-	joy->d = make_dev(&joy_cdevsw, 0, 0, 0, 0600, "joy%d", unit);
+	joy->d = make_dev(&joy_cdevsw, unit, 0, 0, 0600, "joy%d", unit);
 	return (0);
 }
 
@@ -167,6 +167,11 @@
 #else
 	disable_intr ();
 #endif
+	nanotime(&t);
+	end.tv_sec = 0;
+	end.tv_nsec = joy->timeout[joypart(dev)] * 1000;
+	timespecadd(&end, &t);
+	for (; timespeccmp(&t, &end, <) && (bus_space_read_1(bt, port, 0) & 0x0f); nanotime(&t));
 	bus_space_write_1 (bt, port, 0, 0xff);
 	nanotime(&start);
 	end.tv_sec = 0;

Could you please commit it?

-- 
Jean-Yves Lefort

jylefort at FreeBSD.org
http://lefort.be.eu.org/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-multimedia/attachments/20051109/ea0be0ee/attachment.bin


More information about the freebsd-multimedia mailing list