diff options
Diffstat (limited to 'syna_tcm2.c')
-rw-r--r-- | syna_tcm2.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/syna_tcm2.c b/syna_tcm2.c index dc76ddd..584275d 100644 --- a/syna_tcm2.c +++ b/syna_tcm2.c @@ -272,6 +272,32 @@ static void syna_dev_set_heatmap_mode(struct syna_tcm *tcm, bool en) } } +/** + * syna_dev_restore_feature_setting() + * + * Restore the feature settings after the device resume. + * + * @param + * [ in] tcm: tcm driver handle + * + * @return + * on success, 0; otherwise, negative value on error. + */ +static void syna_dev_restore_feature_setting(struct syna_tcm *tcm) +{ + syna_dev_set_heatmap_mode(tcm, true); + + syna_tcm_set_dynamic_config(tcm->tcm_dev, + DC_ENABLE_PALM_REJECTION, + (tcm->enable_fw_palm & 0x01), + RESP_IN_POLLING); + + syna_tcm_set_dynamic_config(tcm->tcm_dev, + DC_ENABLE_GRIP_SUPPRESSION, + (tcm->enable_fw_grip & 0x01), + RESP_IN_POLLING); +} + #ifdef ENABLE_CUSTOM_TOUCH_ENTITY /** * syna_dev_parse_custom_touch_data_cb() @@ -553,6 +579,7 @@ static void syna_dev_report_input_events(struct syna_tcm *tcm) break; case FINGER: case GLOVED_OBJECT: + case PALM: x = object_data[idx].x_pos; y = object_data[idx].y_pos; wx = object_data[idx].x_width; @@ -839,6 +866,13 @@ static void syna_offload_set_running(struct syna_tcm *tcm, bool running) if (tcm->offload.offload_running != running) { tcm->offload.offload_running = running; } + if (tcm->offload.offload_running == tcm->enable_fw_grip && tcm->enable_fw_grip < 2) { + tcm->enable_fw_grip = tcm->offload.offload_running ? 0 : 1; + syna_tcm_set_dynamic_config(tcm->tcm_dev, + DC_ENABLE_GRIP_SUPPRESSION, + tcm->enable_fw_grip, + RESP_IN_POLLING); + } } static void syna_offload_report(void *handle, @@ -1734,7 +1768,7 @@ static int syna_dev_resume(struct device *dev) goto exit; } - syna_dev_set_heatmap_mode(tcm, true); + syna_dev_restore_feature_setting(tcm); retval = 0; @@ -2517,6 +2551,10 @@ static int syna_dev_probe(struct platform_device *pdev) } #endif + tcm->enable_fw_grip = 0x00; + tcm->enable_fw_palm = 0x01; + syna_dev_restore_feature_setting(tcm); + #if defined(USE_DRM_BRIDGE) retval = syna_register_panel_bridge(tcm); #elif defined(ENABLE_DISP_NOTIFIER) |