Commit 664fb230 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input

Pull input updates from Dmitry Torokhov:
 - big update to Wacom driver by Benjamin Tissoires, converting it to
   HID infrastructure and unifying USB and Bluetooth models
 - large update to ALPS driver by Hans de Goede, which adds support for
   newer touchpad models as well as cleans up and restructures the code
 - more changes to Atmel MXT driver, including device tree support
 - new driver for iPaq x3xxx touchscreen
 - driver for serial Wacom tablets
 - driver for Microchip's CAP1106
 - assorted cleanups and improvements to existing drover and input core

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (93 commits)
  Input: wacom - update the ABI doc according to latest changes
  Input: wacom - only register once the MODULE_* macros
  Input: HID - remove hid-wacom Bluetooth driver
  Input: wacom - add copyright note and bump version to 2.0
  Input: wacom - remove passing id for wacom_set_report
  Input: wacom - check for bluetooth protocol while setting OLEDs
  Input: wacom - handle Intuos 4 BT in wacom.ko
  Input: wacom - handle Graphire BT tablets in wacom.ko
  Input: wacom - prepare the driver to include BT devices
  Input: hyperv-keyboard - register as a wakeup source
  Input: imx_keypad - remove ifdef round PM methods
  Input: jornada720_ts - get rid of space indentation and use tab
  Input: jornada720_ts - switch to using managed resources
  Input: alps - Rushmore and v7 resolution support
  Input: mcs5000_ts - remove ifdef around power management methods
  Input: mcs5000_ts - protect PM functions with CONFIG_PM_SLEEP
  Input: ads7846 - release resources on failure for clean exit
  Input: wacom - add support for 0x12C ISDv4 sensor
  Input: atmel_mxt_ts - use deep sleep mode when stopped
  ARM: dts: am437x-gp-evm: Update binding for touchscreen size
  ...
parents 8065be8d c704b4ef
WWhat: /sys/class/hidraw/hidraw*/device/oled*_img What: /sys/bus/hid/devices/<bus>:<vid>:<pid>.<n>/speed
Date: June 2012
Contact: linux-bluetooth@vger.kernel.org
Description:
The /sys/class/hidraw/hidraw*/device/oled*_img files control
OLED mocro displays on Intuos4 Wireless tablet. Accepted image
has to contain 256 bytes (64x32 px 1 bit colour). The format
is the same as PBM image 62x32px without header (64 bits per
horizontal line, 32 lines). An example of setting OLED No. 0:
dd bs=256 count=1 if=img_file of=[path to oled0_img]/oled0_img
The attribute is read only and no local copy of the image is
stored.
What: /sys/class/hidraw/hidraw*/device/speed
Date: April 2010 Date: April 2010
Kernel Version: 2.6.35 Kernel Version: 2.6.35
Contact: linux-bluetooth@vger.kernel.org Contact: linux-bluetooth@vger.kernel.org
Description: Description:
The /sys/class/hidraw/hidraw*/device/speed file controls The /sys/bus/hid/devices/<bus>:<vid>:<pid>.<n>/speed file
reporting speed of Wacom bluetooth tablet. Reading from controls reporting speed of Wacom bluetooth tablet. Reading
this file returns 1 if tablet reports in high speed mode from this file returns 1 if tablet reports in high speed mode
or 0 otherwise. Writing to this file one of these values or 0 otherwise. Writing to this file one of these values
switches reporting speed. switches reporting speed.
What: /sys/class/leds/0005\:056A\:00BD.0001\:selector\:*/ What: /sys/bus/hid/devices/<bus>:<vid>:<pid>.<n>/wacom_led/led
Date: May 2012 Date: August 2014
Kernel Version: 3.5
Contact: linux-bluetooth@vger.kernel.org
Description:
LED selector for Intuos4 WL. There are 4 leds, but only one LED
can be lit at a time. Max brightness is 127.
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/led
Date: August 2011
Contact: linux-input@vger.kernel.org Contact: linux-input@vger.kernel.org
Description: Description:
Attribute group for control of the status LEDs and the OLEDs. Attribute group for control of the status LEDs and the OLEDs.
This attribute group is only available for Intuos 4 M, L, This attribute group is only available for Intuos 4 M, L,
and XL (with LEDs and OLEDs), Intuos 5 (LEDs only), and Cintiq and XL (with LEDs and OLEDs), Intuos 4 WL, Intuos 5 (LEDs only),
21UX2 and Cintiq 24HD (LEDs only). Therefore its presence Intuos Pro (LEDs only) and Cintiq 21UX2 and Cintiq 24HD
implicitly signifies the presence of said LEDs and OLEDs on the (LEDs only). Therefore its presence implicitly signifies the
tablet device. presence of said LEDs and OLEDs on the tablet device.
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status0_luminance What: /sys/bus/hid/devices/<bus>:<vid>:<pid>.<n>/wacom_led/status0_luminance
Date: August 2011 Date: August 2014
Contact: linux-input@vger.kernel.org Contact: linux-input@vger.kernel.org
Description: Description:
Writing to this file sets the status LED luminance (1..127) Writing to this file sets the status LED luminance (1..127)
...@@ -50,16 +29,16 @@ Description: ...@@ -50,16 +29,16 @@ Description:
button is pressed on the stylus. This luminance level is button is pressed on the stylus. This luminance level is
normally lower than the level when a button is pressed. normally lower than the level when a button is pressed.
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status1_luminance What: /sys/bus/hid/devices/<bus>:<vid>:<pid>.<n>/wacom_led/status1_luminance
Date: August 2011 Date: August 2014
Contact: linux-input@vger.kernel.org Contact: linux-input@vger.kernel.org
Description: Description:
Writing to this file sets the status LED luminance (1..127) Writing to this file sets the status LED luminance (1..127)
when the stylus touches the tablet surface, or any button is when the stylus touches the tablet surface, or any button is
pressed on the stylus. pressed on the stylus.
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status_led0_select What: /sys/bus/hid/devices/<bus>:<vid>:<pid>.<n>/wacom_led/status_led0_select
Date: August 2011 Date: August 2014
Contact: linux-input@vger.kernel.org Contact: linux-input@vger.kernel.org
Description: Description:
Writing to this file sets which one of the four (for Intuos 4 Writing to this file sets which one of the four (for Intuos 4
...@@ -67,23 +46,23 @@ Description: ...@@ -67,23 +46,23 @@ Description:
24HD) status LEDs is active (0..3). The other three LEDs on the 24HD) status LEDs is active (0..3). The other three LEDs on the
same side are always inactive. same side are always inactive.
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/status_led1_select What: /sys/bus/hid/devices/<bus>:<vid>:<pid>.<n>/wacom_led/status_led1_select
Date: September 2011 Date: August 2014
Contact: linux-input@vger.kernel.org Contact: linux-input@vger.kernel.org
Description: Description:
Writing to this file sets which one of the left four (for Cintiq 21UX2 Writing to this file sets which one of the left four (for Cintiq 21UX2
and Cintiq 24HD) status LEDs is active (0..3). The other three LEDs on and Cintiq 24HD) status LEDs is active (0..3). The other three LEDs on
the left are always inactive. the left are always inactive.
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/buttons_luminance What: /sys/bus/hid/devices/<bus>:<vid>:<pid>.<n>/wacom_led/buttons_luminance
Date: August 2011 Date: August 2014
Contact: linux-input@vger.kernel.org Contact: linux-input@vger.kernel.org
Description: Description:
Writing to this file sets the overall luminance level (0..15) Writing to this file sets the overall luminance level (0..15)
of all eight button OLED displays. of all eight button OLED displays.
What: /sys/bus/usb/devices/<busnum>-<devnum>:<cfg>.<intf>/wacom_led/button<n>_rawimg What: /sys/bus/hid/devices/<bus>:<vid>:<pid>.<n>/wacom_led/button<n>_rawimg
Date: August 2011 Date: August 2014
Contact: linux-input@vger.kernel.org Contact: linux-input@vger.kernel.org
Description: Description:
When writing a 1024 byte raw image in Wacom Intuos 4 When writing a 1024 byte raw image in Wacom Intuos 4
...@@ -93,3 +72,8 @@ Description: ...@@ -93,3 +72,8 @@ Description:
byte chunk encodes the image data for two consecutive lines on byte chunk encodes the image data for two consecutive lines on
the display. The low nibble of each byte contains the first the display. The low nibble of each byte contains the first
line, and the high nibble contains the second line. line, and the high nibble contains the second line.
When the Wacom Intuos 4 is connected over Bluetooth, the
image has to contain 256 bytes (64x32 px 1 bit colour).
The format is also scrambled, like in the USB mode, and it can
be summarized by converting 76543210 into GECA6420.
HGFEDCBA HFDB7531
Atmel maXTouch touchscreen/touchpad
Required properties:
- compatible:
atmel,maxtouch
- reg: The I2C address of the device
- interrupts: The sink for the touchpad's IRQ output
See ../interrupt-controller/interrupts.txt
Optional properties for main touchpad device:
- linux,gpio-keymap: An array of up to 4 entries indicating the Linux
keycode generated by each GPIO. Linux keycodes are defined in
<dt-bindings/input/input.h>.
Example:
touch@4b {
compatible = "atmel,maxtouch";
reg = <0x4b>;
interrupt-parent = <&gpio>;
interrupts = <TEGRA_GPIO(W, 3) IRQ_TYPE_LEVEL_LOW>;
};
Device tree bindings for Microchip CAP1106, 6 channel capacitive touch sensor
The node for this driver must be a child of a I2C controller node, as the
device communication via I2C only.
Required properties:
compatible: Must be "microchip,cap1106"
reg: The I2C slave address of the device.
Only 0x28 is valid.
interrupts: Property describing the interrupt line the
device's ALERT#/CM_IRQ# pin is connected to.
The device only has one interrupt source.
Optional properties:
autorepeat: Enables the Linux input system's autorepeat
feature on the input device.
microchip,sensor-gain: Defines the gain of the sensor circuitry. This
effectively controls the sensitivity, as a
smaller delta capacitance is required to
generate the same delta count values.
Valid values are 1, 2, 4, and 8.
By default, a gain of 1 is set.
linux,keycodes: Specifies an array of numeric keycode values to
be used for the channels. If this property is
omitted, KEY_A, KEY_B, etc are used as
defaults. The array must have exactly six
entries.
Example:
i2c_controller {
cap1106@28 {
compatible = "microchip,cap1106";
interrupt-parent = <&gpio1>;
interrupts = <0 0>;
reg = <0x28>;
autorepeat;
microchip,sensor-gain = <2>;
linux,keycodes = <103 /* KEY_UP */
106 /* KEY_RIGHT */
108 /* KEY_DOWN */
105 /* KEY_LEFT */
109 /* KEY_PAGEDOWN */
104>; /* KEY_PAGEUP */
};
}
* Pixcir I2C touchscreen controllers
Required properties:
- compatible: must be "pixcir,pixcir_ts" or "pixcir,pixcir_tangoc"
- reg: I2C address of the chip
- interrupts: interrupt to which the chip is connected
- attb-gpio: GPIO connected to the ATTB line of the chip
- touchscreen-size-x: horizontal resolution of touchscreen (in pixels)
- touchscreen-size-y: vertical resolution of touchscreen (in pixels)
Example:
i2c@00000000 {
/* ... */
pixcir_ts@5c {
compatible = "pixcir,pixcir_ts";
reg = <0x5c>;
interrupts = <2 0>;
attb-gpio = <&gpf 2 0 2>;
touchscreen-size-x = <800>;
touchscreen-size-y = <600>;
};
/* ... */
};
...@@ -9,6 +9,9 @@ Required properties: ...@@ -9,6 +9,9 @@ Required properties:
- x-size: horizontal resolution of touchscreen - x-size: horizontal resolution of touchscreen
- y-size: vertical resolution of touchscreen - y-size: vertical resolution of touchscreen
Optional properties:
- vdd-supply: Regulator controlling the controller supply
Example: Example:
i2c@00000000 { i2c@00000000 {
...@@ -18,6 +21,7 @@ Example: ...@@ -18,6 +21,7 @@ Example:
compatible = "neonode,zforce"; compatible = "neonode,zforce";
reg = <0x50>; reg = <0x50>;
interrupts = <2 0>; interrupts = <2 0>;
vdd-supply = <&reg_zforce_vdd>;
gpios = <&gpio5 6 0>, /* INT */ gpios = <&gpio5 6 0>, /* INT */
<&gpio5 9 0>; /* RST */ <&gpio5 9 0>; /* RST */
......
...@@ -103,6 +103,7 @@ panasonic Panasonic Corporation ...@@ -103,6 +103,7 @@ panasonic Panasonic Corporation
phytec PHYTEC Messtechnik GmbH phytec PHYTEC Messtechnik GmbH
picochip Picochip Ltd picochip Picochip Ltd
plathome Plat'Home Co., Ltd. plathome Plat'Home Co., Ltd.
pixcir PIXCIR MICROELECTRONICS Co., Ltd
powervr PowerVR (deprecated, use img) powervr PowerVR (deprecated, use img)
qca Qualcomm Atheros, Inc. qca Qualcomm Atheros, Inc.
qcom Qualcomm Technologies, Inc qcom Qualcomm Technologies, Inc
......
...@@ -9877,6 +9877,13 @@ M: Pierre Ossman <pierre@ossman.eu> ...@@ -9877,6 +9877,13 @@ M: Pierre Ossman <pierre@ossman.eu>
S: Maintained S: Maintained
F: drivers/mmc/host/wbsd.* F: drivers/mmc/host/wbsd.*
WACOM PROTOCOL 4 SERIAL TABLETS
M: Julian Squires <julian@cipht.net>
M: Hans de Goede <hdegoede@redhat.com>
L: linux-input@vger.kernel.org
S: Maintained
F: drivers/input/tablet/wacom_serial4.c
WATCHDOG DEVICE DRIVERS WATCHDOG DEVICE DRIVERS
M: Wim Van Sebroeck <wim@iguana.be> M: Wim Van Sebroeck <wim@iguana.be>
L: linux-watchdog@vger.kernel.org L: linux-watchdog@vger.kernel.org
......
...@@ -334,8 +334,8 @@ pixcir_ts@5c { ...@@ -334,8 +334,8 @@ pixcir_ts@5c {
attb-gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>; attb-gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;
x-size = <1024>; touchscreen-size-x = <1024>;
y-size = <600>; touchscreen-size-y = <600>;
}; };
}; };
......
...@@ -403,8 +403,8 @@ pixcir_ts@5c { ...@@ -403,8 +403,8 @@ pixcir_ts@5c {
attb-gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>; attb-gpio = <&gpio1 17 GPIO_ACTIVE_HIGH>;
x-size = <1024>; touchscreen-size-x = <1024>;
y-size = <600>; touchscreen-size-y = <600>;
}; };
}; };
......
...@@ -764,12 +764,17 @@ config THRUSTMASTER_FF ...@@ -764,12 +764,17 @@ config THRUSTMASTER_FF
Rumble Force or Force Feedback Wheel. Rumble Force or Force Feedback Wheel.
config HID_WACOM config HID_WACOM
tristate "Wacom Bluetooth devices support" tristate "Wacom Intuos/Graphire tablet support (USB)"
depends on HID depends on HID
depends on LEDS_CLASS
select POWER_SUPPLY select POWER_SUPPLY
---help--- select NEW_LEDS
Support for Wacom Graphire Bluetooth and Intuos4 WL tablets. select LEDS_CLASS
help
Say Y here if you want to use the USB or BT version of the Wacom Intuos
or Graphire tablet.
To compile this driver as a module, choose M here: the
module will be called wacom.
config HID_WIIMOTE config HID_WIIMOTE
tristate "Nintendo Wii / Wii U peripherals" tristate "Nintendo Wii / Wii U peripherals"
......
...@@ -116,7 +116,9 @@ obj-$(CONFIG_HID_UCLOGIC) += hid-uclogic.o ...@@ -116,7 +116,9 @@ obj-$(CONFIG_HID_UCLOGIC) += hid-uclogic.o
obj-$(CONFIG_HID_XINMO) += hid-xinmo.o obj-$(CONFIG_HID_XINMO) += hid-xinmo.o
obj-$(CONFIG_HID_ZEROPLUS) += hid-zpff.o obj-$(CONFIG_HID_ZEROPLUS) += hid-zpff.o
obj-$(CONFIG_HID_ZYDACRON) += hid-zydacron.o obj-$(CONFIG_HID_ZYDACRON) += hid-zydacron.o
obj-$(CONFIG_HID_WACOM) += hid-wacom.o
wacom-objs := wacom_wac.o wacom_sys.o
obj-$(CONFIG_HID_WACOM) += wacom.o
obj-$(CONFIG_HID_WALTOP) += hid-waltop.o obj-$(CONFIG_HID_WALTOP) += hid-waltop.o
obj-$(CONFIG_HID_WIIMOTE) += hid-wiimote.o obj-$(CONFIG_HID_WIIMOTE) += hid-wiimote.o
obj-$(CONFIG_HID_SENSOR_HUB) += hid-sensor-hub.o obj-$(CONFIG_HID_SENSOR_HUB) += hid-sensor-hub.o
......
...@@ -789,6 +789,15 @@ static int hid_scan_report(struct hid_device *hid) ...@@ -789,6 +789,15 @@ static int hid_scan_report(struct hid_device *hid)
/* hid-rmi should take care of them, not hid-generic */ /* hid-rmi should take care of them, not hid-generic */
hid->group = HID_GROUP_RMI; hid->group = HID_GROUP_RMI;
/*
* Vendor specific handlings
*/
switch (hid->vendor) {
case USB_VENDOR_ID_WACOM:
hid->group = HID_GROUP_WACOM;
break;
}
vfree(parser); vfree(parser);
return 0; return 0;
} }
...@@ -1938,8 +1947,6 @@ static const struct hid_device_id hid_have_special_driver[] = { ...@@ -1938,8 +1947,6 @@ static const struct hid_device_id hid_have_special_driver[] = {
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO) }, { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO) },
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_DUAL_BOX_PRO) }, { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_DUAL_BOX_PRO) },
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO) }, { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO) },
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH) },
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH) },
{ HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH) }, { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH) },
{ HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH) }, { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH) },
{ HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_Q_PAD) }, { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_Q_PAD) },
...@@ -2345,7 +2352,6 @@ static const struct hid_device_id hid_ignore_list[] = { ...@@ -2345,7 +2352,6 @@ static const struct hid_device_id hid_ignore_list[] = {
{ HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) }, { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) },
{ HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS) }, { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS) },
{ HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LCSPEC) }, { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LCSPEC) },
{ HID_USB_DEVICE(USB_VENDOR_ID_WACOM, HID_ANY_ID) },
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20) }, { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20) },
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20) }, { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20) },
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_8_8_4_IF_KIT) }, { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_8_8_4_IF_KIT) },
......
This diff is collapsed.
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
* Copyright (c) 2001 Frederic Lepied <flepied@mandrakesoft.com> * Copyright (c) 2001 Frederic Lepied <flepied@mandrakesoft.com>
* Copyright (c) 2004 Panagiotis Issaris <panagiotis.issaris@mech.kuleuven.ac.be> * Copyright (c) 2004 Panagiotis Issaris <panagiotis.issaris@mech.kuleuven.ac.be>
* Copyright (c) 2002-2011 Ping Cheng <pingc@wacom.com> * Copyright (c) 2002-2011 Ping Cheng <pingc@wacom.com>
* Copyright (c) 2014 Benjamin Tissoires <benjamin.tissoires@redhat.com>
* *
* ChangeLog: * ChangeLog:
* v0.1 (vp) - Initial release * v0.1 (vp) - Initial release
...@@ -72,6 +73,8 @@ ...@@ -72,6 +73,8 @@
* v1.52 (pc) - Query Wacom data upon system resume * v1.52 (pc) - Query Wacom data upon system resume
* - add defines for features->type * - add defines for features->type
* - add new devices (0x9F, 0xE2, and 0XE3) * - add new devices (0x9F, 0xE2, and 0XE3)
* v2.00 (bt) - conversion to a HID driver
* - integration of the Bluetooth devices
*/ */
/* /*
...@@ -93,35 +96,30 @@ ...@@ -93,35 +96,30 @@
/* /*
* Version Information * Version Information
*/ */
#define DRIVER_VERSION "v1.53" #define DRIVER_VERSION "v2.00"
#define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>" #define DRIVER_AUTHOR "Vojtech Pavlik <vojtech@ucw.cz>"
#define DRIVER_DESC "USB Wacom tablet driver" #define DRIVER_DESC "USB Wacom tablet driver"
#define DRIVER_LICENSE "GPL" #define DRIVER_LICENSE "GPL"
MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
MODULE_LICENSE(DRIVER_LICENSE);
#define USB_VENDOR_ID_WACOM 0x056a #define USB_VENDOR_ID_WACOM 0x056a
#define USB_VENDOR_ID_LENOVO 0x17ef #define USB_VENDOR_ID_LENOVO 0x17ef
struct wacom { struct wacom {
dma_addr_t data_dma;
struct usb_device *usbdev; struct usb_device *usbdev;
struct usb_interface *intf; struct usb_interface *intf;
struct urb *irq;
struct wacom_wac wacom_wac; struct wacom_wac wacom_wac;
struct hid_device *hdev;
struct mutex lock; struct mutex lock;
struct work_struct work; struct work_struct work;
bool open;
char phys[32];
struct wacom_led { struct wacom_led {
u8 select[2]; /* status led selector (0..3) */ u8 select[2]; /* status led selector (0..3) */
u8 llv; /* status led brightness no button (1..127) */ u8 llv; /* status led brightness no button (1..127) */
u8 hlv; /* status led brightness button pressed (1..127) */ u8 hlv; /* status led brightness button pressed (1..127) */
u8 img_lum; /* OLED matrix display brightness */ u8 img_lum; /* OLED matrix display brightness */
} led; } led;
bool led_initialized;
struct power_supply battery; struct power_supply battery;
struct power_supply ac;
}; };
static inline void wacom_schedule_work(struct wacom_wac *wacom_wac) static inline void wacom_schedule_work(struct wacom_wac *wacom_wac)
...@@ -130,10 +128,19 @@ static inline void wacom_schedule_work(struct wacom_wac *wacom_wac) ...@@ -130,10 +128,19 @@ static inline void wacom_schedule_work(struct wacom_wac *wacom_wac)
schedule_work(&wacom->work); schedule_work(&wacom->work);
} }
extern const struct usb_device_id wacom_ids[]; static inline void wacom_notify_battery(struct wacom_wac *wacom_wac)
{
struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
power_supply_changed(&wacom->battery);
}
extern const struct hid_device_id wacom_ids[];
void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len); 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 wacom_setup_input_capabilities(struct input_dev *input_dev, int wacom_setup_input_capabilities(struct input_dev *input_dev,
struct wacom_wac *wacom_wac); struct wacom_wac *wacom_wac);
int wacom_setup_pad_input_capabilities(struct input_dev *input_dev,
struct wacom_wac *wacom_wac);
#endif #endif
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
/* wacom data packet report IDs */ /* wacom data packet report IDs */
#define WACOM_REPORT_PENABLED 2 #define WACOM_REPORT_PENABLED 2
#define WACOM_REPORT_PENABLED_BT 3
#define WACOM_REPORT_INTUOSREAD 5 #define WACOM_REPORT_INTUOSREAD 5
#define WACOM_REPORT_INTUOSWRITE 6 #define WACOM_REPORT_INTUOSWRITE 6
#define WACOM_REPORT_INTUOSPAD 12 #define WACOM_REPORT_INTUOSPAD 12
...@@ -68,10 +69,12 @@ ...@@ -68,10 +69,12 @@
#define WACOM_QUIRK_BBTOUCH_LOWRES 0x0002 #define WACOM_QUIRK_BBTOUCH_LOWRES 0x0002
#define WACOM_QUIRK_NO_INPUT 0x0004 #define WACOM_QUIRK_NO_INPUT 0x0004
#define WACOM_QUIRK_MONITOR 0x0008 #define WACOM_QUIRK_MONITOR 0x0008
#define WACOM_QUIRK_BATTERY 0x0010
enum { enum {
PENPARTNER = 0, PENPARTNER = 0,
GRAPHIRE, GRAPHIRE,
GRAPHIRE_BT,
WACOM_G4, WACOM_G4,
PTU, PTU,
PL, PL,
...@@ -83,6 +86,7 @@ enum { ...@@ -83,6 +86,7 @@ enum {
INTUOS3L, INTUOS3L,
INTUOS4S, INTUOS4S,
INTUOS4, INTUOS4,
INTUOS4WL,
INTUOS4L, INTUOS4L,
INTUOS5S, INTUOS5S,
INTUOS5, INTUOS5,
...@@ -114,7 +118,6 @@ enum { ...@@ -114,7 +118,6 @@ enum {
struct wacom_features { struct wacom_features {
const char *name; const char *name;
int pktlen;
int x_max; int x_max;
int y_max; int y_max;
int pressure_max; int pressure_max;
...@@ -127,8 +130,8 @@ struct wacom_features { ...@@ -127,8 +130,8 @@ struct wacom_features {
int device_type; int device_type;
int x_phy; int x_phy;
int y_phy; int y_phy;
unsigned char unit; unsigned unit;
unsigned char unitExpo; int unitExpo;
int x_fuzz; int x_fuzz;
int y_fuzz; int y_fuzz;
int pressure_fuzz; int pressure_fuzz;
...@@ -137,6 +140,9 @@ struct wacom_features { ...@@ -137,6 +140,9 @@ struct wacom_features {
unsigned touch_max; unsigned touch_max;
int oVid; int oVid;
int oPid; int oPid;
int pktlen;
bool check_for_hid_type;
int hid_type;
}; };
struct wacom_shared { struct wacom_shared {
...@@ -150,16 +156,24 @@ struct wacom_shared { ...@@ -150,16 +156,24 @@ struct wacom_shared {
struct wacom_wac { struct wacom_wac {
char name[WACOM_NAME_MAX]; char name[WACOM_NAME_MAX];
unsigned char *data; char pad_name[WACOM_NAME_MAX];
char bat_name[WACOM_NAME_MAX];
char ac_name[WACOM_NAME_MAX];
unsigned char data[WACOM_PKGLEN_MAX];
int tool[2]; int tool[2];
int id[2]; int id[2];
__u32 serial[2]; __u32 serial[2];
struct wacom_features features; struct wacom_features features;
struct wacom_shared *shared; struct wacom_shared *shared;
struct input_dev *input; struct input_dev *input;
struct input_dev *pad_input;
int pid; int pid;
int battery_capacity; int battery_capacity;
int num_contacts_left; int num_contacts_left;
int bat_charging;
int ps_connected;
u8 bt_features;
u8 bt_high_speed;
}; };
#endif #endif
...@@ -665,4 +665,14 @@ config KEYBOARD_CROS_EC ...@@ -665,4 +665,14 @@ config KEYBOARD_CROS_EC
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called cros_ec_keyb. module will be called cros_ec_keyb.
config KEYBOARD_CAP1106
tristate "Microchip CAP1106 touch sensor"
depends on OF && I2C
select REGMAP_I2C
help
Say Y here to enable the CAP1106 touch sensor driver.
To compile this driver as a module, choose M here: the
module will be called cap1106.
endif endif
...@@ -11,6 +11,7 @@ obj-$(CONFIG_KEYBOARD_AMIGA) += amikbd.o ...@@ -11,6 +11,7 @@ obj-$(CONFIG_KEYBOARD_AMIGA) += amikbd.o
obj-$(CONFIG_KEYBOARD_ATARI) += atakbd.o obj-$(CONFIG_KEYBOARD_ATARI) += atakbd.o
obj-$(CONFIG_KEYBOARD_ATKBD) += atkbd.o obj-$(CONFIG_KEYBOARD_ATKBD) += atkbd.o
obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o
obj-$(CONFIG_KEYBOARD_CAP1106) += cap1106.o
obj-$(CONFIG_KEYBOARD_CLPS711X) += clps711x-keypad.o obj-$(CONFIG_KEYBOARD_CLPS711X) += clps711x-keypad.o
obj-$(CONFIG_KEYBOARD_CROS_EC) += cros_ec_keyb.o obj-$(CONFIG_KEYBOARD_CROS_EC) += cros_ec_keyb.o
obj-$(CONFIG_KEYBOARD_DAVINCI) += davinci_keyscan.o obj-$(CONFIG_KEYBOARD_DAVINCI) += davinci_keyscan.o
......
This diff is collapsed.
...@@ -531,8 +531,7 @@ static int imx_keypad_probe(struct platform_device *pdev) ...@@ -531,8 +531,7 @@ static int imx_keypad_probe(struct platform_device *pdev)
return 0; return 0;
} }
#ifdef CONFIG_PM_SLEEP static int __maybe_unused imx_kbd_suspend(struct device *dev)
static int imx_kbd_suspend(struct device *dev)
{ {
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
struct imx_keypad *kbd = platform_get_drvdata(pdev); struct imx_keypad *kbd = platform_get_drvdata(pdev);
...@@ -552,7 +551,7 @@ static int imx_kbd_suspend(struct device *dev) ...@@ -552,7 +551,7 @@ static int imx_kbd_suspend(struct device *dev)
return 0; return 0;
} }
static int imx_kbd_resume(struct device *dev) static int __maybe_unused imx_kbd_resume(struct device *dev)
{ {
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
struct imx_keypad *kbd = platform_get_drvdata(pdev); struct imx_keypad *kbd = platform_get_drvdata(pdev);
...@@ -575,7 +574,6 @@ static int imx_kbd_resume(struct device *dev) ...@@ -575,7 +574,6 @@ static int imx_kbd_resume(struct device *dev)
return ret; return ret;
} }
#endif
static SIMPLE_DEV_PM_OPS(imx_kbd_pm_ops, imx_kbd_suspend, imx_kbd_resume); static SIMPLE_DEV_PM_OPS(imx_kbd_pm_ops, imx_kbd_suspend, imx_kbd_resume);
......
...@@ -203,12 +203,17 @@ static int max7359_probe(struct i2c_client *client, ...@@ -203,12 +203,17 @@ static int max7359_probe(struct i2c_client *client,
dev_dbg(&client->dev, "keys FIFO is 0x%02x\n", ret); dev_dbg(&client->dev, "keys FIFO is 0x%02x\n", ret);
keypad = kzalloc(sizeof(struct max7359_keypad), GFP_KERNEL); keypad = devm_kzalloc(&client->dev, sizeof(struct max7359_keypad),
input_dev = input_allocate_device(); GFP_KERNEL);
if (!keypad || !input_dev) { if (!keypad) {
dev_err(&client->dev, "failed to allocate memory\n"); dev_err(&client->dev, "failed to allocate memory\n");
error = -ENOMEM; return -ENOMEM;
goto failed_free_mem; }
input_dev = devm_input_allocate_device(&client->dev);
if (!input_dev) {
dev_err(&client->dev, "failed to allocate input device\n");
return -ENOMEM;
} }
keypad->client = client; keypad->client = client;
...@@ -230,19 +235,20 @@ static int max7359_probe(struct i2c_client *client, ...@@ -230,19 +235,20 @@ static int max7359_probe(struct i2c_client *client,
max7359_build_keycode(keypad, keymap_data); max7359_build_keycode(keypad, keymap_data);
error = request_threaded_irq(client->irq, NULL, max7359_interrupt, error = devm_request_threaded_irq(&client->dev, client->irq, NULL,
IRQF_TRIGGER_LOW | IRQF_ONESHOT, max7359_interrupt,
client->name, keypad); IRQF_TRIGGER_LOW | IRQF_ONESHOT,
client->name, keypad);
if (error) { if (error) {
dev_err(&client->dev, "failed to register interrupt\n"); dev_err(&client->dev, "failed to register interrupt\n");
goto failed_free_mem; return error;
} }
/* Register the input device */ /* Register the input device */
error = input_register_device(input_dev); error = input_register_device(input_dev);
if (error) { if (error) {
dev_err(&client->dev, "failed to register input device\n"); dev_err(&client->dev, "failed to register input device\n");
goto failed_free_irq; return error;
} }
/* Initialize MAX7359 */ /* Initialize MAX7359 */
...@@ -251,24 +257,6 @@ static int max7359_probe(struct i2c_client *client, ...@@ -251,24 +257,6 @@ static int max7359_probe(struct i2c_client *client,
i2c_set_clientdata(client, keypad); i2c_set_clientdata(client, keypad);
device_init_wakeup(&client->dev, 1); device_init_wakeup(&client->dev, 1);
return 0;
failed_free_irq:
free_irq(client->irq, keypad);
failed_free_mem:
input_free_device(input_dev);
kfree(keypad);
return error;
}
static int max7359_remove(struct i2c_client *client)
{
struct max7359_keypad *keypad = i2c_get_clientdata(client);
free_irq(client->irq, keypad);
input_unregister_device(keypad->input_dev);
kfree(keypad);
return 0; return 0;
} }
...@@ -313,7 +301,6 @@ static struct i2c_driver max7359_i2c_driver = { ...@@ -313,7 +301,6 @@ static struct i2c_driver max7359_i2c_driver = {
.pm = &max7359_pm, .pm = &max7359_pm,
}, },
.probe = max7359_probe, .probe = max7359_probe,
.remove = max7359_remove,
.id_table = max7359_ids, .id_table = max7359_ids,
}; };
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment