All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] arm: kirkwood: add support for ZyXEL NSA310
@ 2012-10-25 15:01 Tero Jaasko
  2012-10-25 18:13 ` Jason Cooper
  2012-10-25 18:14 ` Andrew Lunn
  0 siblings, 2 replies; 7+ messages in thread
From: Tero Jaasko @ 2012-10-25 15:01 UTC (permalink / raw)
  To: linux-arm-kernel

Hello,
following patch adds support for the ZyXEL NSA310 NAS box. It has been
tested and developed in a linux-stable/linux-3.6.y tree, up to 3.6.2.
As mentioned in commit, the code is derived from the openwrt.org's 
repository. I have only done the device tree conversion.
I have tested and used it on my NAS without trouble for a while. 
Testing of nand and adt7476 was limited to verifying that they are 
probed as I have no use for them.

In order to use the kernel with stock uBoot, one needs to build with
"make zImage modules dtbs",
"cat arch/arm/boot/kirkwood-nsa310.dtb >> arch/arm/boot/zImage"
"make uImage" 
sequence.

---
>From f31af66eadc0df17bb75c8e5607d56ce6e2ef899 Mon Sep 17 00:00:00 2001
From: Tero Jaasko <tero.jaasko@mail.suomi.net>
Date: Mon, 22 Oct 2012 22:43:37 +0300
Subject: [PATCH] arm: kirkwood: add support for ZyXEL NSA310

Bring in the support for ZyXEL NSA310 NAS box. Code is mostly imported
from the openwrt.org, (https://dev.openwrt.org/browser/trunk/target/
linux/kirkwood/patches-3.3/202-zyxel-nsa-310.patch?rev=31673).

Original code is converted to use flattened device tree descriptions
for the support for serial uart, sata, gpio keys and gpio leds.

Signed-off-by: Tero Jaasko <tero.jaasko@mail.suomi.net>
---
 arch/arm/boot/dts/kirkwood-nsa310.dts |  96 ++++++++++++++++++++
 arch/arm/mach-kirkwood/Kconfig        |   9 ++
 arch/arm/mach-kirkwood/Makefile       |   1 +
 arch/arm/mach-kirkwood/Makefile.boot  |   1 +
 arch/arm/mach-kirkwood/board-dt.c     |   4 +
 arch/arm/mach-kirkwood/board-nsa310.c | 166 ++++++++++++++++++++++++++++++++++
 arch/arm/mach-kirkwood/common.h       |   6 ++
 7 files changed, 283 insertions(+)
 create mode 100644 arch/arm/boot/dts/kirkwood-nsa310.dts
 create mode 100644 arch/arm/mach-kirkwood/board-nsa310.c

diff --git a/arch/arm/boot/dts/kirkwood-nsa310.dts b/arch/arm/boot/dts/kirkwood-nsa310.dts
new file mode 100644
index 0000000..554d81a
--- /dev/null
+++ b/arch/arm/boot/dts/kirkwood-nsa310.dts
@@ -0,0 +1,96 @@
+/dts-v1/;
+
+/include/ "kirkwood.dtsi"
+
+/ {
+	model = "ZyXEL NSA310";
+	compatible = "zyxel,nsa310", "marvell,kirkwood-88f6281", "marvell,kirkwood";
+
+	memory {
+		device_type = "memory";
+		reg = <0x00000000 0x10000000>;
+	};
+
+	chosen {
+		bootargs = "console=ttyS0,115200";
+	};
+
+	ocp at f1000000 {
+		serial at 12000 {
+			clock-frequency = <200000000>;
+			status = "ok";
+		};
+
+		sata at 80000 {
+			status = "okay";
+			nr-ports = <2>;
+		};
+	};
+
+	gpio_keys {
+		compatible = "gpio-keys";
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		button at 1 {
+			label = "Power Button";
+			linux,code = <116>;
+			gpios = <&gpio1 14 0>;
+		};
+		button at 2 {
+			label = "Copy Button";
+			linux,code = <133>;
+			gpios = <&gpio1 5 1>;
+		};
+		button at 3 {
+			label = "Reset Button";
+			linux,code = <0x198>;
+			gpios = <&gpio1 4 1>;
+		};
+	};
+
+	gpio-leds {
+		compatible = "gpio-leds";
+
+		green-sys {
+			label = "nsa310:green:sys";
+			gpios = <&gpio0 28 0>;
+		};
+		red-sys {
+			label = "nsa310:red:sys";
+			gpios = <&gpio0 29 0>;
+		};
+		green-hdd {
+			label = "nsa310:green:hdd";
+			gpios = <&gpio1 9 0>;
+		};
+		red-hdd {
+			label = "nsa310:red:hdd";
+			gpios = <&gpio1 10 0>;
+		};
+		green-esata {
+			label = "nsa310:green:esata";
+			gpios = <&gpio0 12 0>;
+		};
+		red-esata {
+			label = "nsa310:red:esata";
+			gpios = <&gpio0 13 0>;
+		};
+		green-usb {
+			label = "nsa310:green:usb";
+			gpios = <&gpio0 15 0>;
+		};
+		red-usb {
+			label = "nsa310:red:usb";
+			gpios = <&gpio0 16 0>;
+		};
+		green-copy {
+			label = "nsa310:green:copy";
+			gpios = <&gpio1 7 0>;
+		};
+		red-copy {
+			label = "nsa310:red:copy";
+			gpios = <&gpio1 8 0>;
+		};
+	};
+};
diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig
index ca5c15a..1172a2a 100644
--- a/arch/arm/mach-kirkwood/Kconfig
+++ b/arch/arm/mach-kirkwood/Kconfig
@@ -195,6 +195,15 @@ config MACH_T5325
 	  Say 'Y' here if you want your kernel to support the
 	  HP t5325 Thin Client.
 
+config MACH_NSA310_DT
+	bool "ZyXEL NSA-310 (Flattened Device Tree)"
+	select ARCH_KIRKWOOD_DT
+	select ARM_APPENDED_DTB
+	select ARM_ATAG_DTB_COMPAT
+	help
+	  Say 'Y' here if you want your kernel to support the
+	  ZyXEL NSA-310 board (Flattened Device Tree).
+
 endmenu
 
 endif
diff --git a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile
index 055c85a..b2663e2 100644
--- a/arch/arm/mach-kirkwood/Makefile
+++ b/arch/arm/mach-kirkwood/Makefile
@@ -28,3 +28,4 @@ obj-$(CONFIG_MACH_IB62X0_DT)		+= board-ib62x0.o
 obj-$(CONFIG_MACH_TS219_DT)		+= board-ts219.o tsx1x-common.o
 obj-$(CONFIG_MACH_GOFLEXNET_DT)		+= board-goflexnet.o
 obj-$(CONFIG_MACH_LSXL_DT)		+= board-lsxl.o
+obj-$(CONFIG_MACH_NSA310_DT)		+= board-nsa310.o
diff --git a/arch/arm/mach-kirkwood/Makefile.boot b/arch/arm/mach-kirkwood/Makefile.boot
index a13299d..67d8666 100644
--- a/arch/arm/mach-kirkwood/Makefile.boot
+++ b/arch/arm/mach-kirkwood/Makefile.boot
@@ -12,3 +12,4 @@ dtb-$(CONFIG_MACH_TS219_DT)	+= kirkwood-ts219-6282.dtb
 dtb-$(CONFIG_MACH_GOFLEXNET_DT) += kirkwood-goflexnet.dtb
 dtb-$(CONFIG_MACH_LSXL_DT) += kirkwood-lschlv2.dtb
 dtb-$(CONFIG_MACH_LSXL_DT) += kirkwood-lsxhl.dtb
+dtb-$(CONFIG_MACH_NSA310_DT) += kirkwood-nsa310.dtb
diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c
index e4eb450..2a005a7 100644
--- a/arch/arm/mach-kirkwood/board-dt.c
+++ b/arch/arm/mach-kirkwood/board-dt.c
@@ -87,6 +87,9 @@ static void __init kirkwood_dt_init(void)
 	if (of_machine_is_compatible("buffalo,lsxl"))
 		lsxl_init();
 
+	if (of_machine_is_compatible("zyxel,nsa310"))
+		nsa310_init();
+
 	of_platform_populate(NULL, kirkwood_dt_match_table,
 			     kirkwood_auxdata_lookup, NULL);
 }
@@ -100,6 +103,7 @@ static const char *kirkwood_dt_board_compat[] = {
 	"qnap,ts219",
 	"seagate,goflexnet",
 	"buffalo,lsxl",
+	"zyxel,nsa310",
 	NULL
 };
 
diff --git a/arch/arm/mach-kirkwood/board-nsa310.c b/arch/arm/mach-kirkwood/board-nsa310.c
new file mode 100644
index 0000000..4d20841
--- /dev/null
+++ b/arch/arm/mach-kirkwood/board-nsa310.c
@@ -0,0 +1,166 @@
+/*
+ * arch/arm/mach-kirkwood/board-nsa310.c
+ *
+ * ZyXEL NSA-310 Setup
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/i2c.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
+#include <linux/gpio.h>
+
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <mach/kirkwood.h>
+#include "common.h"
+#include "mpp.h"
+
+#define NSA310_GPIO_LED_ESATA_GREEN	12
+#define NSA310_GPIO_LED_ESATA_RED	13
+#define NSA310_GPIO_LED_USB_GREEN	15
+#define NSA310_GPIO_LED_USB_RED		16
+#define NSA310_GPIO_USB_POWER_OFF	21
+#define NSA310_GPIO_LED_SYS_GREEN	28
+#define NSA310_GPIO_LED_SYS_RED		29
+#define NSA310_GPIO_KEY_RESTART		36
+#define NSA310_GPIO_KEY_COPY		37
+#define NSA310_GPIO_LED_COPY_GREEN	39
+#define NSA310_GPIO_LED_COPY_RED	40
+#define NSA310_GPIO_LED_HDD_GREEN	41
+#define NSA310_GPIO_LED_HDD_RED		42
+#define NSA310_GPIO_BUZZER		44
+#define NSA310_GPIO_KEY_POWER		46
+#define NSA310_GPIO_POWER_OFF		48
+
+
+static unsigned int nsa310_mpp_config[] __initdata = {
+	MPP12_GPIO, /* led esata green */
+	MPP13_GPIO, /* led esata red */
+	MPP15_GPIO, /* led usb green */
+	MPP16_GPIO, /* led usb red */
+	MPP21_GPIO, /* control usb power off */
+	MPP28_GPIO, /* led sys green */
+	MPP29_GPIO, /* led sys red */
+	MPP36_GPIO, /* key reset */
+	MPP37_GPIO, /* key copy */
+	MPP39_GPIO, /* led copy green */
+	MPP40_GPIO, /* led copy red */
+	MPP41_GPIO, /* led hdd green */
+	MPP42_GPIO, /* led hdd red */
+	MPP44_GPIO, /* ?? */
+	MPP46_GPIO, /* key power */
+	MPP48_GPIO, /* control power off */
+	0
+};
+
+static struct mtd_partition nsa310_mtd_parts[] = {
+	{
+		.name	= "uboot",
+		.offset	= 0,
+		.size	= 0x100000,
+		.mask_flags = MTD_WRITEABLE,
+	}, {
+		.name	= "uboot_env",
+		.offset	= MTDPART_OFS_NXTBLK,
+		.size	= 0x80000,
+	}, {
+		.name	= "key_store",
+		.offset	= MTDPART_OFS_NXTBLK,
+		.size	= 0x80000,
+	}, {
+		.name	= "info",
+		.offset	= MTDPART_OFS_NXTBLK,
+		.size	= 0x80000,
+	}, {
+		.name	= "etc",
+		.offset	= MTDPART_OFS_NXTBLK,
+		.size	= 0xa00000,
+	}, {
+		.name	= "kernel_1",
+		.offset	= MTDPART_OFS_NXTBLK,
+		.size	= 0xa00000,
+	}, {
+		.name	= "rootfs1",
+		.offset	= MTDPART_OFS_NXTBLK,
+		.size	= 0x2fc0000,
+	}, {
+		.name	= "kernel_2",
+		.offset	= MTDPART_OFS_NXTBLK,
+		.size	= 0xa00000,
+	}, {
+		.name	= "rootfs2",
+		.offset	= MTDPART_OFS_NXTBLK,
+		.size	= 0x2fc0000,
+	},
+};
+
+static struct i2c_board_info __initdata nsa310_i2c_info[] = {
+	{ I2C_BOARD_INFO("adt7476", 0x2e) },
+};
+
+static void nsa310_power_off(void)
+{
+	gpio_set_value(NSA310_GPIO_POWER_OFF, 1);
+}
+
+static int __init nsa310_gpio_request(unsigned int gpio, unsigned long flags,
+				       const char *label)
+{
+	int err;
+
+	err = gpio_request_one(gpio, flags, label);
+	if (err)
+		pr_err("NSA-310: can't setup GPIO%u (%s), err=%d\n",
+			gpio, label, err);
+
+	return err;
+}
+
+static void __init nsa310_gpio_init(void)
+{
+	int err;
+
+	err = nsa310_gpio_request(NSA310_GPIO_POWER_OFF, GPIOF_OUT_INIT_LOW,
+				  "Power Off");
+	if (!err)
+		pm_power_off = nsa310_power_off;
+
+	nsa310_gpio_request(NSA310_GPIO_USB_POWER_OFF, GPIOF_OUT_INIT_LOW,
+			    "USB Power Off");
+}
+
+void __init nsa310_init(void)
+{
+	u32 dev, rev;
+
+	kirkwood_mpp_conf(nsa310_mpp_config);
+
+	nsa310_gpio_init();
+
+	kirkwood_nand_init(ARRAY_AND_SIZE(nsa310_mtd_parts), 35);
+
+	/* this can be removed once the mainline kirkwood.dtsi gets
+	 * the ehci configuration by default */
+	kirkwood_ehci_init();
+
+	kirkwood_pcie_id(&dev, &rev);
+
+	i2c_register_board_info(0, ARRAY_AND_SIZE(nsa310_i2c_info));
+	kirkwood_i2c_init();
+}
+
+static int __init nsa310_pci_init(void)
+{
+	if (of_machine_is_compatible("zyxel,nsa310"))
+		kirkwood_pcie_init(KW_PCIE0);
+
+	return 0;
+}
+
+subsys_initcall(nsa310_pci_init);
diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h
index 304dd1a..a9256d7 100644
--- a/arch/arm/mach-kirkwood/common.h
+++ b/arch/arm/mach-kirkwood/common.h
@@ -94,6 +94,12 @@ void lsxl_init(void);
 static inline void lsxl_init(void) {};
 #endif
 
+#ifdef CONFIG_MACH_NSA310_DT
+void nsa310_init(void);
+#else
+static inline void nsa310_init(void) {};
+#endif
+
 /* early init functions not converted to fdt yet */
 char *kirkwood_id(void);
 void kirkwood_l2_init(void);
-- 
1.7.12.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH] arm: kirkwood: add support for ZyXEL NSA310
  2012-10-25 15:01 [PATCH] arm: kirkwood: add support for ZyXEL NSA310 Tero Jaasko
@ 2012-10-25 18:13 ` Jason Cooper
  2012-10-26 17:25   ` Tero Jaasko
  2012-10-25 18:14 ` Andrew Lunn
  1 sibling, 1 reply; 7+ messages in thread
From: Jason Cooper @ 2012-10-25 18:13 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Tero,

Thanks for the patch!

On Thu, Oct 25, 2012 at 06:01:00PM +0300, Tero Jaasko wrote:
> Hello,
> following patch adds support for the ZyXEL NSA310 NAS box. It has been
> tested and developed in a linux-stable/linux-3.6.y tree, up to 3.6.2.

hmmm, there probably won't be any conflicts when I go to apply this, but
in the future, please base against a tag in Linus' tree.  eg v3.6

> As mentioned in commit, the code is derived from the openwrt.org's 
> repository. I have only done the device tree conversion.
> I have tested and used it on my NAS without trouble for a while. 
> Testing of nand and adt7476 was limited to verifying that they are 
> probed as I have no use for them.
> 
> In order to use the kernel with stock uBoot, one needs to build with
> "make zImage modules dtbs",
> "cat arch/arm/boot/kirkwood-nsa310.dtb >> arch/arm/boot/zImage"
> "make uImage" 
> sequence.

The above comments are typically added after SoB,--- and before the
diffstat.

> ---
> From f31af66eadc0df17bb75c8e5607d56ce6e2ef899 Mon Sep 17 00:00:00 2001
> From: Tero Jaasko <tero.jaasko@mail.suomi.net>
> Date: Mon, 22 Oct 2012 22:43:37 +0300
> Subject: [PATCH] arm: kirkwood: add support for ZyXEL NSA310
> 
> Bring in the support for ZyXEL NSA310 NAS box. Code is mostly imported
> from the openwrt.org, (https://dev.openwrt.org/browser/trunk/target/
> linux/kirkwood/patches-3.3/202-zyxel-nsa-310.patch?rev=31673).
> 
> Original code is converted to use flattened device tree descriptions
> for the support for serial uart, sata, gpio keys and gpio leds.
> 
> Signed-off-by: Tero Jaasko <tero.jaasko@mail.suomi.net>
> ---
>  arch/arm/boot/dts/kirkwood-nsa310.dts |  96 ++++++++++++++++++++
>  arch/arm/mach-kirkwood/Kconfig        |   9 ++
>  arch/arm/mach-kirkwood/Makefile       |   1 +
>  arch/arm/mach-kirkwood/Makefile.boot  |   1 +
>  arch/arm/mach-kirkwood/board-dt.c     |   4 +
>  arch/arm/mach-kirkwood/board-nsa310.c | 166 ++++++++++++++++++++++++++++++++++
>  arch/arm/mach-kirkwood/common.h       |   6 ++
>  7 files changed, 283 insertions(+)
>  create mode 100644 arch/arm/boot/dts/kirkwood-nsa310.dts
>  create mode 100644 arch/arm/mach-kirkwood/board-nsa310.c
> 
> diff --git a/arch/arm/boot/dts/kirkwood-nsa310.dts b/arch/arm/boot/dts/kirkwood-nsa310.dts
> new file mode 100644
> index 0000000..554d81a
> --- /dev/null
> +++ b/arch/arm/boot/dts/kirkwood-nsa310.dts
> @@ -0,0 +1,96 @@
> +/dts-v1/;
> +
> +/include/ "kirkwood.dtsi"
> +
> +/ {
> +	model = "ZyXEL NSA310";
> +	compatible = "zyxel,nsa310", "marvell,kirkwood-88f6281", "marvell,kirkwood";

Is there only one variant of the nsa310?  eg did they change flash types
or ram size during a production run?  Whether they did or not, we prefer
to be as specific as possible here, eg "zyxel,nsa310-PRODNUM" If you can
locate a PRODNUM that will most likely change if they change the BOM,
etc.  Please add this string in addition to what you currently have.

> +
> +	memory {
> +		device_type = "memory";
> +		reg = <0x00000000 0x10000000>;
> +	};
> +
> +	chosen {
> +		bootargs = "console=ttyS0,115200";
> +	};
> +
> +	ocp at f1000000 {
> +		serial at 12000 {
> +			clock-frequency = <200000000>;
> +			status = "ok";
> +		};
> +
> +		sata at 80000 {
> +			status = "okay";
> +			nr-ports = <2>;
> +		};
> +	};
> +
> +	gpio_keys {
> +		compatible = "gpio-keys";
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		button at 1 {
> +			label = "Power Button";
> +			linux,code = <116>;
> +			gpios = <&gpio1 14 0>;
> +		};
> +		button at 2 {
> +			label = "Copy Button";
> +			linux,code = <133>;
> +			gpios = <&gpio1 5 1>;
> +		};
> +		button at 3 {
> +			label = "Reset Button";
> +			linux,code = <0x198>;
> +			gpios = <&gpio1 4 1>;
> +		};
> +	};
> +
> +	gpio-leds {
> +		compatible = "gpio-leds";
> +
> +		green-sys {
> +			label = "nsa310:green:sys";
> +			gpios = <&gpio0 28 0>;
> +		};
> +		red-sys {
> +			label = "nsa310:red:sys";
> +			gpios = <&gpio0 29 0>;
> +		};
> +		green-hdd {
> +			label = "nsa310:green:hdd";
> +			gpios = <&gpio1 9 0>;
> +		};
> +		red-hdd {
> +			label = "nsa310:red:hdd";
> +			gpios = <&gpio1 10 0>;
> +		};
> +		green-esata {
> +			label = "nsa310:green:esata";
> +			gpios = <&gpio0 12 0>;
> +		};
> +		red-esata {
> +			label = "nsa310:red:esata";
> +			gpios = <&gpio0 13 0>;
> +		};
> +		green-usb {
> +			label = "nsa310:green:usb";
> +			gpios = <&gpio0 15 0>;
> +		};
> +		red-usb {
> +			label = "nsa310:red:usb";
> +			gpios = <&gpio0 16 0>;
> +		};
> +		green-copy {
> +			label = "nsa310:green:copy";
> +			gpios = <&gpio1 7 0>;
> +		};
> +		red-copy {
> +			label = "nsa310:red:copy";
> +			gpios = <&gpio1 8 0>;
> +		};
> +	};
> +};
> diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig
> index ca5c15a..1172a2a 100644
> --- a/arch/arm/mach-kirkwood/Kconfig
> +++ b/arch/arm/mach-kirkwood/Kconfig
> @@ -195,6 +195,15 @@ config MACH_T5325
>  	  Say 'Y' here if you want your kernel to support the
>  	  HP t5325 Thin Client.
>  
> +config MACH_NSA310_DT
> +	bool "ZyXEL NSA-310 (Flattened Device Tree)"
> +	select ARCH_KIRKWOOD_DT
> +	select ARM_APPENDED_DTB
> +	select ARM_ATAG_DTB_COMPAT

I would prefer not to enable APPENDED_DTB by default.

> +	help
> +	  Say 'Y' here if you want your kernel to support the
> +	  ZyXEL NSA-310 board (Flattened Device Tree).
> +
>  endmenu
>  
>  endif
> diff --git a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile
> index 055c85a..b2663e2 100644
> --- a/arch/arm/mach-kirkwood/Makefile
> +++ b/arch/arm/mach-kirkwood/Makefile
> @@ -28,3 +28,4 @@ obj-$(CONFIG_MACH_IB62X0_DT)		+= board-ib62x0.o
>  obj-$(CONFIG_MACH_TS219_DT)		+= board-ts219.o tsx1x-common.o
>  obj-$(CONFIG_MACH_GOFLEXNET_DT)		+= board-goflexnet.o
>  obj-$(CONFIG_MACH_LSXL_DT)		+= board-lsxl.o
> +obj-$(CONFIG_MACH_NSA310_DT)		+= board-nsa310.o
> diff --git a/arch/arm/mach-kirkwood/Makefile.boot b/arch/arm/mach-kirkwood/Makefile.boot
> index a13299d..67d8666 100644
> --- a/arch/arm/mach-kirkwood/Makefile.boot
> +++ b/arch/arm/mach-kirkwood/Makefile.boot
> @@ -12,3 +12,4 @@ dtb-$(CONFIG_MACH_TS219_DT)	+= kirkwood-ts219-6282.dtb
>  dtb-$(CONFIG_MACH_GOFLEXNET_DT) += kirkwood-goflexnet.dtb
>  dtb-$(CONFIG_MACH_LSXL_DT) += kirkwood-lschlv2.dtb
>  dtb-$(CONFIG_MACH_LSXL_DT) += kirkwood-lsxhl.dtb
> +dtb-$(CONFIG_MACH_NSA310_DT) += kirkwood-nsa310.dtb
> diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c
> index e4eb450..2a005a7 100644
> --- a/arch/arm/mach-kirkwood/board-dt.c
> +++ b/arch/arm/mach-kirkwood/board-dt.c
> @@ -87,6 +87,9 @@ static void __init kirkwood_dt_init(void)
>  	if (of_machine_is_compatible("buffalo,lsxl"))
>  		lsxl_init();
>  
> +	if (of_machine_is_compatible("zyxel,nsa310"))
> +		nsa310_init();
> +
>  	of_platform_populate(NULL, kirkwood_dt_match_table,
>  			     kirkwood_auxdata_lookup, NULL);
>  }
> @@ -100,6 +103,7 @@ static const char *kirkwood_dt_board_compat[] = {
>  	"qnap,ts219",
>  	"seagate,goflexnet",
>  	"buffalo,lsxl",
> +	"zyxel,nsa310",
>  	NULL
>  };
>  
> diff --git a/arch/arm/mach-kirkwood/board-nsa310.c b/arch/arm/mach-kirkwood/board-nsa310.c
> new file mode 100644
> index 0000000..4d20841
> --- /dev/null
> +++ b/arch/arm/mach-kirkwood/board-nsa310.c
> @@ -0,0 +1,166 @@
> +/*
> + * arch/arm/mach-kirkwood/board-nsa310.c
> + *
> + * ZyXEL NSA-310 Setup

Copyright?

> + *
> + * This file is licensed under the terms of the GNU General Public
> + * License version 2.  This program is licensed "as is" without any
> + * warranty of any kind, whether express or implied.
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/init.h>
> +#include <linux/i2c.h>
> +#include <linux/mtd/mtd.h>
> +#include <linux/mtd/partitions.h>
> +#include <linux/gpio.h>
> +
> +#include <asm/mach-types.h>
> +#include <asm/mach/arch.h>
> +#include <mach/kirkwood.h>
> +#include "common.h"
> +#include "mpp.h"
> +
> +#define NSA310_GPIO_LED_ESATA_GREEN	12
> +#define NSA310_GPIO_LED_ESATA_RED	13
> +#define NSA310_GPIO_LED_USB_GREEN	15
> +#define NSA310_GPIO_LED_USB_RED		16
> +#define NSA310_GPIO_USB_POWER_OFF	21
> +#define NSA310_GPIO_LED_SYS_GREEN	28
> +#define NSA310_GPIO_LED_SYS_RED		29
> +#define NSA310_GPIO_KEY_RESTART		36
> +#define NSA310_GPIO_KEY_COPY		37
> +#define NSA310_GPIO_LED_COPY_GREEN	39
> +#define NSA310_GPIO_LED_COPY_RED	40
> +#define NSA310_GPIO_LED_HDD_GREEN	41
> +#define NSA310_GPIO_LED_HDD_RED		42
> +#define NSA310_GPIO_BUZZER		44
> +#define NSA310_GPIO_KEY_POWER		46
> +#define NSA310_GPIO_POWER_OFF		48

Please remove any of the above #define's that aren't used.

> +
> +
> +static unsigned int nsa310_mpp_config[] __initdata = {
> +	MPP12_GPIO, /* led esata green */
> +	MPP13_GPIO, /* led esata red */
> +	MPP15_GPIO, /* led usb green */
> +	MPP16_GPIO, /* led usb red */
> +	MPP21_GPIO, /* control usb power off */
> +	MPP28_GPIO, /* led sys green */
> +	MPP29_GPIO, /* led sys red */
> +	MPP36_GPIO, /* key reset */
> +	MPP37_GPIO, /* key copy */
> +	MPP39_GPIO, /* led copy green */
> +	MPP40_GPIO, /* led copy red */
> +	MPP41_GPIO, /* led hdd green */
> +	MPP42_GPIO, /* led hdd red */
> +	MPP44_GPIO, /* ?? */
> +	MPP46_GPIO, /* key power */
> +	MPP48_GPIO, /* control power off */
> +	0
> +};

There is a patch series to convert all kirkwood DT boards over to DT
init of MPP is under review currently.  If things go well, I'd like to
see this use it as well.

> +
> +static struct mtd_partition nsa310_mtd_parts[] = {
> +	{
> +		.name	= "uboot",
> +		.offset	= 0,
> +		.size	= 0x100000,
> +		.mask_flags = MTD_WRITEABLE,
> +	}, {
> +		.name	= "uboot_env",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0x80000,
> +	}, {
> +		.name	= "key_store",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0x80000,
> +	}, {
> +		.name	= "info",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0x80000,
> +	}, {
> +		.name	= "etc",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0xa00000,
> +	}, {
> +		.name	= "kernel_1",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0xa00000,
> +	}, {
> +		.name	= "rootfs1",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0x2fc0000,
> +	}, {
> +		.name	= "kernel_2",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0xa00000,
> +	}, {
> +		.name	= "rootfs2",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0x2fc0000,
> +	},
> +};

Please move the above partition definitions into the dts file, you can
then remove all of the nand init and relevant includes.

> +
> +static struct i2c_board_info __initdata nsa310_i2c_info[] = {
> +	{ I2C_BOARD_INFO("adt7476", 0x2e) },
> +};

how far off from the adt7461 (lm90) is this?  If similar, please
consider extending lm90's compatibility list and describing this in the
dts instead.

> +
> +static void nsa310_power_off(void)
> +{
> +	gpio_set_value(NSA310_GPIO_POWER_OFF, 1);
> +}
> +
> +static int __init nsa310_gpio_request(unsigned int gpio, unsigned long flags,
> +				       const char *label)
> +{
> +	int err;
> +
> +	err = gpio_request_one(gpio, flags, label);
> +	if (err)
> +		pr_err("NSA-310: can't setup GPIO%u (%s), err=%d\n",
> +			gpio, label, err);
> +
> +	return err;
> +}
> +
> +static void __init nsa310_gpio_init(void)
> +{
> +	int err;
> +
> +	err = nsa310_gpio_request(NSA310_GPIO_POWER_OFF, GPIOF_OUT_INIT_LOW,
> +				  "Power Off");
> +	if (!err)
> +		pm_power_off = nsa310_power_off;

This doesn't smell right.

> +
> +	nsa310_gpio_request(NSA310_GPIO_USB_POWER_OFF, GPIOF_OUT_INIT_LOW,
> +			    "USB Power Off");
> +}
> +
> +void __init nsa310_init(void)
> +{
> +	u32 dev, rev;
> +
> +	kirkwood_mpp_conf(nsa310_mpp_config);
> +
> +	nsa310_gpio_init();
> +
> +	kirkwood_nand_init(ARRAY_AND_SIZE(nsa310_mtd_parts), 35);
> +
> +	/* this can be removed once the mainline kirkwood.dtsi gets
> +	 * the ehci configuration by default */
> +	kirkwood_ehci_init();
> +
> +	kirkwood_pcie_id(&dev, &rev);

Does this board actually use pcie?  If so, we've been looking for one to
test on.  Just an fyi, we'll probably be hitting you up later for pcie
DT binding testing. ;-)

thx,

Jason.


> +
> +	i2c_register_board_info(0, ARRAY_AND_SIZE(nsa310_i2c_info));
> +	kirkwood_i2c_init();
> +}
> +
> +static int __init nsa310_pci_init(void)
> +{
> +	if (of_machine_is_compatible("zyxel,nsa310"))
> +		kirkwood_pcie_init(KW_PCIE0);
> +
> +	return 0;
> +}
> +
> +subsys_initcall(nsa310_pci_init);
> diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h
> index 304dd1a..a9256d7 100644
> --- a/arch/arm/mach-kirkwood/common.h
> +++ b/arch/arm/mach-kirkwood/common.h
> @@ -94,6 +94,12 @@ void lsxl_init(void);
>  static inline void lsxl_init(void) {};
>  #endif
>  
> +#ifdef CONFIG_MACH_NSA310_DT
> +void nsa310_init(void);
> +#else
> +static inline void nsa310_init(void) {};
> +#endif
> +
>  /* early init functions not converted to fdt yet */
>  char *kirkwood_id(void);
>  void kirkwood_l2_init(void);
> -- 
> 1.7.12.3
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] arm: kirkwood: add support for ZyXEL NSA310
  2012-10-25 15:01 [PATCH] arm: kirkwood: add support for ZyXEL NSA310 Tero Jaasko
  2012-10-25 18:13 ` Jason Cooper
@ 2012-10-25 18:14 ` Andrew Lunn
  2012-10-26 15:56   ` Tero Jaasko
  1 sibling, 1 reply; 7+ messages in thread
From: Andrew Lunn @ 2012-10-25 18:14 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Tero

On Thu, Oct 25, 2012 at 06:01:00PM +0300, Tero Jaasko wrote:
> +#define NSA310_GPIO_LED_ESATA_GREEN	12
> +#define NSA310_GPIO_LED_ESATA_RED	13
> +#define NSA310_GPIO_LED_USB_GREEN	15
> +#define NSA310_GPIO_LED_USB_RED		16
> +#define NSA310_GPIO_USB_POWER_OFF	21
> +#define NSA310_GPIO_LED_SYS_GREEN	28
> +#define NSA310_GPIO_LED_SYS_RED		29
> +#define NSA310_GPIO_KEY_RESTART		36
> +#define NSA310_GPIO_KEY_COPY		37
> +#define NSA310_GPIO_LED_COPY_GREEN	39
> +#define NSA310_GPIO_LED_COPY_RED	40
> +#define NSA310_GPIO_LED_HDD_GREEN	41
> +#define NSA310_GPIO_LED_HDD_RED		42
> +#define NSA310_GPIO_BUZZER		44
> +#define NSA310_GPIO_KEY_POWER		46
> +#define NSA310_GPIO_POWER_OFF		48

It looks like most of these are not used. Please remove them.

> +static struct mtd_partition nsa310_mtd_parts[] = {
> +	{
> +		.name	= "uboot",
> +		.offset	= 0,
> +		.size	= 0x100000,
> +		.mask_flags = MTD_WRITEABLE,
> +	}, {
> +		.name	= "uboot_env",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0x80000,
> +	}, {
> +		.name	= "key_store",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0x80000,
> +	}, {
> +		.name	= "info",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0x80000,
> +	}, {
> +		.name	= "etc",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0xa00000,
> +	}, {
> +		.name	= "kernel_1",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0xa00000,
> +	}, {
> +		.name	= "rootfs1",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0x2fc0000,
> +	}, {
> +		.name	= "kernel_2",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0xa00000,
> +	}, {
> +		.name	= "rootfs2",
> +		.offset	= MTDPART_OFS_NXTBLK,
> +		.size	= 0x2fc0000,
> +	},
> +};

You should be able to put all that into DT. Take a look at

arch/arm/boot/dts/kirkwood-goflexnet.dts for example.

> +
> +static struct i2c_board_info __initdata nsa310_i2c_info[] = {
> +	{ I2C_BOARD_INFO("adt7476", 0x2e) },
> +};

You can also do this in DT as well. kirkwood-ts219.dtsi has

                i2c at 11000 {
                        status = "okay";
                        clock-frequency = <400000>;

                        s35390a: s35390a at 30 {
                                compatible = "s35390a";
                                reg = <0x30>;
                        };

Thanks
	Andrew

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] arm: kirkwood: add support for ZyXEL NSA310
  2012-10-25 18:14 ` Andrew Lunn
@ 2012-10-26 15:56   ` Tero Jaasko
  0 siblings, 0 replies; 7+ messages in thread
From: Tero Jaasko @ 2012-10-26 15:56 UTC (permalink / raw)
  To: linux-arm-kernel


Hello, Andrew
 
> > +#define NSA310_GPIO_LED_ESATA_GREEN	12
> > <..>
> > +#define NSA310_GPIO_POWER_OFF		48
> 
> It looks like most of these are not used. Please remove them.

True. Fixed.

> > +static struct mtd_partition nsa310_mtd_parts[] = {
> > +	{
> > +		.name	= "uboot",
> > +		.offset	= 0,
> > +		.size	= 0x100000,
> > +		.mask_flags = MTD_WRITEABLE,
> > +	}, {
> > <..>
> You should be able to put all that into DT. Take a look at

Correct. I did the conversion and tested that the partitions
can be read with dd and produce exactly the same data before and
after conversion. So, the partition offsets at least should be fine. 

> > +static struct i2c_board_info __initdata nsa310_i2c_info[] = {
> > +	{ I2C_BOARD_INFO("adt7476", 0x2e) },
> > +};
> 
> You can also do this in DT as well. kirkwood-ts219.dtsi has
> 
>                 i2c at 11000 {
>                         status = "okay";
>                         clock-frequency = <400000>;

Ok, I did convert the i2c definition to use the devicetree. 
The adt7476 device itself is not at reach of device tree,
AFAIK and requires more work at there?

Thanks for your valuable comments. Following is a new patch that
should address the problems and mistakes you pointed and also
some of the pointed by Jason Cooper. The nand and i2c are now
defined at DT and I also removed the pointless defines and 
ARM_APPENDED_DTB. It is based against the Linus' official 
3.6 version.

Best regards,
Tero

---
>From 16afb94d976e481f8b5da580a9a2248b0f89dfe5 Mon Sep 17 00:00:00 2001
From: Tero Jaasko <tero.jaasko@mail.suomi.net>
Date: Fri, 26 Oct 2012 17:56:07 +0300
Subject: [PATCH] arm: kirkwood: add support for ZyXEL NSA310

Bring in the support for ZyXEL NSA310 NAS box. Code is mostly imported
from the openwrt.org, (https://dev.openwrt.org/browser/trunk/target/
linux/kirkwood/patches-3.3/202-zyxel-nsa-310.patch?rev=31673).

Original code is converted to use flattened device tree descriptions
for the support for serial uart, i2c, sata, nand, gpio keys and
gpio leds.

Signed-off-by: Tero Jaasko <tero.jaasko@mail.suomi.net>
---
 arch/arm/boot/dts/kirkwood-nsa310.dts | 144 ++++++++++++++++++++++++++++++++++
 arch/arm/mach-kirkwood/Kconfig        |   8 ++
 arch/arm/mach-kirkwood/Makefile       |   1 +
 arch/arm/mach-kirkwood/Makefile.boot  |   1 +
 arch/arm/mach-kirkwood/board-dt.c     |   4 +
 arch/arm/mach-kirkwood/board-nsa310.c | 105 +++++++++++++++++++++++++
 arch/arm/mach-kirkwood/common.h       |   6 ++
 7 files changed, 269 insertions(+)
 create mode 100644 arch/arm/boot/dts/kirkwood-nsa310.dts
 create mode 100644 arch/arm/mach-kirkwood/board-nsa310.c

diff --git a/arch/arm/boot/dts/kirkwood-nsa310.dts b/arch/arm/boot/dts/kirkwood-nsa310.dts
new file mode 100644
index 0000000..5509f96
--- /dev/null
+++ b/arch/arm/boot/dts/kirkwood-nsa310.dts
@@ -0,0 +1,144 @@
+/dts-v1/;
+
+/include/ "kirkwood.dtsi"
+
+/ {
+	model = "ZyXEL NSA310";
+	compatible = "zyxel,nsa310", "marvell,kirkwood-88f6281", "marvell,kirkwood";
+
+	memory {
+		device_type = "memory";
+		reg = <0x00000000 0x10000000>;
+	};
+
+	chosen {
+		bootargs = "console=ttyS0,115200";
+	};
+
+	ocp at f1000000 {
+
+		serial at 12000 {
+			clock-frequency = <200000000>;
+			status = "ok";
+		};
+
+		sata at 80000 {
+			status = "okay";
+			nr-ports = <2>;
+		};
+
+		i2c at 11000 {
+			status = "okay";
+		};
+
+		nand at 3000000 {
+			status = "okay";
+			chip-delay = <35>;
+
+			partition at 0 {
+				label = "uboot";
+				reg = <0x0000000 0x0100000>;
+				read-only;
+			};
+			partition at 100000 {
+				label = "uboot_env";
+				reg = <0x0100000 0x0080000>;
+			};
+			partition at 180000 {
+				label = "key_store";
+				reg = <0x0180000 0x0080000>;
+			};
+			partition at 200000 {
+				label = "info";
+				reg = <0x0200000 0x0080000>;
+			};
+			partition at 280000 {
+				label = "etc";
+				reg = <0x0280000 0x0a00000>;
+			};
+			partition at c80000 {
+				label = "kernel_1";
+				reg = <0x0c80000 0x0a00000>;
+			};
+			partition at 1680000 {
+				label = "rootfs1";
+				reg = <0x1680000 0x2fc0000>;
+			};
+			partition at 4640000 {
+				label = "kernel_2";
+				reg = <0x4640000 0x0a00000>;
+			};
+			partition at 5040000 {
+				label = "rootfs2";
+				reg = <0x5040000 0x2fc0000>;
+			};
+		};
+	};
+
+	gpio_keys {
+		compatible = "gpio-keys";
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		button at 1 {
+			label = "Power Button";
+			linux,code = <116>;
+			gpios = <&gpio1 14 0>;
+		};
+		button at 2 {
+			label = "Copy Button";
+			linux,code = <133>;
+			gpios = <&gpio1 5 1>;
+		};
+		button at 3 {
+			label = "Reset Button";
+			linux,code = <0x198>;
+			gpios = <&gpio1 4 1>;
+		};
+	};
+
+	gpio-leds {
+		compatible = "gpio-leds";
+
+		green-sys {
+			label = "nsa310:green:sys";
+			gpios = <&gpio0 28 0>;
+		};
+		red-sys {
+			label = "nsa310:red:sys";
+			gpios = <&gpio0 29 0>;
+		};
+		green-hdd {
+			label = "nsa310:green:hdd";
+			gpios = <&gpio1 9 0>;
+		};
+		red-hdd {
+			label = "nsa310:red:hdd";
+			gpios = <&gpio1 10 0>;
+		};
+		green-esata {
+			label = "nsa310:green:esata";
+			gpios = <&gpio0 12 0>;
+		};
+		red-esata {
+			label = "nsa310:red:esata";
+			gpios = <&gpio0 13 0>;
+		};
+		green-usb {
+			label = "nsa310:green:usb";
+			gpios = <&gpio0 15 0>;
+		};
+		red-usb {
+			label = "nsa310:red:usb";
+			gpios = <&gpio0 16 0>;
+		};
+		green-copy {
+			label = "nsa310:green:copy";
+			gpios = <&gpio1 7 0>;
+		};
+		red-copy {
+			label = "nsa310:red:copy";
+			gpios = <&gpio1 8 0>;
+		};
+	};
+};
diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig
index ca5c15a..d5e76a9 100644
--- a/arch/arm/mach-kirkwood/Kconfig
+++ b/arch/arm/mach-kirkwood/Kconfig
@@ -195,6 +195,14 @@ config MACH_T5325
 	  Say 'Y' here if you want your kernel to support the
 	  HP t5325 Thin Client.
 
+config MACH_NSA310_DT
+	bool "ZyXEL NSA-310 (Flattened Device Tree)"
+	select ARCH_KIRKWOOD_DT
+	select ARM_ATAG_DTB_COMPAT
+	help
+	  Say 'Y' here if you want your kernel to support the
+	  ZyXEL NSA-310 board (Flattened Device Tree).
+
 endmenu
 
 endif
diff --git a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile
index 055c85a..b2663e2 100644
--- a/arch/arm/mach-kirkwood/Makefile
+++ b/arch/arm/mach-kirkwood/Makefile
@@ -28,3 +28,4 @@ obj-$(CONFIG_MACH_IB62X0_DT)		+= board-ib62x0.o
 obj-$(CONFIG_MACH_TS219_DT)		+= board-ts219.o tsx1x-common.o
 obj-$(CONFIG_MACH_GOFLEXNET_DT)		+= board-goflexnet.o
 obj-$(CONFIG_MACH_LSXL_DT)		+= board-lsxl.o
+obj-$(CONFIG_MACH_NSA310_DT)		+= board-nsa310.o
diff --git a/arch/arm/mach-kirkwood/Makefile.boot b/arch/arm/mach-kirkwood/Makefile.boot
index a13299d..67d8666 100644
--- a/arch/arm/mach-kirkwood/Makefile.boot
+++ b/arch/arm/mach-kirkwood/Makefile.boot
@@ -12,3 +12,4 @@ dtb-$(CONFIG_MACH_TS219_DT)	+= kirkwood-ts219-6282.dtb
 dtb-$(CONFIG_MACH_GOFLEXNET_DT) += kirkwood-goflexnet.dtb
 dtb-$(CONFIG_MACH_LSXL_DT) += kirkwood-lschlv2.dtb
 dtb-$(CONFIG_MACH_LSXL_DT) += kirkwood-lsxhl.dtb
+dtb-$(CONFIG_MACH_NSA310_DT) += kirkwood-nsa310.dtb
diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c
index e4eb450..2a005a7 100644
--- a/arch/arm/mach-kirkwood/board-dt.c
+++ b/arch/arm/mach-kirkwood/board-dt.c
@@ -87,6 +87,9 @@ static void __init kirkwood_dt_init(void)
 	if (of_machine_is_compatible("buffalo,lsxl"))
 		lsxl_init();
 
+	if (of_machine_is_compatible("zyxel,nsa310"))
+		nsa310_init();
+
 	of_platform_populate(NULL, kirkwood_dt_match_table,
 			     kirkwood_auxdata_lookup, NULL);
 }
@@ -100,6 +103,7 @@ static const char *kirkwood_dt_board_compat[] = {
 	"qnap,ts219",
 	"seagate,goflexnet",
 	"buffalo,lsxl",
+	"zyxel,nsa310",
 	NULL
 };
 
diff --git a/arch/arm/mach-kirkwood/board-nsa310.c b/arch/arm/mach-kirkwood/board-nsa310.c
new file mode 100644
index 0000000..027ce83
--- /dev/null
+++ b/arch/arm/mach-kirkwood/board-nsa310.c
@@ -0,0 +1,105 @@
+/*
+ * arch/arm/mach-kirkwood/nsa-310-setup.c
+ *
+ * ZyXEL NSA-310 Setup
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/i2c.h>
+#include <linux/gpio.h>
+
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <mach/kirkwood.h>
+#include "common.h"
+#include "mpp.h"
+
+#define NSA310_GPIO_USB_POWER_OFF	21
+#define NSA310_GPIO_POWER_OFF		48
+
+static unsigned int nsa310_mpp_config[] __initdata = {
+	MPP12_GPIO, /* led esata green */
+	MPP13_GPIO, /* led esata red */
+	MPP15_GPIO, /* led usb green */
+	MPP16_GPIO, /* led usb red */
+	MPP21_GPIO, /* control usb power off */
+	MPP28_GPIO, /* led sys green */
+	MPP29_GPIO, /* led sys red */
+	MPP36_GPIO, /* key reset */
+	MPP37_GPIO, /* key copy */
+	MPP39_GPIO, /* led copy green */
+	MPP40_GPIO, /* led copy red */
+	MPP41_GPIO, /* led hdd green */
+	MPP42_GPIO, /* led hdd red */
+	MPP44_GPIO, /* ?? */
+	MPP46_GPIO, /* key power */
+	MPP48_GPIO, /* control power off */
+	0
+};
+
+static struct i2c_board_info __initdata nsa310_i2c_info[] = {
+	{ I2C_BOARD_INFO("adt7476", 0x2e) },
+};
+
+static void nsa310_power_off(void)
+{
+	gpio_set_value(NSA310_GPIO_POWER_OFF, 1);
+}
+
+static int __init nsa310_gpio_request(unsigned int gpio, unsigned long flags,
+				       const char *label)
+{
+	int err;
+
+	err = gpio_request_one(gpio, flags, label);
+	if (err)
+		pr_err("NSA-310: can't setup GPIO%u (%s), err=%d\n",
+			gpio, label, err);
+
+	return err;
+}
+
+static void __init nsa310_gpio_init(void)
+{
+	int err;
+
+	err = nsa310_gpio_request(NSA310_GPIO_POWER_OFF, GPIOF_OUT_INIT_LOW,
+				  "Power Off");
+	if (!err)
+		pm_power_off = nsa310_power_off;
+
+	nsa310_gpio_request(NSA310_GPIO_USB_POWER_OFF, GPIOF_OUT_INIT_LOW,
+			    "USB Power Off");
+}
+
+void __init nsa310_init(void)
+{
+	u32 dev, rev;
+
+	kirkwood_mpp_conf(nsa310_mpp_config);
+
+	nsa310_gpio_init();
+
+	/* this can be removed once the mainline kirkwood.dtsi gets
+	 * the ehci configuration by default */
+	kirkwood_ehci_init();
+
+	kirkwood_pcie_id(&dev, &rev);
+
+	i2c_register_board_info(0, ARRAY_AND_SIZE(nsa310_i2c_info));
+}
+
+static int __init nsa310_pci_init(void)
+{
+	if (of_machine_is_compatible("zyxel,nsa310"))
+		kirkwood_pcie_init(KW_PCIE0);
+
+	return 0;
+}
+
+subsys_initcall(nsa310_pci_init);
diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h
index 304dd1a..a9256d7 100644
--- a/arch/arm/mach-kirkwood/common.h
+++ b/arch/arm/mach-kirkwood/common.h
@@ -94,6 +94,12 @@ void lsxl_init(void);
 static inline void lsxl_init(void) {};
 #endif
 
+#ifdef CONFIG_MACH_NSA310_DT
+void nsa310_init(void);
+#else
+static inline void nsa310_init(void) {};
+#endif
+
 /* early init functions not converted to fdt yet */
 char *kirkwood_id(void);
 void kirkwood_l2_init(void);
-- 
1.7.12.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH] arm: kirkwood: add support for ZyXEL NSA310
  2012-10-25 18:13 ` Jason Cooper
@ 2012-10-26 17:25   ` Tero Jaasko
  2012-10-26 18:00     ` Jason Cooper
  2012-10-27  9:11     ` Andrew Lunn
  0 siblings, 2 replies; 7+ messages in thread
From: Tero Jaasko @ 2012-10-26 17:25 UTC (permalink / raw)
  To: linux-arm-kernel


Hello, Jason and thanks for your comments.
 
> hmmm, there probably won't be any conflicts when I go to apply this, but
> in the future, please base against a tag in Linus' tree.  eg v3.6

I see and did that on the new submission attached to Andrew's mail.

> > +	model = "ZyXEL NSA310";
> > +	compatible = "zyxel,nsa310", "marvell,kirkwood-88f6281", "marvell,kirkwood";
> 
> Is there only one variant of the nsa310?  eg did they change flash types
> or ram size during a production run?  Whether they did or not, we prefer
> to be as specific as possible here, eg "zyxel,nsa310-PRODNUM" If you can
> locate a PRODNUM that will most likely change if they change the BOM,
> etc.  Please add this string in addition to what you currently have.i

I have no idea what product number or other id this device has. 
On http://zyxel.nas-central.org/wiki/Category:NSA-310 it is 
said that there is at least a sister model under "TDC Homedisk" label.
The TDC variant seems to have different amount of leds and at least
the NAND partition configuration is also different. And also some 
variant exists on some sources somewhere which might not have been 
sold at all.

The device I have looks like the one described on previous link 
as a "genuine". It does not have even the NSA310 printed in it, 
just "ZyXEL" and two printed stickers, one with ethernet MAC 
address and one with a long number which might be a serial number. 
Or not. It is formatted as S111M32xxxxxx, x being a number. 
The string itself is unknown to google, hence it might be a unique id.

What should we do? Add better device id if/when somebody from
Denmark comes up with a TDC device that requires different DT?

> > +config MACH_NSA310_DT
> > +	bool "ZyXEL NSA-310 (Flattened Device Tree)"
> > +	select ARCH_KIRKWOOD_DT
> > +	select ARM_APPENDED_DTB
> > +	select ARM_ATAG_DTB_COMPAT
> 
> I would prefer not to enable APPENDED_DTB by default.

Ok, I removed that. I just believe it is needed to be actually
boot the device with stock uBoot. Or is there other/better way to bundle the
DT blob into uImage? 

The uBoot my device is dated as "U-Boot 1.1.4 (Feb 22 2011 - 10:31:35) 
Marvell version: 3.4.1", and as far as I know, it does not have the DT 
support. I have not tried with a more recent uBoot. After having bricked 
one Buffalo Ls-xhl with a failed uBoot update, I will not do another 
before populating the JTAG pins on PCB and verifying that the plan 
B works;-)

> > diff --git a/arch/arm/mach-kirkwood/board-nsa310.c b/arch/arm/mach-kirkwood/board-nsa310.c
> > new file mode 100644
> > index 0000000..4d20841
> > --- /dev/null
> > +++ b/arch/arm/mach-kirkwood/board-nsa310.c
> > @@ -0,0 +1,166 @@
> > +/*
> > + * arch/arm/mach-kirkwood/board-nsa310.c
> > + *
> > + * ZyXEL NSA-310 Setup
> 
> Copyright?

..is not really mine at least. I have just deleted ~60% of 
the code taken from openwrt.org's tree (commit at 
https://dev.openwrt.org/browser/trunk/target/linux/kirkwood/
patches-3.3/202-zyxel-nsa-310.patch?rev=31673) and replaced 
it with the dt definitions.

> > + *
> > + * This file is licensed under the terms of the GNU General Public
> > + * License version 2.  This program is licensed "as is" without any
> > + * warranty of any kind, whether express or implied.
> > + */


> > +#define NSA310_GPIO_LED_ESATA_GREEN	12
> Please remove any of the above #define's that aren't used.

Done.

> > +static unsigned int nsa310_mpp_config[] __initdata = {
> > +	MPP12_GPIO, /* led esata green */
> > +	MPP13_GPIO, /* led esata red */
> 
> There is a patch series to convert all kirkwood DT boards over to DT
> init of MPP is under review currently.  If things go well, I'd like to
> see this use it as well.

That will be really a good improvement for all the boards and
conversion would be easy too. After this, ehci and pcie conversion,
the board-nsa310.c would be something like 70-80 lines instead of 
~270 lines at original nsa-310-setup.c. Sweet.

> > +static struct mtd_partition nsa310_mtd_parts[] = {
> > +	{
> > +		.name	= "uboot",
> Please move the above partition definitions into the dts file, you can
> then remove all of the nand init and relevant includes.

Done.

> > +
> > +static struct i2c_board_info __initdata nsa310_i2c_info[] = {
> > +	{ I2C_BOARD_INFO("adt7476", 0x2e) },
> > +};
> 
> how far off from the adt7461 (lm90) is this?  If similar, please
> consider extending lm90's compatibility list and describing this in the
> dts instead.

I did move at least the I2C to DT. Good catch, this is something 
worth of a experimentation when a free time slot arrives. The chip seems 
to have some sort of compatibility mode with adt7463 so it might just 
work somehow with the other driver too.

> > +
> > +static void nsa310_power_off(void)
> > +{
> > +	gpio_set_value(NSA310_GPIO_POWER_OFF, 1);
> > +}
> > +
> > +static int __init nsa310_gpio_request(unsigned int gpio, unsigned long flags,
> > +				       const char *label)
> > +{
> > +	int err;
> > +
> > +	err = gpio_request_one(gpio, flags, label);
> > +	if (err)
> > +		pr_err("NSA-310: can't setup GPIO%u (%s), err=%d\n",
> > +			gpio, label, err);
> > +
> > +	return err;
> > +}
> > +
> > +static void __init nsa310_gpio_init(void)
> > +{
> > +	int err;
> > +
> > +	err = nsa310_gpio_request(NSA310_GPIO_POWER_OFF, GPIOF_OUT_INIT_LOW,
> > +				  "Power Off");
> > +	if (!err)
> > +		pm_power_off = nsa310_power_off;
> 
> This doesn't smell right.

What do you mean? The wrapper for gpio_request_one() that merely 
serves as a source for debug messages? I can replace it with 
a silent version if wanted. Is there a driver for shutting down device
by some gpio pin defined in DT?

> > +	kirkwood_pcie_id(&dev, &rev);
> 
> Does this board actually use pcie?  If so, we've been looking for one to
> test on.  Just an fyi, we'll probably be hitting you up later for pcie
> DT binding testing. ;-)

If you point to a tree or patches somewhere, I am willing to test it and/or 
modify the nsa310 code to use it.
There is a NIC at end of pcie, or at least this is what the "lspci -vv" prints:

8<----8<------
00:00.0 Memory controller: Marvell Technology Group Ltd. 88F6281 [Kirkwood] ARM SoC (rev 03)
	Subsystem: Marvell Technology Group Ltd. Device 11ab
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 32 bytes
	Interrupt: pin A routed to IRQ 9
	Region 0: Memory@<ignored> (64-bit, prefetchable)
	Capabilities: [40] Power Management version 3
		Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
		Address: 0000000000000000  Data: 0000
	Capabilities: [60] Express (v1) Root Port (Slot-), MSI 00
		DevCap:	MaxPayload 128 bytes, PhantFunc 0, Latency L0s <256ns, L1 <1us
			ExtTag- RBE+ FLReset-
		DevCtl:	Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
			RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
			MaxPayload 128 bytes, MaxReadReq 512 bytes
		DevSta:	CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
		LnkCap:	Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <256ns, L1 unlimited
			ClockPM+ Surprise- LLActRep- BwNot-
		LnkCtl:	ASPM Disabled; RCB 128 bytes Disabled- Retrain- CommClk-
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna- CRSVisible-
		RootCap: CRSVisible-
		RootSta: PME ReqID 0000, PMEStatus- PMEPending-
	Capabilities: [100 v1] Advanced Error Reporting
		UESta:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UEMsk:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UESvrt:	DLP+ SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
		CESta:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
		AERCap:	First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn-

00:01.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)
	Subsystem: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 32 bytes
	Interrupt: pin A routed to IRQ 9
	Region 0: I/O ports at 1000 [size=256]
	Region 2: Memory at e0014000 (64-bit, prefetchable) [size=4K]
	Region 4: Memory at e0010000 (64-bit, prefetchable) [size=16K]
	[virtual] Expansion ROM@e0000000 [disabled] [size=64K]
	Capabilities: [40] Power Management version 3
		Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=375mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
		Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
		Address: 0000000000000000  Data: 0000
	Capabilities: [70] Express (v2) Endpoint, MSI 01
		DevCap:	MaxPayload 256 bytes, PhantFunc 0, Latency L0s <512ns, L1 <64us
			ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
		DevCtl:	Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
			RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop-
			MaxPayload 128 bytes, MaxReadReq 4096 bytes
		DevSta:	CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
		LnkCap:	Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <512ns, L1 <64us
			ClockPM+ Surprise- LLActRep- BwNot-
		LnkCtl:	ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk-
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		DevCap2: Completion Timeout: Not Supported, TimeoutDis+
		DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
		LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dB
			 Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
			 Compliance De-emphasis: -6dB
		LnkSta2: Current De-emphasis Level: -6dB
	Capabilities: [ac] MSI-X: Enable- Count=4 Masked-
		Vector table: BAR=4 offset=00000000
		PBA: BAR=4 offset=00000800
	Capabilities: [cc] Vital Product Data
		Unknown small resource type 00, will not decode more.
	Capabilities: [100 v1] Advanced Error Reporting
		UESta:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UEMsk:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UESvrt:	DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
		CESta:	RxErr+ BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
		AERCap:	First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
	Capabilities: [140 v1] Virtual Channel
		Caps:	LPEVC=0 RefClk=100ns PATEntryBits=1
		Arb:	Fixed- WRR32- WRR64- WRR128-
		Ctrl:	ArbSelect=Fixed
		Status:	InProgress-
		VC0:	Caps:	PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
			Arb:	Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
			Ctrl:	Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
			Status:	NegoPending- InProgress-
	Capabilities: [160 v1] Device Serial Number 00-00-00-00-00-00-00-00
	Kernel driver in use: r8169
8<----8<------

Best regards,
Tero

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] arm: kirkwood: add support for ZyXEL NSA310
  2012-10-26 17:25   ` Tero Jaasko
@ 2012-10-26 18:00     ` Jason Cooper
  2012-10-27  9:11     ` Andrew Lunn
  1 sibling, 0 replies; 7+ messages in thread
From: Jason Cooper @ 2012-10-26 18:00 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Tero,

On Fri, Oct 26, 2012 at 08:25:52PM +0300, Tero Jaasko wrote:
> > hmmm, there probably won't be any conflicts when I go to apply this, but
> > in the future, please base against a tag in Linus' tree.  eg v3.6
> 
> I see and did that on the new submission attached to Andrew's mail.

Just to clarify, -rc's are fine as well, no need to change for this
patch.

> > > +	model = "ZyXEL NSA310";
> > > +	compatible = "zyxel,nsa310", "marvell,kirkwood-88f6281", "marvell,kirkwood";
> > 
> > Is there only one variant of the nsa310?  eg did they change flash types
> > or ram size during a production run?  Whether they did or not, we prefer
> > to be as specific as possible here, eg "zyxel,nsa310-PRODNUM" If you can
> > locate a PRODNUM that will most likely change if they change the BOM,
> > etc.  Please add this string in addition to what you currently have.i
> 
> I have no idea what product number or other id this device has. 
> On http://zyxel.nas-central.org/wiki/Category:NSA-310 it is 
> said that there is at least a sister model under "TDC Homedisk" label.
> The TDC variant seems to have different amount of leds and at least
> the NAND partition configuration is also different. And also some 
> variant exists on some sources somewhere which might not have been 
> sold at all.
> 
> The device I have looks like the one described on previous link 
> as a "genuine". It does not have even the NSA310 printed in it, 
> just "ZyXEL" and two printed stickers, one with ethernet MAC 
> address and one with a long number which might be a serial number. 
> Or not. It is formatted as S111M32xxxxxx, x being a number. 
> The string itself is unknown to google, hence it might be a unique id.
> 
> What should we do? Add better device id if/when somebody from
> Denmark comes up with a TDC device that requires different DT?

Thanks for the explaination, let's leave it the way it is.  If we get
a hold of the TDC Homedisk, we can make it "zyxel,TDC-Homedisk".

> > > +config MACH_NSA310_DT
> > > +	bool "ZyXEL NSA-310 (Flattened Device Tree)"
> > > +	select ARCH_KIRKWOOD_DT
> > > +	select ARM_APPENDED_DTB
> > > +	select ARM_ATAG_DTB_COMPAT
> > 
> > I would prefer not to enable APPENDED_DTB by default.
> 
> Ok, I removed that. I just believe it is needed to be actually
> boot the device with stock uBoot. Or is there other/better way to bundle the
> DT blob into uImage? 

My understanding of the Kernel policy is that APPENDED_DTB defeats the
purpose of having devicetree (one kernel zImage capable of booting on
any ARM board when provided the dtb).  The sole reason I am aware of for
APPENDED_DTB existing in the kernel is to assist end users who are
unable to upgrade their bootloader.

Kirkwood doesn't really have this problem as a lot of the boards have
JTAG access, and those that don't can load a u-boot image over serial
via kwboot.

If you find a kirkwood board that doesn't work with kwboot, please let
us and the u-boot community know so we can fix kwboot.

> The uBoot my device is dated as "U-Boot 1.1.4 (Feb 22 2011 - 10:31:35) 
> Marvell version: 3.4.1", and as far as I know, it does not have the DT 
> support. I have not tried with a more recent uBoot. After having bricked 
> one Buffalo Ls-xhl with a failed uBoot update, I will not do another 
> before populating the JTAG pins on PCB and verifying that the plan 
> B works;-)

Have you tried kwboot to rescue it?  It doesn't require any bootloader
to work.  It's in the u-boot git tree under tools/, since v2012.07.

> > > diff --git a/arch/arm/mach-kirkwood/board-nsa310.c b/arch/arm/mach-kirkwood/board-nsa310.c
> > > new file mode 100644
> > > index 0000000..4d20841
> > > --- /dev/null
> > > +++ b/arch/arm/mach-kirkwood/board-nsa310.c
> > > @@ -0,0 +1,166 @@
> > > +/*
> > > + * arch/arm/mach-kirkwood/board-nsa310.c
> > > + *
> > > + * ZyXEL NSA-310 Setup
> > 
> > Copyright?
> 
> ..is not really mine at least. I have just deleted ~60% of 
> the code taken from openwrt.org's tree (commit at 
> https://dev.openwrt.org/browser/trunk/target/linux/kirkwood/
> patches-3.3/202-zyxel-nsa-310.patch?rev=31673) and replaced 
> it with the dt definitions.

Then please add this information to the commit log so that we can have a
good history of where it came from.

> > > +static unsigned int nsa310_mpp_config[] __initdata = {
> > > +	MPP12_GPIO, /* led esata green */
> > > +	MPP13_GPIO, /* led esata red */
> > 
> > There is a patch series to convert all kirkwood DT boards over to DT
> > init of MPP is under review currently.  If things go well, I'd like to
> > see this use it as well.
> 
> That will be really a good improvement for all the boards and
> conversion would be easy too. After this, ehci and pcie conversion,
> the board-nsa310.c would be something like 70-80 lines instead of 
> ~270 lines at original nsa-310-setup.c. Sweet.

even more than that since the gpio functionality will get wrapped up in
there as well. ;-)

> > > +
> > > +static void nsa310_power_off(void)
> > > +{
> > > +	gpio_set_value(NSA310_GPIO_POWER_OFF, 1);
> > > +}
> > > +
> > > +static int __init nsa310_gpio_request(unsigned int gpio, unsigned long flags,
> > > +				       const char *label)
> > > +{
> > > +	int err;
> > > +
> > > +	err = gpio_request_one(gpio, flags, label);
> > > +	if (err)
> > > +		pr_err("NSA-310: can't setup GPIO%u (%s), err=%d\n",
> > > +			gpio, label, err);
> > > +
> > > +	return err;
> > > +}
> > > +
> > > +static void __init nsa310_gpio_init(void)
> > > +{
> > > +	int err;
> > > +
> > > +	err = nsa310_gpio_request(NSA310_GPIO_POWER_OFF, GPIOF_OUT_INIT_LOW,
> > > +				  "Power Off");
> > > +	if (!err)
> > > +		pm_power_off = nsa310_power_off;
> > 
> > This doesn't smell right.
> 
> What do you mean? The wrapper for gpio_request_one() that merely 
> serves as a source for debug messages? I can replace it with 
> a silent version if wanted. Is there a driver for shutting down device
> by some gpio pin defined in DT?

Sorry, I couldn't quite put my finger on it, and didn't want to delay
feedback to you.  Basically, I was referring to the entire gpio_* block
of code.  No one else needs this much code to accomplish the task,
however, it should all dissappear with the pinctrl conversion.  Let's
leave it as is on the condition that we'll get rid it with the conversion
to DT pinctrl/gpio.

> > > +	kirkwood_pcie_id(&dev, &rev);
> > 
> > Does this board actually use pcie?  If so, we've been looking for one to
> > test on.  Just an fyi, we'll probably be hitting you up later for pcie
> > DT binding testing. ;-)
> 
> If you point to a tree or patches somewhere, I am willing to test it and/or 
> modify the nsa310 code to use it.

Cool, thanks!  We'll hit you up when we get there.  Everyone is pretty
much task saturated atm.

thx,

Jason.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] arm: kirkwood: add support for ZyXEL NSA310
  2012-10-26 17:25   ` Tero Jaasko
  2012-10-26 18:00     ` Jason Cooper
@ 2012-10-27  9:11     ` Andrew Lunn
  1 sibling, 0 replies; 7+ messages in thread
From: Andrew Lunn @ 2012-10-27  9:11 UTC (permalink / raw)
  To: linux-arm-kernel

> > > +
> > > +static struct i2c_board_info __initdata nsa310_i2c_info[] = {
> > > +	{ I2C_BOARD_INFO("adt7476", 0x2e) },
> > > +};
> > 
> > how far off from the adt7461 (lm90) is this?  If similar, please
> > consider extending lm90's compatibility list and describing this in the
> > dts instead.
> 
> I did move at least the I2C to DT. Good catch, this is something 
> worth of a experimentation when a free time slot arrives. The chip seems 
> to have some sort of compatibility mode with adt7463 so it might just 
> work somehow with the other driver too.

Hi Tero

Thanks for moving the I2C bus setup to DT.

The lm90 driver explicitly supports the adt7461. No changes needed. Please
try adding the necessary DT, something like:

                        adt7476: adt7476a at 2e {
                                compatible = "lm90";
                                reg = <0x2e>;
                        };

    Thanks

        Andrew

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2012-10-27  9:11 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-25 15:01 [PATCH] arm: kirkwood: add support for ZyXEL NSA310 Tero Jaasko
2012-10-25 18:13 ` Jason Cooper
2012-10-26 17:25   ` Tero Jaasko
2012-10-26 18:00     ` Jason Cooper
2012-10-27  9:11     ` Andrew Lunn
2012-10-25 18:14 ` Andrew Lunn
2012-10-26 15:56   ` Tero Jaasko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.