mirror of https://gitee.com/openkylin/linux.git
Input: mms114 - support MMS136
The Melfas MMS136 is similar to the other MMS variants but has event packages of 6 bytes rather than 8 as the others. The define is named FINGER_EVENT_SZ in the vendor drivers so I renamed it from MMS*_PACKET_SZ to MMS*_EVENT_SZ. After this patch, the touchscreen on the Samsung GT-I8530 works fine with PostmarketOS. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Link: https://lore.kernel.org/r/20210404232619.3092682-1-linus.walleij@linaro.org Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
a811ecf8f1
commit
53fefdd1d3
|
@ -1,5 +1,5 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
// Melfas MMS114/MMS152 touchscreen device driver
|
// Melfas MMS114/MMS136/MMS152 touchscreen device driver
|
||||||
//
|
//
|
||||||
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
|
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
|
||||||
// Author: Joonyoung Shim <jy0922.shim@samsung.com>
|
// Author: Joonyoung Shim <jy0922.shim@samsung.com>
|
||||||
|
@ -44,7 +44,8 @@
|
||||||
#define MMS114_MAX_AREA 0xff
|
#define MMS114_MAX_AREA 0xff
|
||||||
|
|
||||||
#define MMS114_MAX_TOUCH 10
|
#define MMS114_MAX_TOUCH 10
|
||||||
#define MMS114_PACKET_NUM 8
|
#define MMS114_EVENT_SIZE 8
|
||||||
|
#define MMS136_EVENT_SIZE 6
|
||||||
|
|
||||||
/* Touch type */
|
/* Touch type */
|
||||||
#define MMS114_TYPE_NONE 0
|
#define MMS114_TYPE_NONE 0
|
||||||
|
@ -53,6 +54,7 @@
|
||||||
|
|
||||||
enum mms_type {
|
enum mms_type {
|
||||||
TYPE_MMS114 = 114,
|
TYPE_MMS114 = 114,
|
||||||
|
TYPE_MMS136 = 136,
|
||||||
TYPE_MMS152 = 152,
|
TYPE_MMS152 = 152,
|
||||||
TYPE_MMS345L = 345,
|
TYPE_MMS345L = 345,
|
||||||
};
|
};
|
||||||
|
@ -209,7 +211,11 @@ static irqreturn_t mms114_interrupt(int irq, void *dev_id)
|
||||||
if (packet_size <= 0)
|
if (packet_size <= 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
touch_size = packet_size / MMS114_PACKET_NUM;
|
/* MMS136 has slightly different event size */
|
||||||
|
if (data->type == TYPE_MMS136)
|
||||||
|
touch_size = packet_size / MMS136_EVENT_SIZE;
|
||||||
|
else
|
||||||
|
touch_size = packet_size / MMS114_EVENT_SIZE;
|
||||||
|
|
||||||
error = __mms114_read_reg(data, MMS114_INFORMATION, packet_size,
|
error = __mms114_read_reg(data, MMS114_INFORMATION, packet_size,
|
||||||
(u8 *)touch);
|
(u8 *)touch);
|
||||||
|
@ -275,6 +281,7 @@ static int mms114_get_version(struct mms114_data *data)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TYPE_MMS114:
|
case TYPE_MMS114:
|
||||||
|
case TYPE_MMS136:
|
||||||
error = __mms114_read_reg(data, MMS114_TSP_REV, 6, buf);
|
error = __mms114_read_reg(data, MMS114_TSP_REV, 6, buf);
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
|
@ -297,8 +304,8 @@ static int mms114_setup_regs(struct mms114_data *data)
|
||||||
if (error < 0)
|
if (error < 0)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
/* Only MMS114 has configuration and power on registers */
|
/* Only MMS114 and MMS136 have configuration and power on registers */
|
||||||
if (data->type != TYPE_MMS114)
|
if (data->type != TYPE_MMS114 && data->type != TYPE_MMS136)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error = mms114_set_active(data, true);
|
error = mms114_set_active(data, true);
|
||||||
|
@ -480,7 +487,7 @@ static int mms114_probe(struct i2c_client *client,
|
||||||
0, data->props.max_y, 0, 0);
|
0, data->props.max_y, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data->type == TYPE_MMS114) {
|
if (data->type == TYPE_MMS114 || data->type == TYPE_MMS136) {
|
||||||
/*
|
/*
|
||||||
* The firmware handles movement and pressure fuzz, so
|
* The firmware handles movement and pressure fuzz, so
|
||||||
* don't duplicate that in software.
|
* don't duplicate that in software.
|
||||||
|
@ -604,6 +611,9 @@ static const struct of_device_id mms114_dt_match[] = {
|
||||||
{
|
{
|
||||||
.compatible = "melfas,mms114",
|
.compatible = "melfas,mms114",
|
||||||
.data = (void *)TYPE_MMS114,
|
.data = (void *)TYPE_MMS114,
|
||||||
|
}, {
|
||||||
|
.compatible = "melfas,mms136",
|
||||||
|
.data = (void *)TYPE_MMS136,
|
||||||
}, {
|
}, {
|
||||||
.compatible = "melfas,mms152",
|
.compatible = "melfas,mms152",
|
||||||
.data = (void *)TYPE_MMS152,
|
.data = (void *)TYPE_MMS152,
|
||||||
|
|
Loading…
Reference in New Issue