Input: move input_device_id to mod_devicetable.h
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
@@ -286,19 +286,19 @@ static struct input_device_id *input_match_device(struct input_device_id *id, st
|
|||||||
for (; id->flags || id->driver_info; id++) {
|
for (; id->flags || id->driver_info; id++) {
|
||||||
|
|
||||||
if (id->flags & INPUT_DEVICE_ID_MATCH_BUS)
|
if (id->flags & INPUT_DEVICE_ID_MATCH_BUS)
|
||||||
if (id->id.bustype != dev->id.bustype)
|
if (id->bustype != dev->id.bustype)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (id->flags & INPUT_DEVICE_ID_MATCH_VENDOR)
|
if (id->flags & INPUT_DEVICE_ID_MATCH_VENDOR)
|
||||||
if (id->id.vendor != dev->id.vendor)
|
if (id->vendor != dev->id.vendor)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (id->flags & INPUT_DEVICE_ID_MATCH_PRODUCT)
|
if (id->flags & INPUT_DEVICE_ID_MATCH_PRODUCT)
|
||||||
if (id->id.product != dev->id.product)
|
if (id->product != dev->id.product)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (id->flags & INPUT_DEVICE_ID_MATCH_VERSION)
|
if (id->flags & INPUT_DEVICE_ID_MATCH_VERSION)
|
||||||
if (id->id.version != dev->id.version)
|
if (id->version != dev->id.version)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
MATCH_BIT(evbit, EV_MAX);
|
MATCH_BIT(evbit, EV_MAX);
|
||||||
|
@@ -12,8 +12,6 @@
|
|||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
#include <linux/time.h>
|
#include <linux/time.h>
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/device.h>
|
|
||||||
#include <linux/mod_devicetable.h>
|
|
||||||
#else
|
#else
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
@@ -577,15 +575,15 @@ struct input_absinfo {
|
|||||||
* Switch events
|
* Switch events
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define SW_0 0x00
|
#define SW_0 0x00
|
||||||
#define SW_1 0x01
|
#define SW_1 0x01
|
||||||
#define SW_2 0x02
|
#define SW_2 0x02
|
||||||
#define SW_3 0x03
|
#define SW_3 0x03
|
||||||
#define SW_4 0x04
|
#define SW_4 0x04
|
||||||
#define SW_5 0x05
|
#define SW_5 0x05
|
||||||
#define SW_6 0x06
|
#define SW_6 0x06
|
||||||
#define SW_7 0x07
|
#define SW_7 0x07
|
||||||
#define SW_MAX 0x0f
|
#define SW_MAX 0x0f
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Misc events
|
* Misc events
|
||||||
@@ -805,52 +803,16 @@ struct ff_effect {
|
|||||||
|
|
||||||
#define FF_MAX 0x7f
|
#define FF_MAX 0x7f
|
||||||
|
|
||||||
struct input_device_id {
|
|
||||||
|
|
||||||
kernel_ulong_t flags;
|
|
||||||
|
|
||||||
struct input_id id;
|
|
||||||
|
|
||||||
kernel_ulong_t evbit[EV_MAX/BITS_PER_LONG+1];
|
|
||||||
kernel_ulong_t keybit[KEY_MAX/BITS_PER_LONG+1];
|
|
||||||
kernel_ulong_t relbit[REL_MAX/BITS_PER_LONG+1];
|
|
||||||
kernel_ulong_t absbit[ABS_MAX/BITS_PER_LONG+1];
|
|
||||||
kernel_ulong_t mscbit[MSC_MAX/BITS_PER_LONG+1];
|
|
||||||
kernel_ulong_t ledbit[LED_MAX/BITS_PER_LONG+1];
|
|
||||||
kernel_ulong_t sndbit[SND_MAX/BITS_PER_LONG+1];
|
|
||||||
kernel_ulong_t ffbit[FF_MAX/BITS_PER_LONG+1];
|
|
||||||
kernel_ulong_t swbit[SW_MAX/BITS_PER_LONG+1];
|
|
||||||
|
|
||||||
kernel_ulong_t driver_info;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Structure for hotplug & device<->driver matching.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_BUS 1
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_VENDOR 2
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_PRODUCT 4
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_VERSION 8
|
|
||||||
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_EVBIT 0x010
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_KEYBIT 0x020
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_RELBIT 0x040
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_ABSBIT 0x080
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_MSCIT 0x100
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_LEDBIT 0x200
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_SNDBIT 0x400
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_FFBIT 0x800
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_SWBIT 0x1000
|
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In-kernel definitions.
|
* In-kernel definitions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <linux/device.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/timer.h>
|
#include <linux/timer.h>
|
||||||
|
#include <linux/mod_devicetable.h>
|
||||||
|
|
||||||
#define NBITS(x) (((x)/BITS_PER_LONG)+1)
|
#define NBITS(x) (((x)/BITS_PER_LONG)+1)
|
||||||
#define BIT(x) (1UL<<((x)%BITS_PER_LONG))
|
#define BIT(x) (1UL<<((x)%BITS_PER_LONG))
|
||||||
@@ -951,9 +913,49 @@ struct input_dev {
|
|||||||
};
|
};
|
||||||
#define to_input_dev(d) container_of(d, struct input_dev, cdev)
|
#define to_input_dev(d) container_of(d, struct input_dev, cdev)
|
||||||
|
|
||||||
#define INPUT_DEVICE_ID_MATCH_DEVICE\
|
/*
|
||||||
|
* Verify that we are in sync with input_device_id mod_devicetable.h #defines
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if EV_MAX != INPUT_DEVICE_ID_EV_MAX
|
||||||
|
#error "EV_MAX and INPUT_DEVICE_ID_EV_MAX do not match"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if KEY_MAX != INPUT_DEVICE_ID_KEY_MAX
|
||||||
|
#error "KEY_MAX and INPUT_DEVICE_ID_KEY_MAX do not match"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if REL_MAX != INPUT_DEVICE_ID_REL_MAX
|
||||||
|
#error "REL_MAX and INPUT_DEVICE_ID_REL_MAX do not match"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ABS_MAX != INPUT_DEVICE_ID_ABS_MAX
|
||||||
|
#error "ABS_MAX and INPUT_DEVICE_ID_ABS_MAX do not match"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if MSC_MAX != INPUT_DEVICE_ID_MSC_MAX
|
||||||
|
#error "MSC_MAX and INPUT_DEVICE_ID_MSC_MAX do not match"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if LED_MAX != INPUT_DEVICE_ID_LED_MAX
|
||||||
|
#error "LED_MAX and INPUT_DEVICE_ID_LED_MAX do not match"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SND_MAX != INPUT_DEVICE_ID_SND_MAX
|
||||||
|
#error "SND_MAX and INPUT_DEVICE_ID_SND_MAX do not match"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if FF_MAX != INPUT_DEVICE_ID_FF_MAX
|
||||||
|
#error "FF_MAX and INPUT_DEVICE_ID_FF_MAX do not match"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SW_MAX != INPUT_DEVICE_ID_SW_MAX
|
||||||
|
#error "SW_MAX and INPUT_DEVICE_ID_SW_MAX do not match"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_DEVICE \
|
||||||
(INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT)
|
(INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT)
|
||||||
#define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION\
|
#define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION \
|
||||||
(INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION)
|
(INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION)
|
||||||
|
|
||||||
struct input_handle;
|
struct input_handle;
|
||||||
|
@@ -249,4 +249,52 @@ struct i2c_device_id {
|
|||||||
__u16 id;
|
__u16 id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Input */
|
||||||
|
#define INPUT_DEVICE_ID_EV_MAX 0x1f
|
||||||
|
#define INPUT_DEVICE_ID_KEY_MAX 0x1ff
|
||||||
|
#define INPUT_DEVICE_ID_REL_MAX 0x0f
|
||||||
|
#define INPUT_DEVICE_ID_ABS_MAX 0x3f
|
||||||
|
#define INPUT_DEVICE_ID_MSC_MAX 0x07
|
||||||
|
#define INPUT_DEVICE_ID_LED_MAX 0x0f
|
||||||
|
#define INPUT_DEVICE_ID_SND_MAX 0x07
|
||||||
|
#define INPUT_DEVICE_ID_FF_MAX 0x7f
|
||||||
|
#define INPUT_DEVICE_ID_SW_MAX 0x0f
|
||||||
|
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_BUS 1
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_VENDOR 2
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_PRODUCT 4
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_VERSION 8
|
||||||
|
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_EVBIT 0x0010
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_KEYBIT 0x0020
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_RELBIT 0x0040
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_ABSBIT 0x0080
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_MSCIT 0x0100
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_LEDBIT 0x0200
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_SNDBIT 0x0400
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_FFBIT 0x0800
|
||||||
|
#define INPUT_DEVICE_ID_MATCH_SWBIT 0x1000
|
||||||
|
|
||||||
|
struct input_device_id {
|
||||||
|
|
||||||
|
kernel_ulong_t flags;
|
||||||
|
|
||||||
|
__u16 bustype;
|
||||||
|
__u16 vendor;
|
||||||
|
__u16 product;
|
||||||
|
__u16 version;
|
||||||
|
|
||||||
|
kernel_ulong_t evbit[INPUT_DEVICE_ID_EV_MAX / BITS_PER_LONG + 1];
|
||||||
|
kernel_ulong_t keybit[INPUT_DEVICE_ID_KEY_MAX / BITS_PER_LONG + 1];
|
||||||
|
kernel_ulong_t relbit[INPUT_DEVICE_ID_REL_MAX / BITS_PER_LONG + 1];
|
||||||
|
kernel_ulong_t absbit[INPUT_DEVICE_ID_ABS_MAX / BITS_PER_LONG + 1];
|
||||||
|
kernel_ulong_t mscbit[INPUT_DEVICE_ID_MSC_MAX / BITS_PER_LONG + 1];
|
||||||
|
kernel_ulong_t ledbit[INPUT_DEVICE_ID_LED_MAX / BITS_PER_LONG + 1];
|
||||||
|
kernel_ulong_t sndbit[INPUT_DEVICE_ID_SND_MAX / BITS_PER_LONG + 1];
|
||||||
|
kernel_ulong_t ffbit[INPUT_DEVICE_ID_FF_MAX / BITS_PER_LONG + 1];
|
||||||
|
kernel_ulong_t swbit[INPUT_DEVICE_ID_SW_MAX / BITS_PER_LONG + 1];
|
||||||
|
|
||||||
|
kernel_ulong_t driver_info;
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* LINUX_MOD_DEVICETABLE_H */
|
#endif /* LINUX_MOD_DEVICETABLE_H */
|
||||||
|
@@ -374,10 +374,10 @@ static void do_input(char *alias,
|
|||||||
kernel_ulong_t *arr, unsigned int min, unsigned int max)
|
kernel_ulong_t *arr, unsigned int min, unsigned int max)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
for (i = min; i < max; i++) {
|
|
||||||
if (arr[i/BITS_PER_LONG] & (1 << (i%BITS_PER_LONG)))
|
for (i = min; i < max; i++)
|
||||||
sprintf(alias+strlen(alias), "%X,*", i);
|
if (arr[i / BITS_PER_LONG] & (1 << (i%BITS_PER_LONG)))
|
||||||
}
|
sprintf(alias + strlen(alias), "%X,*", i);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* input:b0v0p0e0-eXkXrXaXmXlXsXfXwX where X is comma-separated %02X. */
|
/* input:b0v0p0e0-eXkXrXaXmXlXsXfXwX where X is comma-separated %02X. */
|
||||||
@@ -386,39 +386,37 @@ static int do_input_entry(const char *filename, struct input_device_id *id,
|
|||||||
{
|
{
|
||||||
sprintf(alias, "input:");
|
sprintf(alias, "input:");
|
||||||
|
|
||||||
ADD(alias, "b", id->flags&INPUT_DEVICE_ID_MATCH_BUS, id->id.bustype);
|
ADD(alias, "b", id->flags & INPUT_DEVICE_ID_MATCH_BUS, id->bustype);
|
||||||
ADD(alias, "v", id->flags&INPUT_DEVICE_ID_MATCH_VENDOR, id->id.vendor);
|
ADD(alias, "v", id->flags & INPUT_DEVICE_ID_MATCH_VENDOR, id->vendor);
|
||||||
ADD(alias, "p", id->flags&INPUT_DEVICE_ID_MATCH_PRODUCT,
|
ADD(alias, "p", id->flags & INPUT_DEVICE_ID_MATCH_PRODUCT, id->product);
|
||||||
id->id.product);
|
ADD(alias, "e", id->flags & INPUT_DEVICE_ID_MATCH_VERSION, id->version);
|
||||||
ADD(alias, "e", id->flags&INPUT_DEVICE_ID_MATCH_VERSION,
|
|
||||||
id->id.version);
|
|
||||||
|
|
||||||
sprintf(alias + strlen(alias), "-e*");
|
sprintf(alias + strlen(alias), "-e*");
|
||||||
if (id->flags&INPUT_DEVICE_ID_MATCH_EVBIT)
|
if (id->flags & INPUT_DEVICE_ID_MATCH_EVBIT)
|
||||||
do_input(alias, id->evbit, 0, EV_MAX);
|
do_input(alias, id->evbit, 0, EV_MAX);
|
||||||
sprintf(alias + strlen(alias), "k*");
|
sprintf(alias + strlen(alias), "k*");
|
||||||
if (id->flags&INPUT_DEVICE_ID_MATCH_KEYBIT)
|
if (id->flags & INPUT_DEVICE_ID_MATCH_KEYBIT)
|
||||||
do_input(alias, id->keybit, KEY_MIN_INTERESTING, KEY_MAX);
|
do_input(alias, id->keybit, KEY_MIN_INTERESTING, KEY_MAX);
|
||||||
sprintf(alias + strlen(alias), "r*");
|
sprintf(alias + strlen(alias), "r*");
|
||||||
if (id->flags&INPUT_DEVICE_ID_MATCH_RELBIT)
|
if (id->flags & INPUT_DEVICE_ID_MATCH_RELBIT)
|
||||||
do_input(alias, id->relbit, 0, REL_MAX);
|
do_input(alias, id->relbit, 0, REL_MAX);
|
||||||
sprintf(alias + strlen(alias), "a*");
|
sprintf(alias + strlen(alias), "a*");
|
||||||
if (id->flags&INPUT_DEVICE_ID_MATCH_ABSBIT)
|
if (id->flags & INPUT_DEVICE_ID_MATCH_ABSBIT)
|
||||||
do_input(alias, id->absbit, 0, ABS_MAX);
|
do_input(alias, id->absbit, 0, ABS_MAX);
|
||||||
sprintf(alias + strlen(alias), "m*");
|
sprintf(alias + strlen(alias), "m*");
|
||||||
if (id->flags&INPUT_DEVICE_ID_MATCH_MSCIT)
|
if (id->flags & INPUT_DEVICE_ID_MATCH_MSCIT)
|
||||||
do_input(alias, id->mscbit, 0, MSC_MAX);
|
do_input(alias, id->mscbit, 0, MSC_MAX);
|
||||||
sprintf(alias + strlen(alias), "l*");
|
sprintf(alias + strlen(alias), "l*");
|
||||||
if (id->flags&INPUT_DEVICE_ID_MATCH_LEDBIT)
|
if (id->flags & INPUT_DEVICE_ID_MATCH_LEDBIT)
|
||||||
do_input(alias, id->ledbit, 0, LED_MAX);
|
do_input(alias, id->ledbit, 0, LED_MAX);
|
||||||
sprintf(alias + strlen(alias), "s*");
|
sprintf(alias + strlen(alias), "s*");
|
||||||
if (id->flags&INPUT_DEVICE_ID_MATCH_SNDBIT)
|
if (id->flags & INPUT_DEVICE_ID_MATCH_SNDBIT)
|
||||||
do_input(alias, id->sndbit, 0, SND_MAX);
|
do_input(alias, id->sndbit, 0, SND_MAX);
|
||||||
sprintf(alias + strlen(alias), "f*");
|
sprintf(alias + strlen(alias), "f*");
|
||||||
if (id->flags&INPUT_DEVICE_ID_MATCH_FFBIT)
|
if (id->flags & INPUT_DEVICE_ID_MATCH_FFBIT)
|
||||||
do_input(alias, id->ffbit, 0, FF_MAX);
|
do_input(alias, id->ffbit, 0, FF_MAX);
|
||||||
sprintf(alias + strlen(alias), "w*");
|
sprintf(alias + strlen(alias), "w*");
|
||||||
if (id->flags&INPUT_DEVICE_ID_MATCH_SWBIT)
|
if (id->flags & INPUT_DEVICE_ID_MATCH_SWBIT)
|
||||||
do_input(alias, id->swbit, 0, SW_MAX);
|
do_input(alias, id->swbit, 0, SW_MAX);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user