From 084076cab99dc301807a0b543f901a50ec6ff74e Mon Sep 17 00:00:00 2001 From: Mighty Date: Sun, 26 Dec 2021 19:23:36 +0530 Subject: [PATCH] linux-samsung-espresso3g: Various fixes and improvements (MR 2789) linux-samsung-espresso3g: Add support for gp2a light and proximity sensor linux-samsung-espresso3g: Display now runs at 45Hz linux-samsung-espresso3g: Add pinmux for wlan host wake linux-samsung-espresso3g: Add TWL 6030 power off support linux-samsung-espresso3g: Add TWL 6030 power button support linux-samsung-espresso3g: Data Enable is active high linux-samsung-espresso3g: Fix patch --- .../00-add-espresso-dts.patch | 70 ++++- ...r-with-minimal-support-for-power-off.patch | 213 +++++++++++++++ ...ower-button-support-to-twl-pwrbutton.patch | 244 ++++++++++++++++++ .../linux-samsung-espresso3g/APKBUILD | 10 +- .../config-samsung-espresso3g.armv7 | 2 +- 5 files changed, 524 insertions(+), 15 deletions(-) create mode 100644 device/community/linux-samsung-espresso3g/04-Add-TWL6030-power-driver-with-minimal-support-for-power-off.patch create mode 100644 device/community/linux-samsung-espresso3g/05-Add-TWL6030-power-button-support-to-twl-pwrbutton.patch diff --git a/device/community/linux-samsung-espresso3g/00-add-espresso-dts.patch b/device/community/linux-samsung-espresso3g/00-add-espresso-dts.patch index fd865a6ec..c8f9ddebe 100644 --- a/device/community/linux-samsung-espresso3g/00-add-espresso-dts.patch +++ b/device/community/linux-samsung-espresso3g/00-add-espresso-dts.patch @@ -1,5 +1,5 @@ diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index 7e0934180724..cdf76c6cd05c 100644 +index 7e0934180..cdf76c6cd 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -880,6 +880,7 @@ dtb-$(CONFIG_ARCH_OMAP4) += \ @@ -12,10 +12,10 @@ index 7e0934180724..cdf76c6cd05c 100644 omap4-var-dvk-om44.dtb \ diff --git a/arch/arm/boot/dts/omap4-samsung-espresso3g.dts b/arch/arm/boot/dts/omap4-samsung-espresso3g.dts new file mode 100644 -index 000000000000..6a75c72d8f72 +index 000000000..4dbc096ee --- /dev/null +++ b/arch/arm/boot/dts/omap4-samsung-espresso3g.dts -@@ -0,0 +1,584 @@ +@@ -0,0 +1,632 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +/dts-v1/; +#include "dt-bindings/gpio/gpio.h" @@ -223,7 +223,7 @@ index 000000000000..6a75c72d8f72 + backlight = <&backlight>; + + panel-timing { -+ clock-frequency = <28444445>; ++ clock-frequency = <42666667>; + + hback-porch = <210>; + hactive = <1024>; @@ -237,7 +237,7 @@ index 000000000000..6a75c72d8f72 + + hsync-active = <0>; + vsync-active = <0>; -+ de-active = <0>; ++ de-active = <1>; + pixelclk-active = <0>; + }; + @@ -254,6 +254,14 @@ index 000000000000..6a75c72d8f72 + pinctrl-names = "default"; + pinctrl-0 = <&vibrator_default>; + }; ++ ++ gp2a_shunt: current-sense-shunt { ++ compatible = "current-sense-shunt"; ++ io-channels = <&gpadc 4>; ++ shunt-resistor-micro-ohms = <47000000>; /* 47 ohms */ ++ #io-channel-cells = <0>; ++ io-channel-ranges; ++ }; +}; + +&omap4_pmx_wkup { @@ -262,6 +270,12 @@ index 000000000000..6a75c72d8f72 + OMAP4_IOPAD(0x56, PIN_OUTPUT_PULLUP | MUX_MODE2) /* fref_clk3_req.sys_drm_msecure */ + >; + }; ++ ++ prox_irq: pinmux_prox_irq { ++ pinctrl-single,pins = < ++ OMAP4_IOPAD(0x042, WAKEUP_EN | PIN_INPUT_PULLUP | MUX_MODE3) ++ >; ++ }; +}; + +&omap4_pmx_core { @@ -421,6 +435,12 @@ index 000000000000..6a75c72d8f72 + >; + }; + ++ wlan_host_wake: pinmux_wlan_host_wake { ++ pinctrl-single,pins = < ++ OMAP4_IOPAD(0x0bc, WAKEUP_EN | PIN_INPUT | MUX_MODE3) ++ >; ++ }; ++ + touch_pins: pinmux_touch_pins { + pinctrl-single,pins = < + OMAP4_IOPAD(0x06c, PIN_INPUT | MUX_MODE3) @@ -432,6 +452,12 @@ index 000000000000..6a75c72d8f72 + OMAP4_IOPAD(0x05c, PIN_INPUT_PULLDOWN | MUX_MODE3) + >; + }; ++ ++ gp2a_irq: pinmux_gp2a_irq { ++ pinctrl-single,pins = < ++ OMAP4_IOPAD(0x052, WAKEUP_EN | PIN_INPUT | MUX_MODE3) ++ >; ++ }; +}; + +&i2c1 { @@ -454,6 +480,11 @@ index 000000000000..6a75c72d8f72 + /* SPI = 0, IRQ# = 7, 4 = active high level-sensitive */ + interrupts = ; /* IRQ_SYS_1N cascaded to gic */ + interrupt-parent = <&gic>; ++ ++ twl_power: power { ++ compatible = "ti,twl6030-power"; ++ ti,system-power-controller; ++ }; + }; +}; + @@ -489,8 +520,8 @@ index 000000000000..6a75c72d8f72 + accelerometer@18 { + compatible = "bosch,bma254"; + reg = <0x18>; -+ vdd-supply = <&ldo5>; -+ vddio-supply = <&vaux2>; ++ vdd-supply = <&vaux2>; ++ vddio-supply = <&ldo5>; + interrupt-parent = <&gpio4>; + interrupts = <25 (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_EDGE_RISING)> , <26 (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_EDGE_RISING)>; + mount-matrix = "-1", "0", "0", @@ -501,11 +532,26 @@ index 000000000000..6a75c72d8f72 + magnetometer@2e { + compatible = "yamaha,yas530"; + reg = <0x2e>; -+ vdd-supply = <&ldo5>; -+ iovdd-supply = <&vaux2>; ++ vdd-supply = <&vaux2>; ++ iovdd-supply = <&ldo5>; + reset-gpios = <&gpio5 29 GPIO_ACTIVE_LOW>; + interrupts = <&gpio6 10 IRQ_TYPE_EDGE_RISING>; -+ }; ++ }; ++ ++ light-sensor@44 { ++ compatible = "sharp,gp2ap002a00f"; ++ reg = <0x44>; ++ interrupt-parent = <&gpio1>; ++ interrupts = <1 IRQ_TYPE_EDGE_FALLING>; ++ vdd-supply = <&vaux2>; ++ vio-supply = <&vaux2>; ++ io-channels = <&gp2a_shunt>; ++ io-channel-names = "alsout"; ++ sharp,proximity-far-hysteresis = /bits/ 8 <0x40>; ++ sharp,proximity-close-hysteresis = /bits/ 8 <0x20>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&gp2a_irq &prox_irq>; ++ }; +}; + +&dss { @@ -581,6 +627,8 @@ index 000000000000..6a75c72d8f72 + interrupt-parent = <&gpio3>; + interrupts = <17 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "host-wake"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&wlan_host_wake>; + }; +}; + @@ -602,7 +650,7 @@ index 000000000000..6a75c72d8f72 +}; diff --git a/arch/arm/boot/dts/twl6032.dtsi b/arch/arm/boot/dts/twl6032.dtsi new file mode 100644 -index 000000000000..f7b371179e44 +index 000000000..f7b371179 --- /dev/null +++ b/arch/arm/boot/dts/twl6032.dtsi @@ -0,0 +1,88 @@ diff --git a/device/community/linux-samsung-espresso3g/04-Add-TWL6030-power-driver-with-minimal-support-for-power-off.patch b/device/community/linux-samsung-espresso3g/04-Add-TWL6030-power-driver-with-minimal-support-for-power-off.patch new file mode 100644 index 000000000..668c5940a --- /dev/null +++ b/device/community/linux-samsung-espresso3g/04-Add-TWL6030-power-driver-with-minimal-support-for-power-off.patch @@ -0,0 +1,213 @@ +diff --git a/Documentation/devicetree/bindings/mfd/twl6030-power.txt b/Documentation/devicetree/bindings/mfd/twl6030-power.txt +new file mode 100644 +index 000000000..a78f0f842 +--- /dev/null ++++ b/Documentation/devicetree/bindings/mfd/twl6030-power.txt +@@ -0,0 +1,32 @@ ++ ++Texas Instruments TWL family (twl6030) reset and power management module ++ ++For now, the binding only supports the complete shutdown of the system after ++poweroff. ++ ++Required properties: ++- compatible : must be ++ "ti,twl6030-power" ++ ++Optional properties: ++ ++- ti,system-power-controller: This indicates that TWL6030 is the ++ power supply master of the system. With this flag, the chip will ++ initiate an ACTIVE-to-OFF or SLEEP-to-OFF transition when the ++ system poweroffs. ++ ++Example: ++&i2c1 { ++ clock-frequency = <2600000>; ++ ++ twl: twl@48 { ++ reg = <0x48>; ++ interrupts = <7>; /* SYS_NIRQ cascaded to intc */ ++ interrupt-parent = <&intc>; ++ ++ twl_power: power { ++ compatible = "ti,twl6030-power"; ++ ti,system-power-controller; ++ }; ++ }; ++}; +diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig +index 02c253de9..b27ae703f 100644 +--- a/arch/arm/mach-omap2/Kconfig ++++ b/arch/arm/mach-omap2/Kconfig +@@ -140,7 +140,8 @@ config ARCH_OMAP2PLUS_TYPICAL + select REGULATOR + select REGULATOR_FIXED_VOLTAGE + select TWL4030_CORE if ARCH_OMAP3 || ARCH_OMAP4 +- select TWL4030_POWER if ARCH_OMAP3 || ARCH_OMAP4 ++ select TWL4030_POWER if ARCH_OMAP3 ++ select TWL6030_POWER if ARCH_OMAP4 + select VFP + help + Compile a kernel suitable for booting most boards +diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig +index ca0edab91..525fdf347 100644 +--- a/drivers/mfd/Kconfig ++++ b/drivers/mfd/Kconfig +@@ -1671,6 +1671,16 @@ config MFD_TWL4030_AUDIO + select MFD_CORE + default n + ++config TWL6030_POWER ++ bool "TI TWL6030 power resources" ++ depends on TWL4030_CORE && ARM ++ help ++ Say yes here if you want to use the power resources on the ++ TWL6030 family chips. ++ ++ When used as system power controller, this driver allows turning off ++ the main power supply. ++ + config TWL6040_CORE + bool "TI TWL6040 audio codec" + depends on I2C=y +diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile +index 2ba6646e8..ccdd8efa3 100644 +--- a/drivers/mfd/Makefile ++++ b/drivers/mfd/Makefile +@@ -111,6 +111,7 @@ obj-$(CONFIG_MENELAUS) += menelaus.o + obj-$(CONFIG_TWL4030_CORE) += twl-core.o twl4030-irq.o twl6030-irq.o + obj-$(CONFIG_TWL4030_POWER) += twl4030-power.o + obj-$(CONFIG_MFD_TWL4030_AUDIO) += twl4030-audio.o ++obj-$(CONFIG_TWL6030_POWER) += twl6030-power.o + obj-$(CONFIG_TWL6040_CORE) += twl6040.o + + obj-$(CONFIG_MFD_MX25_TSADC) += fsl-imx25-tsadc.o +diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c +index 289b556de..880ea446c 100644 +--- a/drivers/mfd/twl-core.c ++++ b/drivers/mfd/twl-core.c +@@ -956,6 +956,14 @@ add_children(struct twl4030_platform_data *pdata, unsigned irq_base, + return PTR_ERR(child); + } + ++ if (IS_ENABLED(CONFIG_TWL6030_POWER) && pdata->power) { ++ child = add_child(TWL_MODULE_PM_MASTER, "twl6030_power", ++ pdata->power, sizeof(*pdata->power), false, ++ 0, 0); ++ if (IS_ERR(child)) ++ return PTR_ERR(child); ++ } ++ + return 0; + } + +diff --git a/drivers/mfd/twl6030-power.c b/drivers/mfd/twl6030-power.c +new file mode 100644 +index 000000000..f6bacdfc3 +--- /dev/null ++++ b/drivers/mfd/twl6030-power.c +@@ -0,0 +1,103 @@ ++ ++/* ++ * TWL6030 power ++ * ++ * Copyright (C) 2016 Paul Kocialkowski ++ * ++ * This file is subject to the terms and conditions of the GNU General ++ * Public License. See the file "COPYING" in the main directory of this ++ * archive for more details. ++ * ++ * 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. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define TWL6030_PHOENIX_DEV_ON 0x25 ++ ++#define TWL6030_PHOENIX_APP_DEVOFF (1 << 0) ++#define TWL6030_PHOENIX_CON_DEVOFF (1 << 1) ++#define TWL6030_PHOENIX_MOD_DEVOFF (1 << 2) ++ ++void twl6030_power_off(void) ++{ ++ int err; ++ ++ err = twl_i2c_write_u8(TWL6030_MODULE_ID0, TWL6030_PHOENIX_APP_DEVOFF | ++ TWL6030_PHOENIX_CON_DEVOFF | TWL6030_PHOENIX_MOD_DEVOFF, ++ TWL6030_PHOENIX_DEV_ON); ++ if (err) ++ pr_err("TWL6030 Unable to power off\n"); ++} ++ ++static bool twl6030_power_use_poweroff(const struct twl4030_power_data *pdata, ++ struct device_node *node) ++{ ++ if (pdata && pdata->use_poweroff) ++ return true; ++ ++ if (of_property_read_bool(node, "ti,system-power-controller")) ++ return true; ++ ++ return false; ++} ++ ++#ifdef CONFIG_OF ++static const struct of_device_id twl6030_power_of_match[] = { ++ { ++ .compatible = "ti,twl6030-power", ++ }, ++ { }, ++}; ++ ++MODULE_DEVICE_TABLE(of, twl6030_power_of_match); ++#endif /* CONFIG_OF */ ++ ++static int twl6030_power_probe(struct platform_device *pdev) ++{ ++ const struct twl4030_power_data *pdata = dev_get_platdata(&pdev->dev); ++ struct device_node *node = pdev->dev.of_node; ++ ++ if (!pdata && !node) { ++ dev_err(&pdev->dev, "Platform data is missing\n"); ++ return -EINVAL; ++ } ++ ++ /* Board has to be wired properly to use this feature */ ++ if (twl6030_power_use_poweroff(pdata, node) && !pm_power_off) ++ pm_power_off = twl6030_power_off; ++ ++ return 0; ++} ++ ++static int twl6030_power_remove(struct platform_device *pdev) ++{ ++ return 0; ++} ++ ++static struct platform_driver twl6030_power_driver = { ++ .driver = { ++ .name = "twl6030_power", ++ .of_match_table = of_match_ptr(twl6030_power_of_match), ++ }, ++ .probe = twl6030_power_probe, ++ .remove = twl6030_power_remove, ++}; ++ ++module_platform_driver(twl6030_power_driver); ++ ++MODULE_AUTHOR("Paul Kocialkowski "); ++MODULE_DESCRIPTION("Power management for TWL6030"); ++MODULE_LICENSE("GPL"); diff --git a/device/community/linux-samsung-espresso3g/05-Add-TWL6030-power-button-support-to-twl-pwrbutton.patch b/device/community/linux-samsung-espresso3g/05-Add-TWL6030-power-button-support-to-twl-pwrbutton.patch new file mode 100644 index 000000000..a852166e8 --- /dev/null +++ b/device/community/linux-samsung-espresso3g/05-Add-TWL6030-power-button-support-to-twl-pwrbutton.patch @@ -0,0 +1,244 @@ +diff --git a/Documentation/devicetree/bindings/input/twl4030-pwrbutton.txt b/Documentation/devicetree/bindings/input/twl-pwrbutton.txt +similarity index 64% +rename from Documentation/devicetree/bindings/input/twl4030-pwrbutton.txt +rename to Documentation/devicetree/bindings/input/twl-pwrbutton.txt +index f5021214e..b49e2608f 100644 +--- a/Documentation/devicetree/bindings/input/twl4030-pwrbutton.txt ++++ b/Documentation/devicetree/bindings/input/twl-pwrbutton.txt +@@ -1,6 +1,6 @@ +-Texas Instruments TWL family (twl4030) pwrbutton module ++Texas Instruments TWL family pwrbutton module + +-This module is part of the TWL4030. For more details about the whole ++This module is part of a TWL chip. For more details about the whole + chip see Documentation/devicetree/bindings/mfd/twl-family.txt. + + This module provides a simple power button event via an Interrupt. +@@ -8,8 +8,9 @@ This module provides a simple power button event via an Interrupt. + Required properties: + - compatible: should be one of the following + - "ti,twl4030-pwrbutton": For controllers compatible with twl4030 ++ - "ti,twl6030-pwrbutton": For controllers compatible with twl6030 + - interrupts: should be one of the following +- - <8>: For controllers compatible with twl4030 ++ - <8>: For controllers compatible with the twl + + Example: + +diff --git a/arch/arm/boot/dts/twl6030.dtsi b/arch/arm/boot/dts/twl6030.dtsi +index 9d588cfaa..ac033debf 100644 +--- a/arch/arm/boot/dts/twl6030.dtsi ++++ b/arch/arm/boot/dts/twl6030.dtsi +@@ -102,4 +102,9 @@ gpadc { + interrupts = <3>; + #io-channel-cells = <1>; + }; ++ ++ twl_pwrbutton: pwrbutton { ++ compatible = "ti,twl6030-pwrbutton"; ++ interrupts = <0>; ++ }; + }; +diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig +index dd5227cf8..61e1075bd 100644 +--- a/drivers/input/misc/Kconfig ++++ b/drivers/input/misc/Kconfig +@@ -479,15 +479,15 @@ config INPUT_AXP20X_PEK + be called axp20x-pek. + + +-config INPUT_TWL4030_PWRBUTTON +- tristate "TWL4030 Power button Driver" ++config INPUT_TWL_PWRBUTTON ++ tristate "TWL Power button Driver" + depends on TWL4030_CORE + help + Say Y here if you want to enable power key reporting via the +- TWL4030 family of chips. ++ TWL family of chips. + + To compile this driver as a module, choose M here. The module will +- be called twl4030_pwrbutton. ++ be called twl_pwrbutton + + config INPUT_TWL4030_VIBRA + tristate "Support for TWL4030 Vibrator" +diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile +index b92c53a6b..03531e525 100644 +--- a/drivers/input/misc/Makefile ++++ b/drivers/input/misc/Makefile +@@ -77,7 +77,7 @@ obj-$(CONFIG_INPUT_SOC_BUTTON_ARRAY) += soc_button_array.o + obj-$(CONFIG_INPUT_SPARCSPKR) += sparcspkr.o + obj-$(CONFIG_INPUT_STPMIC1_ONKEY) += stpmic1_onkey.o + obj-$(CONFIG_INPUT_TPS65218_PWRBUTTON) += tps65218-pwrbutton.o +-obj-$(CONFIG_INPUT_TWL4030_PWRBUTTON) += twl4030-pwrbutton.o ++obj-$(CONFIG_INPUT_TWL_PWRBUTTON) += twl-pwrbutton.o + obj-$(CONFIG_INPUT_TWL4030_VIBRA) += twl4030-vibra.o + obj-$(CONFIG_INPUT_TWL6040_VIBRA) += twl6040-vibra.o + obj-$(CONFIG_INPUT_UINPUT) += uinput.o +diff --git a/drivers/input/misc/twl4030-pwrbutton.c b/drivers/input/misc/twl-pwrbutton.c +similarity index 58% +rename from drivers/input/misc/twl4030-pwrbutton.c +rename to drivers/input/misc/twl-pwrbutton.c +index b307cca17..9f6081474 100644 +--- a/drivers/input/misc/twl4030-pwrbutton.c ++++ b/drivers/input/misc/twl-pwrbutton.c +@@ -31,15 +31,22 @@ + + #define PWR_PWRON_IRQ (1 << 0) + +-#define STS_HW_CONDITIONS 0xf ++#define TWL4030_STS_HW_CONDITIONS 0x0f ++#define TWL6030_STS_HW_CONDITIONS 0x21 + +-static irqreturn_t powerbutton_irq(int irq, void *_pwr) ++static irqreturn_t twl_pwrbutton_irq(int irq, void *_pwr) + { + struct input_dev *pwr = _pwr; + int err; + u8 value; + +- err = twl_i2c_read_u8(TWL_MODULE_PM_MASTER, &value, STS_HW_CONDITIONS); ++ if (twl_class_is_4030()) ++ err = twl_i2c_read_u8(TWL_MODULE_PM_MASTER, &value, ++ TWL4030_STS_HW_CONDITIONS); ++ else ++ err = twl_i2c_read_u8(TWL6030_MODULE_ID0, &value, ++ TWL6030_STS_HW_CONDITIONS); ++ + if (!err) { + pm_wakeup_event(pwr->dev.parent, 0); + input_report_key(pwr, KEY_POWER, value & PWR_PWRON_IRQ); +@@ -52,7 +59,7 @@ static irqreturn_t powerbutton_irq(int irq, void *_pwr) + return IRQ_HANDLED; + } + +-static int twl4030_pwrbutton_probe(struct platform_device *pdev) ++static int twl_pwrbutton_probe(struct platform_device *pdev) + { + struct input_dev *pwr; + int irq = platform_get_irq(pdev, 0); +@@ -64,15 +71,23 @@ static int twl4030_pwrbutton_probe(struct platform_device *pdev) + return -ENOMEM; + } + +- input_set_capability(pwr, EV_KEY, KEY_POWER); +- pwr->name = "twl4030_pwrbutton"; +- pwr->phys = "twl4030_pwrbutton/input0"; ++ pwr->evbit[0] = BIT_MASK(EV_KEY); ++ pwr->keybit[BIT_WORD(KEY_POWER)] = BIT_MASK(KEY_POWER); ++ pwr->name = "twl_pwrbutton"; ++ pwr->phys = "twl_pwrbutton/input0"; + pwr->dev.parent = &pdev->dev; + +- err = devm_request_threaded_irq(&pdev->dev, irq, NULL, powerbutton_irq, ++ if (twl_class_is_6030()) { ++ twl6030_interrupt_unmask(TWL6030_PWRON_INT_MASK, ++ REG_INT_MSK_LINE_A); ++ twl6030_interrupt_unmask(TWL6030_PWRON_INT_MASK, ++ REG_INT_MSK_STS_A); ++ } ++ ++ err = devm_request_threaded_irq(&pwr->dev, irq, NULL, twl_pwrbutton_irq, + IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING | + IRQF_ONESHOT, +- "twl4030_pwrbutton", pwr); ++ "twl_pwrbutton", pwr); + if (err < 0) { + dev_err(&pdev->dev, "Can't get IRQ for pwrbutton: %d\n", err); + return err; +@@ -84,31 +99,45 @@ static int twl4030_pwrbutton_probe(struct platform_device *pdev) + return err; + } + ++ platform_set_drvdata(pdev, pwr); + device_init_wakeup(&pdev->dev, true); + + return 0; + } + ++static int twl_pwrbutton_remove(struct platform_device *pdev) ++{ ++ if (twl_class_is_6030()) { ++ twl6030_interrupt_mask(TWL6030_PWRON_INT_MASK, ++ REG_INT_MSK_LINE_A); ++ twl6030_interrupt_mask(TWL6030_PWRON_INT_MASK, ++ REG_INT_MSK_STS_A); ++ } ++ ++ return 0; ++} ++ + #ifdef CONFIG_OF +-static const struct of_device_id twl4030_pwrbutton_dt_match_table[] = { ++static const struct of_device_id twl_pwrbutton_dt_match_table[] = { + { .compatible = "ti,twl4030-pwrbutton" }, ++ { .compatible = "ti,twl6030-pwrbutton" }, + {}, + }; +-MODULE_DEVICE_TABLE(of, twl4030_pwrbutton_dt_match_table); ++MODULE_DEVICE_TABLE(of, twl_pwrbutton_dt_match_table); + #endif + +-static struct platform_driver twl4030_pwrbutton_driver = { +- .probe = twl4030_pwrbutton_probe, ++static struct platform_driver twl_pwrbutton_driver = { ++ .probe = twl_pwrbutton_probe, ++ .remove = twl_pwrbutton_remove, + .driver = { +- .name = "twl4030_pwrbutton", +- .of_match_table = of_match_ptr(twl4030_pwrbutton_dt_match_table), ++ .name = "twl_pwrbutton", ++ .of_match_table = of_match_ptr(twl_pwrbutton_dt_match_table), + }, + }; +-module_platform_driver(twl4030_pwrbutton_driver); ++module_platform_driver(twl_pwrbutton_driver); + +-MODULE_ALIAS("platform:twl4030_pwrbutton"); +-MODULE_DESCRIPTION("Triton2 Power Button"); ++MODULE_ALIAS("platform:twl_pwrbutton"); ++MODULE_DESCRIPTION("TWL Power Button"); + MODULE_LICENSE("GPL"); + MODULE_AUTHOR("Peter De Schrijver "); + MODULE_AUTHOR("Felipe Balbi "); +- +diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c +index 289b556de..04c0b036e 100644 +--- a/drivers/mfd/twl-core.c ++++ b/drivers/mfd/twl-core.c +@@ -832,13 +832,20 @@ add_children(struct twl4030_platform_data *pdata, unsigned irq_base, + return PTR_ERR(child); + } + +- if (IS_ENABLED(CONFIG_INPUT_TWL4030_PWRBUTTON) && twl_class_is_4030()) { +- child = add_child(TWL_MODULE_PM_MASTER, "twl4030_pwrbutton", ++ if (IS_ENABLED(CONFIG_INPUT_TWL_PWRBUTTON) && twl_class_is_4030()) { ++ child = add_child(TWL_MODULE_PM_MASTER, "twl_pwrbutton", + NULL, 0, true, irq_base + 8 + 0, 0); + if (IS_ERR(child)) + return PTR_ERR(child); + } + ++ if (IS_ENABLED(CONFIG_INPUT_TWL_PWRBUTTON) && twl_class_is_6030()) { ++ child = add_child(TWL_MODULE_PM_MASTER, "twl_pwrbutton", ++ NULL, 0, true, irq_base + 0, 0); ++ if (IS_ERR(child)) ++ return PTR_ERR(child); ++ } ++ + if (IS_ENABLED(CONFIG_MFD_TWL4030_AUDIO) && pdata->audio && + twl_class_is_4030()) { + child = add_child(TWL4030_MODULE_AUDIO_VOICE, "twl4030-audio", +diff --git a/include/linux/mfd/twl.h b/include/linux/mfd/twl.h +index 8871cc518..108138c99 100644 +--- a/include/linux/mfd/twl.h ++++ b/include/linux/mfd/twl.h +@@ -113,6 +113,7 @@ enum twl6030_module_ids { + #define REG_INT_MSK_STS_C 0x08 + + /* MASK INT REG GROUP A */ ++#define TWL6030_PWRON_INT_MASK 0x01 + #define TWL6030_PWR_INT_MASK 0x07 + #define TWL6030_RTC_INT_MASK 0x18 + #define TWL6030_HOTDIE_INT_MASK 0x20 diff --git a/device/community/linux-samsung-espresso3g/APKBUILD b/device/community/linux-samsung-espresso3g/APKBUILD index ab9991794..dcd3c7fbb 100644 --- a/device/community/linux-samsung-espresso3g/APKBUILD +++ b/device/community/linux-samsung-espresso3g/APKBUILD @@ -2,7 +2,7 @@ # Co-Maintainer: Antoni Aloy pkgname=linux-samsung-espresso3g pkgver=5.15.2 -pkgrel=2 +pkgrel=3 pkgdesc="Samsung Galaxy Tab 2 (7.0 inch) mainline kernel" arch="armv7" _carch="arm" @@ -23,6 +23,8 @@ source=" 00-add-espresso-dts.patch 02-CVE-2021-39685-USB-gadget-detect-too-big-endpoint-0-requests.patch 03-CVE-2021-39685-USB-gadget-zero-allocate-endpoint-0-buffers.patch + 04-Add-TWL6030-power-driver-with-minimal-support-for-power-off.patch + 05-Add-TWL6030-power-button-support-to-twl-pwrbutton.patch $_config " builddir="$srcdir/linux_openpvrsgx-$_commit" @@ -53,8 +55,10 @@ package() { sha512sums=" c1f1372afc303cabb55210c7c46a694eff3bc0d7871efee7a690488b782b0c2cb48dbccc43b454a7cf96cfea796397f621d338e791172a8d1f62b26b2e1d54cb linux-samsung-espresso3g-6ba3430a6fad45bf35f2634809e4f3a12f85cb89.tar.gz -c914516703fdb42f3b33ee3f449222a81c06b3c9a3dd4f9a24ad55a9b32cf0828bf557897157296a9e5edbe92a898cdd42d147b196162750010e1d087f80ab39 00-add-espresso-dts.patch +e3e6ecc15b477531cb06200dbe17d1a3f8ddf6c403b8a8ec78ed73b5b1497fbf3492f074ac9e44bd252d8e8fb311ee910113ac1890de93adee445de3a644ea33 00-add-espresso-dts.patch c83480686caa35c51bce654104082e51d2569850bbbdcdb8479fb756ffb7907aefce685b2cfa748bbed0da7b585be83a08d194d0ff315a070a5b5a07c8dbc1d2 02-CVE-2021-39685-USB-gadget-detect-too-big-endpoint-0-requests.patch 7b76e82bca21c9746bb37df2e840b43a0628a8a00b45ee43dd38ce742d7b99e30faf4bd11c99f1a20299b486885cbb9f62502400544a6a7e319292b97331581d 03-CVE-2021-39685-USB-gadget-zero-allocate-endpoint-0-buffers.patch -188175b358be4c44967961052fb5499d6a17ec98700506dbd020b84f5c939b70f8f7d1876587c6ff947ebf85ae33c0847cce5fc0c5086e42294cfbfb1df9b478 config-samsung-espresso3g.armv7 +a483b1a322f3fe47c7bb6514f34cca69ad1b806487596ffab69078acb6e83e99ed39ffb4d5b4ecd17035d118a75ce5bac6761b9e42d01608f1e6a53d59b27806 04-Add-TWL6030-power-driver-with-minimal-support-for-power-off.patch +b3d6114c5c60fc2820856c89ea6f09c369d857ae79a79f0eeb0f83f5401dc2253e11f7dac6869eb1095d3e0b3a68126246762e2f406ffae5b5ef0a60d5563bac 05-Add-TWL6030-power-button-support-to-twl-pwrbutton.patch +f5d1b1ae3a776b4f68914b0ba00bbce8e00122028eb1141ea57dbe8d6d652d9a407f13df3d36e553e21c4b2d576bb0f8978b396a7af4511fad9a321e0ffc38ed config-samsung-espresso3g.armv7 " diff --git a/device/community/linux-samsung-espresso3g/config-samsung-espresso3g.armv7 b/device/community/linux-samsung-espresso3g/config-samsung-espresso3g.armv7 index be3e12906..da2e882f6 100644 --- a/device/community/linux-samsung-espresso3g/config-samsung-espresso3g.armv7 +++ b/device/community/linux-samsung-espresso3g/config-samsung-espresso3g.armv7 @@ -2716,7 +2716,7 @@ CONFIG_INPUT_CPCAP_PWRBUTTON=m # CONFIG_INPUT_CM109 is not set # CONFIG_INPUT_REGULATOR_HAPTIC is not set CONFIG_INPUT_TPS65218_PWRBUTTON=m -CONFIG_INPUT_TWL4030_PWRBUTTON=m +CONFIG_INPUT_TWL_PWRBUTTON=m # CONFIG_INPUT_TWL4030_VIBRA is not set # CONFIG_INPUT_TWL6040_VIBRA is not set CONFIG_INPUT_UINPUT=y