public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data
@ 2012-12-14 11:56 Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 02/16] EXYNOS5 : FDT: Add Aliases for I2C device Rajeshwari Shinde
                   ` (14 more replies)
  0 siblings, 15 replies; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

Add I2C device node data for exynos

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 arch/arm/dts/exynos5250.dtsi |   64 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 64 insertions(+), 0 deletions(-)

diff --git a/arch/arm/dts/exynos5250.dtsi b/arch/arm/dts/exynos5250.dtsi
index fa4d498..7a50b2e 100644
--- a/arch/arm/dts/exynos5250.dtsi
+++ b/arch/arm/dts/exynos5250.dtsi
@@ -28,4 +28,68 @@
 		#address-cells = <1>;
 		#size-cells = <0>;
 	};
+
+	i2c at 12c60000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,s3c2440-i2c";
+		reg = <0x12C60000 0x100>;
+		interrupts = <0 56 0>;
+	};
+
+	i2c at 12c70000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,s3c2440-i2c";
+		reg = <0x12C70000 0x100>;
+		interrupts = <0 57 0>;
+	};
+
+	i2c at 12c80000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,s3c2440-i2c";
+		reg = <0x12C80000 0x100>;
+		interrupts = <0 58 0>;
+	};
+
+	i2c at 12c90000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,s3c2440-i2c";
+		reg = <0x12C90000 0x100>;
+		interrupts = <0 59 0>;
+	};
+
+	i2c at 12ca0000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,s3c2440-i2c";
+		reg = <0x12CA0000 0x100>;
+		interrupts = <0 60 0>;
+	};
+
+	i2c at 12cb0000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,s3c2440-i2c";
+		reg = <0x12CB0000 0x100>;
+		interrupts = <0 61 0>;
+	};
+
+	i2c at 12cc0000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,s3c2440-i2c";
+		reg = <0x12CC0000 0x100>;
+		interrupts = <0 62 0>;
+	};
+
+	i2c at 12cd0000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,s3c2440-i2c";
+		reg = <0x12CD0000 0x100>;
+		interrupts = <0 63 0>;
+	};
 };
-- 
1.7.4.4

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

* [U-Boot] [PATCH 02/16] EXYNOS5 : FDT: Add Aliases for I2C device
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 03/16] FDT: Add compatible string for I2C Rajeshwari Shinde
                   ` (13 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

This patch adds aliases for I2C.

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
Acked-by: Heiko Schocher <hs@denx.de>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 board/samsung/dts/exynos5250-smdk5250.dts |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/board/samsung/dts/exynos5250-smdk5250.dts b/board/samsung/dts/exynos5250-smdk5250.dts
index b6fbb67..0f971c0 100644
--- a/board/samsung/dts/exynos5250-smdk5250.dts
+++ b/board/samsung/dts/exynos5250-smdk5250.dts
@@ -16,6 +16,17 @@
 	model = "SAMSUNG SMDK5250 board based on EXYNOS5250";
 	compatible = "samsung,smdk5250", "samsung,exynos5250";
 
+	aliases {
+		i2c0 = "/i2c at 12c60000";
+		i2c1 = "/i2c at 12c70000";
+		i2c2 = "/i2c at 12c80000";
+		i2c3 = "/i2c at 12c90000";
+		i2c4 = "/i2c at 12ca0000";
+		i2c5 = "/i2c at 12cb0000";
+		i2c6 = "/i2c at 12cc0000";
+		i2c7 = "/i2c at 12cd0000";
+	};
+
 	sromc at 12250000 {
 		bank = <1>;
 		srom-timing = <1 9 12 1 6 1 1>;
-- 
1.7.4.4

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

* [U-Boot] [PATCH 03/16] FDT: Add compatible string for I2C
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 02/16] EXYNOS5 : FDT: Add Aliases for I2C device Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 04/16] EXYNOS5: FDT : Decode peripheral id Rajeshwari Shinde
                   ` (12 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

Add required compatible information for I2C driver.

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
Acked-by: Heiko Schocher <hs@denx.de>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 include/fdtdec.h |    1 +
 lib/fdtdec.c     |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/include/fdtdec.h b/include/fdtdec.h
index da2054a..567ad13 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -70,6 +70,7 @@ enum fdt_compat_id {
 	COMPAT_NVIDIA_TEGRA20_DC,	/* Tegra 2 Display controller */
 	COMPAT_SMSC_LAN9215,		/* SMSC 10/100 Ethernet LAN9215 */
 	COMPAT_SAMSUNG_EXYNOS5_SROMC,	/* Exynos5 SROMC */
+	COMPAT_SAMSUNG_S3C2440_I2C,	/* Exynos I2C Controller */
 
 	COMPAT_COUNT,
 };
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index f10ef5a..6ae2dd0 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -47,6 +47,7 @@ static const char * const compat_names[COMPAT_COUNT] = {
 	COMPAT(NVIDIA_TEGRA20_DC, "nvidia,tegra20-dc"),
 	COMPAT(SMSC_LAN9215, "smsc,lan9215"),
 	COMPAT(SAMSUNG_EXYNOS5_SROMC, "samsung,exynos-sromc"),
+	COMPAT(SAMSUNG_S3C2440_I2C, "samsung,s3c2440-i2c"),
 };
 
 const char *fdtdec_get_compatible(enum fdt_compat_id id)
-- 
1.7.4.4

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

* [U-Boot] [PATCH 04/16] EXYNOS5: FDT : Decode peripheral id
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 02/16] EXYNOS5 : FDT: Add Aliases for I2C device Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 03/16] FDT: Add compatible string for I2C Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-26 11:54   ` Minkyu Kang
  2012-12-14 11:56 ` [U-Boot] [PATCH 05/16] I2C: Driver changes for FDT support Rajeshwari Shinde
                   ` (11 subsequent siblings)
  14 siblings, 1 reply; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

Api is added to decode peripheral id based on the interrupt number
of the peripheral.

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by; Simon Glass <sjg@chromium.org>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 arch/arm/cpu/armv7/exynos/pinmux.c        |   28 ++++++++++++++++++++++++++
 arch/arm/include/asm/arch-exynos/periph.h |   31 ++++++++++++++++------------
 arch/arm/include/asm/arch-exynos/pinmux.h |    8 +++++++
 3 files changed, 54 insertions(+), 13 deletions(-)

diff --git a/arch/arm/cpu/armv7/exynos/pinmux.c b/arch/arm/cpu/armv7/exynos/pinmux.c
index f02f441..f9f6911 100644
--- a/arch/arm/cpu/armv7/exynos/pinmux.c
+++ b/arch/arm/cpu/armv7/exynos/pinmux.c
@@ -22,6 +22,7 @@
  */
 
 #include <common.h>
+#include <fdtdec.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/pinmux.h>
 #include <asm/arch/sromc.h>
@@ -396,3 +397,30 @@ int exynos_pinmux_config(int peripheral, int flags)
 		return -1;
 	}
 }
+
+#ifdef CONFIG_OF_CONTROL
+static int exynos5_pinmux_decode_periph_id(const void *blob, int node)
+{
+	int err;
+	u32 cell[3];
+
+	err = fdtdec_get_int_array(blob, node, "interrupts", cell,
+					ARRAY_SIZE(cell));
+	if (err)
+		return PERIPH_ID_NONE;
+
+	if ((131 > cell[1]) || (cell[1] < 31))
+		return cell[1];
+
+	debug(" invalid peripheral id\n");
+	return PERIPH_ID_NONE;
+}
+
+int pinmux_decode_periph_id(const void *blob, int node)
+{
+	if (cpu_is_exynos5())
+		return  exynos5_pinmux_decode_periph_id(blob, node);
+	else
+		return PERIPH_ID_NONE;
+}
+#endif
diff --git a/arch/arm/include/asm/arch-exynos/periph.h b/arch/arm/include/asm/arch-exynos/periph.h
index 13abd2d..783b77c 100644
--- a/arch/arm/include/asm/arch-exynos/periph.h
+++ b/arch/arm/include/asm/arch-exynos/periph.h
@@ -25,12 +25,17 @@
 #define __ASM_ARM_ARCH_PERIPH_H
 
 /*
- * Peripherals requiring clock/pinmux configuration. List will
+ * Peripherals requiring pinmux configuration0. List will
  * grow with support for more devices getting added.
+ * Numbering based on interrupt table.
  *
  */
 enum periph_id {
-	PERIPH_ID_I2C0,
+	PERIPH_ID_UART0 = 51,
+	PERIPH_ID_UART1,
+	PERIPH_ID_UART2,
+	PERIPH_ID_UART3,
+	PERIPH_ID_I2C0 = 56,
 	PERIPH_ID_I2C1,
 	PERIPH_ID_I2C2,
 	PERIPH_ID_I2C3,
@@ -38,22 +43,22 @@ enum periph_id {
 	PERIPH_ID_I2C5,
 	PERIPH_ID_I2C6,
 	PERIPH_ID_I2C7,
-	PERIPH_ID_I2S1,
-	PERIPH_ID_SDMMC0,
+	PERIPH_ID_SPI0 = 68,
+	PERIPH_ID_SPI1,
+	PERIPH_ID_SPI2,
+	PERIPH_ID_SDMMC0 = 75,
 	PERIPH_ID_SDMMC1,
 	PERIPH_ID_SDMMC2,
 	PERIPH_ID_SDMMC3,
-	PERIPH_ID_SDMMC4,
-	PERIPH_ID_SROMC,
-	PERIPH_ID_SPI0,
-	PERIPH_ID_SPI1,
-	PERIPH_ID_SPI2,
+	PERIPH_ID_I2S1 = 99,
+
+/* Since following peripherals do not have shared peripheral interrupts (SPIs)
+ * they are numbered arbitiraly after the maximum SPIs Exynos has (128)
+ */
+	PERIPH_ID_SROMC = 128,
 	PERIPH_ID_SPI3,
 	PERIPH_ID_SPI4,
-	PERIPH_ID_UART0,
-	PERIPH_ID_UART1,
-	PERIPH_ID_UART2,
-	PERIPH_ID_UART3,
+	PERIPH_ID_SDMMC4,
 
 	PERIPH_ID_COUNT,
 	PERIPH_ID_NONE = -1,
diff --git a/arch/arm/include/asm/arch-exynos/pinmux.h b/arch/arm/include/asm/arch-exynos/pinmux.h
index 10ea736..00cbb0d 100644
--- a/arch/arm/include/asm/arch-exynos/pinmux.h
+++ b/arch/arm/include/asm/arch-exynos/pinmux.h
@@ -55,4 +55,12 @@ enum {
  */
 int exynos_pinmux_config(int peripheral, int flags);
 
+/**
+ * Decode the peripheral id using the interrpt numbers.
+ *
+ * @param blob  Device tree blbo
+ * @param node  FDT I2C node to find
+ * @return peripheral id if ok, PERIPH_ID_NONE on error
+ */
+int pinmux_decode_periph_id(const void *blob, int node);
 #endif
-- 
1.7.4.4

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

* [U-Boot] [PATCH 05/16] I2C: Driver changes for FDT support
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
                   ` (2 preceding siblings ...)
  2012-12-14 11:56 ` [U-Boot] [PATCH 04/16] EXYNOS5: FDT : Decode peripheral id Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-26 11:54   ` Minkyu Kang
  2012-12-14 11:56 ` [U-Boot] [PATCH 06/16] SMDK5250: Initialise I2C using FDT Rajeshwari Shinde
                   ` (10 subsequent siblings)
  14 siblings, 1 reply; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

Functions added to get the I2C bus number and reset I2C bus using
FDT node.

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
Acked-by: Heiko Schocher <hs@denx.de>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 drivers/i2c/s3c24x0_i2c.c |   83 ++++++++++++++++++++++++++++++++++++++++++++-
 drivers/i2c/s3c24x0_i2c.h |    8 ++++
 include/i2c.h             |   26 ++++++++++++++
 3 files changed, 116 insertions(+), 1 deletions(-)

diff --git a/drivers/i2c/s3c24x0_i2c.c b/drivers/i2c/s3c24x0_i2c.c
index 9bc4c7f..94a093e 100644
--- a/drivers/i2c/s3c24x0_i2c.c
+++ b/drivers/i2c/s3c24x0_i2c.c
@@ -27,9 +27,11 @@
  */
 
 #include <common.h>
+#include <fdtdec.h>
 #ifdef CONFIG_EXYNOS5
 #include <asm/arch/clk.h>
 #include <asm/arch/cpu.h>
+#include <asm/arch/pinmux.h>
 #else
 #include <asm/arch/s3c24x0_cpu.h>
 #endif
@@ -60,7 +62,14 @@
 #define I2C_TIMEOUT 1		/* 1 second */
 
 
-static unsigned int g_current_bus;	/* Stores Current I2C Bus */
+/*
+ * For SPL boot some boards need i2c before SDRAM is initialised so force
+ * variables to live in SRAM
+ */
+static unsigned int g_current_bus __attribute__((section(".data")));
+static struct s3c24x0_i2c_bus i2c_bus[CONFIG_MAX_I2C_NUM]
+			__attribute__((section(".data")));
+static int i2c_busses __attribute__((section(".data")));
 
 #ifndef CONFIG_EXYNOS5
 static int GetI2CSDA(void)
@@ -507,4 +516,76 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
 		(i2c, I2C_WRITE, chip << 1, &xaddr[4 - alen], alen, buffer,
 		 len) != 0);
 }
+
+#ifdef CONFIG_OF_CONTROL
+void board_i2c_init(const void *blob)
+{
+
+	int node_list[CONFIG_MAX_I2C_NUM];
+	int count, i;
+
+	count = fdtdec_find_aliases_for_id(blob, "i2c",
+		COMPAT_SAMSUNG_S3C2440_I2C, node_list,
+		CONFIG_MAX_I2C_NUM);
+	for (i = 0; i < count; i++) {
+		struct s3c24x0_i2c_bus *bus;
+		int node = node_list[i];
+
+		if (node <= 0)
+			continue;
+		bus = &i2c_bus[i];
+		bus->regs = (struct s3c24x0_i2c *)
+			fdtdec_get_addr(blob, node, "reg");
+		bus->id = pinmux_decode_periph_id(blob, node);
+		bus->node = node;
+		bus->bus_num = i2c_busses++;
+		exynos_pinmux_config(bus->id, 0);
+	}
+
+}
+
+static struct s3c24x0_i2c_bus *get_bus(unsigned int bus_idx)
+{
+	if (bus_idx < i2c_busses)
+		return &i2c_bus[bus_idx];
+	debug("Undefined bus: %d\n", bus_idx);
+	return NULL;
+}
+
+int i2c_get_bus_num_fdt(int node)
+{
+	int i;
+
+	for (i = 0; i < i2c_busses; i++) {
+		if (node == i2c_bus[i].node)
+			return i;
+	}
+
+	debug("%s: Can't find any matched I2C bus\n", __func__);
+	return -1;
+}
+
+int i2c_reset_port_fdt(const void *blob, int node)
+{
+	struct s3c24x0_i2c_bus *i2c;
+
+	int bus;
+
+	bus = i2c_get_bus_num_fdt(node);
+	if (bus < 0) {
+		debug("could not get bus for node %d\n", node);
+		return -1;
+	}
+	i2c = get_bus(bus);
+	if (!i2c) {
+		debug("get_bus() failed for node node %d\n", node);
+		return -1;
+	}
+
+	i2c_ch_init(i2c->regs, CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
+
+	return 0;
+}
+#endif
+
 #endif /* CONFIG_HARD_I2C */
diff --git a/drivers/i2c/s3c24x0_i2c.h b/drivers/i2c/s3c24x0_i2c.h
index 2dd4b06..1243bf1 100644
--- a/drivers/i2c/s3c24x0_i2c.h
+++ b/drivers/i2c/s3c24x0_i2c.h
@@ -30,4 +30,12 @@ struct s3c24x0_i2c {
 	u32	iicds;
 	u32	iiclc;
 };
+
+struct s3c24x0_i2c_bus {
+	int node;	/* device tree node */
+	int bus_num;	/* i2c bus number */
+	struct s3c24x0_i2c *regs;
+	enum periph_id id;
+};
+
 #endif /* _S3C24X0_I2C_H */
diff --git a/include/i2c.h b/include/i2c.h
index 16f099d..c60d075 100644
--- a/include/i2c.h
+++ b/include/i2c.h
@@ -262,4 +262,30 @@ extern int get_multi_scl_pin(void);
 extern int get_multi_sda_pin(void);
 extern int multi_i2c_init(void);
 #endif
+
+/**
+ * Get FDT values for i2c bus.
+ *
+ * @param blob  Device tree blbo
+ * @return the number of I2C bus
+ */
+void board_i2c_init(const void *blob);
+
+/**
+ * Find the I2C bus number by given a FDT I2C node.
+ *
+ * @param blob  Device tree blbo
+ * @param node  FDT I2C node to find
+ * @return the number of I2C bus (zero based), or -1 on error
+ */
+int i2c_get_bus_num_fdt(int node);
+
+/**
+ * Reset the I2C bus represented by the given a FDT I2C node.
+ *
+ * @param blob  Device tree blbo
+ * @param node  FDT I2C node to find
+ * @return 0 if port was reset, -1 if not found
+ */
+int i2c_reset_port_fdt(const void *blob, int node);
 #endif	/* _I2C_H_ */
-- 
1.7.4.4

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

* [U-Boot] [PATCH 06/16] SMDK5250: Initialise I2C using FDT
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
                   ` (3 preceding siblings ...)
  2012-12-14 11:56 ` [U-Boot] [PATCH 05/16] I2C: Driver changes for FDT support Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 07/16] EXYNOS5: FDT: Add sound device node data Rajeshwari Shinde
                   ` (9 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

This patch initialises I2C using FDT.

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
Acked-by: Heiko Schocher <hs@denx.de>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 board/samsung/smdk5250/smdk5250.c |   20 +-------------------
 1 files changed, 1 insertions(+), 19 deletions(-)

diff --git a/board/samsung/smdk5250/smdk5250.c b/board/samsung/smdk5250/smdk5250.c
index ac7346d..4d24978 100644
--- a/board/samsung/smdk5250/smdk5250.c
+++ b/board/samsung/smdk5250/smdk5250.c
@@ -236,24 +236,6 @@ static int board_uart_init(void)
 	return 0;
 }
 
-#ifdef CONFIG_SYS_I2C_INIT_BOARD
-static int board_i2c_init(void)
-{
-	int i, err;
-
-	for (i = 0; i < CONFIG_MAX_I2C_NUM; i++) {
-		err = exynos_pinmux_config((PERIPH_ID_I2C0 + i),
-						PINMUX_FLAG_NONE);
-		if (err) {
-			debug("I2C%d not configured\n", (PERIPH_ID_I2C0 + i));
-			return err;
-		}
-	}
-	i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
-	return 0;
-}
-#endif
-
 #ifdef CONFIG_BOARD_EARLY_INIT_F
 int board_early_init_f(void)
 {
@@ -264,7 +246,7 @@ int board_early_init_f(void)
 		return err;
 	}
 #ifdef CONFIG_SYS_I2C_INIT_BOARD
-	err = board_i2c_init();
+	board_i2c_init(gd->fdt_blob);
 #endif
 	return err;
 }
-- 
1.7.4.4

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

* [U-Boot] [PATCH 07/16] EXYNOS5: FDT: Add sound device node data
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
                   ` (4 preceding siblings ...)
  2012-12-14 11:56 ` [U-Boot] [PATCH 06/16] SMDK5250: Initialise I2C using FDT Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 08/16] EXYNOS5: FDT: Add sound and codec device node Rajeshwari Shinde
                   ` (8 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

Add sound device node data for exynos

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 arch/arm/dts/exynos5250.dtsi              |    5 +++++
 doc/device-tree-bindings/exynos/sound.txt |   27 +++++++++++++++++++++++++++
 2 files changed, 32 insertions(+), 0 deletions(-)
 create mode 100644 doc/device-tree-bindings/exynos/sound.txt

diff --git a/arch/arm/dts/exynos5250.dtsi b/arch/arm/dts/exynos5250.dtsi
index 7a50b2e..dc13f29 100644
--- a/arch/arm/dts/exynos5250.dtsi
+++ b/arch/arm/dts/exynos5250.dtsi
@@ -92,4 +92,9 @@
 		reg = <0x12CD0000 0x100>;
 		interrupts = <0 63 0>;
 	};
+
+	sound at 12d60000 {
+		compatible = "samsung,exynos-sound";
+		reg = <0x12d60000 0x20>;
+	};
 };
diff --git a/doc/device-tree-bindings/exynos/sound.txt b/doc/device-tree-bindings/exynos/sound.txt
new file mode 100644
index 0000000..98d1798
--- /dev/null
+++ b/doc/device-tree-bindings/exynos/sound.txt
@@ -0,0 +1,27 @@
+Exynos Sound Subsystem
+
+The device node for sound subsytem which contains codec and i2s block
+that is a part of Exynos5250
+
+Required properties :
+ - compatible : Should be "samsung,exynos-sound" for sound
+ - samsung,i2s-epll-clock-frequency : epll clock output frequency in Hz
+ - samsung,i2s-sampling-rate : sampling rate, default is 48000
+ - samsung,i2s-bits-per-sample : sample width, defalut is 16 bit
+ - samsung,i2s-channels : nummber of channels, default is 2
+ - samsung,i2s-lr-clk-framesize : lr clock frame size
+ - samsung,i2s-bit-clk-framesize : bit clock frame size
+ - samsung,codec-type : sound codec type
+
+Example:
+
+sound at 12d60000 {
+	compatible = "samsung,exynos-sound"
+	samsung,i2s-epll-clock-frequency = <192000000>;
+	samsung,i2s-sampling-rate = <48000>;
+	samsung,i2s-bits-per-sample = <16>;
+	samsung,i2s-channels = <2>;
+	samsung,i2s-lr-clk-framesize = <256>;
+	samsung,i2s-bit-clk-framesize = <32>;
+	samsung,codec-type = "wm8994";
+};
-- 
1.7.4.4

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

* [U-Boot] [PATCH 08/16] EXYNOS5: FDT: Add sound and codec device node
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
                   ` (5 preceding siblings ...)
  2012-12-14 11:56 ` [U-Boot] [PATCH 07/16] EXYNOS5: FDT: Add sound device node data Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 09/16] EXYNOS5: FDT: Add compatible strings for sound Rajeshwari Shinde
                   ` (7 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

Adds sound and codec device node parameters

Signed-off-by: R. Chandrasekar <rcsekar@samsung.com>
Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 board/samsung/dts/exynos5250-smdk5250.dts |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/board/samsung/dts/exynos5250-smdk5250.dts b/board/samsung/dts/exynos5250-smdk5250.dts
index 0f971c0..14f73d8 100644
--- a/board/samsung/dts/exynos5250-smdk5250.dts
+++ b/board/samsung/dts/exynos5250-smdk5250.dts
@@ -37,4 +37,21 @@
 			phy-mode = "mii";
 		};
 	};
+
+	sound at 12d60000 {
+		samsung,i2s-epll-clock-frequency = <192000000>;
+		samsung,i2s-sampling-rate = <48000>;
+		samsung,i2s-bits-per-sample = <16>;
+		samsung,i2s-channels = <2>;
+		samsung,i2s-lr-clk-framesize = <256>;
+		samsung,i2s-bit-clk-framesize = <32>;
+		samsung,codec-type = "wm8994";
+	};
+
+	i2c at 12c70000 {
+		soundcodec at 1a {
+			reg = <0x1a>;
+			compatible = "wolfson,wm8994-codec";
+		};
+	};
 };
-- 
1.7.4.4

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

* [U-Boot] [PATCH 09/16] EXYNOS5: FDT: Add compatible strings for sound
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
                   ` (6 preceding siblings ...)
  2012-12-14 11:56 ` [U-Boot] [PATCH 08/16] EXYNOS5: FDT: Add sound and codec device node Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 10/16] Sound: Add FDT support to driver Rajeshwari Shinde
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

Add required compatible information for sound driver.

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 include/fdtdec.h |    2 ++
 lib/fdtdec.c     |    2 ++
 2 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/include/fdtdec.h b/include/fdtdec.h
index 567ad13..976c9f3 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -71,6 +71,8 @@ enum fdt_compat_id {
 	COMPAT_SMSC_LAN9215,		/* SMSC 10/100 Ethernet LAN9215 */
 	COMPAT_SAMSUNG_EXYNOS5_SROMC,	/* Exynos5 SROMC */
 	COMPAT_SAMSUNG_S3C2440_I2C,	/* Exynos I2C Controller */
+	COMPAT_SAMSUNG_EXYNOS5_SOUND,	/* Exynos Sound */
+	COMPAT_WOLFSON_WM8994_CODEC,	/* Wolfson WM8994 Sound Codec */
 
 	COMPAT_COUNT,
 };
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 6ae2dd0..43affaa 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -48,6 +48,8 @@ static const char * const compat_names[COMPAT_COUNT] = {
 	COMPAT(SMSC_LAN9215, "smsc,lan9215"),
 	COMPAT(SAMSUNG_EXYNOS5_SROMC, "samsung,exynos-sromc"),
 	COMPAT(SAMSUNG_S3C2440_I2C, "samsung,s3c2440-i2c"),
+	COMPAT(SAMSUNG_EXYNOS5_SOUND, "samsung,exynos-sound"),
+	COMPAT(WOLFSON_WM8994_CODEC, "wolfson,wm8994-codec"),
 };
 
 const char *fdtdec_get_compatible(enum fdt_compat_id id)
-- 
1.7.4.4

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

* [U-Boot] [PATCH 10/16] Sound: Add FDT support to driver
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
                   ` (7 preceding siblings ...)
  2012-12-14 11:56 ` [U-Boot] [PATCH 09/16] EXYNOS5: FDT: Add compatible strings for sound Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 11/16] Sound: WM8994: Add FDT support to codec Rajeshwari Shinde
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

This patch adds FDT support to the sound driver.

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 drivers/sound/sound.c |  173 +++++++++++++++++++++++++++++--------------------
 include/sound.h       |    4 +-
 2 files changed, 105 insertions(+), 72 deletions(-)

diff --git a/drivers/sound/sound.c b/drivers/sound/sound.c
index 4c74534..fa8432d 100644
--- a/drivers/sound/sound.c
+++ b/drivers/sound/sound.c
@@ -24,111 +24,159 @@
 #include <malloc.h>
 #include <common.h>
 #include <asm/io.h>
+#include <libfdt.h>
+#include <fdtdec.h>
 #include <i2c.h>
 #include <i2s.h>
 #include <sound.h>
-#include "wm8994.h"
 #include <asm/arch/sound.h>
+#include "wm8994.h"
 
 /* defines */
 #define SOUND_400_HZ 400
 #define SOUND_BITS_IN_BYTE 8
 
 static struct i2stx_info g_i2stx_pri;
-static struct sound_codec_info g_codec_info;
 
 /*
- * get_sound_fdt_values gets fdt values for i2s parameters
+ * get_sound_i2s_values gets values for i2s parameters
  *
  * @param i2stx_info	i2s transmitter transfer param structure
- * @param blob		FDT blob
- */
-static void get_sound_i2s_values(struct i2stx_info *i2s)
-{
-	i2s->base_address = samsung_get_base_i2s();
-	i2s->audio_pll_clk = I2S_PLL_CLK;
-	i2s->samplingrate = I2S_SAMPLING_RATE;
-	i2s->bitspersample = I2S_BITS_PER_SAMPLE;
-	i2s->channels = I2S_CHANNELS;
-	i2s->rfs = I2S_RFS;
-	i2s->bfs = I2S_BFS;
-}
-
-/*
- * Gets fdt values for wm8994 config parameters
- *
- * @param pcodec_info	codec information structure
- * @param blob		FDT blob
- * @return		int value, 0 for success
+ * @param blob		FDT blob if enabled else NULL
  */
-static int get_sound_wm8994_values(struct sound_codec_info *pcodec_info)
+static int get_sound_i2s_values(struct i2stx_info *i2s, const void *blob)
 {
+#ifdef CONFIG_OF_CONTROL
+	int node;
 	int error = 0;
+	int base;
 
-	switch (AUDIO_COMPAT) {
-	case AUDIO_COMPAT_SPI:
-		debug("%s: Support not added for SPI interface\n", __func__);
+	node = fdtdec_next_compatible(blob, 0,
+					COMPAT_SAMSUNG_EXYNOS5_SOUND);
+	if (node <= 0) {
+		debug("EXYNOS_SOUND: No node for sound in device tree\n");
 		return -1;
-		break;
-	case AUDIO_COMPAT_I2C:
-		pcodec_info->i2c_bus = AUDIO_I2C_BUS;
-		pcodec_info->i2c_dev_addr = AUDIO_I2C_REG;
-		debug("i2c dev addr = %d\n", pcodec_info->i2c_dev_addr);
-		break;
-	default:
-		debug("%s: Unknown compat id %d\n", __func__, AUDIO_COMPAT);
+	}
+
+	/*
+	 * Get the pre-defined sound specific values from FDT.
+	 * All of these are expected to be correct otherwise
+	 * wrong register values in i2s setup parameters
+	 * may result in no sound play.
+	 */
+	base = fdtdec_get_addr(blob, node, "reg");
+	if (base == FDT_ADDR_T_NONE) {
+		debug("%s: Missing  i2s base\n", __func__);
 		return -1;
 	}
+	i2s->base_address = base;
 
+	i2s->audio_pll_clk = fdtdec_get_int(blob,
+				node, "samsung,i2s-epll-clock-frequency", -1);
+	error |= i2s->audio_pll_clk;
+	debug("audio_pll_clk = %d\n", i2s->audio_pll_clk);
+	i2s->samplingrate = fdtdec_get_int(blob,
+				node, "samsung,i2s-sampling-rate", -1);
+	error |= i2s->samplingrate;
+	debug("samplingrate = %d\n", i2s->samplingrate);
+	i2s->bitspersample = fdtdec_get_int(blob,
+				node, "samsung,i2s-bits-per-sample", -1);
+	error |= i2s->bitspersample;
+	debug("bitspersample = %d\n", i2s->bitspersample);
+	i2s->channels = fdtdec_get_int(blob,
+			node, "samsung,i2s-channels", -1);
+	error |= i2s->channels;
+	debug("channels = %d\n", i2s->channels);
+	i2s->rfs = fdtdec_get_int(blob,
+				node, "samsung,i2s-lr-clk-framesize", -1);
+	error |= i2s->rfs;
+	debug("rfs = %d\n", i2s->rfs);
+	i2s->bfs = fdtdec_get_int(blob,
+				node, "samsung,i2s-bit-clk-framesize", -1);
+	error |= i2s->bfs;
+	debug("bfs = %d\n", i2s->bfs);
 	if (error == -1) {
-		debug("fail to get wm8994 codec node properties\n");
+		debug("fail to get sound i2s node properties\n");
 		return -1;
 	}
-
+#else
+	i2s->base_address = samsung_get_base_i2s();
+	i2s->audio_pll_clk = I2S_PLL_CLK;
+	i2s->samplingrate = I2S_SAMPLING_RATE;
+	i2s->bitspersample = I2S_BITS_PER_SAMPLE;
+	i2s->channels = I2S_CHANNELS;
+	i2s->rfs = I2S_RFS;
+	i2s->bfs = I2S_BFS;
+#endif
 	return 0;
 }
 
 /*
- * Gets fdt values for codec config parameters
+ * Init codec
  *
- * @param pcodec_info	codec information structure
- * @param blob		FDT blob
- * @return		int value, 0 for success
+ * @param blob          FDT blob
+ * @param pi2s_tx	i2s parameters required by codec
+ * @return              int value, 0 for success
  */
-static int get_sound_codec_values(struct sound_codec_info *pcodec_info)
+static int codec_init(const void *blob, struct i2stx_info *pi2s_tx)
 {
-	int error = 0;
+	int ret;
 	const char *codectype;
+#ifdef CONFIG_OF_CONTROL
+	int node;
 
-	codectype =  AUDIO_CODEC;
+	/* Get the node from FDT for sound */
+	node = fdtdec_next_compatible(blob, 0, COMPAT_SAMSUNG_EXYNOS5_SOUND);
+	if (node <= 0) {
+		debug("EXYNOS_SOUND: No node for sound in device tree\n");
+		debug("node = %d\n", node);
+		return -1;
+	}
 
+	/*
+	 * Get the pre-defined sound codec specific values from FDT.
+	 * All of these are expected to be correct otherwise sound
+	 * can not be played
+	 */
+	codectype = fdt_getprop(blob, node, "samsung,codec-type", NULL);
+	debug("device = %s\n", codectype);
+#else
+	codectype =  AUDIO_CODEC;
+#endif
 	if (!strcmp(codectype, "wm8994")) {
-		pcodec_info->codec_type = CODEC_WM_8994;
-		error = get_sound_wm8994_values(pcodec_info);
+		/* Check the codec type and initialise the same */
+		ret = wm8994_init(blob, WM8994_AIF2,
+			pi2s_tx->samplingrate,
+			(pi2s_tx->samplingrate * (pi2s_tx->rfs)),
+			pi2s_tx->bitspersample, pi2s_tx->channels);
 	} else {
-		error = -1;
+		debug("%s: Unknown code type %s\n", __func__,
+		      codectype);
+		return -1;
 	}
-
-	if (error == -1) {
-		debug("fail to get sound codec node properties\n");
+	if (ret) {
+		debug("%s: Codec init failed\n", __func__);
 		return -1;
 	}
 
 	return 0;
 }
 
-int sound_init(void)
+int sound_init(const void *blob)
 {
 	int ret;
 	struct i2stx_info *pi2s_tx = &g_i2stx_pri;
-	struct sound_codec_info *pcodec_info = &g_codec_info;
 
 	/* Get the I2S Values */
-	get_sound_i2s_values(pi2s_tx);
+	if (get_sound_i2s_values(pi2s_tx, blob) < 0) {
+		debug(" FDT I2S values failed\n");
+		return -1;
+	}
 
-	/* Get the codec Values */
-	if (get_sound_codec_values(pcodec_info) < 0)
+	if (codec_init(blob, pi2s_tx) < 0) {
+		debug(" Codec init failed\n");
 		return -1;
+	}
 
 	ret = i2s_tx_init(pi2s_tx);
 	if (ret) {
@@ -137,21 +185,6 @@ int sound_init(void)
 		return ret;
 	}
 
-	/* Check the codec type and initialise the same */
-	if (pcodec_info->codec_type == CODEC_WM_8994) {
-		ret = wm8994_init(pcodec_info, WM8994_AIF2,
-			pi2s_tx->samplingrate,
-			(pi2s_tx->samplingrate * (pi2s_tx->rfs)),
-			pi2s_tx->bitspersample, pi2s_tx->channels);
-	} else {
-		debug("%s: Unknown code type %d\n", __func__,
-		      pcodec_info->codec_type);
-		return -1;
-	}
-	if (ret) {
-		debug("%s: Codec init failed\n", __func__);
-		return -1;
-	}
 
 	return ret;
 }
diff --git a/include/sound.h b/include/sound.h
index ea0b115..d73839d 100644
--- a/include/sound.h
+++ b/include/sound.h
@@ -46,10 +46,10 @@ struct sound_codec_info {
 
 /*
  * Initialises audio sub system
- *
+ * @param blob	Pointer of device tree node or NULL if none.
  * @return	int value 0 for success, -1 for error
  */
-int sound_init(void);
+int sound_init(const void *blob);
 
 /*
  * plays the pcm data buffer in pcm_data.h through i2s1 to make the
-- 
1.7.4.4

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

* [U-Boot] [PATCH 11/16] Sound: WM8994: Add FDT support to codec
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
                   ` (8 preceding siblings ...)
  2012-12-14 11:56 ` [U-Boot] [PATCH 10/16] Sound: Add FDT support to driver Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-26 11:55   ` Minkyu Kang
  2012-12-14 11:56 ` [U-Boot] [PATCH 12/16] Sound: Add FDT support to CMD Rajeshwari Shinde
                   ` (4 subsequent siblings)
  14 siblings, 1 reply; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

This patch adds FDT support to the codec.

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 drivers/sound/wm8994.c |   76 ++++++++++++++++++++++++++++++++++++++++++++++-
 drivers/sound/wm8994.h |    6 +--
 2 files changed, 76 insertions(+), 6 deletions(-)

diff --git a/drivers/sound/wm8994.c b/drivers/sound/wm8994.c
index 293903a..a528502 100644
--- a/drivers/sound/wm8994.c
+++ b/drivers/sound/wm8994.c
@@ -26,9 +26,11 @@
 #include <asm/io.h>
 #include <common.h>
 #include <div64.h>
+#include <fdtdec.h>
 #include <i2c.h>
 #include <i2s.h>
 #include <sound.h>
+#include <asm/arch/sound.h>
 #include "wm8994.h"
 #include "wm8994_registers.h"
 
@@ -77,6 +79,7 @@ static int bclk_divs[] = {
 
 static struct wm8994_priv g_wm8994_info;
 static unsigned char g_wm8994_i2c_dev_addr;
+static struct sound_codec_info g_codec_info;
 
 /*
  * Initialise I2C for wm 8994
@@ -747,13 +750,82 @@ err:
 	return -1;
 }
 
+/*
+ * Gets fdt values for wm8994 config parameters
+ *
+ * @param pcodec_info	codec information structure
+ * @param blob		FDT blob
+ * @return		int value, 0 for success
+ */
+static int get_codec_values(struct sound_codec_info *pcodec_info,
+			const void *blob)
+{
+	int error = 0;
+#ifdef CONFIG_OF_CONTROL
+	enum fdt_compat_id compat;
+	int node;
+	int parent;
+
+	/* Get the node from FDT for codec */
+	node = fdtdec_next_compatible(blob, 0, COMPAT_WOLFSON_WM8994_CODEC);
+	if (node <= 0) {
+		debug("EXYNOS_SOUND: No node for codec in device tree\n");
+		debug("node = %d\n", node);
+		return -1;
+	}
+
+	parent = fdt_parent_offset(blob, node);
+	if (parent < 0) {
+		debug("%s: Cannot find node parent\n", __func__);
+		return -1;
+	}
+
+	compat = fdtdec_lookup(blob, parent);
+	switch (compat) {
+	case COMPAT_SAMSUNG_S3C2440_I2C:
+		pcodec_info->i2c_bus = i2c_get_bus_num_fdt(parent);
+		error |= pcodec_info->i2c_bus;
+		debug("i2c bus = %d\n", pcodec_info->i2c_bus);
+		pcodec_info->i2c_dev_addr = fdtdec_get_int(blob, node,
+							"reg", 0);
+		error |= pcodec_info->i2c_dev_addr;
+		debug("i2c dev addr = %d\n", pcodec_info->i2c_dev_addr);
+		break;
+	default:
+		debug("%s: Unknown compat id %d\n", __func__, compat);
+		return -1;
+	}
+#else
+	pcodec_info->i2c_bus = AUDIO_I2C_BUS;
+	pcodec_info->i2c_dev_addr = AUDIO_I2C_REG;
+	debug("i2c dev addr = %d\n", pcodec_info->i2c_dev_addr);
+#endif
+
+	pcodec_info->codec_type = CODEC_WM_8994;
+
+	if (error == -1) {
+		debug("fail to get wm8994 codec node properties\n");
+		return -1;
+	}
+
+	return 0;
+
+}
+
+
 /*wm8994 Device Initialisation */
-int wm8994_init(struct sound_codec_info *pcodec_info,
-			enum en_audio_interface aif_id,
+int wm8994_init(const void *blob, enum en_audio_interface aif_id,
 			int sampling_rate, int mclk_freq,
 			int bits_per_sample, unsigned int channels)
 {
 	int ret = 0;
+	struct sound_codec_info *pcodec_info = &g_codec_info;
+
+	/* Get the codec Values */
+	if (get_codec_values(pcodec_info, blob) < 0) {
+		debug("FDT Codec values failed\n");
+		return -1;
+	}
 
 	/* shift the device address by 1 for 7 bit addressing */
 	g_wm8994_i2c_dev_addr = pcodec_info->i2c_dev_addr;
diff --git a/drivers/sound/wm8994.h b/drivers/sound/wm8994.h
index a8f0de1..a1e8335 100644
--- a/drivers/sound/wm8994.h
+++ b/drivers/sound/wm8994.h
@@ -69,8 +69,7 @@ enum wm8994_type {
 /*
  * intialise wm8994 sound codec device for the given configuration
  *
- * @param pcodec_info		pointer value of the sound codec info structure
- *				parsed from device tree
+ * @param blob			FDT node for codec values
  * @param aif_id		enum value of codec interface port in which
  *				soc i2s is connected
  * @param sampling_rate		Sampling rate ranges between from 8khz to 96khz
@@ -80,8 +79,7 @@ enum wm8994_type {
  *
  * @returns -1 for error  and 0  Success.
  */
-int wm8994_init(struct sound_codec_info *pcodec_info,
-			enum en_audio_interface aif_id,
+int wm8994_init(const void *blob, enum en_audio_interface aif_id,
 			int sampling_rate, int mclk_freq,
 			int bits_per_sample, unsigned int channels);
 #endif /*__WM8994_H__ */
-- 
1.7.4.4

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

* [U-Boot] [PATCH 12/16] Sound: Add FDT support to CMD.
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
                   ` (9 preceding siblings ...)
  2012-12-14 11:56 ` [U-Boot] [PATCH 11/16] Sound: WM8994: Add FDT support to codec Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 13/16] EXYNOS5: FDT: Add compatible strings for SPI Rajeshwari Shinde
                   ` (3 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

This patch adds FDT support to sound init in CMD.

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 common/cmd_sound.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/common/cmd_sound.c b/common/cmd_sound.c
index 459d1eb..cfca9dd 100644
--- a/common/cmd_sound.c
+++ b/common/cmd_sound.c
@@ -33,7 +33,7 @@ static int do_init(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 {
 	int ret;
 
-	ret = sound_init();
+	ret = sound_init(gd->fdt_blob);
 	if (ret) {
 		printf("Initialise Audio driver failed\n");
 		return CMD_RET_FAILURE;
-- 
1.7.4.4

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

* [U-Boot] [PATCH 13/16] EXYNOS5: FDT: Add compatible strings for SPI
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
                   ` (10 preceding siblings ...)
  2012-12-14 11:56 ` [U-Boot] [PATCH 12/16] Sound: Add FDT support to CMD Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 14/16] EXYNOS5 : FDT: Add Aliases for SPI device Rajeshwari Shinde
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

Add required compatible information for SPI driver.

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 include/fdtdec.h |    1 +
 lib/fdtdec.c     |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/include/fdtdec.h b/include/fdtdec.h
index 976c9f3..539bb1b 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -73,6 +73,7 @@ enum fdt_compat_id {
 	COMPAT_SAMSUNG_S3C2440_I2C,	/* Exynos I2C Controller */
 	COMPAT_SAMSUNG_EXYNOS5_SOUND,	/* Exynos Sound */
 	COMPAT_WOLFSON_WM8994_CODEC,	/* Wolfson WM8994 Sound Codec */
+	COMPAT_SAMSUNG_EXYNOS_SPI,	/* Exynos SPI */
 
 	COMPAT_COUNT,
 };
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 43affaa..44c249d 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -50,6 +50,7 @@ static const char * const compat_names[COMPAT_COUNT] = {
 	COMPAT(SAMSUNG_S3C2440_I2C, "samsung,s3c2440-i2c"),
 	COMPAT(SAMSUNG_EXYNOS5_SOUND, "samsung,exynos-sound"),
 	COMPAT(WOLFSON_WM8994_CODEC, "wolfson,wm8994-codec"),
+	COMPAT(SAMSUNG_EXYNOS_SPI, "samsung,exynos-spi"),
 };
 
 const char *fdtdec_get_compatible(enum fdt_compat_id id)
-- 
1.7.4.4

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

* [U-Boot] [PATCH 14/16] EXYNOS5 : FDT: Add Aliases for SPI device
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
                   ` (11 preceding siblings ...)
  2012-12-14 11:56 ` [U-Boot] [PATCH 13/16] EXYNOS5: FDT: Add compatible strings for SPI Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 15/16] EXYNOS5: FDT: Add SPI device node data Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 16/16] SPI: EXYNOS: Add FDT support to driver Rajeshwari Shinde
  14 siblings, 0 replies; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

This patch adds aliases for SPI.

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 board/samsung/dts/exynos5250-smdk5250.dts |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/board/samsung/dts/exynos5250-smdk5250.dts b/board/samsung/dts/exynos5250-smdk5250.dts
index 14f73d8..a8e62da 100644
--- a/board/samsung/dts/exynos5250-smdk5250.dts
+++ b/board/samsung/dts/exynos5250-smdk5250.dts
@@ -25,6 +25,11 @@
 		i2c5 = "/i2c at 12cb0000";
 		i2c6 = "/i2c at 12cc0000";
 		i2c7 = "/i2c at 12cd0000";
+		spi0 = "/spi at 12d20000";
+		spi1 = "/spi at 12d30000";
+		spi2 = "/spi at 12d40000";
+		spi3 = "/spi at 131a0000";
+		spi4 = "/spi at 131b0000";
 	};
 
 	sromc at 12250000 {
-- 
1.7.4.4

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

* [U-Boot] [PATCH 15/16] EXYNOS5: FDT: Add SPI device node data
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
                   ` (12 preceding siblings ...)
  2012-12-14 11:56 ` [U-Boot] [PATCH 14/16] EXYNOS5 : FDT: Add Aliases for SPI device Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-14 11:56 ` [U-Boot] [PATCH 16/16] SPI: EXYNOS: Add FDT support to driver Rajeshwari Shinde
  14 siblings, 0 replies; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

Add SPI device node data for exynos.

Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 arch/arm/dts/exynos5250.dtsi                |   41 +++++++++++++++++++++++++++
 doc/device-tree-bindings/exynos/isp-spi.txt |   22 ++++++++++++++
 2 files changed, 63 insertions(+), 0 deletions(-)
 create mode 100644 doc/device-tree-bindings/exynos/isp-spi.txt

diff --git a/arch/arm/dts/exynos5250.dtsi b/arch/arm/dts/exynos5250.dtsi
index dc13f29..1008797 100644
--- a/arch/arm/dts/exynos5250.dtsi
+++ b/arch/arm/dts/exynos5250.dtsi
@@ -97,4 +97,45 @@
 		compatible = "samsung,exynos-sound";
 		reg = <0x12d60000 0x20>;
 	};
+
+	spi at 12d20000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,exynos-spi";
+		reg = <0x12d20000 0x30>;
+		interrupts = <0 68 0>;
+	};
+
+	spi at 12d30000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,exynos-spi";
+		reg = <0x12d30000 0x30>;
+		interrupts = <0 69 0>;
+	};
+
+	spi at 12d40000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,exynos-spi";
+		reg = <0x12d40000 0x30>;
+		clock-frequency = <50000000>;
+		interrupts = <0 70 0>;
+        };
+
+	spi at 131a0000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,exynos-spi";
+		reg = <0x131a0000 0x30>;
+		interrupts = <0 129 0>;
+	};
+
+	spi at 131b0000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,exynos-spi";
+		reg = <0x131b0000 0x30>;
+		interrupts = <0 130 0>;
+	};
 };
diff --git a/doc/device-tree-bindings/exynos/isp-spi.txt b/doc/device-tree-bindings/exynos/isp-spi.txt
new file mode 100644
index 0000000..b8086e8
--- /dev/null
+++ b/doc/device-tree-bindings/exynos/isp-spi.txt
@@ -0,0 +1,22 @@
+Exynos ISP SPI Subsystem
+
+The device node for ISP SPI subsytem.
+Since Peripheral id in EXYNOS is decoded based on Interrupts, currently
+ISP SPI have no individual interrupts hence we add ad dummy interrupt node
+which will have a value beyond the maximum number of interrupts exynos5 can
+support.
+
+Required properties :
+ - compatible : Should be "samsung,exynos-spi" for spi.
+ - reg : Base adrress of the the subsystem.
+ - interrupts : A value which is beyond the maximum number of interrupts
+exynos5 can support.
+
+Example:
+spi at 131a0000 {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	compatible = "samsung,exynos-spi";
+	reg = <0x131a0000 0x30>;
+	interrupts = <0 129 0>;
+};
-- 
1.7.4.4

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

* [U-Boot] [PATCH 16/16] SPI: EXYNOS: Add FDT support to driver.
  2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
                   ` (13 preceding siblings ...)
  2012-12-14 11:56 ` [U-Boot] [PATCH 15/16] EXYNOS5: FDT: Add SPI device node data Rajeshwari Shinde
@ 2012-12-14 11:56 ` Rajeshwari Shinde
  2012-12-26 11:54   ` Minkyu Kang
  14 siblings, 1 reply; 27+ messages in thread
From: Rajeshwari Shinde @ 2012-12-14 11:56 UTC (permalink / raw)
  To: u-boot

This patch adds FDT support to the SPI driver.

Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
---
Changes in V1:
	-Rebased on latest u-boot-samsung
 drivers/spi/exynos_spi.c |   96 +++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 90 insertions(+), 6 deletions(-)

diff --git a/drivers/spi/exynos_spi.c b/drivers/spi/exynos_spi.c
index 3e6c18f..7ecc566 100644
--- a/drivers/spi/exynos_spi.c
+++ b/drivers/spi/exynos_spi.c
@@ -20,6 +20,7 @@
 #include <common.h>
 #include <malloc.h>
 #include <spi.h>
+#include <fdtdec.h>
 #include <asm/arch/clk.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/cpu.h>
@@ -28,16 +29,20 @@
 #include <asm/arch-exynos/spi.h>
 #include <asm/io.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 /* Information about each SPI controller */
 struct spi_bus {
 	enum periph_id periph_id;
 	s32 frequency;		/* Default clock frequency, -1 for none */
 	struct exynos_spi *regs;
 	int inited;		/* 1 if this bus is ready for use */
+	int node;
 };
 
 /* A list of spi buses that we know about */
 static struct spi_bus spi_bus[EXYNOS5_SPI_NUM_CONTROLLERS];
+static unsigned int bus_count;
 
 struct exynos_spi_slave {
 	struct spi_slave slave;
@@ -50,7 +55,7 @@ struct exynos_spi_slave {
 
 static struct spi_bus *spi_get_bus(unsigned dev_index)
 {
-	if (dev_index < EXYNOS5_SPI_NUM_CONTROLLERS)
+	if (dev_index < bus_count)
 		return &spi_bus[dev_index];
 	debug("%s: invalid bus %d", __func__, dev_index);
 
@@ -347,21 +352,100 @@ static inline struct exynos_spi *get_spi_base(int dev_index)
 					(dev_index - 3);
 }
 
+/*
+ * Read the SPI config from the device tree node.
+ *
+ * @param blob  FDT blob to read from
+ * @param node  Node offset to read from
+ * @param bus   SPI bus structure to fill with information
+ * @return 0 if ok, or -FDT_ERR_NOTFOUND if something was missing
+ */
+static int spi_get_config(const void *blob, int node, struct spi_bus *bus)
+{
+	bus->node = node;
+	bus->regs = (struct exynos_spi *)fdtdec_get_addr(blob, node, "reg");
+	bus->periph_id = pinmux_decode_periph_id(blob, node);
+	if (bus->periph_id == PERIPH_ID_NONE) {
+		debug("%s: Invalid peripheral ID %d\n", __func__,
+			bus->periph_id);
+		return -FDT_ERR_NOTFOUND;
+	}
+
+	/* Use 500KHz as a suitable default */
+	bus->frequency = fdtdec_get_int(blob, node, "spi-max-frequency",
+					500000);
+
+	return 0;
+}
+
+
+/*
+ * Process a list of nodes, adding them to our list of SPI ports.
+ *
+ * @param blob          fdt blob
+ * @param node_list     list of nodes to process (any <=0 are ignored)
+ * @param count         number of nodes to process
+ * @param is_dvc        1 if these are DVC ports, 0 if standard I2C
+ * @return 0 if ok, -1 on error
+ */
+static int process_nodes(const void *blob, int node_list[], int count)
+{
+	int i;
+
+	/* build the i2c_controllers[] for each controller */
+	for (i = 0; i < count; i++) {
+		int node = node_list[i];
+		struct spi_bus *bus;
+
+		if (node <= 0)
+			continue;
+
+		bus = &spi_bus[i];
+		if (spi_get_config(blob, node, bus)) {
+			printf("exynos spi_init: failed to decode bus %d\n",
+				i);
+			return -1;
+		}
+
+		debug("spi: controller bus %d@%p, periph_id %d\n",
+		      i, bus->regs, bus->periph_id);
+		bus->inited = 1;
+		bus_count++;
+	}
+
+	return 0;
+}
+
 /* Sadly there is no error return from this function */
 void spi_init(void)
 {
-	int i;
+	int count;
+
+#ifdef CONFIG_OF_CONTROL
+	int node_list[EXYNOS5_SPI_NUM_CONTROLLERS];
+	const void *blob = gd->fdt_blob;
+
+	count = fdtdec_find_aliases_for_id(blob, "spi",
+			COMPAT_SAMSUNG_EXYNOS_SPI, node_list,
+			EXYNOS5_SPI_NUM_CONTROLLERS);
+	if (process_nodes(blob, node_list, count))
+		return;
+
+#else
 	struct spi_bus *bus;
 
-	for (i = 0; i < EXYNOS5_SPI_NUM_CONTROLLERS; i++) {
-		bus = &spi_bus[i];
-		bus->regs = get_spi_base(i);
-		bus->periph_id = PERIPH_ID_SPI0 + i;
+	for (count = 0; i < EXYNOS5_SPI_NUM_CONTROLLERS; i++) {
+		bus = &spi_bus[count];
+		bus->regs = get_spi_base(count);
+		bus->periph_id = PERIPH_ID_SPI0 + count;
 
 		/* Although Exynos5 supports upto 50Mhz speed,
 		 * we are setting it to 10Mhz for safe side
 		 */
 		bus->frequency = 10000000;
 		bus->inited = 1;
+		bus->node = 0;
+		bus_count = EXYNOS5_SPI_NUM_CONTROLLERS;
 	}
+#endif
 }
-- 
1.7.4.4

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

* [U-Boot] [PATCH 04/16] EXYNOS5: FDT : Decode peripheral id
  2012-12-14 11:56 ` [U-Boot] [PATCH 04/16] EXYNOS5: FDT : Decode peripheral id Rajeshwari Shinde
@ 2012-12-26 11:54   ` Minkyu Kang
  2012-12-26 12:00     ` Rajeshwari Birje
  0 siblings, 1 reply; 27+ messages in thread
From: Minkyu Kang @ 2012-12-26 11:54 UTC (permalink / raw)
  To: u-boot

Dear Rajeshwari Shinde,

On 14/12/12 20:56, Rajeshwari Shinde wrote:
> Api is added to decode peripheral id based on the interrupt number
> of the peripheral.
> 
> Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
> Acked-by; Simon Glass <sjg@chromium.org>
> ---
> Changes in V1:
> 	-Rebased on latest u-boot-samsung
>  arch/arm/cpu/armv7/exynos/pinmux.c        |   28 ++++++++++++++++++++++++++
>  arch/arm/include/asm/arch-exynos/periph.h |   31 ++++++++++++++++------------
>  arch/arm/include/asm/arch-exynos/pinmux.h |    8 +++++++
>  3 files changed, 54 insertions(+), 13 deletions(-)
> 
> diff --git a/arch/arm/cpu/armv7/exynos/pinmux.c b/arch/arm/cpu/armv7/exynos/pinmux.c
> index f02f441..f9f6911 100644
> --- a/arch/arm/cpu/armv7/exynos/pinmux.c
> +++ b/arch/arm/cpu/armv7/exynos/pinmux.c
> @@ -22,6 +22,7 @@
>   */
>  
>  #include <common.h>
> +#include <fdtdec.h>
>  #include <asm/arch/gpio.h>
>  #include <asm/arch/pinmux.h>
>  #include <asm/arch/sromc.h>
> @@ -396,3 +397,30 @@ int exynos_pinmux_config(int peripheral, int flags)
>  		return -1;
>  	}
>  }
> +
> +#ifdef CONFIG_OF_CONTROL
> +static int exynos5_pinmux_decode_periph_id(const void *blob, int node)
> +{
> +	int err;
> +	u32 cell[3];
> +
> +	err = fdtdec_get_int_array(blob, node, "interrupts", cell,
> +					ARRAY_SIZE(cell));
> +	if (err)
> +		return PERIPH_ID_NONE;
> +
> +	if ((131 > cell[1]) || (cell[1] < 31))

What means 131 and 31?

> +		return cell[1];
> +
> +	debug(" invalid peripheral id\n");
> +	return PERIPH_ID_NONE;
> +}
> +
> +int pinmux_decode_periph_id(const void *blob, int node)
> +{
> +	if (cpu_is_exynos5())
> +		return  exynos5_pinmux_decode_periph_id(blob, node);
> +	else
> +		return PERIPH_ID_NONE;
> +}
> +#endif
> diff --git a/arch/arm/include/asm/arch-exynos/periph.h b/arch/arm/include/asm/arch-exynos/periph.h
> index 13abd2d..783b77c 100644
> --- a/arch/arm/include/asm/arch-exynos/periph.h
> +++ b/arch/arm/include/asm/arch-exynos/periph.h
> @@ -25,12 +25,17 @@
>  #define __ASM_ARM_ARCH_PERIPH_H
>  
>  /*
> - * Peripherals requiring clock/pinmux configuration. List will
> + * Peripherals requiring pinmux configuration0. List will

configuration0?

>   * grow with support for more devices getting added.
> + * Numbering based on interrupt table.
>   *
>   */
>  enum periph_id {
> -	PERIPH_ID_I2C0,
> +	PERIPH_ID_UART0 = 51,
> +	PERIPH_ID_UART1,
> +	PERIPH_ID_UART2,
> +	PERIPH_ID_UART3,
> +	PERIPH_ID_I2C0 = 56,
>  	PERIPH_ID_I2C1,
>  	PERIPH_ID_I2C2,
>  	PERIPH_ID_I2C3,
> @@ -38,22 +43,22 @@ enum periph_id {
>  	PERIPH_ID_I2C5,
>  	PERIPH_ID_I2C6,
>  	PERIPH_ID_I2C7,
> -	PERIPH_ID_I2S1,
> -	PERIPH_ID_SDMMC0,
> +	PERIPH_ID_SPI0 = 68,
> +	PERIPH_ID_SPI1,
> +	PERIPH_ID_SPI2,
> +	PERIPH_ID_SDMMC0 = 75,
>  	PERIPH_ID_SDMMC1,
>  	PERIPH_ID_SDMMC2,
>  	PERIPH_ID_SDMMC3,
> -	PERIPH_ID_SDMMC4,
> -	PERIPH_ID_SROMC,
> -	PERIPH_ID_SPI0,
> -	PERIPH_ID_SPI1,
> -	PERIPH_ID_SPI2,
> +	PERIPH_ID_I2S1 = 99,
> +
> +/* Since following peripherals do not have shared peripheral interrupts (SPIs)

Please check multi line comment rule.

> + * they are numbered arbitiraly after the maximum SPIs Exynos has (128)
> + */
> +	PERIPH_ID_SROMC = 128,
>  	PERIPH_ID_SPI3,
>  	PERIPH_ID_SPI4,
> -	PERIPH_ID_UART0,
> -	PERIPH_ID_UART1,
> -	PERIPH_ID_UART2,
> -	PERIPH_ID_UART3,
> +	PERIPH_ID_SDMMC4,
>  
>  	PERIPH_ID_COUNT,
>  	PERIPH_ID_NONE = -1,
> diff --git a/arch/arm/include/asm/arch-exynos/pinmux.h b/arch/arm/include/asm/arch-exynos/pinmux.h
> index 10ea736..00cbb0d 100644
> --- a/arch/arm/include/asm/arch-exynos/pinmux.h
> +++ b/arch/arm/include/asm/arch-exynos/pinmux.h
> @@ -55,4 +55,12 @@ enum {
>   */
>  int exynos_pinmux_config(int peripheral, int flags);
>  
> +/**

please remove "*".

> + * Decode the peripheral id using the interrpt numbers.
> + *
> + * @param blob  Device tree blbo
> + * @param node  FDT I2C node to find
> + * @return peripheral id if ok, PERIPH_ID_NONE on error
> + */
> +int pinmux_decode_periph_id(const void *blob, int node);
>  #endif
> 

--
Thanks,
Minkyu Kang.

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

* [U-Boot] [PATCH 05/16] I2C: Driver changes for FDT support
  2012-12-14 11:56 ` [U-Boot] [PATCH 05/16] I2C: Driver changes for FDT support Rajeshwari Shinde
@ 2012-12-26 11:54   ` Minkyu Kang
  2012-12-26 12:01     ` Rajeshwari Birje
  2012-12-26 12:33     ` Rajeshwari Birje
  0 siblings, 2 replies; 27+ messages in thread
From: Minkyu Kang @ 2012-12-26 11:54 UTC (permalink / raw)
  To: u-boot

Dear Rajeshwari Shinde,

On 14/12/12 20:56, Rajeshwari Shinde wrote:
> Functions added to get the I2C bus number and reset I2C bus using
> FDT node.
> 
> Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
> Acked-by: Simon Glass <sjg@chromium.org>
> Acked-by: Heiko Schocher <hs@denx.de>
> ---
> Changes in V1:
> 	-Rebased on latest u-boot-samsung
>  drivers/i2c/s3c24x0_i2c.c |   83 ++++++++++++++++++++++++++++++++++++++++++++-
>  drivers/i2c/s3c24x0_i2c.h |    8 ++++
>  include/i2c.h             |   26 ++++++++++++++
>  3 files changed, 116 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/i2c/s3c24x0_i2c.c b/drivers/i2c/s3c24x0_i2c.c
> index 9bc4c7f..94a093e 100644
> --- a/drivers/i2c/s3c24x0_i2c.c
> +++ b/drivers/i2c/s3c24x0_i2c.c
> @@ -27,9 +27,11 @@
>   */
>  
>  #include <common.h>
> +#include <fdtdec.h>
>  #ifdef CONFIG_EXYNOS5
>  #include <asm/arch/clk.h>
>  #include <asm/arch/cpu.h>
> +#include <asm/arch/pinmux.h>
>  #else
>  #include <asm/arch/s3c24x0_cpu.h>
>  #endif
> @@ -60,7 +62,14 @@
>  #define I2C_TIMEOUT 1		/* 1 second */
>  
>  
> -static unsigned int g_current_bus;	/* Stores Current I2C Bus */
> +/*
> + * For SPL boot some boards need i2c before SDRAM is initialised so force
> + * variables to live in SRAM
> + */
> +static unsigned int g_current_bus __attribute__((section(".data")));
> +static struct s3c24x0_i2c_bus i2c_bus[CONFIG_MAX_I2C_NUM]
> +			__attribute__((section(".data")));
> +static int i2c_busses __attribute__((section(".data")));
>  
>  #ifndef CONFIG_EXYNOS5
>  static int GetI2CSDA(void)
> @@ -507,4 +516,76 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
>  		(i2c, I2C_WRITE, chip << 1, &xaddr[4 - alen], alen, buffer,
>  		 len) != 0);
>  }
> +
> +#ifdef CONFIG_OF_CONTROL
> +void board_i2c_init(const void *blob)
> +{
> +

please remove this blank line.

> +	int node_list[CONFIG_MAX_I2C_NUM];
> +	int count, i;
> +
> +	count = fdtdec_find_aliases_for_id(blob, "i2c",
> +		COMPAT_SAMSUNG_S3C2440_I2C, node_list,
> +		CONFIG_MAX_I2C_NUM);

need blank line here.

> +	for (i = 0; i < count; i++) {
> +		struct s3c24x0_i2c_bus *bus;
> +		int node = node_list[i];

How handle if the value of count is bigger than CONFIG_MAX_I2C_NUM?

> +
> +		if (node <= 0)
> +			continue;
> +		bus = &i2c_bus[i];
> +		bus->regs = (struct s3c24x0_i2c *)
> +			fdtdec_get_addr(blob, node, "reg");
> +		bus->id = pinmux_decode_periph_id(blob, node);
> +		bus->node = node;
> +		bus->bus_num = i2c_busses++;
> +		exynos_pinmux_config(bus->id, 0);
> +	}
> +

please remove this blank line.

> +}
> +
> +static struct s3c24x0_i2c_bus *get_bus(unsigned int bus_idx)
> +{
> +	if (bus_idx < i2c_busses)
> +		return &i2c_bus[bus_idx];

need blank line here.

> +	debug("Undefined bus: %d\n", bus_idx);
> +	return NULL;
> +}
> +
> +int i2c_get_bus_num_fdt(int node)
> +{
> +	int i;
> +
> +	for (i = 0; i < i2c_busses; i++) {
> +		if (node == i2c_bus[i].node)
> +			return i;
> +	}
> +
> +	debug("%s: Can't find any matched I2C bus\n", __func__);
> +	return -1;
> +}
> +
> +int i2c_reset_port_fdt(const void *blob, int node)
> +{
> +	struct s3c24x0_i2c_bus *i2c;
> +

Please remove this blank line.

> +	int bus;
> +
> +	bus = i2c_get_bus_num_fdt(node);
> +	if (bus < 0) {
> +		debug("could not get bus for node %d\n", node);
> +		return -1;
> +	}

need blank line here.

> +	i2c = get_bus(bus);
> +	if (!i2c) {
> +		debug("get_bus() failed for node node %d\n", node);
> +		return -1;
> +	}
> +
> +	i2c_ch_init(i2c->regs, CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
> +
> +	return 0;
> +}
> +#endif
> +
>  #endif /* CONFIG_HARD_I2C */
> diff --git a/drivers/i2c/s3c24x0_i2c.h b/drivers/i2c/s3c24x0_i2c.h
> index 2dd4b06..1243bf1 100644
> --- a/drivers/i2c/s3c24x0_i2c.h
> +++ b/drivers/i2c/s3c24x0_i2c.h
> @@ -30,4 +30,12 @@ struct s3c24x0_i2c {
>  	u32	iicds;
>  	u32	iiclc;
>  };
> +
> +struct s3c24x0_i2c_bus {
> +	int node;	/* device tree node */
> +	int bus_num;	/* i2c bus number */
> +	struct s3c24x0_i2c *regs;
> +	enum periph_id id;
> +};
> +
>  #endif /* _S3C24X0_I2C_H */
> diff --git a/include/i2c.h b/include/i2c.h
> index 16f099d..c60d075 100644
> --- a/include/i2c.h
> +++ b/include/i2c.h
> @@ -262,4 +262,30 @@ extern int get_multi_scl_pin(void);
>  extern int get_multi_sda_pin(void);
>  extern int multi_i2c_init(void);
>  #endif
> +
> +/**
> + * Get FDT values for i2c bus.
> + *
> + * @param blob  Device tree blbo
> + * @return the number of I2C bus
> + */
> +void board_i2c_init(const void *blob);
> +
> +/**
> + * Find the I2C bus number by given a FDT I2C node.
> + *
> + * @param blob  Device tree blbo
> + * @param node  FDT I2C node to find
> + * @return the number of I2C bus (zero based), or -1 on error
> + */
> +int i2c_get_bus_num_fdt(int node);
> +
> +/**
> + * Reset the I2C bus represented by the given a FDT I2C node.
> + *
> + * @param blob  Device tree blbo
> + * @param node  FDT I2C node to find
> + * @return 0 if port was reset, -1 if not found
> + */
> +int i2c_reset_port_fdt(const void *blob, int node);
>  #endif	/* _I2C_H_ */
> 

--
Thanks,
Minkyu Kang.

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

* [U-Boot] [PATCH 16/16] SPI: EXYNOS: Add FDT support to driver.
  2012-12-14 11:56 ` [U-Boot] [PATCH 16/16] SPI: EXYNOS: Add FDT support to driver Rajeshwari Shinde
@ 2012-12-26 11:54   ` Minkyu Kang
  2012-12-26 12:01     ` Rajeshwari Birje
  0 siblings, 1 reply; 27+ messages in thread
From: Minkyu Kang @ 2012-12-26 11:54 UTC (permalink / raw)
  To: u-boot

Dear Rajeshwari Shinde,

On 14/12/12 20:56, Rajeshwari Shinde wrote:
> This patch adds FDT support to the SPI driver.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
> Acked-by: Simon Glass <sjg@chromium.org>
> ---
> Changes in V1:
> 	-Rebased on latest u-boot-samsung
>  drivers/spi/exynos_spi.c |   96 +++++++++++++++++++++++++++++++++++++++++++---
>  1 files changed, 90 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/spi/exynos_spi.c b/drivers/spi/exynos_spi.c
> index 3e6c18f..7ecc566 100644
> --- a/drivers/spi/exynos_spi.c
> +++ b/drivers/spi/exynos_spi.c
> @@ -20,6 +20,7 @@
>  #include <common.h>
>  #include <malloc.h>
>  #include <spi.h>
> +#include <fdtdec.h>
>  #include <asm/arch/clk.h>
>  #include <asm/arch/clock.h>
>  #include <asm/arch/cpu.h>
> @@ -28,16 +29,20 @@
>  #include <asm/arch-exynos/spi.h>
>  #include <asm/io.h>
>  
> +DECLARE_GLOBAL_DATA_PTR;
> +
>  /* Information about each SPI controller */
>  struct spi_bus {
>  	enum periph_id periph_id;
>  	s32 frequency;		/* Default clock frequency, -1 for none */
>  	struct exynos_spi *regs;
>  	int inited;		/* 1 if this bus is ready for use */
> +	int node;
>  };
>  
>  /* A list of spi buses that we know about */
>  static struct spi_bus spi_bus[EXYNOS5_SPI_NUM_CONTROLLERS];
> +static unsigned int bus_count;
>  
>  struct exynos_spi_slave {
>  	struct spi_slave slave;
> @@ -50,7 +55,7 @@ struct exynos_spi_slave {
>  
>  static struct spi_bus *spi_get_bus(unsigned dev_index)
>  {
> -	if (dev_index < EXYNOS5_SPI_NUM_CONTROLLERS)
> +	if (dev_index < bus_count)
>  		return &spi_bus[dev_index];
>  	debug("%s: invalid bus %d", __func__, dev_index);
>  
> @@ -347,21 +352,100 @@ static inline struct exynos_spi *get_spi_base(int dev_index)
>  					(dev_index - 3);
>  }
>  
> +/*
> + * Read the SPI config from the device tree node.
> + *
> + * @param blob  FDT blob to read from
> + * @param node  Node offset to read from
> + * @param bus   SPI bus structure to fill with information
> + * @return 0 if ok, or -FDT_ERR_NOTFOUND if something was missing
> + */
> +static int spi_get_config(const void *blob, int node, struct spi_bus *bus)
> +{
> +	bus->node = node;
> +	bus->regs = (struct exynos_spi *)fdtdec_get_addr(blob, node, "reg");
> +	bus->periph_id = pinmux_decode_periph_id(blob, node);

Please add blank line here.

> +	if (bus->periph_id == PERIPH_ID_NONE) {
> +		debug("%s: Invalid peripheral ID %d\n", __func__,
> +			bus->periph_id);
> +		return -FDT_ERR_NOTFOUND;
> +	}
> +
> +	/* Use 500KHz as a suitable default */
> +	bus->frequency = fdtdec_get_int(blob, node, "spi-max-frequency",
> +					500000);
> +
> +	return 0;
> +}
> +

Please remove this blank line.

> +
> +/*
> + * Process a list of nodes, adding them to our list of SPI ports.
> + *
> + * @param blob          fdt blob
> + * @param node_list     list of nodes to process (any <=0 are ignored)
> + * @param count         number of nodes to process
> + * @param is_dvc        1 if these are DVC ports, 0 if standard I2C
> + * @return 0 if ok, -1 on error
> + */
> +static int process_nodes(const void *blob, int node_list[], int count)
> +{
> +	int i;
> +
> +	/* build the i2c_controllers[] for each controller */
> +	for (i = 0; i < count; i++) {
> +		int node = node_list[i];
> +		struct spi_bus *bus;
> +
> +		if (node <= 0)
> +			continue;
> +
> +		bus = &spi_bus[i];
> +		if (spi_get_config(blob, node, bus)) {
> +			printf("exynos spi_init: failed to decode bus %d\n",
> +				i);
> +			return -1;
> +		}
> +
> +		debug("spi: controller bus %d at %p, periph_id %d\n",
> +		      i, bus->regs, bus->periph_id);
> +		bus->inited = 1;
> +		bus_count++;
> +	}
> +
> +	return 0;
> +}
> +
>  /* Sadly there is no error return from this function */
>  void spi_init(void)
>  {
> -	int i;
> +	int count;
> +
> +#ifdef CONFIG_OF_CONTROL
> +	int node_list[EXYNOS5_SPI_NUM_CONTROLLERS];
> +	const void *blob = gd->fdt_blob;
> +
> +	count = fdtdec_find_aliases_for_id(blob, "spi",
> +			COMPAT_SAMSUNG_EXYNOS_SPI, node_list,
> +			EXYNOS5_SPI_NUM_CONTROLLERS);
> +	if (process_nodes(blob, node_list, count))
> +		return;
> +
> +#else
>  	struct spi_bus *bus;
>  
> -	for (i = 0; i < EXYNOS5_SPI_NUM_CONTROLLERS; i++) {
> -		bus = &spi_bus[i];
> -		bus->regs = get_spi_base(i);
> -		bus->periph_id = PERIPH_ID_SPI0 + i;
> +	for (count = 0; i < EXYNOS5_SPI_NUM_CONTROLLERS; i++) {

i or count?
Is it typo?

> +		bus = &spi_bus[count];
> +		bus->regs = get_spi_base(count);
> +		bus->periph_id = PERIPH_ID_SPI0 + count;
>  
>  		/* Although Exynos5 supports upto 50Mhz speed,
>  		 * we are setting it to 10Mhz for safe side
>  		 */
>  		bus->frequency = 10000000;
>  		bus->inited = 1;
> +		bus->node = 0;
> +		bus_count = EXYNOS5_SPI_NUM_CONTROLLERS;
>  	}
> +#endif
>  }
> 

--
Thanks,
Minkyu Kang.

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

* [U-Boot] [PATCH 11/16] Sound: WM8994: Add FDT support to codec
  2012-12-14 11:56 ` [U-Boot] [PATCH 11/16] Sound: WM8994: Add FDT support to codec Rajeshwari Shinde
@ 2012-12-26 11:55   ` Minkyu Kang
  2012-12-26 12:02     ` Rajeshwari Birje
  0 siblings, 1 reply; 27+ messages in thread
From: Minkyu Kang @ 2012-12-26 11:55 UTC (permalink / raw)
  To: u-boot

Dear Rajeshwari Shinde,

On 14/12/12 20:56, Rajeshwari Shinde wrote:
> This patch adds FDT support to the codec.
> 
> Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
> Acked-by: Simon Glass <sjg@chromium.org>
> ---
> Changes in V1:
> 	-Rebased on latest u-boot-samsung
>  drivers/sound/wm8994.c |   76 ++++++++++++++++++++++++++++++++++++++++++++++-
>  drivers/sound/wm8994.h |    6 +--
>  2 files changed, 76 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/sound/wm8994.c b/drivers/sound/wm8994.c
> index 293903a..a528502 100644
> --- a/drivers/sound/wm8994.c
> +++ b/drivers/sound/wm8994.c
> @@ -26,9 +26,11 @@
>  #include <asm/io.h>
>  #include <common.h>
>  #include <div64.h>
> +#include <fdtdec.h>
>  #include <i2c.h>
>  #include <i2s.h>
>  #include <sound.h>
> +#include <asm/arch/sound.h>
>  #include "wm8994.h"
>  #include "wm8994_registers.h"
>  
> @@ -77,6 +79,7 @@ static int bclk_divs[] = {
>  
>  static struct wm8994_priv g_wm8994_info;
>  static unsigned char g_wm8994_i2c_dev_addr;
> +static struct sound_codec_info g_codec_info;
>  
>  /*
>   * Initialise I2C for wm 8994
> @@ -747,13 +750,82 @@ err:
>  	return -1;
>  }
>  
> +/*
> + * Gets fdt values for wm8994 config parameters
> + *
> + * @param pcodec_info	codec information structure
> + * @param blob		FDT blob
> + * @return		int value, 0 for success
> + */
> +static int get_codec_values(struct sound_codec_info *pcodec_info,
> +			const void *blob)
> +{
> +	int error = 0;
> +#ifdef CONFIG_OF_CONTROL
> +	enum fdt_compat_id compat;
> +	int node;
> +	int parent;
> +
> +	/* Get the node from FDT for codec */
> +	node = fdtdec_next_compatible(blob, 0, COMPAT_WOLFSON_WM8994_CODEC);
> +	if (node <= 0) {
> +		debug("EXYNOS_SOUND: No node for codec in device tree\n");
> +		debug("node = %d\n", node);
> +		return -1;
> +	}
> +
> +	parent = fdt_parent_offset(blob, node);
> +	if (parent < 0) {
> +		debug("%s: Cannot find node parent\n", __func__);
> +		return -1;
> +	}
> +
> +	compat = fdtdec_lookup(blob, parent);
> +	switch (compat) {
> +	case COMPAT_SAMSUNG_S3C2440_I2C:
> +		pcodec_info->i2c_bus = i2c_get_bus_num_fdt(parent);
> +		error |= pcodec_info->i2c_bus;
> +		debug("i2c bus = %d\n", pcodec_info->i2c_bus);
> +		pcodec_info->i2c_dev_addr = fdtdec_get_int(blob, node,
> +							"reg", 0);
> +		error |= pcodec_info->i2c_dev_addr;
> +		debug("i2c dev addr = %d\n", pcodec_info->i2c_dev_addr);
> +		break;
> +	default:
> +		debug("%s: Unknown compat id %d\n", __func__, compat);
> +		return -1;
> +	}
> +#else
> +	pcodec_info->i2c_bus = AUDIO_I2C_BUS;
> +	pcodec_info->i2c_dev_addr = AUDIO_I2C_REG;
> +	debug("i2c dev addr = %d\n", pcodec_info->i2c_dev_addr);
> +#endif
> +
> +	pcodec_info->codec_type = CODEC_WM_8994;
> +
> +	if (error == -1) {
> +		debug("fail to get wm8994 codec node properties\n");
> +		return -1;
> +	}
> +
> +	return 0;

please remove this blank line.

> +
> +}
> +

please remove this blank line.

> +
>  /*wm8994 Device Initialisation */
> -int wm8994_init(struct sound_codec_info *pcodec_info,
> -			enum en_audio_interface aif_id,
> +int wm8994_init(const void *blob, enum en_audio_interface aif_id,
>  			int sampling_rate, int mclk_freq,
>  			int bits_per_sample, unsigned int channels)
>  {
>  	int ret = 0;
> +	struct sound_codec_info *pcodec_info = &g_codec_info;
> +
> +	/* Get the codec Values */
> +	if (get_codec_values(pcodec_info, blob) < 0) {
> +		debug("FDT Codec values failed\n");
> +		return -1;
> +	}
>  
>  	/* shift the device address by 1 for 7 bit addressing */
>  	g_wm8994_i2c_dev_addr = pcodec_info->i2c_dev_addr;
> diff --git a/drivers/sound/wm8994.h b/drivers/sound/wm8994.h
> index a8f0de1..a1e8335 100644
> --- a/drivers/sound/wm8994.h
> +++ b/drivers/sound/wm8994.h
> @@ -69,8 +69,7 @@ enum wm8994_type {
>  /*
>   * intialise wm8994 sound codec device for the given configuration
>   *
> - * @param pcodec_info		pointer value of the sound codec info structure
> - *				parsed from device tree
> + * @param blob			FDT node for codec values
>   * @param aif_id		enum value of codec interface port in which
>   *				soc i2s is connected
>   * @param sampling_rate		Sampling rate ranges between from 8khz to 96khz
> @@ -80,8 +79,7 @@ enum wm8994_type {
>   *
>   * @returns -1 for error  and 0  Success.
>   */
> -int wm8994_init(struct sound_codec_info *pcodec_info,
> -			enum en_audio_interface aif_id,
> +int wm8994_init(const void *blob, enum en_audio_interface aif_id,
>  			int sampling_rate, int mclk_freq,
>  			int bits_per_sample, unsigned int channels);
>  #endif /*__WM8994_H__ */
> 

--
Thanks,
Minkyu Kang.

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

* [U-Boot] [PATCH 04/16] EXYNOS5: FDT : Decode peripheral id
  2012-12-26 11:54   ` Minkyu Kang
@ 2012-12-26 12:00     ` Rajeshwari Birje
  2012-12-26 15:37       ` Simon Glass
  0 siblings, 1 reply; 27+ messages in thread
From: Rajeshwari Birje @ 2012-12-26 12:00 UTC (permalink / raw)
  To: u-boot

Hi Minkyu Kang,

Thank you for comments

On Wed, Dec 26, 2012 at 5:24 PM, Minkyu Kang <mk7.kang@samsung.com> wrote:

> Dear Rajeshwari Shinde,
>
> On 14/12/12 20:56, Rajeshwari Shinde wrote:
> > Api is added to decode peripheral id based on the interrupt number
> > of the peripheral.
> >
> > Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
> > Acked-by; Simon Glass <sjg@chromium.org>
> > ---
> > Changes in V1:
> >       -Rebased on latest u-boot-samsung
> >  arch/arm/cpu/armv7/exynos/pinmux.c        |   28
> ++++++++++++++++++++++++++
> >  arch/arm/include/asm/arch-exynos/periph.h |   31
> ++++++++++++++++------------
> >  arch/arm/include/asm/arch-exynos/pinmux.h |    8 +++++++
> >  3 files changed, 54 insertions(+), 13 deletions(-)
> >
> > diff --git a/arch/arm/cpu/armv7/exynos/pinmux.c
> b/arch/arm/cpu/armv7/exynos/pinmux.c
> > index f02f441..f9f6911 100644
> > --- a/arch/arm/cpu/armv7/exynos/pinmux.c
> > +++ b/arch/arm/cpu/armv7/exynos/pinmux.c
> > @@ -22,6 +22,7 @@
> >   */
> >
> >  #include <common.h>
> > +#include <fdtdec.h>
> >  #include <asm/arch/gpio.h>
> >  #include <asm/arch/pinmux.h>
> >  #include <asm/arch/sromc.h>
> > @@ -396,3 +397,30 @@ int exynos_pinmux_config(int peripheral, int flags)
> >               return -1;
> >       }
> >  }
> > +
> > +#ifdef CONFIG_OF_CONTROL
> > +static int exynos5_pinmux_decode_periph_id(const void *blob, int node)
> > +{
> > +     int err;
> > +     u32 cell[3];
> > +
> > +     err = fdtdec_get_int_array(blob, node, "interrupts", cell,
> > +                                     ARRAY_SIZE(cell));
> > +     if (err)
> > +             return PERIPH_ID_NONE;
> > +
> > +     if ((131 > cell[1]) || (cell[1] < 31))
>
> What means 131 and 31?
>
will correct and remove magic numbers.
They were the high and lowest interrupt numbers.

>
> > +             return cell[1];
> > +
> > +     debug(" invalid peripheral id\n");
> > +     return PERIPH_ID_NONE;
> > +}
> > +
> > +int pinmux_decode_periph_id(const void *blob, int node)
> > +{
> > +     if (cpu_is_exynos5())
> > +             return  exynos5_pinmux_decode_periph_id(blob, node);
> > +     else
> > +             return PERIPH_ID_NONE;
> > +}
> > +#endif
> > diff --git a/arch/arm/include/asm/arch-exynos/periph.h
> b/arch/arm/include/asm/arch-exynos/periph.h
> > index 13abd2d..783b77c 100644
> > --- a/arch/arm/include/asm/arch-exynos/periph.h
> > +++ b/arch/arm/include/asm/arch-exynos/periph.h
> > @@ -25,12 +25,17 @@
> >  #define __ASM_ARM_ARCH_PERIPH_H
> >
> >  /*
> > - * Peripherals requiring clock/pinmux configuration. List will
> > + * Peripherals requiring pinmux configuration0. List will
>
> configuration0?
>
- Will correct this

>
> >   * grow with support for more devices getting added.
> > + * Numbering based on interrupt table.
> >   *
> >   */
> >  enum periph_id {
> > -     PERIPH_ID_I2C0,
> > +     PERIPH_ID_UART0 = 51,
> > +     PERIPH_ID_UART1,
> > +     PERIPH_ID_UART2,
> > +     PERIPH_ID_UART3,
> > +     PERIPH_ID_I2C0 = 56,
> >       PERIPH_ID_I2C1,
> >       PERIPH_ID_I2C2,
> >       PERIPH_ID_I2C3,
> > @@ -38,22 +43,22 @@ enum periph_id {
> >       PERIPH_ID_I2C5,
> >       PERIPH_ID_I2C6,
> >       PERIPH_ID_I2C7,
> > -     PERIPH_ID_I2S1,
> > -     PERIPH_ID_SDMMC0,
> > +     PERIPH_ID_SPI0 = 68,
> > +     PERIPH_ID_SPI1,
> > +     PERIPH_ID_SPI2,
> > +     PERIPH_ID_SDMMC0 = 75,
> >       PERIPH_ID_SDMMC1,
> >       PERIPH_ID_SDMMC2,
> >       PERIPH_ID_SDMMC3,
> > -     PERIPH_ID_SDMMC4,
> > -     PERIPH_ID_SROMC,
> > -     PERIPH_ID_SPI0,
> > -     PERIPH_ID_SPI1,
> > -     PERIPH_ID_SPI2,
> > +     PERIPH_ID_I2S1 = 99,
> > +
> > +/* Since following peripherals do not have shared peripheral interrupts
> (SPIs)
>
> Please check multi line comment rule.
>
- Will correct this

>
> > + * they are numbered arbitiraly after the maximum SPIs Exynos has (128)
> > + */
> > +     PERIPH_ID_SROMC = 128,
> >       PERIPH_ID_SPI3,
> >       PERIPH_ID_SPI4,
> > -     PERIPH_ID_UART0,
> > -     PERIPH_ID_UART1,
> > -     PERIPH_ID_UART2,
> > -     PERIPH_ID_UART3,
> > +     PERIPH_ID_SDMMC4,
> >
> >       PERIPH_ID_COUNT,
> >       PERIPH_ID_NONE = -1,
> > diff --git a/arch/arm/include/asm/arch-exynos/pinmux.h
> b/arch/arm/include/asm/arch-exynos/pinmux.h
> > index 10ea736..00cbb0d 100644
> > --- a/arch/arm/include/asm/arch-exynos/pinmux.h
> > +++ b/arch/arm/include/asm/arch-exynos/pinmux.h
> > @@ -55,4 +55,12 @@ enum {
> >   */
> >  int exynos_pinmux_config(int peripheral, int flags);
> >
> > +/**
>
> please remove "*".
>
- Will correct this

>
> > + * Decode the peripheral id using the interrpt numbers.
> > + *
> > + * @param blob  Device tree blbo
> > + * @param node  FDT I2C node to find
> > + * @return peripheral id if ok, PERIPH_ID_NONE on error
> > + */
> > +int pinmux_decode_periph_id(const void *blob, int node);
> >  #endif
> >
>
> --
> Thanks,
> Minkyu Kang.
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>



-- 
Regards,
Rajeshwari Shinde

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

* [U-Boot] [PATCH 05/16] I2C: Driver changes for FDT support
  2012-12-26 11:54   ` Minkyu Kang
@ 2012-12-26 12:01     ` Rajeshwari Birje
  2012-12-26 12:33     ` Rajeshwari Birje
  1 sibling, 0 replies; 27+ messages in thread
From: Rajeshwari Birje @ 2012-12-26 12:01 UTC (permalink / raw)
  To: u-boot

Hi Minkyu Kang,

Thank you for comments.Will correct them

On Wed, Dec 26, 2012 at 5:24 PM, Minkyu Kang <mk7.kang@samsung.com> wrote:

> Dear Rajeshwari Shinde,
>
> On 14/12/12 20:56, Rajeshwari Shinde wrote:
> > Functions added to get the I2C bus number and reset I2C bus using
> > FDT node.
> >
> > Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
> > Acked-by: Simon Glass <sjg@chromium.org>
> > Acked-by: Heiko Schocher <hs@denx.de>
> > ---
> > Changes in V1:
> >       -Rebased on latest u-boot-samsung
> >  drivers/i2c/s3c24x0_i2c.c |   83
> ++++++++++++++++++++++++++++++++++++++++++++-
> >  drivers/i2c/s3c24x0_i2c.h |    8 ++++
> >  include/i2c.h             |   26 ++++++++++++++
> >  3 files changed, 116 insertions(+), 1 deletions(-)
> >
> > diff --git a/drivers/i2c/s3c24x0_i2c.c b/drivers/i2c/s3c24x0_i2c.c
> > index 9bc4c7f..94a093e 100644
> > --- a/drivers/i2c/s3c24x0_i2c.c
> > +++ b/drivers/i2c/s3c24x0_i2c.c
> > @@ -27,9 +27,11 @@
> >   */
> >
> >  #include <common.h>
> > +#include <fdtdec.h>
> >  #ifdef CONFIG_EXYNOS5
> >  #include <asm/arch/clk.h>
> >  #include <asm/arch/cpu.h>
> > +#include <asm/arch/pinmux.h>
> >  #else
> >  #include <asm/arch/s3c24x0_cpu.h>
> >  #endif
> > @@ -60,7 +62,14 @@
> >  #define I2C_TIMEOUT 1                /* 1 second */
> >
> >
> > -static unsigned int g_current_bus;   /* Stores Current I2C Bus */
> > +/*
> > + * For SPL boot some boards need i2c before SDRAM is initialised so
> force
> > + * variables to live in SRAM
> > + */
> > +static unsigned int g_current_bus __attribute__((section(".data")));
> > +static struct s3c24x0_i2c_bus i2c_bus[CONFIG_MAX_I2C_NUM]
> > +                     __attribute__((section(".data")));
> > +static int i2c_busses __attribute__((section(".data")));
> >
> >  #ifndef CONFIG_EXYNOS5
> >  static int GetI2CSDA(void)
> > @@ -507,4 +516,76 @@ int i2c_write(uchar chip, uint addr, int alen,
> uchar *buffer, int len)
> >               (i2c, I2C_WRITE, chip << 1, &xaddr[4 - alen], alen, buffer,
> >                len) != 0);
> >  }
> > +
> > +#ifdef CONFIG_OF_CONTROL
> > +void board_i2c_init(const void *blob)
> > +{
> > +
>
> please remove this blank line.
>
> > +     int node_list[CONFIG_MAX_I2C_NUM];
> > +     int count, i;
> > +
> > +     count = fdtdec_find_aliases_for_id(blob, "i2c",
> > +             COMPAT_SAMSUNG_S3C2440_I2C, node_list,
> > +             CONFIG_MAX_I2C_NUM);
>
> need blank line here.
>
> > +     for (i = 0; i < count; i++) {
> > +             struct s3c24x0_i2c_bus *bus;
> > +             int node = node_list[i];
>
> How handle if the value of count is bigger than CONFIG_MAX_I2C_NUM?
>
> > +
> > +             if (node <= 0)
> > +                     continue;
> > +             bus = &i2c_bus[i];
> > +             bus->regs = (struct s3c24x0_i2c *)
> > +                     fdtdec_get_addr(blob, node, "reg");
> > +             bus->id = pinmux_decode_periph_id(blob, node);
> > +             bus->node = node;
> > +             bus->bus_num = i2c_busses++;
> > +             exynos_pinmux_config(bus->id, 0);
> > +     }
> > +
>
> please remove this blank line.
>
> > +}
> > +
> > +static struct s3c24x0_i2c_bus *get_bus(unsigned int bus_idx)
> > +{
> > +     if (bus_idx < i2c_busses)
> > +             return &i2c_bus[bus_idx];
>
> need blank line here.
>
> > +     debug("Undefined bus: %d\n", bus_idx);
> > +     return NULL;
> > +}
> > +
> > +int i2c_get_bus_num_fdt(int node)
> > +{
> > +     int i;
> > +
> > +     for (i = 0; i < i2c_busses; i++) {
> > +             if (node == i2c_bus[i].node)
> > +                     return i;
> > +     }
> > +
> > +     debug("%s: Can't find any matched I2C bus\n", __func__);
> > +     return -1;
> > +}
> > +
> > +int i2c_reset_port_fdt(const void *blob, int node)
> > +{
> > +     struct s3c24x0_i2c_bus *i2c;
> > +
>
> Please remove this blank line.
>
> > +     int bus;
> > +
> > +     bus = i2c_get_bus_num_fdt(node);
> > +     if (bus < 0) {
> > +             debug("could not get bus for node %d\n", node);
> > +             return -1;
> > +     }
>
> need blank line here.
>
> > +     i2c = get_bus(bus);
> > +     if (!i2c) {
> > +             debug("get_bus() failed for node node %d\n", node);
> > +             return -1;
> > +     }
> > +
> > +     i2c_ch_init(i2c->regs, CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
> > +
> > +     return 0;
> > +}
> > +#endif
> > +
> >  #endif /* CONFIG_HARD_I2C */
> > diff --git a/drivers/i2c/s3c24x0_i2c.h b/drivers/i2c/s3c24x0_i2c.h
> > index 2dd4b06..1243bf1 100644
> > --- a/drivers/i2c/s3c24x0_i2c.h
> > +++ b/drivers/i2c/s3c24x0_i2c.h
> > @@ -30,4 +30,12 @@ struct s3c24x0_i2c {
> >       u32     iicds;
> >       u32     iiclc;
> >  };
> > +
> > +struct s3c24x0_i2c_bus {
> > +     int node;       /* device tree node */
> > +     int bus_num;    /* i2c bus number */
> > +     struct s3c24x0_i2c *regs;
> > +     enum periph_id id;
> > +};
> > +
> >  #endif /* _S3C24X0_I2C_H */
> > diff --git a/include/i2c.h b/include/i2c.h
> > index 16f099d..c60d075 100644
> > --- a/include/i2c.h
> > +++ b/include/i2c.h
> > @@ -262,4 +262,30 @@ extern int get_multi_scl_pin(void);
> >  extern int get_multi_sda_pin(void);
> >  extern int multi_i2c_init(void);
> >  #endif
> > +
> > +/**
> > + * Get FDT values for i2c bus.
> > + *
> > + * @param blob  Device tree blbo
> > + * @return the number of I2C bus
> > + */
> > +void board_i2c_init(const void *blob);
> > +
> > +/**
> > + * Find the I2C bus number by given a FDT I2C node.
> > + *
> > + * @param blob  Device tree blbo
> > + * @param node  FDT I2C node to find
> > + * @return the number of I2C bus (zero based), or -1 on error
> > + */
> > +int i2c_get_bus_num_fdt(int node);
> > +
> > +/**
> > + * Reset the I2C bus represented by the given a FDT I2C node.
> > + *
> > + * @param blob  Device tree blbo
> > + * @param node  FDT I2C node to find
> > + * @return 0 if port was reset, -1 if not found
> > + */
> > +int i2c_reset_port_fdt(const void *blob, int node);
> >  #endif       /* _I2C_H_ */
> >
>
> --
> Thanks,
> Minkyu Kang.
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>



-- 
Regards,
Rajeshwari Shinde

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

* [U-Boot] [PATCH 16/16] SPI: EXYNOS: Add FDT support to driver.
  2012-12-26 11:54   ` Minkyu Kang
@ 2012-12-26 12:01     ` Rajeshwari Birje
  0 siblings, 0 replies; 27+ messages in thread
From: Rajeshwari Birje @ 2012-12-26 12:01 UTC (permalink / raw)
  To: u-boot

Hi Minkyu Kang,

Thank you for comments.Will correct them.

On Wed, Dec 26, 2012 at 5:24 PM, Minkyu Kang <mk7.kang@samsung.com> wrote:

> Dear Rajeshwari Shinde,
>
> On 14/12/12 20:56, Rajeshwari Shinde wrote:
> > This patch adds FDT support to the SPI driver.
> >
> > Signed-off-by: Simon Glass <sjg@chromium.org>
> > Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
> > Acked-by: Simon Glass <sjg@chromium.org>
> > ---
> > Changes in V1:
> >       -Rebased on latest u-boot-samsung
> >  drivers/spi/exynos_spi.c |   96
> +++++++++++++++++++++++++++++++++++++++++++---
> >  1 files changed, 90 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/spi/exynos_spi.c b/drivers/spi/exynos_spi.c
> > index 3e6c18f..7ecc566 100644
> > --- a/drivers/spi/exynos_spi.c
> > +++ b/drivers/spi/exynos_spi.c
> > @@ -20,6 +20,7 @@
> >  #include <common.h>
> >  #include <malloc.h>
> >  #include <spi.h>
> > +#include <fdtdec.h>
> >  #include <asm/arch/clk.h>
> >  #include <asm/arch/clock.h>
> >  #include <asm/arch/cpu.h>
> > @@ -28,16 +29,20 @@
> >  #include <asm/arch-exynos/spi.h>
> >  #include <asm/io.h>
> >
> > +DECLARE_GLOBAL_DATA_PTR;
> > +
> >  /* Information about each SPI controller */
> >  struct spi_bus {
> >       enum periph_id periph_id;
> >       s32 frequency;          /* Default clock frequency, -1 for none */
> >       struct exynos_spi *regs;
> >       int inited;             /* 1 if this bus is ready for use */
> > +     int node;
> >  };
> >
> >  /* A list of spi buses that we know about */
> >  static struct spi_bus spi_bus[EXYNOS5_SPI_NUM_CONTROLLERS];
> > +static unsigned int bus_count;
> >
> >  struct exynos_spi_slave {
> >       struct spi_slave slave;
> > @@ -50,7 +55,7 @@ struct exynos_spi_slave {
> >
> >  static struct spi_bus *spi_get_bus(unsigned dev_index)
> >  {
> > -     if (dev_index < EXYNOS5_SPI_NUM_CONTROLLERS)
> > +     if (dev_index < bus_count)
> >               return &spi_bus[dev_index];
> >       debug("%s: invalid bus %d", __func__, dev_index);
> >
> > @@ -347,21 +352,100 @@ static inline struct exynos_spi *get_spi_base(int
> dev_index)
> >                                       (dev_index - 3);
> >  }
> >
> > +/*
> > + * Read the SPI config from the device tree node.
> > + *
> > + * @param blob  FDT blob to read from
> > + * @param node  Node offset to read from
> > + * @param bus   SPI bus structure to fill with information
> > + * @return 0 if ok, or -FDT_ERR_NOTFOUND if something was missing
> > + */
> > +static int spi_get_config(const void *blob, int node, struct spi_bus
> *bus)
> > +{
> > +     bus->node = node;
> > +     bus->regs = (struct exynos_spi *)fdtdec_get_addr(blob, node,
> "reg");
> > +     bus->periph_id = pinmux_decode_periph_id(blob, node);
>
> Please add blank line here.
>
> > +     if (bus->periph_id == PERIPH_ID_NONE) {
> > +             debug("%s: Invalid peripheral ID %d\n", __func__,
> > +                     bus->periph_id);
> > +             return -FDT_ERR_NOTFOUND;
> > +     }
> > +
> > +     /* Use 500KHz as a suitable default */
> > +     bus->frequency = fdtdec_get_int(blob, node, "spi-max-frequency",
> > +                                     500000);
> > +
> > +     return 0;
> > +}
> > +
>
> Please remove this blank line.
>
> > +
> > +/*
> > + * Process a list of nodes, adding them to our list of SPI ports.
> > + *
> > + * @param blob          fdt blob
> > + * @param node_list     list of nodes to process (any <=0 are ignored)
> > + * @param count         number of nodes to process
> > + * @param is_dvc        1 if these are DVC ports, 0 if standard I2C
> > + * @return 0 if ok, -1 on error
> > + */
> > +static int process_nodes(const void *blob, int node_list[], int count)
> > +{
> > +     int i;
> > +
> > +     /* build the i2c_controllers[] for each controller */
> > +     for (i = 0; i < count; i++) {
> > +             int node = node_list[i];
> > +             struct spi_bus *bus;
> > +
> > +             if (node <= 0)
> > +                     continue;
> > +
> > +             bus = &spi_bus[i];
> > +             if (spi_get_config(blob, node, bus)) {
> > +                     printf("exynos spi_init: failed to decode bus
> %d\n",
> > +                             i);
> > +                     return -1;
> > +             }
> > +
> > +             debug("spi: controller bus %d at %p, periph_id %d\n",
> > +                   i, bus->regs, bus->periph_id);
> > +             bus->inited = 1;
> > +             bus_count++;
> > +     }
> > +
> > +     return 0;
> > +}
> > +
> >  /* Sadly there is no error return from this function */
> >  void spi_init(void)
> >  {
> > -     int i;
> > +     int count;
> > +
> > +#ifdef CONFIG_OF_CONTROL
> > +     int node_list[EXYNOS5_SPI_NUM_CONTROLLERS];
> > +     const void *blob = gd->fdt_blob;
> > +
> > +     count = fdtdec_find_aliases_for_id(blob, "spi",
> > +                     COMPAT_SAMSUNG_EXYNOS_SPI, node_list,
> > +                     EXYNOS5_SPI_NUM_CONTROLLERS);
> > +     if (process_nodes(blob, node_list, count))
> > +             return;
> > +
> > +#else
> >       struct spi_bus *bus;
> >
> > -     for (i = 0; i < EXYNOS5_SPI_NUM_CONTROLLERS; i++) {
> > -             bus = &spi_bus[i];
> > -             bus->regs = get_spi_base(i);
> > -             bus->periph_id = PERIPH_ID_SPI0 + i;
> > +     for (count = 0; i < EXYNOS5_SPI_NUM_CONTROLLERS; i++) {
>
> i or count?
> Is it typo?
>
> > +             bus = &spi_bus[count];
> > +             bus->regs = get_spi_base(count);
> > +             bus->periph_id = PERIPH_ID_SPI0 + count;
> >
> >               /* Although Exynos5 supports upto 50Mhz speed,
> >                * we are setting it to 10Mhz for safe side
> >                */
> >               bus->frequency = 10000000;
> >               bus->inited = 1;
> > +             bus->node = 0;
> > +             bus_count = EXYNOS5_SPI_NUM_CONTROLLERS;
> >       }
> > +#endif
> >  }
> >
>
> --
> Thanks,
> Minkyu Kang.
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>



-- 
Regards,
Rajeshwari Shinde

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

* [U-Boot] [PATCH 11/16] Sound: WM8994: Add FDT support to codec
  2012-12-26 11:55   ` Minkyu Kang
@ 2012-12-26 12:02     ` Rajeshwari Birje
  0 siblings, 0 replies; 27+ messages in thread
From: Rajeshwari Birje @ 2012-12-26 12:02 UTC (permalink / raw)
  To: u-boot

Hi Minkyu Kang,

Thank you for comments.Will correct them

On Wed, Dec 26, 2012 at 5:25 PM, Minkyu Kang <mk7.kang@samsung.com> wrote:

> Dear Rajeshwari Shinde,
>
> On 14/12/12 20:56, Rajeshwari Shinde wrote:
> > This patch adds FDT support to the codec.
> >
> > Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
> > Acked-by: Simon Glass <sjg@chromium.org>
> > ---
> > Changes in V1:
> >       -Rebased on latest u-boot-samsung
> >  drivers/sound/wm8994.c |   76
> ++++++++++++++++++++++++++++++++++++++++++++++-
> >  drivers/sound/wm8994.h |    6 +--
> >  2 files changed, 76 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/sound/wm8994.c b/drivers/sound/wm8994.c
> > index 293903a..a528502 100644
> > --- a/drivers/sound/wm8994.c
> > +++ b/drivers/sound/wm8994.c
> > @@ -26,9 +26,11 @@
> >  #include <asm/io.h>
> >  #include <common.h>
> >  #include <div64.h>
> > +#include <fdtdec.h>
> >  #include <i2c.h>
> >  #include <i2s.h>
> >  #include <sound.h>
> > +#include <asm/arch/sound.h>
> >  #include "wm8994.h"
> >  #include "wm8994_registers.h"
> >
> > @@ -77,6 +79,7 @@ static int bclk_divs[] = {
> >
> >  static struct wm8994_priv g_wm8994_info;
> >  static unsigned char g_wm8994_i2c_dev_addr;
> > +static struct sound_codec_info g_codec_info;
> >
> >  /*
> >   * Initialise I2C for wm 8994
> > @@ -747,13 +750,82 @@ err:
> >       return -1;
> >  }
> >
> > +/*
> > + * Gets fdt values for wm8994 config parameters
> > + *
> > + * @param pcodec_info        codec information structure
> > + * @param blob               FDT blob
> > + * @return           int value, 0 for success
> > + */
> > +static int get_codec_values(struct sound_codec_info *pcodec_info,
> > +                     const void *blob)
> > +{
> > +     int error = 0;
> > +#ifdef CONFIG_OF_CONTROL
> > +     enum fdt_compat_id compat;
> > +     int node;
> > +     int parent;
> > +
> > +     /* Get the node from FDT for codec */
> > +     node = fdtdec_next_compatible(blob, 0,
> COMPAT_WOLFSON_WM8994_CODEC);
> > +     if (node <= 0) {
> > +             debug("EXYNOS_SOUND: No node for codec in device tree\n");
> > +             debug("node = %d\n", node);
> > +             return -1;
> > +     }
> > +
> > +     parent = fdt_parent_offset(blob, node);
> > +     if (parent < 0) {
> > +             debug("%s: Cannot find node parent\n", __func__);
> > +             return -1;
> > +     }
> > +
> > +     compat = fdtdec_lookup(blob, parent);
> > +     switch (compat) {
> > +     case COMPAT_SAMSUNG_S3C2440_I2C:
> > +             pcodec_info->i2c_bus = i2c_get_bus_num_fdt(parent);
> > +             error |= pcodec_info->i2c_bus;
> > +             debug("i2c bus = %d\n", pcodec_info->i2c_bus);
> > +             pcodec_info->i2c_dev_addr = fdtdec_get_int(blob, node,
> > +                                                     "reg", 0);
> > +             error |= pcodec_info->i2c_dev_addr;
> > +             debug("i2c dev addr = %d\n", pcodec_info->i2c_dev_addr);
> > +             break;
> > +     default:
> > +             debug("%s: Unknown compat id %d\n", __func__, compat);
> > +             return -1;
> > +     }
> > +#else
> > +     pcodec_info->i2c_bus = AUDIO_I2C_BUS;
> > +     pcodec_info->i2c_dev_addr = AUDIO_I2C_REG;
> > +     debug("i2c dev addr = %d\n", pcodec_info->i2c_dev_addr);
> > +#endif
> > +
> > +     pcodec_info->codec_type = CODEC_WM_8994;
> > +
> > +     if (error == -1) {
> > +             debug("fail to get wm8994 codec node properties\n");
> > +             return -1;
> > +     }
> > +
> > +     return 0;
>
> please remove this blank line.
>
> > +
> > +}
> > +
>
> please remove this blank line.
>
> > +
> >  /*wm8994 Device Initialisation */
> > -int wm8994_init(struct sound_codec_info *pcodec_info,
> > -                     enum en_audio_interface aif_id,
> > +int wm8994_init(const void *blob, enum en_audio_interface aif_id,
> >                       int sampling_rate, int mclk_freq,
> >                       int bits_per_sample, unsigned int channels)
> >  {
> >       int ret = 0;
> > +     struct sound_codec_info *pcodec_info = &g_codec_info;
> > +
> > +     /* Get the codec Values */
> > +     if (get_codec_values(pcodec_info, blob) < 0) {
> > +             debug("FDT Codec values failed\n");
> > +             return -1;
> > +     }
> >
> >       /* shift the device address by 1 for 7 bit addressing */
> >       g_wm8994_i2c_dev_addr = pcodec_info->i2c_dev_addr;
> > diff --git a/drivers/sound/wm8994.h b/drivers/sound/wm8994.h
> > index a8f0de1..a1e8335 100644
> > --- a/drivers/sound/wm8994.h
> > +++ b/drivers/sound/wm8994.h
> > @@ -69,8 +69,7 @@ enum wm8994_type {
> >  /*
> >   * intialise wm8994 sound codec device for the given configuration
> >   *
> > - * @param pcodec_info                pointer value of the sound codec
> info structure
> > - *                           parsed from device tree
> > + * @param blob                       FDT node for codec values
> >   * @param aif_id             enum value of codec interface port in which
> >   *                           soc i2s is connected
> >   * @param sampling_rate              Sampling rate ranges between from
> 8khz to 96khz
> > @@ -80,8 +79,7 @@ enum wm8994_type {
> >   *
> >   * @returns -1 for error  and 0  Success.
> >   */
> > -int wm8994_init(struct sound_codec_info *pcodec_info,
> > -                     enum en_audio_interface aif_id,
> > +int wm8994_init(const void *blob, enum en_audio_interface aif_id,
> >                       int sampling_rate, int mclk_freq,
> >                       int bits_per_sample, unsigned int channels);
> >  #endif /*__WM8994_H__ */
> >
>
> --
> Thanks,
> Minkyu Kang.
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>



-- 
Regards,
Rajeshwari Shinde

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

* [U-Boot] [PATCH 05/16] I2C: Driver changes for FDT support
  2012-12-26 11:54   ` Minkyu Kang
  2012-12-26 12:01     ` Rajeshwari Birje
@ 2012-12-26 12:33     ` Rajeshwari Birje
  2012-12-26 14:00       ` Minkyu Kang
  1 sibling, 1 reply; 27+ messages in thread
From: Rajeshwari Birje @ 2012-12-26 12:33 UTC (permalink / raw)
  To: u-boot

Hi Minkyu Kang,

On Wed, Dec 26, 2012 at 5:24 PM, Minkyu Kang <mk7.kang@samsung.com> wrote:

> Dear Rajeshwari Shinde,
>
> On 14/12/12 20:56, Rajeshwari Shinde wrote:
> > Functions added to get the I2C bus number and reset I2C bus using
> > FDT node.
> >
> > Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
> > Acked-by: Simon Glass <sjg@chromium.org>
> > Acked-by: Heiko Schocher <hs@denx.de>
> > ---
> > Changes in V1:
> >       -Rebased on latest u-boot-samsung
> >  drivers/i2c/s3c24x0_i2c.c |   83
> ++++++++++++++++++++++++++++++++++++++++++++-
> >  drivers/i2c/s3c24x0_i2c.h |    8 ++++
> >  include/i2c.h             |   26 ++++++++++++++
> >  3 files changed, 116 insertions(+), 1 deletions(-)
> >
> > diff --git a/drivers/i2c/s3c24x0_i2c.c b/drivers/i2c/s3c24x0_i2c.c
> > index 9bc4c7f..94a093e 100644
> > --- a/drivers/i2c/s3c24x0_i2c.c
> > +++ b/drivers/i2c/s3c24x0_i2c.c
> > @@ -27,9 +27,11 @@
> >   */
> >
> >  #include <common.h>
> > +#include <fdtdec.h>
> >  #ifdef CONFIG_EXYNOS5
> >  #include <asm/arch/clk.h>
> >  #include <asm/arch/cpu.h>
> > +#include <asm/arch/pinmux.h>
> >  #else
> >  #include <asm/arch/s3c24x0_cpu.h>
> >  #endif
> > @@ -60,7 +62,14 @@
> >  #define I2C_TIMEOUT 1                /* 1 second */
> >
> >
> > -static unsigned int g_current_bus;   /* Stores Current I2C Bus */
> > +/*
> > + * For SPL boot some boards need i2c before SDRAM is initialised so
> force
> > + * variables to live in SRAM
> > + */
> > +static unsigned int g_current_bus __attribute__((section(".data")));
> > +static struct s3c24x0_i2c_bus i2c_bus[CONFIG_MAX_I2C_NUM]
> > +                     __attribute__((section(".data")));
> > +static int i2c_busses __attribute__((section(".data")));
> >
> >  #ifndef CONFIG_EXYNOS5
> >  static int GetI2CSDA(void)
> > @@ -507,4 +516,76 @@ int i2c_write(uchar chip, uint addr, int alen,
> uchar *buffer, int len)
> >               (i2c, I2C_WRITE, chip << 1, &xaddr[4 - alen], alen, buffer,
> >                len) != 0);
> >  }
> > +
> > +#ifdef CONFIG_OF_CONTROL
> > +void board_i2c_init(const void *blob)
> > +{
> > +
>
> please remove this blank line.
>
> > +     int node_list[CONFIG_MAX_I2C_NUM];
> > +     int count, i;
> > +
> > +     count = fdtdec_find_aliases_for_id(blob, "i2c",
> > +             COMPAT_SAMSUNG_S3C2440_I2C, node_list,
> > +             CONFIG_MAX_I2C_NUM);
>
> need blank line here.
>
> > +     for (i = 0; i < count; i++) {
> > +             struct s3c24x0_i2c_bus *bus;
> > +             int node = node_list[i];
>
> How handle if the value of count is bigger than CONFIG_MAX_I2C_NUM?
>
 CONFIG_MAX_I2C_NUM is maximum number of I2C lines supported.
if count bigger than CONFIG_MAX_I2C_NUM then it is error.
So you want me to add a check here?

>
> > +
> > +             if (node <= 0)
> > +                     continue;
> > +             bus = &i2c_bus[i];
> > +             bus->regs = (struct s3c24x0_i2c *)
> > +                     fdtdec_get_addr(blob, node, "reg");
> > +             bus->id = pinmux_decode_periph_id(blob, node);
> > +             bus->node = node;
> > +             bus->bus_num = i2c_busses++;
> > +             exynos_pinmux_config(bus->id, 0);
> > +     }
> > +
>
> please remove this blank line.
>
> > +}
> > +
> > +static struct s3c24x0_i2c_bus *get_bus(unsigned int bus_idx)
> > +{
> > +     if (bus_idx < i2c_busses)
> > +             return &i2c_bus[bus_idx];
>
> need blank line here.
>
> > +     debug("Undefined bus: %d\n", bus_idx);
> > +     return NULL;
> > +}
> > +
> > +int i2c_get_bus_num_fdt(int node)
> > +{
> > +     int i;
> > +
> > +     for (i = 0; i < i2c_busses; i++) {
> > +             if (node == i2c_bus[i].node)
> > +                     return i;
> > +     }
> > +
> > +     debug("%s: Can't find any matched I2C bus\n", __func__);
> > +     return -1;
> > +}
> > +
> > +int i2c_reset_port_fdt(const void *blob, int node)
> > +{
> > +     struct s3c24x0_i2c_bus *i2c;
> > +
>
> Please remove this blank line.
>
> > +     int bus;
> > +
> > +     bus = i2c_get_bus_num_fdt(node);
> > +     if (bus < 0) {
> > +             debug("could not get bus for node %d\n", node);
> > +             return -1;
> > +     }
>
> need blank line here.
>
> > +     i2c = get_bus(bus);
> > +     if (!i2c) {
> > +             debug("get_bus() failed for node node %d\n", node);
> > +             return -1;
> > +     }
> > +
> > +     i2c_ch_init(i2c->regs, CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
> > +
> > +     return 0;
> > +}
> > +#endif
> > +
> >  #endif /* CONFIG_HARD_I2C */
> > diff --git a/drivers/i2c/s3c24x0_i2c.h b/drivers/i2c/s3c24x0_i2c.h
> > index 2dd4b06..1243bf1 100644
> > --- a/drivers/i2c/s3c24x0_i2c.h
> > +++ b/drivers/i2c/s3c24x0_i2c.h
> > @@ -30,4 +30,12 @@ struct s3c24x0_i2c {
> >       u32     iicds;
> >       u32     iiclc;
> >  };
> > +
> > +struct s3c24x0_i2c_bus {
> > +     int node;       /* device tree node */
> > +     int bus_num;    /* i2c bus number */
> > +     struct s3c24x0_i2c *regs;
> > +     enum periph_id id;
> > +};
> > +
> >  #endif /* _S3C24X0_I2C_H */
> > diff --git a/include/i2c.h b/include/i2c.h
> > index 16f099d..c60d075 100644
> > --- a/include/i2c.h
> > +++ b/include/i2c.h
> > @@ -262,4 +262,30 @@ extern int get_multi_scl_pin(void);
> >  extern int get_multi_sda_pin(void);
> >  extern int multi_i2c_init(void);
> >  #endif
> > +
> > +/**
> > + * Get FDT values for i2c bus.
> > + *
> > + * @param blob  Device tree blbo
> > + * @return the number of I2C bus
> > + */
> > +void board_i2c_init(const void *blob);
> > +
> > +/**
> > + * Find the I2C bus number by given a FDT I2C node.
> > + *
> > + * @param blob  Device tree blbo
> > + * @param node  FDT I2C node to find
> > + * @return the number of I2C bus (zero based), or -1 on error
> > + */
> > +int i2c_get_bus_num_fdt(int node);
> > +
> > +/**
> > + * Reset the I2C bus represented by the given a FDT I2C node.
> > + *
> > + * @param blob  Device tree blbo
> > + * @param node  FDT I2C node to find
> > + * @return 0 if port was reset, -1 if not found
> > + */
> > +int i2c_reset_port_fdt(const void *blob, int node);
> >  #endif       /* _I2C_H_ */
> >
>
> --
> Thanks,
> Minkyu Kang.
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>



-- 
Regards,
Rajeshwari Shinde

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

* [U-Boot] [PATCH 05/16] I2C: Driver changes for FDT support
  2012-12-26 12:33     ` Rajeshwari Birje
@ 2012-12-26 14:00       ` Minkyu Kang
  0 siblings, 0 replies; 27+ messages in thread
From: Minkyu Kang @ 2012-12-26 14:00 UTC (permalink / raw)
  To: u-boot

On 26 December 2012 21:33, Rajeshwari Birje <rajeshwari.birje@gmail.com>wrote:

> Hi Minkyu Kang,
>
> On Wed, Dec 26, 2012 at 5:24 PM, Minkyu Kang <mk7.kang@samsung.com> wrote:
>
> > Dear Rajeshwari Shinde,
> >
> > On 14/12/12 20:56, Rajeshwari Shinde wrote:
> > > Functions added to get the I2C bus number and reset I2C bus using
> > > FDT node.
> > >
> > > Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
> > > Acked-by: Simon Glass <sjg@chromium.org>
> > > Acked-by: Heiko Schocher <hs@denx.de>
> > > ---
> > > Changes in V1:
> > >       -Rebased on latest u-boot-samsung
> > >  drivers/i2c/s3c24x0_i2c.c |   83
> > ++++++++++++++++++++++++++++++++++++++++++++-
> > >  drivers/i2c/s3c24x0_i2c.h |    8 ++++
> > >  include/i2c.h             |   26 ++++++++++++++
> > >  3 files changed, 116 insertions(+), 1 deletions(-)
> > >
> > > diff --git a/drivers/i2c/s3c24x0_i2c.c b/drivers/i2c/s3c24x0_i2c.c
> > > index 9bc4c7f..94a093e 100644
> > > --- a/drivers/i2c/s3c24x0_i2c.c
> > > +++ b/drivers/i2c/s3c24x0_i2c.c
> > > @@ -27,9 +27,11 @@
> > >   */
> > >
> > >  #include <common.h>
> > > +#include <fdtdec.h>
> > >  #ifdef CONFIG_EXYNOS5
> > >  #include <asm/arch/clk.h>
> > >  #include <asm/arch/cpu.h>
> > > +#include <asm/arch/pinmux.h>
> > >  #else
> > >  #include <asm/arch/s3c24x0_cpu.h>
> > >  #endif
> > > @@ -60,7 +62,14 @@
> > >  #define I2C_TIMEOUT 1                /* 1 second */
> > >
> > >
> > > -static unsigned int g_current_bus;   /* Stores Current I2C Bus */
> > > +/*
> > > + * For SPL boot some boards need i2c before SDRAM is initialised so
> > force
> > > + * variables to live in SRAM
> > > + */
> > > +static unsigned int g_current_bus __attribute__((section(".data")));
> > > +static struct s3c24x0_i2c_bus i2c_bus[CONFIG_MAX_I2C_NUM]
> > > +                     __attribute__((section(".data")));
> > > +static int i2c_busses __attribute__((section(".data")));
> > >
> > >  #ifndef CONFIG_EXYNOS5
> > >  static int GetI2CSDA(void)
> > > @@ -507,4 +516,76 @@ int i2c_write(uchar chip, uint addr, int alen,
> > uchar *buffer, int len)
> > >               (i2c, I2C_WRITE, chip << 1, &xaddr[4 - alen], alen,
> buffer,
> > >                len) != 0);
> > >  }
> > > +
> > > +#ifdef CONFIG_OF_CONTROL
> > > +void board_i2c_init(const void *blob)
> > > +{
> > > +
> >
> > please remove this blank line.
> >
> > > +     int node_list[CONFIG_MAX_I2C_NUM];
> > > +     int count, i;
> > > +
> > > +     count = fdtdec_find_aliases_for_id(blob, "i2c",
> > > +             COMPAT_SAMSUNG_S3C2440_I2C, node_list,
> > > +             CONFIG_MAX_I2C_NUM);
> >
> > need blank line here.
> >
> > > +     for (i = 0; i < count; i++) {
> > > +             struct s3c24x0_i2c_bus *bus;
> > > +             int node = node_list[i];
> >
> > How handle if the value of count is bigger than CONFIG_MAX_I2C_NUM?
> >
>  CONFIG_MAX_I2C_NUM is maximum number of I2C lines supported.
> if count bigger than CONFIG_MAX_I2C_NUM then it is error.
> So you want me to add a check here?
>

It seems to check at fdtdec_find_aliases_fo_id function.
Then OK, enough.


>
> >
> > > +
> > > +             if (node <= 0)
> > > +                     continue;
> > > +             bus = &i2c_bus[i];
> > > +             bus->regs = (struct s3c24x0_i2c *)
> > > +                     fdtdec_get_addr(blob, node, "reg");
> > > +             bus->id = pinmux_decode_periph_id(blob, node);
> > > +             bus->node = node;
> > > +             bus->bus_num = i2c_busses++;
> > > +             exynos_pinmux_config(bus->id, 0);
> > > +     }
> > > +
> >
> > please remove this blank line.
> >
> > > +}
> > > +
> > > +static struct s3c24x0_i2c_bus *get_bus(unsigned int bus_idx)
> > > +{
> > > +     if (bus_idx < i2c_busses)
> > > +             return &i2c_bus[bus_idx];
> >
> > need blank line here.
> >
> > > +     debug("Undefined bus: %d\n", bus_idx);
> > > +     return NULL;
> > > +}
> > > +
> > > +int i2c_get_bus_num_fdt(int node)
> > > +{
> > > +     int i;
> > > +
> > > +     for (i = 0; i < i2c_busses; i++) {
> > > +             if (node == i2c_bus[i].node)
> > > +                     return i;
> > > +     }
> > > +
> > > +     debug("%s: Can't find any matched I2C bus\n", __func__);
> > > +     return -1;
> > > +}
> > > +
> > > +int i2c_reset_port_fdt(const void *blob, int node)
> > > +{
> > > +     struct s3c24x0_i2c_bus *i2c;
> > > +
> >
> > Please remove this blank line.
> >
> > > +     int bus;
> > > +
> > > +     bus = i2c_get_bus_num_fdt(node);
> > > +     if (bus < 0) {
> > > +             debug("could not get bus for node %d\n", node);
> > > +             return -1;
> > > +     }
> >
> > need blank line here.
> >
> > > +     i2c = get_bus(bus);
> > > +     if (!i2c) {
> > > +             debug("get_bus() failed for node node %d\n", node);
> > > +             return -1;
> > > +     }
> > > +
> > > +     i2c_ch_init(i2c->regs, CONFIG_SYS_I2C_SPEED,
> CONFIG_SYS_I2C_SLAVE);
> > > +
> > > +     return 0;
> > > +}
> > > +#endif
> > > +
> > >  #endif /* CONFIG_HARD_I2C */
> > > diff --git a/drivers/i2c/s3c24x0_i2c.h b/drivers/i2c/s3c24x0_i2c.h
> > > index 2dd4b06..1243bf1 100644
> > > --- a/drivers/i2c/s3c24x0_i2c.h
> > > +++ b/drivers/i2c/s3c24x0_i2c.h
> > > @@ -30,4 +30,12 @@ struct s3c24x0_i2c {
> > >       u32     iicds;
> > >       u32     iiclc;
> > >  };
> > > +
> > > +struct s3c24x0_i2c_bus {
> > > +     int node;       /* device tree node */
> > > +     int bus_num;    /* i2c bus number */
> > > +     struct s3c24x0_i2c *regs;
> > > +     enum periph_id id;
> > > +};
> > > +
> > >  #endif /* _S3C24X0_I2C_H */
> > > diff --git a/include/i2c.h b/include/i2c.h
> > > index 16f099d..c60d075 100644
> > > --- a/include/i2c.h
> > > +++ b/include/i2c.h
> > > @@ -262,4 +262,30 @@ extern int get_multi_scl_pin(void);
> > >  extern int get_multi_sda_pin(void);
> > >  extern int multi_i2c_init(void);
> > >  #endif
> > > +
> > > +/**
> > > + * Get FDT values for i2c bus.
> > > + *
> > > + * @param blob  Device tree blbo
> > > + * @return the number of I2C bus
> > > + */
> > > +void board_i2c_init(const void *blob);
> > > +
> > > +/**
> > > + * Find the I2C bus number by given a FDT I2C node.
> > > + *
> > > + * @param blob  Device tree blbo
> > > + * @param node  FDT I2C node to find
> > > + * @return the number of I2C bus (zero based), or -1 on error
> > > + */
> > > +int i2c_get_bus_num_fdt(int node);
> > > +
> > > +/**
> > > + * Reset the I2C bus represented by the given a FDT I2C node.
> > > + *
> > > + * @param blob  Device tree blbo
> > > + * @param node  FDT I2C node to find
> > > + * @return 0 if port was reset, -1 if not found
> > > + */
> > > +int i2c_reset_port_fdt(const void *blob, int node);
> > >  #endif       /* _I2C_H_ */
> > >
> >
> > --
> > Thanks,
> > Minkyu Kang.
> > _______________________________________________
> > U-Boot mailing list
> > U-Boot at lists.denx.de
> > http://lists.denx.de/mailman/listinfo/u-boot
> >
>
>
>
> --
> Regards,
> Rajeshwari Shinde
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
>


-- 
from. prom.
www.promsoft.net

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

* [U-Boot] [PATCH 04/16] EXYNOS5: FDT : Decode peripheral id
  2012-12-26 12:00     ` Rajeshwari Birje
@ 2012-12-26 15:37       ` Simon Glass
  0 siblings, 0 replies; 27+ messages in thread
From: Simon Glass @ 2012-12-26 15:37 UTC (permalink / raw)
  To: u-boot

Hi,

On Wed, Dec 26, 2012 at 4:00 AM, Rajeshwari Birje
<rajeshwari.birje@gmail.com> wrote:
> Hi Minkyu Kang,
>
> Thank you for comments
>
> On Wed, Dec 26, 2012 at 5:24 PM, Minkyu Kang <mk7.kang@samsung.com> wrote:
>
>> Dear Rajeshwari Shinde,
>>
>> On 14/12/12 20:56, Rajeshwari Shinde wrote:
>> > Api is added to decode peripheral id based on the interrupt number
>> > of the peripheral.
>> >
>> > Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
>> > Acked-by; Simon Glass <sjg@chromium.org>
>> > ---
>> > Changes in V1:
>> >       -Rebased on latest u-boot-samsung
>> >  arch/arm/cpu/armv7/exynos/pinmux.c        |   28
>> ++++++++++++++++++++++++++
>> >  arch/arm/include/asm/arch-exynos/periph.h |   31
>> ++++++++++++++++------------
>> >  arch/arm/include/asm/arch-exynos/pinmux.h |    8 +++++++
>> >  3 files changed, 54 insertions(+), 13 deletions(-)
>> >
>> > diff --git a/arch/arm/cpu/armv7/exynos/pinmux.c
>> b/arch/arm/cpu/armv7/exynos/pinmux.c
>> > index f02f441..f9f6911 100644
>> > --- a/arch/arm/cpu/armv7/exynos/pinmux.c
>> > +++ b/arch/arm/cpu/armv7/exynos/pinmux.c
>> > @@ -22,6 +22,7 @@
>> >   */
>> >
>> >  #include <common.h>
>> > +#include <fdtdec.h>
>> >  #include <asm/arch/gpio.h>
>> >  #include <asm/arch/pinmux.h>
>> >  #include <asm/arch/sromc.h>
>> > @@ -396,3 +397,30 @@ int exynos_pinmux_config(int peripheral, int flags)
>> >               return -1;
>> >       }
>> >  }
>> > +
>> > +#ifdef CONFIG_OF_CONTROL
>> > +static int exynos5_pinmux_decode_periph_id(const void *blob, int node)
>> > +{
>> > +     int err;
>> > +     u32 cell[3];
>> > +
>> > +     err = fdtdec_get_int_array(blob, node, "interrupts", cell,
>> > +                                     ARRAY_SIZE(cell));
>> > +     if (err)
>> > +             return PERIPH_ID_NONE;
>> > +
>> > +     if ((131 > cell[1]) || (cell[1] < 31))
>>
>> What means 131 and 31?
>>
> will correct and remove magic numbers.
> They were the high and lowest interrupt numbers.
>
>>
>> > +             return cell[1];
>> > +
>> > +     debug(" invalid peripheral id\n");
>> > +     return PERIPH_ID_NONE;
>> > +}
>> > +
>> > +int pinmux_decode_periph_id(const void *blob, int node)
>> > +{
>> > +     if (cpu_is_exynos5())
>> > +             return  exynos5_pinmux_decode_periph_id(blob, node);
>> > +     else
>> > +             return PERIPH_ID_NONE;
>> > +}
>> > +#endif
>> > diff --git a/arch/arm/include/asm/arch-exynos/periph.h
>> b/arch/arm/include/asm/arch-exynos/periph.h
>> > index 13abd2d..783b77c 100644
>> > --- a/arch/arm/include/asm/arch-exynos/periph.h
>> > +++ b/arch/arm/include/asm/arch-exynos/periph.h
>> > @@ -25,12 +25,17 @@
>> >  #define __ASM_ARM_ARCH_PERIPH_H
>> >
>> >  /*
>> > - * Peripherals requiring clock/pinmux configuration. List will
>> > + * Peripherals requiring pinmux configuration0. List will
>>
>> configuration0?
>>
> - Will correct this
>
>>
>> >   * grow with support for more devices getting added.
>> > + * Numbering based on interrupt table.
>> >   *
>> >   */
>> >  enum periph_id {
>> > -     PERIPH_ID_I2C0,
>> > +     PERIPH_ID_UART0 = 51,
>> > +     PERIPH_ID_UART1,
>> > +     PERIPH_ID_UART2,
>> > +     PERIPH_ID_UART3,
>> > +     PERIPH_ID_I2C0 = 56,
>> >       PERIPH_ID_I2C1,
>> >       PERIPH_ID_I2C2,
>> >       PERIPH_ID_I2C3,
>> > @@ -38,22 +43,22 @@ enum periph_id {
>> >       PERIPH_ID_I2C5,
>> >       PERIPH_ID_I2C6,
>> >       PERIPH_ID_I2C7,
>> > -     PERIPH_ID_I2S1,
>> > -     PERIPH_ID_SDMMC0,
>> > +     PERIPH_ID_SPI0 = 68,
>> > +     PERIPH_ID_SPI1,
>> > +     PERIPH_ID_SPI2,
>> > +     PERIPH_ID_SDMMC0 = 75,
>> >       PERIPH_ID_SDMMC1,
>> >       PERIPH_ID_SDMMC2,
>> >       PERIPH_ID_SDMMC3,
>> > -     PERIPH_ID_SDMMC4,
>> > -     PERIPH_ID_SROMC,
>> > -     PERIPH_ID_SPI0,
>> > -     PERIPH_ID_SPI1,
>> > -     PERIPH_ID_SPI2,
>> > +     PERIPH_ID_I2S1 = 99,
>> > +
>> > +/* Since following peripherals do not have shared peripheral interrupts
>> (SPIs)
>>
>> Please check multi line comment rule.
>>
> - Will correct this
>
>>
>> > + * they are numbered arbitiraly after the maximum SPIs Exynos has (128)
>> > + */
>> > +     PERIPH_ID_SROMC = 128,
>> >       PERIPH_ID_SPI3,
>> >       PERIPH_ID_SPI4,
>> > -     PERIPH_ID_UART0,
>> > -     PERIPH_ID_UART1,
>> > -     PERIPH_ID_UART2,
>> > -     PERIPH_ID_UART3,
>> > +     PERIPH_ID_SDMMC4,
>> >
>> >       PERIPH_ID_COUNT,
>> >       PERIPH_ID_NONE = -1,
>> > diff --git a/arch/arm/include/asm/arch-exynos/pinmux.h
>> b/arch/arm/include/asm/arch-exynos/pinmux.h
>> > index 10ea736..00cbb0d 100644
>> > --- a/arch/arm/include/asm/arch-exynos/pinmux.h
>> > +++ b/arch/arm/include/asm/arch-exynos/pinmux.h
>> > @@ -55,4 +55,12 @@ enum {
>> >   */
>> >  int exynos_pinmux_config(int peripheral, int flags);
>> >
>> > +/**
>>
>> please remove "*".
>>
> - Will correct this

The extra * indicates a comment with doxygen / DocBook comments, so I
think we should keep this if we can. There is a bit of a push in
U-Boot to use DocBook now (like include/cbfs.h). The format is
slightly different from doxygen but it's probably putting to run a
converter to switch over at one point.

>
>>
>> > + * Decode the peripheral id using the interrpt numbers.
>> > + *
>> > + * @param blob  Device tree blbo
>> > + * @param node  FDT I2C node to find
>> > + * @return peripheral id if ok, PERIPH_ID_NONE on error
>> > + */
>> > +int pinmux_decode_periph_id(const void *blob, int node);
>> >  #endif
>> >

Regards,
Simon

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

end of thread, other threads:[~2012-12-26 15:37 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-14 11:56 [U-Boot] [PATCH 01/16] EXYNOS5: FDT: Add I2C device node data Rajeshwari Shinde
2012-12-14 11:56 ` [U-Boot] [PATCH 02/16] EXYNOS5 : FDT: Add Aliases for I2C device Rajeshwari Shinde
2012-12-14 11:56 ` [U-Boot] [PATCH 03/16] FDT: Add compatible string for I2C Rajeshwari Shinde
2012-12-14 11:56 ` [U-Boot] [PATCH 04/16] EXYNOS5: FDT : Decode peripheral id Rajeshwari Shinde
2012-12-26 11:54   ` Minkyu Kang
2012-12-26 12:00     ` Rajeshwari Birje
2012-12-26 15:37       ` Simon Glass
2012-12-14 11:56 ` [U-Boot] [PATCH 05/16] I2C: Driver changes for FDT support Rajeshwari Shinde
2012-12-26 11:54   ` Minkyu Kang
2012-12-26 12:01     ` Rajeshwari Birje
2012-12-26 12:33     ` Rajeshwari Birje
2012-12-26 14:00       ` Minkyu Kang
2012-12-14 11:56 ` [U-Boot] [PATCH 06/16] SMDK5250: Initialise I2C using FDT Rajeshwari Shinde
2012-12-14 11:56 ` [U-Boot] [PATCH 07/16] EXYNOS5: FDT: Add sound device node data Rajeshwari Shinde
2012-12-14 11:56 ` [U-Boot] [PATCH 08/16] EXYNOS5: FDT: Add sound and codec device node Rajeshwari Shinde
2012-12-14 11:56 ` [U-Boot] [PATCH 09/16] EXYNOS5: FDT: Add compatible strings for sound Rajeshwari Shinde
2012-12-14 11:56 ` [U-Boot] [PATCH 10/16] Sound: Add FDT support to driver Rajeshwari Shinde
2012-12-14 11:56 ` [U-Boot] [PATCH 11/16] Sound: WM8994: Add FDT support to codec Rajeshwari Shinde
2012-12-26 11:55   ` Minkyu Kang
2012-12-26 12:02     ` Rajeshwari Birje
2012-12-14 11:56 ` [U-Boot] [PATCH 12/16] Sound: Add FDT support to CMD Rajeshwari Shinde
2012-12-14 11:56 ` [U-Boot] [PATCH 13/16] EXYNOS5: FDT: Add compatible strings for SPI Rajeshwari Shinde
2012-12-14 11:56 ` [U-Boot] [PATCH 14/16] EXYNOS5 : FDT: Add Aliases for SPI device Rajeshwari Shinde
2012-12-14 11:56 ` [U-Boot] [PATCH 15/16] EXYNOS5: FDT: Add SPI device node data Rajeshwari Shinde
2012-12-14 11:56 ` [U-Boot] [PATCH 16/16] SPI: EXYNOS: Add FDT support to driver Rajeshwari Shinde
2012-12-26 11:54   ` Minkyu Kang
2012-12-26 12:01     ` Rajeshwari Birje

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox