summaryrefslogtreecommitdiff
path: root/goodix_brl_hw.c
diff options
context:
space:
mode:
authorWendly Li <wendlyli@google.com>2022-05-30 12:22:28 +0000
committerWendly Li <wendlyli@google.com>2022-06-24 06:00:02 +0000
commit616086ad731981c95fd01f915538f7a5da60804c (patch)
tree68bc6d13aa02b3b942301d4e64d8a4268ae2d2ac /goodix_brl_hw.c
parentbeb4b57d63552662a471943e001286d5f82bee68 (diff)
downloadgoodix_touch-616086ad731981c95fd01f915538f7a5da60804c.tar.gz
goodix: Support screen protector mode
Bug: 214118813 Bug: 214118988 Test: Be able to set/get screen protector mode Change-Id: Id9464c4d565f9d104ef8e1a83cb3f80aa17b6828 Signed-off-by: Wendly Li <wendlyli@google.com>
Diffstat (limited to 'goodix_brl_hw.c')
-rw-r--r--goodix_brl_hw.c58
1 files changed, 49 insertions, 9 deletions
diff --git a/goodix_brl_hw.c b/goodix_brl_hw.c
index 79b921a..ce5451c 100644
--- a/goodix_brl_hw.c
+++ b/goodix_brl_hw.c
@@ -1553,22 +1553,23 @@ int brl_set_heatmap_enabled(struct goodix_ts_core *cd, bool enabled)
#define CUSTOM_MODE_GRIP 3
#define CUSTOM_MODE_MASK_PALM 0x02
#define CUSTOM_MODE_MASK_GRIP 0x04
+#define CUSTOM_MODE_MASK_SCREEN_PROTECTOR 0x40
int brl_set_palm_enabled(struct goodix_ts_core *cd, bool enabled)
{
- struct goodix_ts_cmd cmd = {0};
+ struct goodix_ts_cmd cmd = { 0 };
cmd.cmd = GOODIX_CMD_SET_CUSTOM_MODE;
cmd.len = 6;
cmd.data[0] = CUSTOM_MODE_PALM;
cmd.data[1] = enabled ? 0 : 1;
if (cd->hw_ops->send_cmd(cd, &cmd))
- ts_err("failed to set palm: %s",
- enabled ? "enabled" : "disabled");
+ ts_err("failed to %s palm mode",
+ enabled ? "enable" : "disable");
return 0;
}
-int brl_get_palm_enabled(struct goodix_ts_core *cd, bool* enabled)
+int brl_get_palm_enabled(struct goodix_ts_core *cd, bool *enabled)
{
int ret = 0;
u8 val;
@@ -1577,6 +1578,7 @@ int brl_get_palm_enabled(struct goodix_ts_core *cd, bool* enabled)
if (ret != 0) {
ts_err("failed to get palm enabled, ret: %d", ret);
*enabled = false;
+ return ret;
}
*enabled = (val & CUSTOM_MODE_MASK_PALM) == 0;
return ret;
@@ -1584,33 +1586,67 @@ int brl_get_palm_enabled(struct goodix_ts_core *cd, bool* enabled)
int brl_set_grip_enabled(struct goodix_ts_core *cd, bool enabled)
{
- struct goodix_ts_cmd cmd = {0};
+ struct goodix_ts_cmd cmd = { 0 };
cmd.cmd = GOODIX_CMD_SET_CUSTOM_MODE;
cmd.len = 6;
cmd.data[0] = CUSTOM_MODE_GRIP;
cmd.data[1] = enabled ? 1 : 0;
if (cd->hw_ops->send_cmd(cd, &cmd))
- ts_err("failed to set palm: %s",
- enabled ? "enabled" : "disabled");
+ ts_err("failed to %s grip mode",
+ enabled ? "enable" : "disable");
return 0;
}
-int brl_get_grip_enabled(struct goodix_ts_core *cd, bool* enabled)
+int brl_get_grip_enabled(struct goodix_ts_core *cd, bool *enabled)
{
int ret = 0;
u8 val;
ret = cd->hw_ops->read(cd, GOODIX_FEATURE_STATUS_ADDR, &val, 1);
if (ret != 0) {
- ts_err("failed to get palm enabled, ret: %d", ret);
+ ts_err("failed to get grip enabled, ret: %d", ret);
*enabled = false;
+ return ret;
}
*enabled = (val & CUSTOM_MODE_MASK_GRIP) != 0;
return ret;
}
+#define GOODIX_CMD_SET_SCREEN_PROTECTOR_ENABLED 0x72
+int brl_set_screen_protector_mode_enabled(
+ struct goodix_ts_core *cd, bool enabled)
+{
+ struct goodix_ts_cmd cmd = { 0 };
+
+ cmd.cmd = GOODIX_CMD_SET_SCREEN_PROTECTOR_ENABLED;
+ cmd.len = 5;
+ cmd.data[0] = enabled ? 1 : 0;
+ if (cd->hw_ops->send_cmd(cd, &cmd))
+ ts_err("failed to %s screen protector mode",
+ enabled ? "enable" : "disable");
+
+ return 0;
+}
+
+int brl_get_screen_protector_mode_enabled(
+ struct goodix_ts_core *cd, bool *enabled)
+{
+ int ret = 0;
+ u8 val;
+
+ ret = cd->hw_ops->read(cd, GOODIX_FEATURE_STATUS_ADDR, &val, 1);
+ if (ret != 0) {
+ ts_err("failed to get screen protector mode enabled, ret: %d",
+ ret);
+ *enabled = false;
+ return ret;
+ }
+ *enabled = (val & CUSTOM_MODE_MASK_SCREEN_PROTECTOR) != 0;
+ return ret;
+}
+
static struct goodix_ts_hw_ops brl_hw_ops = {
.power_on = brl_power_on,
.resume = brl_resume,
@@ -1638,6 +1674,10 @@ static struct goodix_ts_hw_ops brl_hw_ops = {
.get_palm_enabled = brl_get_palm_enabled,
.set_grip_enabled = brl_set_grip_enabled,
.get_grip_enabled = brl_get_grip_enabled,
+ .set_screen_protector_mode_enabled =
+ brl_set_screen_protector_mode_enabled,
+ .get_screen_protector_mode_enabled =
+ brl_get_screen_protector_mode_enabled,
};
struct goodix_ts_hw_ops *goodix_get_hw_ops(void)