From cf4ce59b3b70238352c7f1729f0f7223214828ad Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 20 Sep 2024 01:46:19 +0000
Subject: [PATCH] rtl88x2CE_WiFi_linux add concurrent mode
---
u-boot/drivers/i2c/muxes/max96745.c | 44 ++++++++++++++++++++++++++++++++++++++------
1 files changed, 38 insertions(+), 6 deletions(-)
diff --git a/u-boot/drivers/i2c/muxes/max96745.c b/u-boot/drivers/i2c/muxes/max96745.c
index 1a76c3f..5c85cb5 100644
--- a/u-boot/drivers/i2c/muxes/max96745.c
+++ b/u-boot/drivers/i2c/muxes/max96745.c
@@ -13,11 +13,18 @@
struct max96745_priv {
struct udevice *dev;
struct gpio_desc enable_gpio;
+ struct gpio_desc pwdnb_gpio;
+ bool idle_disc;
};
static int max96745_select(struct udevice *mux, struct udevice *bus,
uint channel)
{
+ struct max96745_priv *priv = dev_get_priv(mux);
+
+ if (!priv->idle_disc)
+ return 0;
+
if (channel == 1)
dm_i2c_reg_clrset(mux, 0x0086, DIS_REM_CC,
FIELD_PREP(DIS_REM_CC, 0));
@@ -31,6 +38,11 @@
static int max96745_deselect(struct udevice *mux, struct udevice *bus,
uint channel)
{
+ struct max96745_priv *priv = dev_get_priv(mux);
+
+ if (!priv->idle_disc)
+ return 0;
+
if (channel == 1)
dm_i2c_reg_clrset(mux, 0x0086, DIS_REM_CC,
FIELD_PREP(DIS_REM_CC, 1));
@@ -55,15 +67,27 @@
mdelay(200);
}
- ret = dm_i2c_reg_clrset(priv->dev, 0x0076, DIS_REM_CC,
- FIELD_PREP(DIS_REM_CC, 1));
+ if (dm_gpio_is_valid(&priv->pwdnb_gpio)) {
+ dm_gpio_set_value(&priv->pwdnb_gpio, 0);
+ mdelay(30);
+ }
+
+ /* Set for I2C Fast-mode speed */
+ ret = dm_i2c_reg_write(priv->dev, 0x0070, 0x16);
if (ret < 0)
return ret;
- ret = dm_i2c_reg_clrset(priv->dev, 0x0086, DIS_REM_CC,
- FIELD_PREP(DIS_REM_CC, 1));
- if (ret < 0)
- return ret;
+ if (priv->idle_disc) {
+ ret = dm_i2c_reg_clrset(priv->dev, 0x0076, DIS_REM_CC,
+ FIELD_PREP(DIS_REM_CC, 1));
+ if (ret < 0)
+ return ret;
+
+ ret = dm_i2c_reg_clrset(priv->dev, 0x0086, DIS_REM_CC,
+ FIELD_PREP(DIS_REM_CC, 1));
+ if (ret < 0)
+ return ret;
+ }
return 0;
}
@@ -78,6 +102,7 @@
return ret;
priv->dev = dev;
+ priv->idle_disc = dev_read_bool(dev, "i2c-mux-idle-disconnect");
ret = gpio_request_by_name(dev, "enable-gpios", 0,
&priv->enable_gpio, GPIOD_IS_OUT);
@@ -86,6 +111,13 @@
return ret;
}
+ ret = gpio_request_by_name(dev, "pwdnb-gpios", 0,
+ &priv->pwdnb_gpio, GPIOD_IS_OUT);
+ if (ret && ret != -ENOENT) {
+ dev_err(dev, "%s: failed to get pwdnb GPIO: %d\n", __func__, ret);
+ return ret;
+ }
+
max96745_power_on(priv);
return 0;
--
Gitblit v1.6.2