mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Merge branch 'next' into for-linus
Prepare second set of updates for 3.7 merge window (Wacom driver update and patches extending number of input minors).
This commit is contained in:
commit
0cc8d6a9d2
29 changed files with 1231 additions and 813 deletions
|
|
@ -414,7 +414,7 @@ struct hid_field {
|
|||
__u16 dpad; /* dpad input code */
|
||||
};
|
||||
|
||||
#define HID_MAX_FIELDS 128
|
||||
#define HID_MAX_FIELDS 256
|
||||
|
||||
struct hid_report {
|
||||
struct list_head list;
|
||||
|
|
@ -626,6 +626,7 @@ struct hid_usage_id {
|
|||
* @report_fixup: called before report descriptor parsing (NULL means nop)
|
||||
* @input_mapping: invoked on input registering before mapping an usage
|
||||
* @input_mapped: invoked on input registering after mapping an usage
|
||||
* @input_configured: invoked just before the device is registered
|
||||
* @feature_mapping: invoked on feature registering
|
||||
* @suspend: invoked on suspend (NULL means nop)
|
||||
* @resume: invoked on resume if device was not reset (NULL means nop)
|
||||
|
|
@ -670,6 +671,8 @@ struct hid_driver {
|
|||
int (*input_mapped)(struct hid_device *hdev,
|
||||
struct hid_input *hidinput, struct hid_field *field,
|
||||
struct hid_usage *usage, unsigned long **bit, int *max);
|
||||
void (*input_configured)(struct hid_device *hdev,
|
||||
struct hid_input *hidinput);
|
||||
void (*feature_mapping)(struct hid_device *hdev,
|
||||
struct hid_field *field,
|
||||
struct hid_usage *usage);
|
||||
|
|
|
|||
|
|
@ -1168,6 +1168,18 @@ struct ff_effect {
|
|||
#include <linux/timer.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
|
||||
/**
|
||||
* struct input_value - input value representation
|
||||
* @type: type of value (EV_KEY, EV_ABS, etc)
|
||||
* @code: the value code
|
||||
* @value: the value
|
||||
*/
|
||||
struct input_value {
|
||||
__u16 type;
|
||||
__u16 code;
|
||||
__s32 value;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct input_dev - represents an input device
|
||||
* @name: name of the device
|
||||
|
|
@ -1203,11 +1215,7 @@ struct ff_effect {
|
|||
* software autorepeat
|
||||
* @timer: timer for software autorepeat
|
||||
* @rep: current values for autorepeat parameters (delay, rate)
|
||||
* @mt: pointer to array of struct input_mt_slot holding current values
|
||||
* of tracked contacts
|
||||
* @mtsize: number of MT slots the device uses
|
||||
* @slot: MT slot currently being transmitted
|
||||
* @trkid: stores MT tracking ID for the current contact
|
||||
* @mt: pointer to multitouch state
|
||||
* @absinfo: array of &struct input_absinfo elements holding information
|
||||
* about absolute axes (current value, min, max, flat, fuzz,
|
||||
* resolution)
|
||||
|
|
@ -1244,7 +1252,6 @@ struct ff_effect {
|
|||
* last user closes the device
|
||||
* @going_away: marks devices that are in a middle of unregistering and
|
||||
* causes input_open_device*() fail with -ENODEV.
|
||||
* @sync: set to %true when there were no new events since last EV_SYN
|
||||
* @dev: driver model's view of this device
|
||||
* @h_list: list of input handles associated with the device. When
|
||||
* accessing the list dev->mutex must be held
|
||||
|
|
@ -1287,10 +1294,7 @@ struct input_dev {
|
|||
|
||||
int rep[REP_CNT];
|
||||
|
||||
struct input_mt_slot *mt;
|
||||
int mtsize;
|
||||
int slot;
|
||||
int trkid;
|
||||
struct input_mt *mt;
|
||||
|
||||
struct input_absinfo *absinfo;
|
||||
|
||||
|
|
@ -1312,12 +1316,14 @@ struct input_dev {
|
|||
unsigned int users;
|
||||
bool going_away;
|
||||
|
||||
bool sync;
|
||||
|
||||
struct device dev;
|
||||
|
||||
struct list_head h_list;
|
||||
struct list_head node;
|
||||
|
||||
unsigned int num_vals;
|
||||
unsigned int max_vals;
|
||||
struct input_value *vals;
|
||||
};
|
||||
#define to_input_dev(d) container_of(d, struct input_dev, dev)
|
||||
|
||||
|
|
@ -1378,6 +1384,9 @@ struct input_handle;
|
|||
* @event: event handler. This method is being called by input core with
|
||||
* interrupts disabled and dev->event_lock spinlock held and so
|
||||
* it may not sleep
|
||||
* @events: event sequence handler. This method is being called by
|
||||
* input core with interrupts disabled and dev->event_lock
|
||||
* spinlock held and so it may not sleep
|
||||
* @filter: similar to @event; separates normal event handlers from
|
||||
* "filters".
|
||||
* @match: called after comparing device's id with handler's id_table
|
||||
|
|
@ -1387,8 +1396,8 @@ struct input_handle;
|
|||
* @start: starts handler for given handle. This function is called by
|
||||
* input core right after connect() method and also when a process
|
||||
* that "grabbed" a device releases it
|
||||
* @fops: file operations this driver implements
|
||||
* @minor: beginning of range of 32 minors for devices this driver
|
||||
* @legacy_minors: set to %true by drivers using legacy minor ranges
|
||||
* @minor: beginning of range of 32 legacy minors for devices this driver
|
||||
* can provide
|
||||
* @name: name of the handler, to be shown in /proc/bus/input/handlers
|
||||
* @id_table: pointer to a table of input_device_ids this driver can
|
||||
|
|
@ -1414,13 +1423,15 @@ struct input_handler {
|
|||
void *private;
|
||||
|
||||
void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
|
||||
void (*events)(struct input_handle *handle,
|
||||
const struct input_value *vals, unsigned int count);
|
||||
bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
|
||||
bool (*match)(struct input_handler *handler, struct input_dev *dev);
|
||||
int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id);
|
||||
void (*disconnect)(struct input_handle *handle);
|
||||
void (*start)(struct input_handle *handle);
|
||||
|
||||
const struct file_operations *fops;
|
||||
bool legacy_minors;
|
||||
int minor;
|
||||
const char *name;
|
||||
|
||||
|
|
@ -1488,6 +1499,10 @@ void input_reset_device(struct input_dev *);
|
|||
int __must_check input_register_handler(struct input_handler *);
|
||||
void input_unregister_handler(struct input_handler *);
|
||||
|
||||
int __must_check input_get_new_minor(int legacy_base, unsigned int legacy_num,
|
||||
bool allow_dynamic);
|
||||
void input_free_minor(unsigned int minor);
|
||||
|
||||
int input_handler_for_each_handle(struct input_handler *, void *data,
|
||||
int (*fn)(struct input_handle *, void *));
|
||||
|
||||
|
|
|
|||
|
|
@ -15,12 +15,41 @@
|
|||
|
||||
#define TRKID_MAX 0xffff
|
||||
|
||||
#define INPUT_MT_POINTER 0x0001 /* pointer device, e.g. trackpad */
|
||||
#define INPUT_MT_DIRECT 0x0002 /* direct device, e.g. touchscreen */
|
||||
#define INPUT_MT_DROP_UNUSED 0x0004 /* drop contacts not seen in frame */
|
||||
#define INPUT_MT_TRACK 0x0008 /* use in-kernel tracking */
|
||||
|
||||
/**
|
||||
* struct input_mt_slot - represents the state of an input MT slot
|
||||
* @abs: holds current values of ABS_MT axes for this slot
|
||||
* @frame: last frame at which input_mt_report_slot_state() was called
|
||||
* @key: optional driver designation of this slot
|
||||
*/
|
||||
struct input_mt_slot {
|
||||
int abs[ABS_MT_LAST - ABS_MT_FIRST + 1];
|
||||
unsigned int frame;
|
||||
unsigned int key;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct input_mt - state of tracked contacts
|
||||
* @trkid: stores MT tracking ID for the next contact
|
||||
* @num_slots: number of MT slots the device uses
|
||||
* @slot: MT slot currently being transmitted
|
||||
* @flags: input_mt operation flags
|
||||
* @frame: increases every time input_mt_sync_frame() is called
|
||||
* @red: reduced cost matrix for in-kernel tracking
|
||||
* @slots: array of slots holding current values of tracked contacts
|
||||
*/
|
||||
struct input_mt {
|
||||
int trkid;
|
||||
int num_slots;
|
||||
int slot;
|
||||
unsigned int flags;
|
||||
unsigned int frame;
|
||||
int *red;
|
||||
struct input_mt_slot slots[];
|
||||
};
|
||||
|
||||
static inline void input_mt_set_value(struct input_mt_slot *slot,
|
||||
|
|
@ -35,12 +64,18 @@ static inline int input_mt_get_value(const struct input_mt_slot *slot,
|
|||
return slot->abs[code - ABS_MT_FIRST];
|
||||
}
|
||||
|
||||
int input_mt_init_slots(struct input_dev *dev, unsigned int num_slots);
|
||||
static inline bool input_mt_is_active(const struct input_mt_slot *slot)
|
||||
{
|
||||
return input_mt_get_value(slot, ABS_MT_TRACKING_ID) >= 0;
|
||||
}
|
||||
|
||||
int input_mt_init_slots(struct input_dev *dev, unsigned int num_slots,
|
||||
unsigned int flags);
|
||||
void input_mt_destroy_slots(struct input_dev *dev);
|
||||
|
||||
static inline int input_mt_new_trkid(struct input_dev *dev)
|
||||
static inline int input_mt_new_trkid(struct input_mt *mt)
|
||||
{
|
||||
return dev->trkid++ & TRKID_MAX;
|
||||
return mt->trkid++ & TRKID_MAX;
|
||||
}
|
||||
|
||||
static inline void input_mt_slot(struct input_dev *dev, int slot)
|
||||
|
|
@ -64,4 +99,20 @@ void input_mt_report_slot_state(struct input_dev *dev,
|
|||
void input_mt_report_finger_count(struct input_dev *dev, int count);
|
||||
void input_mt_report_pointer_emulation(struct input_dev *dev, bool use_count);
|
||||
|
||||
void input_mt_sync_frame(struct input_dev *dev);
|
||||
|
||||
/**
|
||||
* struct input_mt_pos - contact position
|
||||
* @x: horizontal coordinate
|
||||
* @y: vertical coordinate
|
||||
*/
|
||||
struct input_mt_pos {
|
||||
s16 x, y;
|
||||
};
|
||||
|
||||
int input_mt_assign_slots(struct input_dev *dev, int *slots,
|
||||
const struct input_mt_pos *pos, int num_pos);
|
||||
|
||||
int input_mt_get_slot_by_key(struct input_dev *dev, int key);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in a new issue