[PATCH v9 11/14] USB: typec: tps6598x: Enable sleep mode for tps25750

From: Abdel Alkuor
Date: Sun Oct 01 2023 - 04:16:09 EST


From: Abdel Alkuor <abdelalkuor@xxxxxxxxxx>

Allow controller to enter sleep mode after the device
is idle for sleep time.

Signed-off-by: Abdel Alkuor <abdelalkuor@xxxxxxxxxx>
---
Changes in v9:
- No changes
Changes in v8:
- No changes
Changes in v7:
- Add driver name to commit subject
Changes in v6:
- Use tps25750_init instead of tps25750_apply_patch in resume
as it initializes sleep mode
Changes in v5:
- Incorporating tps25750 into tps6598x driver

drivers/usb/typec/tipd/core.c | 23 +++++++++++++++++++++--
drivers/usb/typec/tipd/tps6598x.h | 3 +++
2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/typec/tipd/core.c b/drivers/usb/typec/tipd/core.c
index ae08c5306707..ddb5db7d5855 100644
--- a/drivers/usb/typec/tipd/core.c
+++ b/drivers/usb/typec/tipd/core.c
@@ -43,6 +43,7 @@
#define TPS_REG_PD_STATUS 0x40
#define TPS_REG_RX_IDENTITY_SOP 0x48
#define TPS_REG_DATA_STATUS 0x5f
+#define TPS_REG_SLEEP_CONF 0x70

/* TPS_REG_SYSTEM_CONF bits */
#define TPS_SYSCONF_PORTINFO(c) ((c) & 7)
@@ -1041,6 +1042,24 @@ static int tps25750_apply_patch(struct tps6598x *tps)
return 0;
};

+static int tps25750_init(struct tps6598x *tps)
+{
+ int ret;
+
+ ret = tps25750_apply_patch(tps);
+ if (ret)
+ return ret;
+
+ ret = tps6598x_write8(tps, TPS_REG_SLEEP_CONF,
+ TPS_SLEEP_CONF_SLEEP_MODE_ALLOWED);
+ if (ret)
+ dev_warn(tps->dev,
+ "%s: failed to enable sleep mode: %d\n",
+ __func__, ret);
+
+ return 0;
+}
+
static int
tps6598x_register_port(struct tps6598x *tps, struct fwnode_handle *fwnode)
{
@@ -1211,7 +1230,7 @@ static int tps6598x_probe(struct i2c_client *client)
return ret;

if (is_tps25750 && ret == TPS_MODE_PTCH) {
- ret = tps25750_apply_patch(tps);
+ ret = tps25750_init(tps);
if (ret)
return ret;
}
@@ -1348,7 +1367,7 @@ static int __maybe_unused tps6598x_resume(struct device *dev)
return ret;

if (device_is_compatible(tps->dev, "ti,tps25750") && ret == TPS_MODE_PTCH) {
- ret = tps25750_apply_patch(tps);
+ ret = tps25750_init(tps);
if (ret)
return ret;
}
diff --git a/drivers/usb/typec/tipd/tps6598x.h b/drivers/usb/typec/tipd/tps6598x.h
index 3a9a43394134..f86b5e96efba 100644
--- a/drivers/usb/typec/tipd/tps6598x.h
+++ b/drivers/usb/typec/tipd/tps6598x.h
@@ -213,4 +213,7 @@
#define TPS_PD_STATUS_PORT_TYPE_SOURCE 2
#define TPS_PD_STATUS_PORT_TYPE_SOURCE_SINK 3

+/* SLEEP CONF REG */
+#define TPS_SLEEP_CONF_SLEEP_MODE_ALLOWED BIT(0)
+
#endif /* __TPS6598X_H__ */
--
2.34.1