Skip to contentSkip to conversation

paz00 updates for 3.3

PATCH New Marc Dietrich 4 participants 9 messages Nov 1, 2011 – Nov 21, 2011

Subsystems (6)
lore
Share & tools
lore

Marc Dietrich

author maintainer
#0 lore raw

v4 cover paz00 updates for 3.3

Hi,

the following three patches are intended for the 3.3 merge window and are based on linux-next.

The first one adds wakeup support similar to seaboard, but with the difference that the wakeup gpio is connected to the embedded controller instead of a real gpio key.

The second patch adds device tree support for the nvec driver. This way we can make use of it without adding more platform devices to the board files (and it is also modern to do so).

The final one adds device tree support for paz00. The way the nvec it is initialized will probably change in the future, but we like to include it for now as it makes debugging easier.

The patches are against linux-next from Nov 1st.

Thanks

Marc

Changes since v3
- use of_property_read_u32 in nvec
- also disable uart-e in the device tree

Changes since v2
- remove the mem= from the bootargs, this is handled by the memory property already
- change the root device until the sdhci init order can be changed
- do not init unused serial ports
- add dt documentation for nvec
- remove CONFIG_OF #ifdefs from nvec.c
- exchange the order of patch 2 and 3
Changes since v1
- replace addition of the embedded controller to the board file by a device-tree based implementation.

Marc Dietrich (3):
ARM: tegra: paz00: add support for wakeup gpio key
staging: nvec: add device tree support arm/dt: tegra: add dts file for paz00

 .../devicetree/bindings/nvec/nvec_nvidia.txt       |    9 ++
 arch/arm/boot/dts/tegra-paz00.dts                  |   82 ++++++++++++++++++++
 arch/arm/mach-tegra/Makefile                       |    1 +
 arch/arm/mach-tegra/Makefile.boot                  |    1 +
 arch/arm/mach-tegra/board-dt.c                     |    3 +
 arch/arm/mach-tegra/board-paz00.c                  |   27 +++++++
 arch/arm/mach-tegra/board-paz00.h                  |    3 +
 drivers/staging/nvec/nvec.c                        |   30 +++++++-
 8 files changed, 154 insertions(+), 2 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/nvec/nvec_nvidia.txt
 create mode 100644 arch/arm/boot/dts/tegra-paz00.dts
Signature · 1 line
1.7.5.4
author maintainer
#1 lore raw

PATCH v4 1/3 ARM: tegra: paz00: add support for wakeup gpio key

This adds support for a wakeup gpio which is connected to the embedded controller. This will be used later on for wakeup from suspend.

---
 arch/arm/mach-tegra/board-paz00.c |   27 +++++++++++++++++++++++++++
 arch/arm/mach-tegra/board-paz00.h |    3 +++
 2 files changed, 30 insertions(+), 0 deletions(-)
arch/arm/mach-tegra/board-paz00.c +27 -0
index 55c55ba..799e420 100644
@@ -23,8 +23,10 @@
 #include <linux/serial_8250.h>
 #include <linux/clk.h>
 #include <linux/dma-mapping.h>
+#include <linux/gpio_keys.h>
 #include <linux/pda_power.h>
 #include <linux/io.h>
+#include <linux/input.h>
 #include <linux/i2c.h>
 #include <linux/gpio.h>
 #include <linux/rfkill-gpio.h>
@@ -114,12 +116,37 @@ static struct platform_device leds_gpio = {
         },
 };
 
+static struct gpio_keys_button paz00_gpio_keys_buttons[] = {
+	{
+		.code		= KEY_POWER,
+		.gpio		= TEGRA_GPIO_POWERKEY,
+		.active_low	= 1,
+		.desc		= "Power",
+		.type		= EV_KEY,
+		.wakeup		= 1,
+	},
+};
+
+static struct gpio_keys_platform_data paz00_gpio_keys = {
+	.buttons	= paz00_gpio_keys_buttons,
+	.nbuttons	= ARRAY_SIZE(paz00_gpio_keys_buttons),
+};
+
+static struct platform_device gpio_keys_device = {
+	.name	= "gpio-keys",
+	.id	= -1,
+	.dev	= {
+		.platform_data = &paz00_gpio_keys,
+	},
+};
+
 static struct platform_device *paz00_devices[] __initdata = {
 	&debug_uart,
 	&tegra_sdhci_device4,
 	&tegra_sdhci_device1,
 	&wifi_rfkill_device,
 	&leds_gpio,
+	&gpio_keys_device,
 };
 
 static void paz00_i2c_init(void)
arch/arm/mach-tegra/board-paz00.h +3 -0
index 8aff06e..ffa83f5 100644
@@ -32,6 +32,9 @@
 #define TEGRA_WIFI_RST			TEGRA_GPIO_PD1
 #define TEGRA_WIFI_LED			TEGRA_GPIO_PD0
 
+/* WakeUp */
+#define TEGRA_GPIO_POWERKEY	TEGRA_GPIO_PJ7
+
 void paz00_pinmux_init(void);
 
 #endif
Signature · 1 line
1.7.5.4
author maintainer
#2 lore raw

PATCH v4 2/3 staging: nvec: add device tree support

In reply to Marc Dietrich

This adds device tree support to the nvec driver. By using this method it is no longer necessary to specify platform data through a board file.

Cc devel at driverdev.osuosl.org
Cc Greg KH <[email protected]>
Cc Julian Andres Klode <[email protected]>
Cc Grant Likely <[email protected]>
---
 .../devicetree/bindings/nvec/nvec_nvidia.txt       |    9 ++++++
 drivers/staging/nvec/nvec.c                        |   30 ++++++++++++++++++-
 2 files changed, 37 insertions(+), 2 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/nvec/nvec_nvidia.txt
Documentation/devicetree/bindings/nvec/nvec_nvidia.txt new file +9 -0
new file mode 100644
index 0000000..5aeee53
@@ -0,0 +1,9 @@
+NVIDIA compliant embedded controller
+
+Required properties:
+- compatible : should be "nvidia,nvec".
+- reg : the iomem of the i2c slave controller
+- interrupts : the interrupt line of the i2c slave controller
+- clock-frequency : the frequency of the i2c bus
+- gpios : the gpio used for ec request
+- slave-addr: the i2c address of the slave controller
drivers/staging/nvec/nvec.c +28 -2
index e06b867..fafdfa2 100644
@@ -27,6 +27,8 @@
 #include <linux/interrupt.h>
 #include <linux/io.h>
 #include <linux/irq.h>
+#include <linux/of.h>
+#include <linux/of_gpio.h>
 #include <linux/list.h>
 #include <linux/mfd/core.h>
 #include <linux/mutex.h>
@@ -727,8 +729,24 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev)
 	}
 	platform_set_drvdata(pdev, nvec);
 	nvec->dev = &pdev->dev;
-	nvec->gpio = pdata->gpio;
-	nvec->i2c_addr = pdata->i2c_addr;
+
+	if (pdata) {
+		nvec->gpio = pdata->gpio;
+		nvec->i2c_addr = pdata->i2c_addr;
+	} else if (nvec->dev->of_node) {
+		nvec->gpio = of_get_named_gpio(nvec->dev->of_node, "request-gpios", 0);
+		if (nvec->gpio < 0) {
+			dev_err(&pdev->dev, "no gpio specified");
+			goto failed;
+		}
+		if (of_property_read_u32(nvec->dev->of_node, "slave-addr", &nvec->i2c_addr)) {
+			dev_err(&pdev->dev, "no i2c address specified");
+			goto failed;
+		}
+	} else {
+		dev_err(&pdev->dev, "no platform data\n");
+		goto failed;
+	}
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	if (!res) {
@@ -893,6 +911,13 @@ static int tegra_nvec_resume(struct platform_device *pdev)
 #define tegra_nvec_resume NULL
 #endif
 
+/* Match table for of_platform binding */
+static const struct of_device_id nvidia_nvec_of_match[] __devinitconst = {
+	{ .compatible = "nvidia,nvec", },
+	{},
+};
+MODULE_DEVICE_TABLE(of, nvidia_nvec_of_match);
+
 static struct platform_driver nvec_device_driver = {
 	.probe   = tegra_nvec_probe,
 	.remove  = __devexit_p(tegra_nvec_remove),
@@ -901,6 +926,7 @@ static struct platform_driver nvec_device_driver = {
 	.driver  = {
 		.name = "nvec",
 		.owner = THIS_MODULE,
+		.of_match_table = nvidia_nvec_of_match,
 	}
 };
 
Signature · 1 line
1.7.5.4
#3 lore raw

PATCH 2/3 staging: nvec: add device tree support

Marc Dietrich wrote at Tuesday, November 01, 2011 2:37 PM:

Quoted 3 lines

This adds device tree support to the nvec driver. By using this method it is no longer necessary to specify platform data through a board file.

Signature · 1 line
nvpublic
#4 lore raw

PATCH 2/3 staging: nvec: add device tree support

Quoted 6 lines · Stephen Warren

Marc Dietrich wrote at Tuesday, November 01, 2011 2:37 PM:

Quoted 3 lines

This adds device tree support to the nvec driver. By using this method it is no longer necessary to specify platform data through a board file.

Greg, this one can go through the staging tree. We'll pick up the other pieces of the series through the tegra soc tree.

-Olof

#5 lore raw

PATCH 2/3 staging: nvec: add device tree support

Quoted 6 lines · Olof Johansson
Quoted 5 lines · Stephen Warren

Marc Dietrich wrote at Tuesday, November 01, 2011 2:37 PM:

Quoted 3 lines

This adds device tree support to the nvec driver. By using this method it is no longer necessary to specify platform data through a board file.

Quoted 6 lines
Quoted 1 line

Greg, this one can go through the staging tree. We'll pick up the other pieces of the series through the tegra soc tree.

Ok, will do.

greg k-h

author maintainer
#6 lore raw

PATCH v4 2/3 staging: nvec: add device tree support

Am Mittwoch, 9. November 2011, 11:57:55 schrieb Greg KH:

Quoted 9 lines · Olof Johansson
Quoted 8 lines · Stephen Warren
Quoted 6 lines

Marc Dietrich wrote at Tuesday, November 01, 2011 2:37 PM:

Quoted 3 lines

This adds device tree support to the nvec driver. By using this method it is no longer necessary to specify platform data through a board file.

Quoted 8 lines
Quoted 4 lines

Greg, this one can go through the staging tree. We'll pick up the other pieces of the series through the tegra soc tree.

Ok, will do.

greg k-h

Ping.

Greg, it seems that this patch is still not in staging. Please apply
http://patchwork.ozlabs.org/patch/123140/

Thanks

Marc

author maintainer
#7 lore raw

PATCH v4 3/3 arm/dt: tegra: add dts file for paz00

In reply to Marc Dietrich

This adds a dts file for paz00. As a side effect, this also enables the embedded controller which controls the keyboard, touchpad, power, leds, and some other functions.

---
 arch/arm/boot/dts/tegra-paz00.dts |   82 +++++++++++++++++++++++++++++++++++++
 arch/arm/mach-tegra/Makefile      |    1 +
 arch/arm/mach-tegra/Makefile.boot |    1 +
 arch/arm/mach-tegra/board-dt.c    |    3 +
 4 files changed, 87 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/boot/dts/tegra-paz00.dts
arch/arm/boot/dts/tegra-paz00.dts new file +82 -0
new file mode 100644
index 0000000..15a949f
@@ -0,0 +1,82 @@
+/dts-v1/;
+
+/memreserve/ 0x1c000000 0x04000000;
+/include/ "tegra20.dtsi"
+
+/ {
+	model = "Toshiba AC100 / Dynabook AZ";
+	compatible = "compal,paz00", "nvidia,tegra20";
+
+	chosen {
+		bootargs = "console=ttyS0,115200n8 root=/dev/mmcblk0p1";
+	};
+
+	memory at 0 {
+		reg = <0x00000000 0x20000000>;
+	};
+
+	i2c at 7000c000 {
+		clock-frequency = <400000>;
+	};
+
+	i2c at 7000c400 {
+		clock-frequency = <400000>;
+	};
+
+	i2c at 7000c500 {
+		status = "disable";
+	};
+
+	nvec at 7000c500 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "nvidia,nvec";
+		reg = <0x7000C500 0x100>;
+		interrupts = <124>;
+		clock-frequency = <80000>;
+		request-gpios = <&gpio 170 0>;
+		slave-addr = <138>;
+	};
+
+	i2c at 7000d000 {
+		clock-frequency = <400000>;
+	};
+
+	serial at 70006000 {
+		clock-frequency = <216000000>;
+	};
+
+	serial at 70006040 {
+		status = "disable";
+	};
+
+	serial at 70006200 {
+		status = "disable";
+	};
+
+	serial at 70006300 {
+		clock-frequency = <216000000>;
+	};
+
+	serial at 70006400 {
+		status = "disable";
+	};
+
+	sdhci at c8000000 {
+		cd-gpios = <&gpio 173 0>; /* gpio PV5 */
+		wp-gpios = <&gpio 57 0>;  /* gpio PH1 */
+		power-gpios = <&gpio 155 0>; /* gpio PT3 */
+	};
+
+	sdhci at c8000200 {
+		status = "disable";
+	};
+
+	sdhci at c8000400 {
+		status = "disable";
+	};
+
+	sdhci at c8000600 {
+		support-8bit;
+	};
+};
arch/arm/mach-tegra/Makefile +1 -0
index 91a07e1..b04ebfe6 100644
@@ -31,6 +31,7 @@ obj-${CONFIG_MACH_SEABOARD}             += board-seaboard-pinmux.o
 
 obj-${CONFIG_MACH_TEGRA_DT}             += board-dt.o
 obj-${CONFIG_MACH_TEGRA_DT}             += board-harmony-pinmux.o
+obj-${CONFIG_MACH_TEGRA_DT}             += board-paz00-pinmux.o
 obj-${CONFIG_MACH_TEGRA_DT}             += board-seaboard-pinmux.o
 
 obj-${CONFIG_MACH_TRIMSLICE}            += board-trimslice.o
arch/arm/mach-tegra/Makefile.boot +1 -0
index bd12c9f..152f9fb 100644
@@ -3,5 +3,6 @@ params_phys-$(CONFIG_ARCH_TEGRA_2x_SOC)	:= 0x00000100
 initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC)	:= 0x00800000
 
 dtb-$(CONFIG_MACH_HARMONY) += tegra-harmony.dtb
+dtb-$(CONFIG_MACH_PAZ00) += tegra-paz00.dtb
 dtb-$(CONFIG_MACH_SEABOARD) += tegra-seaboard.dtb
 dtb-$(CONFIG_MACH_VENTANA) += tegra-ventana.dtb
arch/arm/mach-tegra/board-dt.c +3 -0
index d368f8d..379660e 100644
@@ -46,6 +46,7 @@
 #include "devices.h"
 
 void harmony_pinmux_init(void);
+void paz00_pinmux_init(void);
 void seaboard_pinmux_init(void);
 void ventana_pinmux_init(void);
 
@@ -85,6 +86,7 @@ static struct {
 	void (*init)(void);
 } pinmux_configs[] = {
 	{ "nvidia,harmony", harmony_pinmux_init },
+	{ "compal,paz00", paz00_pinmux_init },
 	{ "nvidia,seaboard", seaboard_pinmux_init },
 	{ "nvidia,ventana", ventana_pinmux_init },
 };
@@ -120,6 +122,7 @@ static void __init tegra_dt_init(void)
 
 static const char * tegra_dt_board_compat[] = {
 	"nvidia,harmony",
+	"compal,paz00",
 	"nvidia,seaboard",
 	"nvidia,ventana",
 	NULL
Signature · 1 line
1.7.5.4
#8 lore raw

PATCH 3/3 arm/dt: tegra: add dts file for paz00

Marc Dietrich wrote at Tuesday, November 01, 2011 2:37 PM:

Quoted 3 lines

This adds a dts file for paz00. As a side effect, this also enables the embedded controller which controls the keyboard, touchpad, power, leds, and some other functions.

Signature · 1 line
nvpublic