pmaports/device/linux-samsung-i927/0039-ARM-dts-tegra20-glide-Workaround-RTC-bugs.patch
Sergey Larin 5ccbcf999d
samsung-i927: update kernel to 5.2.1, more updates (!452)
- OTG support
- Charger
- WiFi 5GHz
- RTC bug "fixed" (always-on interrupt - made device overheat!)
- Kernel version bumped to 5.2.1
- Memory timings
- New WM8994 codec board driver (fixes suspend/resume)
- Camera's regulator supported now (saves power at least!)
- Updated panel driver (still not in mainline, idk why)
- MHL support in kernel (fixes boot times and screen, currently disabled in X,
  not tested)
- Other minor kernel chagnes

[ci:skip-build]: already built successfully in CI
2019-07-17 00:15:26 +02:00

60 lines
2 KiB
Diff

From 6f64a6f1329e4d61da8f94b4bd68a0a2a62da305 Mon Sep 17 00:00:00 2001
From: Sergey Larin <cerg2010cerg2010@mail.ru>
Date: Thu, 20 Jun 2019 19:47:11 +0300
Subject: [PATCH] ARM: dts: tegra20-glide: Workaround RTC bugs
MAX8907 has broken RTC on this board - alarm reports
always-on IRQ, so as a workaround we use Tegra's RTC.
Signed-off-by: Sergey Larin <cerg2010cerg2010@mail.ru>
---
arch/arm/boot/dts/tegra20-glide.dts | 26 +++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/arch/arm/boot/dts/tegra20-glide.dts b/arch/arm/boot/dts/tegra20-glide.dts
index 195ccb0a1012..107efb68c99e 100644
--- a/arch/arm/boot/dts/tegra20-glide.dts
+++ b/arch/arm/boot/dts/tegra20-glide.dts
@@ -9,8 +9,9 @@
compatible = "samsung,i927", "nvidia,tegra20";
aliases {
- rtc0 = "/i2c@7000d000/max8907@3c";
- rtc1 = "/rtc@7000e000";
+ /* MAX8907 RTC seems to be broken here, so use Tegra's */
+ rtc0 = "/rtc@7000e000";
+ rtc1 = "/i2c@7000d000/max8907@3c";
serial0 = &uartb;
serial1 = &uarta;
serial2 = &uartc;
@@ -585,7 +586,26 @@
pmic: max8907@3c {
compatible = "maxim,max8907";
reg = <0x3c>;
- interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
+ /*
+ * Ints seem to be broken, even on downstream -
+ * on Whistler board, which uses the same PMIC,
+ * they're marked as LEVEL_HIGH, however, this
+ * makes them always-on, so we get something
+ * like "irq 301: nobody cared" - no interrupt
+ * status reg set, BUT irq line is asserted, and
+ * I don't know how to clear it. Probably it
+ * should be triggered on edge. Downstream
+ * charger driver triggers charging interrupt
+ * on TRIGGER_RISING. Oh, no docs available
+ * on the net.
+ *
+ * Downstream kernel also has broken alarm, but
+ * time readings are correct.
+ *
+ * As a workaround, we use internal Tegra RTC
+ * as a main RTC.
+ */
+ interrupts = <GIC_SPI 86 IRQ_TYPE_EDGE_RISING>;
maxim,system-power-controller;
--
2.22.0