Loading arch/arm64/boot/dts/qcom/sdmmagpie-idp.dtsi +3 −1 Original line number Diff line number Diff line Loading @@ -230,9 +230,11 @@ interrupts = <9 0x2008>; vdd-supply = <&pm6150_l10>; avdd-supply = <&pm6150l_l7>; pinctrl-names = "pmx_ts_active", "pmx_ts_suspend"; pinctrl-names = "pmx_ts_active", "pmx_ts_suspend", "pmx_ts_release"; pinctrl-0 = <&ts_active>; pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>; pinctrl-2 = <&ts_release>; st,irq-gpio = <&tlmm 9 0x2008>; st,reset-gpio = <&tlmm 8 0x00>; st,regulator_dvdd = "vdd"; Loading arch/arm64/boot/dts/qcom/sdmmagpie-pinctrl.dtsi +17 −2 Original line number Diff line number Diff line Loading @@ -1565,7 +1565,7 @@ config { pins = "gpio9"; drive-strength = <2>; bias-pull-down; bias-disable; }; }; }; Loading @@ -1580,7 +1580,22 @@ config { pins = "gpio8"; drive-strength = <2>; bias-pull-down; bias-disable; }; }; }; pmx_ts_release { ts_release: ts_release { mux { pins = "gpio9", "gpio8"; function = "gpio"; }; config { pins = "gpio9", "gpio8"; drive-strength = <2>; bias-disable; }; }; }; Loading drivers/input/touchscreen/st/fts.c +108 −0 Original line number Diff line number Diff line Loading @@ -4021,6 +4021,19 @@ static void fts_resume_work(struct work_struct *work) __pm_wakeup_event(&info->wakeup_source, HZ); if (info->ts_pinctrl) { /* * Pinctrl handle is optional. If pinctrl handle is found * let pins to be configured in active state. If not * found continue further without error. */ if (pinctrl_select_state(info->ts_pinctrl, info->pinctrl_state_active) < 0) { logError(1, "%s: Failed to select %s pinstate\n", __func__, PINCTRL_STATE_ACTIVE); } } info->resume_bit = 1; #ifdef USE_NOISE_PARAM readNoiseParameters(noise_params); Loading Loading @@ -4057,6 +4070,19 @@ static void fts_suspend_work(struct work_struct *work) info->sensor_sleep = true; fts_enableInterrupt(); if (info->ts_pinctrl) { /* * Pinctrl handle is optional. If pinctrl handle is found * let pins to be configured in suspend state. If not * found continue further without error. */ if (pinctrl_select_state(info->ts_pinctrl, info->pinctrl_state_suspend) < 0) { logError(1, "%s: Failed to select %s pinstate\n", __func__, PINCTRL_STATE_SUSPEND); } } } Loading Loading @@ -4157,6 +4183,53 @@ static struct notifier_block fts_noti_block = { .notifier_call = fts_fb_state_chg_callback, }; static int fts_pinctrl_init(struct fts_ts_info *info) { int retval; /* Get pinctrl if target uses pinctrl */ info->ts_pinctrl = devm_pinctrl_get(info->dev); if (IS_ERR_OR_NULL(info->ts_pinctrl)) { retval = PTR_ERR(info->ts_pinctrl); logError(1, "Target does not use pinctrl %d\n", retval); goto err_pinctrl_get; } info->pinctrl_state_active = pinctrl_lookup_state(info->ts_pinctrl, PINCTRL_STATE_ACTIVE); if (IS_ERR_OR_NULL(info->pinctrl_state_active)) { retval = PTR_ERR(info->pinctrl_state_active); logError(1, "Can not lookup %s pinstate %d\n", PINCTRL_STATE_ACTIVE, retval); goto err_pinctrl_lookup; } info->pinctrl_state_suspend = pinctrl_lookup_state(info->ts_pinctrl, PINCTRL_STATE_SUSPEND); if (IS_ERR_OR_NULL(info->pinctrl_state_suspend)) { retval = PTR_ERR(info->pinctrl_state_suspend); logError(1, "Can not lookup %s pinstate %d\n", PINCTRL_STATE_SUSPEND, retval); goto err_pinctrl_lookup; } info->pinctrl_state_release = pinctrl_lookup_state(info->ts_pinctrl, PINCTRL_STATE_RELEASE); if (IS_ERR_OR_NULL(info->pinctrl_state_release)) { retval = PTR_ERR(info->pinctrl_state_release); logError(1, "Can not lookup %s pinstate %d\n", PINCTRL_STATE_RELEASE, retval); } return 0; err_pinctrl_lookup: devm_pinctrl_put(info->ts_pinctrl); err_pinctrl_get: info->ts_pinctrl = NULL; return retval; } static int fts_get_reg(struct fts_ts_info *info, bool get) { int retval; Loading Loading @@ -4443,6 +4516,21 @@ static int fts_probe(struct i2c_client *client, } info->client->irq = gpio_to_irq(info->bdata->irq_gpio); retval = fts_pinctrl_init(info); if (!retval && info->ts_pinctrl) { /* * Pinctrl handle is optional. If pinctrl handle is found * let pins to be configured in active state. If not * found continue further without error. */ retval = pinctrl_select_state(info->ts_pinctrl, info->pinctrl_state_active); if (retval < 0) { logError(1, "%s: Failed to select %s pinstate %d\n", __func__, PINCTRL_STATE_ACTIVE, retval); } } logError(0, "%s SET Auto Fw Update:\n", tag); info->fwu_workqueue = alloc_workqueue("fts-fwu-queue", WQ_UNBOUND|WQ_HIGHPRI|WQ_CPU_INTENSIVE, 1); Loading Loading @@ -4692,6 +4780,17 @@ static int fts_probe(struct i2c_client *client, wakeup_source_trash(&info->wakeup_source); ProbeErrorExit_3: if (info->ts_pinctrl) { if (IS_ERR_OR_NULL(info->pinctrl_state_release)) { devm_pinctrl_put(info->ts_pinctrl); info->ts_pinctrl = NULL; } else { if (pinctrl_select_state(info->ts_pinctrl, info->pinctrl_state_release)) logError(1, "%s:Failed to select %s pinstate\n", __func__, PINCTRL_STATE_RELEASE); } } fts_enable_reg(info, false); fts_gpio_setup(info->bdata->irq_gpio, false, 0, 0); fts_gpio_setup(info->bdata->reset_gpio, false, 0, 0); Loading Loading @@ -4756,6 +4855,15 @@ static int fts_remove(struct i2c_client *client) wakeup_source_trash(&info->wakeup_source); destroy_workqueue(info->fwu_workqueue); if (info->ts_pinctrl) { if (IS_ERR_OR_NULL(info->pinctrl_state_release)) { devm_pinctrl_put(info->ts_pinctrl); info->ts_pinctrl = NULL; } else { pinctrl_select_state(info->ts_pinctrl, info->pinctrl_state_release); } } fts_enable_reg(info, false); fts_gpio_setup(info->bdata->irq_gpio, false, 0, 0); fts_gpio_setup(info->bdata->reset_gpio, false, 0, 0); Loading drivers/input/touchscreen/st/fts.h +9 −0 Original line number Diff line number Diff line Loading @@ -174,6 +174,10 @@ #define TSP_BUF_SIZE 4096 #define PINCTRL_STATE_ACTIVE "pmx_ts_active" #define PINCTRL_STATE_SUSPEND "pmx_ts_suspend" #define PINCTRL_STATE_RELEASE "pmx_ts_release" /*add by guchong*/ #ifdef PHONE_GESTURE extern u16 gesture_coordinates_x[GESTURE_COORDS_REPORT_MAX]; Loading Loading @@ -243,6 +247,11 @@ struct fts_ts_info { struct workqueue_struct *fwu_workqueue; struct completion cmd_done; struct pinctrl *ts_pinctrl; struct pinctrl_state *pinctrl_state_active; struct pinctrl_state *pinctrl_state_suspend; struct pinctrl_state *pinctrl_state_release; event_dispatch_handler_t *event_dispatch_table; struct attribute_group attrs; Loading Loading
arch/arm64/boot/dts/qcom/sdmmagpie-idp.dtsi +3 −1 Original line number Diff line number Diff line Loading @@ -230,9 +230,11 @@ interrupts = <9 0x2008>; vdd-supply = <&pm6150_l10>; avdd-supply = <&pm6150l_l7>; pinctrl-names = "pmx_ts_active", "pmx_ts_suspend"; pinctrl-names = "pmx_ts_active", "pmx_ts_suspend", "pmx_ts_release"; pinctrl-0 = <&ts_active>; pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>; pinctrl-2 = <&ts_release>; st,irq-gpio = <&tlmm 9 0x2008>; st,reset-gpio = <&tlmm 8 0x00>; st,regulator_dvdd = "vdd"; Loading
arch/arm64/boot/dts/qcom/sdmmagpie-pinctrl.dtsi +17 −2 Original line number Diff line number Diff line Loading @@ -1565,7 +1565,7 @@ config { pins = "gpio9"; drive-strength = <2>; bias-pull-down; bias-disable; }; }; }; Loading @@ -1580,7 +1580,22 @@ config { pins = "gpio8"; drive-strength = <2>; bias-pull-down; bias-disable; }; }; }; pmx_ts_release { ts_release: ts_release { mux { pins = "gpio9", "gpio8"; function = "gpio"; }; config { pins = "gpio9", "gpio8"; drive-strength = <2>; bias-disable; }; }; }; Loading
drivers/input/touchscreen/st/fts.c +108 −0 Original line number Diff line number Diff line Loading @@ -4021,6 +4021,19 @@ static void fts_resume_work(struct work_struct *work) __pm_wakeup_event(&info->wakeup_source, HZ); if (info->ts_pinctrl) { /* * Pinctrl handle is optional. If pinctrl handle is found * let pins to be configured in active state. If not * found continue further without error. */ if (pinctrl_select_state(info->ts_pinctrl, info->pinctrl_state_active) < 0) { logError(1, "%s: Failed to select %s pinstate\n", __func__, PINCTRL_STATE_ACTIVE); } } info->resume_bit = 1; #ifdef USE_NOISE_PARAM readNoiseParameters(noise_params); Loading Loading @@ -4057,6 +4070,19 @@ static void fts_suspend_work(struct work_struct *work) info->sensor_sleep = true; fts_enableInterrupt(); if (info->ts_pinctrl) { /* * Pinctrl handle is optional. If pinctrl handle is found * let pins to be configured in suspend state. If not * found continue further without error. */ if (pinctrl_select_state(info->ts_pinctrl, info->pinctrl_state_suspend) < 0) { logError(1, "%s: Failed to select %s pinstate\n", __func__, PINCTRL_STATE_SUSPEND); } } } Loading Loading @@ -4157,6 +4183,53 @@ static struct notifier_block fts_noti_block = { .notifier_call = fts_fb_state_chg_callback, }; static int fts_pinctrl_init(struct fts_ts_info *info) { int retval; /* Get pinctrl if target uses pinctrl */ info->ts_pinctrl = devm_pinctrl_get(info->dev); if (IS_ERR_OR_NULL(info->ts_pinctrl)) { retval = PTR_ERR(info->ts_pinctrl); logError(1, "Target does not use pinctrl %d\n", retval); goto err_pinctrl_get; } info->pinctrl_state_active = pinctrl_lookup_state(info->ts_pinctrl, PINCTRL_STATE_ACTIVE); if (IS_ERR_OR_NULL(info->pinctrl_state_active)) { retval = PTR_ERR(info->pinctrl_state_active); logError(1, "Can not lookup %s pinstate %d\n", PINCTRL_STATE_ACTIVE, retval); goto err_pinctrl_lookup; } info->pinctrl_state_suspend = pinctrl_lookup_state(info->ts_pinctrl, PINCTRL_STATE_SUSPEND); if (IS_ERR_OR_NULL(info->pinctrl_state_suspend)) { retval = PTR_ERR(info->pinctrl_state_suspend); logError(1, "Can not lookup %s pinstate %d\n", PINCTRL_STATE_SUSPEND, retval); goto err_pinctrl_lookup; } info->pinctrl_state_release = pinctrl_lookup_state(info->ts_pinctrl, PINCTRL_STATE_RELEASE); if (IS_ERR_OR_NULL(info->pinctrl_state_release)) { retval = PTR_ERR(info->pinctrl_state_release); logError(1, "Can not lookup %s pinstate %d\n", PINCTRL_STATE_RELEASE, retval); } return 0; err_pinctrl_lookup: devm_pinctrl_put(info->ts_pinctrl); err_pinctrl_get: info->ts_pinctrl = NULL; return retval; } static int fts_get_reg(struct fts_ts_info *info, bool get) { int retval; Loading Loading @@ -4443,6 +4516,21 @@ static int fts_probe(struct i2c_client *client, } info->client->irq = gpio_to_irq(info->bdata->irq_gpio); retval = fts_pinctrl_init(info); if (!retval && info->ts_pinctrl) { /* * Pinctrl handle is optional. If pinctrl handle is found * let pins to be configured in active state. If not * found continue further without error. */ retval = pinctrl_select_state(info->ts_pinctrl, info->pinctrl_state_active); if (retval < 0) { logError(1, "%s: Failed to select %s pinstate %d\n", __func__, PINCTRL_STATE_ACTIVE, retval); } } logError(0, "%s SET Auto Fw Update:\n", tag); info->fwu_workqueue = alloc_workqueue("fts-fwu-queue", WQ_UNBOUND|WQ_HIGHPRI|WQ_CPU_INTENSIVE, 1); Loading Loading @@ -4692,6 +4780,17 @@ static int fts_probe(struct i2c_client *client, wakeup_source_trash(&info->wakeup_source); ProbeErrorExit_3: if (info->ts_pinctrl) { if (IS_ERR_OR_NULL(info->pinctrl_state_release)) { devm_pinctrl_put(info->ts_pinctrl); info->ts_pinctrl = NULL; } else { if (pinctrl_select_state(info->ts_pinctrl, info->pinctrl_state_release)) logError(1, "%s:Failed to select %s pinstate\n", __func__, PINCTRL_STATE_RELEASE); } } fts_enable_reg(info, false); fts_gpio_setup(info->bdata->irq_gpio, false, 0, 0); fts_gpio_setup(info->bdata->reset_gpio, false, 0, 0); Loading Loading @@ -4756,6 +4855,15 @@ static int fts_remove(struct i2c_client *client) wakeup_source_trash(&info->wakeup_source); destroy_workqueue(info->fwu_workqueue); if (info->ts_pinctrl) { if (IS_ERR_OR_NULL(info->pinctrl_state_release)) { devm_pinctrl_put(info->ts_pinctrl); info->ts_pinctrl = NULL; } else { pinctrl_select_state(info->ts_pinctrl, info->pinctrl_state_release); } } fts_enable_reg(info, false); fts_gpio_setup(info->bdata->irq_gpio, false, 0, 0); fts_gpio_setup(info->bdata->reset_gpio, false, 0, 0); Loading
drivers/input/touchscreen/st/fts.h +9 −0 Original line number Diff line number Diff line Loading @@ -174,6 +174,10 @@ #define TSP_BUF_SIZE 4096 #define PINCTRL_STATE_ACTIVE "pmx_ts_active" #define PINCTRL_STATE_SUSPEND "pmx_ts_suspend" #define PINCTRL_STATE_RELEASE "pmx_ts_release" /*add by guchong*/ #ifdef PHONE_GESTURE extern u16 gesture_coordinates_x[GESTURE_COORDS_REPORT_MAX]; Loading Loading @@ -243,6 +247,11 @@ struct fts_ts_info { struct workqueue_struct *fwu_workqueue; struct completion cmd_done; struct pinctrl *ts_pinctrl; struct pinctrl_state *pinctrl_state_active; struct pinctrl_state *pinctrl_state_suspend; struct pinctrl_state *pinctrl_state_release; event_dispatch_handler_t *event_dispatch_table; struct attribute_group attrs; Loading