OSDN Git Service

input: tablet: wacom: Update to set physical limits for quirky tablet devices
authorKyle Evans <kevans@android-x86.org>
Wed, 11 Jan 2012 12:21:47 +0000 (07:21 -0500)
committerChih-Wei Huang <cwhuang@linux.org.tw>
Mon, 25 Jun 2012 13:03:44 +0000 (21:03 +0800)
On my tablet PC, TPC93, the finger device never outputs it's min or max values, making
it impossible to press anything close to the edge of the screen. This patch allows for
setting those limits and includes proper limits for the TPC93 finger device.

drivers/input/tablet/wacom.h
drivers/input/tablet/wacom_sys.c
drivers/input/tablet/wacom_wac.c
drivers/input/tablet/wacom_wac.h

index 23317bd..b5346c2 100644 (file)
@@ -119,7 +119,8 @@ struct wacom {
 extern const struct usb_device_id wacom_ids[];
 
 void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len);
-void wacom_setup_device_quirks(struct wacom_features *features);
+void wacom_setup_device_quirks(struct wacom_features *features,
+                               int product_id);
 void wacom_setup_input_capabilities(struct input_dev *input_dev,
                                    struct wacom_wac *wacom_wac);
 #endif
index 449c0a4..354ff1f 100644 (file)
@@ -521,7 +521,14 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
        if (error)
                goto fail3;
 
-       wacom_setup_device_quirks(features);
+       input_dev->name = wacom_wac->name;
+       input_dev->dev.parent = &intf->dev;
+       input_dev->open = wacom_open;
+       input_dev->close = wacom_close;
+       usb_to_input_id(dev, &input_dev->id);
+       input_set_drvdata(input_dev, wacom);
+
+       wacom_setup_device_quirks(features,input_dev->id.product);
 
        strlcpy(wacom_wac->name, features->name, sizeof(wacom_wac->name));
 
@@ -537,13 +544,6 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
                        goto fail3;
        }
 
-       input_dev->name = wacom_wac->name;
-       input_dev->dev.parent = &intf->dev;
-       input_dev->open = wacom_open;
-       input_dev->close = wacom_close;
-       usb_to_input_id(dev, &input_dev->id);
-       input_set_drvdata(input_dev, wacom);
-
        wacom_setup_input_capabilities(input_dev, wacom_wac);
 
        usb_fill_int_urb(wacom->irq, dev,
index 08ba5ad..00b58ad 100644 (file)
@@ -1012,7 +1012,8 @@ static void wacom_setup_intuos(struct wacom_wac *wacom_wac)
        input_set_abs_params(input_dev, ABS_THROTTLE, -1023, 1023, 0, 0);
 }
 
-void wacom_setup_device_quirks(struct wacom_features *features)
+void wacom_setup_device_quirks(struct wacom_features *features,
+                               int product_id)
 {
 
        /* touch device found but size is not defined. use default */
@@ -1037,6 +1038,14 @@ void wacom_setup_device_quirks(struct wacom_features *features)
                features->pressure_fuzz = 16;
                features->quirks |= WACOM_QUIRK_BBTOUCH_LOWRES;
        }
+
+       /* physical limits for the finger device of TPC93 */
+       if (product_id == 0x93 && features->device_type == BTN_TOOL_FINGER) {
+               features->x_min = 160;
+               features->x_max = 3960;
+               features->y_min = 160;
+               features->y_max = 3960;
+       }
 }
 
 static unsigned int wacom_calculate_touch_res(unsigned int logical_max,
@@ -1056,9 +1065,9 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
 
        __set_bit(BTN_TOUCH, input_dev->keybit);
 
-       input_set_abs_params(input_dev, ABS_X, 0, features->x_max,
+       input_set_abs_params(input_dev, ABS_X, features->x_min, features->x_max,
                             features->x_fuzz, 0);
-       input_set_abs_params(input_dev, ABS_Y, 0, features->y_max,
+       input_set_abs_params(input_dev, ABS_Y, features->y_min, features->y_max,
                             features->y_fuzz, 0);
        input_set_abs_params(input_dev, ABS_PRESSURE, 0, features->pressure_max,
                             features->pressure_fuzz, 0);
index 53eb71b..ac868e5 100644 (file)
@@ -86,6 +86,8 @@ struct wacom_features {
        int pressure_fuzz;
        int distance_fuzz;
        unsigned quirks;
+       int x_min;
+       int y_min;
 };
 
 struct wacom_shared {