All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHv3 0/4] Updated s5p-tv platform definitions
@ 2011-07-25  7:55 Marek Szyprowski
  2011-07-25  7:55 ` [PATCH 1/4] ARM: Samsung: add i2c hdmiphy controller definitions Marek Szyprowski
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Marek Szyprowski @ 2011-07-25  7:55 UTC (permalink / raw)
  To: linux-samsung-soc
  Cc: Marek Szyprowski, Tomasz Stanislawski, Kyungmin Park, Kukjin Kim

Hello,

This patch series contains platform definitions for s5p-tv driver
rebased onto latest for-next branch (including generic GIC and clockdev
changes).

Changes since v2:
- moved vpll code to plat-s5p/clock-vpll.c

Changes since v1:
- renamed i2c8 to common i2c-hdmiphy
- moved common vpll code to plat-s5p/clock.c
- added check for pll locking
- various minor coding style fixes here and there

Best regards
-- 
Marek Szyprowski
Samsung Poland R&D Center


Patch summary:

Tomasz Stanislawski (4):
  ARM: Samsung: add i2c hdmiphy controller definitions
  ARM: S5P: add support for tv device
  ARM: Exynos4: enable TV support on Universal_C210 board
  ARM: S5PV210: enable TV support on GONI board

 arch/arm/mach-exynos4/Kconfig                    |    3 +
 arch/arm/mach-exynos4/clock.c                    |  140 +++++++++++++++++++++-
 arch/arm/mach-exynos4/cpu.c                      |    2 +
 arch/arm/mach-exynos4/include/mach/iic-hdmiphy.h |   16 +++
 arch/arm/mach-exynos4/include/mach/irqs.h        |    4 +
 arch/arm/mach-exynos4/include/mach/map.h         |   12 ++
 arch/arm/mach-exynos4/include/mach/regs-pmu.h    |    6 +
 arch/arm/mach-exynos4/mach-universal_c210.c      |   74 ++++++++++++
 arch/arm/mach-s5pv210/Kconfig                    |    2 +
 arch/arm/mach-s5pv210/clock.c                    |   87 ++++++++++++--
 arch/arm/mach-s5pv210/cpu.c                      |    4 +
 arch/arm/mach-s5pv210/include/mach/iic-hdmiphy.h |   16 +++
 arch/arm/mach-s5pv210/include/mach/irqs.h        |    4 +-
 arch/arm/mach-s5pv210/include/mach/map.h         |   13 ++
 arch/arm/mach-s5pv210/include/mach/regs-clock.h  |    9 +-
 arch/arm/mach-s5pv210/mach-goni.c                |    9 ++
 arch/arm/plat-s5p/Kconfig                        |   15 +++
 arch/arm/plat-s5p/Makefile                       |    3 +
 arch/arm/plat-s5p/clock-vpll.c                   |   93 ++++++++++++++
 arch/arm/plat-s5p/dev-i2c-hdmiphy.c              |   59 +++++++++
 arch/arm/plat-s5p/dev-tv.c                       |  100 +++++++++++++++
 arch/arm/plat-s5p/include/plat/s5p-clock.h       |    4 +
 arch/arm/plat-samsung/include/plat/devs.h        |    6 +
 arch/arm/plat-samsung/include/plat/iic.h         |    1 +
 arch/arm/plat-samsung/include/plat/tv-core.h     |   44 +++++++
 25 files changed, 710 insertions(+), 16 deletions(-)
 create mode 100644 arch/arm/mach-exynos4/include/mach/iic-hdmiphy.h
 create mode 100644 arch/arm/mach-s5pv210/include/mach/iic-hdmiphy.h
 create mode 100644 arch/arm/plat-s5p/clock-vpll.c
 create mode 100644 arch/arm/plat-s5p/dev-i2c-hdmiphy.c
 create mode 100644 arch/arm/plat-s5p/dev-tv.c
 create mode 100644 arch/arm/plat-samsung/include/plat/tv-core.h

-- 
1.7.1.569.g6f426

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

* [PATCH 1/4] ARM: Samsung: add i2c hdmiphy controller definitions
  2011-07-25  7:55 [PATCHv3 0/4] Updated s5p-tv platform definitions Marek Szyprowski
@ 2011-07-25  7:55 ` Marek Szyprowski
  2011-08-11 10:54   ` Kukjin Kim
  2011-07-25  7:55 ` [PATCH 2/4] ARM: S5P: add support for tv device Marek Szyprowski
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 7+ messages in thread
From: Marek Szyprowski @ 2011-07-25  7:55 UTC (permalink / raw)
  To: linux-samsung-soc
  Cc: Marek Szyprowski, Tomasz Stanislawski, Kyungmin Park, Kukjin Kim

From: Tomasz Stanislawski <t.stanislaws@samsung.com>

This patch adds hdmiphy dedicated i2c controller definitions.

Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
[m.szyprowski: renamed to i2c-hdmiphy and squashed Exynos4 and S5PV210 patches]
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
 arch/arm/mach-exynos4/clock.c                    |    6 ++
 arch/arm/mach-exynos4/include/mach/iic-hdmiphy.h |   16 ++++++
 arch/arm/mach-exynos4/include/mach/irqs.h        |    2 +
 arch/arm/mach-exynos4/include/mach/map.h         |    4 ++
 arch/arm/mach-s5pv210/clock.c                    |    6 ++
 arch/arm/mach-s5pv210/include/mach/iic-hdmiphy.h |   16 ++++++
 arch/arm/mach-s5pv210/include/mach/irqs.h        |    2 +-
 arch/arm/mach-s5pv210/include/mach/map.h         |    3 +
 arch/arm/plat-s5p/Kconfig                        |    5 ++
 arch/arm/plat-s5p/Makefile                       |    1 +
 arch/arm/plat-s5p/dev-i2c-hdmiphy.c              |   59 ++++++++++++++++++++++
 arch/arm/plat-samsung/include/plat/devs.h        |    1 +
 arch/arm/plat-samsung/include/plat/iic.h         |    1 +
 13 files changed, 121 insertions(+), 1 deletions(-)
 create mode 100644 arch/arm/mach-exynos4/include/mach/iic-hdmiphy.h
 create mode 100644 arch/arm/mach-s5pv210/include/mach/iic-hdmiphy.h
 create mode 100644 arch/arm/plat-s5p/dev-i2c-hdmiphy.c

diff --git a/arch/arm/mach-exynos4/clock.c b/arch/arm/mach-exynos4/clock.c
index 851dea0..953bdad 100644
--- a/arch/arm/mach-exynos4/clock.c
+++ b/arch/arm/mach-exynos4/clock.c
@@ -581,6 +581,12 @@ static struct clk init_clocks_off[] = {
 		.enable		= exynos4_clk_ip_peril_ctrl,
 		.ctrlbit	= (1 << 13),
 	}, {
+		.name		= "i2c",
+		.devname	= "s3c2440-hdmiphy-i2c",
+		.parent		= &clk_aclk_100.clk,
+		.enable		= exynos4_clk_ip_peril_ctrl,
+		.ctrlbit	= (1 << 14),
+	}, {
 		.name		= "SYSMMU_MDMA",
 		.enable		= exynos4_clk_ip_image_ctrl,
 		.ctrlbit	= (1 << 5),
diff --git a/arch/arm/mach-exynos4/include/mach/iic-hdmiphy.h b/arch/arm/mach-exynos4/include/mach/iic-hdmiphy.h
new file mode 100644
index 0000000..4f070e0
--- /dev/null
+++ b/arch/arm/mach-exynos4/include/mach/iic-hdmiphy.h
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2011 Samsung Electronics Co., Ltd.
+ *
+ * S5P series i2c hdmiphy helper definitions
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef PLAT_S5P_IIC_HDMIPHY_H_
+#define PLAT_S5P_IIC_HDMIPHY_H_
+
+#define S5P_IIC_HDMIPHY_BUS_NUM		(8)
+
+#endif
diff --git a/arch/arm/mach-exynos4/include/mach/irqs.h b/arch/arm/mach-exynos4/include/mach/irqs.h
index 934d2a4..c56645f 100644
--- a/arch/arm/mach-exynos4/include/mach/irqs.h
+++ b/arch/arm/mach-exynos4/include/mach/irqs.h
@@ -94,6 +94,8 @@
 #define IRQ_2D			IRQ_SPI(89)
 #define IRQ_PCIE		IRQ_SPI(90)
 
+#define IRQ_IIC_HDMIPHY		IRQ_SPI(93)
+
 #define IRQ_MFC			IRQ_SPI(94)
 
 #define IRQ_AUDIO_SS		IRQ_SPI(96)
diff --git a/arch/arm/mach-exynos4/include/mach/map.h b/arch/arm/mach-exynos4/include/mach/map.h
index d32296d..380feb9 100644
--- a/arch/arm/mach-exynos4/include/mach/map.h
+++ b/arch/arm/mach-exynos4/include/mach/map.h
@@ -112,6 +112,8 @@
 
 #define EXYNOS4_PA_UART			0x13800000
 
+#define EXYNOS4_PA_IIC_HDMIPHY		0x138E0000
+
 #define EXYNOS4_PA_IIC(x)		(0x13860000 + ((x) * 0x10000))
 
 #define EXYNOS4_PA_ADC			0x13910000
@@ -161,6 +163,8 @@
 #define S5P_PA_TIMER			EXYNOS4_PA_TIMER
 #define S5P_PA_EHCI			EXYNOS4_PA_EHCI
 
+#define S5P_PA_IIC_HDMIPHY		EXYNOS4_PA_IIC_HDMIPHY
+
 #define SAMSUNG_PA_KEYPAD		EXYNOS4_PA_KEYPAD
 
 /* UART */
diff --git a/arch/arm/mach-s5pv210/clock.c b/arch/arm/mach-s5pv210/clock.c
index 52a8e60..90a1966 100644
--- a/arch/arm/mach-s5pv210/clock.c
+++ b/arch/arm/mach-s5pv210/clock.c
@@ -407,6 +407,12 @@ static struct clk init_clocks_off[] = {
 		.enable		= s5pv210_clk_ip3_ctrl,
 		.ctrlbit	= (1<<9),
 	}, {
+		.name		= "i2c",
+		.devname	= "s3c2440-hdmiphy-i2c",
+		.parent		= &clk_pclk_psys.clk,
+		.enable		= s5pv210_clk_ip3_ctrl,
+		.ctrlbit	= (1 << 11),
+	}, {
 		.name		= "spi",
 		.devname	= "s3c64xx-spi.0",
 		.parent		= &clk_pclk_psys.clk,
diff --git a/arch/arm/mach-s5pv210/include/mach/iic-hdmiphy.h b/arch/arm/mach-s5pv210/include/mach/iic-hdmiphy.h
new file mode 100644
index 0000000..b6ce613
--- /dev/null
+++ b/arch/arm/mach-s5pv210/include/mach/iic-hdmiphy.h
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2011 Samsung Electronics Co., Ltd.
+ *
+ * S5P series i2c hdmiphy helper definitions
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef PLAT_S5P_IIC_HDMIPHY_H_
+#define PLAT_S5P_IIC_HDMIPHY_H_
+
+#define S5P_IIC_HDMIPHY_BUS_NUM		(3)
+
+#endif
diff --git a/arch/arm/mach-s5pv210/include/mach/irqs.h b/arch/arm/mach-s5pv210/include/mach/irqs.h
index b9f9ec3..c1da0a7 100644
--- a/arch/arm/mach-s5pv210/include/mach/irqs.h
+++ b/arch/arm/mach-s5pv210/include/mach/irqs.h
@@ -56,7 +56,7 @@
 #define IRQ_SPI2		S5P_IRQ_VIC1(17)
 #define IRQ_IRDA		S5P_IRQ_VIC1(18)
 #define IRQ_IIC2		S5P_IRQ_VIC1(19)
-#define IRQ_IIC3		S5P_IRQ_VIC1(20)
+#define IRQ_IIC_HDMIPHY		S5P_IRQ_VIC1(20)
 #define IRQ_HSIRX		S5P_IRQ_VIC1(21)
 #define IRQ_HSITX		S5P_IRQ_VIC1(22)
 #define IRQ_UHOST		S5P_IRQ_VIC1(23)
diff --git a/arch/arm/mach-s5pv210/include/mach/map.h b/arch/arm/mach-s5pv210/include/mach/map.h
index aac343c..a420654 100644
--- a/arch/arm/mach-s5pv210/include/mach/map.h
+++ b/arch/arm/mach-s5pv210/include/mach/map.h
@@ -90,6 +90,8 @@
 #define S5PV210_PA_FIMC1		0xFB300000
 #define S5PV210_PA_FIMC2		0xFB400000
 
+#define S5PV210_PA_IIC_HDMIPHY		0xFA900000
+
 /* Compatibiltiy Defines */
 
 #define S3C_PA_FB			S5PV210_PA_FB
@@ -110,6 +112,7 @@
 #define S5P_PA_FIMC2			S5PV210_PA_FIMC2
 #define S5P_PA_MIPI_CSIS0		S5PV210_PA_MIPI_CSIS
 #define S5P_PA_MFC			S5PV210_PA_MFC
+#define S5P_PA_IIC_HDMIPHY		S5PV210_PA_IIC_HDMIPHY
 #define S5P_PA_ONENAND			S5PC110_PA_ONENAND
 #define S5P_PA_ONENAND_DMA		S5PC110_PA_ONENAND_DMA
 #define S5P_PA_SDRAM			S5PV210_PA_SDRAM
diff --git a/arch/arm/plat-s5p/Kconfig b/arch/arm/plat-s5p/Kconfig
index 9843c95..143e036 100644
--- a/arch/arm/plat-s5p/Kconfig
+++ b/arch/arm/plat-s5p/Kconfig
@@ -76,6 +76,11 @@ config S5P_DEV_FIMD0
 	help
 	  Compile in platform device definitions for FIMD controller 0
 
+config S5P_DEV_I2C_HDMIPHY
+	bool
+	help
+	  Compile in platform device definitions for I2C HDMIPHY controller
+
 config S5P_DEV_MFC
 	bool
 	help
diff --git a/arch/arm/plat-s5p/Makefile b/arch/arm/plat-s5p/Makefile
index 4b53e04..1dd10dc 100644
--- a/arch/arm/plat-s5p/Makefile
+++ b/arch/arm/plat-s5p/Makefile
@@ -31,6 +31,7 @@ obj-$(CONFIG_S5P_DEV_FIMC1)	+= dev-fimc1.o
 obj-$(CONFIG_S5P_DEV_FIMC2)	+= dev-fimc2.o
 obj-$(CONFIG_S5P_DEV_FIMC3)	+= dev-fimc3.o
 obj-$(CONFIG_S5P_DEV_FIMD0)	+= dev-fimd0.o
+obj-$(CONFIG_S5P_DEV_I2C_HDMIPHY) += dev-i2c-hdmiphy.o
 obj-$(CONFIG_S5P_DEV_ONENAND)	+= dev-onenand.o
 obj-$(CONFIG_S5P_DEV_CSIS0)	+= dev-csis0.o
 obj-$(CONFIG_S5P_DEV_CSIS1)	+= dev-csis1.o
diff --git a/arch/arm/plat-s5p/dev-i2c-hdmiphy.c b/arch/arm/plat-s5p/dev-i2c-hdmiphy.c
new file mode 100644
index 0000000..4beee40
--- /dev/null
+++ b/arch/arm/plat-s5p/dev-i2c-hdmiphy.c
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd.
+ *		http://www.samsung.com/
+ *
+ * S5P series device definition for i2c for hdmiphy device
+ *
+ * Based on plat-samsung/dev-i2c7.c
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+*/
+
+#include <linux/gfp.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/platform_device.h>
+
+#include <mach/irqs.h>
+#include <mach/map.h>
+#include <mach/iic-hdmiphy.h>
+
+#include <plat/regs-iic.h>
+#include <plat/devs.h>
+#include <plat/cpu.h>
+#include <plat/iic.h>
+
+static struct resource s5p_i2c_resource[] = {
+	[0] = {
+		.start = S5P_PA_IIC_HDMIPHY,
+		.end   = S5P_PA_IIC_HDMIPHY + SZ_4K - 1,
+		.flags = IORESOURCE_MEM,
+	},
+	[1] = {
+		.start = IRQ_IIC_HDMIPHY,
+		.end   = IRQ_IIC_HDMIPHY,
+		.flags = IORESOURCE_IRQ,
+	},
+};
+
+struct platform_device s5p_device_i2c_hdmiphy = {
+	.name		  = "s3c2440-hdmiphy-i2c",
+	.id		  = -1,
+	.num_resources	  = ARRAY_SIZE(s5p_i2c_resource),
+	.resource	  = s5p_i2c_resource,
+};
+
+void __init s5p_i2c_hdmiphy_set_platdata(struct s3c2410_platform_i2c *pd)
+{
+	struct s3c2410_platform_i2c *npd;
+
+	if (!pd) {
+		pd = &default_i2c_data;
+		pd->bus_num = S5P_IIC_HDMIPHY_BUS_NUM;
+	}
+
+	npd = s3c_set_platdata(pd, sizeof(struct s3c2410_platform_i2c),
+			       &s5p_device_i2c_hdmiphy);
+}
diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h
index 24ebb1e..b15805f 100644
--- a/arch/arm/plat-samsung/include/plat/devs.h
+++ b/arch/arm/plat-samsung/include/plat/devs.h
@@ -62,6 +62,7 @@ extern struct platform_device s3c_device_i2c4;
 extern struct platform_device s3c_device_i2c5;
 extern struct platform_device s3c_device_i2c6;
 extern struct platform_device s3c_device_i2c7;
+extern struct platform_device s5p_device_i2c_hdmiphy;
 extern struct platform_device s3c_device_rtc;
 extern struct platform_device s3c_device_adc;
 extern struct platform_device s3c_device_sdi;
diff --git a/arch/arm/plat-samsung/include/plat/iic.h b/arch/arm/plat-samsung/include/plat/iic.h
index 56b0059..51d52e7 100644
--- a/arch/arm/plat-samsung/include/plat/iic.h
+++ b/arch/arm/plat-samsung/include/plat/iic.h
@@ -60,6 +60,7 @@ extern void s3c_i2c4_set_platdata(struct s3c2410_platform_i2c *i2c);
 extern void s3c_i2c5_set_platdata(struct s3c2410_platform_i2c *i2c);
 extern void s3c_i2c6_set_platdata(struct s3c2410_platform_i2c *i2c);
 extern void s3c_i2c7_set_platdata(struct s3c2410_platform_i2c *i2c);
+extern void s5p_i2c_hdmiphy_set_platdata(struct s3c2410_platform_i2c *i2c);
 
 /* defined by architecture to configure gpio */
 extern void s3c_i2c0_cfg_gpio(struct platform_device *dev);
-- 
1.7.1.569.g6f426

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

* [PATCH 2/4] ARM: S5P: add support for tv device
  2011-07-25  7:55 [PATCHv3 0/4] Updated s5p-tv platform definitions Marek Szyprowski
  2011-07-25  7:55 ` [PATCH 1/4] ARM: Samsung: add i2c hdmiphy controller definitions Marek Szyprowski
@ 2011-07-25  7:55 ` Marek Szyprowski
  2011-08-11 10:40   ` Kukjin Kim
  2011-07-25  7:55 ` [PATCH 3/4] ARM: Exynos4: enable TV support on Universal_C210 board Marek Szyprowski
  2011-07-25  7:55 ` [PATCH 4/4] ARM: S5PV210: enable TV support on GONI board Marek Szyprowski
  3 siblings, 1 reply; 7+ messages in thread
From: Marek Szyprowski @ 2011-07-25  7:55 UTC (permalink / raw)
  To: linux-samsung-soc
  Cc: Marek Szyprowski, Tomasz Stanislawski, Kyungmin Park, Kukjin Kim

From: Tomasz Stanislawski <t.stanislaws@samsung.com>

This patch adds all the resources for TV drivers and devices for Samsung
Exynos4 and S5PV210 platforms.

Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
[m.szyprowski: moved common vpll code to plat-s5p/clocks-vpll.c,
squashed Exynos4 and S5PV210 patches and rewrote commit message]
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
 arch/arm/mach-exynos4/Kconfig                   |    1 +
 arch/arm/mach-exynos4/clock.c                   |  134 ++++++++++++++++++++++-
 arch/arm/mach-exynos4/cpu.c                     |    2 +
 arch/arm/mach-exynos4/include/mach/irqs.h       |    4 +-
 arch/arm/mach-exynos4/include/mach/map.h        |    8 ++
 arch/arm/mach-exynos4/include/mach/regs-pmu.h   |    6 +
 arch/arm/mach-s5pv210/Kconfig                   |    1 +
 arch/arm/mach-s5pv210/clock.c                   |   81 ++++++++++++--
 arch/arm/mach-s5pv210/cpu.c                     |    4 +
 arch/arm/mach-s5pv210/include/mach/irqs.h       |    2 +-
 arch/arm/mach-s5pv210/include/mach/map.h        |   10 ++
 arch/arm/mach-s5pv210/include/mach/regs-clock.h |    9 +-
 arch/arm/plat-s5p/Kconfig                       |   10 ++
 arch/arm/plat-s5p/Makefile                      |    2 +
 arch/arm/plat-s5p/clock-vpll.c                  |   93 ++++++++++++++++
 arch/arm/plat-s5p/dev-tv.c                      |  100 +++++++++++++++++
 arch/arm/plat-s5p/include/plat/s5p-clock.h      |    4 +
 arch/arm/plat-samsung/include/plat/devs.h       |    5 +
 arch/arm/plat-samsung/include/plat/tv-core.h    |   44 ++++++++
 19 files changed, 504 insertions(+), 16 deletions(-)
 create mode 100644 arch/arm/plat-s5p/clock-vpll.c
 create mode 100644 arch/arm/plat-s5p/dev-tv.c
 create mode 100644 arch/arm/plat-samsung/include/plat/tv-core.h

diff --git a/arch/arm/mach-exynos4/Kconfig b/arch/arm/mach-exynos4/Kconfig
index 9d62e13..7b468c2 100644
--- a/arch/arm/mach-exynos4/Kconfig
+++ b/arch/arm/mach-exynos4/Kconfig
@@ -12,6 +12,7 @@ if ARCH_EXYNOS4
 config CPU_EXYNOS4210
 	bool
 	select S3C_PL330_DMA
+	select S5P_CLOCK_VPLL
 	help
 	  Enable EXYNOS4210 CPU support
 
diff --git a/arch/arm/mach-exynos4/clock.c b/arch/arm/mach-exynos4/clock.c
index 953bdad..8639f4a 100644
--- a/arch/arm/mach-exynos4/clock.c
+++ b/arch/arm/mach-exynos4/clock.c
@@ -83,6 +83,11 @@ static int exynos4_clk_ip_mfc_ctrl(struct clk *clk, int enable)
 	return s5p_gatectrl(S5P_CLKGATE_IP_MFC, clk, enable);
 }
 
+static int exynos4_clksrc_mask_tv_ctrl(struct clk *clk, int enable)
+{
+	return s5p_gatectrl(S5P_CLKSRC_MASK_TV, clk, enable);
+}
+
 static int exynos4_clk_ip_cam_ctrl(struct clk *clk, int enable)
 {
 	return s5p_gatectrl(S5P_CLKGATE_IP_CAM, clk, enable);
@@ -123,6 +128,16 @@ static int exynos4_clk_ip_perir_ctrl(struct clk *clk, int enable)
 	return s5p_gatectrl(S5P_CLKGATE_IP_PERIR, clk, enable);
 }
 
+static int exynos4_clk_hdmiphy_ctrl(struct clk *clk, int enable)
+{
+	return s5p_gatectrl(S5P_HDMI_PHY_CONTROL, clk, enable);
+}
+
+static int exynos4_clk_dac_ctrl(struct clk *clk, int enable)
+{
+	return s5p_gatectrl(S5P_DAC_PHY_CONTROL, clk, enable);
+}
+
 /* Core list of CMU_CPU side */
 
 static struct clksrc_clk clk_mout_apll = {
@@ -449,6 +464,36 @@ static struct clk init_clocks_off[] = {
 		.enable		= exynos4_clk_ip_fsys_ctrl,
 		.ctrlbit	= (1 << 9),
 	}, {
+		.name		= "dac",
+		.devname	= "s5p-sdo",
+		.enable		= exynos4_clk_ip_tv_ctrl,
+		.ctrlbit	= (1 << 2),
+	}, {
+		.name		= "mixer",
+		.devname	= "s5p-mixer",
+		.enable		= exynos4_clk_ip_tv_ctrl,
+		.ctrlbit	= (1 << 1),
+	}, {
+		.name		= "vp",
+		.devname	= "s5p-mixer",
+		.enable		= exynos4_clk_ip_tv_ctrl,
+		.ctrlbit	= (1 << 0),
+	}, {
+		.name		= "hdmi",
+		.devname	= "exynos4-hdmi",
+		.enable		= exynos4_clk_ip_tv_ctrl,
+		.ctrlbit	= (1 << 3),
+	}, {
+		.name		= "hdmiphy",
+		.devname	= "exynos4-hdmi",
+		.enable		= exynos4_clk_hdmiphy_ctrl,
+		.ctrlbit	= (1 << 0),
+	}, {
+		.name		= "dacphy",
+		.devname	= "s5p-sdo",
+		.enable		= exynos4_clk_dac_ctrl,
+		.ctrlbit	= (1 << 0),
+	}, {
 		.name		= "sata",
 		.parent		= &clk_aclk_133.clk,
 		.enable		= exynos4_clk_ip_fsys_ctrl,
@@ -788,6 +833,81 @@ static struct clksrc_sources clkset_mout_mfc = {
 	.nr_sources	= ARRAY_SIZE(clkset_mout_mfc_list),
 };
 
+static struct clk *clkset_sclk_dac_list[] = {
+	[0] = &clk_sclk_vpll.clk,
+	[1] = &clk_sclk_hdmiphy,
+};
+
+static struct clksrc_sources clkset_sclk_dac = {
+	.sources	= clkset_sclk_dac_list,
+	.nr_sources	= ARRAY_SIZE(clkset_sclk_dac_list),
+};
+
+static struct clksrc_clk clk_sclk_dac = {
+	.clk		= {
+		.name		= "sclk_dac",
+		.enable		= exynos4_clksrc_mask_tv_ctrl,
+		.ctrlbit	= (1 << 8),
+	},
+	.sources = &clkset_sclk_dac,
+	.reg_src = { .reg = S5P_CLKSRC_TV, .shift = 8, .size = 1 },
+};
+
+static struct clksrc_clk clk_sclk_pixel = {
+	.clk		= {
+		.name		= "sclk_pixel",
+		.parent = &clk_sclk_vpll.clk,
+	},
+	.reg_div = { .reg = S5P_CLKDIV_TV, .shift = 0, .size = 4 },
+};
+
+static struct clk *clkset_sclk_hdmi_list[] = {
+	[0] = &clk_sclk_pixel.clk,
+	[1] = &clk_sclk_hdmiphy,
+};
+
+static struct clksrc_sources clkset_sclk_hdmi = {
+	.sources	= clkset_sclk_hdmi_list,
+	.nr_sources	= ARRAY_SIZE(clkset_sclk_hdmi_list),
+};
+
+static struct clksrc_clk clk_sclk_hdmi = {
+	.clk		= {
+		.name		= "sclk_hdmi",
+		.enable		= exynos4_clksrc_mask_tv_ctrl,
+		.ctrlbit	= (1 << 0),
+	},
+	.sources = &clkset_sclk_hdmi,
+	.reg_src = { .reg = S5P_CLKSRC_TV, .shift = 0, .size = 1 },
+};
+
+static struct clk *clkset_sclk_mixer_list[] = {
+	[0] = &clk_sclk_dac.clk,
+	[1] = &clk_sclk_hdmi.clk,
+};
+
+static struct clksrc_sources clkset_sclk_mixer = {
+	.sources	= clkset_sclk_mixer_list,
+	.nr_sources	= ARRAY_SIZE(clkset_sclk_mixer_list),
+};
+
+static struct clksrc_clk clk_sclk_mixer = {
+	.clk		= {
+		.name		= "sclk_mixer",
+		.enable		= exynos4_clksrc_mask_tv_ctrl,
+		.ctrlbit	= (1 << 4),
+	},
+	.sources = &clkset_sclk_mixer,
+	.reg_src = { .reg = S5P_CLKSRC_TV, .shift = 4, .size = 1 },
+};
+
+static struct clksrc_clk *sclk_tv[] = {
+	&clk_sclk_dac,
+	&clk_sclk_pixel,
+	&clk_sclk_hdmi,
+	&clk_sclk_mixer,
+};
+
 static struct clksrc_clk clk_dout_mmc0 = {
 	.clk		= {
 		.name		= "dout_mmc0",
@@ -1129,6 +1249,11 @@ static struct clk_ops exynos4_fout_apll_ops = {
 	.get_rate = exynos4_fout_apll_get_rate,
 };
 
+static struct clk_ops exynos4_vpll_ops = {
+	.get_rate = s5p_vpll_get_rate,
+	.set_rate = s5p_vpll_set_rate,
+};
+
 void __init_or_cpufreq exynos4_setup_clocks(void)
 {
 	struct clk *xtal_clk;
@@ -1171,6 +1296,7 @@ void __init_or_cpufreq exynos4_setup_clocks(void)
 	clk_fout_apll.ops = &exynos4_fout_apll_ops;
 	clk_fout_mpll.rate = mpll;
 	clk_fout_epll.rate = epll;
+	clk_fout_vpll.ops = &exynos4_vpll_ops;
 	clk_fout_vpll.rate = vpll;
 
 	printk(KERN_INFO "EXYNOS4: PLL settings, A=%ld, M=%ld, E=%ld V=%ld",
@@ -1198,7 +1324,10 @@ void __init_or_cpufreq exynos4_setup_clocks(void)
 }
 
 static struct clk *clks[] __initdata = {
-	/* Nothing here yet */
+	&clk_sclk_hdmi27m,
+	&clk_sclk_hdmiphy,
+	&clk_sclk_usbphy0,
+	&clk_sclk_usbphy1,
 };
 
 void __init exynos4_register_clocks(void)
@@ -1210,6 +1339,9 @@ void __init exynos4_register_clocks(void)
 	for (ptr = 0; ptr < ARRAY_SIZE(sysclks); ptr++)
 		s3c_register_clksrc(sysclks[ptr], 1);
 
+	for (ptr = 0; ptr < ARRAY_SIZE(sclk_tv); ptr++)
+		s3c_register_clksrc(sclk_tv[ptr], 1);
+
 	s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs));
 	s3c_register_clocks(init_clocks, ARRAY_SIZE(init_clocks));
 
diff --git a/arch/arm/mach-exynos4/cpu.c b/arch/arm/mach-exynos4/cpu.c
index 2d8a40c..a8571fb 100644
--- a/arch/arm/mach-exynos4/cpu.c
+++ b/arch/arm/mach-exynos4/cpu.c
@@ -28,6 +28,7 @@
 #include <plat/fb-core.h>
 #include <plat/fimc-core.h>
 #include <plat/iic-core.h>
+#include <plat/tv-core.h>
 
 #include <mach/regs-irq.h>
 
@@ -156,6 +157,7 @@ void __init exynos4_map_io(void)
 	s3c_i2c2_setname("s3c2440-i2c");
 
 	s5p_fb_setname(0, "exynos4-fb");
+	s5p_hdmi_setname("exynos4-hdmi");
 }
 
 void __init exynos4_init_clocks(int xtal)
diff --git a/arch/arm/mach-exynos4/include/mach/irqs.h b/arch/arm/mach-exynos4/include/mach/irqs.h
index c56645f..92e8d09 100644
--- a/arch/arm/mach-exynos4/include/mach/irqs.h
+++ b/arch/arm/mach-exynos4/include/mach/irqs.h
@@ -94,9 +94,11 @@
 #define IRQ_2D			IRQ_SPI(89)
 #define IRQ_PCIE		IRQ_SPI(90)
 
+#define IRQ_MIXER		IRQ_SPI(91)
+#define IRQ_HDMI		IRQ_SPI(92)
 #define IRQ_IIC_HDMIPHY		IRQ_SPI(93)
-
 #define IRQ_MFC			IRQ_SPI(94)
+#define IRQ_SDO			IRQ_SPI(95)
 
 #define IRQ_AUDIO_SS		IRQ_SPI(96)
 #define IRQ_I2S0		IRQ_SPI(97)
diff --git a/arch/arm/mach-exynos4/include/mach/map.h b/arch/arm/mach-exynos4/include/mach/map.h
index 380feb9..fad70e2 100644
--- a/arch/arm/mach-exynos4/include/mach/map.h
+++ b/arch/arm/mach-exynos4/include/mach/map.h
@@ -112,6 +112,10 @@
 
 #define EXYNOS4_PA_UART			0x13800000
 
+#define EXYNOS4_PA_SDO			0x12C20000
+#define EXYNOS4_PA_VP			0x12C00000
+#define EXYNOS4_PA_MIXER		0x12C10000
+#define EXYNOS4_PA_HDMI			0x12D00000
 #define EXYNOS4_PA_IIC_HDMIPHY		0x138E0000
 
 #define EXYNOS4_PA_IIC(x)		(0x13860000 + ((x) * 0x10000))
@@ -163,6 +167,10 @@
 #define S5P_PA_TIMER			EXYNOS4_PA_TIMER
 #define S5P_PA_EHCI			EXYNOS4_PA_EHCI
 
+#define S5P_PA_SDO			EXYNOS4_PA_SDO
+#define S5P_PA_VP			EXYNOS4_PA_VP
+#define S5P_PA_MIXER			EXYNOS4_PA_MIXER
+#define S5P_PA_HDMI			EXYNOS4_PA_HDMI
 #define S5P_PA_IIC_HDMIPHY		EXYNOS4_PA_IIC_HDMIPHY
 
 #define SAMSUNG_PA_KEYPAD		EXYNOS4_PA_KEYPAD
diff --git a/arch/arm/mach-exynos4/include/mach/regs-pmu.h b/arch/arm/mach-exynos4/include/mach/regs-pmu.h
index fa49bbb..faf9b98 100644
--- a/arch/arm/mach-exynos4/include/mach/regs-pmu.h
+++ b/arch/arm/mach-exynos4/include/mach/regs-pmu.h
@@ -33,9 +33,15 @@
 #define S5P_EINT_WAKEUP_MASK			S5P_PMUREG(0x0604)
 #define S5P_WAKEUP_MASK				S5P_PMUREG(0x0608)
 
+#define S5P_HDMI_PHY_CONTROL			S5P_PMUREG(0x0700)
+#define S5P_HDMI_PHY_ENABLE			(1 << 0)
+
 #define S5P_USBHOST_PHY_CONTROL			S5P_PMUREG(0x0708)
 #define S5P_USBHOST_PHY_ENABLE			(1 << 0)
 
+#define S5P_DAC_PHY_CONTROL			S5P_PMUREG(0x070C)
+#define S5P_DAC_PHY_ENABLE			(1 << 0)
+
 #define S5P_MIPI_DPHY_CONTROL(n)		S5P_PMUREG(0x0710 + (n) * 4)
 #define S5P_MIPI_DPHY_ENABLE			(1 << 0)
 #define S5P_MIPI_DPHY_SRESETN			(1 << 1)
diff --git a/arch/arm/mach-s5pv210/Kconfig b/arch/arm/mach-s5pv210/Kconfig
index 69dd87c..65c878c 100644
--- a/arch/arm/mach-s5pv210/Kconfig
+++ b/arch/arm/mach-s5pv210/Kconfig
@@ -14,6 +14,7 @@ config CPU_S5PV210
 	select S3C_PL330_DMA
 	select S5P_EXT_INT
 	select S5P_HRT
+	select S5P_CLOCK_VPLL
 	select S5PV210_PM if PM
 	help
 	  Enable S5PV210 CPU support
diff --git a/arch/arm/mach-s5pv210/clock.c b/arch/arm/mach-s5pv210/clock.c
index 90a1966..4fa43ef 100644
--- a/arch/arm/mach-s5pv210/clock.c
+++ b/arch/arm/mach-s5pv210/clock.c
@@ -174,6 +174,16 @@ static int s5pv210_clk_mask1_ctrl(struct clk *clk, int enable)
 	return s5p_gatectrl(S5P_CLK_SRC_MASK1, clk, enable);
 }
 
+static int exynos4_clk_hdmiphy_ctrl(struct clk *clk, int enable)
+{
+	return s5p_gatectrl(S5P_HDMI_PHY_CONTROL, clk, enable);
+}
+
+static int exynos4_clk_dac_ctrl(struct clk *clk, int enable)
+{
+	return s5p_gatectrl(S5P_DAC_PHY_CONTROL, clk, enable);
+}
+
 static struct clk clk_sclk_hdmi27m = {
 	.name		= "sclk_hdmi27m",
 	.rate		= 27000000,
@@ -330,6 +340,40 @@ static struct clk init_clocks_off[] = {
 		.enable		= s5pv210_clk_ip0_ctrl,
 		.ctrlbit	= (1 << 16),
 	}, {
+		.name		= "dac",
+		.devname	= "s5p-sdo",
+		.parent		= &clk_hclk_dsys.clk,
+		.enable		= s5pv210_clk_ip1_ctrl,
+		.ctrlbit	= (1 << 10),
+	}, {
+		.name		= "mixer",
+		.devname	= "s5p-mixer",
+		.parent		= &clk_hclk_dsys.clk,
+		.enable		= s5pv210_clk_ip1_ctrl,
+		.ctrlbit	= (1 << 9),
+	}, {
+		.name		= "vp",
+		.devname	= "s5p-mixer",
+		.parent		= &clk_hclk_dsys.clk,
+		.enable		= s5pv210_clk_ip1_ctrl,
+		.ctrlbit	= (1 << 8),
+	}, {
+		.name		= "hdmi",
+		.devname	= "s5pv210-hdmi",
+		.parent		= &clk_hclk_dsys.clk,
+		.enable		= s5pv210_clk_ip1_ctrl,
+		.ctrlbit	= (1 << 11),
+	}, {
+		.name		= "hdmiphy",
+		.devname	= "s5pv210-hdmi",
+		.enable		= exynos4_clk_hdmiphy_ctrl,
+		.ctrlbit	= (1 << 0),
+	}, {
+		.name		= "dacphy",
+		.devname	= "s5p-sdo",
+		.enable		= exynos4_clk_dac_ctrl,
+		.ctrlbit	= (1 << 0),
+	}, {
 		.name		= "otg",
 		.parent		= &clk_hclk_psys.clk,
 		.enable		= s5pv210_clk_ip1_ctrl,
@@ -600,6 +644,23 @@ static struct clksrc_sources clkset_sclk_mixer = {
 	.nr_sources	= ARRAY_SIZE(clkset_sclk_mixer_list),
 };
 
+static struct clksrc_clk clk_sclk_mixer = {
+	.clk		= {
+		.name		= "sclk_mixer",
+		.enable		= s5pv210_clk_mask0_ctrl,
+		.ctrlbit	= (1 << 1),
+	},
+	.sources = &clkset_sclk_mixer,
+	.reg_src = { .reg = S5P_CLK_SRC1, .shift = 4, .size = 1 },
+};
+
+static struct clksrc_clk *sclk_tv[] = {
+	&clk_sclk_dac,
+	&clk_sclk_pixel,
+	&clk_sclk_hdmi,
+	&clk_sclk_mixer,
+};
+
 static struct clk *clkset_sclk_audio0_list[] = {
 	[0] = &clk_ext_xtal_mux,
 	[1] = &clk_pcmcdclk0,
@@ -783,14 +844,6 @@ static struct clksrc_clk clksrcs[] = {
 		.reg_div = { .reg = S5P_CLK_DIV4, .shift = 28, .size = 4 },
 	}, {
 		.clk	= {
-			.name		= "sclk_mixer",
-			.enable		= s5pv210_clk_mask0_ctrl,
-			.ctrlbit	= (1 << 1),
-		},
-		.sources = &clkset_sclk_mixer,
-		.reg_src = { .reg = S5P_CLK_SRC1, .shift = 4, .size = 1 },
-	}, {
-		.clk	= {
 			.name		= "sclk_fimc",
 			.devname	= "s5pv210-fimc.0",
 			.enable		= s5pv210_clk_mask1_ctrl,
@@ -981,9 +1034,6 @@ static struct clksrc_clk *sysclks[] = {
 	&clk_pclk_psys,
 	&clk_vpllsrc,
 	&clk_sclk_vpll,
-	&clk_sclk_dac,
-	&clk_sclk_pixel,
-	&clk_sclk_hdmi,
 	&clk_mout_dmc0,
 	&clk_sclk_dmc0,
 	&clk_sclk_audio0,
@@ -1068,6 +1118,11 @@ static struct clk_ops s5pv210_epll_ops = {
 	.get_rate = s5p_epll_get_rate,
 };
 
+static struct clk_ops s5pv210_vpll_ops = {
+	.get_rate = s5p_vpll_get_rate,
+	.set_rate = s5p_vpll_set_rate,
+};
+
 void __init_or_cpufreq s5pv210_setup_clocks(void)
 {
 	struct clk *xtal_clk;
@@ -1116,6 +1171,7 @@ void __init_or_cpufreq s5pv210_setup_clocks(void)
 	clk_fout_apll.ops = &clk_fout_apll_ops;
 	clk_fout_mpll.rate = mpll;
 	clk_fout_epll.rate = epll;
+	clk_fout_vpll.ops = &s5pv210_vpll_ops;
 	clk_fout_vpll.rate = vpll;
 
 	printk(KERN_INFO "S5PV210: PLL settings, A=%ld, M=%ld, E=%ld V=%ld",
@@ -1161,6 +1217,9 @@ void __init s5pv210_register_clocks(void)
 	for (ptr = 0; ptr < ARRAY_SIZE(sysclks); ptr++)
 		s3c_register_clksrc(sysclks[ptr], 1);
 
+	for (ptr = 0; ptr < ARRAY_SIZE(sclk_tv); ptr++)
+		s3c_register_clksrc(sclk_tv[ptr], 1);
+
 	s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs));
 	s3c_register_clocks(init_clocks, ARRAY_SIZE(init_clocks));
 
diff --git a/arch/arm/mach-s5pv210/cpu.c b/arch/arm/mach-s5pv210/cpu.c
index 79907ec..6b8cdcc 100644
--- a/arch/arm/mach-s5pv210/cpu.c
+++ b/arch/arm/mach-s5pv210/cpu.c
@@ -41,6 +41,7 @@
 #include <plat/keypad-core.h>
 #include <plat/sdhci.h>
 #include <plat/reset.h>
+#include <plat/tv-core.h>
 
 /* Initial IO mappings */
 
@@ -143,6 +144,9 @@ void __init s5pv210_map_io(void)
 
 	/* Use s5pv210-keypad instead of samsung-keypad */
 	samsung_keypad_setname("s5pv210-keypad");
+
+	/* setup TV devices */
+	s5p_hdmi_setname("s5pv210-hdmi");
 }
 
 void __init s5pv210_init_clocks(int xtal)
diff --git a/arch/arm/mach-s5pv210/include/mach/irqs.h b/arch/arm/mach-s5pv210/include/mach/irqs.h
index c1da0a7..5e0de3a 100644
--- a/arch/arm/mach-s5pv210/include/mach/irqs.h
+++ b/arch/arm/mach-s5pv210/include/mach/irqs.h
@@ -86,7 +86,7 @@
 #define IRQ_HDMI		S5P_IRQ_VIC2(12)
 #define IRQ_IIC1		S5P_IRQ_VIC2(13)
 #define IRQ_MFC			S5P_IRQ_VIC2(14)
-#define IRQ_TVENC		S5P_IRQ_VIC2(15)
+#define IRQ_SDO			S5P_IRQ_VIC2(15)
 #define IRQ_I2S0		S5P_IRQ_VIC2(16)
 #define IRQ_I2S1		S5P_IRQ_VIC2(17)
 #define IRQ_I2S2		S5P_IRQ_VIC2(18)
diff --git a/arch/arm/mach-s5pv210/include/mach/map.h b/arch/arm/mach-s5pv210/include/mach/map.h
index a420654..7ff609f 100644
--- a/arch/arm/mach-s5pv210/include/mach/map.h
+++ b/arch/arm/mach-s5pv210/include/mach/map.h
@@ -90,6 +90,10 @@
 #define S5PV210_PA_FIMC1		0xFB300000
 #define S5PV210_PA_FIMC2		0xFB400000
 
+#define S5PV210_PA_SDO			0xF9000000
+#define S5PV210_PA_VP			0xF9100000
+#define S5PV210_PA_MIXER		0xF9200000
+#define S5PV210_PA_HDMI			0xFA100000
 #define S5PV210_PA_IIC_HDMIPHY		0xFA900000
 
 /* Compatibiltiy Defines */
@@ -113,6 +117,12 @@
 #define S5P_PA_MIPI_CSIS0		S5PV210_PA_MIPI_CSIS
 #define S5P_PA_MFC			S5PV210_PA_MFC
 #define S5P_PA_IIC_HDMIPHY		S5PV210_PA_IIC_HDMIPHY
+
+#define S5P_PA_SDO			S5PV210_PA_SDO
+#define S5P_PA_VP			S5PV210_PA_VP
+#define S5P_PA_MIXER			S5PV210_PA_MIXER
+#define S5P_PA_HDMI			S5PV210_PA_HDMI
+
 #define S5P_PA_ONENAND			S5PC110_PA_ONENAND
 #define S5P_PA_ONENAND_DMA		S5PC110_PA_ONENAND_DMA
 #define S5P_PA_SDRAM			S5PV210_PA_SDRAM
diff --git a/arch/arm/mach-s5pv210/include/mach/regs-clock.h b/arch/arm/mach-s5pv210/include/mach/regs-clock.h
index 78925c5..116a76b 100644
--- a/arch/arm/mach-s5pv210/include/mach/regs-clock.h
+++ b/arch/arm/mach-s5pv210/include/mach/regs-clock.h
@@ -26,7 +26,9 @@
 #define S5P_MPLL_CON		S5P_CLKREG(0x108)
 #define S5P_EPLL_CON		S5P_CLKREG(0x110)
 #define S5P_EPLL_CON1		S5P_CLKREG(0x114)
-#define S5P_VPLL_CON		S5P_CLKREG(0x120)
+#define S5P_VPLL_CON0		S5P_CLKREG(0x120)
+#define S5P_VPLL_CON		S5P_VPLL_CON0
+#define S5P_VPLL_CON1		S5P_CLKREG(0x120)
 
 #define S5P_CLK_SRC0		S5P_CLKREG(0x200)
 #define S5P_CLK_SRC1		S5P_CLKREG(0x204)
@@ -118,6 +120,8 @@
 #define S5P_CLKDIV6_ONEDRAM_SHIFT       (28)
 #define S5P_CLKDIV6_ONEDRAM_MASK        (0xF << S5P_CLKDIV6_ONEDRAM_SHIFT)
 
+#define S5P_VPLLCON0_LOCKED_SHIFT	(29)
+
 #define S5P_SWRESET		S5P_CLKREG(0x2000)
 
 #define S5P_ARM_MCS_CON		S5P_CLKREG(0x6100)
@@ -144,8 +148,9 @@
 
 #define S5P_OTHERS		S5P_CLKREG(0xE000)
 #define S5P_OM_STAT		S5P_CLKREG(0xE100)
+#define S5P_HDMI_PHY_CONTROL	S5P_CLKREG(0xE804)
 #define S5P_USB_PHY_CONTROL	S5P_CLKREG(0xE80C)
-#define S5P_DAC_CONTROL		S5P_CLKREG(0xE810)
+#define S5P_DAC_PHY_CONTROL	S5P_CLKREG(0xE810)
 #define S5P_MIPI_DPHY_CONTROL(x) S5P_CLKREG(0xE814)
 #define S5P_MIPI_DPHY_ENABLE	(1 << 0)
 #define S5P_MIPI_DPHY_SRESETN	(1 << 1)
diff --git a/arch/arm/plat-s5p/Kconfig b/arch/arm/plat-s5p/Kconfig
index 143e036..70d6ae7 100644
--- a/arch/arm/plat-s5p/Kconfig
+++ b/arch/arm/plat-s5p/Kconfig
@@ -26,6 +26,11 @@ config PLAT_S5P
 	help
 	  Base platform code for Samsung's S5P series SoC.
 
+config S5P_CLOCK_VPLL
+	bool
+	help
+	  Common code for the VPLL clock support code.
+
 config S5P_EXT_INT
 	bool
 	help
@@ -101,6 +106,11 @@ config S5P_DEV_CSIS1
 	help
 	  Compile in platform device definitions for MIPI-CSIS channel 1
 
+config S5P_DEV_TV
+	bool
+	help
+	  Compile in platform device definition for TV interface
+
 config S5P_DEV_USB_EHCI
 	bool
 	help
diff --git a/arch/arm/plat-s5p/Makefile b/arch/arm/plat-s5p/Makefile
index 1dd10dc..c386d60 100644
--- a/arch/arm/plat-s5p/Makefile
+++ b/arch/arm/plat-s5p/Makefile
@@ -17,6 +17,7 @@ obj-y				+= dev-uart.o
 obj-y				+= cpu.o
 obj-y				+= clock.o
 obj-y				+= irq.o
+obj-$(CONFIG_S5P_CLOCK_VPLL)	+= clock-vpll.o
 obj-$(CONFIG_S5P_EXT_INT)	+= irq-eint.o
 obj-$(CONFIG_S5P_GPIO_INT)	+= irq-gpioint.o
 obj-$(CONFIG_S5P_SYSTEM_MMU)	+= sysmmu.o
@@ -35,5 +36,6 @@ obj-$(CONFIG_S5P_DEV_I2C_HDMIPHY) += dev-i2c-hdmiphy.o
 obj-$(CONFIG_S5P_DEV_ONENAND)	+= dev-onenand.o
 obj-$(CONFIG_S5P_DEV_CSIS0)	+= dev-csis0.o
 obj-$(CONFIG_S5P_DEV_CSIS1)	+= dev-csis1.o
+obj-$(CONFIG_S5P_DEV_TV)	+= dev-tv.o
 obj-$(CONFIG_S5P_DEV_USB_EHCI)	+= dev-ehci.o
 obj-$(CONFIG_S5P_SETUP_MIPIPHY)	+= setup-mipiphy.o
diff --git a/arch/arm/plat-s5p/clock-vpll.c b/arch/arm/plat-s5p/clock-vpll.c
new file mode 100644
index 0000000..b570f56
--- /dev/null
+++ b/arch/arm/plat-s5p/clock-vpll.c
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2011 Samsung Electronics Co., Ltd.
+ *		http://www.samsung.com/
+ *
+ * S5P - Common VPLL clock support
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+*/
+
+#include <linux/kernel.h>
+#include <linux/err.h>
+#include <linux/clk.h>
+#include <linux/io.h>
+
+#include <mach/regs-clock.h>
+
+#include <plat/clock.h>
+#include <plat/pll.h>
+#include <plat/s5p-clock.h>
+
+struct vpll_div_data {
+	u32 rate;
+	u32 pdiv;
+	u32 mdiv;
+	u32 sdiv;
+	u32 k;
+	u32 mfr;
+	u32 mrr;
+	u32 vsel;
+};
+
+static struct vpll_div_data vpll_div[] = {
+	{  54000000, 3, 53, 3, 1024, 0, 17, 0 },
+	{ 108000000, 3, 53, 2, 1024, 0, 17, 0 },
+};
+
+unsigned long s5p_vpll_get_rate(struct clk *clk)
+{
+	return clk->rate;
+}
+
+int s5p_vpll_set_rate(struct clk *clk, unsigned long rate)
+{
+	unsigned int vpll_con0, vpll_con1;
+	unsigned int i;
+
+	/* Return if nothing changed */
+	if (clk->rate == rate)
+		return 0;
+
+	vpll_con0 = __raw_readl(S5P_VPLL_CON0);
+	vpll_con0 &= ~(0x1 << 27 |					\
+			PLL90XX_MDIV_MASK << PLL90XX_MDIV_SHIFT |	\
+			PLL90XX_PDIV_MASK << PLL90XX_PDIV_SHIFT |	\
+			PLL90XX_SDIV_MASK << PLL90XX_SDIV_SHIFT);
+
+	vpll_con1 = __raw_readl(S5P_VPLL_CON1);
+	vpll_con1 &= ~(0x1f << 24 |	\
+			0x3f << 16 |	\
+			0xfff << 0);
+
+	for (i = 0; i < ARRAY_SIZE(vpll_div); i++) {
+		if (vpll_div[i].rate == rate) {
+			vpll_con0 |= vpll_div[i].vsel << 27;
+			vpll_con0 |= vpll_div[i].pdiv << PLL90XX_PDIV_SHIFT;
+			vpll_con0 |= vpll_div[i].mdiv << PLL90XX_MDIV_SHIFT;
+			vpll_con0 |= vpll_div[i].sdiv << PLL90XX_SDIV_SHIFT;
+
+			vpll_con1 |= vpll_div[i].mrr << 24;
+			vpll_con1 |= vpll_div[i].mfr << 16;
+			vpll_con1 |= vpll_div[i].k << 0;
+			break;
+		}
+	}
+
+	if (i == ARRAY_SIZE(vpll_div)) {
+		printk(KERN_ERR "%s: Invalid Clock VPLL Frequency\n",
+				__func__);
+		return -EINVAL;
+	}
+
+	__raw_writel(vpll_con0, S5P_VPLL_CON0);
+	__raw_writel(vpll_con1, S5P_VPLL_CON1);
+
+	/* Wait for VPLL lock */
+	while (!(__raw_readl(S5P_VPLL_CON0) & (1 << S5P_VPLLCON0_LOCKED_SHIFT)))
+		continue;
+
+	clk->rate = rate;
+	return 0;
+}
diff --git a/arch/arm/plat-s5p/dev-tv.c b/arch/arm/plat-s5p/dev-tv.c
new file mode 100644
index 0000000..0e44342
--- /dev/null
+++ b/arch/arm/plat-s5p/dev-tv.c
@@ -0,0 +1,100 @@
+/* linux/arch/arm/plat-s5p/dev-tv.c
+ *
+ * Copyright (C) 2011 Samsung Electronics Co.Ltd
+ * Author: Tomasz Stanislawski <t.stanislaws@samsung.com>
+ *
+ * S5P series device definition for TV device
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+*/
+
+#include <linux/dma-mapping.h>
+
+#include <mach/irqs.h>
+#include <mach/map.h>
+
+#include <plat/devs.h>
+
+/* HDMI interface */
+static struct resource s5p_hdmi_resources[] = {
+	[0] = {
+		.start	= S5P_PA_HDMI,
+		.end	= S5P_PA_HDMI + SZ_1M - 1,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= IRQ_HDMI,
+		.end	= IRQ_HDMI,
+		.flags	= IORESOURCE_IRQ,
+	},
+};
+
+struct platform_device s5p_device_hdmi = {
+	.name		= "s5p-hdmi",
+	.id		= -1,
+	.num_resources	= ARRAY_SIZE(s5p_hdmi_resources),
+	.resource	= s5p_hdmi_resources,
+};
+EXPORT_SYMBOL(s5p_device_hdmi);
+
+/* MIXER */
+static struct resource s5p_mixer_resources[] = {
+	[0] = {
+		.start	= S5P_PA_MIXER,
+		.end	= S5P_PA_MIXER + SZ_64K - 1,
+		.flags	= IORESOURCE_MEM,
+		.name	= "mxr"
+	},
+	[1] = {
+		.start	= S5P_PA_VP,
+		.end	= S5P_PA_VP + SZ_64K - 1,
+		.flags	= IORESOURCE_MEM,
+		.name	= "vp"
+	},
+	[2] = {
+		.start	= IRQ_MIXER,
+		.end	= IRQ_MIXER,
+		.flags	= IORESOURCE_IRQ,
+		.name	= "irq"
+	}
+};
+
+struct platform_device s5p_device_mixer = {
+	.name		= "s5p-mixer",
+	.id		= -1,
+	.num_resources	= ARRAY_SIZE(s5p_mixer_resources),
+	.resource	= s5p_mixer_resources,
+	.dev		= {
+		.coherent_dma_mask = DMA_BIT_MASK(32),
+		.dma_mask = &s5p_device_mixer.dev.coherent_dma_mask,
+	}
+};
+EXPORT_SYMBOL(s5p_device_mixer);
+
+/* HDMI interface */
+static struct resource s5p_sdo_resources[] = {
+	[0] = {
+		.start	= S5P_PA_SDO,
+		.end	= S5P_PA_SDO + SZ_64K - 1,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= IRQ_SDO,
+		.end	= IRQ_SDO,
+		.flags	= IORESOURCE_IRQ,
+	}
+};
+
+struct platform_device s5p_device_sdo = {
+	.name		= "s5p-sdo",
+	.id		= -1,
+	.num_resources	= ARRAY_SIZE(s5p_sdo_resources),
+	.resource	= s5p_sdo_resources,
+	.dev		= {
+		.coherent_dma_mask = DMA_BIT_MASK(32),
+		.dma_mask = &s5p_device_sdo.dev.coherent_dma_mask,
+	}
+};
+EXPORT_SYMBOL(s5p_device_sdo);
diff --git a/arch/arm/plat-s5p/include/plat/s5p-clock.h b/arch/arm/plat-s5p/include/plat/s5p-clock.h
index 769b5bd..7cb2ffc 100644
--- a/arch/arm/plat-s5p/include/plat/s5p-clock.h
+++ b/arch/arm/plat-s5p/include/plat/s5p-clock.h
@@ -47,6 +47,10 @@ extern int s5p_gatectrl(void __iomem *reg, struct clk *clk, int enable);
 extern int s5p_epll_enable(struct clk *clk, int enable);
 extern unsigned long s5p_epll_get_rate(struct clk *clk);
 
+/* Common VPLL operations for S5P platform */
+extern unsigned long s5p_vpll_get_rate(struct clk *clk);
+extern int s5p_vpll_set_rate(struct clk *clk, unsigned long rate);
+
 /* SPDIF clk operations common for S5PC100/V210/C110 and Exynos4 */
 extern int s5p_spdif_set_rate(struct clk *clk, unsigned long rate);
 extern unsigned long s5p_spdif_get_rate(struct clk *clk);
diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h
index b15805f..ee5014a 100644
--- a/arch/arm/plat-samsung/include/plat/devs.h
+++ b/arch/arm/plat-samsung/include/plat/devs.h
@@ -143,6 +143,11 @@ extern struct platform_device s5p_device_fimc3;
 extern struct platform_device s5p_device_mfc;
 extern struct platform_device s5p_device_mfc_l;
 extern struct platform_device s5p_device_mfc_r;
+
+extern struct platform_device s5p_device_hdmi;
+extern struct platform_device s5p_device_mixer;
+extern struct platform_device s5p_device_sdo;
+
 extern struct platform_device s5p_device_mipi_csis0;
 extern struct platform_device s5p_device_mipi_csis1;
 
diff --git a/arch/arm/plat-samsung/include/plat/tv-core.h b/arch/arm/plat-samsung/include/plat/tv-core.h
new file mode 100644
index 0000000..3bc34f3
--- /dev/null
+++ b/arch/arm/plat-samsung/include/plat/tv-core.h
@@ -0,0 +1,44 @@
+/*
+ * arch/arm/plat-samsung/include/plat/tv.h
+ *
+ * Copyright 2011 Samsung Electronics Co., Ltd.
+ *	Tomasz Stanislawski <t.stanislaws@samsung.com>
+ *
+ * Samsung TV driver core functions
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __SAMSUNG_PLAT_TV_H
+#define __SAMSUNG_PLAT_TV_H __FILE__
+
+/*
+ * These functions are only for use with the core support code, such as
+ * the CPU-specific initialization code.
+ */
+
+/* Re-define device name to differentiate the subsystem in various SoCs. */
+static inline void s5p_hdmi_setname(char *name)
+{
+#ifdef CONFIG_S5P_DEV_TV
+	s5p_device_hdmi.name = name;
+#endif
+}
+
+static inline void s5p_mixer_setname(char *name)
+{
+#ifdef CONFIG_S5P_DEV_TV
+	s5p_device_mixer.name = name;
+#endif
+}
+
+static inline void s5p_sdo_setname(char *name)
+{
+#ifdef CONFIG_S5P_DEV_TV
+	s5p_device_sdo.name = name;
+#endif
+}
+
+#endif /* __SAMSUNG_PLAT_TV_H */
-- 
1.7.1.569.g6f426

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

* [PATCH 3/4] ARM: Exynos4: enable TV support on Universal_C210 board
  2011-07-25  7:55 [PATCHv3 0/4] Updated s5p-tv platform definitions Marek Szyprowski
  2011-07-25  7:55 ` [PATCH 1/4] ARM: Samsung: add i2c hdmiphy controller definitions Marek Szyprowski
  2011-07-25  7:55 ` [PATCH 2/4] ARM: S5P: add support for tv device Marek Szyprowski
@ 2011-07-25  7:55 ` Marek Szyprowski
  2011-07-25  7:55 ` [PATCH 4/4] ARM: S5PV210: enable TV support on GONI board Marek Szyprowski
  3 siblings, 0 replies; 7+ messages in thread
From: Marek Szyprowski @ 2011-07-25  7:55 UTC (permalink / raw)
  To: linux-samsung-soc
  Cc: Marek Szyprowski, Tomasz Stanislawski, Kyungmin Park, Kukjin Kim

From: Tomasz Stanislawski <t.stanislaws@samsung.com>

This patch adds platform devices and regulators for TV devices on
Samsung Universal C210 board.

Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
 arch/arm/mach-exynos4/Kconfig               |    2 +
 arch/arm/mach-exynos4/mach-universal_c210.c |   74 +++++++++++++++++++++++++++
 2 files changed, 76 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-exynos4/Kconfig b/arch/arm/mach-exynos4/Kconfig
index 7b468c2..b4288cf 100644
--- a/arch/arm/mach-exynos4/Kconfig
+++ b/arch/arm/mach-exynos4/Kconfig
@@ -185,9 +185,11 @@ config MACH_UNIVERSAL_C210
 	select S3C_DEV_I2C1
 	select S3C_DEV_I2C3
 	select S3C_DEV_I2C5
+	select S5P_DEV_I2C_HDMIPHY
 	select S5P_DEV_MFC
 	select S5P_DEV_ONENAND
 	select EXYNOS4_DEV_PD
+	select S5P_DEV_TV
 	select EXYNOS4_SETUP_I2C1
 	select EXYNOS4_SETUP_I2C3
 	select EXYNOS4_SETUP_I2C5
diff --git a/arch/arm/mach-exynos4/mach-universal_c210.c b/arch/arm/mach-exynos4/mach-universal_c210.c
index 0e280d1..e9dbe79 100644
--- a/arch/arm/mach-exynos4/mach-universal_c210.c
+++ b/arch/arm/mach-exynos4/mach-universal_c210.c
@@ -110,6 +110,9 @@ static struct regulator_consumer_supply lp3974_buck1_consumer =
 static struct regulator_consumer_supply lp3974_buck2_consumer =
 	REGULATOR_SUPPLY("vddg3d", NULL);
 
+static struct regulator_consumer_supply lp3974_buck3_consumer =
+	REGULATOR_SUPPLY("vdet", "s5p-sdo");
+
 static struct regulator_init_data lp3974_buck1_data = {
 	.constraints	= {
 		.name		= "VINT_1.1V",
@@ -153,6 +156,8 @@ static struct regulator_init_data lp3974_buck3_data = {
 			.enabled	= 1,
 		},
 	},
+	.num_consumer_supplies = 1,
+	.consumer_supplies = &lp3974_buck3_consumer,
 };
 
 static struct regulator_init_data lp3974_buck4_data = {
@@ -181,6 +186,11 @@ static struct regulator_init_data lp3974_ldo2_data = {
 	},
 };
 
+static struct regulator_consumer_supply lp3974_ldo3_consumer[] = {
+	REGULATOR_SUPPLY("vdd", "exynos4-hdmi"),
+	REGULATOR_SUPPLY("vdd_pll", "exynos4-hdmi"),
+};
+
 static struct regulator_init_data lp3974_ldo3_data = {
 	.constraints	= {
 		.name		= "VUSB+MIPI_1.1V",
@@ -192,6 +202,12 @@ static struct regulator_init_data lp3974_ldo3_data = {
 			.disabled	= 1,
 		},
 	},
+	.num_consumer_supplies = ARRAY_SIZE(lp3974_ldo3_consumer),
+	.consumer_supplies = lp3974_ldo3_consumer,
+};
+
+static struct regulator_consumer_supply lp3974_ldo4_consumer[] = {
+	REGULATOR_SUPPLY("vdd_osc", "exynos4-hdmi"),
 };
 
 static struct regulator_init_data lp3974_ldo4_data = {
@@ -205,6 +221,8 @@ static struct regulator_init_data lp3974_ldo4_data = {
 			.disabled	= 1,
 		},
 	},
+	.num_consumer_supplies = ARRAY_SIZE(lp3974_ldo4_consumer),
+	.consumer_supplies = lp3974_ldo4_consumer,
 };
 
 static struct regulator_init_data lp3974_ldo5_data = {
@@ -246,6 +264,10 @@ static struct regulator_init_data lp3974_ldo7_data = {
 	},
 };
 
+static struct regulator_consumer_supply lp3974_ldo8_consumer[] = {
+	REGULATOR_SUPPLY("vdd33a_dac", "s5p-sdo"),
+};
+
 static struct regulator_init_data lp3974_ldo8_data = {
 	.constraints	= {
 		.name		= "VUSB+VDAC_3.3V",
@@ -257,6 +279,8 @@ static struct regulator_init_data lp3974_ldo8_data = {
 			.disabled	= 1,
 		},
 	},
+	.num_consumer_supplies = ARRAY_SIZE(lp3974_ldo8_consumer),
+	.consumer_supplies = lp3974_ldo8_consumer,
 };
 
 static struct regulator_init_data lp3974_ldo9_data = {
@@ -472,6 +496,34 @@ static struct max8998_platform_data universal_lp3974_pdata = {
 	.wakeup			= true,
 };
 
+static struct regulator_consumer_supply hdmi_fixed_consumer =
+	REGULATOR_SUPPLY("hdmi-en", "exynos4-hdmi");
+
+static struct regulator_init_data hdmi_fixed_voltage_init_data = {
+	.constraints		= {
+		.name		= "HDMI_5V",
+		.valid_ops_mask	= REGULATOR_CHANGE_STATUS,
+	},
+	.num_consumer_supplies	= 1,
+	.consumer_supplies	= &hdmi_fixed_consumer,
+};
+
+static struct fixed_voltage_config hdmi_fixed_voltage_config = {
+	.supply_name		= "HDMI_EN1",
+	.microvolts		= 5000000,
+	.gpio			= EXYNOS4_GPE0(1),
+	.enable_high		= true,
+	.init_data		= &hdmi_fixed_voltage_init_data,
+};
+
+static struct platform_device hdmi_fixed_voltage = {
+	.name			= "reg-fixed-voltage",
+	.id			= 6,
+	.dev			= {
+		.platform_data	= &hdmi_fixed_voltage_config,
+	},
+};
+
 /* GPIO I2C 5 (PMIC) */
 static struct i2c_board_info i2c5_devs[] __initdata = {
 	{
@@ -714,6 +766,12 @@ static struct platform_device *universal_devices[] __initdata = {
 	&s3c_device_hsmmc3,
 	&s3c_device_i2c3,
 	&s3c_device_i2c5,
+	&s5p_device_i2c_hdmiphy,
+	&hdmi_fixed_voltage,
+	&exynos4_device_pd[PD_TV],
+	&s5p_device_hdmi,
+	&s5p_device_sdo,
+	&s5p_device_mixer,
 
 	/* Universal Devices */
 	&i2c_gpio12,
@@ -732,6 +790,20 @@ static void __init universal_map_io(void)
 	s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs));
 }
 
+void s5p_tv_setup(void)
+{
+	/* direct HPD to HDMI chip */
+	gpio_request(EXYNOS4_GPX3(7), "hpd-plug");
+
+	gpio_direction_input(EXYNOS4_GPX3(7));
+	s3c_gpio_cfgpin(EXYNOS4_GPX3(7), S3C_GPIO_SFN(0x3));
+	s3c_gpio_setpull(EXYNOS4_GPX3(7), S3C_GPIO_PULL_NONE);
+
+	/* setup dependencies between TV devices */
+	s5p_device_hdmi.dev.parent = &exynos4_device_pd[PD_TV].dev;
+	s5p_device_mixer.dev.parent = &exynos4_device_pd[PD_TV].dev;
+}
+
 static void __init universal_reserve(void)
 {
 	s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20);
@@ -740,6 +812,7 @@ static void __init universal_reserve(void)
 static void __init universal_machine_init(void)
 {
 	universal_sdhci_init();
+	s5p_tv_setup();
 
 	i2c_register_board_info(0, i2c0_devs, ARRAY_SIZE(i2c0_devs));
 	i2c_register_board_info(1, i2c1_devs, ARRAY_SIZE(i2c1_devs));
@@ -749,6 +822,7 @@ static void __init universal_machine_init(void)
 	i2c_register_board_info(3, i2c3_devs, ARRAY_SIZE(i2c3_devs));
 
 	s3c_i2c5_set_platdata(NULL);
+	s5p_i2c_hdmiphy_set_platdata(NULL);
 	i2c_register_board_info(5, i2c5_devs, ARRAY_SIZE(i2c5_devs));
 
 	universal_touchkey_init();
-- 
1.7.1.569.g6f426

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

* [PATCH 4/4] ARM: S5PV210: enable TV support on GONI board
  2011-07-25  7:55 [PATCHv3 0/4] Updated s5p-tv platform definitions Marek Szyprowski
                   ` (2 preceding siblings ...)
  2011-07-25  7:55 ` [PATCH 3/4] ARM: Exynos4: enable TV support on Universal_C210 board Marek Szyprowski
@ 2011-07-25  7:55 ` Marek Szyprowski
  3 siblings, 0 replies; 7+ messages in thread
From: Marek Szyprowski @ 2011-07-25  7:55 UTC (permalink / raw)
  To: linux-samsung-soc
  Cc: Marek Szyprowski, Tomasz Stanislawski, Kyungmin Park, Kukjin Kim

From: Tomasz Stanislawski <t.stanislaws@samsung.com>

This patch adds platform devices and regulators for TV devices on
Samsung Goni board.

Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
 arch/arm/mach-s5pv210/Kconfig     |    1 +
 arch/arm/mach-s5pv210/mach-goni.c |    9 +++++++++
 2 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-s5pv210/Kconfig b/arch/arm/mach-s5pv210/Kconfig
index 65c878c..e28d2c5 100644
--- a/arch/arm/mach-s5pv210/Kconfig
+++ b/arch/arm/mach-s5pv210/Kconfig
@@ -95,6 +95,7 @@ config MACH_GONI
 	select S3C_DEV_USB_HSOTG
 	select S5P_DEV_ONENAND
 	select SAMSUNG_DEV_KEYPAD
+	select S5P_DEV_TV
 	select S5PV210_SETUP_FB_24BPP
 	select S5PV210_SETUP_I2C1
 	select S5PV210_SETUP_I2C2
diff --git a/arch/arm/mach-s5pv210/mach-goni.c b/arch/arm/mach-s5pv210/mach-goni.c
index 85c2d51..14578f5 100644
--- a/arch/arm/mach-s5pv210/mach-goni.c
+++ b/arch/arm/mach-s5pv210/mach-goni.c
@@ -285,6 +285,7 @@ static struct regulator_consumer_supply goni_ldo5_consumers[] = {
 
 static struct regulator_consumer_supply goni_ldo8_consumers[] = {
 	REGULATOR_SUPPLY("vusb_d", "s3c-hsotg"),
+	REGULATOR_SUPPLY("vdd33a_dac", "s5p-sdo"),
 };
 
 static struct regulator_consumer_supply goni_ldo11_consumers[] = {
@@ -475,6 +476,10 @@ static struct regulator_consumer_supply buck1_consumer =
 static struct regulator_consumer_supply buck2_consumer =
 	REGULATOR_SUPPLY("vddint", NULL);
 
+static struct regulator_consumer_supply buck3_consumer =
+	REGULATOR_SUPPLY("vdet", "s5p-sdo");
+
+
 static struct regulator_init_data goni_buck1_data = {
 	.constraints	= {
 		.name		= "VARM_1.2V",
@@ -511,6 +516,8 @@ static struct regulator_init_data goni_buck3_data = {
 			.enabled = 1,
 		},
 	},
+	.num_consumer_supplies	= 1,
+	.consumer_supplies	= &buck3_consumer,
 };
 
 static struct regulator_init_data goni_buck4_data = {
@@ -812,6 +819,8 @@ static struct platform_device *goni_devices[] __initdata = {
 	&s5p_device_mfc,
 	&s5p_device_mfc_l,
 	&s5p_device_mfc_r,
+	&s5p_device_mixer,
+	&s5p_device_sdo,
 	&s3c_device_i2c0,
 	&s5p_device_fimc0,
 	&s5p_device_fimc1,
-- 
1.7.1.569.g6f426

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

* RE: [PATCH 2/4] ARM: S5P: add support for tv device
  2011-07-25  7:55 ` [PATCH 2/4] ARM: S5P: add support for tv device Marek Szyprowski
@ 2011-08-11 10:40   ` Kukjin Kim
  0 siblings, 0 replies; 7+ messages in thread
From: Kukjin Kim @ 2011-08-11 10:40 UTC (permalink / raw)
  To: 'Marek Szyprowski', linux-samsung-soc
  Cc: 'Tomasz Stanislawski', 'Kyungmin Park'

Marek Szyprowski wrote:
> 
> From: Tomasz Stanislawski <t.stanislaws@samsung.com>
> 
> This patch adds all the resources for TV drivers and devices for Samsung
> Exynos4 and S5PV210 platforms.
> 
> Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> [m.szyprowski: moved common vpll code to plat-s5p/clocks-vpll.c,
> squashed Exynos4 and S5PV210 patches and rewrote commit message]
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
>  arch/arm/mach-exynos4/Kconfig                   |    1 +
>  arch/arm/mach-exynos4/clock.c                   |  134
> ++++++++++++++++++++++-
>  arch/arm/mach-exynos4/cpu.c                     |    2 +
>  arch/arm/mach-exynos4/include/mach/irqs.h       |    4 +-
>  arch/arm/mach-exynos4/include/mach/map.h        |    8 ++
>  arch/arm/mach-exynos4/include/mach/regs-pmu.h   |    6 +
>  arch/arm/mach-s5pv210/Kconfig                   |    1 +
>  arch/arm/mach-s5pv210/clock.c                   |   81 ++++++++++++--
>  arch/arm/mach-s5pv210/cpu.c                     |    4 +
>  arch/arm/mach-s5pv210/include/mach/irqs.h       |    2 +-
>  arch/arm/mach-s5pv210/include/mach/map.h        |   10 ++
>  arch/arm/mach-s5pv210/include/mach/regs-clock.h |    9 +-
>  arch/arm/plat-s5p/Kconfig                       |   10 ++
>  arch/arm/plat-s5p/Makefile                      |    2 +
>  arch/arm/plat-s5p/clock-vpll.c                  |   93 ++++++++++++++++
>  arch/arm/plat-s5p/dev-tv.c                      |  100 +++++++++++++++++
>  arch/arm/plat-s5p/include/plat/s5p-clock.h      |    4 +
>  arch/arm/plat-samsung/include/plat/devs.h       |    5 +
>  arch/arm/plat-samsung/include/plat/tv-core.h    |   44 ++++++++
>  19 files changed, 504 insertions(+), 16 deletions(-)
>  create mode 100644 arch/arm/plat-s5p/clock-vpll.c
>  create mode 100644 arch/arm/plat-s5p/dev-tv.c
>  create mode 100644 arch/arm/plat-samsung/include/plat/tv-core.h
> 
> diff --git a/arch/arm/mach-exynos4/Kconfig b/arch/arm/mach-exynos4/Kconfig
> index 9d62e13..7b468c2 100644
> --- a/arch/arm/mach-exynos4/Kconfig
> +++ b/arch/arm/mach-exynos4/Kconfig
> @@ -12,6 +12,7 @@ if ARCH_EXYNOS4
>  config CPU_EXYNOS4210
>  	bool
>  	select S3C_PL330_DMA
> +	select S5P_CLOCK_VPLL
>  	help
>  	  Enable EXYNOS4210 CPU support
> 
> diff --git a/arch/arm/mach-exynos4/clock.c b/arch/arm/mach-exynos4/clock.c
> index 953bdad..8639f4a 100644
> --- a/arch/arm/mach-exynos4/clock.c
> +++ b/arch/arm/mach-exynos4/clock.c
> @@ -83,6 +83,11 @@ static int exynos4_clk_ip_mfc_ctrl(struct clk *clk, int
enable)
>  	return s5p_gatectrl(S5P_CLKGATE_IP_MFC, clk, enable);
>  }
> 
> +static int exynos4_clksrc_mask_tv_ctrl(struct clk *clk, int enable)
> +{
> +	return s5p_gatectrl(S5P_CLKSRC_MASK_TV, clk, enable);
> +}
> +
>  static int exynos4_clk_ip_cam_ctrl(struct clk *clk, int enable)
>  {
>  	return s5p_gatectrl(S5P_CLKGATE_IP_CAM, clk, enable);
> @@ -123,6 +128,16 @@ static int exynos4_clk_ip_perir_ctrl(struct clk *clk,
int
> enable)
>  	return s5p_gatectrl(S5P_CLKGATE_IP_PERIR, clk, enable);
>  }
> 
> +static int exynos4_clk_hdmiphy_ctrl(struct clk *clk, int enable)
> +{
> +	return s5p_gatectrl(S5P_HDMI_PHY_CONTROL, clk, enable);
> +}
> +
> +static int exynos4_clk_dac_ctrl(struct clk *clk, int enable)
> +{
> +	return s5p_gatectrl(S5P_DAC_PHY_CONTROL, clk, enable);
> +}
> +
>  /* Core list of CMU_CPU side */
> 
>  static struct clksrc_clk clk_mout_apll = {
> @@ -449,6 +464,36 @@ static struct clk init_clocks_off[] = {
>  		.enable		= exynos4_clk_ip_fsys_ctrl,
>  		.ctrlbit	= (1 << 9),
>  	}, {
> +		.name		= "dac",
> +		.devname	= "s5p-sdo",
> +		.enable		= exynos4_clk_ip_tv_ctrl,
> +		.ctrlbit	= (1 << 2),
> +	}, {
> +		.name		= "mixer",
> +		.devname	= "s5p-mixer",
> +		.enable		= exynos4_clk_ip_tv_ctrl,
> +		.ctrlbit	= (1 << 1),
> +	}, {
> +		.name		= "vp",
> +		.devname	= "s5p-mixer",
> +		.enable		= exynos4_clk_ip_tv_ctrl,
> +		.ctrlbit	= (1 << 0),
> +	}, {
> +		.name		= "hdmi",
> +		.devname	= "exynos4-hdmi",
> +		.enable		= exynos4_clk_ip_tv_ctrl,
> +		.ctrlbit	= (1 << 3),
> +	}, {
> +		.name		= "hdmiphy",
> +		.devname	= "exynos4-hdmi",
> +		.enable		= exynos4_clk_hdmiphy_ctrl,
> +		.ctrlbit	= (1 << 0),
> +	}, {
> +		.name		= "dacphy",
> +		.devname	= "s5p-sdo",
> +		.enable		= exynos4_clk_dac_ctrl,
> +		.ctrlbit	= (1 << 0),
> +	}, {
>  		.name		= "sata",
>  		.parent		= &clk_aclk_133.clk,
>  		.enable		= exynos4_clk_ip_fsys_ctrl,
> @@ -788,6 +833,81 @@ static struct clksrc_sources clkset_mout_mfc = {
>  	.nr_sources	= ARRAY_SIZE(clkset_mout_mfc_list),
>  };
> 
> +static struct clk *clkset_sclk_dac_list[] = {
> +	[0] = &clk_sclk_vpll.clk,
> +	[1] = &clk_sclk_hdmiphy,
> +};
> +
> +static struct clksrc_sources clkset_sclk_dac = {
> +	.sources	= clkset_sclk_dac_list,
> +	.nr_sources	= ARRAY_SIZE(clkset_sclk_dac_list),
> +};
> +
> +static struct clksrc_clk clk_sclk_dac = {
> +	.clk		= {
> +		.name		= "sclk_dac",
> +		.enable		= exynos4_clksrc_mask_tv_ctrl,
> +		.ctrlbit	= (1 << 8),
> +	},
> +	.sources = &clkset_sclk_dac,
> +	.reg_src = { .reg = S5P_CLKSRC_TV, .shift = 8, .size = 1 },
> +};
> +
> +static struct clksrc_clk clk_sclk_pixel = {
> +	.clk		= {
> +		.name		= "sclk_pixel",
> +		.parent = &clk_sclk_vpll.clk,
> +	},
> +	.reg_div = { .reg = S5P_CLKDIV_TV, .shift = 0, .size = 4 },
> +};
> +
> +static struct clk *clkset_sclk_hdmi_list[] = {
> +	[0] = &clk_sclk_pixel.clk,
> +	[1] = &clk_sclk_hdmiphy,
> +};
> +
> +static struct clksrc_sources clkset_sclk_hdmi = {
> +	.sources	= clkset_sclk_hdmi_list,
> +	.nr_sources	= ARRAY_SIZE(clkset_sclk_hdmi_list),
> +};
> +
> +static struct clksrc_clk clk_sclk_hdmi = {
> +	.clk		= {
> +		.name		= "sclk_hdmi",
> +		.enable		= exynos4_clksrc_mask_tv_ctrl,
> +		.ctrlbit	= (1 << 0),
> +	},
> +	.sources = &clkset_sclk_hdmi,
> +	.reg_src = { .reg = S5P_CLKSRC_TV, .shift = 0, .size = 1 },
> +};
> +
> +static struct clk *clkset_sclk_mixer_list[] = {
> +	[0] = &clk_sclk_dac.clk,
> +	[1] = &clk_sclk_hdmi.clk,
> +};
> +
> +static struct clksrc_sources clkset_sclk_mixer = {
> +	.sources	= clkset_sclk_mixer_list,
> +	.nr_sources	= ARRAY_SIZE(clkset_sclk_mixer_list),
> +};
> +
> +static struct clksrc_clk clk_sclk_mixer = {
> +	.clk		= {
> +		.name		= "sclk_mixer",
> +		.enable		= exynos4_clksrc_mask_tv_ctrl,
> +		.ctrlbit	= (1 << 4),
> +	},
> +	.sources = &clkset_sclk_mixer,
> +	.reg_src = { .reg = S5P_CLKSRC_TV, .shift = 4, .size = 1 },
> +};
> +
> +static struct clksrc_clk *sclk_tv[] = {
> +	&clk_sclk_dac,
> +	&clk_sclk_pixel,
> +	&clk_sclk_hdmi,
> +	&clk_sclk_mixer,
> +};
> +
>  static struct clksrc_clk clk_dout_mmc0 = {
>  	.clk		= {
>  		.name		= "dout_mmc0",
> @@ -1129,6 +1249,11 @@ static struct clk_ops exynos4_fout_apll_ops = {
>  	.get_rate = exynos4_fout_apll_get_rate,
>  };
> 
> +static struct clk_ops exynos4_vpll_ops = {
> +	.get_rate = s5p_vpll_get_rate,
> +	.set_rate = s5p_vpll_set_rate,
> +};
> +
>  void __init_or_cpufreq exynos4_setup_clocks(void)
>  {
>  	struct clk *xtal_clk;
> @@ -1171,6 +1296,7 @@ void __init_or_cpufreq exynos4_setup_clocks(void)
>  	clk_fout_apll.ops = &exynos4_fout_apll_ops;
>  	clk_fout_mpll.rate = mpll;
>  	clk_fout_epll.rate = epll;
> +	clk_fout_vpll.ops = &exynos4_vpll_ops;
>  	clk_fout_vpll.rate = vpll;
> 
>  	printk(KERN_INFO "EXYNOS4: PLL settings, A=%ld, M=%ld, E=%ld
> V=%ld",
> @@ -1198,7 +1324,10 @@ void __init_or_cpufreq exynos4_setup_clocks(void)
>  }
> 
>  static struct clk *clks[] __initdata = {
> -	/* Nothing here yet */
> +	&clk_sclk_hdmi27m,
> +	&clk_sclk_hdmiphy,
> +	&clk_sclk_usbphy0,
> +	&clk_sclk_usbphy1,

Why did you enable clk_sclk_usbphyX in this patch?
If required, that should be separated.

>  };
> 
>  void __init exynos4_register_clocks(void)
> @@ -1210,6 +1339,9 @@ void __init exynos4_register_clocks(void)
>  	for (ptr = 0; ptr < ARRAY_SIZE(sysclks); ptr++)
>  		s3c_register_clksrc(sysclks[ptr], 1);
> 
> +	for (ptr = 0; ptr < ARRAY_SIZE(sclk_tv); ptr++)
> +		s3c_register_clksrc(sclk_tv[ptr], 1);
> +
>  	s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs));
>  	s3c_register_clocks(init_clocks, ARRAY_SIZE(init_clocks));
> 
> diff --git a/arch/arm/mach-exynos4/cpu.c b/arch/arm/mach-exynos4/cpu.c
> index 2d8a40c..a8571fb 100644
> --- a/arch/arm/mach-exynos4/cpu.c
> +++ b/arch/arm/mach-exynos4/cpu.c
> @@ -28,6 +28,7 @@
>  #include <plat/fb-core.h>
>  #include <plat/fimc-core.h>
>  #include <plat/iic-core.h>
> +#include <plat/tv-core.h>
> 
>  #include <mach/regs-irq.h>
> 
> @@ -156,6 +157,7 @@ void __init exynos4_map_io(void)
>  	s3c_i2c2_setname("s3c2440-i2c");
> 
>  	s5p_fb_setname(0, "exynos4-fb");
> +	s5p_hdmi_setname("exynos4-hdmi");
>  }
> 
>  void __init exynos4_init_clocks(int xtal)
> diff --git a/arch/arm/mach-exynos4/include/mach/irqs.h b/arch/arm/mach-
> exynos4/include/mach/irqs.h
> index c56645f..92e8d09 100644
> --- a/arch/arm/mach-exynos4/include/mach/irqs.h
> +++ b/arch/arm/mach-exynos4/include/mach/irqs.h
> @@ -94,9 +94,11 @@
>  #define IRQ_2D			IRQ_SPI(89)
>  #define IRQ_PCIE		IRQ_SPI(90)
> 
> +#define IRQ_MIXER		IRQ_SPI(91)
> +#define IRQ_HDMI		IRQ_SPI(92)
>  #define IRQ_IIC_HDMIPHY		IRQ_SPI(93)
> -
>  #define IRQ_MFC			IRQ_SPI(94)
> +#define IRQ_SDO			IRQ_SPI(95)
> 
>  #define IRQ_AUDIO_SS		IRQ_SPI(96)
>  #define IRQ_I2S0		IRQ_SPI(97)
> diff --git a/arch/arm/mach-exynos4/include/mach/map.h b/arch/arm/mach-
> exynos4/include/mach/map.h
> index 380feb9..fad70e2 100644
> --- a/arch/arm/mach-exynos4/include/mach/map.h
> +++ b/arch/arm/mach-exynos4/include/mach/map.h
> @@ -112,6 +112,10 @@
> 
>  #define EXYNOS4_PA_UART			0x13800000
> 
> +#define EXYNOS4_PA_SDO			0x12C20000
> +#define EXYNOS4_PA_VP			0x12C00000
> +#define EXYNOS4_PA_MIXER		0x12C10000
> +#define EXYNOS4_PA_HDMI			0x12D00000

How about following order and position?

 #define EXYNOS4_PA_HSPHY		0x125B0000
+
+#define EXYNOS4_PA_VP			0x12C00000
+#define EXYNOS4_PA_MIXER		0x12C10000
+#define EXYNOS4_PA_SDO			0x12C20000
+#define EXYNOS4_PA_HDMI			0x12D00000
+
 #define EXYNOS4_PA_MFC		0x13400000

>  #define EXYNOS4_PA_IIC_HDMIPHY		0x138E0000
> 
>  #define EXYNOS4_PA_IIC(x)		(0x13860000 + ((x) * 0x10000))
> @@ -163,6 +167,10 @@
>  #define S5P_PA_TIMER			EXYNOS4_PA_TIMER
>  #define S5P_PA_EHCI			EXYNOS4_PA_EHCI
> 
> +#define S5P_PA_SDO			EXYNOS4_PA_SDO
> +#define S5P_PA_VP			EXYNOS4_PA_VP
> +#define S5P_PA_MIXER			EXYNOS4_PA_MIXER
> +#define S5P_PA_HDMI			EXYNOS4_PA_HDMI
>  #define S5P_PA_IIC_HDMIPHY		EXYNOS4_PA_IIC_HDMIPHY
> 
>  #define SAMSUNG_PA_KEYPAD		EXYNOS4_PA_KEYPAD
> diff --git a/arch/arm/mach-exynos4/include/mach/regs-pmu.h
b/arch/arm/mach-
> exynos4/include/mach/regs-pmu.h
> index fa49bbb..faf9b98 100644
> --- a/arch/arm/mach-exynos4/include/mach/regs-pmu.h
> +++ b/arch/arm/mach-exynos4/include/mach/regs-pmu.h
> @@ -33,9 +33,15 @@
>  #define S5P_EINT_WAKEUP_MASK
> 	S5P_PMUREG(0x0604)
>  #define S5P_WAKEUP_MASK
> 	S5P_PMUREG(0x0608)
> 
> +#define S5P_HDMI_PHY_CONTROL
> 	S5P_PMUREG(0x0700)
> +#define S5P_HDMI_PHY_ENABLE			(1 << 0)
> +
>  #define S5P_USBHOST_PHY_CONTROL
> 	S5P_PMUREG(0x0708)
>  #define S5P_USBHOST_PHY_ENABLE			(1 << 0)
> 
> +#define S5P_DAC_PHY_CONTROL
> 	S5P_PMUREG(0x070C)
> +#define S5P_DAC_PHY_ENABLE			(1 << 0)
> +
>  #define S5P_MIPI_DPHY_CONTROL(n)		S5P_PMUREG(0x0710 + (n) *
> 4)
>  #define S5P_MIPI_DPHY_ENABLE			(1 << 0)
>  #define S5P_MIPI_DPHY_SRESETN			(1 << 1)
> diff --git a/arch/arm/mach-s5pv210/Kconfig b/arch/arm/mach-s5pv210/Kconfig
> index 69dd87c..65c878c 100644
> --- a/arch/arm/mach-s5pv210/Kconfig
> +++ b/arch/arm/mach-s5pv210/Kconfig
> @@ -14,6 +14,7 @@ config CPU_S5PV210
>  	select S3C_PL330_DMA
>  	select S5P_EXT_INT
>  	select S5P_HRT
> +	select S5P_CLOCK_VPLL
>  	select S5PV210_PM if PM
>  	help
>  	  Enable S5PV210 CPU support
> diff --git a/arch/arm/mach-s5pv210/clock.c b/arch/arm/mach-s5pv210/clock.c
> index 90a1966..4fa43ef 100644
> --- a/arch/arm/mach-s5pv210/clock.c
> +++ b/arch/arm/mach-s5pv210/clock.c
> @@ -174,6 +174,16 @@ static int s5pv210_clk_mask1_ctrl(struct clk *clk,
int
> enable)
>  	return s5p_gatectrl(S5P_CLK_SRC_MASK1, clk, enable);
>  }
> 
> +static int exynos4_clk_hdmiphy_ctrl(struct clk *clk, int enable)
> +{
> +	return s5p_gatectrl(S5P_HDMI_PHY_CONTROL, clk, enable);
> +}
> +
> +static int exynos4_clk_dac_ctrl(struct clk *clk, int enable)
> +{
> +	return s5p_gatectrl(S5P_DAC_PHY_CONTROL, clk, enable);
> +}
> +
>  static struct clk clk_sclk_hdmi27m = {
>  	.name		= "sclk_hdmi27m",
>  	.rate		= 27000000,
> @@ -330,6 +340,40 @@ static struct clk init_clocks_off[] = {
>  		.enable		= s5pv210_clk_ip0_ctrl,
>  		.ctrlbit	= (1 << 16),
>  	}, {
> +		.name		= "dac",
> +		.devname	= "s5p-sdo",
> +		.parent		= &clk_hclk_dsys.clk,
> +		.enable		= s5pv210_clk_ip1_ctrl,
> +		.ctrlbit	= (1 << 10),
> +	}, {
> +		.name		= "mixer",
> +		.devname	= "s5p-mixer",
> +		.parent		= &clk_hclk_dsys.clk,
> +		.enable		= s5pv210_clk_ip1_ctrl,
> +		.ctrlbit	= (1 << 9),
> +	}, {
> +		.name		= "vp",
> +		.devname	= "s5p-mixer",
> +		.parent		= &clk_hclk_dsys.clk,
> +		.enable		= s5pv210_clk_ip1_ctrl,
> +		.ctrlbit	= (1 << 8),
> +	}, {
> +		.name		= "hdmi",
> +		.devname	= "s5pv210-hdmi",
> +		.parent		= &clk_hclk_dsys.clk,
> +		.enable		= s5pv210_clk_ip1_ctrl,
> +		.ctrlbit	= (1 << 11),
> +	}, {
> +		.name		= "hdmiphy",
> +		.devname	= "s5pv210-hdmi",
> +		.enable		= exynos4_clk_hdmiphy_ctrl,
> +		.ctrlbit	= (1 << 0),
> +	}, {
> +		.name		= "dacphy",
> +		.devname	= "s5p-sdo",
> +		.enable		= exynos4_clk_dac_ctrl,
> +		.ctrlbit	= (1 << 0),
> +	}, {
>  		.name		= "otg",
>  		.parent		= &clk_hclk_psys.clk,
>  		.enable		= s5pv210_clk_ip1_ctrl,
> @@ -600,6 +644,23 @@ static struct clksrc_sources clkset_sclk_mixer = {
>  	.nr_sources	= ARRAY_SIZE(clkset_sclk_mixer_list),
>  };
> 
> +static struct clksrc_clk clk_sclk_mixer = {
> +	.clk		= {
> +		.name		= "sclk_mixer",
> +		.enable		= s5pv210_clk_mask0_ctrl,
> +		.ctrlbit	= (1 << 1),
> +	},
> +	.sources = &clkset_sclk_mixer,
> +	.reg_src = { .reg = S5P_CLK_SRC1, .shift = 4, .size = 1 },
> +};
> +
> +static struct clksrc_clk *sclk_tv[] = {
> +	&clk_sclk_dac,
> +	&clk_sclk_pixel,
> +	&clk_sclk_hdmi,
> +	&clk_sclk_mixer,
> +};
> +
>  static struct clk *clkset_sclk_audio0_list[] = {
>  	[0] = &clk_ext_xtal_mux,
>  	[1] = &clk_pcmcdclk0,
> @@ -783,14 +844,6 @@ static struct clksrc_clk clksrcs[] = {
>  		.reg_div = { .reg = S5P_CLK_DIV4, .shift = 28, .size = 4 },
>  	}, {
>  		.clk	= {
> -			.name		= "sclk_mixer",
> -			.enable		= s5pv210_clk_mask0_ctrl,
> -			.ctrlbit	= (1 << 1),
> -		},
> -		.sources = &clkset_sclk_mixer,
> -		.reg_src = { .reg = S5P_CLK_SRC1, .shift = 4, .size = 1 },
> -	}, {
> -		.clk	= {
>  			.name		= "sclk_fimc",
>  			.devname	= "s5pv210-fimc.0",
>  			.enable		= s5pv210_clk_mask1_ctrl,
> @@ -981,9 +1034,6 @@ static struct clksrc_clk *sysclks[] = {
>  	&clk_pclk_psys,
>  	&clk_vpllsrc,
>  	&clk_sclk_vpll,
> -	&clk_sclk_dac,
> -	&clk_sclk_pixel,
> -	&clk_sclk_hdmi,
>  	&clk_mout_dmc0,
>  	&clk_sclk_dmc0,
>  	&clk_sclk_audio0,
> @@ -1068,6 +1118,11 @@ static struct clk_ops s5pv210_epll_ops = {
>  	.get_rate = s5p_epll_get_rate,
>  };
> 
> +static struct clk_ops s5pv210_vpll_ops = {
> +	.get_rate = s5p_vpll_get_rate,
> +	.set_rate = s5p_vpll_set_rate,
> +};
> +
>  void __init_or_cpufreq s5pv210_setup_clocks(void)
>  {
>  	struct clk *xtal_clk;
> @@ -1116,6 +1171,7 @@ void __init_or_cpufreq s5pv210_setup_clocks(void)
>  	clk_fout_apll.ops = &clk_fout_apll_ops;
>  	clk_fout_mpll.rate = mpll;
>  	clk_fout_epll.rate = epll;
> +	clk_fout_vpll.ops = &s5pv210_vpll_ops;
>  	clk_fout_vpll.rate = vpll;
> 
>  	printk(KERN_INFO "S5PV210: PLL settings, A=%ld, M=%ld, E=%ld
> V=%ld",
> @@ -1161,6 +1217,9 @@ void __init s5pv210_register_clocks(void)
>  	for (ptr = 0; ptr < ARRAY_SIZE(sysclks); ptr++)
>  		s3c_register_clksrc(sysclks[ptr], 1);
> 
> +	for (ptr = 0; ptr < ARRAY_SIZE(sclk_tv); ptr++)
> +		s3c_register_clksrc(sclk_tv[ptr], 1);
> +
>  	s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs));
>  	s3c_register_clocks(init_clocks, ARRAY_SIZE(init_clocks));
> 
> diff --git a/arch/arm/mach-s5pv210/cpu.c b/arch/arm/mach-s5pv210/cpu.c
> index 79907ec..6b8cdcc 100644
> --- a/arch/arm/mach-s5pv210/cpu.c
> +++ b/arch/arm/mach-s5pv210/cpu.c
> @@ -41,6 +41,7 @@
>  #include <plat/keypad-core.h>
>  #include <plat/sdhci.h>
>  #include <plat/reset.h>
> +#include <plat/tv-core.h>
> 
>  /* Initial IO mappings */
> 
> @@ -143,6 +144,9 @@ void __init s5pv210_map_io(void)
> 
>  	/* Use s5pv210-keypad instead of samsung-keypad */
>  	samsung_keypad_setname("s5pv210-keypad");
> +
> +	/* setup TV devices */
> +	s5p_hdmi_setname("s5pv210-hdmi");
>  }
> 
>  void __init s5pv210_init_clocks(int xtal)
> diff --git a/arch/arm/mach-s5pv210/include/mach/irqs.h b/arch/arm/mach-
> s5pv210/include/mach/irqs.h
> index c1da0a7..5e0de3a 100644
> --- a/arch/arm/mach-s5pv210/include/mach/irqs.h
> +++ b/arch/arm/mach-s5pv210/include/mach/irqs.h
> @@ -86,7 +86,7 @@
>  #define IRQ_HDMI		S5P_IRQ_VIC2(12)
>  #define IRQ_IIC1		S5P_IRQ_VIC2(13)
>  #define IRQ_MFC			S5P_IRQ_VIC2(14)
> -#define IRQ_TVENC		S5P_IRQ_VIC2(15)
> +#define IRQ_SDO			S5P_IRQ_VIC2(15)
>  #define IRQ_I2S0		S5P_IRQ_VIC2(16)
>  #define IRQ_I2S1		S5P_IRQ_VIC2(17)
>  #define IRQ_I2S2		S5P_IRQ_VIC2(18)
> diff --git a/arch/arm/mach-s5pv210/include/mach/map.h b/arch/arm/mach-
> s5pv210/include/mach/map.h
> index a420654..7ff609f 100644
> --- a/arch/arm/mach-s5pv210/include/mach/map.h
> +++ b/arch/arm/mach-s5pv210/include/mach/map.h
> @@ -90,6 +90,10 @@
>  #define S5PV210_PA_FIMC1		0xFB300000
>  #define S5PV210_PA_FIMC2		0xFB400000
> 
> +#define S5PV210_PA_SDO			0xF9000000
> +#define S5PV210_PA_VP			0xF9100000
> +#define S5PV210_PA_MIXER		0xF9200000
> +#define S5PV210_PA_HDMI			0xFA100000
>  #define S5PV210_PA_IIC_HDMIPHY		0xFA900000
> 
>  /* Compatibiltiy Defines */
> @@ -113,6 +117,12 @@
>  #define S5P_PA_MIPI_CSIS0		S5PV210_PA_MIPI_CSIS
>  #define S5P_PA_MFC			S5PV210_PA_MFC
>  #define S5P_PA_IIC_HDMIPHY		S5PV210_PA_IIC_HDMIPHY
> +
> +#define S5P_PA_SDO			S5PV210_PA_SDO
> +#define S5P_PA_VP			S5PV210_PA_VP
> +#define S5P_PA_MIXER			S5PV210_PA_MIXER
> +#define S5P_PA_HDMI			S5PV210_PA_HDMI
> +
>  #define S5P_PA_ONENAND			S5PC110_PA_ONENAND
>  #define S5P_PA_ONENAND_DMA
> 	S5PC110_PA_ONENAND_DMA
>  #define S5P_PA_SDRAM			S5PV210_PA_SDRAM
> diff --git a/arch/arm/mach-s5pv210/include/mach/regs-clock.h
b/arch/arm/mach-
> s5pv210/include/mach/regs-clock.h
> index 78925c5..116a76b 100644
> --- a/arch/arm/mach-s5pv210/include/mach/regs-clock.h
> +++ b/arch/arm/mach-s5pv210/include/mach/regs-clock.h
> @@ -26,7 +26,9 @@
>  #define S5P_MPLL_CON		S5P_CLKREG(0x108)
>  #define S5P_EPLL_CON		S5P_CLKREG(0x110)
>  #define S5P_EPLL_CON1		S5P_CLKREG(0x114)
> -#define S5P_VPLL_CON		S5P_CLKREG(0x120)
> +#define S5P_VPLL_CON0		S5P_CLKREG(0x120)
> +#define S5P_VPLL_CON		S5P_VPLL_CON0
> +#define S5P_VPLL_CON1		S5P_CLKREG(0x120)

Is this right VPLLCON0 and VPLL_CON1 are same?

> 
>  #define S5P_CLK_SRC0		S5P_CLKREG(0x200)
>  #define S5P_CLK_SRC1		S5P_CLKREG(0x204)
> @@ -118,6 +120,8 @@
>  #define S5P_CLKDIV6_ONEDRAM_SHIFT       (28)
>  #define S5P_CLKDIV6_ONEDRAM_MASK        (0xF <<
> S5P_CLKDIV6_ONEDRAM_SHIFT)
> 
> +#define S5P_VPLLCON0_LOCKED_SHIFT	(29)
> +
>  #define S5P_SWRESET		S5P_CLKREG(0x2000)
> 
>  #define S5P_ARM_MCS_CON		S5P_CLKREG(0x6100)
> @@ -144,8 +148,9 @@
> 
>  #define S5P_OTHERS		S5P_CLKREG(0xE000)
>  #define S5P_OM_STAT		S5P_CLKREG(0xE100)
> +#define S5P_HDMI_PHY_CONTROL	S5P_CLKREG(0xE804)
>  #define S5P_USB_PHY_CONTROL	S5P_CLKREG(0xE80C)
> -#define S5P_DAC_CONTROL		S5P_CLKREG(0xE810)
> +#define S5P_DAC_PHY_CONTROL	S5P_CLKREG(0xE810)
>  #define S5P_MIPI_DPHY_CONTROL(x) S5P_CLKREG(0xE814)
>  #define S5P_MIPI_DPHY_ENABLE	(1 << 0)
>  #define S5P_MIPI_DPHY_SRESETN	(1 << 1)
> diff --git a/arch/arm/plat-s5p/Kconfig b/arch/arm/plat-s5p/Kconfig
> index 143e036..70d6ae7 100644
> --- a/arch/arm/plat-s5p/Kconfig
> +++ b/arch/arm/plat-s5p/Kconfig
> @@ -26,6 +26,11 @@ config PLAT_S5P
>  	help
>  	  Base platform code for Samsung's S5P series SoC.
> 
> +config S5P_CLOCK_VPLL
> +	bool
> +	help
> +	  Common code for the VPLL clock support code.
> +
>  config S5P_EXT_INT
>  	bool
>  	help
> @@ -101,6 +106,11 @@ config S5P_DEV_CSIS1
>  	help
>  	  Compile in platform device definitions for MIPI-CSIS channel 1
> 
> +config S5P_DEV_TV
> +	bool
> +	help
> +	  Compile in platform device definition for TV interface
> +
>  config S5P_DEV_USB_EHCI
>  	bool
>  	help
> diff --git a/arch/arm/plat-s5p/Makefile b/arch/arm/plat-s5p/Makefile
> index 1dd10dc..c386d60 100644
> --- a/arch/arm/plat-s5p/Makefile
> +++ b/arch/arm/plat-s5p/Makefile
> @@ -17,6 +17,7 @@ obj-y				+= dev-uart.o
>  obj-y				+= cpu.o
>  obj-y				+= clock.o
>  obj-y				+= irq.o
> +obj-$(CONFIG_S5P_CLOCK_VPLL)	+= clock-vpll.o
>  obj-$(CONFIG_S5P_EXT_INT)	+= irq-eint.o
>  obj-$(CONFIG_S5P_GPIO_INT)	+= irq-gpioint.o
>  obj-$(CONFIG_S5P_SYSTEM_MMU)	+= sysmmu.o
> @@ -35,5 +36,6 @@ obj-$(CONFIG_S5P_DEV_I2C_HDMIPHY) += dev-i2c-
> hdmiphy.o
>  obj-$(CONFIG_S5P_DEV_ONENAND)	+= dev-onenand.o
>  obj-$(CONFIG_S5P_DEV_CSIS0)	+= dev-csis0.o
>  obj-$(CONFIG_S5P_DEV_CSIS1)	+= dev-csis1.o
> +obj-$(CONFIG_S5P_DEV_TV)	+= dev-tv.o
>  obj-$(CONFIG_S5P_DEV_USB_EHCI)	+= dev-ehci.o
>  obj-$(CONFIG_S5P_SETUP_MIPIPHY)	+= setup-mipiphy.o
> diff --git a/arch/arm/plat-s5p/clock-vpll.c
b/arch/arm/plat-s5p/clock-vpll.c
> new file mode 100644
> index 0000000..b570f56
> --- /dev/null
> +++ b/arch/arm/plat-s5p/clock-vpll.c
> @@ -0,0 +1,93 @@
> +/*
> + * Copyright 2011 Samsung Electronics Co., Ltd.
> + *		http://www.samsung.com/
> + *
> + * S5P - Common VPLL clock support
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> +*/
> +
> +#include <linux/kernel.h>
> +#include <linux/err.h>
> +#include <linux/clk.h>
> +#include <linux/io.h>
> +
> +#include <mach/regs-clock.h>
> +
> +#include <plat/clock.h>
> +#include <plat/pll.h>
> +#include <plat/s5p-clock.h>
> +
> +struct vpll_div_data {
> +	u32 rate;
> +	u32 pdiv;
> +	u32 mdiv;
> +	u32 sdiv;
> +	u32 k;
> +	u32 mfr;
> +	u32 mrr;
> +	u32 vsel;
> +};
> +
> +static struct vpll_div_data vpll_div[] = {
> +	{  54000000, 3, 53, 3, 1024, 0, 17, 0 },
> +	{ 108000000, 3, 53, 2, 1024, 0, 17, 0 },
> +};
> +
> +unsigned long s5p_vpll_get_rate(struct clk *clk)
> +{
> +	return clk->rate;
> +}
> +
> +int s5p_vpll_set_rate(struct clk *clk, unsigned long rate)
> +{
> +	unsigned int vpll_con0, vpll_con1;
> +	unsigned int i;
> +
> +	/* Return if nothing changed */
> +	if (clk->rate == rate)
> +		return 0;
> +
> +	vpll_con0 = __raw_readl(S5P_VPLL_CON0);
> +	vpll_con0 &= ~(0x1 << 27 |					\
> +			PLL90XX_MDIV_MASK << PLL90XX_MDIV_SHIFT |	\
> +			PLL90XX_PDIV_MASK << PLL90XX_PDIV_SHIFT |	\
> +			PLL90XX_SDIV_MASK << PLL90XX_SDIV_SHIFT);
> +
> +	vpll_con1 = __raw_readl(S5P_VPLL_CON1);
> +	vpll_con1 &= ~(0x1f << 24 |	\
> +			0x3f << 16 |	\
> +			0xfff << 0);

It's strange, why the code format of vpll_con0 and vpll_con1 is different?

> +
> +	for (i = 0; i < ARRAY_SIZE(vpll_div); i++) {
> +		if (vpll_div[i].rate == rate) {
> +			vpll_con0 |= vpll_div[i].vsel << 27;
> +			vpll_con0 |= vpll_div[i].pdiv << PLL90XX_PDIV_SHIFT;
> +			vpll_con0 |= vpll_div[i].mdiv << PLL90XX_MDIV_SHIFT;
> +			vpll_con0 |= vpll_div[i].sdiv << PLL90XX_SDIV_SHIFT;
> +
> +			vpll_con1 |= vpll_div[i].mrr << 24;
> +			vpll_con1 |= vpll_div[i].mfr << 16;
> +			vpll_con1 |= vpll_div[i].k << 0;

Same as above.

> +			break;
> +		}
> +	}
> +
> +	if (i == ARRAY_SIZE(vpll_div)) {
> +		printk(KERN_ERR "%s: Invalid Clock VPLL Frequency\n",
> +				__func__);
> +		return -EINVAL;
> +	}
> +
> +	__raw_writel(vpll_con0, S5P_VPLL_CON0);
> +	__raw_writel(vpll_con1, S5P_VPLL_CON1);

According to above, in case of S5PV210/S5PC110, VPLL_CON0 and VPLL_CON1 are
same...So this is wrong. The VPLL_CON0 will be overwritten with VPLL_CON1
after writing vpll_con1. In addition, following is not vaild at
VPLL_CON(0xE010_0120) on S5PV210/S5PC110

	vpll_con1 &= ~(0x1f << 24 |	\
			0x3f << 16 |	\
			0xfff << 0);

> +
> +	/* Wait for VPLL lock */
> +	while (!(__raw_readl(S5P_VPLL_CON0) & (1 <<
> S5P_VPLLCON0_LOCKED_SHIFT)))
> +		continue;
> +
> +	clk->rate = rate;
> +	return 0;
> +}
> diff --git a/arch/arm/plat-s5p/dev-tv.c b/arch/arm/plat-s5p/dev-tv.c
> new file mode 100644
> index 0000000..0e44342
> --- /dev/null
> +++ b/arch/arm/plat-s5p/dev-tv.c
> @@ -0,0 +1,100 @@
> +/* linux/arch/arm/plat-s5p/dev-tv.c
> + *
> + * Copyright (C) 2011 Samsung Electronics Co.Ltd
> + * Author: Tomasz Stanislawski <t.stanislaws@samsung.com>
> + *
> + * S5P series device definition for TV device
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> +*/
> +
> +#include <linux/dma-mapping.h>
> +
> +#include <mach/irqs.h>
> +#include <mach/map.h>
> +
> +#include <plat/devs.h>
> +
> +/* HDMI interface */
> +static struct resource s5p_hdmi_resources[] = {
> +	[0] = {
> +		.start	= S5P_PA_HDMI,
> +		.end	= S5P_PA_HDMI + SZ_1M - 1,
> +		.flags	= IORESOURCE_MEM,
> +	},
> +	[1] = {
> +		.start	= IRQ_HDMI,
> +		.end	= IRQ_HDMI,
> +		.flags	= IORESOURCE_IRQ,
> +	},
> +};
> +
> +struct platform_device s5p_device_hdmi = {
> +	.name		= "s5p-hdmi",
> +	.id		= -1,
> +	.num_resources	= ARRAY_SIZE(s5p_hdmi_resources),
> +	.resource	= s5p_hdmi_resources,
> +};
> +EXPORT_SYMBOL(s5p_device_hdmi);
> +
> +/* MIXER */
> +static struct resource s5p_mixer_resources[] = {
> +	[0] = {
> +		.start	= S5P_PA_MIXER,
> +		.end	= S5P_PA_MIXER + SZ_64K - 1,
> +		.flags	= IORESOURCE_MEM,
> +		.name	= "mxr"
> +	},
> +	[1] = {
> +		.start	= S5P_PA_VP,
> +		.end	= S5P_PA_VP + SZ_64K - 1,
> +		.flags	= IORESOURCE_MEM,
> +		.name	= "vp"
> +	},
> +	[2] = {
> +		.start	= IRQ_MIXER,
> +		.end	= IRQ_MIXER,
> +		.flags	= IORESOURCE_IRQ,
> +		.name	= "irq"
> +	}
> +};
> +

+statuc u64 s5p_tv_dmamask = DMA_BIT_MASK(32);

> +struct platform_device s5p_device_mixer = {
> +	.name		= "s5p-mixer",
> +	.id		= -1,
> +	.num_resources	= ARRAY_SIZE(s5p_mixer_resources),
> +	.resource	= s5p_mixer_resources,
> +	.dev		= {
> +		.coherent_dma_mask = DMA_BIT_MASK(32),
> +		.dma_mask = &s5p_device_mixer.dev.coherent_dma_mask,

+		.dma_mask = &s5p_tv_dmamask,

> +	}
> +};
> +EXPORT_SYMBOL(s5p_device_mixer);
> +
> +/* HDMI interface */
> +static struct resource s5p_sdo_resources[] = {
> +	[0] = {
> +		.start	= S5P_PA_SDO,
> +		.end	= S5P_PA_SDO + SZ_64K - 1,
> +		.flags	= IORESOURCE_MEM,
> +	},
> +	[1] = {
> +		.start	= IRQ_SDO,
> +		.end	= IRQ_SDO,
> +		.flags	= IORESOURCE_IRQ,
> +	}
> +};
> +
> +struct platform_device s5p_device_sdo = {
> +	.name		= "s5p-sdo",
> +	.id		= -1,
> +	.num_resources	= ARRAY_SIZE(s5p_sdo_resources),
> +	.resource	= s5p_sdo_resources,
> +	.dev		= {
> +		.coherent_dma_mask = DMA_BIT_MASK(32),
> +		.dma_mask = &s5p_device_sdo.dev.coherent_dma_mask,

+		.dma_mask = &s5p_tv_dmamask,

> +	}
> +};
> +EXPORT_SYMBOL(s5p_device_sdo);
> diff --git a/arch/arm/plat-s5p/include/plat/s5p-clock.h b/arch/arm/plat-
> s5p/include/plat/s5p-clock.h
> index 769b5bd..7cb2ffc 100644
> --- a/arch/arm/plat-s5p/include/plat/s5p-clock.h
> +++ b/arch/arm/plat-s5p/include/plat/s5p-clock.h
> @@ -47,6 +47,10 @@ extern int s5p_gatectrl(void __iomem *reg, struct clk
*clk, int
> enable);
>  extern int s5p_epll_enable(struct clk *clk, int enable);
>  extern unsigned long s5p_epll_get_rate(struct clk *clk);
> 
> +/* Common VPLL operations for S5P platform */
> +extern unsigned long s5p_vpll_get_rate(struct clk *clk);
> +extern int s5p_vpll_set_rate(struct clk *clk, unsigned long rate);
> +
>  /* SPDIF clk operations common for S5PC100/V210/C110 and Exynos4 */
>  extern int s5p_spdif_set_rate(struct clk *clk, unsigned long rate);
>  extern unsigned long s5p_spdif_get_rate(struct clk *clk);
> diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-
> samsung/include/plat/devs.h
> index b15805f..ee5014a 100644
> --- a/arch/arm/plat-samsung/include/plat/devs.h
> +++ b/arch/arm/plat-samsung/include/plat/devs.h
> @@ -143,6 +143,11 @@ extern struct platform_device s5p_device_fimc3;
>  extern struct platform_device s5p_device_mfc;
>  extern struct platform_device s5p_device_mfc_l;
>  extern struct platform_device s5p_device_mfc_r;
> +
> +extern struct platform_device s5p_device_hdmi;
> +extern struct platform_device s5p_device_mixer;
> +extern struct platform_device s5p_device_sdo;
> +
>  extern struct platform_device s5p_device_mipi_csis0;
>  extern struct platform_device s5p_device_mipi_csis1;
> 
> diff --git a/arch/arm/plat-samsung/include/plat/tv-core.h b/arch/arm/plat-
> samsung/include/plat/tv-core.h
> new file mode 100644
> index 0000000..3bc34f3
> --- /dev/null
> +++ b/arch/arm/plat-samsung/include/plat/tv-core.h
> @@ -0,0 +1,44 @@
> +/*
> + * arch/arm/plat-samsung/include/plat/tv.h
> + *
> + * Copyright 2011 Samsung Electronics Co., Ltd.
> + *	Tomasz Stanislawski <t.stanislaws@samsung.com>
> + *
> + * Samsung TV driver core functions
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#ifndef __SAMSUNG_PLAT_TV_H
> +#define __SAMSUNG_PLAT_TV_H __FILE__
> +
> +/*
> + * These functions are only for use with the core support code, such as
> + * the CPU-specific initialization code.
> + */
> +
> +/* Re-define device name to differentiate the subsystem in various SoCs.
*/
> +static inline void s5p_hdmi_setname(char *name)
> +{
> +#ifdef CONFIG_S5P_DEV_TV
> +	s5p_device_hdmi.name = name;
> +#endif
> +}
> +
> +static inline void s5p_mixer_setname(char *name)
> +{
> +#ifdef CONFIG_S5P_DEV_TV
> +	s5p_device_mixer.name = name;
> +#endif
> +}
> +
> +static inline void s5p_sdo_setname(char *name)
> +{
> +#ifdef CONFIG_S5P_DEV_TV
> +	s5p_device_sdo.name = name;
> +#endif
> +}
> +
> +#endif /* __SAMSUNG_PLAT_TV_H */

where are s5p_mixer_setname and s5p_sdo_setname used? just wondering...

Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

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

* RE: [PATCH 1/4] ARM: Samsung: add i2c hdmiphy controller definitions
  2011-07-25  7:55 ` [PATCH 1/4] ARM: Samsung: add i2c hdmiphy controller definitions Marek Szyprowski
@ 2011-08-11 10:54   ` Kukjin Kim
  0 siblings, 0 replies; 7+ messages in thread
From: Kukjin Kim @ 2011-08-11 10:54 UTC (permalink / raw)
  To: 'Marek Szyprowski', linux-samsung-soc
  Cc: 'Tomasz Stanislawski', 'Kyungmin Park'

Marek Szyprowski wrote:
> 
> From: Tomasz Stanislawski <t.stanislaws@samsung.com>
> 
> This patch adds hdmiphy dedicated i2c controller definitions.
> 
> Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> [m.szyprowski: renamed to i2c-hdmiphy and squashed Exynos4 and S5PV210
> patches]
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
>  arch/arm/mach-exynos4/clock.c                    |    6 ++
>  arch/arm/mach-exynos4/include/mach/iic-hdmiphy.h |   16 ++++++
>  arch/arm/mach-exynos4/include/mach/irqs.h        |    2 +
>  arch/arm/mach-exynos4/include/mach/map.h         |    4 ++
>  arch/arm/mach-s5pv210/clock.c                    |    6 ++
>  arch/arm/mach-s5pv210/include/mach/iic-hdmiphy.h |   16 ++++++
>  arch/arm/mach-s5pv210/include/mach/irqs.h        |    2 +-
>  arch/arm/mach-s5pv210/include/mach/map.h         |    3 +
>  arch/arm/plat-s5p/Kconfig                        |    5 ++
>  arch/arm/plat-s5p/Makefile                       |    1 +
>  arch/arm/plat-s5p/dev-i2c-hdmiphy.c              |   59
> ++++++++++++++++++++++
>  arch/arm/plat-samsung/include/plat/devs.h        |    1 +
>  arch/arm/plat-samsung/include/plat/iic.h         |    1 +
>  13 files changed, 121 insertions(+), 1 deletions(-)
>  create mode 100644 arch/arm/mach-exynos4/include/mach/iic-hdmiphy.h
>  create mode 100644 arch/arm/mach-s5pv210/include/mach/iic-hdmiphy.h
>  create mode 100644 arch/arm/plat-s5p/dev-i2c-hdmiphy.c
> 

(snip)

> +#ifndef PLAT_S5P_IIC_HDMIPHY_H_
> +#define PLAT_S5P_IIC_HDMIPHY_H_

Marek, how about to use 'I2C' instead of 'IIC'?
I think, we can use it now even thouhg IIC/iic is still used...

And I don't think we should change the old regarding files..  if required, I
will do it.

> +
> +#define S5P_IIC_HDMIPHY_BUS_NUM		(8)

Same as above.

(snip)

Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.

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

end of thread, other threads:[~2011-08-11 10:54 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-07-25  7:55 [PATCHv3 0/4] Updated s5p-tv platform definitions Marek Szyprowski
2011-07-25  7:55 ` [PATCH 1/4] ARM: Samsung: add i2c hdmiphy controller definitions Marek Szyprowski
2011-08-11 10:54   ` Kukjin Kim
2011-07-25  7:55 ` [PATCH 2/4] ARM: S5P: add support for tv device Marek Szyprowski
2011-08-11 10:40   ` Kukjin Kim
2011-07-25  7:55 ` [PATCH 3/4] ARM: Exynos4: enable TV support on Universal_C210 board Marek Szyprowski
2011-07-25  7:55 ` [PATCH 4/4] ARM: S5PV210: enable TV support on GONI board Marek Szyprowski

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