mirror of
https://github.com/armbian/build.git
synced 2025-08-18 00:56:57 +02:00
* Recycling of megous v5.16.4 patches The patches were sorted as far as possible. Some patches are renamed according to their place of application. The length of the patch name has been changed to improve readability using the `git format-patch --filename-max-length=75` method. The folder containing the patches will have the name `patches.name` and the corresponding file `series.name` for the convenience of processing and moving them upstream. But the control file remains `series.conf`. Signed-off-by: The-going <48602507+The-going@users.noreply.github.com> * Add a series of armbian patches for 5.16 Signed-off-by: The-going <48602507+The-going@users.noreply.github.com> * Remove patches whose fixes are already in the kernel Signed-off-by: The-going <48602507+The-going@users.noreply.github.com>
103 lines
3.1 KiB
Diff
103 lines
3.1 KiB
Diff
From 1d7b7ad45bdf48576b98e0bc1de93b310ccdece1 Mon Sep 17 00:00:00 2001
|
|
From: Ondrej Jirman <megous@megous.com>
|
|
Date: Sun, 25 Apr 2021 03:16:42 +0200
|
|
Subject: [PATCH 072/446] input: goodix: Add option to power off the controller
|
|
during suspend
|
|
|
|
For whatever reason the controller is not suspended on Pinephone
|
|
by the default procedure. It consumes quite a bit of power (~40mW)
|
|
during system sleep, and more when the screen is touched.
|
|
|
|
Let's power off the controller during system sleep instead.
|
|
|
|
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
|
---
|
|
drivers/input/touchscreen/goodix.c | 37 ++++++++++++++++++++++++++++++
|
|
drivers/input/touchscreen/goodix.h | 1 +
|
|
2 files changed, 38 insertions(+)
|
|
|
|
diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c
|
|
index e02fdcfed..2599f6b8d 100644
|
|
--- a/drivers/input/touchscreen/goodix.c
|
|
+++ b/drivers/input/touchscreen/goodix.c
|
|
@@ -1169,6 +1169,7 @@ static void goodix_disable_regulators(void *arg)
|
|
static int goodix_ts_probe(struct i2c_client *client,
|
|
const struct i2c_device_id *id)
|
|
{
|
|
+ struct device_node *np = client->dev.of_node;
|
|
struct goodix_ts_data *ts;
|
|
const char *cfg_name;
|
|
int error;
|
|
@@ -1188,6 +1189,7 @@ static int goodix_ts_probe(struct i2c_client *client,
|
|
i2c_set_clientdata(client, ts);
|
|
init_completion(&ts->firmware_loading_complete);
|
|
ts->contact_size = GOODIX_CONTACT_SIZE;
|
|
+ ts->poweroff_in_suspend = of_property_read_bool(np, "poweroff-in-suspend");
|
|
|
|
error = goodix_get_gpio_config(ts);
|
|
if (error)
|
|
@@ -1299,6 +1301,15 @@ static int __maybe_unused goodix_suspend(struct device *dev)
|
|
if (ts->load_cfg_from_disk)
|
|
wait_for_completion(&ts->firmware_loading_complete);
|
|
|
|
+ if (ts->poweroff_in_suspend) {
|
|
+ goodix_free_irq(ts);
|
|
+ goodix_irq_direction_output(ts, 0);
|
|
+ gpiod_direction_output(ts->gpiod_rst, 0);
|
|
+ regulator_disable(ts->avdd28);
|
|
+ regulator_disable(ts->vddio);
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
/* We need gpio pins to suspend/resume */
|
|
if (ts->irq_pin_access_method == IRQ_PIN_ACCESS_NONE) {
|
|
disable_irq(client->irq);
|
|
@@ -1344,6 +1355,32 @@ static int __maybe_unused goodix_resume(struct device *dev)
|
|
u8 config_ver;
|
|
int error;
|
|
|
|
+ if (ts->poweroff_in_suspend) {
|
|
+ error = regulator_enable(ts->avdd28);
|
|
+ if (error) {
|
|
+ dev_err(dev, "Regulator avdd28 enable failed.\n");
|
|
+ return error;
|
|
+ }
|
|
+
|
|
+ error = regulator_enable(ts->vddio);
|
|
+ if (error) {
|
|
+ dev_err(dev, "Regulator vddio enable failed.\n");
|
|
+ return error;
|
|
+ }
|
|
+
|
|
+ error = goodix_reset(ts);
|
|
+ if (error) {
|
|
+ dev_err(dev, "Controller reset failed.\n");
|
|
+ return error;
|
|
+ }
|
|
+
|
|
+ error = goodix_request_irq(ts);
|
|
+ if (error)
|
|
+ return error;
|
|
+
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
if (ts->irq_pin_access_method == IRQ_PIN_ACCESS_NONE) {
|
|
enable_irq(client->irq);
|
|
return 0;
|
|
diff --git a/drivers/input/touchscreen/goodix.h b/drivers/input/touchscreen/goodix.h
|
|
index 2988bb09a..8ded36e9e 100644
|
|
--- a/drivers/input/touchscreen/goodix.h
|
|
+++ b/drivers/input/touchscreen/goodix.h
|
|
@@ -103,6 +103,7 @@ struct goodix_ts_data {
|
|
int bak_ref_len;
|
|
u8 *bak_ref;
|
|
struct dentry *debug_root;
|
|
+ bool poweroff_in_suspend;
|
|
};
|
|
|
|
int goodix_i2c_read(struct i2c_client *client, u16 reg, u8 *buf, int len);
|
|
--
|
|
2.31.1
|
|
|