This device driver provides wakeup capabilities but the wakeup events are not reflected in sysfs. Add pm_wakeup_event to the interrupt handler in order to do so. Signed-off-by: Javier Carrasco <javier.carrasco@xxxxxxxxxxxxxx> --- drivers/input/touchscreen/st1232.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/input/touchscreen/st1232.c b/drivers/input/touchscreen/st1232.c index faa0be3993f4..f175bea464e1 100644 --- a/drivers/input/touchscreen/st1232.c +++ b/drivers/input/touchscreen/st1232.c @@ -59,6 +59,7 @@ struct st1232_ts_data { const struct st_chip_info *chip_info; int read_buf_len; u8 *read_buf; + bool suspended; }; static int st1232_ts_read_data(struct st1232_ts_data *ts, u8 reg, @@ -173,9 +174,13 @@ static int st1232_ts_parse_and_report(struct st1232_ts_data *ts) static irqreturn_t st1232_ts_irq_handler(int irq, void *dev_id) { struct st1232_ts_data *ts = dev_id; + struct i2c_client *client = ts->client; int count; int error; + if (ts->suspended && device_may_wakeup(&client->dev)) + pm_wakeup_event(&client->dev, 0); + error = st1232_ts_read_data(ts, REG_XY_COORDINATES, ts->read_buf_len); if (error) goto out; @@ -344,10 +349,16 @@ static int st1232_ts_suspend(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct st1232_ts_data *ts = i2c_get_clientdata(client); + struct input_dev *input = ts->input_dev; + + mutex_lock(&input->mutex); + ts->suspended = true; if (!device_may_wakeup(&client->dev)) st1232_ts_power(ts, false); + mutex_unlock(&input->mutex); + return 0; } @@ -355,10 +366,16 @@ static int st1232_ts_resume(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct st1232_ts_data *ts = i2c_get_clientdata(client); + struct input_dev *input = ts->input_dev; + + mutex_lock(&input->mutex); + ts->suspended = false; if (!device_may_wakeup(&client->dev)) st1232_ts_power(ts, true); + mutex_unlock(&input->mutex); + return 0; } -- 2.37.2