diff --git a/root/target/linux/mediatek/patches-4.19/0013-4.19-poweroff-new-49.patch b/root/target/linux/mediatek/patches-4.19/0013-4.19-poweroff-new-49.patch deleted file mode 100644 index b276da6a..00000000 --- a/root/target/linux/mediatek/patches-4.19/0013-4.19-poweroff-new-49.patch +++ /dev/null @@ -1,732 +0,0 @@ -From 1dea45d3aefd799a8ee478dd6bfaf7064d15281f Mon Sep 17 00:00:00 2001 -From: Frank Wunderlich -Date: Wed, 14 Nov 2018 16:38:42 +0100 -Subject: [PATCH 13/77] 4.19 poweroff new (#49) - -[poweroff] add power-off patch from jofri ---- - .../devicetree/bindings/mfd/mt6397.txt | 10 +- - .../bindings/power/reset/mt6323-poweroff.txt | 20 +++ - .../devicetree/bindings/rtc/rtc-mt6397.txt | 29 ++++ - MAINTAINERS | 7 + - arch/arm/boot/dts/mt6323.dtsi | 46 +++++- - arch/arm/configs/mt7623n_evb_fwu_defconfig | 2 +- - drivers/mfd/mt6397-core.c | 40 +++-- - drivers/power/reset/Kconfig | 10 ++ - drivers/power/reset/Makefile | 1 + - drivers/power/reset/mt6323-poweroff.c | 97 ++++++++++++ - drivers/rtc/rtc-mt6397.c | 147 ++++-------------- - include/linux/mfd/mt6397/core.h | 2 + - include/linux/mfd/mt6397/rtc.h | 71 +++++++++ - 13 files changed, 355 insertions(+), 127 deletions(-) - create mode 100644 Documentation/devicetree/bindings/power/reset/mt6323-poweroff.txt - create mode 100644 Documentation/devicetree/bindings/rtc/rtc-mt6397.txt - create mode 100644 drivers/power/reset/mt6323-poweroff.c - create mode 100644 include/linux/mfd/mt6397/rtc.h - -diff --git a/Documentation/devicetree/bindings/mfd/mt6397.txt b/Documentation/devicetree/bindings/mfd/mt6397.txt -index 0ebd08af777d..44acb9827716 100644 ---- a/Documentation/devicetree/bindings/mfd/mt6397.txt -+++ b/Documentation/devicetree/bindings/mfd/mt6397.txt -@@ -8,6 +8,7 @@ MT6397/MT6323 is a multifunction device with the following sub modules: - - Clock - - LED - - Keys -+- Power controller - - It is interfaced to host controller using SPI interface by a proprietary hardware - called PMIC wrapper or pwrap. MT6397/MT6323 MFD is a child device of pwrap. -@@ -22,8 +23,10 @@ compatible: "mediatek,mt6397" or "mediatek,mt6323" - Optional subnodes: - - - rtc -- Required properties: -+ Required properties: Should be one of follows -+ - compatible: "mediatek,mt6323-rtc" - - compatible: "mediatek,mt6397-rtc" -+ For details, see Documentation/devicetree/bindings/rtc/rtc-mt6397.txt - - regulators - Required properties: - - compatible: "mediatek,mt6397-regulator" -@@ -46,6 +49,11 @@ Optional subnodes: - - compatible: "mediatek,mt6397-keys" or "mediatek,mt6323-keys" - see Documentation/devicetree/bindings/input/mtk-pmic-keys.txt - -+- power-controller -+ Required properties: -+ - compatible: "mediatek,mt6323-pwrc" -+ For details, see Documentation/devicetree/bindings/power/reset/mt6323-poweroff.txt -+ - Example: - pwrap: pwrap@1000f000 { - compatible = "mediatek,mt8135-pwrap"; -diff --git a/Documentation/devicetree/bindings/power/reset/mt6323-poweroff.txt b/Documentation/devicetree/bindings/power/reset/mt6323-poweroff.txt -new file mode 100644 -index 000000000000..6f7c5905a652 ---- /dev/null -+++ b/Documentation/devicetree/bindings/power/reset/mt6323-poweroff.txt -@@ -0,0 +1,20 @@ -+Device Tree Bindings for Power Controller on MediaTek PMIC -+ -+The power controller which could be found on PMIC is responsible for externally -+powering off or on the remote MediaTek SoC through the circuit BBPU. -+ -+Required properties: -+- compatible: Should be one of follows -+ "mediatek,mt6323-pwrc": for MT6323 PMIC -+ -+Example: -+ -+ pmic { -+ compatible = "mediatek,mt6323"; -+ -+ ... -+ -+ power-controller { -+ compatible = "mediatek,mt6323-pwrc"; -+ }; -+ } -diff --git a/Documentation/devicetree/bindings/rtc/rtc-mt6397.txt b/Documentation/devicetree/bindings/rtc/rtc-mt6397.txt -new file mode 100644 -index 000000000000..6e97248e8930 ---- /dev/null -+++ b/Documentation/devicetree/bindings/rtc/rtc-mt6397.txt -@@ -0,0 +1,29 @@ -+Device-Tree bindings for MediaTek PMIC based RTC -+ -+MediaTek PMIC based RTC is an independent function of MediaTek PMIC that works -+as a type of multi-function device (MFD). The RTC can be configured and set up -+with PMIC wrapper bus which is a common resource shared with the other -+functions found on the same PMIC. -+ -+For MediaTek PMIC MFD bindings, see: -+Documentation/devicetree/bindings/mfd/mt6397.txt -+ -+For MediaTek PMIC wrapper bus bindings, see: -+Documentation/devicetree/bindings/soc/mediatek/pwrap.txt -+ -+Required properties: -+- compatible: Should be one of follows -+ "mediatek,mt6323-rtc": for MT6323 PMIC -+ "mediatek,mt6397-rtc": for MT6397 PMIC -+ -+Example: -+ -+ pmic { -+ compatible = "mediatek,mt6323"; -+ -+ ... -+ -+ rtc { -+ compatible = "mediatek,mt6323-rtc"; -+ }; -+ }; -diff --git a/MAINTAINERS b/MAINTAINERS -index b2f710eee67a..ed4733bbd124 100644 ---- a/MAINTAINERS -+++ b/MAINTAINERS -@@ -9227,6 +9227,13 @@ S: Maintained - F: drivers/net/dsa/mt7530.* - F: net/dsa/tag_mtk.c - -+MEDIATEK BOARD LEVEL SHUTDOWN DRIVERS -+M: Sean Wang -+L: linux-pm@vger.kernel.org -+S: Maintained -+F: Documentation/devicetree/bindings/power/reset/mt6323-poweroff.txt -+F: drivers/power/reset/mt6323-poweroff.c -+ - MEDIATEK JPEG DRIVER - M: Rick Chang - M: Bin Liu -diff --git a/arch/arm/boot/dts/mt6323.dtsi b/arch/arm/boot/dts/mt6323.dtsi -index ba397407c1dd..871de0bb349b 100644 ---- a/arch/arm/boot/dts/mt6323.dtsi -+++ b/arch/arm/boot/dts/mt6323.dtsi -@@ -18,7 +18,24 @@ - compatible = "mediatek,mt6323-led"; - #address-cells = <1>; - #size-cells = <0>; -- status = "disabled"; -+ -+ led@0 { -+ reg = <0>; -+ label = "bpi-r2:isink:green"; -+ default-state = "off"; -+ }; -+ -+ led@1 { -+ reg = <1>; -+ label = "bpi-r2:isink:red"; -+ default-state = "off"; -+ }; -+ -+ led@2 { -+ reg = <2>; -+ label = "bpi-r2:isink:blue"; -+ default-state = "off"; -+ }; - }; - - mt6323regulator: mt6323regulator{ -@@ -238,5 +255,32 @@ - regulator-enable-ramp-delay = <216>; - }; - }; -+ -+ mt6323keys: mt6323keys { -+ compatible = "mediatek,mt6323-keys"; -+ mediatek,long-press-mode = <1>; -+ power-off-time-sec = <0>; -+ -+ power { -+ linux,keycodes = <116>; -+ wakeup-source; -+ }; -+ -+ home { -+ linux,keycodes = <114>; -+ }; -+ }; -+ -+ codec: mt6397codec { -+ compatible = "mediatek,mt6397-codec"; -+ }; -+ -+ power-controller { -+ compatible = "mediatek,mt6323-pwrc"; -+ }; -+ -+ rtc { -+ compatible = "mediatek,mt6323-rtc"; -+ }; - }; - }; -diff --git a/arch/arm/configs/mt7623n_evb_fwu_defconfig b/arch/arm/configs/mt7623n_evb_fwu_defconfig -index fe1edaa7680f..ab8f380d8f47 100644 ---- a/arch/arm/configs/mt7623n_evb_fwu_defconfig -+++ b/arch/arm/configs/mt7623n_evb_fwu_defconfig -@@ -424,7 +424,7 @@ CONFIG_I2C_CHARDEV=m - CONFIG_RTC_CLASS=y - CONFIG_RTC_DRV_DS1307=m - CONFIG_RTC_DRV_DS1307_CENTURY=y --CONFIG_RTC_DRV_MT6397=m -+CONFIG_RTC_DRV_MT6397=y - - CONFIG_SPI=y - CONFIG_SPI_MASTER=y -diff --git a/drivers/mfd/mt6397-core.c b/drivers/mfd/mt6397-core.c -index 77b64bd64df3..e0012e262473 100644 ---- a/drivers/mfd/mt6397-core.c -+++ b/drivers/mfd/mt6397-core.c -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2014 MediaTek Inc. -+ * Copyright (c) 2014-2018 MediaTek Inc. - * Author: Flora Fu, MediaTek - * - * This program is free software; you can redistribute it and/or modify -@@ -13,6 +13,7 @@ - */ - - #include -+#include - #include - #include - #include -@@ -23,24 +24,27 @@ - #include - #include - -+#define MT6323_RTC_BASE 0x8000 -+#define MT6323_RTC_SIZE 0x40 -+ - #define MT6397_RTC_BASE 0xe000 - #define MT6397_RTC_SIZE 0x3e - -+#define MT6323_PWRC_BASE 0x8000 -+#define MT6323_PWRC_SIZE 0x40 -+ - #define MT6323_CID_CODE 0x23 - #define MT6391_CID_CODE 0x91 - #define MT6397_CID_CODE 0x97 - -+static const struct resource mt6323_rtc_resources[] = { -+ DEFINE_RES_MEM(MT6323_RTC_BASE, MT6323_RTC_SIZE), -+ DEFINE_RES_IRQ(MT6323_IRQ_STATUS_RTC), -+}; -+ - static const struct resource mt6397_rtc_resources[] = { -- { -- .start = MT6397_RTC_BASE, -- .end = MT6397_RTC_BASE + MT6397_RTC_SIZE, -- .flags = IORESOURCE_MEM, -- }, -- { -- .start = MT6397_IRQ_RTC, -- .end = MT6397_IRQ_RTC, -- .flags = IORESOURCE_IRQ, -- }, -+ DEFINE_RES_MEM(MT6397_RTC_BASE, MT6397_RTC_SIZE), -+ DEFINE_RES_IRQ(MT6397_IRQ_RTC), - }; - - static const struct resource mt6323_keys_resources[] = { -@@ -53,8 +57,17 @@ static const struct resource mt6397_keys_resources[] = { - DEFINE_RES_IRQ(MT6397_IRQ_HOMEKEY), - }; - -+static const struct resource mt6323_pwrc_resources[] = { -+ DEFINE_RES_MEM(MT6323_PWRC_BASE, MT6323_PWRC_SIZE), -+}; -+ - static const struct mfd_cell mt6323_devs[] = { - { -+ .name = "mt6323-rtc", -+ .num_resources = ARRAY_SIZE(mt6323_rtc_resources), -+ .resources = mt6323_rtc_resources, -+ .of_compatible = "mediatek,mt6323-rtc", -+ }, { - .name = "mt6323-regulator", - .of_compatible = "mediatek,mt6323-regulator" - }, { -@@ -65,6 +78,11 @@ static const struct mfd_cell mt6323_devs[] = { - .num_resources = ARRAY_SIZE(mt6323_keys_resources), - .resources = mt6323_keys_resources, - .of_compatible = "mediatek,mt6323-keys" -+ }, { -+ .name = "mt6323-pwrc", -+ .num_resources = ARRAY_SIZE(mt6323_pwrc_resources), -+ .resources = mt6323_pwrc_resources, -+ .of_compatible = "mediatek,mt6323-pwrc" - }, - }; - -diff --git a/drivers/power/reset/Kconfig b/drivers/power/reset/Kconfig -index 6533aa560aa1..3d0c050c5160 100644 ---- a/drivers/power/reset/Kconfig -+++ b/drivers/power/reset/Kconfig -@@ -139,6 +139,16 @@ config POWER_RESET_LTC2952 - This driver supports an external powerdown trigger and board power - down via the LTC2952. Bindings are made in the device tree. - -+config POWER_RESET_MT6323 -+ bool "MediaTek MT6323 power-off driver" -+ depends on MFD_MT6397 -+ help -+ The power-off driver is responsible for externally shutdown down -+ the power of a remote MediaTek SoC MT6323 is connected to through -+ controlling a tiny circuit BBPU inside MT6323 RTC. -+ -+ Say Y if you have a board where MT6323 could be found. -+ - config POWER_RESET_QNAP - bool "QNAP power-off driver" - depends on OF_GPIO && PLAT_ORION -diff --git a/drivers/power/reset/Makefile b/drivers/power/reset/Makefile -index 0aebee954ac1..94eaceb01d66 100644 ---- a/drivers/power/reset/Makefile -+++ b/drivers/power/reset/Makefile -@@ -11,6 +11,7 @@ obj-$(CONFIG_POWER_RESET_GPIO) += gpio-poweroff.o - obj-$(CONFIG_POWER_RESET_GPIO_RESTART) += gpio-restart.o - obj-$(CONFIG_POWER_RESET_HISI) += hisi-reboot.o - obj-$(CONFIG_POWER_RESET_MSM) += msm-poweroff.o -+obj-$(CONFIG_POWER_RESET_MT6323) += mt6323-poweroff.o - obj-$(CONFIG_POWER_RESET_QCOM_PON) += qcom-pon.o - obj-$(CONFIG_POWER_RESET_OCELOT_RESET) += ocelot-reset.o - obj-$(CONFIG_POWER_RESET_PIIX4_POWEROFF) += piix4-poweroff.o -diff --git a/drivers/power/reset/mt6323-poweroff.c b/drivers/power/reset/mt6323-poweroff.c -new file mode 100644 -index 000000000000..c195766f7570 ---- /dev/null -+++ b/drivers/power/reset/mt6323-poweroff.c -@@ -0,0 +1,97 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Power off through MediaTek PMIC -+ * -+ * Copyright (C) 2018 MediaTek Inc. -+ * -+ * Author: Sean Wang -+ * -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+struct mt6323_pwrc { -+ struct device *dev; -+ struct regmap *regmap; -+ u32 base; -+}; -+ -+static struct mt6323_pwrc *mt_pwrc; -+ -+static void mt6323_do_pwroff(void) -+{ -+ struct mt6323_pwrc *pwrc = mt_pwrc; -+ unsigned int val; -+ int ret; -+ -+ regmap_write(pwrc->regmap, pwrc->base + RTC_BBPU, RTC_BBPU_KEY); -+ regmap_write(pwrc->regmap, pwrc->base + RTC_WRTGR, 1); -+ -+ ret = regmap_read_poll_timeout(pwrc->regmap, -+ pwrc->base + RTC_BBPU, val, -+ !(val & RTC_BBPU_CBUSY), -+ MTK_RTC_POLL_DELAY_US, -+ MTK_RTC_POLL_TIMEOUT); -+ if (ret) -+ dev_err(pwrc->dev, "failed to write BBPU: %d\n", ret); -+ -+ /* Wait some time until system down, otherwise, notice with a warn */ -+ mdelay(1000); -+ -+ WARN_ONCE(1, "Unable to power off system\n"); -+} -+ -+static int mt6323_pwrc_probe(struct platform_device *pdev) -+{ -+ struct mt6397_chip *mt6397_chip = dev_get_drvdata(pdev->dev.parent); -+ struct mt6323_pwrc *pwrc; -+ struct resource *res; -+ -+ pwrc = devm_kzalloc(&pdev->dev, sizeof(*pwrc), GFP_KERNEL); -+ if (!pwrc) -+ return -ENOMEM; -+ -+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -+ pwrc->base = res->start; -+ pwrc->regmap = mt6397_chip->regmap; -+ pwrc->dev = &pdev->dev; -+ mt_pwrc = pwrc; -+ -+ pm_power_off = &mt6323_do_pwroff; -+ -+ return 0; -+} -+ -+static int mt6323_pwrc_remove(struct platform_device *pdev) -+{ -+ if (pm_power_off == &mt6323_do_pwroff) -+ pm_power_off = NULL; -+ -+ return 0; -+} -+ -+static const struct of_device_id mt6323_pwrc_dt_match[] = { -+ { .compatible = "mediatek,mt6323-pwrc" }, -+ {}, -+}; -+MODULE_DEVICE_TABLE(of, mt6323_pwrc_dt_match); -+ -+static struct platform_driver mt6323_pwrc_driver = { -+ .probe = mt6323_pwrc_probe, -+ .remove = mt6323_pwrc_remove, -+ .driver = { -+ .name = "mt6323-pwrc", -+ .of_match_table = mt6323_pwrc_dt_match, -+ }, -+}; -+ -+module_platform_driver(mt6323_pwrc_driver); -+ -+MODULE_DESCRIPTION("Poweroff driver for MT6323 PMIC"); -+MODULE_AUTHOR("Sean Wang "); -+MODULE_LICENSE("GPL v2"); -diff --git a/drivers/rtc/rtc-mt6397.c b/drivers/rtc/rtc-mt6397.c -index 385f8303bb41..66e949df8d6a 100644 ---- a/drivers/rtc/rtc-mt6397.c -+++ b/drivers/rtc/rtc-mt6397.c -@@ -1,80 +1,26 @@ -+// SPDX-License-Identifier: GPL-2.0 - /* --* Copyright (c) 2014-2015 MediaTek Inc. --* Author: Tianping.Fang --* --* This program is free software; you can redistribute it and/or modify --* it under the terms of the GNU General Public License version 2 as --* published by the Free Software Foundation. --* --* This program is distributed in the hope that it will be useful, --* but WITHOUT ANY WARRANTY; without even the implied warranty of --* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --* GNU General Public License for more details. --*/ -- --#include --#include -+ * MediaTek PMIC RTC driver -+ * -+ * Copyright (C) 2014-2018 MediaTek Inc. -+ * -+ * Author: Tianping.Fang -+ * Sean Wang -+ */ -+ -+#include -+#include -+#include - #include -+#include -+#include -+#include - #include - #include --#include --#include --#include --#include --#include --#include -- --#define RTC_BBPU 0x0000 --#define RTC_BBPU_CBUSY BIT(6) -- --#define RTC_WRTGR 0x003c -- --#define RTC_IRQ_STA 0x0002 --#define RTC_IRQ_STA_AL BIT(0) --#define RTC_IRQ_STA_LP BIT(3) -- --#define RTC_IRQ_EN 0x0004 --#define RTC_IRQ_EN_AL BIT(0) --#define RTC_IRQ_EN_ONESHOT BIT(2) --#define RTC_IRQ_EN_LP BIT(3) --#define RTC_IRQ_EN_ONESHOT_AL (RTC_IRQ_EN_ONESHOT | RTC_IRQ_EN_AL) -- --#define RTC_AL_MASK 0x0008 --#define RTC_AL_MASK_DOW BIT(4) -- --#define RTC_TC_SEC 0x000a --/* Min, Hour, Dom... register offset to RTC_TC_SEC */ --#define RTC_OFFSET_SEC 0 --#define RTC_OFFSET_MIN 1 --#define RTC_OFFSET_HOUR 2 --#define RTC_OFFSET_DOM 3 --#define RTC_OFFSET_DOW 4 --#define RTC_OFFSET_MTH 5 --#define RTC_OFFSET_YEAR 6 --#define RTC_OFFSET_COUNT 7 -- --#define RTC_AL_SEC 0x0018 -- --#define RTC_PDN2 0x002e --#define RTC_PDN2_PWRON_ALARM BIT(4) -- --#define RTC_MIN_YEAR 1968 --#define RTC_BASE_YEAR 1900 --#define RTC_NUM_YEARS 128 --#define RTC_MIN_YEAR_OFFSET (RTC_MIN_YEAR - RTC_BASE_YEAR) -- --struct mt6397_rtc { -- struct device *dev; -- struct rtc_device *rtc_dev; -- struct mutex lock; -- struct regmap *regmap; -- int irq; -- u32 addr_base; --}; -+#include - - static int mtk_rtc_write_trigger(struct mt6397_rtc *rtc) - { -- unsigned long timeout = jiffies + HZ; - int ret; - u32 data; - -@@ -82,19 +28,13 @@ static int mtk_rtc_write_trigger(struct mt6397_rtc *rtc) - if (ret < 0) - return ret; - -- while (1) { -- ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_BBPU, -- &data); -- if (ret < 0) -- break; -- if (!(data & RTC_BBPU_CBUSY)) -- break; -- if (time_after(jiffies, timeout)) { -- ret = -ETIMEDOUT; -- break; -- } -- cpu_relax(); -- } -+ ret = regmap_read_poll_timeout(rtc->regmap, -+ rtc->addr_base + RTC_BBPU, data, -+ !(data & RTC_BBPU_CBUSY), -+ MTK_RTC_POLL_DELAY_US, -+ MTK_RTC_POLL_TIMEOUT); -+ if (ret < 0) -+ dev_err(rtc->dev, "failed to write WRTGE: %d\n", ret); - - return ret; - } -@@ -332,44 +272,25 @@ static int mtk_rtc_probe(struct platform_device *pdev) - - platform_set_drvdata(pdev, rtc); - -- ret = request_threaded_irq(rtc->irq, NULL, -- mtk_rtc_irq_handler_thread, -- IRQF_ONESHOT | IRQF_TRIGGER_HIGH, -- "mt6397-rtc", rtc); -+ ret = devm_request_threaded_irq(&pdev->dev, rtc->irq, NULL, -+ mtk_rtc_irq_handler_thread, -+ IRQF_ONESHOT | IRQF_TRIGGER_HIGH, -+ "mt6397-rtc", rtc); - if (ret) { - dev_err(&pdev->dev, "Failed to request alarm IRQ: %d: %d\n", - rtc->irq, ret); -- goto out_dispose_irq; -+ return ret; - } - - device_init_wakeup(&pdev->dev, 1); - -- rtc->rtc_dev = rtc_device_register("mt6397-rtc", &pdev->dev, -- &mtk_rtc_ops, THIS_MODULE); -- if (IS_ERR(rtc->rtc_dev)) { -- dev_err(&pdev->dev, "register rtc device failed\n"); -- ret = PTR_ERR(rtc->rtc_dev); -- goto out_free_irq; -- } -- -- return 0; -+ rtc->rtc_dev = devm_rtc_allocate_device(&pdev->dev); -+ if (IS_ERR(rtc->rtc_dev)) -+ return PTR_ERR(rtc->rtc_dev); - --out_free_irq: -- free_irq(rtc->irq, rtc->rtc_dev); --out_dispose_irq: -- irq_dispose_mapping(rtc->irq); -- return ret; --} -+ rtc->rtc_dev->ops = &mtk_rtc_ops; - --static int mtk_rtc_remove(struct platform_device *pdev) --{ -- struct mt6397_rtc *rtc = platform_get_drvdata(pdev); -- -- rtc_device_unregister(rtc->rtc_dev); -- free_irq(rtc->irq, rtc->rtc_dev); -- irq_dispose_mapping(rtc->irq); -- -- return 0; -+ return rtc_register_device(rtc->rtc_dev); - } - - #ifdef CONFIG_PM_SLEEP -@@ -398,6 +319,7 @@ static SIMPLE_DEV_PM_OPS(mt6397_pm_ops, mt6397_rtc_suspend, - mt6397_rtc_resume); - - static const struct of_device_id mt6397_rtc_of_match[] = { -+ { .compatible = "mediatek,mt6323-rtc", }, - { .compatible = "mediatek,mt6397-rtc", }, - { } - }; -@@ -410,7 +332,6 @@ static struct platform_driver mtk_rtc_driver = { - .pm = &mt6397_pm_ops, - }, - .probe = mtk_rtc_probe, -- .remove = mtk_rtc_remove, - }; - - module_platform_driver(mtk_rtc_driver); -diff --git a/include/linux/mfd/mt6397/core.h b/include/linux/mfd/mt6397/core.h -index d678f526e498..0425c68cc187 100644 ---- a/include/linux/mfd/mt6397/core.h -+++ b/include/linux/mfd/mt6397/core.h -@@ -15,6 +15,8 @@ - #ifndef __MFD_MT6397_CORE_H__ - #define __MFD_MT6397_CORE_H__ - -+#include -+ - enum mt6397_irq_numbers { - MT6397_IRQ_SPKL_AB = 0, - MT6397_IRQ_SPKR_AB, -diff --git a/include/linux/mfd/mt6397/rtc.h b/include/linux/mfd/mt6397/rtc.h -new file mode 100644 -index 000000000000..ac932c93da8f ---- /dev/null -+++ b/include/linux/mfd/mt6397/rtc.h -@@ -0,0 +1,71 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+/* -+ * Copyright (C) 2014-2018 MediaTek Inc. -+ * -+ * Author: Tianping.Fang -+ * Sean Wang -+ */ -+ -+#ifndef _LINUX_MFD_MT6397_RTC_H_ -+#define _LINUX_MFD_MT6397_RTC_H_ -+ -+#include -+#include -+#include -+#include -+ -+#define RTC_BBPU 0x0000 -+#define RTC_BBPU_CBUSY BIT(6) -+#define RTC_BBPU_KEY (0x43 << 8) -+ -+#define RTC_WRTGR 0x003c -+ -+#define RTC_IRQ_STA 0x0002 -+#define RTC_IRQ_STA_AL BIT(0) -+#define RTC_IRQ_STA_LP BIT(3) -+ -+#define RTC_IRQ_EN 0x0004 -+#define RTC_IRQ_EN_AL BIT(0) -+#define RTC_IRQ_EN_ONESHOT BIT(2) -+#define RTC_IRQ_EN_LP BIT(3) -+#define RTC_IRQ_EN_ONESHOT_AL (RTC_IRQ_EN_ONESHOT | RTC_IRQ_EN_AL) -+ -+#define RTC_AL_MASK 0x0008 -+#define RTC_AL_MASK_DOW BIT(4) -+ -+#define RTC_TC_SEC 0x000a -+/* Min, Hour, Dom... register offset to RTC_TC_SEC */ -+#define RTC_OFFSET_SEC 0 -+#define RTC_OFFSET_MIN 1 -+#define RTC_OFFSET_HOUR 2 -+#define RTC_OFFSET_DOM 3 -+#define RTC_OFFSET_DOW 4 -+#define RTC_OFFSET_MTH 5 -+#define RTC_OFFSET_YEAR 6 -+#define RTC_OFFSET_COUNT 7 -+ -+#define RTC_AL_SEC 0x0018 -+ -+#define RTC_PDN2 0x002e -+#define RTC_PDN2_PWRON_ALARM BIT(4) -+ -+#define RTC_MIN_YEAR 1968 -+#define RTC_BASE_YEAR 1900 -+#define RTC_NUM_YEARS 128 -+#define RTC_MIN_YEAR_OFFSET (RTC_MIN_YEAR - RTC_BASE_YEAR) -+ -+#define MTK_RTC_POLL_DELAY_US 10 -+#define MTK_RTC_POLL_TIMEOUT (jiffies_to_usecs(HZ)) -+ -+struct mt6397_rtc { -+ struct device *dev; -+ struct rtc_device *rtc_dev; -+ -+ /* Protect register access from multiple tasks */ -+ struct mutex lock; -+ struct regmap *regmap; -+ int irq; -+ u32 addr_base; -+}; -+ -+#endif /* _LINUX_MFD_MT6397_RTC_H_ */ --- -2.19.1 -