Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d4ae84a8 authored by Dmitry Torokhov's avatar Dmitry Torokhov
Browse files

Input: elantech - enforce common prefix on messages



Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent f8300ab8
Loading
Loading
Loading
Loading
+32 −35
Original line number Original line Diff line number Diff line
@@ -10,6 +10,8 @@
 * Trademarks are the property of their respective owners.
 * Trademarks are the property of their respective owners.
 */
 */


#define pr_fmt(fmt) KBUILD_BASENAME ": " fmt

#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/module.h>
@@ -19,10 +21,10 @@
#include "psmouse.h"
#include "psmouse.h"
#include "elantech.h"
#include "elantech.h"


#define elantech_debug(format, arg...)				\
#define elantech_debug(fmt, ...)					\
	do {								\
	do {								\
		if (etd->debug)						\
		if (etd->debug)						\
			printk(KERN_DEBUG format, ##arg);	\
			printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__);	\
	} while (0)
	} while (0)


static bool force_elantech;
static bool force_elantech;
@@ -37,7 +39,7 @@ static int synaptics_send_cmd(struct psmouse *psmouse, unsigned char c,
{
{
	if (psmouse_sliced_command(psmouse, c) ||
	if (psmouse_sliced_command(psmouse, c) ||
	    ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETINFO)) {
	    ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETINFO)) {
		pr_err("elantech.c: synaptics_send_cmd query 0x%02x failed.\n", c);
		pr_err("synaptics_send_cmd query 0x%02x failed.\n", c);
		return -1;
		return -1;
	}
	}


@@ -60,13 +62,13 @@ static int elantech_ps2_command(struct psmouse *psmouse,
		if (rc == 0)
		if (rc == 0)
			break;
			break;
		tries--;
		tries--;
		elantech_debug("elantech.c: retrying ps2 command 0x%02x (%d).\n",
		elantech_debug("retrying ps2 command 0x%02x (%d).\n",
				command, tries);
				command, tries);
		msleep(ETP_PS2_COMMAND_DELAY);
		msleep(ETP_PS2_COMMAND_DELAY);
	} while (tries > 0);
	} while (tries > 0);


	if (rc)
	if (rc)
		pr_err("elantech.c: ps2 command 0x%02x failed.\n", command);
		pr_err("ps2 command 0x%02x failed.\n", command);


	return rc;
	return rc;
}
}
@@ -108,7 +110,7 @@ static int elantech_read_reg(struct psmouse *psmouse, unsigned char reg,
	}
	}


	if (rc)
	if (rc)
		pr_err("elantech.c: failed to read register 0x%02x.\n", reg);
		pr_err("failed to read register 0x%02x.\n", reg);
	else
	else
		*val = param[0];
		*val = param[0];


@@ -154,7 +156,7 @@ static int elantech_write_reg(struct psmouse *psmouse, unsigned char reg,
	}
	}


	if (rc)
	if (rc)
		pr_err("elantech.c: failed to write register 0x%02x with value 0x%02x.\n",
		pr_err("failed to write register 0x%02x with value 0x%02x.\n",
			reg, val);
			reg, val);


	return rc;
	return rc;
@@ -167,7 +169,7 @@ static void elantech_packet_dump(unsigned char *packet, int size)
{
{
	int	i;
	int	i;


	printk(KERN_DEBUG "elantech.c: PS/2 packet [");
	printk(KERN_DEBUG pr_fmt("PS/2 packet ["));
	for (i = 0; i < size; i++)
	for (i = 0; i < size; i++)
		printk("%s0x%02x ", (i) ? ", " : " ", packet[i]);
		printk("%s0x%02x ", (i) ? ", " : " ", packet[i]);
	printk("]\n");
	printk("]\n");
@@ -203,7 +205,7 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
	if (etd->jumpy_cursor) {
	if (etd->jumpy_cursor) {
		/* Discard packets that are likely to have bogus coordinates */
		/* Discard packets that are likely to have bogus coordinates */
		if (fingers > old_fingers) {
		if (fingers > old_fingers) {
			elantech_debug("elantech.c: discarding packet\n");
			elantech_debug("discarding packet\n");
			goto discard_packet_v1;
			goto discard_packet_v1;
		}
		}
	}
	}
@@ -413,23 +415,21 @@ static int elantech_set_absolute_mode(struct psmouse *psmouse)
			if (rc == 0)
			if (rc == 0)
				break;
				break;
			tries--;
			tries--;
			elantech_debug("elantech.c: retrying read (%d).\n",
			elantech_debug("retrying read (%d).\n", tries);
					tries);
			msleep(ETP_READ_BACK_DELAY);
			msleep(ETP_READ_BACK_DELAY);
		} while (tries > 0);
		} while (tries > 0);


		if (rc) {
		if (rc) {
			pr_err("elantech.c: failed to read back register 0x10.\n");
			pr_err("failed to read back register 0x10.\n");
		} else if (etd->hw_version == 1 &&
		} else if (etd->hw_version == 1 &&
			   !(val & ETP_R10_ABSOLUTE_MODE)) {
			   !(val & ETP_R10_ABSOLUTE_MODE)) {
			pr_err("elantech.c: touchpad refuses "
			pr_err("touchpad refuses to switch to absolute mode.\n");
				"to switch to absolute mode.\n");
			rc = -1;
			rc = -1;
		}
		}
	}
	}


	if (rc)
	if (rc)
		pr_err("elantech.c: failed to initialise registers.\n");
		pr_err("failed to initialise registers.\n");


	return rc;
	return rc;
}
}
@@ -590,7 +590,7 @@ int elantech_detect(struct psmouse *psmouse, bool set_properties)
	    ps2_command(ps2dev,  NULL, PSMOUSE_CMD_SETSCALE11) ||
	    ps2_command(ps2dev,  NULL, PSMOUSE_CMD_SETSCALE11) ||
	    ps2_command(ps2dev,  NULL, PSMOUSE_CMD_SETSCALE11) ||
	    ps2_command(ps2dev,  NULL, PSMOUSE_CMD_SETSCALE11) ||
	    ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) {
	    ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) {
		pr_debug("elantech.c: sending Elantech magic knock failed.\n");
		pr_debug("sending Elantech magic knock failed.\n");
		return -1;
		return -1;
	}
	}


@@ -599,8 +599,7 @@ int elantech_detect(struct psmouse *psmouse, bool set_properties)
	 * set of magic numbers
	 * set of magic numbers
	 */
	 */
	if (param[0] != 0x3c || param[1] != 0x03 || param[2] != 0xc8) {
	if (param[0] != 0x3c || param[1] != 0x03 || param[2] != 0xc8) {
		pr_debug("elantech.c: "
		pr_debug("unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n",
			 "unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n",
			 param[0], param[1], param[2]);
			 param[0], param[1], param[2]);
		return -1;
		return -1;
	}
	}
@@ -611,20 +610,20 @@ int elantech_detect(struct psmouse *psmouse, bool set_properties)
	 * to Elantech magic knock and there might be more.
	 * to Elantech magic knock and there might be more.
	 */
	 */
	if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) {
	if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) {
		pr_debug("elantech.c: failed to query firmware version.\n");
		pr_debug("failed to query firmware version.\n");
		return -1;
		return -1;
	}
	}


	pr_debug("elantech.c: Elantech version query result 0x%02x, 0x%02x, 0x%02x.\n",
	pr_debug("Elantech version query result 0x%02x, 0x%02x, 0x%02x.\n",
		 param[0], param[1], param[2]);
		 param[0], param[1], param[2]);


	if (param[0] == 0 || param[1] != 0) {
	if (param[0] == 0 || param[1] != 0) {
		if (!force_elantech) {
		if (!force_elantech) {
			pr_debug("elantech.c: Probably not a real Elantech touchpad. Aborting.\n");
			pr_debug("Probably not a real Elantech touchpad. Aborting.\n");
			return -1;
			return -1;
		}
		}


		pr_debug("elantech.c: Probably not a real Elantech touchpad. Enabling anyway due to force_elantech.\n");
		pr_debug("Probably not a real Elantech touchpad. Enabling anyway due to force_elantech.\n");
	}
	}


	if (set_properties) {
	if (set_properties) {
@@ -655,7 +654,7 @@ static int elantech_reconnect(struct psmouse *psmouse)
		return -1;
		return -1;


	if (elantech_set_absolute_mode(psmouse)) {
	if (elantech_set_absolute_mode(psmouse)) {
		pr_err("elantech.c: failed to put touchpad back into absolute mode.\n");
		pr_err("failed to put touchpad back into absolute mode.\n");
		return -1;
		return -1;
	}
	}


@@ -683,7 +682,7 @@ int elantech_init(struct psmouse *psmouse)
	 * Do the version query again so we can store the result
	 * Do the version query again so we can store the result
	 */
	 */
	if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) {
	if (synaptics_send_cmd(psmouse, ETP_FW_VERSION_QUERY, param)) {
		pr_err("elantech.c: failed to query firmware version.\n");
		pr_err("failed to query firmware version.\n");
		goto init_fail;
		goto init_fail;
	}
	}


@@ -704,14 +703,14 @@ int elantech_init(struct psmouse *psmouse)
		etd->paritycheck = 1;
		etd->paritycheck = 1;
	}
	}


	pr_info("elantech.c: assuming hardware version %d, firmware version %d.%d.%d\n",
	pr_info("assuming hardware version %d, firmware version %d.%d.%d\n",
		etd->hw_version, param[0], param[1], param[2]);
		etd->hw_version, param[0], param[1], param[2]);


	if (synaptics_send_cmd(psmouse, ETP_CAPABILITIES_QUERY, param)) {
	if (synaptics_send_cmd(psmouse, ETP_CAPABILITIES_QUERY, param)) {
		pr_err("elantech.c: failed to query capabilities.\n");
		pr_err("failed to query capabilities.\n");
		goto init_fail;
		goto init_fail;
	}
	}
	pr_info("elantech.c: Synaptics capabilities query result 0x%02x, 0x%02x, 0x%02x.\n",
	pr_info("Synaptics capabilities query result 0x%02x, 0x%02x, 0x%02x.\n",
		param[0], param[1], param[2]);
		param[0], param[1], param[2]);
	etd->capabilities = param[0];
	etd->capabilities = param[0];


@@ -721,13 +720,12 @@ int elantech_init(struct psmouse *psmouse)
	 * to jump. Enable a workaround.
	 * to jump. Enable a workaround.
	 */
	 */
	if (etd->fw_version == 0x020022) {
	if (etd->fw_version == 0x020022) {
		pr_info("elantech.c: firmware version 2.0.34 detected, "
		pr_info("firmware version 2.0.34 detected, enabling jumpy cursor workaround\n");
			"enabling jumpy cursor workaround\n");
		etd->jumpy_cursor = 1;
		etd->jumpy_cursor = 1;
	}
	}


	if (elantech_set_absolute_mode(psmouse)) {
	if (elantech_set_absolute_mode(psmouse)) {
		pr_err("elantech.c: failed to put touchpad into absolute mode.\n");
		pr_err("failed to put touchpad into absolute mode.\n");
		goto init_fail;
		goto init_fail;
	}
	}


@@ -736,8 +734,7 @@ int elantech_init(struct psmouse *psmouse)
	error = sysfs_create_group(&psmouse->ps2dev.serio->dev.kobj,
	error = sysfs_create_group(&psmouse->ps2dev.serio->dev.kobj,
				   &elantech_attr_group);
				   &elantech_attr_group);
	if (error) {
	if (error) {
		pr_err("elantech.c: failed to create sysfs attributes, error: %d.\n",
		pr_err("failed to create sysfs attributes, error: %d.\n", error);
			error);
		goto init_fail;
		goto init_fail;
	}
	}