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

Reply via email to