goodix_brl_mmi: Add mmi status check.

TP:
1. Add "mmi,status" check to goodix driver's probe.
2. Add touch pinctrl settings.

Change-Id: I34581d199a80c4e03cd0e94332ca5cd8ad6d87e4
Reviewed-on: https://gerrit.mot.com/2053118
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Jichao Zou <zoujc@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
litong20 2021-08-27 17:37:20 +08:00 • committed by litong
commit 50d5a673b2
5 changed files with 74 additions and 0 deletions

View file

@ -5,4 +5,6 @@ include $(CLEAR_VARS)
LOCAL_MODULE := goodix_brl_mmi.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
LOCAL_ADDITIONAL_DEPENDENCIES += $(KERNEL_MODULES_OUT)/mmi_info.ko
KBUILD_OPTIONS_GKI += GKI_OBJ_MODULE_DIR=gki
include $(DLKM_DIR)/AndroidKernelModule.mk

View file

@ -12,3 +12,5 @@ modules_install:
clean:
rm -f *.o *.ko *.mod.c *.mod.o *~ .*.cmd Module.symvers
rm -rf .tmp_versions
KBUILD_EXTRA_SYMBOLS += $(M)/../../../mmi_info/$(GKI_OBJ_MODULE_DIR)/Module.symvers

View file

@ -19,6 +19,7 @@
#include <linux/i2c.h>
#include "goodix_ts_core.h"
#include <linux/mmi_device.h>
#define TS_DRIVER_NAME "gtx8_i2c"
#define I2C_MAX_TRANSFER_SIZE 60
@ -169,6 +170,12 @@ static int goodix_i2c_probe(struct i2c_client *client,
int ret = 0;
ts_info("goodix i2c probe in");
if (client->dev.of_node && !mmi_device_is_available(client->dev.of_node)) {
ts_err("mmi: device not supported\n");
return -ENODEV;
}
ret = i2c_check_functionality(client->adapter,
I2C_FUNC_I2C);
if (!ret)

View file

@ -27,6 +27,8 @@
#include "goodix_ts_core.h"
#define PINCTRL_STATE_ACTIVE "pmx_ts_active"
#define PINCTRL_STATE_SUSPEND "pmx_ts_suspend"
#define GOODIX_DEFAULT_CFG_NAME "goodix_cfg_group.cfg"
#define GOOIDX_INPUT_PHYS "goodix_ts/input0"
@ -1348,6 +1350,54 @@ int goodix_ts_power_off(struct goodix_ts_core *cd)
return ret;
}
/**
* goodix_ts_pinctrl_init - Get pinctrl handler and pinctrl_state
* @core_data: pointer to touch core data
* return: 0 ok, <0 failed
*/
static int goodix_ts_pinctrl_init(struct goodix_ts_core *core_data)
{
int r = 0;
/* get pinctrl handler from of node */
core_data->pinctrl = devm_pinctrl_get(core_data->bus->dev);
if (IS_ERR_OR_NULL(core_data->pinctrl)) {
ts_info("Failed to get pinctrl handler[need confirm]");
core_data->pinctrl = NULL;
return -EINVAL;
}
ts_debug("success get pinctrl");
/* active state */
core_data->pin_sta_active = pinctrl_lookup_state(core_data->pinctrl,
PINCTRL_STATE_ACTIVE);
if (IS_ERR_OR_NULL(core_data->pin_sta_active)) {
r = PTR_ERR(core_data->pin_sta_active);
ts_err("Failed to get pinctrl state:%s, r:%d",
PINCTRL_STATE_ACTIVE, r);
core_data->pin_sta_active = NULL;
goto exit_pinctrl_put;
}
ts_debug("success get avtive pinctrl state");
/* suspend state */
core_data->pin_sta_suspend = pinctrl_lookup_state(core_data->pinctrl,
PINCTRL_STATE_SUSPEND);
if (IS_ERR_OR_NULL(core_data->pin_sta_suspend)) {
r = PTR_ERR(core_data->pin_sta_suspend);
ts_err("Failed to get pinctrl state:%s, r:%d",
PINCTRL_STATE_SUSPEND, r);
core_data->pin_sta_suspend = NULL;
goto exit_pinctrl_put;
}
ts_debug("success get suspend pinctrl state");
return 0;
exit_pinctrl_put:
devm_pinctrl_put(core_data->pinctrl);
core_data->pinctrl = NULL;
return r;
}
/**
* goodix_ts_gpio_setup - Request gpio resources from GPIO subsysten
* @core_data: pointer to touch core data
@ -2151,6 +2201,15 @@ static int goodix_ts_probe(struct platform_device *pdev)
goto err_out;
}
/* Pinctrl handle is optional. */
ret = goodix_ts_pinctrl_init(core_data);
if (!ret && core_data->pinctrl) {
ret = pinctrl_select_state(core_data->pinctrl,
core_data->pin_sta_active);
if (ret < 0)
ts_err("Failed to select active pinstate, r:%d", ret);
}
/* confirm it's goodix touch dev or not */
ret = core_data->hw_ops->dev_confirm(core_data);
if (ret) {

View file

@ -444,6 +444,10 @@ struct goodix_ts_core {
struct regulator *avdd;
struct regulator *iovdd;
struct pinctrl *pinctrl;
struct pinctrl_state *pin_sta_active;
struct pinctrl_state *pin_sta_suspend;
int power_on;
int irq;
size_t irq_trig_cnt;