Loading Documentation/devicetree/bindings/input/touchscreen/synaptics_i2c_rmi4.txt +4 −1 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,8 @@ Required properties: config defined in pin groups of interrupt and reset gpio. config defined in pin groups of interrupt and reset gpio. "pmx_ts_suspend" : Disabled configuration of pins, this should specify sleep "pmx_ts_suspend" : Disabled configuration of pins, this should specify sleep config defined in pin groups of interrupt and reset gpio. config defined in pin groups of interrupt and reset gpio. "pmx_ts_release" : Release configuration of pins, this should specify release config defined in pin groups of interrupt and reset gpio. Optional property: Optional property: - vdd-supply : Analog power supply needed to power device - vdd-supply : Analog power supply needed to power device - vcc_i2c-supply : Power source required to pull up i2c bus - vcc_i2c-supply : Power source required to pull up i2c bus Loading Loading @@ -76,9 +78,10 @@ Example: interrupts = <17 0x2>; interrupts = <17 0x2>; vdd-supply = <&pm8226_l19>; vdd-supply = <&pm8226_l19>; vcc_i2c-supply = <&pm8226_lvs1>; vcc_i2c-supply = <&pm8226_lvs1>; pinctrl-names = "pmx_ts_active","pmx_ts_suspend"; pinctrl-names = "pmx_ts_active","pmx_ts_suspend","pmx_ts_release"; pinctrl-0 = <&ts_int_active &ts_reset_active>; pinctrl-0 = <&ts_int_active &ts_reset_active>; pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>; pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>; pinctrl-1 = <&ts_release>; synaptics,reset-gpio = <&msmgpio 16 0x00>; synaptics,reset-gpio = <&msmgpio 16 0x00>; synaptics,irq-gpio = <&msmgpio 17 0x00>; synaptics,irq-gpio = <&msmgpio 17 0x00>; synaptics,i2c-pull-up; synaptics,i2c-pull-up; Loading drivers/input/touchscreen/synaptics_i2c_rmi4.c +77 −65 Original line number Original line Diff line number Diff line Loading @@ -3163,58 +3163,51 @@ static int synaptics_rmi4_pinctrl_init(struct synaptics_rmi4_data *rmi4_data) /* Get pinctrl if target uses pinctrl */ /* Get pinctrl if target uses pinctrl */ rmi4_data->ts_pinctrl = devm_pinctrl_get(&(rmi4_data->i2c_client->dev)); rmi4_data->ts_pinctrl = devm_pinctrl_get(&(rmi4_data->i2c_client->dev)); if (IS_ERR_OR_NULL(rmi4_data->ts_pinctrl)) { if (IS_ERR_OR_NULL(rmi4_data->ts_pinctrl)) { dev_dbg(&rmi4_data->i2c_client->dev, "Target does not use pinctrl\n"); retval = PTR_ERR(rmi4_data->ts_pinctrl); retval = PTR_ERR(rmi4_data->ts_pinctrl); rmi4_data->ts_pinctrl = NULL; return retval; } rmi4_data->gpio_state_active = pinctrl_lookup_state(rmi4_data->ts_pinctrl, "pmx_ts_active"); if (IS_ERR_OR_NULL(rmi4_data->gpio_state_active)) { dev_dbg(&rmi4_data->i2c_client->dev, dev_dbg(&rmi4_data->i2c_client->dev, "Can not get ts default pinstate\n"); "Target does not use pinctrl %d\n", retval); retval = PTR_ERR(rmi4_data->gpio_state_active); goto err_pinctrl_get; rmi4_data->ts_pinctrl = NULL; return retval; } } rmi4_data->gpio_state_suspend rmi4_data->pinctrl_state_active = pinctrl_lookup_state(rmi4_data->ts_pinctrl, "pmx_ts_suspend"); = pinctrl_lookup_state(rmi4_data->ts_pinctrl, if (IS_ERR_OR_NULL(rmi4_data->gpio_state_suspend)) { PINCTRL_STATE_ACTIVE); dev_dbg(&rmi4_data->i2c_client->dev, if (IS_ERR_OR_NULL(rmi4_data->pinctrl_state_active)) { "Can not get ts sleep pinstate\n"); retval = PTR_ERR(rmi4_data->pinctrl_state_active); retval = PTR_ERR(rmi4_data->gpio_state_suspend); dev_err(&rmi4_data->i2c_client->dev, rmi4_data->ts_pinctrl = NULL; "Can not lookup %s pinstate %d\n", return retval; PINCTRL_STATE_ACTIVE, retval); goto err_pinctrl_lookup; } } return 0; rmi4_data->pinctrl_state_suspend = pinctrl_lookup_state(rmi4_data->ts_pinctrl, PINCTRL_STATE_SUSPEND); if (IS_ERR_OR_NULL(rmi4_data->pinctrl_state_suspend)) { retval = PTR_ERR(rmi4_data->pinctrl_state_suspend); dev_err(&rmi4_data->i2c_client->dev, "Can not lookup %s pinstate %d\n", PINCTRL_STATE_SUSPEND, retval); goto err_pinctrl_lookup; } } static int synpatics_rmi4_pinctrl_select(struct synaptics_rmi4_data *rmi4_data, rmi4_data->pinctrl_state_release bool on) = pinctrl_lookup_state(rmi4_data->ts_pinctrl, { PINCTRL_STATE_RELEASE); struct pinctrl_state *pins_state; if (IS_ERR_OR_NULL(rmi4_data->pinctrl_state_release)) { int ret; retval = PTR_ERR(rmi4_data->pinctrl_state_release); dev_dbg(&rmi4_data->i2c_client->dev, pins_state = on ? rmi4_data->gpio_state_active "Can not lookup %s pinstate %d\n", : rmi4_data->gpio_state_suspend; PINCTRL_STATE_RELEASE, retval); if (!IS_ERR_OR_NULL(pins_state)) { ret = pinctrl_select_state(rmi4_data->ts_pinctrl, pins_state); if (ret) { dev_err(&rmi4_data->i2c_client->dev, "can not set %s pins\n", on ? "pmx_ts_active" : "pmx_ts_suspend"); return ret; } } } else dev_err(&rmi4_data->i2c_client->dev, "not a valid '%s' pinstate\n", on ? "pmx_ts_active" : "pmx_ts_suspend"); return 0; return 0; err_pinctrl_lookup: devm_pinctrl_put(rmi4_data->ts_pinctrl); err_pinctrl_get: rmi4_data->ts_pinctrl = NULL; return retval; } } static int synaptics_rmi4_gpio_configure(struct synaptics_rmi4_data *rmi4_data, static int synaptics_rmi4_gpio_configure(struct synaptics_rmi4_data *rmi4_data, Loading Loading @@ -3440,15 +3433,18 @@ static int synaptics_rmi4_probe(struct i2c_client *client, retval = synaptics_rmi4_pinctrl_init(rmi4_data); retval = synaptics_rmi4_pinctrl_init(rmi4_data); if (!retval && rmi4_data->ts_pinctrl) { if (!retval && rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, true); retval = pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_active); if (retval < 0) if (retval < 0) goto err_gpio_config; goto err_pinctrl_select; } else { goto err_pinctrl_init; } } retval = synaptics_rmi4_gpio_configure(rmi4_data, true); retval = synaptics_rmi4_gpio_configure(rmi4_data, true); if (retval < 0) { if (retval < 0) { dev_err(&client->dev, "Failed to configure gpios\n"); dev_err(&client->dev, "Failed to configure gpios\n"); goto pinctrl_sleep; goto err_gpio_config; } } init_waitqueue_head(&rmi4_data->wait); init_waitqueue_head(&rmi4_data->wait); Loading Loading @@ -3661,13 +3657,20 @@ err_free_gpios: gpio_free(rmi4_data->board->reset_gpio); gpio_free(rmi4_data->board->reset_gpio); if (gpio_is_valid(rmi4_data->board->irq_gpio)) if (gpio_is_valid(rmi4_data->board->irq_gpio)) gpio_free(rmi4_data->board->irq_gpio); gpio_free(rmi4_data->board->irq_gpio); pinctrl_sleep: err_gpio_config: err_pinctrl_select: if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, false); if (IS_ERR_OR_NULL(rmi4_data->pinctrl_state_release)) { if (retval < 0) devm_pinctrl_put(rmi4_data->ts_pinctrl); pr_err("Cannot get idle pinctrl state\n"); rmi4_data->ts_pinctrl = NULL; } else { retval = pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_release); if (retval) pr_err("failed to select release pinctrl state\n"); } } err_gpio_config: } err_pinctrl_init: synaptics_rmi4_power_on(rmi4_data, false); synaptics_rmi4_power_on(rmi4_data, false); err_power_device: err_power_device: synaptics_rmi4_regulator_configure(rmi4_data, false); synaptics_rmi4_regulator_configure(rmi4_data, false); Loading Loading @@ -3739,9 +3742,15 @@ static int synaptics_rmi4_remove(struct i2c_client *client) gpio_free(rmi4_data->board->irq_gpio); gpio_free(rmi4_data->board->irq_gpio); if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, false); if (IS_ERR_OR_NULL(rmi4_data->pinctrl_state_release)) { devm_pinctrl_put(rmi4_data->ts_pinctrl); rmi4_data->ts_pinctrl = NULL; } else { retval = pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_release); if (retval < 0) if (retval < 0) pr_err("Cannot get idle pinctrl state\n"); pr_err("failed to select release pinctrl state\n"); } } } synaptics_rmi4_power_on(rmi4_data, false); synaptics_rmi4_power_on(rmi4_data, false); Loading Loading @@ -4151,10 +4160,10 @@ static int synaptics_rmi4_suspend(struct device *dev) if (rmi4_data->board->disable_gpios) { if (rmi4_data->board->disable_gpios) { if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, retval = pinctrl_select_state(rmi4_data->ts_pinctrl, false); rmi4_data->pinctrl_state_suspend); if (retval < 0) if (retval < 0) dev_err(dev, "Cannot get idle pinctrl state\n"); dev_err(dev, "failed to select idle pinctrl state\n"); } } retval = synaptics_rmi4_gpio_configure(rmi4_data, false); retval = synaptics_rmi4_gpio_configure(rmi4_data, false); Loading @@ -4169,9 +4178,10 @@ static int synaptics_rmi4_suspend(struct device *dev) err_gpio_configure: err_gpio_configure: if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, true); retval = pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_active); if (retval < 0) if (retval < 0) dev_err(dev, "Cannot get default pinctrl state\n"); dev_err(dev, "failed to select get default pinctrl state\n"); } } synaptics_rmi4_regulator_lpm(rmi4_data, false); synaptics_rmi4_regulator_lpm(rmi4_data, false); Loading Loading @@ -4218,9 +4228,10 @@ static int synaptics_rmi4_resume(struct device *dev) if (rmi4_data->board->disable_gpios) { if (rmi4_data->board->disable_gpios) { if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, true); retval = pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_active); if (retval < 0) if (retval < 0) dev_err(dev, "Cannot get default pinctrl state\n"); dev_err(dev, "failed to select default pinctrl state\n"); } } retval = synaptics_rmi4_gpio_configure(rmi4_data, true); retval = synaptics_rmi4_gpio_configure(rmi4_data, true); Loading Loading @@ -4250,10 +4261,10 @@ err_check_configuration: if (rmi4_data->board->disable_gpios) { if (rmi4_data->board->disable_gpios) { if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, retval = pinctrl_select_state(rmi4_data->ts_pinctrl, false); rmi4_data->pinctrl_state_suspend); if (retval < 0) if (retval < 0) dev_err(dev, "Cannot get idle pinctrl state\n"); dev_err(dev, "failed to select idle pinctrl state\n"); } } synaptics_rmi4_gpio_configure(rmi4_data, false); synaptics_rmi4_gpio_configure(rmi4_data, false); Loading @@ -4265,9 +4276,10 @@ err_check_configuration: err_gpio_configure: err_gpio_configure: if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, false); retval = pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_suspend); if (retval < 0) if (retval < 0) pr_err("Cannot get idle pinctrl state\n"); pr_err("failed to select idle pinctrl state\n"); } } synaptics_rmi4_regulator_lpm(rmi4_data, true); synaptics_rmi4_regulator_lpm(rmi4_data, true); wake_up(&rmi4_data->wait); wake_up(&rmi4_data->wait); Loading drivers/input/touchscreen/synaptics_i2c_rmi4.h +7 −2 Original line number Original line Diff line number Diff line Loading @@ -76,6 +76,10 @@ #define NAME_BUFFER_SIZE 256 #define NAME_BUFFER_SIZE 256 #define PINCTRL_STATE_ACTIVE "pmx_ts_active" #define PINCTRL_STATE_SUSPEND "pmx_ts_suspend" #define PINCTRL_STATE_RELEASE "pmx_ts_release" /* /* * struct synaptics_rmi4_fn_desc - function descriptor fields in PDT * struct synaptics_rmi4_fn_desc - function descriptor fields in PDT * @query_base_addr: base address for query registers * @query_base_addr: base address for query registers Loading Loading @@ -270,8 +274,9 @@ struct synaptics_rmi4_data { #endif #endif #endif #endif struct pinctrl *ts_pinctrl; struct pinctrl *ts_pinctrl; struct pinctrl_state *gpio_state_active; struct pinctrl_state *pinctrl_state_active; struct pinctrl_state *gpio_state_suspend; struct pinctrl_state *pinctrl_state_suspend; struct pinctrl_state *pinctrl_state_release; #if defined(CONFIG_SECURE_TOUCH) #if defined(CONFIG_SECURE_TOUCH) atomic_t st_enabled; atomic_t st_enabled; atomic_t st_pending_irqs; atomic_t st_pending_irqs; Loading Loading
Documentation/devicetree/bindings/input/touchscreen/synaptics_i2c_rmi4.txt +4 −1 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,8 @@ Required properties: config defined in pin groups of interrupt and reset gpio. config defined in pin groups of interrupt and reset gpio. "pmx_ts_suspend" : Disabled configuration of pins, this should specify sleep "pmx_ts_suspend" : Disabled configuration of pins, this should specify sleep config defined in pin groups of interrupt and reset gpio. config defined in pin groups of interrupt and reset gpio. "pmx_ts_release" : Release configuration of pins, this should specify release config defined in pin groups of interrupt and reset gpio. Optional property: Optional property: - vdd-supply : Analog power supply needed to power device - vdd-supply : Analog power supply needed to power device - vcc_i2c-supply : Power source required to pull up i2c bus - vcc_i2c-supply : Power source required to pull up i2c bus Loading Loading @@ -76,9 +78,10 @@ Example: interrupts = <17 0x2>; interrupts = <17 0x2>; vdd-supply = <&pm8226_l19>; vdd-supply = <&pm8226_l19>; vcc_i2c-supply = <&pm8226_lvs1>; vcc_i2c-supply = <&pm8226_lvs1>; pinctrl-names = "pmx_ts_active","pmx_ts_suspend"; pinctrl-names = "pmx_ts_active","pmx_ts_suspend","pmx_ts_release"; pinctrl-0 = <&ts_int_active &ts_reset_active>; pinctrl-0 = <&ts_int_active &ts_reset_active>; pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>; pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>; pinctrl-1 = <&ts_release>; synaptics,reset-gpio = <&msmgpio 16 0x00>; synaptics,reset-gpio = <&msmgpio 16 0x00>; synaptics,irq-gpio = <&msmgpio 17 0x00>; synaptics,irq-gpio = <&msmgpio 17 0x00>; synaptics,i2c-pull-up; synaptics,i2c-pull-up; Loading
drivers/input/touchscreen/synaptics_i2c_rmi4.c +77 −65 Original line number Original line Diff line number Diff line Loading @@ -3163,58 +3163,51 @@ static int synaptics_rmi4_pinctrl_init(struct synaptics_rmi4_data *rmi4_data) /* Get pinctrl if target uses pinctrl */ /* Get pinctrl if target uses pinctrl */ rmi4_data->ts_pinctrl = devm_pinctrl_get(&(rmi4_data->i2c_client->dev)); rmi4_data->ts_pinctrl = devm_pinctrl_get(&(rmi4_data->i2c_client->dev)); if (IS_ERR_OR_NULL(rmi4_data->ts_pinctrl)) { if (IS_ERR_OR_NULL(rmi4_data->ts_pinctrl)) { dev_dbg(&rmi4_data->i2c_client->dev, "Target does not use pinctrl\n"); retval = PTR_ERR(rmi4_data->ts_pinctrl); retval = PTR_ERR(rmi4_data->ts_pinctrl); rmi4_data->ts_pinctrl = NULL; return retval; } rmi4_data->gpio_state_active = pinctrl_lookup_state(rmi4_data->ts_pinctrl, "pmx_ts_active"); if (IS_ERR_OR_NULL(rmi4_data->gpio_state_active)) { dev_dbg(&rmi4_data->i2c_client->dev, dev_dbg(&rmi4_data->i2c_client->dev, "Can not get ts default pinstate\n"); "Target does not use pinctrl %d\n", retval); retval = PTR_ERR(rmi4_data->gpio_state_active); goto err_pinctrl_get; rmi4_data->ts_pinctrl = NULL; return retval; } } rmi4_data->gpio_state_suspend rmi4_data->pinctrl_state_active = pinctrl_lookup_state(rmi4_data->ts_pinctrl, "pmx_ts_suspend"); = pinctrl_lookup_state(rmi4_data->ts_pinctrl, if (IS_ERR_OR_NULL(rmi4_data->gpio_state_suspend)) { PINCTRL_STATE_ACTIVE); dev_dbg(&rmi4_data->i2c_client->dev, if (IS_ERR_OR_NULL(rmi4_data->pinctrl_state_active)) { "Can not get ts sleep pinstate\n"); retval = PTR_ERR(rmi4_data->pinctrl_state_active); retval = PTR_ERR(rmi4_data->gpio_state_suspend); dev_err(&rmi4_data->i2c_client->dev, rmi4_data->ts_pinctrl = NULL; "Can not lookup %s pinstate %d\n", return retval; PINCTRL_STATE_ACTIVE, retval); goto err_pinctrl_lookup; } } return 0; rmi4_data->pinctrl_state_suspend = pinctrl_lookup_state(rmi4_data->ts_pinctrl, PINCTRL_STATE_SUSPEND); if (IS_ERR_OR_NULL(rmi4_data->pinctrl_state_suspend)) { retval = PTR_ERR(rmi4_data->pinctrl_state_suspend); dev_err(&rmi4_data->i2c_client->dev, "Can not lookup %s pinstate %d\n", PINCTRL_STATE_SUSPEND, retval); goto err_pinctrl_lookup; } } static int synpatics_rmi4_pinctrl_select(struct synaptics_rmi4_data *rmi4_data, rmi4_data->pinctrl_state_release bool on) = pinctrl_lookup_state(rmi4_data->ts_pinctrl, { PINCTRL_STATE_RELEASE); struct pinctrl_state *pins_state; if (IS_ERR_OR_NULL(rmi4_data->pinctrl_state_release)) { int ret; retval = PTR_ERR(rmi4_data->pinctrl_state_release); dev_dbg(&rmi4_data->i2c_client->dev, pins_state = on ? rmi4_data->gpio_state_active "Can not lookup %s pinstate %d\n", : rmi4_data->gpio_state_suspend; PINCTRL_STATE_RELEASE, retval); if (!IS_ERR_OR_NULL(pins_state)) { ret = pinctrl_select_state(rmi4_data->ts_pinctrl, pins_state); if (ret) { dev_err(&rmi4_data->i2c_client->dev, "can not set %s pins\n", on ? "pmx_ts_active" : "pmx_ts_suspend"); return ret; } } } else dev_err(&rmi4_data->i2c_client->dev, "not a valid '%s' pinstate\n", on ? "pmx_ts_active" : "pmx_ts_suspend"); return 0; return 0; err_pinctrl_lookup: devm_pinctrl_put(rmi4_data->ts_pinctrl); err_pinctrl_get: rmi4_data->ts_pinctrl = NULL; return retval; } } static int synaptics_rmi4_gpio_configure(struct synaptics_rmi4_data *rmi4_data, static int synaptics_rmi4_gpio_configure(struct synaptics_rmi4_data *rmi4_data, Loading Loading @@ -3440,15 +3433,18 @@ static int synaptics_rmi4_probe(struct i2c_client *client, retval = synaptics_rmi4_pinctrl_init(rmi4_data); retval = synaptics_rmi4_pinctrl_init(rmi4_data); if (!retval && rmi4_data->ts_pinctrl) { if (!retval && rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, true); retval = pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_active); if (retval < 0) if (retval < 0) goto err_gpio_config; goto err_pinctrl_select; } else { goto err_pinctrl_init; } } retval = synaptics_rmi4_gpio_configure(rmi4_data, true); retval = synaptics_rmi4_gpio_configure(rmi4_data, true); if (retval < 0) { if (retval < 0) { dev_err(&client->dev, "Failed to configure gpios\n"); dev_err(&client->dev, "Failed to configure gpios\n"); goto pinctrl_sleep; goto err_gpio_config; } } init_waitqueue_head(&rmi4_data->wait); init_waitqueue_head(&rmi4_data->wait); Loading Loading @@ -3661,13 +3657,20 @@ err_free_gpios: gpio_free(rmi4_data->board->reset_gpio); gpio_free(rmi4_data->board->reset_gpio); if (gpio_is_valid(rmi4_data->board->irq_gpio)) if (gpio_is_valid(rmi4_data->board->irq_gpio)) gpio_free(rmi4_data->board->irq_gpio); gpio_free(rmi4_data->board->irq_gpio); pinctrl_sleep: err_gpio_config: err_pinctrl_select: if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, false); if (IS_ERR_OR_NULL(rmi4_data->pinctrl_state_release)) { if (retval < 0) devm_pinctrl_put(rmi4_data->ts_pinctrl); pr_err("Cannot get idle pinctrl state\n"); rmi4_data->ts_pinctrl = NULL; } else { retval = pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_release); if (retval) pr_err("failed to select release pinctrl state\n"); } } err_gpio_config: } err_pinctrl_init: synaptics_rmi4_power_on(rmi4_data, false); synaptics_rmi4_power_on(rmi4_data, false); err_power_device: err_power_device: synaptics_rmi4_regulator_configure(rmi4_data, false); synaptics_rmi4_regulator_configure(rmi4_data, false); Loading Loading @@ -3739,9 +3742,15 @@ static int synaptics_rmi4_remove(struct i2c_client *client) gpio_free(rmi4_data->board->irq_gpio); gpio_free(rmi4_data->board->irq_gpio); if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, false); if (IS_ERR_OR_NULL(rmi4_data->pinctrl_state_release)) { devm_pinctrl_put(rmi4_data->ts_pinctrl); rmi4_data->ts_pinctrl = NULL; } else { retval = pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_release); if (retval < 0) if (retval < 0) pr_err("Cannot get idle pinctrl state\n"); pr_err("failed to select release pinctrl state\n"); } } } synaptics_rmi4_power_on(rmi4_data, false); synaptics_rmi4_power_on(rmi4_data, false); Loading Loading @@ -4151,10 +4160,10 @@ static int synaptics_rmi4_suspend(struct device *dev) if (rmi4_data->board->disable_gpios) { if (rmi4_data->board->disable_gpios) { if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, retval = pinctrl_select_state(rmi4_data->ts_pinctrl, false); rmi4_data->pinctrl_state_suspend); if (retval < 0) if (retval < 0) dev_err(dev, "Cannot get idle pinctrl state\n"); dev_err(dev, "failed to select idle pinctrl state\n"); } } retval = synaptics_rmi4_gpio_configure(rmi4_data, false); retval = synaptics_rmi4_gpio_configure(rmi4_data, false); Loading @@ -4169,9 +4178,10 @@ static int synaptics_rmi4_suspend(struct device *dev) err_gpio_configure: err_gpio_configure: if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, true); retval = pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_active); if (retval < 0) if (retval < 0) dev_err(dev, "Cannot get default pinctrl state\n"); dev_err(dev, "failed to select get default pinctrl state\n"); } } synaptics_rmi4_regulator_lpm(rmi4_data, false); synaptics_rmi4_regulator_lpm(rmi4_data, false); Loading Loading @@ -4218,9 +4228,10 @@ static int synaptics_rmi4_resume(struct device *dev) if (rmi4_data->board->disable_gpios) { if (rmi4_data->board->disable_gpios) { if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, true); retval = pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_active); if (retval < 0) if (retval < 0) dev_err(dev, "Cannot get default pinctrl state\n"); dev_err(dev, "failed to select default pinctrl state\n"); } } retval = synaptics_rmi4_gpio_configure(rmi4_data, true); retval = synaptics_rmi4_gpio_configure(rmi4_data, true); Loading Loading @@ -4250,10 +4261,10 @@ err_check_configuration: if (rmi4_data->board->disable_gpios) { if (rmi4_data->board->disable_gpios) { if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, retval = pinctrl_select_state(rmi4_data->ts_pinctrl, false); rmi4_data->pinctrl_state_suspend); if (retval < 0) if (retval < 0) dev_err(dev, "Cannot get idle pinctrl state\n"); dev_err(dev, "failed to select idle pinctrl state\n"); } } synaptics_rmi4_gpio_configure(rmi4_data, false); synaptics_rmi4_gpio_configure(rmi4_data, false); Loading @@ -4265,9 +4276,10 @@ err_check_configuration: err_gpio_configure: err_gpio_configure: if (rmi4_data->ts_pinctrl) { if (rmi4_data->ts_pinctrl) { retval = synpatics_rmi4_pinctrl_select(rmi4_data, false); retval = pinctrl_select_state(rmi4_data->ts_pinctrl, rmi4_data->pinctrl_state_suspend); if (retval < 0) if (retval < 0) pr_err("Cannot get idle pinctrl state\n"); pr_err("failed to select idle pinctrl state\n"); } } synaptics_rmi4_regulator_lpm(rmi4_data, true); synaptics_rmi4_regulator_lpm(rmi4_data, true); wake_up(&rmi4_data->wait); wake_up(&rmi4_data->wait); Loading
drivers/input/touchscreen/synaptics_i2c_rmi4.h +7 −2 Original line number Original line Diff line number Diff line Loading @@ -76,6 +76,10 @@ #define NAME_BUFFER_SIZE 256 #define NAME_BUFFER_SIZE 256 #define PINCTRL_STATE_ACTIVE "pmx_ts_active" #define PINCTRL_STATE_SUSPEND "pmx_ts_suspend" #define PINCTRL_STATE_RELEASE "pmx_ts_release" /* /* * struct synaptics_rmi4_fn_desc - function descriptor fields in PDT * struct synaptics_rmi4_fn_desc - function descriptor fields in PDT * @query_base_addr: base address for query registers * @query_base_addr: base address for query registers Loading Loading @@ -270,8 +274,9 @@ struct synaptics_rmi4_data { #endif #endif #endif #endif struct pinctrl *ts_pinctrl; struct pinctrl *ts_pinctrl; struct pinctrl_state *gpio_state_active; struct pinctrl_state *pinctrl_state_active; struct pinctrl_state *gpio_state_suspend; struct pinctrl_state *pinctrl_state_suspend; struct pinctrl_state *pinctrl_state_release; #if defined(CONFIG_SECURE_TOUCH) #if defined(CONFIG_SECURE_TOUCH) atomic_t st_enabled; atomic_t st_enabled; atomic_t st_pending_irqs; atomic_t st_pending_irqs; Loading