Skip to content

Commit 3296f71

Browse files
committed
Input: ALPS - consolidate setting protocol parameters
Move setting of all protocol properties into alps_set_protocol (former alps_set_defaults) instead of having it split between several functions. Tested-by: Pali Rohár <pali.rohar@gmail.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
1 parent 8326bb5 commit 3296f71

File tree

1 file changed

+67
-64
lines changed

1 file changed

+67
-64
lines changed

drivers/input/mouse/alps.c

Lines changed: 67 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,22 @@ static const struct alps_model_info alps_model_data[] = {
130130
{ { 0x73, 0x02, 0x64 }, 0x8a, { ALPS_PROTO_V4, 0x8f, 0x8f, 0 } },
131131
};
132132

133+
static const struct alps_protocol_info alps_v3_protocol_data = {
134+
ALPS_PROTO_V3, 0x8f, 0x8f, ALPS_DUALPOINT
135+
};
136+
137+
static const struct alps_protocol_info alps_v3_rushmore_data = {
138+
ALPS_PROTO_V3_RUSHMORE, 0x8f, 0x8f, ALPS_DUALPOINT
139+
};
140+
141+
static const struct alps_protocol_info alps_v5_protocol_data = {
142+
ALPS_PROTO_V5, 0xc8, 0xd8, 0
143+
};
144+
145+
static const struct alps_protocol_info alps_v7_protocol_data = {
146+
ALPS_PROTO_V7, 0x48, 0x48, ALPS_DUALPOINT
147+
};
148+
133149
static void alps_set_abs_params_st(struct alps_data *priv,
134150
struct input_dev *dev1);
135151
static void alps_set_abs_params_mt(struct alps_data *priv,
@@ -2162,11 +2178,18 @@ static int alps_hw_init_v7(struct psmouse *psmouse)
21622178
return ret;
21632179
}
21642180

2165-
static void alps_set_defaults(struct alps_data *priv)
2181+
static int alps_set_protocol(struct psmouse *psmouse,
2182+
struct alps_data *priv,
2183+
const struct alps_protocol_info *protocol)
21662184
{
2167-
priv->byte0 = 0x8f;
2168-
priv->mask0 = 0x8f;
2169-
priv->flags = ALPS_DUALPOINT;
2185+
psmouse->private = priv;
2186+
2187+
setup_timer(&priv->timer, alps_flush_packet, (unsigned long)psmouse);
2188+
2189+
priv->proto_version = protocol->version;
2190+
priv->byte0 = protocol->byte0;
2191+
priv->mask0 = protocol->mask0;
2192+
priv->flags = protocol->flags;
21702193

21712194
priv->x_max = 2000;
21722195
priv->y_max = 1400;
@@ -2201,6 +2224,11 @@ static void alps_set_defaults(struct alps_data *priv)
22012224
priv->addr_command = PSMOUSE_CMD_RESET_WRAP;
22022225
priv->x_bits = 16;
22032226
priv->y_bits = 12;
2227+
2228+
if (alps_probe_trackstick_v3(psmouse,
2229+
ALPS_REG_BASE_RUSHMORE) < 0)
2230+
priv->flags &= ~ALPS_DUALPOINT;
2231+
22042232
break;
22052233

22062234
case ALPS_PROTO_V4:
@@ -2210,21 +2238,20 @@ static void alps_set_defaults(struct alps_data *priv)
22102238
priv->nibble_commands = alps_v4_nibble_commands;
22112239
priv->addr_command = PSMOUSE_CMD_DISABLE;
22122240
break;
2241+
22132242
case ALPS_PROTO_V5:
22142243
priv->hw_init = alps_hw_init_dolphin_v1;
22152244
priv->process_packet = alps_process_touchpad_packet_v3_v5;
22162245
priv->decode_fields = alps_decode_dolphin;
22172246
priv->set_abs_params = alps_set_abs_params_mt;
22182247
priv->nibble_commands = alps_v3_nibble_commands;
22192248
priv->addr_command = PSMOUSE_CMD_RESET_WRAP;
2220-
priv->byte0 = 0xc8;
2221-
priv->mask0 = 0xd8;
2222-
priv->flags = 0;
22232249
priv->x_max = 1360;
22242250
priv->y_max = 660;
22252251
priv->x_bits = 23;
22262252
priv->y_bits = 12;
22272253
break;
2254+
22282255
case ALPS_PROTO_V6:
22292256
priv->hw_init = alps_hw_init_v6;
22302257
priv->process_packet = alps_process_packet_v6;
@@ -2233,26 +2260,29 @@ static void alps_set_defaults(struct alps_data *priv)
22332260
priv->x_max = 2047;
22342261
priv->y_max = 1535;
22352262
break;
2263+
22362264
case ALPS_PROTO_V7:
22372265
priv->hw_init = alps_hw_init_v7;
22382266
priv->process_packet = alps_process_packet_v7;
22392267
priv->decode_fields = alps_decode_packet_v7;
22402268
priv->set_abs_params = alps_set_abs_params_mt;
22412269
priv->nibble_commands = alps_v3_nibble_commands;
22422270
priv->addr_command = PSMOUSE_CMD_RESET_WRAP;
2243-
priv->x_max = 0xfff;
2244-
priv->y_max = 0x7ff;
2245-
priv->byte0 = 0x48;
2246-
priv->mask0 = 0x48;
2271+
2272+
if (alps_dolphin_get_device_area(psmouse, priv))
2273+
return -EIO;
22472274

22482275
if (priv->fw_ver[1] != 0xba)
22492276
priv->flags |= ALPS_BUTTONPAD;
2277+
22502278
break;
22512279
}
2280+
2281+
return 0;
22522282
}
22532283

2254-
static int alps_match_table(struct psmouse *psmouse, struct alps_data *priv,
2255-
unsigned char *e7, unsigned char *ec)
2284+
static const struct alps_protocol_info *alps_match_table(unsigned char *e7,
2285+
unsigned char *ec)
22562286
{
22572287
const struct alps_model_info *model;
22582288
int i;
@@ -2264,22 +2294,16 @@ static int alps_match_table(struct psmouse *psmouse, struct alps_data *priv,
22642294
(!model->command_mode_resp ||
22652295
model->command_mode_resp == ec[2])) {
22662296

2267-
priv->proto_version = model->protocol_info.version;
2268-
alps_set_defaults(priv);
2269-
2270-
priv->flags = model->protocol_info.flags;
2271-
priv->byte0 = model->protocol_info.byte0;
2272-
priv->mask0 = model->protocol_info.mask0;
2273-
2274-
return 0;
2297+
return &model->protocol_info;
22752298
}
22762299
}
22772300

2278-
return -EINVAL;
2301+
return NULL;
22792302
}
22802303

22812304
static int alps_identify(struct psmouse *psmouse, struct alps_data *priv)
22822305
{
2306+
const struct alps_protocol_info *protocol;
22832307
unsigned char e6[4], e7[4], ec[4];
22842308

22852309
/*
@@ -2306,48 +2330,30 @@ static int alps_identify(struct psmouse *psmouse, struct alps_data *priv)
23062330
alps_exit_command_mode(psmouse))
23072331
return -EIO;
23082332

2309-
/* Save the Firmware version */
2310-
memcpy(priv->fw_ver, ec, 3);
2311-
2312-
if (alps_match_table(psmouse, priv, e7, ec) == 0) {
2313-
return 0;
2314-
} else if (e7[0] == 0x73 && e7[1] == 0x03 && e7[2] == 0x50 &&
2315-
ec[0] == 0x73 && (ec[1] == 0x01 || ec[1] == 0x02)) {
2316-
priv->proto_version = ALPS_PROTO_V5;
2317-
alps_set_defaults(priv);
2318-
if (alps_dolphin_get_device_area(psmouse, priv))
2319-
return -EIO;
2320-
else
2321-
return 0;
2322-
} else if (ec[0] == 0x88 &&
2323-
((ec[1] & 0xf0) == 0xb0 || (ec[1] & 0xf0) == 0xc0)) {
2324-
priv->proto_version = ALPS_PROTO_V7;
2325-
alps_set_defaults(priv);
2326-
2327-
return 0;
2328-
} else if (ec[0] == 0x88 && ec[1] == 0x08) {
2329-
priv->proto_version = ALPS_PROTO_V3_RUSHMORE;
2330-
alps_set_defaults(priv);
2331-
2332-
/* hack to make addr_command, nibble_command available */
2333-
psmouse->private = priv;
2334-
2335-
if (alps_probe_trackstick_v3(psmouse, ALPS_REG_BASE_RUSHMORE))
2336-
priv->flags &= ~ALPS_DUALPOINT;
2337-
2338-
return 0;
2339-
} else if (ec[0] == 0x88 && ec[1] == 0x07 &&
2340-
ec[2] >= 0x90 && ec[2] <= 0x9d) {
2341-
priv->proto_version = ALPS_PROTO_V3;
2342-
alps_set_defaults(priv);
2343-
2344-
return 0;
2333+
protocol = alps_match_table(e7, ec);
2334+
if (!protocol) {
2335+
if (e7[0] == 0x73 && e7[1] == 0x03 && e7[2] == 0x50 &&
2336+
ec[0] == 0x73 && (ec[1] == 0x01 || ec[1] == 0x02)) {
2337+
protocol = &alps_v5_protocol_data;
2338+
} else if (ec[0] == 0x88 &&
2339+
((ec[1] & 0xf0) == 0xb0 || (ec[1] & 0xf0) == 0xc0)) {
2340+
protocol = &alps_v7_protocol_data;
2341+
} else if (ec[0] == 0x88 && ec[1] == 0x08) {
2342+
protocol = &alps_v3_rushmore_data;
2343+
} else if (ec[0] == 0x88 && ec[1] == 0x07 &&
2344+
ec[2] >= 0x90 && ec[2] <= 0x9d) {
2345+
protocol = &alps_v3_protocol_data;
2346+
} else {
2347+
psmouse_dbg(psmouse,
2348+
"Likely not an ALPS touchpad: E7=%3ph, EC=%3ph\n", e7, ec);
2349+
return -EINVAL;
2350+
}
23452351
}
23462352

2347-
psmouse_dbg(psmouse,
2348-
"Likely not an ALPS touchpad: E7=%3ph, EC=%3ph\n", e7, ec);
2353+
/* Save the Firmware version */
2354+
memcpy(priv->fw_ver, ec, 3);
23492355

2350-
return -EINVAL;
2356+
return alps_set_protocol(psmouse, priv, protocol);
23512357
}
23522358

23532359
static int alps_reconnect(struct psmouse *psmouse)
@@ -2410,9 +2416,6 @@ int alps_init(struct psmouse *psmouse)
24102416
goto init_fail;
24112417

24122418
priv->dev2 = dev2;
2413-
setup_timer(&priv->timer, alps_flush_packet, (unsigned long)psmouse);
2414-
2415-
psmouse->private = priv;
24162419

24172420
psmouse_reset(psmouse);
24182421

0 commit comments

Comments
 (0)