mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 06:03:36 -04:00
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:
parent
9432419679
commit
50d5a673b2
5 changed files with 74 additions and 0 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue