summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2022-07-13 17:02:53 -0600
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-07-18 16:35:47 +0000
commitc66c42bf01446a9d3418f5e69bcbee953ad9d3e3 (patch)
tree6a9ae4ae03c1c8e2cfb44d8dcf8780ea4122d8b2
parent2fa3b7d9b5d436d9ba8aa9d2c3128dd1444116a4 (diff)
downloadchrome-ec-c66c42bf01446a9d3418f5e69bcbee953ad9d3e3.tar.gz
Skyrim: Apply MP2845A workaround
Apply a workaround for a MP2845A problem. BRANCH=None BUG=b:238879278 TEST=on skyrim, dump register in S0 to ensure the bit is cleared Signed-off-by: Diana Z <dzigterman@chromium.org> Change-Id: Id21004a165afa934e13d75ca54280bed274d0e6f Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3761365 Reviewed-by: Robert Zieba <robertzieba@google.com> Commit-Queue: Robert Zieba <robertzieba@google.com>
-rw-r--r--zephyr/projects/skyrim/power_signals.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/zephyr/projects/skyrim/power_signals.c b/zephyr/projects/skyrim/power_signals.c
index c3d1826d78..ec0364519e 100644
--- a/zephyr/projects/skyrim/power_signals.c
+++ b/zephyr/projects/skyrim/power_signals.c
@@ -4,11 +4,14 @@
*/
#include "ap_power/ap_power.h"
+#include "charger.h"
#include "chipset.h"
#include "config.h"
+#include "cros_board_info.h"
#include "gpio_signal.h"
#include "gpio/gpio_int.h"
#include "hooks.h"
+#include "i2c.h"
#include "ioexpander.h"
#include "power.h"
#include "power/amd_x86.h"
@@ -126,12 +129,36 @@ void baseboard_set_soc_pwr_pgood(enum gpio_signal unused)
gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_s0_pgood)));
}
+/* TODO: Remove when board versions are no longer supported */
+#define MP2845A_I2C_ADDR_FLAGS 0x20
+#define MP2854A_MFR_VOUT_CMPS_MAX_REG 0x69
+#define MP2854A_MFR_LOW_PWR_SEL BIT(12)
+
+static void setup_mp2845(void)
+{
+ int version;
+
+ /* TODO: Remove when board versions are no longer supported */
+ if ((cbi_get_board_version(&version) == EC_SUCCESS) && version > 3)
+ return;
+
+ if (i2c_update16(chg_chips[CHARGER_SOLO].i2c_port,
+ MP2845A_I2C_ADDR_FLAGS, MP2854A_MFR_VOUT_CMPS_MAX_REG,
+ MP2854A_MFR_LOW_PWR_SEL, MASK_CLR))
+ ccprints("Failed to send mp2845 workaround");
+}
+DECLARE_DEFERRED(setup_mp2845);
+
void baseboard_s0_pgood(enum gpio_signal signal)
{
baseboard_set_soc_pwr_pgood(signal);
/* Chain off power signal interrupt handler for PG_PCORE_S0_R_OD */
power_signal_interrupt(signal);
+
+ /* Set up the MP2845, which is powered in S0 */
+ if (gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_s0_pgood)))
+ hook_call_deferred(&setup_mp2845_data, 50 * MSEC);
}
/* Note: signal parameter unused */