Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: ad7877 - keep dma rx buffers in seperate cache lines Input: psmouse - reset all types of mice before reconnecting Input: elantech - use all 3 bytes when checking version Input: iforce - fix Guillemot Jet Leader 3D entry Input: iforce - add Guillemot Jet Leader Force Feedback
This commit is contained in:
commit
aa86f26bd8
6 changed files with 42 additions and 23 deletions
|
@ -54,6 +54,9 @@ static signed short btn_avb_wheel[] =
|
|||
static signed short abs_joystick[] =
|
||||
{ ABS_X, ABS_Y, ABS_THROTTLE, ABS_HAT0X, ABS_HAT0Y, -1 };
|
||||
|
||||
static signed short abs_joystick_rudder[] =
|
||||
{ ABS_X, ABS_Y, ABS_THROTTLE, ABS_RUDDER, ABS_HAT0X, ABS_HAT0Y, -1 };
|
||||
|
||||
static signed short abs_avb_pegasus[] =
|
||||
{ ABS_X, ABS_Y, ABS_THROTTLE, ABS_RUDDER, ABS_HAT0X, ABS_HAT0Y,
|
||||
ABS_HAT1X, ABS_HAT1Y, -1 };
|
||||
|
@ -76,8 +79,9 @@ static struct iforce_device iforce_device[] = {
|
|||
{ 0x061c, 0xc0a4, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce }, //?
|
||||
{ 0x061c, 0xc084, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce },
|
||||
{ 0x06f8, 0x0001, "Guillemot Race Leader Force Feedback", btn_wheel, abs_wheel, ff_iforce }, //?
|
||||
{ 0x06f8, 0x0001, "Guillemot Jet Leader Force Feedback", btn_joystick, abs_joystick_rudder, ff_iforce },
|
||||
{ 0x06f8, 0x0004, "Guillemot Force Feedback Racing Wheel", btn_wheel, abs_wheel, ff_iforce }, //?
|
||||
{ 0x06f8, 0x0004, "Gullemot Jet Leader 3D", btn_joystick, abs_joystick, ff_iforce }, //?
|
||||
{ 0x06f8, 0xa302, "Guillemot Jet Leader 3D", btn_joystick, abs_joystick, ff_iforce }, //?
|
||||
{ 0x06d6, 0x29bc, "Trust Force Feedback Race Master", btn_wheel, abs_wheel, ff_iforce },
|
||||
{ 0x0000, 0x0000, "Unknown I-Force Device [%04x:%04x]", btn_joystick, abs_joystick, ff_iforce }
|
||||
};
|
||||
|
|
|
@ -212,6 +212,7 @@ static struct usb_device_id iforce_usb_ids [] = {
|
|||
{ USB_DEVICE(0x061c, 0xc0a4) }, /* ACT LABS Force RS */
|
||||
{ USB_DEVICE(0x061c, 0xc084) }, /* ACT LABS Force RS */
|
||||
{ USB_DEVICE(0x06f8, 0x0001) }, /* Guillemot Race Leader Force Feedback */
|
||||
{ USB_DEVICE(0x06f8, 0x0003) }, /* Guillemot Jet Leader Force Feedback */
|
||||
{ USB_DEVICE(0x06f8, 0x0004) }, /* Guillemot Force Feedback Racing Wheel */
|
||||
{ USB_DEVICE(0x06f8, 0xa302) }, /* Guillemot Jet Leader 3D */
|
||||
{ } /* Terminating entry */
|
||||
|
|
|
@ -185,7 +185,7 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
|
|||
int fingers;
|
||||
static int old_fingers;
|
||||
|
||||
if (etd->fw_version_maj == 0x01) {
|
||||
if (etd->fw_version < 0x020000) {
|
||||
/*
|
||||
* byte 0: D U p1 p2 1 p3 R L
|
||||
* byte 1: f 0 th tw x9 x8 y9 y8
|
||||
|
@ -227,7 +227,7 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
|
|||
input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
|
||||
input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
|
||||
|
||||
if ((etd->fw_version_maj == 0x01) &&
|
||||
if (etd->fw_version < 0x020000 &&
|
||||
(etd->capabilities & ETP_CAP_HAS_ROCKER)) {
|
||||
/* rocker up */
|
||||
input_report_key(dev, BTN_FORWARD, packet[0] & 0x40);
|
||||
|
@ -321,7 +321,7 @@ static int elantech_check_parity_v1(struct psmouse *psmouse)
|
|||
unsigned char p1, p2, p3;
|
||||
|
||||
/* Parity bits are placed differently */
|
||||
if (etd->fw_version_maj == 0x01) {
|
||||
if (etd->fw_version < 0x020000) {
|
||||
/* byte 0: D U p1 p2 1 p3 R L */
|
||||
p1 = (packet[0] & 0x20) >> 5;
|
||||
p2 = (packet[0] & 0x10) >> 4;
|
||||
|
@ -457,7 +457,7 @@ static void elantech_set_input_params(struct psmouse *psmouse)
|
|||
switch (etd->hw_version) {
|
||||
case 1:
|
||||
/* Rocker button */
|
||||
if ((etd->fw_version_maj == 0x01) &&
|
||||
if (etd->fw_version < 0x020000 &&
|
||||
(etd->capabilities & ETP_CAP_HAS_ROCKER)) {
|
||||
__set_bit(BTN_FORWARD, dev->keybit);
|
||||
__set_bit(BTN_BACK, dev->keybit);
|
||||
|
@ -686,15 +686,14 @@ int elantech_init(struct psmouse *psmouse)
|
|||
pr_err("elantech.c: failed to query firmware version.\n");
|
||||
goto init_fail;
|
||||
}
|
||||
etd->fw_version_maj = param[0];
|
||||
etd->fw_version_min = param[2];
|
||||
|
||||
etd->fw_version = (param[0] << 16) | (param[1] << 8) | param[2];
|
||||
|
||||
/*
|
||||
* Assume every version greater than this is new EeePC style
|
||||
* hardware with 6 byte packets
|
||||
*/
|
||||
if ((etd->fw_version_maj == 0x02 && etd->fw_version_min >= 0x30) ||
|
||||
etd->fw_version_maj > 0x02) {
|
||||
if (etd->fw_version >= 0x020030) {
|
||||
etd->hw_version = 2;
|
||||
/* For now show extra debug information */
|
||||
etd->debug = 1;
|
||||
|
@ -704,8 +703,9 @@ int elantech_init(struct psmouse *psmouse)
|
|||
etd->hw_version = 1;
|
||||
etd->paritycheck = 1;
|
||||
}
|
||||
pr_info("elantech.c: assuming hardware version %d, firmware version %d.%d\n",
|
||||
etd->hw_version, etd->fw_version_maj, etd->fw_version_min);
|
||||
|
||||
pr_info("elantech.c: assuming hardware version %d, firmware version %d.%d.%d\n",
|
||||
etd->hw_version, param[0], param[1], param[2]);
|
||||
|
||||
if (synaptics_send_cmd(psmouse, ETP_CAPABILITIES_QUERY, param)) {
|
||||
pr_err("elantech.c: failed to query capabilities.\n");
|
||||
|
@ -720,8 +720,8 @@ int elantech_init(struct psmouse *psmouse)
|
|||
* a touch action starts causing the mouse cursor or scrolled page
|
||||
* to jump. Enable a workaround.
|
||||
*/
|
||||
if (etd->fw_version_maj == 0x02 && etd->fw_version_min == 0x22) {
|
||||
pr_info("elantech.c: firmware version 2.34 detected, "
|
||||
if (etd->fw_version == 0x020022) {
|
||||
pr_info("elantech.c: firmware version 2.0.34 detected, "
|
||||
"enabling jumpy cursor workaround\n");
|
||||
etd->jumpy_cursor = 1;
|
||||
}
|
||||
|
|
|
@ -100,11 +100,10 @@ struct elantech_data {
|
|||
unsigned char reg_26;
|
||||
unsigned char debug;
|
||||
unsigned char capabilities;
|
||||
unsigned char fw_version_maj;
|
||||
unsigned char fw_version_min;
|
||||
unsigned char hw_version;
|
||||
unsigned char paritycheck;
|
||||
unsigned char jumpy_cursor;
|
||||
unsigned char hw_version;
|
||||
unsigned int fw_version;
|
||||
unsigned char parity[256];
|
||||
};
|
||||
|
||||
|
|
|
@ -1394,6 +1394,7 @@ static int psmouse_reconnect(struct serio *serio)
|
|||
struct psmouse *psmouse = serio_get_drvdata(serio);
|
||||
struct psmouse *parent = NULL;
|
||||
struct serio_driver *drv = serio->drv;
|
||||
unsigned char type;
|
||||
int rc = -1;
|
||||
|
||||
if (!drv || !psmouse) {
|
||||
|
@ -1413,10 +1414,15 @@ static int psmouse_reconnect(struct serio *serio)
|
|||
if (psmouse->reconnect) {
|
||||
if (psmouse->reconnect(psmouse))
|
||||
goto out;
|
||||
} else if (psmouse_probe(psmouse) < 0 ||
|
||||
psmouse->type != psmouse_extensions(psmouse,
|
||||
psmouse_max_proto, false)) {
|
||||
goto out;
|
||||
} else {
|
||||
psmouse_reset(psmouse);
|
||||
|
||||
if (psmouse_probe(psmouse) < 0)
|
||||
goto out;
|
||||
|
||||
type = psmouse_extensions(psmouse, psmouse_max_proto, false);
|
||||
if (psmouse->type != type)
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* ok, the device type (and capabilities) match the old one,
|
||||
|
|
|
@ -156,9 +156,14 @@ struct ser_req {
|
|||
u16 reset;
|
||||
u16 ref_on;
|
||||
u16 command;
|
||||
u16 sample;
|
||||
struct spi_message msg;
|
||||
struct spi_transfer xfer[6];
|
||||
|
||||
/*
|
||||
* DMA (thus cache coherency maintenance) requires the
|
||||
* transfer buffers to live in their own cache lines.
|
||||
*/
|
||||
u16 sample ____cacheline_aligned;
|
||||
};
|
||||
|
||||
struct ad7877 {
|
||||
|
@ -182,8 +187,6 @@ struct ad7877 {
|
|||
u8 averaging;
|
||||
u8 pen_down_acc_interval;
|
||||
|
||||
u16 conversion_data[AD7877_NR_SENSE];
|
||||
|
||||
struct spi_transfer xfer[AD7877_NR_SENSE + 2];
|
||||
struct spi_message msg;
|
||||
|
||||
|
@ -195,6 +198,12 @@ struct ad7877 {
|
|||
spinlock_t lock;
|
||||
struct timer_list timer; /* P: lock */
|
||||
unsigned pending:1; /* P: lock */
|
||||
|
||||
/*
|
||||
* DMA (thus cache coherency maintenance) requires the
|
||||
* transfer buffers to live in their own cache lines.
|
||||
*/
|
||||
u16 conversion_data[AD7877_NR_SENSE] ____cacheline_aligned;
|
||||
};
|
||||
|
||||
static int gpio3;
|
||||
|
|
Loading…
Reference in a new issue