Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 350701
b: refs/heads/master
c: 24af5cb
h: refs/heads/master
i:
  350699: 958f1b4
v: v3
  • Loading branch information
Kevin Cernekee authored and Dmitry Torokhov committed Feb 14, 2013
1 parent c3a085c commit 3616ec2
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 55 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b5d6b851eab7f346ea5e69f46247b363b32b3670
refs/heads/master: 24af5cb95f1b93c6c72a73113494ace4bcbee5a2
101 changes: 47 additions & 54 deletions trunk/drivers/input/mouse/alps.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,11 @@ static const struct alps_model_info alps_model_data[] = {
{ { 0x73, 0x02, 0x64 }, 0x8a, ALPS_PROTO_V4, 0x8f, 0x8f, 0 },
};

static void alps_set_abs_params_st(struct alps_data *priv,
struct input_dev *dev1);
static void alps_set_abs_params_mt(struct alps_data *priv,
struct input_dev *dev1);

/*
* XXX - this entry is suspicious. First byte has zero lower nibble,
* which is what a normal mouse would report. Also, the value 0x0e
Expand Down Expand Up @@ -695,24 +700,6 @@ static void alps_process_packet_v4(struct psmouse *psmouse)
input_sync(dev);
}

static void alps_process_packet(struct psmouse *psmouse)
{
struct alps_data *priv = psmouse->private;

switch (priv->proto_version) {
case ALPS_PROTO_V1:
case ALPS_PROTO_V2:
alps_process_packet_v1_v2(psmouse);
break;
case ALPS_PROTO_V3:
alps_process_packet_v3(psmouse);
break;
case ALPS_PROTO_V4:
alps_process_packet_v4(psmouse);
break;
}
}

static void alps_report_bare_ps2_packet(struct psmouse *psmouse,
unsigned char packet[],
bool report_buttons)
Expand Down Expand Up @@ -770,7 +757,7 @@ static psmouse_ret_t alps_handle_interleaved_ps2(struct psmouse *psmouse)
return PSMOUSE_BAD_DATA;
}

alps_process_packet(psmouse);
priv->process_packet(psmouse);

/* Continue with the next packet */
psmouse->packet[0] = psmouse->packet[6];
Expand Down Expand Up @@ -814,6 +801,7 @@ static psmouse_ret_t alps_handle_interleaved_ps2(struct psmouse *psmouse)
static void alps_flush_packet(unsigned long data)
{
struct psmouse *psmouse = (struct psmouse *)data;
struct alps_data *priv = psmouse->private;

serio_pause_rx(psmouse->ps2dev.serio);

Expand All @@ -831,7 +819,7 @@ static void alps_flush_packet(unsigned long data)
"refusing packet %3ph (suspected interleaved ps/2)\n",
psmouse->packet + 3);
} else {
alps_process_packet(psmouse);
priv->process_packet(psmouse);
}
psmouse->pktcnt = 0;
}
Expand Down Expand Up @@ -876,7 +864,7 @@ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse)
}

if (psmouse->pktcnt == psmouse->pktsize) {
alps_process_packet(psmouse);
priv->process_packet(psmouse);
return PSMOUSE_FULL_PACKET;
}

Expand Down Expand Up @@ -1430,25 +1418,26 @@ static int alps_hw_init_v4(struct psmouse *psmouse)
return -1;
}

static int alps_hw_init(struct psmouse *psmouse)
static void alps_set_defaults(struct alps_data *priv)
{
struct alps_data *priv = psmouse->private;
int ret = -1;

switch (priv->proto_version) {
case ALPS_PROTO_V1:
case ALPS_PROTO_V2:
ret = alps_hw_init_v1_v2(psmouse);
priv->hw_init = alps_hw_init_v1_v2;
priv->process_packet = alps_process_packet_v1_v2;
priv->set_abs_params = alps_set_abs_params_st;
break;
case ALPS_PROTO_V3:
ret = alps_hw_init_v3(psmouse);
priv->hw_init = alps_hw_init_v3;
priv->process_packet = alps_process_packet_v3;
priv->set_abs_params = alps_set_abs_params_mt;
break;
case ALPS_PROTO_V4:
ret = alps_hw_init_v4(psmouse);
priv->hw_init = alps_hw_init_v4;
priv->process_packet = alps_process_packet_v4;
priv->set_abs_params = alps_set_abs_params_mt;
break;
}

return ret;
}

static int alps_match_table(struct psmouse *psmouse, struct alps_data *priv,
Expand All @@ -1465,6 +1454,8 @@ static int alps_match_table(struct psmouse *psmouse, struct alps_data *priv,
model->command_mode_resp == ec[2])) {

priv->proto_version = model->proto_version;
alps_set_defaults(priv);

priv->flags = model->flags;
priv->byte0 = model->byte0;
priv->mask0 = model->mask0;
Expand Down Expand Up @@ -1523,7 +1514,7 @@ static int alps_reconnect(struct psmouse *psmouse)
if (alps_identify(psmouse, priv) < 0)
return -1;

return alps_hw_init(psmouse);
return priv->hw_init(psmouse);
}

static void alps_disconnect(struct psmouse *psmouse)
Expand All @@ -1536,6 +1527,29 @@ static void alps_disconnect(struct psmouse *psmouse)
kfree(priv);
}

static void alps_set_abs_params_st(struct alps_data *priv,
struct input_dev *dev1)
{
input_set_abs_params(dev1, ABS_X, 0, 1023, 0, 0);
input_set_abs_params(dev1, ABS_Y, 0, 767, 0, 0);
}

static void alps_set_abs_params_mt(struct alps_data *priv,
struct input_dev *dev1)
{
set_bit(INPUT_PROP_SEMI_MT, dev1->propbit);
input_mt_init_slots(dev1, 2, 0);
input_set_abs_params(dev1, ABS_MT_POSITION_X, 0, ALPS_V3_X_MAX, 0, 0);
input_set_abs_params(dev1, ABS_MT_POSITION_Y, 0, ALPS_V3_Y_MAX, 0, 0);

set_bit(BTN_TOOL_DOUBLETAP, dev1->keybit);
set_bit(BTN_TOOL_TRIPLETAP, dev1->keybit);
set_bit(BTN_TOOL_QUADTAP, dev1->keybit);

input_set_abs_params(dev1, ABS_X, 0, ALPS_V3_X_MAX, 0, 0);
input_set_abs_params(dev1, ABS_Y, 0, ALPS_V3_Y_MAX, 0, 0);
}

int alps_init(struct psmouse *psmouse)
{
struct alps_data *priv;
Expand All @@ -1556,7 +1570,7 @@ int alps_init(struct psmouse *psmouse)
if (alps_identify(psmouse, priv) < 0)
goto init_fail;

if (alps_hw_init(psmouse))
if (priv->hw_init(psmouse))
goto init_fail;

/*
Expand All @@ -1578,28 +1592,7 @@ int alps_init(struct psmouse *psmouse)

dev1->evbit[BIT_WORD(EV_ABS)] |= BIT_MASK(EV_ABS);

switch (priv->proto_version) {
case ALPS_PROTO_V1:
case ALPS_PROTO_V2:
input_set_abs_params(dev1, ABS_X, 0, 1023, 0, 0);
input_set_abs_params(dev1, ABS_Y, 0, 767, 0, 0);
break;
case ALPS_PROTO_V3:
case ALPS_PROTO_V4:
set_bit(INPUT_PROP_SEMI_MT, dev1->propbit);
input_mt_init_slots(dev1, 2, 0);
input_set_abs_params(dev1, ABS_MT_POSITION_X, 0, ALPS_V3_X_MAX, 0, 0);
input_set_abs_params(dev1, ABS_MT_POSITION_Y, 0, ALPS_V3_Y_MAX, 0, 0);

set_bit(BTN_TOOL_DOUBLETAP, dev1->keybit);
set_bit(BTN_TOOL_TRIPLETAP, dev1->keybit);
set_bit(BTN_TOOL_QUADTAP, dev1->keybit);

input_set_abs_params(dev1, ABS_X, 0, ALPS_V3_X_MAX, 0, 0);
input_set_abs_params(dev1, ABS_Y, 0, ALPS_V3_Y_MAX, 0, 0);
break;
}

priv->set_abs_params(priv, dev1);
input_set_abs_params(dev1, ABS_PRESSURE, 0, 127, 0, 0);

if (priv->flags & ALPS_WHEEL) {
Expand Down
7 changes: 7 additions & 0 deletions trunk/drivers/input/mouse/alps.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ struct alps_nibble_commands {
* mask0, should match byte0.
* @mask0: The mask used to check the first byte of the report.
* @flags: Additional device capabilities (passthrough port, trackstick, etc.).
* @hw_init: Protocol-specific hardware init function.
* @process_packet: Protocol-specific function to process a report packet.
* @set_abs_params: Protocol-specific function to configure the input_dev.
* @prev_fin: Finger bit from previous packet.
* @multi_packet: Multi-packet data in progress.
* @multi_data: Saved multi-packet data.
Expand All @@ -94,6 +97,10 @@ struct alps_data {
unsigned char byte0, mask0;
unsigned char flags;

int (*hw_init)(struct psmouse *psmouse);
void (*process_packet)(struct psmouse *psmouse);
void (*set_abs_params)(struct alps_data *priv, struct input_dev *dev1);

int prev_fin;
int multi_packet;
unsigned char multi_data[6];
Expand Down

0 comments on commit 3616ec2

Please sign in to comment.