[ale] Help from kernel-mod gurus...

da Black Baron dbaron13 at atl.bellsouth.net
Wed Jan 15 11:54:28 EST 2003


I  just found a  patch that will let me compile a mod to support the KB
Gear Jam Studio USB tablet- however, I don't have a clue as to what
exact  file I need  to patch under the src/linux directory.  Anybody 
able to point me in the right direction?

Here's the patch, as attachment, just in case you might need to see it:




-- 
-------------------------------------------------------------------------
-------------------------------------------------------------------------
"Here's my family tree.  As far as I can tell, my relatives were 
carnival folk who were touring this place called Hiroshima in 
the summer of 1945.  Because they lost most of their hair, they 
mostly married each other.  And here I am"

-------------------------------------------------------------------------
-------------------------------------------------------------------------      
                                                        (,,oBo,,)       
 Wylde Bill                                               ||||          
__________________________________________           http://lyst.org    
                
http://mrpooter.sytes.net                              
wyldechylde at geocities.com
-------------------------------------------------------------------------
-------------------------------------------------------------------------  


diff -urN linux-2.4.19/Documentation/Configure.help linux-2.4.19-kb/Documentation/Configure.help
--- linux-2.4.19/Documentation/Configure.help	2002-08-02 20:39:42.000000000 -0400
+++ linux-2.4.19-kb/Documentation/Configure.help	2002-10-25 01:58:24.000000000 -0400
@@ -13108,6 +13108,17 @@
   The module will be called wacom.o.  If you want to compile it as a
   module, say M here and read <file:Documentation/modules.txt>.
 
+KB Gear JamStudio tablet support
+CONFIG_USB_KBGEAR
+  Say Y here if you want to use the KB Gear JamStudio USB Tablet.
+   Make sure to say Y to "Mouse support" (CONFIG_INPUT_MOUSEDEV) 
+   and/or "Event interface support" (CONFIG_INPUT_EVDEV) as well.
+
+  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 wacom.o.  If you want to compile it as a
+  module, say M here and read <file:Documentation/modules.txt>.
+
 Aiptek 8000U tablet support
 CONFIG_USB_AIPTEK
   Say Y here if you want to use the USB version of the Aiptek 8000U
diff -urN linux-2.4.19/drivers/usb/Config.in linux-2.4.19-kb/drivers/usb/Config.in
--- linux-2.4.19/drivers/usb/Config.in	2002-08-02 20:39:44.000000000 -0400
+++ linux-2.4.19-kb/drivers/usb/Config.in	2002-10-25 01:56:40.000000000 -0400
@@ -60,6 +60,7 @@
       dep_tristate '  USB HIDBP Mouse (basic) support' CONFIG_USB_MOUSE $CONFIG_USB $CONFIG_INPUT
    fi
    dep_tristate '  Wacom Intuos/Graphire tablet support' CONFIG_USB_WACOM $CONFIG_USB $CONFIG_INPUT
+   dep_tristate '  KB Gear JamStudio tablet support' CONFIG_USB_KBGEAR $CONFIG_USB $CONFIG_INPUT
 
    comment 'USB Imaging devices'
    dep_tristate '  USB Kodak DC-2xx Camera support' CONFIG_USB_DC2XX $CONFIG_USB
diff -urN linux-2.4.19/drivers/usb/Makefile linux-2.4.19-kb/drivers/usb/Makefile
--- linux-2.4.19/drivers/usb/Makefile	2002-08-02 20:39:44.000000000 -0400
+++ linux-2.4.19-kb/drivers/usb/Makefile	2002-10-25 02:04:51.000000000 -0400
@@ -63,6 +63,7 @@
 obj-$(CONFIG_USB_HID)		+= hid.o
 obj-$(CONFIG_USB_KBD)		+= usbkbd.o
 obj-$(CONFIG_USB_WACOM)		+= wacom.o
+obj-$(CONFIG_USB_KBGEAR)	+= kbpad.o
 
 obj-$(CONFIG_USB_SCANNER)	+= scanner.o
 obj-$(CONFIG_USB_ACM)		+= acm.o
--- linux-2.4.19/drivers/usb/kbpad.c	1969-12-31 19:00:00.000000000 -0500
+++ linux-2.4.19-kb/drivers/usb/kbpad.c	2002-10-25 02:03:32.000000000 -0400
@@ -0,0 +1,174 @@
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <linux/input.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/usb.h>
+
+/*
+ * Version Information
+ */
+#define DRIVER_VERSION "v0.0.1"
+#define DRIVER_AUTHOR "Josh Myer <josh at joshisanerd.com>"
+#define DRIVER_DESC "KB Gear Jam Studio Tablet Driver"
+
+MODULE_AUTHOR( DRIVER_AUTHOR );
+MODULE_DESCRIPTION( DRIVER_DESC );
+MODULE_LICENSE("GPL");
+
+#define USB_VENDOR_ID_KBTAB 0x84e
+
+struct kbtab {
+  signed char data[8];
+  struct input_dev dev;
+  struct usb_device *usbdev;
+  struct urb irq;
+  int open;
+  int x, y;
+  int button;
+  int pressure;
+};
+
+static void kbtab_irq(struct urb *urb)
+{
+
+  struct kbtab *tab = urb->context;
+  unsigned char *data = tab->data;
+  struct input_dev *dev = &tab->dev;
+
+  if(urb->status)
+    return;
+
+  tab->x = (data[2] << 8) + data[1];
+  tab->y = (data[4] << 8) + data[3];
+
+  tab->pressure = (data[5]);
+
+  /* XXX: don't report unless actual change */
+
+  input_report_abs(dev, ABS_X, tab->x);
+  input_report_abs(dev, ABS_Y, tab->y);
+  input_report_abs(dev, ABS_PRESSURE, tab->pressure);
+
+  input_report_key(dev, BTN_STYLUS, (data[0] & 2));
+  input_report_key(dev, BTN_TOUCH, (data[0] & 1));
+  input_report_key(dev, BTN_LEFT, (tab->pressure > 0x10) ? 1 : 0);
+
+  input_event(dev, EV_MSC, MSC_SERIAL, 0);
+}
+
+struct usb_device_id kbtab_ids[] = {
+  { USB_DEVICE(USB_VENDOR_ID_KBTAB, 0x1001), driver_info : 0 },
+  { }
+};
+  
+MODULE_DEVICE_TABLE(usb, kbtab_ids);
+
+static int kbtab_open(struct input_dev *dev)
+{
+  struct kbtab *kbtab = dev->private;
+
+  if(kbtab->open++)
+    return 0;
+
+  kbtab->irq.dev = kbtab->usbdev;
+  if(usb_submit_urb(&kbtab->irq))
+    return -EIO;
+
+  return 0;
+}
+
+static void kbtab_close(struct input_dev *dev)
+{
+  struct kbtab *kbtab = dev->private;
+
+  if(!--kbtab->open)
+    usb_unlink_urb(&kbtab->irq);
+}
+
+static void *kbtab_probe(struct usb_device *dev, unsigned int ifnum, const struct usb_device_id *id)
+{
+  struct usb_endpoint_descriptor *endpoint;
+  struct kbtab *kbtab;
+
+  if(!(kbtab = kmalloc(sizeof(struct kbtab), GFP_KERNEL)))
+    return NULL;
+
+  memset(kbtab, 0, sizeof(struct kbtab));
+
+  kbtab->dev.evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS) | BIT(EV_MSC);
+  kbtab->dev.absbit[0] |= BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE);
+
+  kbtab->dev.keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE);
+  kbtab->dev.keybit[LONG(BTN_DIGI)] |= BIT(BTN_STYLUS);
+
+  kbtab->dev.mscbit[0] |= BIT(MSC_SERIAL);
+
+  kbtab->dev.absmax[ABS_X] = 0x2000;
+  kbtab->dev.absmax[ABS_Y] = 0x1750;
+
+  kbtab->dev.absmax[ABS_PRESSURE] = 0xff;
+  
+  kbtab->dev.absfuzz[ABS_X] = 4;
+  kbtab->dev.absfuzz[ABS_Y] = 4;
+  
+  kbtab->dev.private = kbtab;
+
+  kbtab->dev.open = kbtab_open;
+  kbtab->dev.close = kbtab_close;
+
+  kbtab->dev.name = "KB Gear Tablet";
+  kbtab->dev.idbus = BUS_USB;
+  
+  kbtab->dev.idvendor = dev->descriptor.idVendor;
+  kbtab->dev.idproduct = dev->descriptor.idProduct;
+  kbtab->dev.idversion = dev->descriptor.bcdDevice;
+  kbtab->usbdev = dev;
+
+
+  endpoint = dev->config[0].interface[ifnum].altsetting[0].endpoint + 0;
+
+  usb_set_idle(dev, dev->config[0].interface[ifnum].altsetting[0].bInterfaceNumber, 0, 0);
+
+  FILL_INT_URB(&kbtab->irq, dev, usb_rcvintpipe(dev, endpoint->bEndpointAddress),
+	       kbtab->data, 8, kbtab_irq, kbtab, endpoint->bInterval);
+
+  input_register_device(&kbtab->dev);
+
+  printk(KERN_INFO "input%d: KB Gear Tablet on usb%d:%d.%d\n",
+	 kbtab->dev.number, dev->bus->busnum, dev->devnum, ifnum);
+
+  return kbtab;
+
+}
+
+static void kbtab_disconnect(struct usb_device *dev, void *ptr)
+{
+	struct kbtab *kbtab = ptr;
+	usb_unlink_urb(&kbtab->irq);
+	input_unregister_device(&kbtab->dev);
+	kfree(kbtab);
+}
+
+static struct usb_driver kbtab_driver = {
+	name:		"kbtab",
+	probe:		kbtab_probe,
+	disconnect:	kbtab_disconnect,
+	id_table:	kbtab_ids,
+};
+
+static int __init kbtab_init(void)
+{
+	usb_register(&kbtab_driver);
+	info(DRIVER_VERSION " " DRIVER_AUTHOR);
+	info(DRIVER_DESC);
+	return 0;
+}
+
+static void __exit kbtab_exit(void)
+{
+	usb_deregister(&kbtab_driver);
+}
+
+module_init(kbtab_init);
+module_exit(kbtab_exit);

diff -urN linux-2.4.19/Documentation/Configure.help linux-2.4.19-kb/Documentation/Configure.help
--- linux-2.4.19/Documentation/Configure.help	2002-08-02 20:39:42.000000000 -0400
+++ linux-2.4.19-kb/Documentation/Configure.help	2002-10-25 01:58:24.000000000 -0400
@@ -13108,6 +13108,17 @@
   The module will be called wacom.o.  If you want to compile it as a
   module, say M here and read <file:Documentation/modules.txt>.
 
+KB Gear JamStudio tablet support
+CONFIG_USB_KBGEAR
+  Say Y here if you want to use the KB Gear JamStudio USB Tablet.
+   Make sure to say Y to "Mouse support" (CONFIG_INPUT_MOUSEDEV) 
+   and/or "Event interface support" (CONFIG_INPUT_EVDEV) as well.
+
+  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 wacom.o.  If you want to compile it as a
+  module, say M here and read <file:Documentation/modules.txt>.
+
 Aiptek 8000U tablet support
 CONFIG_USB_AIPTEK
   Say Y here if you want to use the USB version of the Aiptek 8000U
diff -urN linux-2.4.19/drivers/usb/Config.in linux-2.4.19-kb/drivers/usb/Config.in
--- linux-2.4.19/drivers/usb/Config.in	2002-08-02 20:39:44.000000000 -0400
+++ linux-2.4.19-kb/drivers/usb/Config.in	2002-10-25 01:56:40.000000000 -0400
@@ -60,6 +60,7 @@
       dep_tristate '  USB HIDBP Mouse (basic) support' CONFIG_USB_MOUSE $CONFIG_USB $CONFIG_INPUT
    fi
    dep_tristate '  Wacom Intuos/Graphire tablet support' CONFIG_USB_WACOM $CONFIG_USB $CONFIG_INPUT
+   dep_tristate '  KB Gear JamStudio tablet support' CONFIG_USB_KBGEAR $CONFIG_USB $CONFIG_INPUT
 
    comment 'USB Imaging devices'
    dep_tristate '  USB Kodak DC-2xx Camera support' CONFIG_USB_DC2XX $CONFIG_USB
diff -urN linux-2.4.19/drivers/usb/Makefile linux-2.4.19-kb/drivers/usb/Makefile
--- linux-2.4.19/drivers/usb/Makefile	2002-08-02 20:39:44.000000000 -0400
+++ linux-2.4.19-kb/drivers/usb/Makefile	2002-10-25 02:04:51.000000000 -0400
@@ -63,6 +63,7 @@
 obj-$(CONFIG_USB_HID)		+= hid.o
 obj-$(CONFIG_USB_KBD)		+= usbkbd.o
 obj-$(CONFIG_USB_WACOM)		+= wacom.o
+obj-$(CONFIG_USB_KBGEAR)	+= kbpad.o
 
 obj-$(CONFIG_USB_SCANNER)	+= scanner.o
 obj-$(CONFIG_USB_ACM)		+= acm.o
--- linux-2.4.19/drivers/usb/kbpad.c	1969-12-31 19:00:00.000000000 -0500
+++ linux-2.4.19-kb/drivers/usb/kbpad.c	2002-10-25 02:03:32.000000000 -0400
@@ -0,0 +1,174 @@
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <linux/input.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/usb.h>
+
+/*
+ * Version Information
+ */
+#define DRIVER_VERSION "v0.0.1"
+#define DRIVER_AUTHOR "Josh Myer <josh at joshisanerd.com>"
+#define DRIVER_DESC "KB Gear Jam Studio Tablet Driver"
+
+MODULE_AUTHOR( DRIVER_AUTHOR );
+MODULE_DESCRIPTION( DRIVER_DESC );
+MODULE_LICENSE("GPL");
+
+#define USB_VENDOR_ID_KBTAB 0x84e
+
+struct kbtab {
+  signed char data[8];
+  struct input_dev dev;
+  struct usb_device *usbdev;
+  struct urb irq;
+  int open;
+  int x, y;
+  int button;
+  int pressure;
+};
+
+static void kbtab_irq(struct urb *urb)
+{
+
+  struct kbtab *tab = urb->context;
+  unsigned char *data = tab->data;
+  struct input_dev *dev = &tab->dev;
+
+  if(urb->status)
+    return;
+
+  tab->x = (data[2] << 8) + data[1];
+  tab->y = (data[4] << 8) + data[3];
+
+  tab->pressure = (data[5]);
+
+  /* XXX: don't report unless actual change */
+
+  input_report_abs(dev, ABS_X, tab->x);
+  input_report_abs(dev, ABS_Y, tab->y);
+  input_report_abs(dev, ABS_PRESSURE, tab->pressure);
+
+  input_report_key(dev, BTN_STYLUS, (data[0] & 2));
+  input_report_key(dev, BTN_TOUCH, (data[0] & 1));
+  input_report_key(dev, BTN_LEFT, (tab->pressure > 0x10) ? 1 : 0);
+
+  input_event(dev, EV_MSC, MSC_SERIAL, 0);
+}
+
+struct usb_device_id kbtab_ids[] = {
+  { USB_DEVICE(USB_VENDOR_ID_KBTAB, 0x1001), driver_info : 0 },
+  { }
+};
+  
+MODULE_DEVICE_TABLE(usb, kbtab_ids);
+
+static int kbtab_open(struct input_dev *dev)
+{
+  struct kbtab *kbtab = dev->private;
+
+  if(kbtab->open++)
+    return 0;
+
+  kbtab->irq.dev = kbtab->usbdev;
+  if(usb_submit_urb(&kbtab->irq))
+    return -EIO;
+
+  return 0;
+}
+
+static void kbtab_close(struct input_dev *dev)
+{
+  struct kbtab *kbtab = dev->private;
+
+  if(!--kbtab->open)
+    usb_unlink_urb(&kbtab->irq);
+}
+
+static void *kbtab_probe(struct usb_device *dev, unsigned int ifnum, const struct usb_device_id *id)
+{
+  struct usb_endpoint_descriptor *endpoint;
+  struct kbtab *kbtab;
+
+  if(!(kbtab = kmalloc(sizeof(struct kbtab), GFP_KERNEL)))
+    return NULL;
+
+  memset(kbtab, 0, sizeof(struct kbtab));
+
+  kbtab->dev.evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS) | BIT(EV_MSC);
+  kbtab->dev.absbit[0] |= BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE);
+
+  kbtab->dev.keybit[LONG(BTN_LEFT)] |= BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE);
+  kbtab->dev.keybit[LONG(BTN_DIGI)] |= BIT(BTN_STYLUS);
+
+  kbtab->dev.mscbit[0] |= BIT(MSC_SERIAL);
+
+  kbtab->dev.absmax[ABS_X] = 0x2000;
+  kbtab->dev.absmax[ABS_Y] = 0x1750;
+
+  kbtab->dev.absmax[ABS_PRESSURE] = 0xff;
+  
+  kbtab->dev.absfuzz[ABS_X] = 4;
+  kbtab->dev.absfuzz[ABS_Y] = 4;
+  
+  kbtab->dev.private = kbtab;
+
+  kbtab->dev.open = kbtab_open;
+  kbtab->dev.close = kbtab_close;
+
+  kbtab->dev.name = "KB Gear Tablet";
+  kbtab->dev.idbus = BUS_USB;
+  
+  kbtab->dev.idvendor = dev->descriptor.idVendor;
+  kbtab->dev.idproduct = dev->descriptor.idProduct;
+  kbtab->dev.idversion = dev->descriptor.bcdDevice;
+  kbtab->usbdev = dev;
+
+
+  endpoint = dev->config[0].interface[ifnum].altsetting[0].endpoint + 0;
+
+  usb_set_idle(dev, dev->config[0].interface[ifnum].altsetting[0].bInterfaceNumber, 0, 0);
+
+  FILL_INT_URB(&kbtab->irq, dev, usb_rcvintpipe(dev, endpoint->bEndpointAddress),
+	       kbtab->data, 8, kbtab_irq, kbtab, endpoint->bInterval);
+
+  input_register_device(&kbtab->dev);
+
+  printk(KERN_INFO "input%d: KB Gear Tablet on usb%d:%d.%d\n",
+	 kbtab->dev.number, dev->bus->busnum, dev->devnum, ifnum);
+
+  return kbtab;
+
+}
+
+static void kbtab_disconnect(struct usb_device *dev, void *ptr)
+{
+	struct kbtab *kbtab = ptr;
+	usb_unlink_urb(&kbtab->irq);
+	input_unregister_device(&kbtab->dev);
+	kfree(kbtab);
+}
+
+static struct usb_driver kbtab_driver = {
+	name:		"kbtab",
+	probe:		kbtab_probe,
+	disconnect:	kbtab_disconnect,
+	id_table:	kbtab_ids,
+};
+
+static int __init kbtab_init(void)
+{
+	usb_register(&kbtab_driver);
+	info(DRIVER_VERSION " " DRIVER_AUTHOR);
+	info(DRIVER_DESC);
+	return 0;
+}
+
+static void __exit kbtab_exit(void)
+{
+	usb_deregister(&kbtab_driver);
+}
+
+module_init(kbtab_init);
+module_exit(kbtab_exit);






More information about the Ale mailing list