On Wed, Apr 03, 2002 at 10:45:09AM -0800, Greg KH wrote:
> [EMAIL PROTECTED], 2002-04-02 16:43:50-08:00, [EMAIL PROTECTED]
> USB HID driver fixes
>
> - several fixes from 2.5 that are needed in 2.4 <[EMAIL PROTECTED]>
> - allow driver to work without hid-input <[EMAIL PROTECTED]>
> - remove unneeded #ifdefs in code <[EMAIL PROTECTED]>
>
> drivers/input/joydev.c | 8 +++++---
> drivers/usb/hid-core.c | 37 +++++++++++++------------------------
> drivers/usb/hid.h | 13 ++++++++++---
> include/linux/hiddev.h | 2 +-
> 4 files changed, 29 insertions(+), 31 deletions(-)
# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
# ChangeSet 1.301 -> 1.302
# drivers/usb/hid.h 1.7 -> 1.8
# include/linux/hiddev.h 1.1 -> 1.2
# drivers/input/joydev.c 1.4 -> 1.5
# drivers/usb/hid-core.c 1.9 -> 1.10
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/04/02 [EMAIL PROTECTED] 1.302
# USB HID driver fixes
#
# - several fixes from 2.5 that are needed in 2.4 <[EMAIL PROTECTED]>
# - allow driver to work without hid-input <[EMAIL PROTECTED]>
# - remove unneeded #ifdefs in code <[EMAIL PROTECTED]>
# --------------------------------------------
#
diff -Nru a/drivers/input/joydev.c b/drivers/input/joydev.c
--- a/drivers/input/joydev.c Wed Apr 3 10:47:42 2002
+++ b/drivers/input/joydev.c Wed Apr 3 10:47:42 2002
@@ -411,7 +411,7 @@
static struct input_handle *joydev_connect(struct input_handler *handler, struct
input_dev *dev)
{
struct joydev *joydev;
- int i, j, minor;
+ int i, j, t, minor;
if (!(test_bit(EV_KEY, dev->evbit) && test_bit(EV_ABS, dev->evbit) &&
(test_bit(ABS_X, dev->absbit) || test_bit(ABS_Y, dev->absbit)) &&
@@ -470,8 +470,10 @@
joydev->corr[i].prec = dev->absfuzz[j];
joydev->corr[i].coef[0] = (dev->absmax[j] + dev->absmin[j]) / 2 -
dev->absflat[j];
joydev->corr[i].coef[1] = (dev->absmax[j] + dev->absmin[j]) / 2 +
dev->absflat[j];
- joydev->corr[i].coef[2] = (1 << 29) / ((dev->absmax[j] -
dev->absmin[j]) / 2 - 2 * dev->absflat[j]);
- joydev->corr[i].coef[3] = (1 << 29) / ((dev->absmax[j] -
dev->absmin[j]) / 2 - 2 * dev->absflat[j]);
+ if (!(t = ((dev->absmax[j] - dev->absmin[j]) / 2 - 2 *
+dev->absflat[j])))
+ continue;
+ joydev->corr[i].coef[2] = (1 << 29) / t;
+ joydev->corr[i].coef[3] = (1 << 29) / t;
joydev->abs[i] = joydev_correct(dev->abs[j], joydev->corr + i);
}
diff -Nru a/drivers/usb/hid-core.c b/drivers/usb/hid-core.c
--- a/drivers/usb/hid-core.c Wed Apr 3 10:47:42 2002
+++ b/drivers/usb/hid-core.c Wed Apr 3 10:47:42 2002
@@ -47,9 +47,7 @@
#include <linux/usb.h>
#include "hid.h"
-#ifdef CONFIG_USB_HIDDEV
#include <linux/hiddev.h>
-#endif
/*
* Version Information
@@ -204,17 +202,13 @@
return -1;
}
- if (HID_MAIN_ITEM_VARIABLE & ~flags) { /* ARRAY */
- if (parser->global.logical_maximum <= parser->global.logical_minimum) {
- dbg("logical range invalid %d %d",
parser->global.logical_minimum, parser->global.logical_maximum);
- return -1;
- }
- usages = parser->local.usage_index;
- /* Hint: we can assume usages < MAX_USAGE here */
- } else { /* VARIABLE */
- usages = parser->global.report_count;
+ if (parser->global.logical_maximum <= parser->global.logical_minimum) {
+ dbg("logical range invalid %d %d", parser->global.logical_minimum,
+parser->global.logical_maximum);
+ return -1;
}
+ usages = parser->local.usage_index;
+
offset = report->size;
report->size += parser->global.report_size * parser->global.report_count;
@@ -310,7 +304,10 @@
return 0;
case HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM:
- parser->global.logical_maximum = item_sdata(item);
+ if (parser->global.logical_minimum < 0)
+ parser->global.logical_maximum = item_sdata(item);
+ else
+ parser->global.logical_maximum = item_udata(item);
return 0;
case HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM:
@@ -318,7 +315,10 @@
return 0;
case HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM:
- parser->global.physical_maximum = item_sdata(item);
+ if (parser->global.physical_minimum < 0)
+ parser->global.physical_maximum = item_sdata(item);
+ else
+ parser->global.physical_maximum = item_udata(item);
return 0;
case HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT:
@@ -735,10 +735,8 @@
hid_dump_input(usage, value);
if (hid->claimed & HID_CLAIMED_INPUT)
hidinput_hid_event(hid, field, usage, value);
-#ifdef CONFIG_USB_HIDDEV
if (hid->claimed & HID_CLAIMED_HIDDEV)
hiddev_hid_event(hid, usage->hid, value);
-#endif
}
@@ -1239,10 +1237,8 @@
if (!hidinput_connect(hid))
hid->claimed |= HID_CLAIMED_INPUT;
-#ifdef CONFIG_USB_HIDDEV
if (!hiddev_connect(hid))
hid->claimed |= HID_CLAIMED_HIDDEV;
-#endif
printk(KERN_INFO);
if (hid->claimed & HID_CLAIMED_INPUT)
@@ -1272,13 +1268,10 @@
dbg("cleanup called");
usb_unlink_urb(&hid->urb);
-
if (hid->claimed & HID_CLAIMED_INPUT)
hidinput_disconnect(hid);
-#ifdef CONFIG_USB_HIDDEV
if (hid->claimed & HID_CLAIMED_HIDDEV)
hiddev_disconnect(hid);
-#endif
hid_free_device(hid);
}
@@ -1299,9 +1292,7 @@
static int __init hid_init(void)
{
-#ifdef CONFIG_USB_HIDDEV
hiddev_init();
-#endif
usb_register(&hid_driver);
info(DRIVER_VERSION " " DRIVER_AUTHOR);
info(DRIVER_DESC);
@@ -1311,9 +1302,7 @@
static void __exit hid_exit(void)
{
-#ifdef CONFIG_USB_HIDDEV
hiddev_exit();
-#endif
usb_deregister(&hid_driver);
}
diff -Nru a/drivers/usb/hid.h b/drivers/usb/hid.h
--- a/drivers/usb/hid.h Wed Apr 3 10:47:42 2002
+++ b/drivers/usb/hid.h Wed Apr 3 10:47:42 2002
@@ -352,9 +352,6 @@
struct hid_class_descriptor desc[1];
} __attribute__ ((packed));
-void hidinput_hid_event(struct hid_device *, struct hid_field *, struct hid_usage *,
__s32);
-int hidinput_connect(struct hid_device *);
-void hidinput_disconnect(struct hid_device *);
#ifdef DEBUG
#include "hid-debug.h"
@@ -365,7 +362,17 @@
#endif
+#ifdef CONFIG_USB_HIDINPUT
#define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a ==
0x00010080) || ( a == 0x000c0001))
+extern void hidinput_hid_event(struct hid_device *, struct hid_field *, struct
+hid_usage *, __s32);
+extern int hidinput_connect(struct hid_device *);
+extern void hidinput_disconnect(struct hid_device *);
+#else
+#define IS_INPUT_APPLICATION(a) (0)
+static inline void hidinput_hid_event(struct hid_device *hid, struct hid_field
+*field, struct hid_usage *usage, __s32 value) { }
+static inline int hidinput_connect(struct hid_device *hid) { return -ENODEV; }
+static inline void hidinput_disconnect(struct hid_device *hid) { }
+#endif
int hid_open(struct hid_device *);
void hid_close(struct hid_device *);
diff -Nru a/include/linux/hiddev.h b/include/linux/hiddev.h
--- a/include/linux/hiddev.h Wed Apr 3 10:47:42 2002
+++ b/include/linux/hiddev.h Wed Apr 3 10:47:42 2002
@@ -185,7 +185,7 @@
#else
static inline void *hiddev_connect(struct hid_device *hid) { return NULL; }
static inline void hiddev_disconnect(struct hid_device *hid) { }
-static inline void hiddev_event(struct hid_device *hid, unsigned int usage, int
value) { }
+static inline void hiddev_hid_event(struct hid_device *hid, unsigned int usage, int
+value) { }
static inline int hiddev_init(void) { return 0; }
static inline void hiddev_exit(void) { }
#endif
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel