You can subscribe to this list here.
| 2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(135) |
Nov
(123) |
Dec
(83) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2002 |
Jan
(244) |
Feb
(72) |
Mar
(221) |
Apr
(91) |
May
(104) |
Jun
(93) |
Jul
(78) |
Aug
(1) |
Sep
(1) |
Oct
(29) |
Nov
(98) |
Dec
(20) |
| 2003 |
Jan
|
Feb
(21) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
(18) |
Sep
(18) |
Oct
(23) |
Nov
(12) |
Dec
(6) |
| 2004 |
Jan
(2) |
Feb
(32) |
Mar
|
Apr
(12) |
May
(11) |
Jun
(11) |
Jul
|
Aug
(9) |
Sep
|
Oct
(15) |
Nov
|
Dec
|
| 2005 |
Jan
|
Feb
(2) |
Mar
(11) |
Apr
(6) |
May
(1) |
Jun
(9) |
Jul
(7) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
| 2006 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2007 |
Jan
|
Feb
(2) |
Mar
|
Apr
(25) |
May
(2) |
Jun
|
Jul
(5) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2008 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2009 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(13) |
Oct
|
Nov
(2) |
Dec
(2) |
| 2011 |
Jan
|
Feb
|
Mar
(10) |
Apr
(10) |
May
(1) |
Jun
(6) |
Jul
|
Aug
(2) |
Sep
(5) |
Oct
|
Nov
|
Dec
|
|
From: johann d. <jd...@us...> - 2002-02-08 00:35:36
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce
In directory usw-pr-cvs1:/tmp/cvs-serv7484
Modified Files:
iforce-packets.c iforce-usb.c
Log Message:
Fixes to the asynchronous sending of packets. USB should be less terrible than
it used to be, RS232 is certainly broken.
Index: iforce-packets.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-packets.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- iforce-packets.c 2 Feb 2002 19:28:35 -0000 1.9
+++ iforce-packets.c 8 Feb 2002 00:35:34 -0000 1.10
@@ -1,8 +1,8 @@
/*
* $Id$
*
- * Copyright (c) 2000-2001 Vojtech Pavlik <vo...@uc...>
- * Copyright (c) 2001 Johann Deneux <de...@if...>
+ * Copyright (c) 2000-2002 Vojtech Pavlik <vo...@uc...>
+ * Copyright (c) 2001-2002 Johann Deneux <de...@if...>
*
* USB/RS232 I-Force joysticks and wheels.
*/
@@ -110,9 +110,9 @@
#ifdef IFORCE_USB
case IFORCE_USB:
- /* FIXME: iforce->out.status should not be checked outside
- * the completion handler */
- if (iforce->usbdev && empty && !iforce->out.status) {
+ if (iforce->usbdev && empty &&
+ !test_and_set_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flag s)) {
+
iforce_usb_xmit(iforce);
}
break;
Index: iforce-usb.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-usb.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- iforce-usb.c 3 Feb 2002 19:37:37 -0000 1.11
+++ iforce-usb.c 8 Feb 2002 00:35:34 -0000 1.12
@@ -37,6 +37,7 @@
spin_lock_irqsave(&iforce->xmit_lock, flags);
if (iforce->xmit.head == iforce->xmit.tail) {
+ clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags);
spin_unlock_irqrestore(&iforce->xmit_lock, flags);
return;
}
@@ -46,7 +47,7 @@
n = iforce->xmit.buf[iforce->xmit.tail];
XMIT_INC(iforce->xmit.tail, 1);
- iforce->out.transfer_buffer_length = n + 2;
+ iforce->out.transfer_buffer_length = n + 1;
iforce->out.dev = iforce->usbdev;
/* Copy rest of data then */
@@ -67,6 +68,9 @@
printk(KERN_WARNING "iforce.c: iforce_usb_xmit: usb_submit_urb failed %d\n", n);
}
+ /* The IFORCE_XMIT_RUNNING bit is not cleared here. That's intended.
+ * As long as the urb completion handler is not called, the transmiting
+ * is considered to be running */
spin_unlock_irqrestore(&iforce->xmit_lock, flags);
}
|
|
From: johann d. <jd...@us...> - 2002-02-03 20:04:42
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce
In directory usw-pr-cvs1:/tmp/cvs-serv16372
Modified Files:
iforce-main.c
Log Message:
Set buttons for avb mag turbo racing wheel.
Index: iforce-main.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-main.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- iforce-main.c 2002/02/03 19:37:37 1.11
+++ iforce-main.c 2002/02/03 20:04:39 1.12
@@ -39,6 +39,8 @@
BTN_BASE2, BTN_BASE3, BTN_BASE4, BTN_BASE5, BTN_A, BTN_B, BTN_C, -1 };
static signed short btn_avb_tw[] = { BTN_TRIGGER, BTN_THUMB, BTN_TOP, BTN_TOP2, BTN_BASE,
BTN_BASE2, BTN_BASE3, BTN_BASE4, -1 };
+static signed short btn_avb_wheel[] = { BTN_GEAR_DOWN, BTN_GEAR_UP, BTN_BASE, BTN_BASE2, BTN_BASE3,
+ BTN_BASE4, BTN_BASE5, BTN_BASE6, -1 };
static signed short abs_joystick[] = { ABS_X, ABS_Y, ABS_THROTTLE, ABS_HAT0X, ABS_HAT0Y, -1 };
static signed short abs_joystick2[] = { ABS_X, ABS_Y, ABS_THROTTLE, ABS_RUDDER, ABS_HAT0X, ABS_HAT0Y, -1 };
static signed short abs_wheel[] = { ABS_WHEEL, ABS_GAS, ABS_BRAKE, ABS_HAT0X, ABS_HAT0Y, -1 };
@@ -50,7 +52,7 @@
{ 0x046d, 0xc281, "Logitech WingMan Force", btn_joystick, abs_joystick, ff_iforce },
{ 0x046d, 0xc291, "Logitech WingMan Formula Force", btn_wheel, abs_wheel, ff_iforce },
{ 0x05ef, 0x020a, "AVB Top Shot Pegasus", btn_joystick, abs_joystick2, ff_iforce },
- { 0x05ef, 0x8884, "AVB Mag Turbo Force", btn_wheel, abs_wheel, ff_iforce },
+ { 0x05ef, 0x8884, "AVB Mag Turbo Force", btn_avb_wheel, abs_wheel, ff_iforce },
{ 0x05ef, 0x8888, "AVB Top Shot Force Feedback Racing Wheel", btn_avb_tw, abs_wheel, ff_iforce },
{ 0x06f8, 0x0001, "Guillemot Race Leader Force Feedback", btn_wheel, abs_wheel, ff_iforce },
{ 0x06f8, 0x0004, "Guillemot Force Feedback Racing Wheel", btn_wheel, abs_wheel, ff_iforce },
@@ -396,6 +398,7 @@
break;
iforce->type = iforce_device + i;
+ iforce->dev.name = iforce->type->name;
/*
* Set input device bitfields and ranges.
|
|
From: johann d. <jd...@us...> - 2002-02-03 20:03:13
|
Update of /cvsroot/linuxconsole/ruby/linux/include/linux In directory usw-pr-cvs1:/tmp/cvs-serv15928 Modified Files: input.h Log Message: Added two button types (for wheels). Index: input.h =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/include/linux/input.h,v retrieving revision 1.61 retrieving revision 1.62 diff -u -d -r1.61 -r1.62 --- input.h 2002/02/02 19:32:41 1.61 +++ input.h 2002/02/03 20:03:11 1.62 @@ -393,6 +393,10 @@ #define BTN_STYLUS 0x14b #define BTN_STYLUS2 0x14c +#define BTN_WHEEL 0x150 +#define BTN_GEAR_DOWN 0x150 +#define BTN_GEAR_UP 0x151 + #define KEY_MAX 0x1ff /* |
|
From: johann d. <jd...@us...> - 2002-02-03 19:38:24
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce In directory usw-pr-cvs1:/tmp/cvs-serv9271/iforce Added Files: Config.help Log Message: Moved help text for I-Force devices. --- NEW FILE: Config.help --- CONFIG_JOYSTICK_IFORCE_USB Say Y here if you have an I-Force joystick or steering wheel connected to your USB port. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called iforce.o. If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. CONFIG_JOYSTICK_IFORCE_232 Say Y here if you have an I-Force joystick or steering wheel connected to your serial (COM) port. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called iforce.o. If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. |
|
From: johann d. <jd...@us...> - 2002-02-03 19:38:24
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick In directory usw-pr-cvs1:/tmp/cvs-serv9271 Modified Files: Config.help Log Message: Moved help text for I-Force devices. Index: Config.help =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/Config.help,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Config.help 2002/01/26 19:20:36 1.1 +++ Config.help 2002/02/03 19:38:21 1.2 @@ -103,24 +103,6 @@ The module will be called tmdc.o. If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. -CONFIG_JOYSTICK_IFORCE_USB - Say Y here if you have an I-Force joystick or steering wheel - connected to your USB port. - - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called iforce.o. If you want to compile it as a - module, say M here and read <file:Documentation/modules.txt>. - -CONFIG_JOYSTICK_IFORCE_232 - Say Y here if you have an I-Force joystick or steering wheel - connected to your serial (COM) port. - - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called iforce.o. If you want to compile it as a - module, say M here and read <file:Documentation/modules.txt>. - CONFIG_JOYSTICK_WARRIOR Say Y here if you have a Logitech WingMan Warrior joystick connected to your computer's serial port. |
|
From: johann d. <jd...@us...> - 2002-02-03 19:38:02
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input
In directory usw-pr-cvs1:/tmp/cvs-serv8258
Modified Files:
evdev.c
Log Message:
Removed useless open_for_write flag in struct evdev.
Index: evdev.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/evdev.c,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- evdev.c 2002/01/30 00:16:58 1.45
+++ evdev.c 2002/02/03 19:34:38 1.46
@@ -40,7 +40,6 @@
struct evdev {
int exist;
int open;
- int open_for_write;
int minor;
char name[16];
struct input_handle handle;
|
|
From: johann d. <jd...@us...> - 2002-02-03 19:37:40
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce
In directory usw-pr-cvs1:/tmp/cvs-serv8775
Modified Files:
iforce-main.c iforce-usb.c iforce.h
Log Message:
Got rid of name and open members of struct iforce. They duplicate data
available somewhere else.
Small USB fixes.
Index: iforce-main.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-main.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- iforce-main.c 2002/02/02 19:28:35 1.10
+++ iforce-main.c 2002/02/03 19:37:37 1.11
@@ -221,23 +221,21 @@
{
struct iforce *iforce = dev->private;
+printk(KERN_DEBUG "In iforce_open\n");
+
switch (iforce->bus) {
#ifdef IFORCE_USB
case IFORCE_USB:
- if (!iforce->open) {
- iforce->irq.dev = iforce->usbdev;
- if (usb_submit_urb(&iforce->irq))
- return -EIO;
- }
+printk(KERN_DEBUG "Submitting irq URB\n");
+ iforce->irq.dev = iforce->usbdev;
+ if (usb_submit_urb(&iforce->irq))
+ return -EIO;
break;
#endif
}
/* Enable force feedback */
- if (!iforce->open)
- iforce_send_packet(iforce, FF_CMD_ENABLE, "\004");
-
- iforce->open++;
+ iforce_send_packet(iforce, FF_CMD_ENABLE, "\004");
return 0;
}
@@ -275,26 +273,24 @@
/* Disable force feedback playback */
iforce_send_packet(iforce, FF_CMD_ENABLE, "\001");
-
switch (iforce->bus) {
#ifdef IFORCE_USB
case IFORCE_USB:
- if (!--iforce->open) {
- usb_unlink_urb(&iforce->irq);
- usb_unlink_urb(&iforce->out);
+printk(KERN_DEBUG "Unlinking irq URB\n");
+ usb_unlink_urb(&iforce->irq);
+ usb_unlink_urb(&iforce->out);
- /* The device was unplugged before the file
- * was released */
- if (iforce->usbdev == NULL) {
- iforce_delete(iforce);
- }
+ /* The device was unplugged before the file
+ * was released */
+ if (iforce->usbdev == NULL) {
+ iforce_delete_device(iforce);
}
- break;
+ break;
#endif
}
}
-void iforce_delete(struct iforce *iforce)
+void iforce_delete_device(struct iforce *iforce)
{
#ifdef IFORCE_USB
iforce_usb_delete(iforce);
@@ -351,7 +347,7 @@
if (i == 20) { /* 5 seconds */
printk(KERN_ERR "iforce.c: Timeout waiting for response from device.\n");
- iforce_delete(iforce);
+ iforce_delete_device(iforce);
return -1;
}
@@ -401,8 +397,6 @@
iforce->type = iforce_device + i;
- strncpy(iforce->name, iforce->type->name, 64);
-
/*
* Set input device bitfields and ranges.
*/
@@ -462,6 +456,8 @@
*/
input_register_device(&iforce->dev);
+
+ printk(KERN_DEBUG "iforce->dev.open = %p\n", iforce->dev.open);
printk(KERN_INFO "input: %s [%d effects, %ld bytes memory]\n",
iforce->dev.name, iforce->dev.ff_effects_max,
Index: iforce-usb.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-usb.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- iforce-usb.c 2002/02/02 19:28:35 1.10
+++ iforce-usb.c 2002/02/03 19:37:37 1.11
@@ -1,8 +1,8 @@
/*
* $Id$
*
- * Copyright (c) 2000-2001 Vojtech Pavlik <vo...@uc...>
- * Copyright (c) 2001 Johann Deneux <de...@if...>
+ * Copyright (c) 2000-2002 Vojtech Pavlik <vo...@uc...>
+ * Copyright (c) 2001-2002 Johann Deneux <de...@if...>
*
* USB/RS232 I-Force joysticks and wheels.
*/
@@ -118,14 +118,13 @@
iforce->cr.wIndex = 0;
iforce->cr.wLength = 16;
- /* FIXME: use lower-case versions instead with 2.5 */
- FILL_INT_URB(&iforce->irq, dev, usb_rcvintpipe(dev, epirq->bEndpointAddress),
+ usb_fill_int_urb(&iforce->irq, dev, usb_rcvintpipe(dev, epirq->bEndpointAddress),
iforce->data, 16, iforce_usb_irq, iforce, epirq->bInterval);
- FILL_BULK_URB(&iforce->out, dev, usb_sndbulkpipe(dev, epout->bEndpointAddress),
+ usb_fill_bulk_urb(&iforce->out, dev, usb_sndbulkpipe(dev, epout->bEndpointAddress),
iforce + 1, 32, iforce_usb_out, iforce);
- FILL_CONTROL_URB(&iforce->ctrl, dev, usb_rcvctrlpipe(dev, 0),
+ usb_fill_control_urb(&iforce->ctrl, dev, usb_rcvctrlpipe(dev, 0),
(void*) &iforce->cr, iforce->edata, 16, iforce_usb_ctrl, iforce);
if (iforce_init_device(iforce)) {
@@ -147,11 +146,13 @@
static void iforce_usb_disconnect(struct usb_device *dev, void *ptr)
{
struct iforce *iforce = ptr;
+ int open = iforce->dev.handle->open;
+
iforce->usbdev = NULL;
input_unregister_device(&iforce->dev);
- if (iforce->open <= 0)
- iforce_delete(iforce);
+ if (!open)
+ iforce_delete_device(iforce);
}
static struct usb_device_id iforce_usb_ids [] = {
Index: iforce.h
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- iforce.h 2002/02/02 19:28:35 1.8
+++ iforce.h 2002/02/03 19:37:37 1.9
@@ -122,8 +122,6 @@
struct iforce {
struct input_dev dev; /* Input device interface */
struct iforce_device *type;
- char name[64];
- int open;
int bus;
unsigned char data[IFORCE_MAX_LENGTH];
@@ -177,7 +175,7 @@
/* iforce-main.c */
int iforce_init_device(struct iforce *iforce);
-void iforce_delete(struct iforce *iforce);
+void iforce_delete_device(struct iforce *iforce);
/* iforce-packets.c */
int iforce_control_playback(struct iforce*, u16 id, unsigned int);
|
|
From: Vojtech P. <vo...@us...> - 2002-02-02 22:26:47
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/serio
In directory usw-pr-cvs1:/tmp/cvs-serv27871
Modified Files:
i8042.c i8042.h q40kbd.c
Log Message:
i8042.c: Make timeout longer and bus speed independent.
q40kbd.c: Remove dummy write method. atkbd.c now detects that and doesn't try detecting/initalizing the keyboard.
Index: i8042.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/serio/i8042.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- i8042.c 2002/01/22 20:43:24 1.16
+++ i8042.c 2002/02/02 22:26:44 1.17
@@ -96,14 +96,20 @@
static int i8042_wait_read(void)
{
int i = 0;
- while ((~inb(I8042_STATUS_REG) & I8042_STR_OBF) && (i < I8042_CTL_TIMEOUT)) i++;
+ while ((~inb(I8042_STATUS_REG) & I8042_STR_OBF) && (i < I8042_CTL_TIMEOUT)) {
+ udelay(50);
+ i++;
+ }
return -(i == I8042_CTL_TIMEOUT);
}
static int i8042_wait_write(void)
{
int i = 0;
- while ((inb(I8042_STATUS_REG) & I8042_STR_IBF) && (i < I8042_CTL_TIMEOUT)) i++;
+ while ((inb(I8042_STATUS_REG) & I8042_STR_IBF) && (i < I8042_CTL_TIMEOUT)) {
+ udelay(50);
+ i++;
+ }
return -(i == I8042_CTL_TIMEOUT);
}
@@ -181,14 +187,17 @@
spin_unlock_irqrestore(&i8042_lock, flags);
+#ifdef I8042_DEBUG_IO
+ if (retval)
+ printk(KERN_DEBUG "i8042.c: -- i8042 (timeout) [%d]\n",
+ (int) (jiffies - i8042_start));
+#endif
+
return retval;
}
/*
* i8042_kbd_write() sends a byte out through the keyboard interface.
- * It also automatically refreshes the CTR value, since some i8042's
- * trash their CTR after attempting to send data to an nonexistent
- * device.
*/
static int i8042_kbd_write(struct serio *port, unsigned char c)
Index: i8042.h
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/serio/i8042.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- i8042.h 2002/01/22 20:43:42 1.8
+++ i8042.h 2002/02/02 22:26:44 1.9
@@ -55,12 +55,12 @@
#define I8042_AUX_IRQ CONFIG_I8042_AUX_IRQ
/*
- * The speed of the i8042's varies. This timeout equals 100 ms on a system
- * with 8.3 MHz i8042 clock, which should be most common. It should not need
- * to be raised / lowered.
+ * This is in 50us units, the time we wait for the i8042 to react. This
+ * has to be long enough for the i8042 itself to timeout on sending a byte
+ * to a non-existent mouse.
*/
-#define I8042_CTL_TIMEOUT 83000
+#define I8042_CTL_TIMEOUT 10000
/*
* Register numbers.
Index: q40kbd.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/serio/q40kbd.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- q40kbd.c 2002/02/01 00:54:24 1.11
+++ q40kbd.c 2002/02/02 22:26:44 1.12
@@ -47,15 +47,10 @@
MODULE_DESCRIPTION("Q40 PS/2 keyboard controller driver");
MODULE_LICENSE("GPL");
-static inline void q40kbd_write(unsigned char val)
-{
- /* No way to write to the keyboard! */
-}
-
static struct serio q40kbd_port =
{
type: SERIO_8042,
- write: q40kbd_write,
+ write: NULL,
name: "Q40 PS/2 kbd port",
phys: "isa0060/serio0",
};
|
|
From: Vojtech P. <vo...@us...> - 2002-02-02 22:23:38
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/keyboard
In directory usw-pr-cvs1:/tmp/cvs-serv26858
Modified Files:
atkbd.c
Log Message:
Add support for serio devices without a ->write method. The keyboard
is automatically assumed present in that case.
Index: atkbd.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/keyboard/atkbd.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- atkbd.c 2002/01/27 01:48:54 1.31
+++ atkbd.c 2002/02/02 22:23:35 1.32
@@ -258,6 +258,9 @@
struct atkbd *atkbd = dev->private;
char param[2];
+ if (!serio->write)
+ return -1;
+
switch (type) {
case EV_LED:
@@ -462,8 +465,10 @@
memset(atkbd, 0, sizeof(struct atkbd));
- atkbd->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_REP);
- atkbd->dev.ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL);
+ if (serio->write) {
+ atkbd->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_REP);
+ atkbd->dev.ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL);
+ } else atkbd->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
atkbd->serio = serio;
@@ -481,13 +486,20 @@
return;
}
- if (atkbd_probe(atkbd)) {
- serio_close(serio);
- kfree(atkbd);
- return;
+ if (serio->write) {
+
+ if (atkbd_probe(atkbd)) {
+ serio_close(serio);
+ kfree(atkbd);
+ return;
+ }
+
+ atkbd->set = atkbd_set_3(atkbd);
+
+ } else {
+ atkbd->set = 2;
+ atkbd->id = 0xab00;
}
-
- atkbd->set = atkbd_set_3(atkbd);
if (atkbd->set == 4) {
atkbd->dev.ledbit[0] |= BIT(LED_COMPOSE) | BIT(LED_SUSPEND) | BIT(LED_SLEEP) | BIT(LED_MUTE);
@@ -517,7 +529,8 @@
printk(KERN_INFO "input: %s on %s\n", atkbd->name, serio->phys);
- atkbd_initialize(atkbd);
+ if (serio->write)
+ atkbd_initialize(atkbd);
}
|
|
From: johann d. <jd...@us...> - 2002-02-02 19:32:45
|
Update of /cvsroot/linuxconsole/ruby/linux/include/linux
In directory usw-pr-cvs1:/tmp/cvs-serv19902
Modified Files:
input.h
Log Message:
Renamed shape to envelope, interactive to condition.
Removed FF_BTN, FF_ABS.
Index: input.h
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/include/linux/input.h,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -d -r1.60 -r1.61
--- input.h 2002/01/30 23:07:07 1.60
+++ input.h 2002/02/02 19:32:41 1.61
@@ -516,7 +516,7 @@
*
* Ranges:
* 0 <= __u16 <= 65535
- * -32767 <= __s16 <= +32767 ! Not -32768 for lower bound !
+ * -32768 <= __s16 <= +32767
*/
struct ff_replay {
@@ -529,7 +529,7 @@
__u16 interval; /* Time to wait before an effect can be re-triggered (ms) */
};
-struct ff_shape {
+struct ff_envelope {
__u16 attack_length; /* Duration of attack (ms) */
__u16 attack_level; /* Level at beginning of attack */
__u16 fade_length; /* Duration of fade (ms) */
@@ -539,27 +539,27 @@
/* FF_CONSTANT */
struct ff_constant_effect {
__s16 level; /* Strength of effect. Negative values are OK */
- struct ff_shape shape;
+ struct ff_envelope envelope;
};
/* FF_RAMP */
struct ff_ramp_effect {
__s16 start_level;
__s16 end_level;
- struct ff_shape shape;
+ struct ff_envelope envelope;
};
/* FF_SPRING of FF_FRICTION */
-struct ff_interactive_effect {
- __u16 right_saturation[2]; /* Max level when joystick is on the right */
- __u16 left_saturation[2]; /* Max level when joystick in on the left */
+struct ff_condition_effect {
+ __u16 right_saturation; /* Max level when joystick is on the right */
+ __u16 left_saturation; /* Max level when joystick in on the left */
- __s16 right_coeff[2]; /* Indicates how fast the force grows when the
+ __s16 right_coeff; /* Indicates how fast the force grows when the
joystick moves to the right */
- __s16 left_coeff[2]; /* Same for left side */
+ __s16 left_coeff; /* Same for left side */
- __u16 deadband[2]; /* Size of area where no force is produced */
- __s16 center[2]; /* Position of dead zone */
+ __u16 deadband; /* Size of area where no force is produced */
+ __s16 center; /* Position of dead zone */
};
@@ -571,7 +571,7 @@
__s16 offset; /* Mean value of wave (roughly) */
__u16 phase; /* 'Horizontal' shift */
- struct ff_shape shape;
+ struct ff_envelope envelope;
/* Only used if waveform == FF_CUSTOM */
__u32 custom_len; /* Number of samples */
@@ -604,24 +604,9 @@
struct ff_constant_effect constant;
struct ff_ramp_effect ramp;
struct ff_periodic_effect periodic;
- struct ff_interactive_effect interactive;
+ struct ff_condition_effect condition[2]; /* One for each axis */
} u;
};
-
-/*
- * Buttons that can trigger effects. Use for example FF_BTN(BTN_TRIGGER) to
- * access the bitmap.
- */
-
-#define FF_BTN(x) ((x) - BTN_MISC + FF_BTN_OFFSET)
-#define FF_BTN_OFFSET 0x00
-
-/*
- * Force feedback axis mappings. Use FF_ABS() to access the bitmap.
- */
-
-#define FF_ABS(x) ((x) + FF_ABS_OFFSET)
-#define FF_ABS_OFFSET 0x40
/*
* Force feedback effect types
|
|
From: johann d. <jd...@us...> - 2002-02-02 19:28:38
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce
In directory usw-pr-cvs1:/tmp/cvs-serv18760
Modified Files:
iforce-ff.c iforce-main.c iforce-packets.c iforce-usb.c
iforce.h
Log Message:
Synced with latest API changes.
USB fixes.
Index: iforce-ff.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-ff.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- iforce-ff.c 2002/01/28 22:45:00 1.8
+++ iforce-ff.c 2002/02/02 19:28:35 1.9
@@ -1,8 +1,8 @@
/*
* $Id$
*
- * Copyright (c) 2000-2001 Vojtech Pavlik <vo...@uc...>
- * Copyright (c) 2001 Johann Deneux <de...@if...>
+ * Copyright (c) 2000-2002 Vojtech Pavlik <vo...@uc...>
+ * Copyright (c) 2001-2002 Johann Deneux <de...@if...>
*
* USB/RS232 I-Force joysticks and wheels.
*/
@@ -101,10 +101,10 @@
}
/*
- * Uploads the part of an effect setting the shape of the force
+ * Uploads the part of an effect setting the envelope of the force
*/
-static int make_shape_modifier(struct iforce* iforce,
+static int make_envelope_modifier(struct iforce* iforce,
struct resource* mod_chunk, int no_alloc,
u16 attack_duration, __s16 initial_level,
u16 fade_duration, __s16 final_level)
@@ -136,7 +136,7 @@
data[6] = HI(fade_duration);
data[7] = HI(final_level);
- iforce_send_packet(iforce, FF_CMD_SHAPE, data);
+ iforce_send_packet(iforce, FF_CMD_ENVELOPE, data);
return 0;
}
@@ -145,7 +145,7 @@
* Component of spring, friction, inertia... effects
*/
-static int make_interactive_modifier(struct iforce* iforce,
+static int make_condition_modifier(struct iforce* iforce,
struct resource* mod_chunk, int no_alloc,
__u16 rsat, __u16 lsat, __s16 rk, __s16 lk, u16 db, __s16 center)
{
@@ -179,8 +179,8 @@
data[8] = (100*rsat)>>16;
data[9] = (100*lsat)>>16;
- iforce_send_packet(iforce, FF_CMD_INTERACT, data);
- iforce_dump_packet("interactive", FF_CMD_INTERACT, data);
+ iforce_send_packet(iforce, FF_CMD_CONDITION, data);
+ iforce_dump_packet("condition", FF_CMD_CONDITION, data);
return 0;
}
@@ -195,25 +195,30 @@
}
/*
- * Analyse the changes in an effect, and tell if we need to send an interactive
+ * Analyse the changes in an effect, and tell if we need to send an condition
* parameter packet
*/
-static int need_interactive_modifier(struct iforce* iforce, struct ff_effect* new)
+static int need_condition_modifier(struct iforce* iforce, struct ff_effect* new)
{
int id = new->id;
struct ff_effect* old = &iforce->core_effects[id].effect;
+ int ret=0;
+ int i;
if (new->type != FF_SPRING && new->type != FF_FRICTION) {
- printk(KERN_WARNING "iforce.c: bad effect type in need_interactive_modifier\n");
+ printk(KERN_WARNING "iforce.c: bad effect type in need_condition_modifier\n");
return FALSE;
}
- return (old->u.interactive.right_saturation != new->u.interactive.right_saturation
- || old->u.interactive.left_saturation != new->u.interactive.left_saturation
- || old->u.interactive.right_coeff != new->u.interactive.right_coeff
- || old->u.interactive.left_coeff != new->u.interactive.left_coeff
- || old->u.interactive.deadband != new->u.interactive.deadband
- || old->u.interactive.center != new->u.interactive.center);
+ for(i=0; i<2; i++) {
+ ret |= old->u.condition[i].right_saturation != new->u.condition[i].right_saturation
+ || old->u.condition[i].left_saturation != new->u.condition[i].left_saturation
+ || old->u.condition[i].right_coeff != new->u.condition[i].right_coeff
+ || old->u.condition[i].left_coeff != new->u.condition[i].left_coeff
+ || old->u.condition[i].deadband != new->u.condition[i].deadband
+ || old->u.condition[i].center != new->u.condition[i].center;
+ }
+ return ret;
}
/*
@@ -226,7 +231,7 @@
struct ff_effect* old = &iforce->core_effects[id].effect;
if (effect->type != FF_CONSTANT) {
- printk(KERN_WARNING "iforce.c: bad effect type in need_shape_modifier\n");
+ printk(KERN_WARNING "iforce.c: bad effect type in need_envelope_modifier\n");
return FALSE;
}
@@ -234,33 +239,33 @@
}
/*
- * Analyse the changes in an effect, and tell if we need to send a shape
+ * Analyse the changes in an effect, and tell if we need to send an envelope
* parameter packet
*/
-static int need_shape_modifier(struct iforce* iforce, struct ff_effect* effect)
+static int need_envelope_modifier(struct iforce* iforce, struct ff_effect* effect)
{
int id = effect->id;
struct ff_effect* old = &iforce->core_effects[id].effect;
switch (effect->type) {
case FF_CONSTANT:
- if (old->u.constant.shape.attack_length != effect->u.constant.shape.attack_length
- || old->u.constant.shape.attack_level != effect->u.constant.shape.attack_level
- || old->u.constant.shape.fade_length != effect->u.constant.shape.fade_length
- || old->u.constant.shape.fade_level != effect->u.constant.shape.fade_level)
+ if (old->u.constant.envelope.attack_length != effect->u.constant.envelope.attack_length
+ || old->u.constant.envelope.attack_level != effect->u.constant.envelope.attack_level
+ || old->u.constant.envelope.fade_length != effect->u.constant.envelope.fade_length
+ || old->u.constant.envelope.fade_level != effect->u.constant.envelope.fade_level)
return TRUE;
break;
case FF_PERIODIC:
- if (old->u.periodic.shape.attack_length != effect->u.periodic.shape.attack_length
- || old->u.periodic.shape.attack_level != effect->u.periodic.shape.attack_level
- || old->u.periodic.shape.fade_length != effect->u.periodic.shape.fade_length
- || old->u.periodic.shape.fade_level != effect->u.periodic.shape.fade_level)
+ if (old->u.periodic.envelope.attack_length != effect->u.periodic.envelope.attack_length
+ || old->u.periodic.envelope.attack_level != effect->u.periodic.envelope.attack_level
+ || old->u.periodic.envelope.fade_length != effect->u.periodic.envelope.fade_length
+ || old->u.periodic.envelope.fade_level != effect->u.periodic.envelope.fade_level)
return TRUE;
break;
default:
- printk(KERN_WARNING "iforce.c: bad effect type in need_shape_modifier\n");
+ printk(KERN_WARNING "iforce.c: bad effect type in need_envelope_modifier\n");
}
return FALSE;
@@ -375,13 +380,13 @@
set_bit(FF_MOD1_IS_USED, core_effect->flags);
}
- if (!is_update || need_shape_modifier(iforce, effect)) {
- param2_err = make_shape_modifier(iforce, mod2_chunk,
+ if (!is_update || need_envelope_modifier(iforce, effect)) {
+ param2_err = make_envelope_modifier(iforce, mod2_chunk,
is_update,
- effect->u.periodic.shape.attack_length,
- effect->u.periodic.shape.attack_level,
- effect->u.periodic.shape.fade_length,
- effect->u.periodic.shape.fade_level);
+ effect->u.periodic.envelope.attack_length,
+ effect->u.periodic.envelope.attack_level,
+ effect->u.periodic.envelope.fade_length,
+ effect->u.periodic.envelope.fade_level);
if (param2_err) return param2_err;
set_bit(FF_MOD2_IS_USED, core_effect->flags);
}
@@ -442,13 +447,13 @@
set_bit(FF_MOD1_IS_USED, core_effect->flags);
}
- if (!is_update || need_shape_modifier(iforce, effect)) {
- param2_err = make_shape_modifier(iforce, mod2_chunk,
+ if (!is_update || need_envelope_modifier(iforce, effect)) {
+ param2_err = make_envelope_modifier(iforce, mod2_chunk,
is_update,
- effect->u.constant.shape.attack_length,
- effect->u.constant.shape.attack_level,
- effect->u.constant.shape.fade_length,
- effect->u.constant.shape.fade_level);
+ effect->u.constant.envelope.attack_length,
+ effect->u.constant.envelope.attack_level,
+ effect->u.constant.envelope.fade_length,
+ effect->u.constant.envelope.fade_level);
if (param2_err) return param2_err;
set_bit(FF_MOD2_IS_USED, core_effect->flags);
}
@@ -476,81 +481,56 @@
}
/*
- * Upload an interactive effect. Those are for example friction, inertia, springs...
+ * Upload an condition effect. Those are for example friction, inertia, springs...
*/
-int iforce_upload_interactive(struct iforce* iforce, struct ff_effect* effect, int is_update)
+int iforce_upload_condition(struct iforce* iforce, struct ff_effect* effect, int is_update)
{
int core_id = effect->id;
struct iforce_core_effect* core_effect = iforce->core_effects + core_id;
- struct resource* mod_chunk = &(core_effect->mod1_chunk);
- u8 type, axes;
- u16 mod1, mod2, direction;
+ struct resource* mod1_chunk = &(core_effect->mod1_chunk);
+ struct resource* mod2_chunk = &(core_effect->mod2_chunk);
+ u8 type;
int param_err = 1;
int core_err = 0;
switch (effect->type) {
case FF_SPRING: type = 0x40; break;
- case FF_FRICTION: type = 0x41; break;
+ case FF_DAMPER: type = 0x41; break;
default: return -1;
}
- if (!is_update || need_interactive_modifier(iforce, effect)) {
- param_err = make_interactive_modifier(iforce, mod_chunk,
+ if (!is_update || need_condition_modifier(iforce, effect)) {
+ param_err = make_condition_modifier(iforce, mod1_chunk,
is_update,
- effect->u.interactive.right_saturation,
- effect->u.interactive.left_saturation,
- effect->u.interactive.right_coeff,
- effect->u.interactive.left_coeff,
- effect->u.interactive.deadband,
- effect->u.interactive.center);
+ effect->u.condition[0].right_saturation,
+ effect->u.condition[0].left_saturation,
+ effect->u.condition[0].right_coeff,
+ effect->u.condition[0].left_coeff,
+ effect->u.condition[0].deadband,
+ effect->u.condition[0].center);
if (param_err) return param_err;
set_bit(FF_MOD1_IS_USED, core_effect->flags);
- }
-
- switch ((test_bit(ABS_X, &effect->u.interactive.axis) ||
- test_bit(ABS_WHEEL, &effect->u.interactive.axis)) |
- (!!test_bit(ABS_Y, &effect->u.interactive.axis) << 1)) {
- case 0: /* Only one axis, choose orientation */
- mod1 = mod_chunk->start;
- mod2 = 0xffff;
- direction = effect->direction;
- axes = 0x20;
- break;
-
- case 1: /* Only X axis */
- mod1 = mod_chunk->start;
- mod2 = 0xffff;
- direction = 0x5a00;
- axes = 0x40;
- break;
-
- case 2: /* Only Y axis */
- mod1 = 0xffff;
- mod2 = mod_chunk->start;
- direction = 0xb400;
- axes = 0x80;
- break;
-
- case 3: /* Both X and Y axes */
- /* TODO: same setting for both axes is not mandatory */
- mod1 = mod_chunk->start;
- mod2 = mod_chunk->start;
- direction = 0x6000;
- axes = 0xc0;
- break;
+ param_err = make_condition_modifier(iforce, mod2_chunk,
+ is_update,
+ effect->u.condition[1].right_saturation,
+ effect->u.condition[1].left_saturation,
+ effect->u.condition[1].right_coeff,
+ effect->u.condition[1].left_coeff,
+ effect->u.condition[1].deadband,
+ effect->u.condition[1].center);
+ if (param_err) return param_err;
+ set_bit(FF_MOD2_IS_USED, core_effect->flags);
- default:
- return -1;
}
if (!is_update || need_core(iforce, effect)) {
core_err = make_core(iforce, effect->id,
- mod1, mod2,
- type, axes,
+ mod1_chunk->start, mod2_chunk->start,
+ type, 0xc0,
effect->replay.length, effect->replay.delay,
effect->trigger.button, effect->trigger.interval,
- direction);
+ effect->direction);
}
/* If the parameter creation failed, we already returned an
Index: iforce-main.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-main.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- iforce-main.c 2002/01/30 19:47:35 1.9
+++ iforce-main.c 2002/02/02 19:28:35 1.10
@@ -1,8 +1,8 @@
/*
* $Id$
*
- * Copyright (c) 2000-2001 Vojtech Pavlik <vo...@uc...>
- * Copyright (c) 2001 Johann Deneux <de...@if...>
+ * Copyright (c) 2000-2002 Vojtech Pavlik <vo...@uc...>
+ * Copyright (c) 2001-2002 Johann Deneux <de...@if...>
*
* USB/RS232 I-Force joysticks and wheels.
*/
@@ -168,7 +168,7 @@
case FF_SPRING:
case FF_FRICTION:
- ret = iforce_upload_interactive(iforce, effect, is_update);
+ ret = iforce_upload_condition(iforce, effect, is_update);
break;
default:
@@ -224,17 +224,20 @@
switch (iforce->bus) {
#ifdef IFORCE_USB
case IFORCE_USB:
- if (iforce->open++)
- break;
- iforce->irq.dev = iforce->usbdev;
- if (usb_submit_urb(&iforce->irq))
+ if (!iforce->open) {
+ iforce->irq.dev = iforce->usbdev;
+ if (usb_submit_urb(&iforce->irq))
return -EIO;
+ }
break;
#endif
}
/* Enable force feedback */
- iforce_send_packet(iforce, FF_CMD_ENABLE, "\004");
+ if (!iforce->open)
+ iforce_send_packet(iforce, FF_CMD_ENABLE, "\004");
+
+ iforce->open++;
return 0;
}
@@ -263,11 +266,11 @@
return 0;
}
-static void iforce_close(struct input_dev *dev)
+static void iforce_release(struct input_dev *dev)
{
struct iforce *iforce = dev->private;
- printk(KERN_DEBUG "iforce.c: in iforce_close\n");
+ printk(KERN_DEBUG "iforce.c: in iforce_release\n");
/* Disable force feedback playback */
iforce_send_packet(iforce, FF_CMD_ENABLE, "\001");
@@ -320,7 +323,7 @@
iforce->dev.private = iforce;
iforce->dev.name = "Unknown I-Force device";
iforce->dev.open = iforce_open;
- iforce->dev.close = iforce_close;
+ iforce->dev.close = iforce_release;
iforce->dev.flush = iforce_flush;
iforce->dev.event = iforce_input_event;
iforce->dev.upload_effect = iforce_upload_effect;
@@ -348,7 +351,7 @@
if (i == 20) { /* 5 seconds */
printk(KERN_ERR "iforce.c: Timeout waiting for response from device.\n");
- iforce_close(&iforce->dev);
+ iforce_delete(iforce);
return -1;
}
@@ -409,8 +412,6 @@
for (i = 0; iforce->type->btn[i] >= 0; i++) {
signed short t = iforce->type->btn[i];
set_bit(t, iforce->dev.keybit);
- if (t != BTN_DEAD)
- set_bit(FF_BTN(t), iforce->dev.ffbit);
}
for (i = 0; iforce->type->abs[i] >= 0; i++) {
@@ -429,7 +430,7 @@
iforce->dev.absflat[t] = 128;
iforce->dev.absfuzz[t] = 16;
- set_bit(FF_ABS(t), iforce->dev.ffbit);
+ set_bit(t, iforce->dev.ffbit);
break;
case ABS_THROTTLE:
Index: iforce-packets.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-packets.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- iforce-packets.c 2002/01/30 17:54:50 1.8
+++ iforce-packets.c 2002/02/02 19:28:35 1.9
@@ -110,6 +110,8 @@
#ifdef IFORCE_USB
case IFORCE_USB:
+ /* FIXME: iforce->out.status should not be checked outside
+ * the completion handler */
if (iforce->usbdev && empty && !iforce->out.status) {
iforce_usb_xmit(iforce);
}
Index: iforce-usb.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-usb.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- iforce-usb.c 2002/01/30 19:47:35 1.9
+++ iforce-usb.c 2002/02/02 19:28:35 1.10
@@ -118,6 +118,7 @@
iforce->cr.wIndex = 0;
iforce->cr.wLength = 16;
+ /* FIXME: use lower-case versions instead with 2.5 */
FILL_INT_URB(&iforce->irq, dev, usb_rcvintpipe(dev, epirq->bEndpointAddress),
iforce->data, 16, iforce_usb_irq, iforce, epirq->bInterval);
@@ -168,6 +169,7 @@
MODULE_DEVICE_TABLE (usb, iforce_usb_ids);
struct usb_driver iforce_usb_driver = {
+ owner: THIS_MODULE,
name: "iforce",
probe: iforce_usb_probe,
disconnect: iforce_usb_disconnect,
Index: iforce.h
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- iforce.h 2002/01/30 19:47:35 1.7
+++ iforce.h 2002/02/02 19:28:35 1.8
@@ -1,8 +1,8 @@
/*
* $Id$
*
- * Copyright (c) 2000-2001 Vojtech Pavlik <vo...@uc...>
- * Copyright (c) 2001 Johann Deneux <de...@if...>
+ * Copyright (c) 2000-2002 Vojtech Pavlik <vo...@uc...>
+ * Copyright (c) 2001-2002 Johann Deneux <de...@if...>
*
* USB/RS232 I-Force joysticks and wheels.
*/
@@ -65,7 +65,7 @@
#define FF_MOD1_IS_USED 0
#define FF_MOD2_IS_USED 1
#define FF_CORE_IS_USED 2
-#define FF_CORE_IS_PLAYED 3 /* Effect is actually being played */
+#define FF_CORE_IS_PLAYED 3 /* Effect is currently being played */
#define FF_CORE_SHOULD_PLAY 4 /* User wants the effect to be played */
#define FF_CORE_UPDATE 5 /* Effect is being updated */
#define FF_MODCORE_MAX 5
@@ -91,10 +91,10 @@
};
#define FF_CMD_EFFECT 0x010e
-#define FF_CMD_SHAPE 0x0208
+#define FF_CMD_ENVELOPE 0x0208
#define FF_CMD_MAGNITUDE 0x0303
#define FF_CMD_PERIOD 0x0407
-#define FF_CMD_INTERACT 0x050a
+#define FF_CMD_CONDITION 0x050a
#define FF_CMD_AUTOCENTER 0x4002
#define FF_CMD_PLAY 0x4103
@@ -138,7 +138,7 @@
#endif
#ifdef IFORCE_USB
struct usb_device *usbdev; /* USB transfer */
- struct urb irq, out, ctrl;
+ struct urb irq, out, ctrl; /*TODO: Use pointers and usb_alloc_urb */
struct usb_ctrlrequest cr;
#endif
spinlock_t xmit_lock;
@@ -189,7 +189,7 @@
/* iforce-ff.c */
int iforce_upload_periodic(struct iforce*, struct ff_effect*, int is_update);
int iforce_upload_constant(struct iforce*, struct ff_effect*, int is_update);
-int iforce_upload_interactive(struct iforce*, struct ff_effect*, int is_update);
+int iforce_upload_condition(struct iforce*, struct ff_effect*, int is_update);
/* Public variables */
extern struct serio_dev iforce_serio_dev;
|
|
From: Franz S. <fs...@us...> - 2002-02-01 22:03:02
|
Update of /cvsroot/linuxconsole/ruby/linux/include/asm-ppc
In directory usw-pr-cvs1:/tmp/cvs-serv30808
Modified Files:
machdep.h
Removed Files:
vga.h
Log Message:
Sync machdep.h with dj.
Remove vga.h, problem solved elsewhere.
Index: machdep.h
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/include/asm-ppc/machdep.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- machdep.h 2001/12/26 17:28:12 1.3
+++ machdep.h 2002/02/01 22:02:58 1.4
@@ -1,5 +1,5 @@
/*
- * BK Id: SCCS/s.machdep.h 1.25 11/13/01 21:26:07 paulus
+ * BK Id: SCCS/s.machdep.h 1.28 12/27/01 10:08:52 trini
*/
#ifdef __KERNEL__
#ifndef _PPC_MACHDEP_H
@@ -16,6 +16,11 @@
struct pci_dev;
struct seq_file;
+/* We export this macro for external modules like Alsa to know if
+ * ppc_md.feature_call is implemented or not
+ */
+#define CONFIG_PPC_HAS_FEATURE_CALLS
+
struct machdep_calls {
void (*setup_arch)(void);
/* Optional, may be NULL. */
@@ -82,6 +87,12 @@
/* this is for modules, since _machine can be a define -- Cort */
int ppc_machine;
+
+ /* Motherboard/chipset features. This is a kind of general purpose
+ * hook used to control some machine specific features (like reset
+ * lines, chip power control, etc...).
+ */
+ int (*feature_call)(unsigned int feature, ...);
#ifdef CONFIG_SMP
/* functions for dealing with other cpus */
--- vga.h DELETED ---
|
|
From: Vojtech P. <vo...@us...> - 2002-02-01 16:02:27
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/keyboard
In directory usw-pr-cvs1:/tmp/cvs-serv1978
Modified Files:
amikbd.c
Log Message:
Add mem region allocations.
Index: amikbd.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/keyboard/amikbd.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- amikbd.c 2002/02/01 00:12:27 1.12
+++ amikbd.c 2002/02/01 16:02:24 1.13
@@ -104,7 +104,10 @@
int i;
if (!AMIGAHW_PRESENT(AMI_KEYBOARD))
- return -EIO;
+ return -EIO;
+
+ if (!request_mem_region(CIAA_PHYSADDR-1+0xb00, 0x100, "amikeyb"))
+ return -EBUSY;
amikbd_dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
amikbd_dev.keycode = amikbd_keycode;
@@ -134,6 +137,7 @@
{
input_unregister_device(&amikbd_dev);
free_irq(IRQ_AMIGA_CIAA_SP, amikbd_interrupt);
+ release_mem_region(CIAA_PHYSADDR-1+0xb00, 0x100);
}
module_init(amikbd_init);
|
|
From: James S. <jsi...@us...> - 2002-02-01 00:56:51
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/video
In directory usw-pr-cvs1:/tmp/cvs-serv22839
Modified Files:
skeletonfb.c
Log Message:
Much better explaination of things. Plan to release it soon. Note it is not rubyitzed but is for DJ tree.
Index: skeletonfb.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/skeletonfb.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- skeletonfb.c 2001/11/14 22:25:55 1.14
+++ skeletonfb.c 2002/02/01 00:56:49 1.15
@@ -10,30 +10,33 @@
* The primary goal is to remove the console code from fbdev and place it
* into fbcon.c. This reduces the code and makes writing a new fbdev driver
* easy since the author doesn't need to worry about console internals. It
- * also allows the ability to run fbdev without a console system on top of it.
+ * also allows the ability to run fbdev without a console/tty system on top
+ * of it.
*
* First the roles of struct fb_info and struct display have changed. Struct
- * display has gone away. The upper framebuffer console layer only depends on
- * fb_info. For each framebuffer device when used as a VT console is allocate
+ * display will gone away. The way the the new framebuffer console code will
+ * work is that it will act to translate data about the tty/console in
+ * struct vc_data to data in a device independent way in struct fb_info. Then
+ * various functions in struct fb_ops will be called to store the device
+ * dependent state in the par field in struct fb_info and to change the
+ * hardware to that state. This allows a very clean seperation of the fbdev
+ * layer from the console layer. It also allows one to use fbdev on its own
+ * which is a bounus for embedded devices. The reason this approach works is
+ * for each framebuffer device when used as a tty/console device is allocated
* a set of virtual terminals to it. Only one virtual terminal can be active
- * per framebuffer device. So I have struct fb_info represent all the data of
- * the current hardware state of the framebuffer. Meaning the resolution of
- * the active VT (the one you're looking at) and other data is stored in the
- * fb_info struct. When you VT switch the current video state is translated
- * to a form to be stored by the the higher level console layer to be stored
- * for that terminal you just switched away from. Then the current video
- * state is set to the data values stored in the upper console layer for the
- * virtual terminal you are switching to. As you can see doing this makes
- * the con parameter pretty much useless for the fb_ops functions, as it
- * should be. Also having fb_var_screeninfo and other data in fb_info pretty
- * much eliminates the need for get_fix and get_var. Once all drivers use the
- * fix, var, and cmap field fbcon can be written around these fields. This
- * will also eliminate the need to regenerate fb_var_screeninfo and
- * fb_fix_screeninfo data every time the get_var and get_fix functions are
- * called as many drivers do now. The fb_var_screeninfo and
- * fb_fix_screeninfo field in fb_info can be generated just in set_var and
- * placed into struct fb_info.
+ * per framebuffer device. We already have all the data we need in struct
+ * vc_data so why store a bunch of colormaps and other fbdev specific data
+ * per virtual terminal.
*
+ * As you can see doing this makes the con parameter pretty much useless
+ * for struct fb_ops functions, as it should be. Also having struct
+ * fb_var_screeninfo and other data in fb_info pretty much eliminates the
+ * need for get_fix and get_var. Once all drivers use the fix, var, and cmap
+ * fbcon can be written around these fields. This will also eliminate the
+ * need to regenerate struct fb_var_screeninfo, struct fb_fix_screeninfo
+ * struct fb_cmap every time get_var, get_fix, get_cmap functions are called
+ * as many drivers do now.
+ *
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of this archive for
* more details.
@@ -86,30 +89,39 @@
* also support multiple monitors where each display can have its
* its own unique data. In this case each display could be
* represented by a seperate framebuffer device thus a seperate
- * struct fb_info. In this case all of the par structures for the
- * graphics card would be shared between each struct fb_info. This
- * allows when one display changes it video resolution (info->var)
+ * struct fb_info. Now the struct xxx_par represents the graphics
+ * hardware state thus only one exist per card. In this case the
+ * struct xxx_par for each graphics card would be shared between
+ * every struct fb_info that represents a framebuffer on that card.
+ * This allows when one display changes it video resolution (info->var)
* the other displays know instantly. Each display can always be
- * aware of the entire hardware state that affects it. The other side
- * of the coin is multiple graphics cards that pass data around until
- * it is finally displayed on one monitor. Such examples are the
- * voodoo 1 cards and high end NUMA graphics servers. I hope this
- * covers every possible hardware design. If not feel free to send
- * me more design types.
+ * aware of the entire hardware state that affects it because they share
+ * the same xxx_par struct. The other side of the coin is multiple
+ * graphics cards that pass data around until it is finally displayed
+ * on one monitor. Such examples are the voodoo 1 cards and high end
+ * NUMA graphics servers. For this case we have a bunch of pars, each
+ * one that represents a graphics state, that belong to one struct
+ * fb_info. Their you would want to have *par point to a array of device
+ * states and have each struct fb_ops function deal with all those
+ * states. I hope this covers every possible hardware design. If not
+ * feel free to send your ideas at jsi...@us...
*/
/*
- * If your driver supports multiple boards, you should make these
- * arrays, or allocate them dynamically (using kmalloc()).
+ * If your driver supports multiple boards or it supports multiple
+ * framebuffers, you should make these arrays, or allocate them
+ * dynamically (using kmalloc()).
*/
static struct fb_info info;
+
/*
- * This represents the default state of the hardware.
+ * Each one represents the a state of the hardware. Most hardware have
+ * just one hardware state. These here represent the default state(s).
*/
static struct xxx_par __initdata current_par;
-static u32 xxxfb_pseudo_palette[17];
-static int inverse = 0;
+ /* To go away in the near future */
+static struct display disp;
int xxxfb_init(void);
int xxxfb_setup(char*);
@@ -121,7 +133,8 @@
*
* Checks to see if the hardware supports the state requested by
* var passed in. This function does not alter the hardware state!!!
- * This means the data stored in fb_info, par and var, do not change.
+ * This means the data stored in struct fb_info and struct xxx_par do
+ * not change. This includes the var inside of struct fb_info.
* Do NOT change these. This function can be called on its own if we
* intent to only test a mode and not actually set it. The stuff in
* modedb.c is a example of this. If the var passed in is slightly
@@ -339,8 +352,7 @@
* depending on the rastering operation with the value of color which
* is in the current color depth format.
*/
-void xxxfb_fillrect(struct fb_info *p, int x1, int y1, unsigned int width,
- unsigned int height, unsigned long color, int rop)
+void xxxfb_fillrect(struct fb_info *p, struct fb_fillrect *region)
{
}
@@ -359,8 +371,7 @@
* This drawing operation copies a rectangular area from one area of the
* screen to another area.
*/
-void xxxfb_copyarea(struct fb_info *p, int sx, int sy, unsigned int width,
- unsigned int height, int dx, int dy)
+void xxxfb_copyarea(struct fb_info *p, struct fb_copyarea *area)
{
}
@@ -401,7 +412,6 @@
info.fbops = &xxxfb_ops;
info.fix = xxxfb_fix;
info.par = current_par;
- info.pseudo_palette = xxxfb_pseudo_palette;
info.flags = FBINFO_FLAG_DEFAULT;
/* This should give a reasonable default video mode */
if (!mode_option)
@@ -418,9 +428,6 @@
return -EINVAL;
printk(KERN_INFO "fb%d: %s frame buffer device\n", GET_FB_IDX(info.node),
info.fix.id);
-
- /* uncomment this if your driver cannot be unloaded */
- /* MOD_INC_USE_COUNT; */
return 0;
}
@@ -475,6 +482,13 @@
owner: THIS_MODULE,
fb_open: xxxfb_open, /* only if you need it to do something */
fb_release: xxxfb_release, /* only if you need it to do something */
+ /* Stuff to go away. Use generic functions for now */
+ fb_get_fix: fbgen_get_fix,
+ fb_get_var: fbgen_get_var,
+ fb_set_var: fbgen_set_var,
+ fb_get_cmap: fbgen_get_cmap,
+ fb_set_cmap: fbgen_set_cmap,
+
fb_check_var: xxxfb_check_var,
fb_set_par: xxxfb_set_par, /* optional */
fb_setcolreg: xxxfb_setcolreg,
|
|
From: James S. <jsi...@us...> - 2002-02-01 00:54:27
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/serio
In directory usw-pr-cvs1:/tmp/cvs-serv22024
Modified Files:
q40kbd.c
Log Message:
Various bug fixes from the original author.
Index: q40kbd.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/serio/q40kbd.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- q40kbd.c 2002/02/01 00:04:24 1.10
+++ q40kbd.c 2002/02/01 00:54:24 1.11
@@ -49,7 +49,7 @@
static inline void q40kbd_write(unsigned char val)
{
- /* FIXME! We need a way how to write to the keyboard! */
+ /* No way to write to the keyboard! */
}
static struct serio q40kbd_port =
@@ -79,7 +79,7 @@
request_region(0x60, 16, "q40kbd");
/* allocate the IRQ */
- request_irq(Q40_IRQ_KEYBOARD, keyboard_interrupt, 0, "q40kbd", NULL);
+ request_irq(Q40_IRQ_KEYBOARD, q40kbd_interrupt, 0, "q40kbd", NULL);
/* flush any pending input. */
while (maxread-- && (IRQ_KEYB_MASK & master_inb(INTERRUPT_REG)))
|
|
From: James S. <jsi...@us...> - 2002-02-01 00:12:30
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/keyboard
In directory usw-pr-cvs1:/tmp/cvs-serv9288
Modified Files:
amikbd.c
Log Message:
the up/down event is received in the lsb bit, the other 7 bits are the keycode.
Index: amikbd.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/keyboard/amikbd.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- amikbd.c 2002/01/31 23:05:28 1.11
+++ amikbd.c 2002/02/01 00:12:27 1.12
@@ -78,8 +78,8 @@
udelay(85); /* wait until 85 us have expired */
ciaa.cra &= ~0x40; /* switch CIA serial port to input mode */
- scancode = scancode >> 1; /* lowest bit is release bit */
- down = scancode & 1;
+ down = scancode & 1; /* lowest bit is release bit */
+ scancode = scancode >> 1;
if (scancode < 0x78) { /* scancodes < 0x78 are keys */
|
|
From: James S. <jsi...@us...> - 2002-02-01 00:06:40
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/keyboard In directory usw-pr-cvs1:/tmp/cvs-serv7359 Removed Files: q40kbd.c Log Message: Moved Q40 controller support to proper place. --- q40kbd.c DELETED --- |
|
From: James S. <jsi...@us...> - 2002-02-01 00:06:16
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/keyboard In directory usw-pr-cvs1:/tmp/cvs-serv7233 Modified Files: Makefile Log Message: Moved Q40 controller support to proper place. Index: Makefile =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/keyboard/Makefile,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- Makefile 2002/01/23 06:35:30 1.2 +++ Makefile 2002/02/01 00:06:12 1.3 @@ -13,7 +13,6 @@ obj-$(CONFIG_KEYBOARD_PS2SERKBD) += ps2serkbd.o obj-$(CONFIG_KEYBOARD_SUNKBD) += sunkbd.o obj-$(CONFIG_KEYBOARD_XTKBD) += xtkbd.o -obj-$(CONFIG_KEYBOARD_Q40KBD) += q40kbd.o obj-$(CONFIG_KEYBOARD_NEWTON) += newtonkbd.o # The global Rules.make. |
|
From: James S. <jsi...@us...> - 2002-02-01 00:04:27
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/serio
In directory usw-pr-cvs1:/tmp/cvs-serv6583
Added Files:
Tag: 1.10
q40kbd.c
Log Message:
It really belongs in here.
--- NEW FILE: q40kbd.c ---
/*
* $Id: q40kbd.c,v 1.10 2002/02/01 00:04:24 jsimmons Exp $
*
* Copyright (c) 2000-2001 Vojtech Pavlik
*
* Based on the work of:
* Richard Zidlicky <Ric...@st...>
*/
/*
* Q40 PS/2 keyboard controller driver for Linux/m68k
*/
/*
* 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
*
* Should you need to contact me, the author, you can do so either by
* e-mail - mail your message to <vo...@uc...>, or by paper mail:
* Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
*/
#include <linux/module.h>
#include <linux/init.h>
#include <linux/serio.h>
#include <asm/keyboard.h>
#include <asm/bitops.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/q40_master.h>
#include <asm/irq.h>
#include <asm/q40ints.h>
MODULE_AUTHOR("Vojtech Pavlik <vo...@uc...>");
MODULE_DESCRIPTION("Q40 PS/2 keyboard controller driver");
MODULE_LICENSE("GPL");
static inline void q40kbd_write(unsigned char val)
{
/* FIXME! We need a way how to write to the keyboard! */
}
static struct serio q40kbd_port =
{
type: SERIO_8042,
write: q40kbd_write,
name: "Q40 PS/2 kbd port",
phys: "isa0060/serio0",
};
static void q40kbd_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
unsigned long flags;
if (IRQ_KEYB_MASK & master_inb(INTERRUPT_REG))
if (q40kbd_port.dev)
q40kbd_port.dev->interrupt(&q40kbd_port, master_inb(KEYCODE_REG), 0);
master_outb(-1, KEYBOARD_UNLOCK_REG);
}
void __init q40kbd_init(void)
{
int maxread = 100;
/* Get the keyboard controller registers (incomplete decode) */
request_region(0x60, 16, "q40kbd");
/* allocate the IRQ */
request_irq(Q40_IRQ_KEYBOARD, keyboard_interrupt, 0, "q40kbd", NULL);
/* flush any pending input. */
while (maxread-- && (IRQ_KEYB_MASK & master_inb(INTERRUPT_REG)))
master_inb(KEYCODE_REG);
/* off we go */
master_outb(-1,KEYBOARD_UNLOCK_REG);
master_outb(1,KEY_IRQ_ENABLE_REG);
register_serio_port(&q40kbd_port);
printk(KERN_INFO "serio: Q40 PS/2 kbd port irq %d\n", Q40_IRQ_KEYBOARD);
}
void __exit q40kbd_exit(void)
{
unregister_serio_port(&q40kbd_port);
free_irq(Q40_IRQ_KEYBOARD, NULL);
release_region(0x60, 16);
}
module_init(q40kbd_init);
module_exit(q40kbd_exit);
|
|
From: James S. <jsi...@us...> - 2002-01-31 23:05:32
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/keyboard
In directory usw-pr-cvs1:/tmp/cvs-serv17206
Modified Files:
amikbd.c
Log Message:
Various fixed post from linux-m68k mailing list.
Index: amikbd.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/keyboard/amikbd.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- amikbd.c 2002/01/24 19:22:46 1.10
+++ amikbd.c 2002/01/31 23:05:28 1.11
@@ -44,7 +44,7 @@
MODULE_LICENSE("GPL");
static unsigned char amikbd_keycode[0x78] = {
- 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 43, 0, 82,
+ 41, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 43, 0, 82,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 79, 80, 81,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 75, 76, 77,
0, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 0, 83, 71, 72, 73,
@@ -96,7 +96,7 @@
return;
}
- printk(amikbd_messages[scancode]); /* scancodes >= 0x78 are error codes */
+ printk(amikbd_messages[scancode - 0x78]); /* scancodes >= 0x78 are error codes */
}
static int __init amikbd_init(void)
|
|
From: johann d. <jd...@us...> - 2002-01-30 23:07:12
|
Update of /cvsroot/linuxconsole/ruby/linux/include/linux
In directory usw-pr-cvs1:/tmp/cvs-serv25774
Modified Files:
input.h
Log Message:
Changes to the force feedback API.
Index: input.h
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/include/linux/input.h,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -d -r1.59 -r1.60
--- input.h 2002/01/24 21:59:47 1.59
+++ input.h 2002/01/30 23:07:07 1.60
@@ -542,25 +542,24 @@
struct ff_shape shape;
};
+/* FF_RAMP */
+struct ff_ramp_effect {
+ __s16 start_level;
+ __s16 end_level;
+ struct ff_shape shape;
+};
+
/* FF_SPRING of FF_FRICTION */
struct ff_interactive_effect {
-/* Axis along which effect must be created. If null, the field named direction
- * is used
- * It is a bit array (ie to enable axes X and Y, use BIT(ABS_X) | BIT(ABS_Y)
- * It overrides the value of ff_effect::direction, which is used only if
- * axis == 0
- */
- __u16 axis;
-
- __u16 right_saturation; /* Max level when joystick is on the right */
- __u16 left_saturation; /* Max level when joystick in on the left */
+ __u16 right_saturation[2]; /* Max level when joystick is on the right */
+ __u16 left_saturation[2]; /* Max level when joystick in on the left */
- __s16 right_coeff; /* Indicates how fast the force grows when the
+ __s16 right_coeff[2]; /* Indicates how fast the force grows when the
joystick moves to the right */
- __s16 left_coeff; /* Same for left side */
+ __s16 left_coeff[2]; /* Same for left side */
- __u16 deadband; /* Size of area where no force is produced */
- __s16 center; /* Position of dead dead zone */
+ __u16 deadband[2]; /* Size of area where no force is produced */
+ __s16 center[2]; /* Position of dead zone */
};
@@ -573,6 +572,12 @@
__u16 phase; /* 'Horizontal' shift */
struct ff_shape shape;
+
+/* Only used if waveform == FF_CUSTOM */
+ __u32 custom_len; /* Number of samples */
+ __s16 *custom_data; /* Buffer of samples */
+/* Note: the data pointed by custom_data is copied by the driver. You can
+ * therefore dispose of the memory after the upload/update */
};
/*
@@ -597,6 +602,7 @@
union {
struct ff_constant_effect constant;
+ struct ff_ramp_effect ramp;
struct ff_periodic_effect periodic;
struct ff_interactive_effect interactive;
} u;
@@ -626,6 +632,9 @@
#define FF_CONSTANT 0x52
#define FF_SPRING 0x53
#define FF_FRICTION 0x54
+#define FF_DAMPER 0x55
+#define FF_INERTIA 0x56
+#define FF_RAMP 0x57
/*
* Force feedback periodic effect types
|
|
From: johann d. <jd...@us...> - 2002-01-30 19:47:39
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce
In directory usw-pr-cvs1:/tmp/cvs-serv12477
Modified Files:
iforce-main.c iforce-usb.c iforce.h
Log Message:
Added delete functions to delete driver. iforce_delete is only called when
the driver is realeased (or on deconnection if it is not used).
Index: iforce-main.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-main.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- iforce-main.c 2002/01/29 23:17:02 1.8
+++ iforce-main.c 2002/01/30 19:47:35 1.9
@@ -276,11 +276,28 @@
switch (iforce->bus) {
#ifdef IFORCE_USB
case IFORCE_USB:
- if (!--iforce->open)
+ if (!--iforce->open) {
usb_unlink_urb(&iforce->irq);
+ usb_unlink_urb(&iforce->out);
+
+ /* The device was unplugged before the file
+ * was released */
+ if (iforce->usbdev == NULL) {
+ iforce_delete(iforce);
+ }
+ }
break;
#endif
}
+}
+
+void iforce_delete(struct iforce *iforce)
+{
+#ifdef IFORCE_USB
+ iforce_usb_delete(iforce);
+#endif
+
+ kfree(iforce);
}
int iforce_init_device(struct iforce *iforce)
Index: iforce-usb.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-usb.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- iforce-usb.c 2002/01/30 17:54:50 1.8
+++ iforce-usb.c 2002/01/30 19:47:35 1.9
@@ -135,15 +135,22 @@
return iforce;
}
+/* Called by iforce_delete() */
+void iforce_usb_delete(struct iforce* iforce)
+{
+ usb_unlink_urb(&iforce->irq);
+ usb_unlink_urb(&iforce->out);
+ usb_unlink_urb(&iforce->ctrl);
+}
+
static void iforce_usb_disconnect(struct usb_device *dev, void *ptr)
{
struct iforce *iforce = ptr;
- usb_unlink_urb(&iforce->irq);
iforce->usbdev = NULL;
input_unregister_device(&iforce->dev);
-#if 0
- kfree(iforce);
-#endif
+
+ if (iforce->open <= 0)
+ iforce_delete(iforce);
}
static struct usb_device_id iforce_usb_ids [] = {
Index: iforce.h
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- iforce.h 2002/01/28 22:45:00 1.6
+++ iforce.h 2002/01/30 19:47:35 1.7
@@ -173,9 +173,11 @@
/* iforce-usb.c */
void iforce_usb_xmit(struct iforce *iforce);
+void iforce_usb_delete(struct iforce *iforce);
/* iforce-main.c */
int iforce_init_device(struct iforce *iforce);
+void iforce_delete(struct iforce *iforce);
/* iforce-packets.c */
int iforce_control_playback(struct iforce*, u16 id, unsigned int);
|
|
From: johann d. <jd...@us...> - 2002-01-30 17:54:54
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce
In directory usw-pr-cvs1:/tmp/cvs-serv6705
Modified Files:
iforce-packets.c iforce-usb.c
Log Message:
Check that the usb bus is usable before submuting urbs.
Mark the usb bus as unusable after disconnection.
Index: iforce-packets.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-packets.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- iforce-packets.c 2002/01/28 22:45:00 1.7
+++ iforce-packets.c 2002/01/30 17:54:50 1.8
@@ -110,7 +110,7 @@
#ifdef IFORCE_USB
case IFORCE_USB:
- if (empty & !iforce->out.status) {
+ if (iforce->usbdev && empty && !iforce->out.status) {
iforce_usb_xmit(iforce);
}
break;
Index: iforce-usb.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-usb.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- iforce-usb.c 2002/01/30 00:07:37 1.7
+++ iforce-usb.c 2002/01/30 17:54:50 1.8
@@ -139,6 +139,7 @@
{
struct iforce *iforce = ptr;
usb_unlink_urb(&iforce->irq);
+ iforce->usbdev = NULL;
input_unregister_device(&iforce->dev);
#if 0
kfree(iforce);
|
|
From: James S. <jsi...@us...> - 2002-01-30 17:25:07
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/video
In directory usw-pr-cvs1:/tmp/cvs-serv29884
Modified Files:
vgacon.c
Log Message:
Aivils found the bug that prevented me from using non default fonts with vgacon. Yeah:-)
Index: vgacon.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/vgacon.c,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -d -r1.60 -r1.61
--- vgacon.c 2001/12/23 00:04:18 1.60
+++ vgacon.c 2002/01/30 17:25:03 1.61
@@ -487,6 +487,8 @@
}
vgacon_state.mode = MODE_TEXT;
+ vt->data_hook = (void *) &vgacon_state;
+
if (init) {
/* Use default font */
if (vga_512_chars)
@@ -535,7 +537,6 @@
/* This maybe be suboptimal but is a safe bet - go with it */
vc->vc_scan_lines = vc->vc_font.height * vc->vc_rows;
vc->vc_scrollback = 1;
- vt->data_hook = &vgacon_state;
return display_desc;
}
|
|
From: johann d. <jd...@us...> - 2002-01-30 00:17:01
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input
In directory usw-pr-cvs1:/tmp/cvs-serv28119
Modified Files:
evdev.c
Log Message:
Replaced get_fast_time by do_gettimeofday.
Index: evdev.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/evdev.c,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -d -r1.44 -r1.45
--- evdev.c 2002/01/24 19:54:08 1.44
+++ evdev.c 2002/01/30 00:16:58 1.45
@@ -67,7 +67,7 @@
while (list) {
- get_fast_time(&list->buffer[list->head].time);
+ do_gettimeofday(&list->buffer[list->head].time);
list->buffer[list->head].type = type;
list->buffer[list->head].code = code;
list->buffer[list->head].value = value;
|