dect
/
linux-2.6
Archived
13
0
Fork 0

Input: psmouse - switch to using dev_*() for messages

This will ensure our reporting is consistent with the rest of the system
and we do not refer to obsolete source file names.

Reviewed-by: Wanlong Gao <gaowanlong@cn.fujitsu.com>
Reviewed-by: JJ Ding <dgdunix@gmail.com>
Reviewed-by: Daniel Kurtz <djkurtz@chromium.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
Dmitry Torokhov 2011-10-10 18:27:03 -07:00
parent ae927560a7
commit b5d2170436
10 changed files with 243 additions and 198 deletions

View File

@ -23,13 +23,6 @@
#include "psmouse.h" #include "psmouse.h"
#include "alps.h" #include "alps.h"
#undef DEBUG
#ifdef DEBUG
#define dbg(format, arg...) printk(KERN_INFO "alps.c: " format "\n", ## arg)
#else
#define dbg(format, arg...) do {} while (0)
#endif
#define ALPS_OLDPROTO 0x01 /* old style input */ #define ALPS_OLDPROTO 0x01 /* old style input */
#define ALPS_DUALPOINT 0x02 /* touchpad has trackstick */ #define ALPS_DUALPOINT 0x02 /* touchpad has trackstick */
#define ALPS_PASS 0x04 /* device has a pass-through port */ #define ALPS_PASS 0x04 /* device has a pass-through port */
@ -297,10 +290,10 @@ static psmouse_ret_t alps_handle_interleaved_ps2(struct psmouse *psmouse)
psmouse->packet[4] | psmouse->packet[4] |
psmouse->packet[5]) & 0x80) || psmouse->packet[5]) & 0x80) ||
(!alps_is_valid_first_byte(priv->i, psmouse->packet[6]))) { (!alps_is_valid_first_byte(priv->i, psmouse->packet[6]))) {
dbg("refusing packet %x %x %x %x " psmouse_dbg(psmouse,
"(suspected interleaved ps/2)\n", "refusing packet %x %x %x %x (suspected interleaved ps/2)\n",
psmouse->packet[3], psmouse->packet[4], psmouse->packet[3], psmouse->packet[4],
psmouse->packet[5], psmouse->packet[6]); psmouse->packet[5], psmouse->packet[6]);
return PSMOUSE_BAD_DATA; return PSMOUSE_BAD_DATA;
} }
@ -319,13 +312,13 @@ static psmouse_ret_t alps_handle_interleaved_ps2(struct psmouse *psmouse)
* There is also possibility that we got 6-byte ALPS * There is also possibility that we got 6-byte ALPS
* packet followed by 3-byte packet from trackpoint. We * packet followed by 3-byte packet from trackpoint. We
* can not distinguish between these 2 scenarios but * can not distinguish between these 2 scenarios but
* becase the latter is unlikely to happen in course of * because the latter is unlikely to happen in course of
* normal operation (user would need to press all * normal operation (user would need to press all
* buttons on the pad and start moving trackpoint * buttons on the pad and start moving trackpoint
* without touching the pad surface) we assume former. * without touching the pad surface) we assume former.
* Even if we are wrong the wost thing that would happen * Even if we are wrong the wost thing that would happen
* the cursor would jump but we should not get protocol * the cursor would jump but we should not get protocol
* desynchronization. * de-synchronization.
*/ */
alps_report_bare_ps2_packet(psmouse, &psmouse->packet[3], alps_report_bare_ps2_packet(psmouse, &psmouse->packet[3],
@ -361,10 +354,10 @@ static void alps_flush_packet(unsigned long data)
if ((psmouse->packet[3] | if ((psmouse->packet[3] |
psmouse->packet[4] | psmouse->packet[4] |
psmouse->packet[5]) & 0x80) { psmouse->packet[5]) & 0x80) {
dbg("refusing packet %x %x %x " psmouse_dbg(psmouse,
"(suspected interleaved ps/2)\n", "refusing packet %x %x %x (suspected interleaved ps/2)\n",
psmouse->packet[3], psmouse->packet[4], psmouse->packet[3], psmouse->packet[4],
psmouse->packet[5]); psmouse->packet[5]);
} else { } else {
alps_process_packet(psmouse); alps_process_packet(psmouse);
} }
@ -396,16 +389,18 @@ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse)
} }
if (!alps_is_valid_first_byte(model, psmouse->packet[0])) { if (!alps_is_valid_first_byte(model, psmouse->packet[0])) {
dbg("refusing packet[0] = %x (mask0 = %x, byte0 = %x)\n", psmouse_dbg(psmouse,
psmouse->packet[0], model->mask0, model->byte0); "refusing packet[0] = %x (mask0 = %x, byte0 = %x)\n",
psmouse->packet[0], model->mask0, model->byte0);
return PSMOUSE_BAD_DATA; return PSMOUSE_BAD_DATA;
} }
/* Bytes 2 - 6 should have 0 in the highest bit */ /* Bytes 2 - 6 should have 0 in the highest bit */
if (psmouse->pktcnt >= 2 && psmouse->pktcnt <= 6 && if (psmouse->pktcnt >= 2 && psmouse->pktcnt <= 6 &&
(psmouse->packet[psmouse->pktcnt - 1] & 0x80)) { (psmouse->packet[psmouse->pktcnt - 1] & 0x80)) {
dbg("refusing packet[%i] = %x\n", psmouse_dbg(psmouse, "refusing packet[%i] = %x\n",
psmouse->pktcnt - 1, psmouse->packet[psmouse->pktcnt - 1]); psmouse->pktcnt - 1,
psmouse->packet[psmouse->pktcnt - 1]);
return PSMOUSE_BAD_DATA; return PSMOUSE_BAD_DATA;
} }
@ -439,7 +434,8 @@ static const struct alps_model_info *alps_get_model(struct psmouse *psmouse, int
if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO))
return NULL; return NULL;
dbg("E6 report: %2.2x %2.2x %2.2x", param[0], param[1], param[2]); psmouse_dbg(psmouse, "E6 report: %2.2x %2.2x %2.2x",
param[0], param[1], param[2]);
if (param[0] != 0 || param[1] != 0 || (param[2] != 10 && param[2] != 100)) if (param[0] != 0 || param[1] != 0 || (param[2] != 10 && param[2] != 100))
return NULL; return NULL;
@ -459,7 +455,8 @@ static const struct alps_model_info *alps_get_model(struct psmouse *psmouse, int
if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO))
return NULL; return NULL;
dbg("E7 report: %2.2x %2.2x %2.2x", param[0], param[1], param[2]); psmouse_dbg(psmouse, "E7 report: %2.2x %2.2x %2.2x",
param[0], param[1], param[2]);
if (version) { if (version) {
for (i = 0; i < ARRAY_SIZE(rates) && param[2] != rates[i]; i++) for (i = 0; i < ARRAY_SIZE(rates) && param[2] != rates[i]; i++)
@ -527,7 +524,8 @@ static int alps_get_status(struct psmouse *psmouse, char *param)
ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO))
return -1; return -1;
dbg("Status: %2.2x %2.2x %2.2x", param[0], param[1], param[2]); psmouse_dbg(psmouse, "Status: %2.2x %2.2x %2.2x",
param[0], param[1], param[2]);
return 0; return 0;
} }
@ -605,12 +603,12 @@ static int alps_hw_init(struct psmouse *psmouse)
} }
if (alps_tap_mode(psmouse, true)) { if (alps_tap_mode(psmouse, true)) {
printk(KERN_WARNING "alps.c: Failed to enable hardware tapping\n"); psmouse_warn(psmouse, "Failed to enable hardware tapping\n");
return -1; return -1;
} }
if (alps_absolute_mode(psmouse)) { if (alps_absolute_mode(psmouse)) {
printk(KERN_ERR "alps.c: Failed to enable absolute mode\n"); psmouse_err(psmouse, "Failed to enable absolute mode\n");
return -1; return -1;
} }
@ -621,7 +619,7 @@ static int alps_hw_init(struct psmouse *psmouse)
/* ALPS needs stream mode, otherwise it won't report any data */ /* ALPS needs stream mode, otherwise it won't report any data */
if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSTREAM)) { if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSTREAM)) {
printk(KERN_ERR "alps.c: Failed to enable stream mode\n"); psmouse_err(psmouse, "Failed to enable stream mode\n");
return -1; return -1;
} }

View File

@ -10,8 +10,6 @@
* 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>
@ -25,7 +23,8 @@
#define elantech_debug(fmt, ...) \ #define elantech_debug(fmt, ...) \
do { \ do { \
if (etd->debug) \ if (etd->debug) \
printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); \ psmouse_printk(KERN_DEBUG, psmouse, \
fmt, ##__VA_ARGS__); \
} while (0) } while (0)
/* /*
@ -36,7 +35,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("synaptics_send_cmd query 0x%02x failed.\n", c); psmouse_err(psmouse, "%s query 0x%02x failed.\n", __func__, c);
return -1; return -1;
} }
@ -65,7 +64,7 @@ static int elantech_ps2_command(struct psmouse *psmouse,
} while (tries > 0); } while (tries > 0);
if (rc) if (rc)
pr_err("ps2 command 0x%02x failed.\n", command); psmouse_err(psmouse, "ps2 command 0x%02x failed.\n", command);
return rc; return rc;
} }
@ -117,7 +116,7 @@ static int elantech_read_reg(struct psmouse *psmouse, unsigned char reg,
} }
if (rc) if (rc)
pr_err("failed to read register 0x%02x.\n", reg); psmouse_err(psmouse, "failed to read register 0x%02x.\n", reg);
else if (etd->hw_version != 4) else if (etd->hw_version != 4)
*val = param[0]; *val = param[0];
else else
@ -191,8 +190,9 @@ static int elantech_write_reg(struct psmouse *psmouse, unsigned char reg,
} }
if (rc) if (rc)
pr_err("failed to write register 0x%02x with value 0x%02x.\n", psmouse_err(psmouse,
reg, val); "failed to write register 0x%02x with value 0x%02x.\n",
reg, val);
return rc; return rc;
} }
@ -200,13 +200,13 @@ static int elantech_write_reg(struct psmouse *psmouse, unsigned char reg,
/* /*
* Dump a complete mouse movement packet to the syslog * Dump a complete mouse movement packet to the syslog
*/ */
static void elantech_packet_dump(unsigned char *packet, int size) static void elantech_packet_dump(struct psmouse *psmouse)
{ {
int i; int i;
printk(KERN_DEBUG pr_fmt("PS/2 packet [")); psmouse_printk(KERN_DEBUG, psmouse, "PS/2 packet [");
for (i = 0; i < size; i++) for (i = 0; i < psmouse->pktsize; i++)
printk("%s0x%02x ", (i) ? ", " : " ", packet[i]); printk("%s0x%02x ", i ? ", " : " ", psmouse->packet[i]);
printk("]\n"); printk("]\n");
} }
@ -705,7 +705,7 @@ static psmouse_ret_t elantech_process_byte(struct psmouse *psmouse)
return PSMOUSE_GOOD_DATA; return PSMOUSE_GOOD_DATA;
if (etd->debug > 1) if (etd->debug > 1)
elantech_packet_dump(psmouse->packet, psmouse->pktsize); elantech_packet_dump(psmouse);
switch (etd->hw_version) { switch (etd->hw_version) {
case 1: case 1:
@ -801,7 +801,7 @@ static int elantech_set_absolute_mode(struct psmouse *psmouse)
/* /*
* Read back reg 0x10. For hardware version 1 we must make * Read back reg 0x10. For hardware version 1 we must make
* sure the absolute mode bit is set. For hardware version 2 * sure the absolute mode bit is set. For hardware version 2
* the touchpad is probably initalising and not ready until * the touchpad is probably initializing and not ready until
* we read back the value we just wrote. * we read back the value we just wrote.
*/ */
do { do {
@ -814,17 +814,19 @@ static int elantech_set_absolute_mode(struct psmouse *psmouse)
} while (tries > 0); } while (tries > 0);
if (rc) { if (rc) {
pr_err("failed to read back register 0x10.\n"); psmouse_err(psmouse,
"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("touchpad refuses to switch to absolute mode.\n"); psmouse_err(psmouse,
"touchpad refuses to switch to absolute mode.\n");
rc = -1; rc = -1;
} }
} }
skip_readback_reg_10: skip_readback_reg_10:
if (rc) if (rc)
pr_err("failed to initialise registers.\n"); psmouse_err(psmouse, "failed to initialise registers.\n");
return rc; return rc;
} }
@ -1131,7 +1133,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("sending Elantech magic knock failed.\n"); psmouse_dbg(psmouse, "sending Elantech magic knock failed.\n");
return -1; return -1;
} }
@ -1141,8 +1143,9 @@ int elantech_detect(struct psmouse *psmouse, bool set_properties)
*/ */
if (param[0] != 0x3c || param[1] != 0x03 || if (param[0] != 0x3c || param[1] != 0x03 ||
(param[2] != 0xc8 && param[2] != 0x00)) { (param[2] != 0xc8 && param[2] != 0x00)) {
pr_debug("unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n", psmouse_dbg(psmouse,
param[0], param[1], param[2]); "unexpected magic knock result 0x%02x, 0x%02x, 0x%02x.\n",
param[0], param[1], param[2]);
return -1; return -1;
} }
@ -1152,15 +1155,17 @@ 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("failed to query firmware version.\n"); psmouse_dbg(psmouse, "failed to query firmware version.\n");
return -1; return -1;
} }
pr_debug("Elantech version query result 0x%02x, 0x%02x, 0x%02x.\n", psmouse_dbg(psmouse,
param[0], param[1], param[2]); "Elantech version query result 0x%02x, 0x%02x, 0x%02x.\n",
param[0], param[1], param[2]);
if (!elantech_is_signature_valid(param)) { if (!elantech_is_signature_valid(param)) {
pr_debug("Probably not a real Elantech touchpad. Aborting.\n"); psmouse_dbg(psmouse,
"Probably not a real Elantech touchpad. Aborting.\n");
return -1; return -1;
} }
@ -1192,7 +1197,8 @@ 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("failed to put touchpad back into absolute mode.\n"); psmouse_err(psmouse,
"failed to put touchpad back into absolute mode.\n");
return -1; return -1;
} }
@ -1262,42 +1268,46 @@ 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("failed to query firmware version.\n"); psmouse_err(psmouse, "failed to query firmware version.\n");
goto init_fail; goto init_fail;
} }
etd->fw_version = (param[0] << 16) | (param[1] << 8) | param[2]; etd->fw_version = (param[0] << 16) | (param[1] << 8) | param[2];
if (elantech_set_properties(etd)) { if (elantech_set_properties(etd)) {
pr_err("unknown hardware version, aborting...\n"); psmouse_err(psmouse, "unknown hardware version, aborting...\n");
goto init_fail; goto init_fail;
} }
pr_info("assuming hardware version %d " psmouse_info(psmouse,
"(with firmware version 0x%02x%02x%02x)\n", "assuming hardware version %d (with firmware version 0x%02x%02x%02x)\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, if (synaptics_send_cmd(psmouse, ETP_CAPABILITIES_QUERY,
etd->capabilities)) { etd->capabilities)) {
pr_err("failed to query capabilities.\n"); psmouse_err(psmouse, "failed to query capabilities.\n");
goto init_fail; goto init_fail;
} }
pr_info("Synaptics capabilities query result 0x%02x, 0x%02x, 0x%02x.\n", psmouse_info(psmouse,
etd->capabilities[0], etd->capabilities[1], "Synaptics capabilities query result 0x%02x, 0x%02x, 0x%02x.\n",
etd->capabilities[2]); etd->capabilities[0], etd->capabilities[1],
etd->capabilities[2]);
if (elantech_set_absolute_mode(psmouse)) { if (elantech_set_absolute_mode(psmouse)) {
pr_err("failed to put touchpad into absolute mode.\n"); psmouse_err(psmouse,
"failed to put touchpad into absolute mode.\n");
goto init_fail; goto init_fail;
} }
if (elantech_set_input_params(psmouse)) { if (elantech_set_input_params(psmouse)) {
pr_err("failed to query touchpad range.\n"); psmouse_err(psmouse, "failed to query touchpad range.\n");
goto init_fail; goto init_fail;
} }
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("failed to create sysfs attributes, error: %d.\n", error); psmouse_err(psmouse,
"failed to create sysfs attributes, error: %d.\n",
error);
goto init_fail; goto init_fail;
} }

View File

@ -136,10 +136,10 @@ static int hgpk_discard_decay_hack(struct psmouse *psmouse, int x, int y)
/* discard if too big, or half that but > 4 times the prev delta */ /* discard if too big, or half that but > 4 times the prev delta */
if (avx > recalib_delta || if (avx > recalib_delta ||
(avx > recalib_delta / 2 && ((avx / 4) > priv->xlast))) { (avx > recalib_delta / 2 && ((avx / 4) > priv->xlast))) {
hgpk_err(psmouse, "detected %dpx jump in x\n", x); psmouse_warn(psmouse, "detected %dpx jump in x\n", x);
priv->xbigj = avx; priv->xbigj = avx;
} else if (approx_half(avx, priv->xbigj)) { } else if (approx_half(avx, priv->xbigj)) {
hgpk_err(psmouse, "detected secondary %dpx jump in x\n", x); psmouse_warn(psmouse, "detected secondary %dpx jump in x\n", x);
priv->xbigj = avx; priv->xbigj = avx;
priv->xsaw_secondary++; priv->xsaw_secondary++;
} else { } else {
@ -151,10 +151,10 @@ static int hgpk_discard_decay_hack(struct psmouse *psmouse, int x, int y)
if (avy > recalib_delta || if (avy > recalib_delta ||
(avy > recalib_delta / 2 && ((avy / 4) > priv->ylast))) { (avy > recalib_delta / 2 && ((avy / 4) > priv->ylast))) {
hgpk_err(psmouse, "detected %dpx jump in y\n", y); psmouse_warn(psmouse, "detected %dpx jump in y\n", y);
priv->ybigj = avy; priv->ybigj = avy;
} else if (approx_half(avy, priv->ybigj)) { } else if (approx_half(avy, priv->ybigj)) {
hgpk_err(psmouse, "detected secondary %dpx jump in y\n", y); psmouse_warn(psmouse, "detected secondary %dpx jump in y\n", y);
priv->ybigj = avy; priv->ybigj = avy;
priv->ysaw_secondary++; priv->ysaw_secondary++;
} else { } else {
@ -168,7 +168,7 @@ static int hgpk_discard_decay_hack(struct psmouse *psmouse, int x, int y)
priv->ylast = avy; priv->ylast = avy;
if (do_recal && jumpy_delay) { if (do_recal && jumpy_delay) {
hgpk_err(psmouse, "scheduling recalibration\n"); psmouse_warn(psmouse, "scheduling recalibration\n");
psmouse_queue_work(psmouse, &priv->recalib_wq, psmouse_queue_work(psmouse, &priv->recalib_wq,
msecs_to_jiffies(jumpy_delay)); msecs_to_jiffies(jumpy_delay));
} }
@ -260,8 +260,8 @@ static void hgpk_spewing_hack(struct psmouse *psmouse,
* movement, it is probably a case of the user moving the * movement, it is probably a case of the user moving the
* cursor very slowly across the screen. */ * cursor very slowly across the screen. */
if (abs(priv->x_tally) < 3 && abs(priv->y_tally) < 3) { if (abs(priv->x_tally) < 3 && abs(priv->y_tally) < 3) {
hgpk_err(psmouse, "packet spew detected (%d,%d)\n", psmouse_warn(psmouse, "packet spew detected (%d,%d)\n",
priv->x_tally, priv->y_tally); priv->x_tally, priv->y_tally);
priv->spew_flag = RECALIBRATING; priv->spew_flag = RECALIBRATING;
psmouse_queue_work(psmouse, &priv->recalib_wq, psmouse_queue_work(psmouse, &priv->recalib_wq,
msecs_to_jiffies(spew_delay)); msecs_to_jiffies(spew_delay));
@ -333,12 +333,12 @@ static bool hgpk_is_byte_valid(struct psmouse *psmouse, unsigned char *packet)
} }
if (!valid) if (!valid)
hgpk_dbg(psmouse, psmouse_dbg(psmouse,
"bad data, mode %d (%d) %02x %02x %02x %02x %02x %02x\n", "bad data, mode %d (%d) %02x %02x %02x %02x %02x %02x\n",
priv->mode, pktcnt, priv->mode, pktcnt,
psmouse->packet[0], psmouse->packet[1], psmouse->packet[0], psmouse->packet[1],
psmouse->packet[2], psmouse->packet[3], psmouse->packet[2], psmouse->packet[3],
psmouse->packet[4], psmouse->packet[5]); psmouse->packet[4], psmouse->packet[5]);
return valid; return valid;
} }
@ -361,19 +361,20 @@ static void hgpk_process_advanced_packet(struct psmouse *psmouse)
input_report_abs(idev, ABS_PRESSURE, z); input_report_abs(idev, ABS_PRESSURE, z);
if (tpdebug) if (tpdebug)
hgpk_dbg(psmouse, "pd=%d fd=%d z=%d", psmouse_dbg(psmouse, "pd=%d fd=%d z=%d",
pt_down, finger_down, z); pt_down, finger_down, z);
} else { } else {
/* /*
* PenTablet mode does not report pressure, so we don't * PenTablet mode does not report pressure, so we don't
* report it here * report it here
*/ */
if (tpdebug) if (tpdebug)
hgpk_dbg(psmouse, "pd=%d ", down); psmouse_dbg(psmouse, "pd=%d ", down);
} }
if (tpdebug) if (tpdebug)
hgpk_dbg(psmouse, "l=%d r=%d x=%d y=%d\n", left, right, x, y); psmouse_dbg(psmouse, "l=%d r=%d x=%d y=%d\n",
left, right, x, y);
input_report_key(idev, BTN_TOUCH, down); input_report_key(idev, BTN_TOUCH, down);
input_report_key(idev, BTN_LEFT, left); input_report_key(idev, BTN_LEFT, left);
@ -395,7 +396,7 @@ static void hgpk_process_advanced_packet(struct psmouse *psmouse)
if (x == priv->abs_x && y == priv->abs_y) { if (x == priv->abs_x && y == priv->abs_y) {
if (++priv->dupe_count > SPEW_WATCH_COUNT) { if (++priv->dupe_count > SPEW_WATCH_COUNT) {
if (tpdebug) if (tpdebug)
hgpk_dbg(psmouse, "hard spew detected\n"); psmouse_dbg(psmouse, "hard spew detected\n");
priv->spew_flag = RECALIBRATING; priv->spew_flag = RECALIBRATING;
psmouse_queue_work(psmouse, &priv->recalib_wq, psmouse_queue_work(psmouse, &priv->recalib_wq,
msecs_to_jiffies(spew_delay)); msecs_to_jiffies(spew_delay));
@ -412,7 +413,7 @@ static void hgpk_process_advanced_packet(struct psmouse *psmouse)
int y_diff = priv->abs_y - y; int y_diff = priv->abs_y - y;
if (hgpk_discard_decay_hack(psmouse, x_diff, y_diff)) { if (hgpk_discard_decay_hack(psmouse, x_diff, y_diff)) {
if (tpdebug) if (tpdebug)
hgpk_dbg(psmouse, "discarding\n"); psmouse_dbg(psmouse, "discarding\n");
goto done; goto done;
} }
hgpk_spewing_hack(psmouse, left, right, x_diff, y_diff); hgpk_spewing_hack(psmouse, left, right, x_diff, y_diff);
@ -437,20 +438,21 @@ static void hgpk_process_simple_packet(struct psmouse *psmouse)
int y = ((packet[0] << 3) & 0x100) - packet[2]; int y = ((packet[0] << 3) & 0x100) - packet[2];
if (packet[0] & 0xc0) if (packet[0] & 0xc0)
hgpk_dbg(psmouse, psmouse_dbg(psmouse,
"overflow -- 0x%02x 0x%02x 0x%02x\n", "overflow -- 0x%02x 0x%02x 0x%02x\n",
packet[0], packet[1], packet[2]); packet[0], packet[1], packet[2]);
if (hgpk_discard_decay_hack(psmouse, x, y)) { if (hgpk_discard_decay_hack(psmouse, x, y)) {
if (tpdebug) if (tpdebug)
hgpk_dbg(psmouse, "discarding\n"); psmouse_dbg(psmouse, "discarding\n");
return; return;
} }
hgpk_spewing_hack(psmouse, left, right, x, y); hgpk_spewing_hack(psmouse, left, right, x, y);
if (tpdebug) if (tpdebug)
hgpk_dbg(psmouse, "l=%d r=%d x=%d y=%d\n", left, right, x, y); psmouse_dbg(psmouse, "l=%d r=%d x=%d y=%d\n",
left, right, x, y);
input_report_key(dev, BTN_LEFT, left); input_report_key(dev, BTN_LEFT, left);
input_report_key(dev, BTN_RIGHT, right); input_report_key(dev, BTN_RIGHT, right);
@ -482,9 +484,8 @@ static psmouse_ret_t hgpk_process_byte(struct psmouse *psmouse)
* ugh, got a packet inside our recalibration * ugh, got a packet inside our recalibration
* window, schedule another recalibration. * window, schedule another recalibration.
*/ */
hgpk_dbg(psmouse, psmouse_dbg(psmouse,
"packet inside calibration window, " "packet inside calibration window, queueing another recalibration\n");
"queueing another recalibration\n");
psmouse_queue_work(psmouse, &priv->recalib_wq, psmouse_queue_work(psmouse, &priv->recalib_wq,
msecs_to_jiffies(post_interrupt_delay)); msecs_to_jiffies(post_interrupt_delay));
} }
@ -628,7 +629,7 @@ static int hgpk_reset_device(struct psmouse *psmouse, bool recalibrate)
err = hgpk_select_mode(psmouse); err = hgpk_select_mode(psmouse);
if (err) { if (err) {
hgpk_err(psmouse, "failed to select mode\n"); psmouse_err(psmouse, "failed to select mode\n");
return err; return err;
} }
@ -648,11 +649,11 @@ static int hgpk_force_recalibrate(struct psmouse *psmouse)
return 0; return 0;
if (!autorecal) { if (!autorecal) {
hgpk_dbg(psmouse, "recalibrations disabled, ignoring\n"); psmouse_dbg(psmouse, "recalibration disabled, ignoring\n");
return 0; return 0;
} }
hgpk_dbg(psmouse, "recalibrating touchpad..\n"); psmouse_dbg(psmouse, "recalibrating touchpad..\n");
/* we don't want to race with the irq handler, nor with resyncs */ /* we don't want to race with the irq handler, nor with resyncs */
psmouse_set_state(psmouse, PSMOUSE_INITIALIZING); psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
@ -675,7 +676,7 @@ static int hgpk_force_recalibrate(struct psmouse *psmouse)
psmouse_set_state(psmouse, PSMOUSE_ACTIVATED); psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
if (tpdebug) if (tpdebug)
hgpk_dbg(psmouse, "touchpad reactivated\n"); psmouse_dbg(psmouse, "touchpad reactivated\n");
/* /*
* If we get packets right away after recalibrating, it's likely * If we get packets right away after recalibrating, it's likely
@ -727,16 +728,16 @@ static int hgpk_toggle_powersave(struct psmouse *psmouse, int enable)
err = hgpk_reset_device(psmouse, false); err = hgpk_reset_device(psmouse, false);
if (err) { if (err) {
hgpk_err(psmouse, "Failed to reset device!\n"); psmouse_err(psmouse, "Failed to reset device!\n");
return err; return err;
} }
/* should be all set, enable the touchpad */ /* should be all set, enable the touchpad */
ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE); ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE);
psmouse_set_state(psmouse, PSMOUSE_ACTIVATED); psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
hgpk_dbg(psmouse, "Touchpad powered up.\n"); psmouse_dbg(psmouse, "Touchpad powered up.\n");
} else { } else {
hgpk_dbg(psmouse, "Powering off touchpad.\n"); psmouse_dbg(psmouse, "Powering off touchpad.\n");
if (ps2_command(ps2dev, NULL, 0xec) || if (ps2_command(ps2dev, NULL, 0xec) ||
ps2_command(ps2dev, NULL, 0xec) || ps2_command(ps2dev, NULL, 0xec) ||
@ -923,7 +924,7 @@ static void hgpk_recalib_work(struct work_struct *work)
struct psmouse *psmouse = priv->psmouse; struct psmouse *psmouse = priv->psmouse;
if (hgpk_force_recalibrate(psmouse)) if (hgpk_force_recalibrate(psmouse))
hgpk_err(psmouse, "recalibration failed!\n"); psmouse_err(psmouse, "recalibration failed!\n");
} }
static int hgpk_register(struct psmouse *psmouse) static int hgpk_register(struct psmouse *psmouse)
@ -947,14 +948,15 @@ static int hgpk_register(struct psmouse *psmouse)
err = device_create_file(&psmouse->ps2dev.serio->dev, err = device_create_file(&psmouse->ps2dev.serio->dev,
&psmouse_attr_powered.dattr); &psmouse_attr_powered.dattr);
if (err) { if (err) {
hgpk_err(psmouse, "Failed creating 'powered' sysfs node\n"); psmouse_err(psmouse, "Failed creating 'powered' sysfs node\n");
return err; return err;
} }
err = device_create_file(&psmouse->ps2dev.serio->dev, err = device_create_file(&psmouse->ps2dev.serio->dev,
&psmouse_attr_hgpk_mode.dattr); &psmouse_attr_hgpk_mode.dattr);
if (err) { if (err) {
hgpk_err(psmouse, "Failed creating 'hgpk_mode' sysfs node\n"); psmouse_err(psmouse,
"Failed creating 'hgpk_mode' sysfs node\n");
goto err_remove_powered; goto err_remove_powered;
} }
@ -963,8 +965,8 @@ static int hgpk_register(struct psmouse *psmouse)
err = device_create_file(&psmouse->ps2dev.serio->dev, err = device_create_file(&psmouse->ps2dev.serio->dev,
&psmouse_attr_recalibrate.dattr); &psmouse_attr_recalibrate.dattr);
if (err) { if (err) {
hgpk_err(psmouse, psmouse_err(psmouse,
"Failed creating 'recalibrate' sysfs node\n"); "Failed creating 'recalibrate' sysfs node\n");
goto err_remove_mode; goto err_remove_mode;
} }
} }
@ -1027,13 +1029,13 @@ static enum hgpk_model_t hgpk_get_model(struct psmouse *psmouse)
return -EIO; return -EIO;
} }
hgpk_dbg(psmouse, "ID: %02x %02x %02x\n", param[0], param[1], param[2]); psmouse_dbg(psmouse, "ID: %02x %02x %02x\n", param[0], param[1], param[2]);
/* HGPK signature: 0x67, 0x00, 0x<model> */ /* HGPK signature: 0x67, 0x00, 0x<model> */
if (param[0] != 0x67 || param[1] != 0x00) if (param[0] != 0x67 || param[1] != 0x00)
return -ENODEV; return -ENODEV;
hgpk_info(psmouse, "OLPC touchpad revision 0x%x\n", param[2]); psmouse_info(psmouse, "OLPC touchpad revision 0x%x\n", param[2]);
return param[2]; return param[2];
} }

View File

@ -46,17 +46,6 @@ struct hgpk_data {
int xsaw_secondary, ysaw_secondary; /* jumpiness detection */ int xsaw_secondary, ysaw_secondary; /* jumpiness detection */
}; };
#define hgpk_dbg(psmouse, format, arg...) \
dev_dbg(&(psmouse)->ps2dev.serio->dev, format, ## arg)
#define hgpk_err(psmouse, format, arg...) \
dev_err(&(psmouse)->ps2dev.serio->dev, format, ## arg)
#define hgpk_info(psmouse, format, arg...) \
dev_info(&(psmouse)->ps2dev.serio->dev, format, ## arg)
#define hgpk_warn(psmouse, format, arg...) \
dev_warn(&(psmouse)->ps2dev.serio->dev, format, ## arg)
#define hgpk_notice(psmouse, format, arg...) \
dev_notice(&(psmouse)->ps2dev.serio->dev, format, ## arg)
#ifdef CONFIG_MOUSE_PS2_OLPC #ifdef CONFIG_MOUSE_PS2_OLPC
void hgpk_module_init(void); void hgpk_module_init(void);
int hgpk_detect(struct psmouse *psmouse, bool set_properties); int hgpk_detect(struct psmouse *psmouse, bool set_properties);

View File

@ -169,8 +169,8 @@ static psmouse_ret_t lifebook_process_byte(struct psmouse *psmouse)
if (relative_packet) { if (relative_packet) {
if (!dev2) if (!dev2)
printk(KERN_WARNING "lifebook.c: got relative packet " psmouse_warn(psmouse,
"but no relative device set up\n"); "got relative packet but no relative device set up\n");
} else { } else {
if (lifebook_use_6byte_proto) { if (lifebook_use_6byte_proto) {
input_report_abs(dev1, ABS_X, input_report_abs(dev1, ABS_X,
@ -212,7 +212,7 @@ static int lifebook_absolute_mode(struct psmouse *psmouse)
/* /*
* Enable absolute output -- ps2_command fails always but if * Enable absolute output -- ps2_command fails always but if
* you leave this call out the touchsreen will never send * you leave this call out the touchscreen will never send
* absolute coordinates * absolute coordinates
*/ */
param = lifebook_use_6byte_proto ? 0x08 : 0x07; param = lifebook_use_6byte_proto ? 0x08 : 0x07;

View File

@ -82,11 +82,11 @@ static psmouse_ret_t ps2pp_process_byte(struct psmouse *psmouse)
packet[0] = packet[2] | 0x08; packet[0] = packet[2] | 0x08;
break; break;
#ifdef DEBUG
default: default:
printk(KERN_WARNING "psmouse.c: Received PS2++ packet #%x, but don't know how to handle.\n", psmouse_dbg(psmouse,
(packet[1] >> 4) | (packet[0] & 0x30)); "Received PS2++ packet #%x, but don't know how to handle.\n",
#endif (packet[1] >> 4) | (packet[0] & 0x30));
break;
} }
} else { } else {
/* Standard PS/2 motion data */ /* Standard PS/2 motion data */
@ -382,7 +382,7 @@ int ps2pp_init(struct psmouse *psmouse, bool set_properties)
} }
} else { } else {
printk(KERN_WARNING "logips2pp: Detected unknown logitech mouse model %d\n", model); psmouse_warn(psmouse, "Detected unknown Logitech mouse model %d\n", model);
} }
if (set_properties) { if (set_properties) {
@ -400,9 +400,9 @@ int ps2pp_init(struct psmouse *psmouse, bool set_properties)
error = device_create_file(&psmouse->ps2dev.serio->dev, error = device_create_file(&psmouse->ps2dev.serio->dev,
&psmouse_attr_smartscroll.dattr); &psmouse_attr_smartscroll.dattr);
if (error) { if (error) {
printk(KERN_ERR psmouse_err(psmouse,
"logips2pp.c: failed to create smartscroll " "failed to create smartscroll sysfs attribute, error: %d\n",
"sysfs attribute, error: %d\n", error); error);
return -1; return -1;
} }
} }

View File

@ -11,6 +11,9 @@
* the Free Software Foundation. * the Free Software Foundation.
*/ */
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#define psmouse_fmt(fmt) fmt
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/slab.h> #include <linux/slab.h>
@ -251,11 +254,14 @@ static int psmouse_handle_byte(struct psmouse *psmouse)
switch (rc) { switch (rc) {
case PSMOUSE_BAD_DATA: case PSMOUSE_BAD_DATA:
if (psmouse->state == PSMOUSE_ACTIVATED) { if (psmouse->state == PSMOUSE_ACTIVATED) {
printk(KERN_WARNING "psmouse.c: %s at %s lost sync at byte %d\n", psmouse_warn(psmouse,
psmouse->name, psmouse->phys, psmouse->pktcnt); "%s at %s lost sync at byte %d\n",
psmouse->name, psmouse->phys,
psmouse->pktcnt);
if (++psmouse->out_of_sync_cnt == psmouse->resetafter) { if (++psmouse->out_of_sync_cnt == psmouse->resetafter) {
__psmouse_set_state(psmouse, PSMOUSE_IGNORE); __psmouse_set_state(psmouse, PSMOUSE_IGNORE);
printk(KERN_NOTICE "psmouse.c: issuing reconnect request\n"); psmouse_notice(psmouse,
"issuing reconnect request\n");
serio_reconnect(psmouse->ps2dev.serio); serio_reconnect(psmouse->ps2dev.serio);
return -1; return -1;
} }
@ -267,8 +273,9 @@ static int psmouse_handle_byte(struct psmouse *psmouse)
psmouse->pktcnt = 0; psmouse->pktcnt = 0;
if (psmouse->out_of_sync_cnt) { if (psmouse->out_of_sync_cnt) {
psmouse->out_of_sync_cnt = 0; psmouse->out_of_sync_cnt = 0;
printk(KERN_NOTICE "psmouse.c: %s at %s - driver resynched.\n", psmouse_notice(psmouse,
psmouse->name, psmouse->phys); "%s at %s - driver resynced.\n",
psmouse->name, psmouse->phys);
} }
break; break;
@ -295,9 +302,10 @@ static irqreturn_t psmouse_interrupt(struct serio *serio,
((flags & SERIO_PARITY) && !psmouse->ignore_parity))) { ((flags & SERIO_PARITY) && !psmouse->ignore_parity))) {
if (psmouse->state == PSMOUSE_ACTIVATED) if (psmouse->state == PSMOUSE_ACTIVATED)
printk(KERN_WARNING "psmouse.c: bad data from KBC -%s%s\n", psmouse_warn(psmouse,
flags & SERIO_TIMEOUT ? " timeout" : "", "bad data from KBC -%s%s\n",
flags & SERIO_PARITY ? " bad parity" : ""); flags & SERIO_TIMEOUT ? " timeout" : "",
flags & SERIO_PARITY ? " bad parity" : "");
ps2_cmd_aborted(&psmouse->ps2dev); ps2_cmd_aborted(&psmouse->ps2dev);
goto out; goto out;
} }
@ -315,8 +323,8 @@ static irqreturn_t psmouse_interrupt(struct serio *serio,
if (psmouse->state == PSMOUSE_ACTIVATED && if (psmouse->state == PSMOUSE_ACTIVATED &&
psmouse->pktcnt && time_after(jiffies, psmouse->last + HZ/2)) { psmouse->pktcnt && time_after(jiffies, psmouse->last + HZ/2)) {
printk(KERN_INFO "psmouse.c: %s at %s lost synchronization, throwing %d bytes away.\n", psmouse_info(psmouse, "%s at %s lost synchronization, throwing %d bytes away.\n",
psmouse->name, psmouse->phys, psmouse->pktcnt); psmouse->name, psmouse->phys, psmouse->pktcnt);
psmouse->badbyte = psmouse->packet[0]; psmouse->badbyte = psmouse->packet[0];
__psmouse_set_state(psmouse, PSMOUSE_RESYNCING); __psmouse_set_state(psmouse, PSMOUSE_RESYNCING);
psmouse_queue_work(psmouse, &psmouse->resync_work, 0); psmouse_queue_work(psmouse, &psmouse->resync_work, 0);
@ -943,7 +951,8 @@ static int psmouse_probe(struct psmouse *psmouse)
*/ */
if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_RESET_DIS)) if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_RESET_DIS))
printk(KERN_WARNING "psmouse.c: Failed to reset mouse on %s\n", ps2dev->serio->phys); psmouse_warn(psmouse, "Failed to reset mouse on %s\n",
ps2dev->serio->phys);
return 0; return 0;
} }
@ -1005,8 +1014,8 @@ static void psmouse_initialize(struct psmouse *psmouse)
static void psmouse_activate(struct psmouse *psmouse) static void psmouse_activate(struct psmouse *psmouse)
{ {
if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE)) if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE))
printk(KERN_WARNING "psmouse.c: Failed to enable mouse on %s\n", psmouse_warn(psmouse, "Failed to enable mouse on %s\n",
psmouse->ps2dev.serio->phys); psmouse->ps2dev.serio->phys);
psmouse_set_state(psmouse, PSMOUSE_ACTIVATED); psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
} }
@ -1020,14 +1029,14 @@ static void psmouse_activate(struct psmouse *psmouse)
static void psmouse_deactivate(struct psmouse *psmouse) static void psmouse_deactivate(struct psmouse *psmouse)
{ {
if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE)) if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE))
printk(KERN_WARNING "psmouse.c: Failed to deactivate mouse on %s\n", psmouse_warn(psmouse, "Failed to deactivate mouse on %s\n",
psmouse->ps2dev.serio->phys); psmouse->ps2dev.serio->phys);
psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
} }
/* /*
* psmouse_poll() - default poll hanlder. Everyone except for ALPS uses it. * psmouse_poll() - default poll handler. Everyone except for ALPS uses it.
*/ */
static int psmouse_poll(struct psmouse *psmouse) static int psmouse_poll(struct psmouse *psmouse)
@ -1115,14 +1124,15 @@ static void psmouse_resync(struct work_struct *work)
} }
if (!enabled) { if (!enabled) {
printk(KERN_WARNING "psmouse.c: failed to re-enable mouse on %s\n", psmouse_warn(psmouse, "failed to re-enable mouse on %s\n",
psmouse->ps2dev.serio->phys); psmouse->ps2dev.serio->phys);
failed = true; failed = true;
} }
if (failed) { if (failed) {
psmouse_set_state(psmouse, PSMOUSE_IGNORE); psmouse_set_state(psmouse, PSMOUSE_IGNORE);
printk(KERN_INFO "psmouse.c: resync failed, issuing reconnect request\n"); psmouse_info(psmouse,
"resync failed, issuing reconnect request\n");
serio_reconnect(serio); serio_reconnect(serio);
} else } else
psmouse_set_state(psmouse, PSMOUSE_ACTIVATED); psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
@ -1155,8 +1165,8 @@ static void psmouse_cleanup(struct serio *serio)
* Disable stream mode so cleanup routine can proceed undisturbed. * Disable stream mode so cleanup routine can proceed undisturbed.
*/ */
if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE)) if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE))
printk(KERN_WARNING "psmouse.c: Failed to disable mouse on %s\n", psmouse_warn(psmouse, "Failed to disable mouse on %s\n",
psmouse->ps2dev.serio->phys); psmouse->ps2dev.serio->phys);
if (psmouse->cleanup) if (psmouse->cleanup)
psmouse->cleanup(psmouse); psmouse->cleanup(psmouse);
@ -1400,7 +1410,8 @@ static int psmouse_reconnect(struct serio *serio)
int rc = -1; int rc = -1;
if (!drv || !psmouse) { if (!drv || !psmouse) {
printk(KERN_DEBUG "psmouse: reconnect request, but serio is disconnected, ignoring...\n"); psmouse_dbg(psmouse,
"reconnect request, but serio is disconnected, ignoring...\n");
return -1; return -1;
} }
@ -1427,8 +1438,9 @@ static int psmouse_reconnect(struct serio *serio)
goto out; goto out;
} }
/* ok, the device type (and capabilities) match the old one, /*
* we can continue using it, complete intialization * OK, the device type (and capabilities) match the old one,
* we can continue using it, complete initialization
*/ */
psmouse_set_state(psmouse, PSMOUSE_CMD_MODE); psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
@ -1586,9 +1598,8 @@ static ssize_t psmouse_attr_set_protocol(struct psmouse *psmouse, void *data, co
while (!list_empty(&serio->children)) { while (!list_empty(&serio->children)) {
if (++retry > 3) { if (++retry > 3) {
printk(KERN_WARNING psmouse_warn(psmouse,
"psmouse: failed to destroy children ports, " "failed to destroy children ports, protocol change aborted.\n");
"protocol change aborted.\n");
input_free_device(new_dev); input_free_device(new_dev);
return -EIO; return -EIO;
} }
@ -1715,7 +1726,7 @@ static int __init psmouse_init(void)
kpsmoused_wq = create_singlethread_workqueue("kpsmoused"); kpsmoused_wq = create_singlethread_workqueue("kpsmoused");
if (!kpsmoused_wq) { if (!kpsmoused_wq) {
printk(KERN_ERR "psmouse: failed to create kpsmoused workqueue\n"); pr_err("failed to create kpsmoused workqueue\n");
return -ENOMEM; return -ENOMEM;
} }

View File

@ -150,4 +150,29 @@ static struct psmouse_attribute psmouse_attr_##_name = { \
static ssize_t _set(struct psmouse *, void *, const char *, size_t); \ static ssize_t _set(struct psmouse *, void *, const char *, size_t); \
__PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, NULL, _set, true) __PSMOUSE_DEFINE_ATTR_VAR(_name, _mode, _data, NULL, _set, true)
#ifndef psmouse_fmt
#define psmouse_fmt(fmt) KBUILD_BASENAME ": " fmt
#endif
#define psmouse_dbg(psmouse, format, ...) \
dev_dbg(&(psmouse)->ps2dev.serio->dev, \
psmouse_fmt(format), ##__VA_ARGS__)
#define psmouse_info(psmouse, format, ...) \
dev_info(&(psmouse)->ps2dev.serio->dev, \
psmouse_fmt(format), ##__VA_ARGS__)
#define psmouse_warn(psmouse, format, ...) \
dev_warn(&(psmouse)->ps2dev.serio->dev, \
psmouse_fmt(format), ##__VA_ARGS__)
#define psmouse_err(psmouse, format, ...) \
dev_err(&(psmouse)->ps2dev.serio->dev, \
psmouse_fmt(format), ##__VA_ARGS__)
#define psmouse_notice(psmouse, format, ...) \
dev_notice(&(psmouse)->ps2dev.serio->dev, \
psmouse_fmt(format), ##__VA_ARGS__)
#define psmouse_printk(level, psmouse, format, ...) \
dev_printk(level, \
&(psmouse)->ps2dev.serio->dev, \
psmouse_fmt(format), ##__VA_ARGS__)
#endif /* _PSMOUSE_H */ #endif /* _PSMOUSE_H */

View File

@ -607,11 +607,12 @@ static void fsp_packet_debug(unsigned char packet[])
ps2_packet_cnt++; ps2_packet_cnt++;
jiffies_msec = jiffies_to_msecs(jiffies); jiffies_msec = jiffies_to_msecs(jiffies);
printk(KERN_DEBUG "%08dms PS/2 packets: %02x, %02x, %02x, %02x\n", psmouse_dbg(psmouse,
jiffies_msec, packet[0], packet[1], packet[2], packet[3]); "%08dms PS/2 packets: %02x, %02x, %02x, %02x\n",
jiffies_msec, packet[0], packet[1], packet[2], packet[3]);
if (jiffies_msec - ps2_last_second > 1000) { if (jiffies_msec - ps2_last_second > 1000) {
printk(KERN_DEBUG "PS/2 packets/sec = %d\n", ps2_packet_cnt); psmouse_dbg(psmouse, "PS/2 packets/sec = %d\n", ps2_packet_cnt);
ps2_packet_cnt = 0; ps2_packet_cnt = 0;
ps2_last_second = jiffies_msec; ps2_last_second = jiffies_msec;
} }
@ -820,9 +821,9 @@ int fsp_init(struct psmouse *psmouse)
return -ENODEV; return -ENODEV;
} }
printk(KERN_INFO psmouse_info(psmouse,
"Finger Sensing Pad, hw: %d.%d.%d, sw: %s, buttons: %d\n", "Finger Sensing Pad, hw: %d.%d.%d, sw: %s, buttons: %d\n",
ver >> 4, ver & 0x0F, rev, fsp_drv_ver, buttons & 7); ver >> 4, ver & 0x0F, rev, fsp_drv_ver, buttons & 7);
psmouse->private = priv = kzalloc(sizeof(struct fsp_data), GFP_KERNEL); psmouse->private = priv = kzalloc(sizeof(struct fsp_data), GFP_KERNEL);
if (!priv) if (!priv)

View File

@ -167,8 +167,8 @@ static int synaptics_capability(struct psmouse *psmouse)
if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 1) { if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 1) {
if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_CAPAB, cap)) { if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_CAPAB, cap)) {
printk(KERN_ERR "Synaptics claims to have extended capabilities," psmouse_warn(psmouse,
" but I'm not able to read them.\n"); "device claims to have extended capabilities, but I'm not able to read them.\n");
} else { } else {
priv->ext_cap = (cap[0] << 16) | (cap[1] << 8) | cap[2]; priv->ext_cap = (cap[0] << 16) | (cap[1] << 8) | cap[2];
@ -183,8 +183,8 @@ static int synaptics_capability(struct psmouse *psmouse)
if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 4) { if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 4) {
if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_CAPAB_0C, cap)) { if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_CAPAB_0C, cap)) {
printk(KERN_ERR "Synaptics claims to have extended capability 0x0c," psmouse_warn(psmouse,
" but I'm not able to read it.\n"); "device claims to have extended capability 0x0c, but I'm not able to read it.\n");
} else { } else {
priv->ext_cap_0c = (cap[0] << 16) | (cap[1] << 8) | cap[2]; priv->ext_cap_0c = (cap[0] << 16) | (cap[1] << 8) | cap[2];
} }
@ -232,8 +232,8 @@ static int synaptics_resolution(struct psmouse *psmouse)
if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 5 && if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 5 &&
SYN_CAP_MAX_DIMENSIONS(priv->ext_cap_0c)) { SYN_CAP_MAX_DIMENSIONS(priv->ext_cap_0c)) {
if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MAX_COORDS, resp)) { if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MAX_COORDS, resp)) {
printk(KERN_ERR "Synaptics claims to have max coordinates" psmouse_warn(psmouse,
" query, but I'm not able to read it.\n"); "device claims to have max coordinates query, but I'm not able to read it.\n");
} else { } else {
priv->x_max = (resp[0] << 5) | ((resp[1] & 0x0f) << 1); priv->x_max = (resp[0] << 5) | ((resp[1] & 0x0f) << 1);
priv->y_max = (resp[2] << 5) | ((resp[1] & 0xf0) >> 3); priv->y_max = (resp[2] << 5) | ((resp[1] & 0xf0) >> 3);
@ -243,8 +243,8 @@ static int synaptics_resolution(struct psmouse *psmouse)
if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 7 && if (SYN_EXT_CAP_REQUESTS(priv->capabilities) >= 7 &&
SYN_CAP_MIN_DIMENSIONS(priv->ext_cap_0c)) { SYN_CAP_MIN_DIMENSIONS(priv->ext_cap_0c)) {
if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MIN_COORDS, resp)) { if (synaptics_send_cmd(psmouse, SYN_QUE_EXT_MIN_COORDS, resp)) {
printk(KERN_ERR "Synaptics claims to have min coordinates" psmouse_warn(psmouse,
" query, but I'm not able to read it.\n"); "device claims to have min coordinates query, but I'm not able to read it.\n");
} else { } else {
priv->x_min = (resp[0] << 5) | ((resp[1] & 0x0f) << 1); priv->x_min = (resp[0] << 5) | ((resp[1] & 0x0f) << 1);
priv->y_min = (resp[2] << 5) | ((resp[1] & 0xf0) >> 3); priv->y_min = (resp[2] << 5) | ((resp[1] & 0xf0) >> 3);
@ -388,7 +388,8 @@ static void synaptics_pt_activate(struct psmouse *psmouse)
priv->mode &= ~SYN_BIT_FOUR_BYTE_CLIENT; priv->mode &= ~SYN_BIT_FOUR_BYTE_CLIENT;
if (synaptics_mode_cmd(psmouse, priv->mode)) if (synaptics_mode_cmd(psmouse, priv->mode))
printk(KERN_INFO "synaptics: failed to switch guest protocol\n"); psmouse_warn(psmouse,
"failed to switch guest protocol\n");
} }
} }
@ -398,7 +399,8 @@ static void synaptics_pt_create(struct psmouse *psmouse)
serio = kzalloc(sizeof(struct serio), GFP_KERNEL); serio = kzalloc(sizeof(struct serio), GFP_KERNEL);
if (!serio) { if (!serio) {
printk(KERN_ERR "synaptics: not enough memory to allocate pass-through port\n"); psmouse_err(psmouse,
"not enough memory for pass-through port\n");
return; return;
} }
@ -412,7 +414,8 @@ static void synaptics_pt_create(struct psmouse *psmouse)
psmouse->pt_activate = synaptics_pt_activate; psmouse->pt_activate = synaptics_pt_activate;
printk(KERN_INFO "serio: %s port at %s\n", serio->name, psmouse->phys); psmouse_info(psmouse, "serio: %s port at %s\n",
serio->name, psmouse->phys);
serio_register_port(serio); serio_register_port(serio);
} }
@ -1049,13 +1052,15 @@ static void synaptics_process_packet(struct psmouse *psmouse)
input_sync(dev); input_sync(dev);
} }
static int synaptics_validate_byte(unsigned char packet[], int idx, unsigned char pkt_type) static int synaptics_validate_byte(struct psmouse *psmouse,
int idx, unsigned char pkt_type)
{ {
static const unsigned char newabs_mask[] = { 0xC8, 0x00, 0x00, 0xC8, 0x00 }; static const unsigned char newabs_mask[] = { 0xC8, 0x00, 0x00, 0xC8, 0x00 };
static const unsigned char newabs_rel_mask[] = { 0xC0, 0x00, 0x00, 0xC0, 0x00 }; static const unsigned char newabs_rel_mask[] = { 0xC0, 0x00, 0x00, 0xC0, 0x00 };
static const unsigned char newabs_rslt[] = { 0x80, 0x00, 0x00, 0xC0, 0x00 }; static const unsigned char newabs_rslt[] = { 0x80, 0x00, 0x00, 0xC0, 0x00 };
static const unsigned char oldabs_mask[] = { 0xC0, 0x60, 0x00, 0xC0, 0x60 }; static const unsigned char oldabs_mask[] = { 0xC0, 0x60, 0x00, 0xC0, 0x60 };
static const unsigned char oldabs_rslt[] = { 0xC0, 0x00, 0x00, 0x80, 0x00 }; static const unsigned char oldabs_rslt[] = { 0xC0, 0x00, 0x00, 0x80, 0x00 };
const char *packet = psmouse->packet;
if (idx < 0 || idx > 4) if (idx < 0 || idx > 4)
return 0; return 0;
@ -1073,7 +1078,7 @@ static int synaptics_validate_byte(unsigned char packet[], int idx, unsigned cha
return (packet[idx] & oldabs_mask[idx]) == oldabs_rslt[idx]; return (packet[idx] & oldabs_mask[idx]) == oldabs_rslt[idx];
default: default:
printk(KERN_ERR "synaptics: unknown packet type %d\n", pkt_type); psmouse_err(psmouse, "unknown packet type %d\n", pkt_type);
return 0; return 0;
} }
} }
@ -1083,8 +1088,8 @@ static unsigned char synaptics_detect_pkt_type(struct psmouse *psmouse)
int i; int i;
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
if (!synaptics_validate_byte(psmouse->packet, i, SYN_NEWABS_STRICT)) { if (!synaptics_validate_byte(psmouse, i, SYN_NEWABS_STRICT)) {
printk(KERN_INFO "synaptics: using relaxed packet validation\n"); psmouse_info(psmouse, "using relaxed packet validation\n");
return SYN_NEWABS_RELAXED; return SYN_NEWABS_RELAXED;
} }
@ -1109,7 +1114,7 @@ static psmouse_ret_t synaptics_process_byte(struct psmouse *psmouse)
return PSMOUSE_FULL_PACKET; return PSMOUSE_FULL_PACKET;
} }
return synaptics_validate_byte(psmouse->packet, psmouse->pktcnt - 1, priv->pkt_type) ? return synaptics_validate_byte(psmouse, psmouse->pktcnt - 1, priv->pkt_type) ?
PSMOUSE_GOOD_DATA : PSMOUSE_BAD_DATA; PSMOUSE_GOOD_DATA : PSMOUSE_BAD_DATA;
} }
@ -1222,21 +1227,21 @@ static int synaptics_reconnect(struct psmouse *psmouse)
return -1; return -1;
if (retry > 1) if (retry > 1)
printk(KERN_DEBUG "Synaptics reconnected after %d tries\n", psmouse_dbg(psmouse, "reconnected after %d tries\n", retry);
retry);
if (synaptics_query_hardware(psmouse)) { if (synaptics_query_hardware(psmouse)) {
printk(KERN_ERR "Unable to query Synaptics hardware.\n"); psmouse_err(psmouse, "Unable to query device.\n");
return -1; return -1;
} }
if (synaptics_set_absolute_mode(psmouse)) { if (synaptics_set_absolute_mode(psmouse)) {
printk(KERN_ERR "Unable to initialize Synaptics hardware.\n"); psmouse_err(psmouse, "Unable to initialize device.\n");
return -1; return -1;
} }
if (synaptics_set_advanced_gesture_mode(psmouse)) { if (synaptics_set_advanced_gesture_mode(psmouse)) {
printk(KERN_ERR "Advanced gesture mode reconnect failed.\n"); psmouse_err(psmouse,
"Advanced gesture mode reconnect failed.\n");
return -1; return -1;
} }
@ -1244,12 +1249,12 @@ static int synaptics_reconnect(struct psmouse *psmouse)
old_priv.model_id != priv->model_id || old_priv.model_id != priv->model_id ||
old_priv.capabilities != priv->capabilities || old_priv.capabilities != priv->capabilities ||
old_priv.ext_cap != priv->ext_cap) { old_priv.ext_cap != priv->ext_cap) {
printk(KERN_ERR "Synaptics hardware appears to be different: " psmouse_err(psmouse,
"id(%ld-%ld), model(%ld-%ld), caps(%lx-%lx), ext(%lx-%lx).\n", "hardware appears to be different: id(%ld-%ld), model(%ld-%ld), caps(%lx-%lx), ext(%lx-%lx).\n",
old_priv.identity, priv->identity, old_priv.identity, priv->identity,
old_priv.model_id, priv->model_id, old_priv.model_id, priv->model_id,
old_priv.capabilities, priv->capabilities, old_priv.capabilities, priv->capabilities,
old_priv.ext_cap, priv->ext_cap); old_priv.ext_cap, priv->ext_cap);
return -1; return -1;
} }
@ -1330,7 +1335,8 @@ int synaptics_init(struct psmouse *psmouse)
* just fine. * just fine.
*/ */
if (broken_olpc_ec) { if (broken_olpc_ec) {
printk(KERN_INFO "synaptics: OLPC XO detected, not enabling Synaptics protocol.\n"); psmouse_info(psmouse,
"OLPC XO detected, not enabling Synaptics protocol.\n");
return -ENODEV; return -ENODEV;
} }
@ -1341,26 +1347,28 @@ int synaptics_init(struct psmouse *psmouse)
psmouse_reset(psmouse); psmouse_reset(psmouse);
if (synaptics_query_hardware(psmouse)) { if (synaptics_query_hardware(psmouse)) {
printk(KERN_ERR "Unable to query Synaptics hardware.\n"); psmouse_err(psmouse, "Unable to query device.\n");
goto init_fail; goto init_fail;
} }
if (synaptics_set_absolute_mode(psmouse)) { if (synaptics_set_absolute_mode(psmouse)) {
printk(KERN_ERR "Unable to initialize Synaptics hardware.\n"); psmouse_err(psmouse, "Unable to initialize device.\n");
goto init_fail; goto init_fail;
} }
if (synaptics_set_advanced_gesture_mode(psmouse)) { if (synaptics_set_advanced_gesture_mode(psmouse)) {
printk(KERN_ERR "Advanced gesture mode init failed.\n"); psmouse_err(psmouse, "Advanced gesture mode init failed.\n");
goto init_fail; goto init_fail;
} }
priv->pkt_type = SYN_MODEL_NEWABS(priv->model_id) ? SYN_NEWABS : SYN_OLDABS; priv->pkt_type = SYN_MODEL_NEWABS(priv->model_id) ? SYN_NEWABS : SYN_OLDABS;
printk(KERN_INFO "Synaptics Touchpad, model: %ld, fw: %ld.%ld, id: %#lx, caps: %#lx/%#lx/%#lx\n", psmouse_info(psmouse,
SYN_ID_MODEL(priv->identity), "Touchpad model: %ld, fw: %ld.%ld, id: %#lx, caps: %#lx/%#lx/%#lx\n",
SYN_ID_MAJOR(priv->identity), SYN_ID_MINOR(priv->identity), SYN_ID_MODEL(priv->identity),
priv->model_id, priv->capabilities, priv->ext_cap, priv->ext_cap_0c); SYN_ID_MAJOR(priv->identity), SYN_ID_MINOR(priv->identity),
priv->model_id,
priv->capabilities, priv->ext_cap, priv->ext_cap_0c);
set_input_params(psmouse->dev, priv); set_input_params(psmouse->dev, priv);
@ -1392,8 +1400,9 @@ int synaptics_init(struct psmouse *psmouse)
* the same rate as a standard PS/2 mouse). * the same rate as a standard PS/2 mouse).
*/ */
if (psmouse->rate >= 80 && impaired_toshiba_kbc) { if (psmouse->rate >= 80 && impaired_toshiba_kbc) {
printk(KERN_INFO "synaptics: Toshiba %s detected, limiting rate to 40pps.\n", psmouse_info(psmouse,
dmi_get_system_info(DMI_PRODUCT_NAME)); "Toshiba %s detected, limiting rate to 40pps.\n",
dmi_get_system_info(DMI_PRODUCT_NAME));
psmouse->rate = 40; psmouse->rate = 40;
} }