~postmarketos/upstreaming

ARM: dts: qcom: msm8974: klte: Enable some hardware v1 PROPOSED

Iskren Chernev
Enable support for various hw found on the Samsung Galaxy S5:
- touchkey (the two buttons around the home button)
- touchscreen
- notification led
- wifi
- external SD card

Please note that for working wifi the correct firmware is needed. Check [1]
for links and locations.

Also note, that to actually run a mainline kernel on the klte, you'd need
to apply this patch [2]. Any feedback on getting this to run on pure
mainline are welcome.

[1] https://gitlab.com/postmarketOS/pmaports/-/blob/master/firmware/firmware-samsung-klte/APKBUILD
[2] https://gitlab.com/postmarketOS/linux-postmarketos/-/commit/765f55b248cd3b231af8431fe2f2aeca263b4e4b

Iskren Chernev (7):
  ARM: dts: qcom: msm8974-klte: Merge pinctrl nodes
  ARM: dts: qcom: msm8974-klte: Add support for touchkey
  ARM: dts: qcom: msm8974-klte: Add support for touchscreen
  ARM: dts: qcom: msm8974-klte: Add support for led
  ARM: dts: qcom: msm8974-klte: Add gpio expander chip
  ARM: dts: qcom: msm8974-klte: Add support for wifi
  ARM: dts: qcom: msm8974-klte: Add support for SD card

 .../boot/dts/qcom-msm8974-samsung-klte.dts    | 301 +++++++++++++++++-
 1 file changed, 292 insertions(+), 9 deletions(-)


base-commit: c28e58ee9dadc99f79cf16ca805221feddd432ad
--
2.27.0
Iskren Chernev
> Hi Iskren,
> 
> On Tue, Jun 30, 2020 at 05:09:05PM +0300, Iskren Chernev wrote:
> > Enable support for various hw found on the Samsung Galaxy S5:
> > - touchkey (the two buttons around the home button)
> > - touchscreen
> > - notification led
> > - wifi
> > - external SD card
> >
> > Please note that for working wifi the correct firmware is needed. Check [1]
> > for links and locations.
> >
> > Also note, that to actually run a mainline kernel on the klte, you'd need
> > to apply this patch [2]. Any feedback on getting this to run on pure
> > mainline are welcome.
> >
> > [1] https://gitlab.com/postmarketOS/pmaports/-/blob/master/firmware/firmware-samsung-klte/APKBUILD
> > [2] https://gitlab.com/postmarketOS/linux-postmarketos/-/commit/765f55b248cd3b231af8431fe2f2aeca263b4e4b
> 
> Good to see more msm8974 support upstream!
> 
> Regarding the second patch, that should only be needed in order to
> use the GPU on these devices.
For the klte, without this delay rpm init patch, the device reboots soon
after being booted. I tested with pure v5.8 and next-20200701 (both have
basic klte support, including usb ethernet for ssh). With the patch
applied, it works like a charm.

Note that there is no GPU enabled in this setup (unless I'm missing some
piece from the SOC dtsi).
Next
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~postmarketos/upstreaming/patches/11401/mbox | git am -3
Learn more about email & git
View this thread in the archives

[PATCH 1/7] ARM: dts: qcom: msm8974-klte: Merge pinctrl nodes Export this patch

Iskren Chernev
commit cd13c72c1853 ("ARM: dts: qcom: msm8974-klte: Add max77826 pmic
node") and commit 8bf7a360a92c ("ARM: dts: qcom: msm8974-klte: Add sdhci1
node") both added pinctrl node. This patch merges the two nodes.

Signed-off-by: Iskren Chernev <iskren.chernev@gmail.com>
---
 .../boot/dts/qcom-msm8974-samsung-klte.dts    | 22 +++++++++----------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
index d4dc98214225a..9520c6e7910ce 100644
--- a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
+++ b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
@@ -258,6 +258,16 @@ cmd-data {
				bias-pull-up;
			};
		};

		i2c6_pins: i2c6 {
			mux {
				pins = "gpio29", "gpio30";
				function = "blsp_i2c6";

				drive-strength = <2>;
				bias-disable;
			};
		};
	};

	sdhci@f9824900 {
@@ -298,18 +308,6 @@ phy@a {
		};
	};

	pinctrl@fd510000 {
		i2c6_pins: i2c6 {
			mux {
				pins = "gpio29", "gpio30";
				function = "blsp_i2c6";

				drive-strength = <2>;
				bias-disable;
			};
		};
	};

	i2c@f9928000 {
		status = "okay";

--
2.27.0

[PATCH 2/7] ARM: dts: qcom: msm8974-klte: Add support for touchkey Export this patch

Iskren Chernev
Add support for the touchkey found on the Samsung Galaxy S5. The
touchkey is responsible for handling the application and back buttons
found around the home button.

Signed-off-by: Iskren Chernev <iskren.chernev@gmail.com>
---
 .../boot/dts/qcom-msm8974-samsung-klte.dts    | 44 ++++++++++++++++++-
 1 file changed, 43 insertions(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
index 9520c6e7910ce..750e2f261139a 100644
--- a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
+++ b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
@@ -145,7 +145,7 @@ pma8084_l18: l18 {
					};

					pma8084_l19: l19 {
						regulator-min-microvolt = <2900000>;
						regulator-min-microvolt = <3300000>;
						regulator-max-microvolt = <3300000>;
					};

@@ -203,6 +203,31 @@ pma8084_l27: l27 {
		};
	};

	i2c-gpio-touchkey {
		compatible = "i2c-gpio";
		#address-cells = <1>;
		#size-cells = <0>;
		sda-gpios = <&msmgpio 95 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
		scl-gpios = <&msmgpio 96 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
		pinctrl-names = "default";
		pinctrl-0 = <&i2c_touchkey_pins>;

		touchkey@20 {
			compatible = "cypress,tm2-touchkey";
			reg = <0x20>;

			interrupt-parent = <&pma8084_gpios>;
			interrupts = <6 IRQ_TYPE_EDGE_FALLING>;
			pinctrl-names = "default";
			pinctrl-0 = <&touchkey_pin>;

			vcc-supply = <&max77826_ldo15>;
			vdd-supply = <&pma8084_l19>;

			linux,keycodes = <KEY_APPSELECT KEY_BACK>;
		};
	};

	/delete-node/ vreg-boost;
};

@@ -268,6 +293,15 @@ mux {
				bias-disable;
			};
		};

		i2c_touchkey_pins: i2c-touchkey {
			mux {
				pins = "gpio95", "gpio96";
				function = "gpio";
				input-enable;
				bias-pull-up;
			};
		};
	};

	sdhci@f9824900 {
@@ -418,6 +452,14 @@ gpio_keys_pin_a: gpio-keys-active {
				bias-pull-up;
				power-source = <PMA8084_GPIO_S4>;
			};

			touchkey_pin: touchkey-int-pin {
				pins = "gpio6";
				function = "normal";
				bias-disable;
				input-enable;
				power-source = <PMA8084_GPIO_S4>;
			};
		};
	};
};
-- 
2.27.0

[PATCH 3/7] ARM: dts: qcom: msm8974-klte: Add support for touchscreen Export this patch

Iskren Chernev
Add support for the touchscreen found on the Samsung Galaxy S5.

Signed-off-by: Iskren Chernev <iskren.chernev@gmail.com>
---
 .../boot/dts/qcom-msm8974-samsung-klte.dts    | 54 +++++++++++++++++++
 1 file changed, 54 insertions(+)

diff --git a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
index 750e2f261139a..085636f182d01 100644
--- a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
+++ b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
@@ -284,6 +284,16 @@ cmd-data {
			};
		};

		i2c2_pins: i2c2 {
			mux {
				pins = "gpio6", "gpio7";
				function = "blsp_i2c2";

				drive-strength = <2>;
				bias-disable;
			};
		};

		i2c6_pins: i2c6 {
			mux {
				pins = "gpio29", "gpio30";
@@ -342,6 +352,42 @@ phy@a {
		};
	};

	i2c@f9924000 {
		status = "okay";

		pinctrl-names = "default";
		pinctrl-0 = <&i2c2_pins>;

		touchscreen@20 {
			compatible = "syna,rmi4-i2c";
			reg = <0x20>;

			interrupt-parent = <&pma8084_gpios>;
			interrupts = <8 IRQ_TYPE_EDGE_FALLING>;

			vdd-supply = <&max77826_ldo13>;
			vio-supply = <&pma8084_lvs2>;

			pinctrl-names = "default";
			pinctrl-0 = <&touch_pin>;

			syna,startup-delay-ms = <100>;

			#address-cells = <1>;
			#size-cells = <0>;

			rmi4-f01@1 {
				reg = <0x1>;
				syna,nosleep-mode = <1>;
			};

			rmi4-f12@12 {
				reg = <0x12>;
				syna,sensor-type = <1>;
			};
		};
	};

	i2c@f9928000 {
		status = "okay";

@@ -460,6 +506,14 @@ touchkey_pin: touchkey-int-pin {
				input-enable;
				power-source = <PMA8084_GPIO_S4>;
			};

			touch_pin: touchscreen-int-pin {
				pins = "gpio8";
				function = "normal";
				bias-disable;
				input-enable;
				power-source = <PMA8084_GPIO_S4>;
			};
		};
	};
};
-- 
2.27.0

[PATCH 4/7] ARM: dts: qcom: msm8974-klte: Add support for led Export this patch

Iskren Chernev
The klte uses a Panasonic AN30259A LED controller for it's indicator
led.

Signed-off-by: Iskren Chernev <iskren.chernev@gmail.com>
---
 .../boot/dts/qcom-msm8974-samsung-klte.dts    | 48 +++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
index 085636f182d01..7b398da9b75ed 100644
--- a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
+++ b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
@@ -4,6 +4,7 @@
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
#include <dt-bindings/leds/common.h>

/ {
	model = "Samsung Galaxy S5";
@@ -228,6 +229,44 @@ touchkey@20 {
		};
	};

	i2c-gpio-led {
		compatible = "i2c-gpio";
		#address-cells = <1>;
		#size-cells = <0>;
		scl-gpios = <&msmgpio 121 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
		sda-gpios = <&msmgpio 120 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
		pinctrl-names = "default";
		pinctrl-0 = <&i2c_led_pins>;

		i2c-gpio,delay-us = <2>;

		led-controller@30 {
			compatible = "panasonic,an30259a";
			reg = <0x30>;

			#address-cells = <1>;
			#size-cells = <0>;

			led@1 {
				reg = <1>;
				function = LED_FUNCTION_STATUS;
				color = <LED_COLOR_ID_RED>;
			};

			led@2 {
				reg = <2>;
				function = LED_FUNCTION_STATUS;
				color = <LED_COLOR_ID_GREEN>;
			};

			led@3 {
				reg = <3>;
				function = LED_FUNCTION_STATUS;
				color = <LED_COLOR_ID_BLUE>;
			};
		};
	};

	/delete-node/ vreg-boost;
};

@@ -312,6 +351,15 @@ mux {
				bias-pull-up;
			};
		};

		i2c_led_pins: i2c-led {
			mux {
				pins = "gpio120", "gpio121";
				function = "gpio";
				input-enable;
				bias-pull-down;
			};
		};
	};

	sdhci@f9824900 {
-- 
2.27.0

[PATCH 5/7] ARM: dts: qcom: msm8974-klte: Add gpio expander chip Export this patch

Iskren Chernev
The Samsung Galaxy S5 has a GPIO Expander chip, the PCAL6416A with 16
ports on a i2c bus. These pins are used for WiFi, NFC, IR among other
things.

Signed-off-by: Iskren Chernev <iskren.chernev@gmail.com>
---
 .../boot/dts/qcom-msm8974-samsung-klte.dts    | 29 +++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

diff --git a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
index 7b398da9b75ed..29099b83b231d 100644
--- a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
+++ b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
@@ -236,10 +236,25 @@ i2c-gpio-led {
		scl-gpios = <&msmgpio 121 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
		sda-gpios = <&msmgpio 120 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
		pinctrl-names = "default";
		pinctrl-0 = <&i2c_led_pins>;
		pinctrl-0 = <&i2c_led_gpioex_pins>;

		i2c-gpio,delay-us = <2>;

		gpio_expander: gpio@20 {
			compatible = "nxp,pcal6416";
			reg = <0x20>;

			gpio-controller;
			#gpio-cells = <2>;

			vcc-supply = <&pma8084_s4>;

			pinctrl-names = "default";
			pinctrl-0 = <&gpioex_pin>;

			reset-gpios = <&msmgpio 145 GPIO_ACTIVE_LOW>;
		};

		led-controller@30 {
			compatible = "panasonic,an30259a";
			reg = <0x30>;
@@ -352,7 +367,7 @@ mux {
			};
		};

		i2c_led_pins: i2c-led {
		i2c_led_gpioex_pins: i2c-led-gpioex {
			mux {
				pins = "gpio120", "gpio121";
				function = "gpio";
@@ -360,6 +375,16 @@ mux {
				bias-pull-down;
			};
		};

		gpioex_pin: gpioex {
			res {
				pins = "gpio145";
				function = "gpio";

				bias-pull-up;
				drive-strength = <2>;
			};
		};
	};

	sdhci@f9824900 {
-- 
2.27.0

[PATCH 6/7] ARM: dts: qcom: msm8974-klte: Add support for wifi Export this patch

Iskren Chernev
The Samsung Galaxy S5 (klte), uses a Broadcom 4354 Chip connected on the
SDIO bus. The chip also requires a corresponding firmware + txt file[1].

[1] https://gitlab.com/postmarketOS/pmaports/-/blob/master/firmware/firmware-samsung-klte/APKBUILD

Signed-off-by: Iskren Chernev <iskren.chernev@gmail.com>
---
 .../boot/dts/qcom-msm8974-samsung-klte.dts    | 74 +++++++++++++++++++
 1 file changed, 74 insertions(+)

diff --git a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
index 29099b83b231d..989447beb4319 100644
--- a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
+++ b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
@@ -282,6 +282,17 @@ led@3 {
		};
	};

	vreg_wlan: wlan-regulator {
		compatible = "regulator-fixed";

		regulator-name = "wl-reg";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

		gpio = <&gpio_expander 8 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	/delete-node/ vreg-boost;
};

@@ -338,6 +349,20 @@ cmd-data {
			};
		};

		sdhc3_pin_a: sdhc3-pin-active {
			clk {
				pins = "sdc2_clk";
				drive-strength = <6>;
				bias-disable;
			};

			cmd-data {
				pins = "sdc2_cmd", "sdc2_data";
				drive-strength = <6>;
				bias-pull-up;
			};
		};

		i2c2_pins: i2c2 {
			mux {
				pins = "gpio6", "gpio7";
@@ -385,6 +410,16 @@ res {
				drive-strength = <2>;
			};
		};

		wifi_pin: wifi {
			int {
				pins = "gpio92";
				function = "gpio";

				input-enable;
				bias-pull-down;
			};
		};
	};

	sdhci@f9824900 {
@@ -400,6 +435,36 @@ sdhci@f9824900 {
		pinctrl-0 = <&sdhc1_pin_a>;
	};

	sdhci@f98a4900 {
		status = "okay";

		#address-cells = <1>;
		#size-cells = <0>;

		max-frequency = <100000000>;

		pinctrl-names = "default";
		pinctrl-0 = <&sdhc3_pin_a>;

		vmmc-supply = <&vreg_wlan>;
		vqmmc-supply = <&pma8084_s4>;

		bus-width = <4>;
		non-removable;

		wifi@1 {
			reg = <1>;
			compatible = "brcm,bcm4329-fmac";

			interrupt-parent = <&msmgpio>;
			interrupts = <92 IRQ_TYPE_LEVEL_HIGH>;
			interrupt-names = "host-wake";

			pinctrl-names = "default";
			pinctrl-0 = <&wlan_sleep_clk_pin &wifi_pin>;
		};
	};

	usb@f9a55000 {
		status = "ok";

@@ -587,6 +652,15 @@ touch_pin: touchscreen-int-pin {
				input-enable;
				power-source = <PMA8084_GPIO_S4>;
			};

			wlan_sleep_clk_pin: wlan-sleep-clk-pin {
				pins = "gpio16";
				function = "func2";

				output-high;
				power-source = <PMA8084_GPIO_S4>;
				qcom,drive-strength = <PMIC_GPIO_STRENGTH_HIGH>;
			};
		};
	};
};
-- 
2.27.0

[PATCH 7/7] ARM: dts: qcom: msm8974-klte: Add support for SD card Export this patch

Iskren Chernev
The Samsung Galaxy S5 (klte), has 3 SDHCI nodes used for internal
storage, WiFi, external SD card slot. The external SD card slot is
similar to the internal storage.

The device has support for CD (card detect), but if enabled, the card is
not initialized properly if present during startup. That is why CD is
disabled and polling is used instead. Related thread [1]

[1] https://lore.kernel.org/linux-mmc/491cfef4-4a97-b6e8-0f41-d44e1c73eea4@gmail.com/

Signed-off-by: Iskren Chernev <iskren.chernev@gmail.com>
---
 .../boot/dts/qcom-msm8974-samsung-klte.dts    | 44 ++++++++++++++++++-
 1 file changed, 43 insertions(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
index 989447beb4319..b0899107f3ced 100644
--- a/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
+++ b/arch/arm/boot/dts/qcom-msm8974-samsung-klte.dts
@@ -12,6 +12,8 @@ / {

	aliases {
		serial0 = &blsp1_uart1;
		sdhc1 = &sdhc_1; /* SDC1 eMMC slot */
		sdhc2 = &sdhc_2; /* SDC2 SD card slot */
	};

	chosen {
@@ -161,6 +163,9 @@ pma8084_l20: l20 {
					pma8084_l21: l21 {
						regulator-min-microvolt = <2950000>;
						regulator-max-microvolt = <2950000>;

						regulator-allow-set-load;
						regulator-system-load = <200000>;
					};

					pma8084_l22: l22 {
@@ -349,6 +354,24 @@ cmd-data {
			};
		};

		sdhc2_pin_a: sdhc2-pin-active {
			clk-cmd-data {
				pins = "gpio35", "gpio36", "gpio37", "gpio38",
					"gpio39", "gpio40";
				function = "sdc3";
				drive-strength = <8>;
				bias-disable;
			};
		};

		sdhc2_cd_pin: sdhc2-cd {
			pins = "gpio62";
			function = "gpio";

			drive-strength = <2>;
			bias-disable;
		};

		sdhc3_pin_a: sdhc3-pin-active {
			clk {
				pins = "sdc2_clk";
@@ -422,7 +445,7 @@ int {
		};
	};

	sdhci@f9824900 {
	sdhc_1: sdhci@f9824900 {
		status = "ok";

		vmmc-supply = <&pma8084_l20>;
@@ -435,6 +458,25 @@ sdhci@f9824900 {
		pinctrl-0 = <&sdhc1_pin_a>;
	};

	sdhc_2: sdhci@f9864900 {
		status = "ok";

		max-frequency = <100000000>;

		vmmc-supply = <&pma8084_l21>;
		vqmmc-supply = <&pma8084_l13>;

		bus-width = <4>;

		/* cd-gpio is intentionally disabled. If enabled, an SD card
		 * present during boot is not initialized correctly. Without
		 * cd-gpios the driver resorts to polling, so hotplug works.
		 */
		pinctrl-names = "default";
		pinctrl-0 = <&sdhc2_pin_a /* &sdhc2_cd_pin */>;
		// cd-gpios = <&msmgpio 62 GPIO_ACTIVE_LOW>;
	};

	sdhci@f98a4900 {
		status = "okay";

--
2.27.0