diff mbox series

[2/5] ARM: dts: add Samsung's exynos4412-based p4note boards

Message ID 20201031175836.47745-3-martin.juecker@gmail.com (mailing list archive)
State Changes Requested
Headers show
Series add exynos4412-based p4note device family support | expand

Commit Message

Martin Jücker Oct. 31, 2020, 5:58 p.m. UTC
The p4note family contains a couple of variants of the Galaxy Note 10.1
tablet with mainly different modems. The GT-N8010/GT-N8013 is the wifi
only version.

Signed-off-by: Martin Jücker <martin.juecker@gmail.com>
---
 arch/arm/boot/dts/Makefile                    |    1 +
 arch/arm/boot/dts/exynos4412-p4note-n8010.dts |   16 +
 arch/arm/boot/dts/exynos4412-p4note.dtsi      | 1128 +++++++++++++++++
 3 files changed, 1145 insertions(+)
 create mode 100644 arch/arm/boot/dts/exynos4412-p4note-n8010.dts
 create mode 100644 arch/arm/boot/dts/exynos4412-p4note.dtsi

Comments

Krzysztof Kozlowski Nov. 2, 2020, 7:18 p.m. UTC | #1
On Sat, Oct 31, 2020 at 06:58:34PM +0100, Martin Jücker wrote:
> The p4note family contains a couple of variants of the Galaxy Note 10.1
> tablet with mainly different modems. The GT-N8010/GT-N8013 is the wifi
> only version.

The subject is v1. Did you send correct patch?

> 
> Signed-off-by: Martin Jücker <martin.juecker@gmail.com>
> ---
>  arch/arm/boot/dts/Makefile                    |    1 +
>  arch/arm/boot/dts/exynos4412-p4note-n8010.dts |   16 +
>  arch/arm/boot/dts/exynos4412-p4note.dtsi      | 1128 +++++++++++++++++
>  3 files changed, 1145 insertions(+)
>  create mode 100644 arch/arm/boot/dts/exynos4412-p4note-n8010.dts
>  create mode 100644 arch/arm/boot/dts/exynos4412-p4note.dtsi
> 
> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> index 4572db3fa5ae..951853e55edb 100644
> --- a/arch/arm/boot/dts/Makefile
> +++ b/arch/arm/boot/dts/Makefile
> @@ -195,6 +195,7 @@ dtb-$(CONFIG_ARCH_EXYNOS4) += \
>  	exynos4412-odroidx.dtb \
>  	exynos4412-odroidx2.dtb \
>  	exynos4412-origen.dtb \
> +	exynos4412-p4note-n8010.dtb \
>  	exynos4412-smdk4412.dtb \
>  	exynos4412-tiny4412.dtb \
>  	exynos4412-trats2.dtb
> diff --git a/arch/arm/boot/dts/exynos4412-p4note-n8010.dts b/arch/arm/boot/dts/exynos4412-p4note-n8010.dts
> new file mode 100644
> index 000000000000..f99358750e01
> --- /dev/null
> +++ b/arch/arm/boot/dts/exynos4412-p4note-n8010.dts
> @@ -0,0 +1,16 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Samsung's Galaxy Note 10.1 - N801x (wifi only version)
> + *
> + * Copyright (c) 2020 Martin Jücker <martin.juecker@gmail.com>
> + */
> +
> +/dts-v1/;
> +#include "exynos4412-p4note.dtsi"
> +
> +/ {
> +	model = "Samsung Galaxy Note 10.1 (GT-N8010/N8013) based on Exynos4412";
> +	compatible = "samsung,n8010", "samsung,p4note", "samsung,exynos4412", "samsung,exynos4";
> +
> +	/* this is the base variant without any kind of modem */
> +};
> diff --git a/arch/arm/boot/dts/exynos4412-p4note.dtsi b/arch/arm/boot/dts/exynos4412-p4note.dtsi
> new file mode 100644
> index 000000000000..15b6acbbecb2
> --- /dev/null
> +++ b/arch/arm/boot/dts/exynos4412-p4note.dtsi
> @@ -0,0 +1,1128 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Samsung's Exynos4412 based p4note device family base DT
> + *
> + * Copyright (c) 2020 Martin Jücker <martin.juecker@gmail.com>

Multiple parts of this file look like copied from the existing ones. Few
comments are the same. The v1 duplicated even few minor issues like not
that good naming of nodes.  It looks like it is not only based on
existing sources, but uses parts of them directly.  If it is true, then
include the copyright of original work as well.
https://www.gnu.org/prep/maintain/html_node/Copyright-Notices.html


> + */
> +
> +/dts-v1/;
> +#include "exynos4412.dtsi"
> +#include "exynos4412-ppmu-common.dtsi"
> +
> +#include <dt-bindings/clock/maxim,max77686.h>
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/linux-event-codes.h>
> +#include <dt-bindings/interrupt-controller/irq.h>
> +#include <dt-bindings/pinctrl/samsung.h>
> +
> +/ {
> +	compatible = "samsung,p4note", "samsung,exynos4412", "samsung,exynos4";
> +
> +	memory@40000000 {
> +		device_type = "memory";
> +		reg = <0x40000000 0x80000000>;
> +	};
> +
> +	chosen {
> +		stdout-path = &serial_2;
> +	};
> +
> +	firmware@204f000 {
> +		compatible = "samsung,secure-firmware";
> +		reg = <0x0204F000 0x1000>;
> +	};
> +
> +	fixed-rate-clocks {
> +		xxti {
> +			compatible = "samsung,clock-xxti";
> +			clock-frequency = <0>;
> +		};
> +
> +		xusbxti {
> +			compatible = "samsung,clock-xusbxti";
> +			clock-frequency = <24000000>;
> +		};
> +	};
> +
> +	gpio-keys {
> +		compatible = "gpio-keys";
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&gpio_keys>;
> +
> +		key-down {
> +			gpios = <&gpx2 2 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_VOLUMEDOWN>;
> +			label = "volume down";
> +			debounce-interval = <10>;
> +		};
> +
> +		key-up {
> +			gpios = <&gpx3 3 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_VOLUMEUP>;
> +			label = "volume up";
> +			debounce-interval = <10>;
> +		};
> +
> +		key-power {
> +			gpios = <&gpx2 7 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_POWER>;
> +			label = "power";
> +			debounce-interval = <10>;
> +			wakeup-source;
> +		};
> +	};
> +
> +	voltage-regulator-1 {
> +		compatible = "regulator-fixed";
> +		regulator-name = "TSP_LDO1";
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&tsp_reg_gpio_1>;
> +		gpios = <&gpm4 5 GPIO_ACTIVE_HIGH>;
> +		enable-active-high;
> +		regulator-always-on;
> +	};
> +
> +	voltage-regulator-2 {
> +		compatible = "regulator-fixed";
> +		regulator-name = "TSP_LDO2";
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&tsp_reg_gpio_2>;
> +		gpios = <&gpb 5 GPIO_ACTIVE_HIGH>;
> +		enable-active-high;
> +		regulator-always-on;
> +	};
> +
> +	voltage-regulator-3 {
> +		compatible = "regulator-fixed";
> +		regulator-name = "TSP_LDO3";
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&tsp_reg_gpio_3>;
> +		gpios = <&gpb 7 GPIO_ACTIVE_HIGH>;
> +		startup-delay-us = <20000>;
> +		enable-active-high;
> +		regulator-always-on;
> +	};
> +
> +	wlan_pwrseq: sdhci3-pwrseq {
> +		compatible = "mmc-pwrseq-simple";
> +		reset-gpios = <&gpm3 5 GPIO_ACTIVE_LOW>;
> +		pinctrl-0 = <&wifi_reset>;
> +		pinctrl-names = "default";
> +		clocks = <&max77686 MAX77686_CLK_PMIC>;
> +		clock-names = "ext_clock";
> +	};
> +
> +	i2c-gpio-1 {
> +		compatible = "i2c-gpio";
> +		sda-gpios = <&gpy2 4 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		scl-gpios = <&gpy2 5 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		i2c-gpio,delay-us = <2>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		magnetometer@c {
> +			compatible = "asahi-kasei,ak8975";
> +			reg = <0x0c>;
> +			pinctrl-0 = <&ak8975_irq>;
> +			pinctrl-names = "default";
> +			interrupt-parent = <&gpm4>;
> +			interrupts = <7 IRQ_TYPE_EDGE_RISING>;
> +		};
> +	};
> +
> +	i2c-gpio-2 {
> +		compatible = "i2c-gpio";
> +		sda-gpios = <&gpy0 2 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		scl-gpios = <&gpy0 3 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		i2c-gpio,delay-us = <2>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		fuel-gauge@36 {
> +			compatible = "maxim,max17042";
> +			reg = <0x36>;
> +			pinctrl-0 = <&fuel_alert_irq>;
> +			pinctrl-names = "default";
> +			interrupt-parent = <&gpx2>;
> +			interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
> +			maxim,rsns-microohm = <10000>;
> +			maxim,over-heat-temp = <600>;
> +			maxim,over-volt = <4300>;
> +		};
> +	};
> +
> +	i2c-gpio-3 {
> +		compatible = "i2c-gpio";
> +		sda-gpios = <&gpm4 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		scl-gpios = <&gpm4 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +		i2c-gpio,delay-us = <5>;
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		adc@41 {
> +			compatible = "st,stmpe811";
> +			reg = <0x41>;
> +			pinctrl-0 = <&stmpe_adc_irq>;
> +			pinctrl-names = "default";
> +			interrupt-parent = <&gpx0>;
> +			interrupts = <1 IRQ_TYPE_LEVEL_LOW>;
> +			interrupt-controller;
> +			irq-trigger = <0x1>;
> +			st,adc-freq = <3>;
> +			st,mod-12b = <1>;
> +			st,ref-sel = <0>;
> +			st,sample-time = <3>;
> +
> +			stmpe_adc {
> +				compatible = "st,stmpe-adc";
> +				#io-channel-cells = <1>;
> +				st,norequest-mask = <0x2F>;
> +			};
> +		};
> +	};
> +};
> +
> +&adc {
> +	vdd-supply = <&ldo3_reg>;
> +	/* not verified */
> +	status = "okay";
> +};
> +
> +&bus_dmc {
> +	devfreq-events = <&ppmu_dmc0_3>, <&ppmu_dmc1_3>;
> +	vdd-supply = <&buck1_reg>;
> +	status = "okay";
> +};
> +
> +&bus_acp {
> +	devfreq = <&bus_dmc>;
> +	status = "okay";
> +};
> +
> +&bus_c2c {
> +	devfreq = <&bus_dmc>;
> +	status = "okay";
> +};
> +
> +&bus_leftbus {
> +	devfreq-events = <&ppmu_leftbus_3>, <&ppmu_rightbus_3>;
> +	vdd-supply = <&buck3_reg>;
> +	status = "okay";
> +};
> +
> +&bus_rightbus {
> +	devfreq = <&bus_leftbus>;
> +	status = "okay";
> +};
> +
> +&bus_display {
> +	devfreq = <&bus_leftbus>;
> +	status = "okay";
> +};
> +
> +&bus_fsys {
> +	devfreq = <&bus_leftbus>;
> +	status = "okay";
> +};
> +
> +&bus_peri {
> +	devfreq = <&bus_leftbus>;
> +	status = "okay";
> +};
> +
> +&bus_mfc {
> +	devfreq = <&bus_leftbus>;
> +	status = "okay";
> +};
> +
> +&cpu0 {
> +	cpu0-supply = <&buck2_reg>;
> +};
> +
> +&cpu_thermal {
> +	cooling-maps {
> +		map0 {
> +			/* Corresponds to 800MHz at freq_table */
> +			cooling-device = <&cpu0 7 7>, <&cpu1 7 7>, <&cpu2 7 7>, <&cpu3 7 7>;
> +		};
> +		map1 {
> +			/* Corresponds to 200MHz at freq_table */
> +			cooling-device = <&cpu0 13 13>, <&cpu1 13 13>, <&cpu2 13 13>, <&cpu3 13 13>;

This is too long. Please split it at 80 with indentation of next line
starting at < from the previous one.


> +		};
> +	};
> +};
> +
> +&exynos_usbphy {
> +	status = "okay";
> +};
> +
> +&fimd {
> +	pinctrl-0 = <&lcd_clk &lcd_data24 &pwm1_out>;
> +	pinctrl-names = "default";
> +	status = "okay";
> +
> +	display-timings {
> +		timing0 {
> +			clock-frequency = <66666666>;
> +			hactive = <1280>;
> +			vactive = <800>;
> +			hfront-porch = <18>;
> +			hback-porch = <36>;
> +			hsync-len = <16>;
> +			vback-porch = <16>;
> +			vfront-porch = <4>;
> +			vsync-len = <3>;
> +			hsync-active = <1>;
> +		};
> +	};

What happened with Marek's comment about this?

Best regards,
Krzysztof
Martin Jücker Nov. 2, 2020, 9:21 p.m. UTC | #2
On Mon, Nov 02, 2020 at 08:18:45PM +0100, Krzysztof Kozlowski wrote:
> On Sat, Oct 31, 2020 at 06:58:34PM +0100, Martin Jücker wrote:
> > The p4note family contains a couple of variants of the Galaxy Note 10.1
> > tablet with mainly different modems. The GT-N8010/GT-N8013 is the wifi
> > only version.
> 
> The subject is v1. Did you send correct patch?

I probably messed up with git send-email here. I need some more time to
get used to it. The patch is indeed v2.

> 
> > 
> > Signed-off-by: Martin Jücker <martin.juecker@gmail.com>
> > ---
> >  arch/arm/boot/dts/Makefile                    |    1 +
> >  arch/arm/boot/dts/exynos4412-p4note-n8010.dts |   16 +
> >  arch/arm/boot/dts/exynos4412-p4note.dtsi      | 1128 +++++++++++++++++
> >  3 files changed, 1145 insertions(+)
> >  create mode 100644 arch/arm/boot/dts/exynos4412-p4note-n8010.dts
> >  create mode 100644 arch/arm/boot/dts/exynos4412-p4note.dtsi
> > 
> > diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> > index 4572db3fa5ae..951853e55edb 100644
> > --- a/arch/arm/boot/dts/Makefile
> > +++ b/arch/arm/boot/dts/Makefile
> > @@ -195,6 +195,7 @@ dtb-$(CONFIG_ARCH_EXYNOS4) += \
> >  	exynos4412-odroidx.dtb \
> >  	exynos4412-odroidx2.dtb \
> >  	exynos4412-origen.dtb \
> > +	exynos4412-p4note-n8010.dtb \
> >  	exynos4412-smdk4412.dtb \
> >  	exynos4412-tiny4412.dtb \
> >  	exynos4412-trats2.dtb
> > diff --git a/arch/arm/boot/dts/exynos4412-p4note-n8010.dts b/arch/arm/boot/dts/exynos4412-p4note-n8010.dts
> > new file mode 100644
> > index 000000000000..f99358750e01
> > --- /dev/null
> > +++ b/arch/arm/boot/dts/exynos4412-p4note-n8010.dts
> > @@ -0,0 +1,16 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * Samsung's Galaxy Note 10.1 - N801x (wifi only version)
> > + *
> > + * Copyright (c) 2020 Martin Jücker <martin.juecker@gmail.com>
> > + */
> > +
> > +/dts-v1/;
> > +#include "exynos4412-p4note.dtsi"
> > +
> > +/ {
> > +	model = "Samsung Galaxy Note 10.1 (GT-N8010/N8013) based on Exynos4412";
> > +	compatible = "samsung,n8010", "samsung,p4note", "samsung,exynos4412", "samsung,exynos4";
> > +
> > +	/* this is the base variant without any kind of modem */
> > +};
> > diff --git a/arch/arm/boot/dts/exynos4412-p4note.dtsi b/arch/arm/boot/dts/exynos4412-p4note.dtsi
> > new file mode 100644
> > index 000000000000..15b6acbbecb2
> > --- /dev/null
> > +++ b/arch/arm/boot/dts/exynos4412-p4note.dtsi
> > @@ -0,0 +1,1128 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * Samsung's Exynos4412 based p4note device family base DT
> > + *
> > + * Copyright (c) 2020 Martin Jücker <martin.juecker@gmail.com>
> 
> Multiple parts of this file look like copied from the existing ones. Few
> comments are the same. The v1 duplicated even few minor issues like not
> that good naming of nodes.  It looks like it is not only based on
> existing sources, but uses parts of them directly.  If it is true, then
> include the copyright of original work as well.
> https://www.gnu.org/prep/maintain/html_node/Copyright-Notices.html
> 

I had a look through multiple files and ended up with a mix of copying
and writing nodes myself. Most if not all of the copying is from the
midas dt, is it enough to add a note that this file is based on the
midas dt or should I go with the same approach like midas and only add
the samsung copyright here? I don't care too much what's in the header.

> 
> > + */
> > +
> > +/dts-v1/;
> > +#include "exynos4412.dtsi"
> > +#include "exynos4412-ppmu-common.dtsi"
> > +
> > +#include <dt-bindings/clock/maxim,max77686.h>
> > +#include <dt-bindings/gpio/gpio.h>
> > +#include <dt-bindings/input/linux-event-codes.h>
> > +#include <dt-bindings/interrupt-controller/irq.h>
> > +#include <dt-bindings/pinctrl/samsung.h>
> > +
> > +/ {
> > +	compatible = "samsung,p4note", "samsung,exynos4412", "samsung,exynos4";
> > +
> > +	memory@40000000 {
> > +		device_type = "memory";
> > +		reg = <0x40000000 0x80000000>;
> > +	};
> > +
> > +	chosen {
> > +		stdout-path = &serial_2;
> > +	};
> > +
> > +	firmware@204f000 {
> > +		compatible = "samsung,secure-firmware";
> > +		reg = <0x0204F000 0x1000>;
> > +	};
> > +
> > +	fixed-rate-clocks {
> > +		xxti {
> > +			compatible = "samsung,clock-xxti";
> > +			clock-frequency = <0>;
> > +		};
> > +
> > +		xusbxti {
> > +			compatible = "samsung,clock-xusbxti";
> > +			clock-frequency = <24000000>;
> > +		};
> > +	};
> > +
> > +	gpio-keys {
> > +		compatible = "gpio-keys";
> > +		pinctrl-names = "default";
> > +		pinctrl-0 = <&gpio_keys>;
> > +
> > +		key-down {
> > +			gpios = <&gpx2 2 GPIO_ACTIVE_LOW>;
> > +			linux,code = <KEY_VOLUMEDOWN>;
> > +			label = "volume down";
> > +			debounce-interval = <10>;
> > +		};
> > +
> > +		key-up {
> > +			gpios = <&gpx3 3 GPIO_ACTIVE_LOW>;
> > +			linux,code = <KEY_VOLUMEUP>;
> > +			label = "volume up";
> > +			debounce-interval = <10>;
> > +		};
> > +
> > +		key-power {
> > +			gpios = <&gpx2 7 GPIO_ACTIVE_LOW>;
> > +			linux,code = <KEY_POWER>;
> > +			label = "power";
> > +			debounce-interval = <10>;
> > +			wakeup-source;
> > +		};
> > +	};
> > +
> > +	voltage-regulator-1 {
> > +		compatible = "regulator-fixed";
> > +		regulator-name = "TSP_LDO1";
> > +		pinctrl-names = "default";
> > +		pinctrl-0 = <&tsp_reg_gpio_1>;
> > +		gpios = <&gpm4 5 GPIO_ACTIVE_HIGH>;
> > +		enable-active-high;
> > +		regulator-always-on;
> > +	};
> > +
> > +	voltage-regulator-2 {
> > +		compatible = "regulator-fixed";
> > +		regulator-name = "TSP_LDO2";
> > +		pinctrl-names = "default";
> > +		pinctrl-0 = <&tsp_reg_gpio_2>;
> > +		gpios = <&gpb 5 GPIO_ACTIVE_HIGH>;
> > +		enable-active-high;
> > +		regulator-always-on;
> > +	};
> > +
> > +	voltage-regulator-3 {
> > +		compatible = "regulator-fixed";
> > +		regulator-name = "TSP_LDO3";
> > +		pinctrl-names = "default";
> > +		pinctrl-0 = <&tsp_reg_gpio_3>;
> > +		gpios = <&gpb 7 GPIO_ACTIVE_HIGH>;
> > +		startup-delay-us = <20000>;
> > +		enable-active-high;
> > +		regulator-always-on;
> > +	};
> > +
> > +	wlan_pwrseq: sdhci3-pwrseq {
> > +		compatible = "mmc-pwrseq-simple";
> > +		reset-gpios = <&gpm3 5 GPIO_ACTIVE_LOW>;
> > +		pinctrl-0 = <&wifi_reset>;
> > +		pinctrl-names = "default";
> > +		clocks = <&max77686 MAX77686_CLK_PMIC>;
> > +		clock-names = "ext_clock";
> > +	};
> > +
> > +	i2c-gpio-1 {
> > +		compatible = "i2c-gpio";
> > +		sda-gpios = <&gpy2 4 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> > +		scl-gpios = <&gpy2 5 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> > +		i2c-gpio,delay-us = <2>;
> > +		#address-cells = <1>;
> > +		#size-cells = <0>;
> > +
> > +		magnetometer@c {
> > +			compatible = "asahi-kasei,ak8975";
> > +			reg = <0x0c>;
> > +			pinctrl-0 = <&ak8975_irq>;
> > +			pinctrl-names = "default";
> > +			interrupt-parent = <&gpm4>;
> > +			interrupts = <7 IRQ_TYPE_EDGE_RISING>;
> > +		};
> > +	};
> > +
> > +	i2c-gpio-2 {
> > +		compatible = "i2c-gpio";
> > +		sda-gpios = <&gpy0 2 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> > +		scl-gpios = <&gpy0 3 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> > +		i2c-gpio,delay-us = <2>;
> > +		#address-cells = <1>;
> > +		#size-cells = <0>;
> > +
> > +		fuel-gauge@36 {
> > +			compatible = "maxim,max17042";
> > +			reg = <0x36>;
> > +			pinctrl-0 = <&fuel_alert_irq>;
> > +			pinctrl-names = "default";
> > +			interrupt-parent = <&gpx2>;
> > +			interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
> > +			maxim,rsns-microohm = <10000>;
> > +			maxim,over-heat-temp = <600>;
> > +			maxim,over-volt = <4300>;
> > +		};
> > +	};
> > +
> > +	i2c-gpio-3 {
> > +		compatible = "i2c-gpio";
> > +		sda-gpios = <&gpm4 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> > +		scl-gpios = <&gpm4 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> > +		i2c-gpio,delay-us = <5>;
> > +		#address-cells = <1>;
> > +		#size-cells = <0>;
> > +
> > +		adc@41 {
> > +			compatible = "st,stmpe811";
> > +			reg = <0x41>;
> > +			pinctrl-0 = <&stmpe_adc_irq>;
> > +			pinctrl-names = "default";
> > +			interrupt-parent = <&gpx0>;
> > +			interrupts = <1 IRQ_TYPE_LEVEL_LOW>;
> > +			interrupt-controller;
> > +			irq-trigger = <0x1>;
> > +			st,adc-freq = <3>;
> > +			st,mod-12b = <1>;
> > +			st,ref-sel = <0>;
> > +			st,sample-time = <3>;
> > +
> > +			stmpe_adc {
> > +				compatible = "st,stmpe-adc";
> > +				#io-channel-cells = <1>;
> > +				st,norequest-mask = <0x2F>;
> > +			};
> > +		};
> > +	};
> > +};
> > +
> > +&adc {
> > +	vdd-supply = <&ldo3_reg>;
> > +	/* not verified */
> > +	status = "okay";
> > +};
> > +
> > +&bus_dmc {
> > +	devfreq-events = <&ppmu_dmc0_3>, <&ppmu_dmc1_3>;
> > +	vdd-supply = <&buck1_reg>;
> > +	status = "okay";
> > +};
> > +
> > +&bus_acp {
> > +	devfreq = <&bus_dmc>;
> > +	status = "okay";
> > +};
> > +
> > +&bus_c2c {
> > +	devfreq = <&bus_dmc>;
> > +	status = "okay";
> > +};
> > +
> > +&bus_leftbus {
> > +	devfreq-events = <&ppmu_leftbus_3>, <&ppmu_rightbus_3>;
> > +	vdd-supply = <&buck3_reg>;
> > +	status = "okay";
> > +};
> > +
> > +&bus_rightbus {
> > +	devfreq = <&bus_leftbus>;
> > +	status = "okay";
> > +};
> > +
> > +&bus_display {
> > +	devfreq = <&bus_leftbus>;
> > +	status = "okay";
> > +};
> > +
> > +&bus_fsys {
> > +	devfreq = <&bus_leftbus>;
> > +	status = "okay";
> > +};
> > +
> > +&bus_peri {
> > +	devfreq = <&bus_leftbus>;
> > +	status = "okay";
> > +};
> > +
> > +&bus_mfc {
> > +	devfreq = <&bus_leftbus>;
> > +	status = "okay";
> > +};
> > +
> > +&cpu0 {
> > +	cpu0-supply = <&buck2_reg>;
> > +};
> > +
> > +&cpu_thermal {
> > +	cooling-maps {
> > +		map0 {
> > +			/* Corresponds to 800MHz at freq_table */
> > +			cooling-device = <&cpu0 7 7>, <&cpu1 7 7>, <&cpu2 7 7>, <&cpu3 7 7>;
> > +		};
> > +		map1 {
> > +			/* Corresponds to 200MHz at freq_table */
> > +			cooling-device = <&cpu0 13 13>, <&cpu1 13 13>, <&cpu2 13 13>, <&cpu3 13 13>;
> 
> This is too long. Please split it at 80 with indentation of next line
> starting at < from the previous one.
> 

Okay

> 
> > +		};
> > +	};
> > +};
> > +
> > +&exynos_usbphy {
> > +	status = "okay";
> > +};
> > +
> > +&fimd {
> > +	pinctrl-0 = <&lcd_clk &lcd_data24 &pwm1_out>;
> > +	pinctrl-names = "default";
> > +	status = "okay";
> > +
> > +	display-timings {
> > +		timing0 {
> > +			clock-frequency = <66666666>;
> > +			hactive = <1280>;
> > +			vactive = <800>;
> > +			hfront-porch = <18>;
> > +			hback-porch = <36>;
> > +			hsync-len = <16>;
> > +			vback-porch = <16>;
> > +			vfront-porch = <4>;
> > +			vsync-len = <3>;
> > +			hsync-active = <1>;
> > +		};
> > +	};
> 
> What happened with Marek's comment about this?
> 

Should have mentioned it in the introduction mail. I had a look at the
simple panel driver and it's not enough for the display in the p4note. I
asked Marek in IRC whether it's ok to have this in a separate patch set
to have a fully working display and he agreed.

> Best regards,
> Krzysztof
Krzysztof Kozlowski Nov. 3, 2020, 7:53 a.m. UTC | #3
On Mon, Nov 02, 2020 at 10:21:18PM +0100, Martin Juecker wrote:
> On Mon, Nov 02, 2020 at 08:18:45PM +0100, Krzysztof Kozlowski wrote:
> > On Sat, Oct 31, 2020 at 06:58:34PM +0100, Martin Jücker wrote:
> > > The p4note family contains a couple of variants of the Galaxy Note 10.1
> > > tablet with mainly different modems. The GT-N8010/GT-N8013 is the wifi
> > > only version.
> > 
> > The subject is v1. Did you send correct patch?
> 
> I probably messed up with git send-email here. I need some more time to
> get used to it. The patch is indeed v2.
> 
> > 
> > > 
> > > Signed-off-by: Martin Jücker <martin.juecker@gmail.com>
> > > ---
> > >  arch/arm/boot/dts/Makefile                    |    1 +
> > >  arch/arm/boot/dts/exynos4412-p4note-n8010.dts |   16 +
> > >  arch/arm/boot/dts/exynos4412-p4note.dtsi      | 1128 +++++++++++++++++
> > >  3 files changed, 1145 insertions(+)
> > >  create mode 100644 arch/arm/boot/dts/exynos4412-p4note-n8010.dts
> > >  create mode 100644 arch/arm/boot/dts/exynos4412-p4note.dtsi
> > > 
> > > diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> > > index 4572db3fa5ae..951853e55edb 100644
> > > --- a/arch/arm/boot/dts/Makefile
> > > +++ b/arch/arm/boot/dts/Makefile
> > > @@ -195,6 +195,7 @@ dtb-$(CONFIG_ARCH_EXYNOS4) += \
> > >  	exynos4412-odroidx.dtb \
> > >  	exynos4412-odroidx2.dtb \
> > >  	exynos4412-origen.dtb \
> > > +	exynos4412-p4note-n8010.dtb \
> > >  	exynos4412-smdk4412.dtb \
> > >  	exynos4412-tiny4412.dtb \
> > >  	exynos4412-trats2.dtb
> > > diff --git a/arch/arm/boot/dts/exynos4412-p4note-n8010.dts b/arch/arm/boot/dts/exynos4412-p4note-n8010.dts
> > > new file mode 100644
> > > index 000000000000..f99358750e01
> > > --- /dev/null
> > > +++ b/arch/arm/boot/dts/exynos4412-p4note-n8010.dts
> > > @@ -0,0 +1,16 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * Samsung's Galaxy Note 10.1 - N801x (wifi only version)
> > > + *
> > > + * Copyright (c) 2020 Martin Jücker <martin.juecker@gmail.com>
> > > + */
> > > +
> > > +/dts-v1/;
> > > +#include "exynos4412-p4note.dtsi"
> > > +
> > > +/ {
> > > +	model = "Samsung Galaxy Note 10.1 (GT-N8010/N8013) based on Exynos4412";
> > > +	compatible = "samsung,n8010", "samsung,p4note", "samsung,exynos4412", "samsung,exynos4";
> > > +
> > > +	/* this is the base variant without any kind of modem */
> > > +};
> > > diff --git a/arch/arm/boot/dts/exynos4412-p4note.dtsi b/arch/arm/boot/dts/exynos4412-p4note.dtsi
> > > new file mode 100644
> > > index 000000000000..15b6acbbecb2
> > > --- /dev/null
> > > +++ b/arch/arm/boot/dts/exynos4412-p4note.dtsi
> > > @@ -0,0 +1,1128 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * Samsung's Exynos4412 based p4note device family base DT
> > > + *
> > > + * Copyright (c) 2020 Martin Jücker <martin.juecker@gmail.com>
> > 
> > Multiple parts of this file look like copied from the existing ones. Few
> > comments are the same. The v1 duplicated even few minor issues like not
> > that good naming of nodes.  It looks like it is not only based on
> > existing sources, but uses parts of them directly.  If it is true, then
> > include the copyright of original work as well.
> > https://www.gnu.org/prep/maintain/html_node/Copyright-Notices.html
> > 
> 
> I had a look through multiple files and ended up with a mix of copying
> and writing nodes myself. Most if not all of the copying is from the
> midas dt, is it enough to add a note that this file is based on the
> midas dt or should I go with the same approach like midas and only add
> the samsung copyright here? I don't care too much what's in the header.

In such case we mention that works is based on the file, as you
suggest, and usually we keep the copyright of original file.

> > 
> > > + */
> > > +
> > > +/dts-v1/;
> > > +#include "exynos4412.dtsi"
> > > +#include "exynos4412-ppmu-common.dtsi"
> > > +
> > > +#include <dt-bindings/clock/maxim,max77686.h>
> > > +#include <dt-bindings/gpio/gpio.h>
> > > +#include <dt-bindings/input/linux-event-codes.h>
> > > +#include <dt-bindings/interrupt-controller/irq.h>
> > > +#include <dt-bindings/pinctrl/samsung.h>
> > > +
> > > +/ {
> > > +	compatible = "samsung,p4note", "samsung,exynos4412", "samsung,exynos4";
> > > +
> > > +	memory@40000000 {
> > > +		device_type = "memory";
> > > +		reg = <0x40000000 0x80000000>;
> > > +	};
> > > +
> > > +	chosen {
> > > +		stdout-path = &serial_2;
> > > +	};
> > > +
> > > +	firmware@204f000 {
> > > +		compatible = "samsung,secure-firmware";
> > > +		reg = <0x0204F000 0x1000>;
> > > +	};
> > > +
> > > +	fixed-rate-clocks {
> > > +		xxti {
> > > +			compatible = "samsung,clock-xxti";
> > > +			clock-frequency = <0>;
> > > +		};
> > > +
> > > +		xusbxti {
> > > +			compatible = "samsung,clock-xusbxti";
> > > +			clock-frequency = <24000000>;
> > > +		};
> > > +	};
> > > +
> > > +	gpio-keys {
> > > +		compatible = "gpio-keys";
> > > +		pinctrl-names = "default";
> > > +		pinctrl-0 = <&gpio_keys>;
> > > +
> > > +		key-down {
> > > +			gpios = <&gpx2 2 GPIO_ACTIVE_LOW>;
> > > +			linux,code = <KEY_VOLUMEDOWN>;
> > > +			label = "volume down";
> > > +			debounce-interval = <10>;
> > > +		};
> > > +
> > > +		key-up {
> > > +			gpios = <&gpx3 3 GPIO_ACTIVE_LOW>;
> > > +			linux,code = <KEY_VOLUMEUP>;
> > > +			label = "volume up";
> > > +			debounce-interval = <10>;
> > > +		};
> > > +
> > > +		key-power {
> > > +			gpios = <&gpx2 7 GPIO_ACTIVE_LOW>;
> > > +			linux,code = <KEY_POWER>;
> > > +			label = "power";
> > > +			debounce-interval = <10>;
> > > +			wakeup-source;
> > > +		};
> > > +	};
> > > +
> > > +	voltage-regulator-1 {
> > > +		compatible = "regulator-fixed";
> > > +		regulator-name = "TSP_LDO1";
> > > +		pinctrl-names = "default";
> > > +		pinctrl-0 = <&tsp_reg_gpio_1>;
> > > +		gpios = <&gpm4 5 GPIO_ACTIVE_HIGH>;
> > > +		enable-active-high;
> > > +		regulator-always-on;
> > > +	};
> > > +
> > > +	voltage-regulator-2 {
> > > +		compatible = "regulator-fixed";
> > > +		regulator-name = "TSP_LDO2";
> > > +		pinctrl-names = "default";
> > > +		pinctrl-0 = <&tsp_reg_gpio_2>;
> > > +		gpios = <&gpb 5 GPIO_ACTIVE_HIGH>;
> > > +		enable-active-high;
> > > +		regulator-always-on;
> > > +	};
> > > +
> > > +	voltage-regulator-3 {
> > > +		compatible = "regulator-fixed";
> > > +		regulator-name = "TSP_LDO3";
> > > +		pinctrl-names = "default";
> > > +		pinctrl-0 = <&tsp_reg_gpio_3>;
> > > +		gpios = <&gpb 7 GPIO_ACTIVE_HIGH>;
> > > +		startup-delay-us = <20000>;
> > > +		enable-active-high;
> > > +		regulator-always-on;
> > > +	};
> > > +
> > > +	wlan_pwrseq: sdhci3-pwrseq {
> > > +		compatible = "mmc-pwrseq-simple";
> > > +		reset-gpios = <&gpm3 5 GPIO_ACTIVE_LOW>;
> > > +		pinctrl-0 = <&wifi_reset>;
> > > +		pinctrl-names = "default";
> > > +		clocks = <&max77686 MAX77686_CLK_PMIC>;
> > > +		clock-names = "ext_clock";
> > > +	};
> > > +
> > > +	i2c-gpio-1 {
> > > +		compatible = "i2c-gpio";
> > > +		sda-gpios = <&gpy2 4 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> > > +		scl-gpios = <&gpy2 5 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> > > +		i2c-gpio,delay-us = <2>;
> > > +		#address-cells = <1>;
> > > +		#size-cells = <0>;
> > > +
> > > +		magnetometer@c {
> > > +			compatible = "asahi-kasei,ak8975";
> > > +			reg = <0x0c>;
> > > +			pinctrl-0 = <&ak8975_irq>;
> > > +			pinctrl-names = "default";
> > > +			interrupt-parent = <&gpm4>;
> > > +			interrupts = <7 IRQ_TYPE_EDGE_RISING>;
> > > +		};
> > > +	};
> > > +
> > > +	i2c-gpio-2 {
> > > +		compatible = "i2c-gpio";
> > > +		sda-gpios = <&gpy0 2 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> > > +		scl-gpios = <&gpy0 3 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> > > +		i2c-gpio,delay-us = <2>;
> > > +		#address-cells = <1>;
> > > +		#size-cells = <0>;
> > > +
> > > +		fuel-gauge@36 {
> > > +			compatible = "maxim,max17042";
> > > +			reg = <0x36>;
> > > +			pinctrl-0 = <&fuel_alert_irq>;
> > > +			pinctrl-names = "default";
> > > +			interrupt-parent = <&gpx2>;
> > > +			interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
> > > +			maxim,rsns-microohm = <10000>;
> > > +			maxim,over-heat-temp = <600>;
> > > +			maxim,over-volt = <4300>;
> > > +		};
> > > +	};
> > > +
> > > +	i2c-gpio-3 {
> > > +		compatible = "i2c-gpio";
> > > +		sda-gpios = <&gpm4 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> > > +		scl-gpios = <&gpm4 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> > > +		i2c-gpio,delay-us = <5>;
> > > +		#address-cells = <1>;
> > > +		#size-cells = <0>;
> > > +
> > > +		adc@41 {
> > > +			compatible = "st,stmpe811";
> > > +			reg = <0x41>;
> > > +			pinctrl-0 = <&stmpe_adc_irq>;
> > > +			pinctrl-names = "default";
> > > +			interrupt-parent = <&gpx0>;
> > > +			interrupts = <1 IRQ_TYPE_LEVEL_LOW>;
> > > +			interrupt-controller;
> > > +			irq-trigger = <0x1>;
> > > +			st,adc-freq = <3>;
> > > +			st,mod-12b = <1>;
> > > +			st,ref-sel = <0>;
> > > +			st,sample-time = <3>;
> > > +
> > > +			stmpe_adc {
> > > +				compatible = "st,stmpe-adc";
> > > +				#io-channel-cells = <1>;
> > > +				st,norequest-mask = <0x2F>;
> > > +			};
> > > +		};
> > > +	};
> > > +};
> > > +
> > > +&adc {
> > > +	vdd-supply = <&ldo3_reg>;
> > > +	/* not verified */
> > > +	status = "okay";
> > > +};
> > > +
> > > +&bus_dmc {
> > > +	devfreq-events = <&ppmu_dmc0_3>, <&ppmu_dmc1_3>;
> > > +	vdd-supply = <&buck1_reg>;
> > > +	status = "okay";
> > > +};
> > > +
> > > +&bus_acp {
> > > +	devfreq = <&bus_dmc>;
> > > +	status = "okay";
> > > +};
> > > +
> > > +&bus_c2c {
> > > +	devfreq = <&bus_dmc>;
> > > +	status = "okay";
> > > +};
> > > +
> > > +&bus_leftbus {
> > > +	devfreq-events = <&ppmu_leftbus_3>, <&ppmu_rightbus_3>;
> > > +	vdd-supply = <&buck3_reg>;
> > > +	status = "okay";
> > > +};
> > > +
> > > +&bus_rightbus {
> > > +	devfreq = <&bus_leftbus>;
> > > +	status = "okay";
> > > +};
> > > +
> > > +&bus_display {
> > > +	devfreq = <&bus_leftbus>;
> > > +	status = "okay";
> > > +};
> > > +
> > > +&bus_fsys {
> > > +	devfreq = <&bus_leftbus>;
> > > +	status = "okay";
> > > +};
> > > +
> > > +&bus_peri {
> > > +	devfreq = <&bus_leftbus>;
> > > +	status = "okay";
> > > +};
> > > +
> > > +&bus_mfc {
> > > +	devfreq = <&bus_leftbus>;
> > > +	status = "okay";
> > > +};
> > > +
> > > +&cpu0 {
> > > +	cpu0-supply = <&buck2_reg>;
> > > +};
> > > +
> > > +&cpu_thermal {
> > > +	cooling-maps {
> > > +		map0 {
> > > +			/* Corresponds to 800MHz at freq_table */
> > > +			cooling-device = <&cpu0 7 7>, <&cpu1 7 7>, <&cpu2 7 7>, <&cpu3 7 7>;
> > > +		};
> > > +		map1 {
> > > +			/* Corresponds to 200MHz at freq_table */
> > > +			cooling-device = <&cpu0 13 13>, <&cpu1 13 13>, <&cpu2 13 13>, <&cpu3 13 13>;
> > 
> > This is too long. Please split it at 80 with indentation of next line
> > starting at < from the previous one.
> > 
> 
> Okay
> 
> > 
> > > +		};
> > > +	};
> > > +};
> > > +
> > > +&exynos_usbphy {
> > > +	status = "okay";
> > > +};
> > > +
> > > +&fimd {
> > > +	pinctrl-0 = <&lcd_clk &lcd_data24 &pwm1_out>;
> > > +	pinctrl-names = "default";
> > > +	status = "okay";
> > > +
> > > +	display-timings {
> > > +		timing0 {
> > > +			clock-frequency = <66666666>;
> > > +			hactive = <1280>;
> > > +			vactive = <800>;
> > > +			hfront-porch = <18>;
> > > +			hback-porch = <36>;
> > > +			hsync-len = <16>;
> > > +			vback-porch = <16>;
> > > +			vfront-porch = <4>;
> > > +			vsync-len = <3>;
> > > +			hsync-active = <1>;
> > > +		};
> > > +	};
> > 
> > What happened with Marek's comment about this?
> > 
> 
> Should have mentioned it in the introduction mail. I had a look at the
> simple panel driver and it's not enough for the display in the p4note. I
> asked Marek in IRC whether it's ok to have this in a separate patch set
> to have a fully working display and he agreed.

Ah, ok.

Best regards,
Krzysztof
Marek Szyprowski Nov. 3, 2020, 9:51 a.m. UTC | #4
Hi Martin,

On 02.11.2020 22:21, Martin Juecker wrote:
> > ...
>>> +
>>> +&fimd {
>>> +	pinctrl-0 = <&lcd_clk &lcd_data24 &pwm1_out>;
>>> +	pinctrl-names = "default";
>>> +	status = "okay";
>>> +
>>> +	display-timings {
>>> +		timing0 {
>>> +			clock-frequency = <66666666>;
>>> +			hactive = <1280>;
>>> +			vactive = <800>;
>>> +			hfront-porch = <18>;
>>> +			hback-porch = <36>;
>>> +			hsync-len = <16>;
>>> +			vback-porch = <16>;
>>> +			vfront-porch = <4>;
>>> +			vsync-len = <3>;
>>> +			hsync-active = <1>;
>>> +		};
>>> +	};
>> What happened with Marek's comment about this?
>>
> Should have mentioned it in the introduction mail. I had a look at the
> simple panel driver and it's not enough for the display in the p4note. I
> asked Marek in IRC whether it's ok to have this in a separate patch set
> to have a fully working display and he agreed.

Yes, I agreed that the display can be added later in a separate patch. 
However in such case I would simply remove the whole fimd node now. 
Without a panel it is a bit useless imho. With a proper panel driver you 
will also get rid of the timings subnode, so there is no point adding it 
now.

Best regards
Martin Jücker Nov. 3, 2020, 10:38 a.m. UTC | #5
On Tue, Nov 03, 2020 at 10:51:08AM +0100, Marek Szyprowski wrote:
> Hi Martin,
> 
> On 02.11.2020 22:21, Martin Juecker wrote:
> > > ...
> >>> +
> >>> +&fimd {
> >>> +	pinctrl-0 = <&lcd_clk &lcd_data24 &pwm1_out>;
> >>> +	pinctrl-names = "default";
> >>> +	status = "okay";
> >>> +
> >>> +	display-timings {
> >>> +		timing0 {
> >>> +			clock-frequency = <66666666>;
> >>> +			hactive = <1280>;
> >>> +			vactive = <800>;
> >>> +			hfront-porch = <18>;
> >>> +			hback-porch = <36>;
> >>> +			hsync-len = <16>;
> >>> +			vback-porch = <16>;
> >>> +			vfront-porch = <4>;
> >>> +			vsync-len = <3>;
> >>> +			hsync-active = <1>;
> >>> +		};
> >>> +	};
> >> What happened with Marek's comment about this?
> >>
> > Should have mentioned it in the introduction mail. I had a look at the
> > simple panel driver and it's not enough for the display in the p4note. I
> > asked Marek in IRC whether it's ok to have this in a separate patch set
> > to have a fully working display and he agreed.
> 
> Yes, I agreed that the display can be added later in a separate patch. 
> However in such case I would simply remove the whole fimd node now. 
> Without a panel it is a bit useless imho. With a proper panel driver you 
> will also get rid of the timings subnode, so there is no point adding it 
> now.
>

Removing the fimd node (or the display timings) would break the DRM and
display output though. The display is working but missing proper GPIO
handling and the possibility to adjust brightness right now. As it is
connected to the LCD power domain, it's still turning on and off as
expected as it is setup by the bootloader. I know this isn't a great
solution, but I'm already working on the LCD driver. Not sure when it
will be done though.

The display timings are read in exynos_drm_dpi.c in the exynos_dpi_probe
method. As far as I understand, you can either provide the timings in
the fimd node itself or in a connected panel.

If this is not intended, I can of course remove the configuration.

> Best regards
> 
> -- 
> Marek Szyprowski, PhD
> Samsung R&D Institute Poland
> 

Cheers
Martin
Marek Szyprowski Nov. 5, 2020, 11:50 a.m. UTC | #6
On 03.11.2020 11:38, Martin Juecker wrote:
> On Tue, Nov 03, 2020 at 10:51:08AM +0100, Marek Szyprowski wrote:
>> Hi Martin,
>>
>> On 02.11.2020 22:21, Martin Juecker wrote:
>>>> ...
>>>>> +
>>>>> +&fimd {
>>>>> +	pinctrl-0 = <&lcd_clk &lcd_data24 &pwm1_out>;
>>>>> +	pinctrl-names = "default";
>>>>> +	status = "okay";
>>>>> +
>>>>> +	display-timings {
>>>>> +		timing0 {
>>>>> +			clock-frequency = <66666666>;
>>>>> +			hactive = <1280>;
>>>>> +			vactive = <800>;
>>>>> +			hfront-porch = <18>;
>>>>> +			hback-porch = <36>;
>>>>> +			hsync-len = <16>;
>>>>> +			vback-porch = <16>;
>>>>> +			vfront-porch = <4>;
>>>>> +			vsync-len = <3>;
>>>>> +			hsync-active = <1>;
>>>>> +		};
>>>>> +	};
>>>> What happened with Marek's comment about this?
>>>>
>>> Should have mentioned it in the introduction mail. I had a look at the
>>> simple panel driver and it's not enough for the display in the p4note. I
>>> asked Marek in IRC whether it's ok to have this in a separate patch set
>>> to have a fully working display and he agreed.
>> Yes, I agreed that the display can be added later in a separate patch.
>> However in such case I would simply remove the whole fimd node now.
>> Without a panel it is a bit useless imho. With a proper panel driver you
>> will also get rid of the timings subnode, so there is no point adding it
>> now.
>>
> Removing the fimd node (or the display timings) would break the DRM and
> display output though. The display is working but missing proper GPIO
> handling and the possibility to adjust brightness right now. As it is
> connected to the LCD power domain, it's still turning on and off as
> expected as it is setup by the bootloader. I know this isn't a great
> solution, but I'm already working on the LCD driver. Not sure when it
> will be done though.
>
> The display timings are read in exynos_drm_dpi.c in the exynos_dpi_probe
> method. As far as I understand, you can either provide the timings in
> the fimd node itself or in a connected panel.
>
> If this is not intended, I can of course remove the configuration.

If it works already then imho we can keep it for now and then adjust 
later when the proper panel driver is ready.

Best regards
diff mbox series

Patch

diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 4572db3fa5ae..951853e55edb 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -195,6 +195,7 @@  dtb-$(CONFIG_ARCH_EXYNOS4) += \
 	exynos4412-odroidx.dtb \
 	exynos4412-odroidx2.dtb \
 	exynos4412-origen.dtb \
+	exynos4412-p4note-n8010.dtb \
 	exynos4412-smdk4412.dtb \
 	exynos4412-tiny4412.dtb \
 	exynos4412-trats2.dtb
diff --git a/arch/arm/boot/dts/exynos4412-p4note-n8010.dts b/arch/arm/boot/dts/exynos4412-p4note-n8010.dts
new file mode 100644
index 000000000000..f99358750e01
--- /dev/null
+++ b/arch/arm/boot/dts/exynos4412-p4note-n8010.dts
@@ -0,0 +1,16 @@ 
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Samsung's Galaxy Note 10.1 - N801x (wifi only version)
+ *
+ * Copyright (c) 2020 Martin Jücker <martin.juecker@gmail.com>
+ */
+
+/dts-v1/;
+#include "exynos4412-p4note.dtsi"
+
+/ {
+	model = "Samsung Galaxy Note 10.1 (GT-N8010/N8013) based on Exynos4412";
+	compatible = "samsung,n8010", "samsung,p4note", "samsung,exynos4412", "samsung,exynos4";
+
+	/* this is the base variant without any kind of modem */
+};
diff --git a/arch/arm/boot/dts/exynos4412-p4note.dtsi b/arch/arm/boot/dts/exynos4412-p4note.dtsi
new file mode 100644
index 000000000000..15b6acbbecb2
--- /dev/null
+++ b/arch/arm/boot/dts/exynos4412-p4note.dtsi
@@ -0,0 +1,1128 @@ 
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Samsung's Exynos4412 based p4note device family base DT
+ *
+ * Copyright (c) 2020 Martin Jücker <martin.juecker@gmail.com>
+ */
+
+/dts-v1/;
+#include "exynos4412.dtsi"
+#include "exynos4412-ppmu-common.dtsi"
+
+#include <dt-bindings/clock/maxim,max77686.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/pinctrl/samsung.h>
+
+/ {
+	compatible = "samsung,p4note", "samsung,exynos4412", "samsung,exynos4";
+
+	memory@40000000 {
+		device_type = "memory";
+		reg = <0x40000000 0x80000000>;
+	};
+
+	chosen {
+		stdout-path = &serial_2;
+	};
+
+	firmware@204f000 {
+		compatible = "samsung,secure-firmware";
+		reg = <0x0204F000 0x1000>;
+	};
+
+	fixed-rate-clocks {
+		xxti {
+			compatible = "samsung,clock-xxti";
+			clock-frequency = <0>;
+		};
+
+		xusbxti {
+			compatible = "samsung,clock-xusbxti";
+			clock-frequency = <24000000>;
+		};
+	};
+
+	gpio-keys {
+		compatible = "gpio-keys";
+		pinctrl-names = "default";
+		pinctrl-0 = <&gpio_keys>;
+
+		key-down {
+			gpios = <&gpx2 2 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_VOLUMEDOWN>;
+			label = "volume down";
+			debounce-interval = <10>;
+		};
+
+		key-up {
+			gpios = <&gpx3 3 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_VOLUMEUP>;
+			label = "volume up";
+			debounce-interval = <10>;
+		};
+
+		key-power {
+			gpios = <&gpx2 7 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_POWER>;
+			label = "power";
+			debounce-interval = <10>;
+			wakeup-source;
+		};
+	};
+
+	voltage-regulator-1 {
+		compatible = "regulator-fixed";
+		regulator-name = "TSP_LDO1";
+		pinctrl-names = "default";
+		pinctrl-0 = <&tsp_reg_gpio_1>;
+		gpios = <&gpm4 5 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+		regulator-always-on;
+	};
+
+	voltage-regulator-2 {
+		compatible = "regulator-fixed";
+		regulator-name = "TSP_LDO2";
+		pinctrl-names = "default";
+		pinctrl-0 = <&tsp_reg_gpio_2>;
+		gpios = <&gpb 5 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+		regulator-always-on;
+	};
+
+	voltage-regulator-3 {
+		compatible = "regulator-fixed";
+		regulator-name = "TSP_LDO3";
+		pinctrl-names = "default";
+		pinctrl-0 = <&tsp_reg_gpio_3>;
+		gpios = <&gpb 7 GPIO_ACTIVE_HIGH>;
+		startup-delay-us = <20000>;
+		enable-active-high;
+		regulator-always-on;
+	};
+
+	wlan_pwrseq: sdhci3-pwrseq {
+		compatible = "mmc-pwrseq-simple";
+		reset-gpios = <&gpm3 5 GPIO_ACTIVE_LOW>;
+		pinctrl-0 = <&wifi_reset>;
+		pinctrl-names = "default";
+		clocks = <&max77686 MAX77686_CLK_PMIC>;
+		clock-names = "ext_clock";
+	};
+
+	i2c-gpio-1 {
+		compatible = "i2c-gpio";
+		sda-gpios = <&gpy2 4 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+		scl-gpios = <&gpy2 5 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+		i2c-gpio,delay-us = <2>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		magnetometer@c {
+			compatible = "asahi-kasei,ak8975";
+			reg = <0x0c>;
+			pinctrl-0 = <&ak8975_irq>;
+			pinctrl-names = "default";
+			interrupt-parent = <&gpm4>;
+			interrupts = <7 IRQ_TYPE_EDGE_RISING>;
+		};
+	};
+
+	i2c-gpio-2 {
+		compatible = "i2c-gpio";
+		sda-gpios = <&gpy0 2 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+		scl-gpios = <&gpy0 3 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+		i2c-gpio,delay-us = <2>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		fuel-gauge@36 {
+			compatible = "maxim,max17042";
+			reg = <0x36>;
+			pinctrl-0 = <&fuel_alert_irq>;
+			pinctrl-names = "default";
+			interrupt-parent = <&gpx2>;
+			interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
+			maxim,rsns-microohm = <10000>;
+			maxim,over-heat-temp = <600>;
+			maxim,over-volt = <4300>;
+		};
+	};
+
+	i2c-gpio-3 {
+		compatible = "i2c-gpio";
+		sda-gpios = <&gpm4 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+		scl-gpios = <&gpm4 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+		i2c-gpio,delay-us = <5>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		adc@41 {
+			compatible = "st,stmpe811";
+			reg = <0x41>;
+			pinctrl-0 = <&stmpe_adc_irq>;
+			pinctrl-names = "default";
+			interrupt-parent = <&gpx0>;
+			interrupts = <1 IRQ_TYPE_LEVEL_LOW>;
+			interrupt-controller;
+			irq-trigger = <0x1>;
+			st,adc-freq = <3>;
+			st,mod-12b = <1>;
+			st,ref-sel = <0>;
+			st,sample-time = <3>;
+
+			stmpe_adc {
+				compatible = "st,stmpe-adc";
+				#io-channel-cells = <1>;
+				st,norequest-mask = <0x2F>;
+			};
+		};
+	};
+};
+
+&adc {
+	vdd-supply = <&ldo3_reg>;
+	/* not verified */
+	status = "okay";
+};
+
+&bus_dmc {
+	devfreq-events = <&ppmu_dmc0_3>, <&ppmu_dmc1_3>;
+	vdd-supply = <&buck1_reg>;
+	status = "okay";
+};
+
+&bus_acp {
+	devfreq = <&bus_dmc>;
+	status = "okay";
+};
+
+&bus_c2c {
+	devfreq = <&bus_dmc>;
+	status = "okay";
+};
+
+&bus_leftbus {
+	devfreq-events = <&ppmu_leftbus_3>, <&ppmu_rightbus_3>;
+	vdd-supply = <&buck3_reg>;
+	status = "okay";
+};
+
+&bus_rightbus {
+	devfreq = <&bus_leftbus>;
+	status = "okay";
+};
+
+&bus_display {
+	devfreq = <&bus_leftbus>;
+	status = "okay";
+};
+
+&bus_fsys {
+	devfreq = <&bus_leftbus>;
+	status = "okay";
+};
+
+&bus_peri {
+	devfreq = <&bus_leftbus>;
+	status = "okay";
+};
+
+&bus_mfc {
+	devfreq = <&bus_leftbus>;
+	status = "okay";
+};
+
+&cpu0 {
+	cpu0-supply = <&buck2_reg>;
+};
+
+&cpu_thermal {
+	cooling-maps {
+		map0 {
+			/* Corresponds to 800MHz at freq_table */
+			cooling-device = <&cpu0 7 7>, <&cpu1 7 7>, <&cpu2 7 7>, <&cpu3 7 7>;
+		};
+		map1 {
+			/* Corresponds to 200MHz at freq_table */
+			cooling-device = <&cpu0 13 13>, <&cpu1 13 13>, <&cpu2 13 13>, <&cpu3 13 13>;
+		};
+	};
+};
+
+&exynos_usbphy {
+	status = "okay";
+};
+
+&fimd {
+	pinctrl-0 = <&lcd_clk &lcd_data24 &pwm1_out>;
+	pinctrl-names = "default";
+	status = "okay";
+
+	display-timings {
+		timing0 {
+			clock-frequency = <66666666>;
+			hactive = <1280>;
+			vactive = <800>;
+			hfront-porch = <18>;
+			hback-porch = <36>;
+			hsync-len = <16>;
+			vback-porch = <16>;
+			vfront-porch = <4>;
+			vsync-len = <3>;
+			hsync-active = <1>;
+		};
+	};
+};
+
+&gpu {
+	mali-supply = <&buck4_reg>;
+	status = "okay";
+};
+
+&hsotg {
+	vusb_a-supply = <&ldo12_reg>;
+	dr_mode = "peripheral";
+	status = "okay";
+};
+
+&i2c_3 {
+	samsung,i2c-sda-delay = <100>;
+	samsung,i2c-slave-addr = <0x10>;
+	samsung,i2c-max-bus-freq = <400000>;
+	pinctrl-0 = <&i2c3_bus>;
+	pinctrl-names = "default";
+	status = "okay";
+
+	touchscreen@4a {
+		compatible = "atmel,maxtouch";
+		reg = <0x4a>;
+		pinctrl-0 = <&tsp_rst &tsp_irq>;
+		pinctrl-names = "default";
+		interrupt-parent = <&gpm2>;
+		interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
+		reset-gpios = <&gpm0 4 GPIO_ACTIVE_HIGH>;
+	};
+};
+
+&i2c_7 {
+	samsung,i2c-sda-delay = <100>;
+	samsung,i2c-slave-addr = <0x10>;
+	samsung,i2c-max-bus-freq = <400000>;
+	pinctrl-0 = <&i2c7_bus>;
+	pinctrl-names = "default";
+	status = "okay";
+
+	max77686: pmic@9 {
+		compatible = "maxim,max77686";
+		interrupt-parent = <&gpx0>;
+		interrupts = <7 IRQ_TYPE_NONE>;
+		pinctrl-0 = <&max77686_irq>;
+		pinctrl-names = "default";
+		reg = <0x09>;
+		#clock-cells = <1>;
+
+		voltage-regulators {
+			ldo1_reg: LDO1 {
+				regulator-name = "ldo1";
+				regulator-always-on;
+			};
+
+			ldo2_reg: LDO2 {
+				regulator-name = "ldo2";
+				regulator-always-on;
+			};
+
+			/* WM8994 audio */
+			ldo3_reg: LDO3 {
+				regulator-name = "VCC_1.8V_AP";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-always-on;
+				regulator-boot-on;
+
+				regulator-state-mem {
+					regulator-on-in-suspend;
+				};
+			};
+
+			ldo4_reg: LDO4 {
+				regulator-name = "ldo4";
+				regulator-always-on;
+			};
+
+			ldo5_reg: LDO5 {
+				regulator-name = "VCC_1.8V_IO";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			ldo6_reg: LDO6 {
+				regulator-name = "ldo6";
+				regulator-always-on;
+			};
+
+			ldo7_reg: LDO7 {
+				regulator-name = "ldo7";
+				regulator-always-on;
+			};
+
+			/* CSI IP block */
+			ldo8_reg: LDO8 {
+				regulator-name = "VMIPI_1.0V";
+				regulator-min-microvolt = <1000000>;
+				regulator-max-microvolt = <1000000>;
+				regulator-always-on;
+				regulator-boot-on;
+
+				regulator-state-mem {
+					regulator-on-in-suspend;
+				};
+			};
+
+			/* IR LED on/off */
+			ldo9_reg: LDO9 {
+				regulator-name = "VLED_IC_1.9V";
+				regulator-min-microvolt = <1950000>;
+				regulator-max-microvolt = <1950000>;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			/* CSI IP block */
+			ldo10_reg: LDO10 {
+				regulator-name = "VMIPI_1.8V";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-always-on;
+				regulator-boot-on;
+
+				regulator-state-mem {
+					regulator-on-in-suspend;
+				};
+			};
+
+			ldo11_reg: LDO11 {
+				regulator-name = "VABB1_1.9V";
+				regulator-min-microvolt = <1950000>;
+				regulator-max-microvolt = <1950000>;
+				regulator-always-on;
+				regulator-boot-on;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			/* USB OTG */
+			ldo12_reg: LDO12 {
+				regulator-name = "VUOTG_3.0V";
+				regulator-min-microvolt = <3000000>;
+				regulator-max-microvolt = <3000000>;
+				regulator-always-on;
+				regulator-boot-on;
+
+				regulator-state-mem {
+					regulator-on-in-suspend;
+				};
+			};
+
+			/* not connected */
+			ldo13_reg: LDO13 {
+				regulator-name = "ldo13";
+			};
+
+			ldo14_reg: LDO14 {
+				regulator-name = "VABB2_1.9V";
+				regulator-min-microvolt = <1950000>;
+				regulator-max-microvolt = <1950000>;
+				regulator-always-on;
+				regulator-boot-on;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			ldo15_reg: LDO15 {
+				regulator-name = "ldo15";
+				regulator-always-on;
+			};
+
+			ldo16_reg: LDO16 {
+				regulator-name = "ldo16";
+				regulator-always-on;
+			};
+
+			/* not connected */
+			ldo17_reg: LDO17 {
+				regulator-name = "ldo17";
+			};
+
+			/* Camera ISX012 */
+			ldo18_reg: LDO18 {
+				regulator-name = "CAM_IO_1.8V";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			/* Camera S5K6A3 */
+			ldo19_reg: LDO19 {
+				regulator-name = "VT_CORE_1.8V";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			/* not connected */
+			ldo20_reg: LDO20 {
+				regulator-name = "ldo20";
+			};
+
+			/* MMC2 */
+			ldo21_reg: LDO21 {
+				regulator-name = "VTF_2.8V";
+				regulator-min-microvolt = <2800000>;
+				regulator-max-microvolt = <2800000>;
+				maxim,ena-gpios = <&gpy2 0 GPIO_ACTIVE_HIGH>;
+			};
+
+			/* not connected */
+			ldo22_reg: LDO22 {
+				regulator-name = "ldo22";
+			};
+
+			/* ADC */
+			ldo23_reg: LDO23 {
+				regulator-name = "VDD_ADC_3.3V";
+				regulator-min-microvolt = <3300000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-always-on;
+				regulator-boot-on;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			/* Camera S5K6A3 */
+			ldo24_reg: LDO24 {
+				regulator-name = "CAM_A2.8V";
+				regulator-min-microvolt = <2800000>;
+				regulator-max-microvolt = <2800000>;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			ldo25_reg: LDO25 {
+				regulator-name = "VLED_3.3V";
+				regulator-min-microvolt = <3300000>;
+				regulator-max-microvolt = <3300000>;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			/* Camera ISX012 */
+			ldo26_reg: LDO26 {
+				regulator-name = "3MP_AF_2.8V";
+				regulator-min-microvolt = <2800000>;
+				regulator-max-microvolt = <2800000>;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			buck1_reg: BUCK1 {
+				regulator-name = "VDD_MIF";
+				regulator-min-microvolt = <850000>;
+				regulator-max-microvolt = <1050000>;
+				regulator-always-on;
+				regulator-boot-on;
+			};
+
+			buck2_reg: BUCK2 {
+				regulator-name = "VDD_ARM";
+				regulator-min-microvolt = <850000>;
+				regulator-max-microvolt = <1500000>;
+				regulator-always-on;
+				regulator-boot-on;
+			};
+
+			buck3_reg: BUCK3 {
+				regulator-name = "VDD_INT";
+				regulator-min-microvolt = <850000>;
+				regulator-max-microvolt = <1100000>;
+				regulator-always-on;
+				regulator-boot-on;
+			};
+
+			buck4_reg: BUCK4 {
+				regulator-name = "VDD_G3D";
+				regulator-min-microvolt = <850000>;
+				regulator-max-microvolt = <1075000>;
+				regulator-boot-on;
+			};
+
+			buck5_reg: BUCK5 {
+				regulator-name = "buck5";
+				regulator-always-on;
+			};
+
+			buck6_reg: BUCK6 {
+				regulator-name = "buck6";
+				regulator-always-on;
+			};
+
+			buck7_reg: BUCK7 {
+				regulator-name = "buck7";
+				regulator-always-on;
+			};
+
+			/* not connected */
+			buck8_reg: BUCK8 {
+				regulator-name = "buck8";
+			};
+
+			buck9_reg: BUCK9 {
+				regulator-name = "3MP_CORE_1.2V";
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <1200000>;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+		};
+	};
+};
+
+&mshc_0 {
+	broken-cd;
+	non-removable;
+	card-detect-delay = <200>;
+	clock-frequency = <400000000>;
+	samsung,dw-mshc-ciu-div = <0>;
+	samsung,dw-mshc-sdr-timing = <2 3>;
+	samsung,dw-mshc-ddr-timing = <1 2>;
+	pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>;
+	pinctrl-names = "default";
+	bus-width = <4>;
+	cap-mmc-highspeed;
+	cap-sd-highspeed;
+	status = "okay";
+};
+
+&pinctrl_0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&sleep0>;
+
+	tsp_reg_gpio_2: tsp-reg-gpio-2 {
+		samsung,pins = "gpb-5";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	tsp_reg_gpio_3: tsp-reg-gpio-3 {
+		samsung,pins = "gpb-7";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	sleep0: sleep-states {
+		PIN_SLP(gpa0-0, INPUT, NONE);
+		PIN_SLP(gpa0-1, OUT0, NONE);
+		PIN_SLP(gpa0-2, INPUT, NONE);
+		PIN_SLP(gpa0-3, INPUT, UP);
+		PIN_SLP(gpa0-4, INPUT, NONE);
+		PIN_SLP(gpa0-5, INPUT, DOWN);
+		PIN_SLP(gpa0-6, INPUT, DOWN);
+		PIN_SLP(gpa0-7, INPUT, UP);
+
+		PIN_SLP(gpa1-0, INPUT, DOWN);
+		PIN_SLP(gpa1-1, INPUT, DOWN);
+		PIN_SLP(gpa1-2, INPUT, DOWN);
+		PIN_SLP(gpa1-3, INPUT, DOWN);
+		PIN_SLP(gpa1-4, INPUT, DOWN);
+		PIN_SLP(gpa1-5, INPUT, DOWN);
+
+		PIN_SLP(gpb-0, INPUT, NONE);
+		PIN_SLP(gpb-1, INPUT, NONE);
+		PIN_SLP(gpb-2, INPUT, NONE);
+		PIN_SLP(gpb-3, INPUT, NONE);
+		PIN_SLP(gpb-4, INPUT, DOWN);
+		PIN_SLP(gpb-5, INPUT, DOWN);
+		PIN_SLP(gpb-6, INPUT, DOWN);
+		PIN_SLP(gpb-7, INPUT, DOWN);
+
+		PIN_SLP(gpc0-0, INPUT, DOWN);
+		PIN_SLP(gpc0-1, INPUT, DOWN);
+		PIN_SLP(gpc0-2, INPUT, DOWN);
+		PIN_SLP(gpc0-3, INPUT, DOWN);
+		PIN_SLP(gpc0-4, INPUT, DOWN);
+
+		PIN_SLP(gpc1-0, INPUT, UP);
+		PIN_SLP(gpc1-1, PREV, NONE);
+		PIN_SLP(gpc1-2, INPUT, UP);
+		PIN_SLP(gpc1-3, INPUT, UP);
+		PIN_SLP(gpc1-4, INPUT, UP);
+
+		PIN_SLP(gpd0-0, INPUT, DOWN);
+		PIN_SLP(gpd0-1, OUT0, NONE);
+		PIN_SLP(gpd0-2, INPUT, NONE);
+		PIN_SLP(gpd0-3, INPUT, NONE);
+
+		PIN_SLP(gpd1-0, INPUT, DOWN);
+		PIN_SLP(gpd1-1, INPUT, DOWN);
+		PIN_SLP(gpd1-2, INPUT, NONE);
+		PIN_SLP(gpd1-3, INPUT, NONE);
+
+		PIN_SLP(gpf0-0, OUT0, NONE);
+		PIN_SLP(gpf0-1, OUT0, NONE);
+		PIN_SLP(gpf0-2, OUT0, NONE);
+		PIN_SLP(gpf0-3, OUT0, NONE);
+		PIN_SLP(gpf0-4, OUT0, NONE);
+		PIN_SLP(gpf0-5, OUT0, NONE);
+		PIN_SLP(gpf0-6, OUT0, NONE);
+		PIN_SLP(gpf0-7, OUT0, NONE);
+
+		PIN_SLP(gpf1-0, OUT0, NONE);
+		PIN_SLP(gpf1-1, OUT0, NONE);
+		PIN_SLP(gpf1-2, OUT0, NONE);
+		PIN_SLP(gpf1-3, OUT0, NONE);
+		PIN_SLP(gpf1-4, OUT0, NONE);
+		PIN_SLP(gpf1-5, OUT0, NONE);
+		PIN_SLP(gpf1-6, OUT0, NONE);
+		PIN_SLP(gpf1-7, OUT0, NONE);
+
+		PIN_SLP(gpf2-0, OUT0, NONE);
+		PIN_SLP(gpf2-1, OUT0, NONE);
+		PIN_SLP(gpf2-2, OUT0, NONE);
+		PIN_SLP(gpf2-3, OUT0, NONE);
+		PIN_SLP(gpf2-4, OUT0, NONE);
+		PIN_SLP(gpf2-5, OUT0, NONE);
+		PIN_SLP(gpf2-6, OUT0, NONE);
+		PIN_SLP(gpf2-7, OUT0, NONE);
+
+		PIN_SLP(gpf3-0, OUT0, NONE);
+		PIN_SLP(gpf3-1, OUT0, NONE);
+		PIN_SLP(gpf3-2, OUT0, NONE);
+		PIN_SLP(gpf3-3, OUT0, NONE);
+		PIN_SLP(gpf3-4, OUT0, NONE);
+		PIN_SLP(gpf3-5, OUT0, NONE);
+
+		PIN_SLP(gpj0-0, INPUT, DOWN);
+		PIN_SLP(gpj0-1, INPUT, DOWN);
+		PIN_SLP(gpj0-2, INPUT, DOWN);
+		PIN_SLP(gpj0-3, PREV, NONE);
+		PIN_SLP(gpj0-4, PREV, NONE);
+		PIN_SLP(gpj0-5, OUT0, NONE);
+		PIN_SLP(gpj0-6, OUT0, NONE);
+		PIN_SLP(gpj0-7, OUT0, NONE);
+
+		PIN_SLP(gpj1-0, OUT0, NONE);
+		PIN_SLP(gpj1-1, INPUT, DOWN);
+		PIN_SLP(gpj1-2, PREV, NONE);
+		PIN_SLP(gpj1-3, OUT0, NONE);
+	};
+};
+
+&pinctrl_1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&sleep1>;
+
+	sd3_wifi: sd3-wifi {
+		samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_2>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	bt_shutdown: bt-shutdown {
+		samsung,pins = "gpl0-6";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	uart_sel: uart-sel {
+		samsung,pins = "gpl2-7";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-val = <1>;
+		/* 0 = CP, 1 = AP (serial output) */
+	};
+
+	tsp_rst: tsp-rst {
+		samsung,pins = "gpm0-4";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	tsp_irq: tsp-irq {
+		samsung,pins = "gpm2-3";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_F>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	wifi_reset: wifi-reset {
+		samsung,pins = "gpm3-5";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	tsp_reg_gpio_1: tsp-reg-gpio-1 {
+		samsung,pins = "gpm4-5";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	ak8975_irq: ak8975-irq {
+		samsung,pins = "gpm4-7";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_F>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
+	};
+
+	stmpe_adc_irq: stmpe-adc-irq {
+		samsung,pins = "gpx0-1";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	max77686_irq: max77686-irq {
+		samsung,pins = "gpx0-7";
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	gpio_keys: gpio-keys {
+		samsung,pins = "gpx2-2", "gpx2-7", "gpx3-3";
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	fuel_alert_irq: fuel-alert-irq {
+		samsung,pins = "gpx2-3";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	wifi_host_wake: wifi-host-wake {
+		samsung,pins = "gpx2-5";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_F>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
+	};
+
+	bt_host_wakeup: bt-host-wakeup {
+		samsung,pins = "gpx2-6";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	bt_device_wakeup: bt-device-wakeup {
+		samsung,pins = "gpx3-1";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_OUTPUT>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	sdhci2_cd: sdhci2-cd {
+		samsung,pins = "gpx3-4";
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	sleep1: sleep-states {
+		PIN_SLP(gpk0-0, PREV, NONE);
+		PIN_SLP(gpk0-1, PREV, NONE);
+		PIN_SLP(gpk0-2, PREV, NONE);
+		PIN_SLP(gpk0-3, PREV, NONE);
+		PIN_SLP(gpk0-4, PREV, NONE);
+		PIN_SLP(gpk0-5, PREV, NONE);
+		PIN_SLP(gpk0-6, PREV, NONE);
+
+		PIN_SLP(gpk1-0, INPUT, DOWN);
+		PIN_SLP(gpk1-1, INPUT, DOWN);
+		PIN_SLP(gpk1-2, INPUT, DOWN);
+		PIN_SLP(gpk1-3, PREV, NONE);
+		PIN_SLP(gpk1-4, PREV, NONE);
+		PIN_SLP(gpk1-5, PREV, NONE);
+		PIN_SLP(gpk1-6, PREV, NONE);
+
+		PIN_SLP(gpk2-0, INPUT, DOWN);
+		PIN_SLP(gpk2-1, INPUT, DOWN);
+		PIN_SLP(gpk2-2, INPUT, DOWN);
+		PIN_SLP(gpk2-3, INPUT, DOWN);
+		PIN_SLP(gpk2-4, INPUT, DOWN);
+		PIN_SLP(gpk2-5, INPUT, DOWN);
+		PIN_SLP(gpk2-6, INPUT, DOWN);
+
+		PIN_SLP(gpk3-0, OUT0, NONE);
+		PIN_SLP(gpk3-1, INPUT, NONE);
+		PIN_SLP(gpk3-2, INPUT, DOWN);
+		PIN_SLP(gpk3-3, INPUT, NONE);
+		PIN_SLP(gpk3-4, INPUT, NONE);
+		PIN_SLP(gpk3-5, INPUT, NONE);
+		PIN_SLP(gpk3-6, INPUT, NONE);
+
+		PIN_SLP(gpl0-0, OUT0, NONE);
+		PIN_SLP(gpl0-1, INPUT, NONE);
+		PIN_SLP(gpl0-2, INPUT, NONE);
+		PIN_SLP(gpl0-3, INPUT, DOWN);
+		PIN_SLP(gpl0-4, PREV, NONE);
+		PIN_SLP(gpl0-6, PREV, NONE);
+
+		PIN_SLP(gpl1-0, OUT0, NONE);
+		PIN_SLP(gpl1-1, OUT0, NONE);
+
+		PIN_SLP(gpl2-0, INPUT, DOWN);
+		PIN_SLP(gpl2-1, INPUT, DOWN);
+		PIN_SLP(gpl2-2, INPUT, DOWN);
+		PIN_SLP(gpl2-3, INPUT, DOWN);
+		PIN_SLP(gpl2-4, OUT0, NONE);
+		PIN_SLP(gpl2-5, INPUT, DOWN);
+		PIN_SLP(gpl2-6, PREV, NONE);
+		PIN_SLP(gpl2-7, PREV, NONE);
+
+		PIN_SLP(gpm0-0, PREV, NONE);
+		PIN_SLP(gpm0-1, OUT0, NONE);
+		PIN_SLP(gpm0-2, INPUT, DOWN);
+		PIN_SLP(gpm0-3, INPUT, NONE);
+		PIN_SLP(gpm0-4, OUT0, NONE);
+		PIN_SLP(gpm0-5, OUT0, NONE);
+		PIN_SLP(gpm0-6, INPUT, DOWN);
+		PIN_SLP(gpm0-7, OUT0, NONE);
+
+		PIN_SLP(gpm1-0, INPUT, NONE);
+		PIN_SLP(gpm1-1, INPUT, NONE);
+		PIN_SLP(gpm1-2, INPUT, NONE);
+		PIN_SLP(gpm1-3, INPUT, NONE);
+		PIN_SLP(gpm1-4, INPUT, NONE);
+		PIN_SLP(gpm1-5, INPUT, NONE);
+		PIN_SLP(gpm1-6, INPUT, DOWN);
+
+		PIN_SLP(gpm2-0, INPUT, NONE);
+		PIN_SLP(gpm2-1, INPUT, NONE);
+		PIN_SLP(gpm2-2, OUT0, NONE);
+		PIN_SLP(gpm2-3, OUT0, DOWN);
+		PIN_SLP(gpm2-4, INPUT, DOWN);
+
+		PIN_SLP(gpm3-0, PREV, NONE);
+		PIN_SLP(gpm3-1, PREV, NONE);
+		PIN_SLP(gpm3-2, PREV, NONE);
+		PIN_SLP(gpm3-3, OUT1, NONE);
+		PIN_SLP(gpm3-4, OUT0, DOWN);
+		PIN_SLP(gpm3-5, PREV, NONE);
+		PIN_SLP(gpm3-6, PREV, NONE);
+		PIN_SLP(gpm3-7, OUT0, NONE);
+
+		PIN_SLP(gpm4-0, INPUT, NONE);
+		PIN_SLP(gpm4-1, INPUT, NONE);
+		PIN_SLP(gpm4-2, INPUT, DOWN);
+		PIN_SLP(gpm4-3, INPUT, DOWN);
+		PIN_SLP(gpm4-4, PREV, NONE);
+		PIN_SLP(gpm4-5, OUT0, NONE);
+		PIN_SLP(gpm4-6, OUT0, NONE);
+		PIN_SLP(gpm4-7, INPUT, DOWN);
+
+		PIN_SLP(gpy0-0, INPUT, DOWN);
+		PIN_SLP(gpy0-1, INPUT, DOWN);
+		PIN_SLP(gpy0-2, INPUT, NONE);
+		PIN_SLP(gpy0-3, INPUT, NONE);
+		PIN_SLP(gpy0-4, INPUT, NONE);
+		PIN_SLP(gpy0-5, INPUT, NONE);
+
+		PIN_SLP(gpy1-0, INPUT, DOWN);
+		PIN_SLP(gpy1-1, INPUT, DOWN);
+		PIN_SLP(gpy1-2, INPUT, DOWN);
+		PIN_SLP(gpy1-3, INPUT, DOWN);
+
+		PIN_SLP(gpy2-0, PREV, NONE);
+		PIN_SLP(gpy2-1, INPUT, DOWN);
+		PIN_SLP(gpy2-2, INPUT, NONE);
+		PIN_SLP(gpy2-3, INPUT, NONE);
+		PIN_SLP(gpy2-4, INPUT, NONE);
+		PIN_SLP(gpy2-5, INPUT, NONE);
+
+		PIN_SLP(gpy3-0, INPUT, DOWN);
+		PIN_SLP(gpy3-1, INPUT, DOWN);
+		PIN_SLP(gpy3-2, INPUT, DOWN);
+		PIN_SLP(gpy3-3, INPUT, DOWN);
+		PIN_SLP(gpy3-4, INPUT, DOWN);
+		PIN_SLP(gpy3-5, INPUT, DOWN);
+		PIN_SLP(gpy3-6, INPUT, DOWN);
+		PIN_SLP(gpy3-7, INPUT, DOWN);
+
+		PIN_SLP(gpy4-0, INPUT, DOWN);
+		PIN_SLP(gpy4-1, INPUT, DOWN);
+		PIN_SLP(gpy4-2, INPUT, DOWN);
+		PIN_SLP(gpy4-3, INPUT, DOWN);
+		PIN_SLP(gpy4-4, INPUT, DOWN);
+		PIN_SLP(gpy4-5, INPUT, DOWN);
+		PIN_SLP(gpy4-6, INPUT, DOWN);
+		PIN_SLP(gpy4-7, INPUT, DOWN);
+
+		PIN_SLP(gpy5-0, INPUT, DOWN);
+		PIN_SLP(gpy5-1, INPUT, DOWN);
+		PIN_SLP(gpy5-2, INPUT, DOWN);
+		PIN_SLP(gpy5-3, INPUT, DOWN);
+		PIN_SLP(gpy5-4, INPUT, DOWN);
+		PIN_SLP(gpy5-5, INPUT, DOWN);
+		PIN_SLP(gpy5-6, INPUT, DOWN);
+		PIN_SLP(gpy5-7, INPUT, DOWN);
+
+		PIN_SLP(gpy6-0, INPUT, DOWN);
+		PIN_SLP(gpy6-1, INPUT, DOWN);
+		PIN_SLP(gpy6-2, INPUT, DOWN);
+		PIN_SLP(gpy6-3, INPUT, DOWN);
+		PIN_SLP(gpy6-4, INPUT, DOWN);
+		PIN_SLP(gpy6-5, INPUT, DOWN);
+		PIN_SLP(gpy6-6, INPUT, DOWN);
+		PIN_SLP(gpy6-7, INPUT, DOWN);
+	};
+};
+
+&pinctrl_2 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&sleep2>;
+
+	sleep2: sleep-states {
+		PIN_SLP(gpz-0, INPUT, DOWN);
+		PIN_SLP(gpz-1, INPUT, DOWN);
+		PIN_SLP(gpz-2, INPUT, DOWN);
+		PIN_SLP(gpz-3, INPUT, DOWN);
+		PIN_SLP(gpz-4, INPUT, DOWN);
+		PIN_SLP(gpz-5, INPUT, DOWN);
+		PIN_SLP(gpz-6, INPUT, DOWN);
+	};
+};
+
+&pinctrl_3 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&sleep3>;
+
+	sleep3: sleep-states {
+		PIN_SLP(gpv0-0, INPUT, DOWN);
+		PIN_SLP(gpv0-1, INPUT, DOWN);
+		PIN_SLP(gpv0-2, INPUT, DOWN);
+		PIN_SLP(gpv0-3, INPUT, DOWN);
+		PIN_SLP(gpv0-4, INPUT, DOWN);
+		PIN_SLP(gpv0-5, INPUT, DOWN);
+		PIN_SLP(gpv0-6, INPUT, DOWN);
+		PIN_SLP(gpv0-7, INPUT, DOWN);
+
+		PIN_SLP(gpv1-0, INPUT, DOWN);
+		PIN_SLP(gpv1-1, INPUT, DOWN);
+		PIN_SLP(gpv1-2, INPUT, DOWN);
+		PIN_SLP(gpv1-3, INPUT, DOWN);
+		PIN_SLP(gpv1-4, INPUT, DOWN);
+		PIN_SLP(gpv1-5, INPUT, DOWN);
+		PIN_SLP(gpv1-6, INPUT, DOWN);
+		PIN_SLP(gpv1-7, INPUT, DOWN);
+
+		PIN_SLP(gpv2-0, INPUT, DOWN);
+		PIN_SLP(gpv2-1, INPUT, DOWN);
+		PIN_SLP(gpv2-2, INPUT, DOWN);
+		PIN_SLP(gpv2-3, INPUT, DOWN);
+		PIN_SLP(gpv2-4, INPUT, DOWN);
+		PIN_SLP(gpv2-5, INPUT, DOWN);
+		PIN_SLP(gpv2-6, INPUT, DOWN);
+		PIN_SLP(gpv2-7, INPUT, DOWN);
+
+		PIN_SLP(gpv3-0, INPUT, DOWN);
+		PIN_SLP(gpv3-1, INPUT, DOWN);
+		PIN_SLP(gpv3-2, INPUT, DOWN);
+		PIN_SLP(gpv3-3, INPUT, DOWN);
+		PIN_SLP(gpv3-4, INPUT, DOWN);
+		PIN_SLP(gpv3-5, INPUT, DOWN);
+		PIN_SLP(gpv3-6, INPUT, DOWN);
+		PIN_SLP(gpv3-7, INPUT, DOWN);
+
+		PIN_SLP(gpv4-0, INPUT, DOWN);
+		PIN_SLP(gpv4-1, INPUT, DOWN);
+	};
+};
+
+&pmu_system_controller {
+	assigned-clocks = <&pmu_system_controller 0>;
+	assigned-clock-parents = <&clock CLK_XUSBXTI>;
+};
+
+&rtc {
+	clocks = <&clock CLK_RTC>, <&max77686 MAX77686_CLK_AP>;
+	clock-names = "rtc", "rtc_src";
+	status = "okay";
+};
+
+&sdhci_2 {
+	bus-width = <4>;
+	cd-gpios = <&gpx3 4 GPIO_ACTIVE_LOW>;
+	pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4 &sdhci2_cd>;
+	pinctrl-names = "default";
+	vmmc-supply = <&ldo21_reg>;
+	status = "okay";
+};
+
+&sdhci_3 {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	non-removable;
+	bus-width = <4>;
+	mmc-pwrseq = <&wlan_pwrseq>;
+
+	pinctrl-names = "default";
+	pinctrl-0 = <&sd3_clk &sd3_cmd &sd3_wifi>;
+	status = "okay";
+
+	wifi@1 {
+		compatible = "brcm,bcm4329-fmac";
+		reg = <0x1>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&wifi_host_wake>;
+		interrupt-parent = <&gpx2>;
+		interrupts = <5 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names = "host-wake";
+	};
+};
+
+&serial_0 {
+	pinctrl-0 = <&uart0_data &uart0_fctl>;
+	pinctrl-names = "default";
+	status = "okay";
+
+	bluetooth {
+		compatible = "brcm,bcm4330-bt";
+		pinctrl-0 = <&bt_shutdown &bt_device_wakeup &bt_host_wakeup>;
+		pinctrl-names = "default";
+
+		max-speed = <2000000>;
+		shutdown-gpios = <&gpl0 6 GPIO_ACTIVE_HIGH>;
+		device-wakeup-gpios = <&gpx3 1 GPIO_ACTIVE_HIGH>;
+		host-wakeup-gpios = <&gpx2 6 GPIO_ACTIVE_HIGH>;
+		clocks = <&max77686 MAX77686_CLK_PMIC>;
+		clock-names = "lpo";
+	};
+};
+
+&serial_2 {
+	pinctrl-0 = <&uart_sel>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&tmu {
+	status = "okay";
+};