Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(256)

Unified Diff: drivers/media/video/samsung/tv20/tv_clock_s5pv210.c

Issue 2036011: V4L/DVB : Add S5PV210 TV out driver support (Closed) Base URL: swsolcc@12.23.106.100:kernel-samsung.git
Patch Set: Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « drivers/media/video/samsung/tv20/sdout_s5pv210.c ('k') | drivers/media/video/samsung/tv20/tv_out_s5pv210.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: drivers/media/video/samsung/tv20/tv_clock_s5pv210.c
diff --git a/drivers/media/video/samsung/tv20/tv_clock_s5pv210.c b/drivers/media/video/samsung/tv20/tv_clock_s5pv210.c
new file mode 100644
index 0000000000000000000000000000000000000000..a10832e7c37d21482a73823ae267b3a3020f0dfb
--- /dev/null
+++ b/drivers/media/video/samsung/tv20/tv_clock_s5pv210.c
@@ -0,0 +1,133 @@
+/* linux/drivers/media/video/samsung/tv20/tv_clock_s5pv210.c
+*
+* Copyright (c) 2010 Samsung Electronics Co., Ltd.
+* http://www.samsung.com/
+*
+* S5PV210 - clock raw ftn file for Samsung TVOut driver
+*
+* 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/module.h>
+#include <linux/kernel.h>
+#include <linux/delay.h>
+#include <linux/platform_device.h>
+#include <linux/clk.h>
+
+#include <linux/uaccess.h>
+#include <linux/io.h>
+
+#include <mach/map.h>
+#include <mach/regs-clock.h>
+
+#include "tv_out_s5pv210.h"
+#include <mach/regs-hdmi_clock.h>
+
+#ifdef CONFIG_TVOUT_RAW_DBG
+#define S5P_TVOUT_CLK_DEBUG 1
+#endif
+
+#ifdef S5P_TVOUT_CLK_DEBUG
+#define TVCLKPRINTK(fmt, args...) \
+ printk(KERN_INFO "\t\t[TVCLK] %s: " fmt, __func__ , ## args)
+#else
+#define TVCLKPRINTK(fmt, args...)
+#endif
+
+
+void tv_clk_init_hpll(unsigned int lock_time,
+ bool vsel,
+ unsigned int mdiv,
+ unsigned int pdiv,
+ unsigned int sdiv)
+{
+ u32 temp;
+
+ TVCLKPRINTK("%d,%d,%d,%d\n\r", lock_time, mdiv, pdiv, sdiv);
+
+ temp = readl(S5P_VPLL_CON);
+
+ temp &= ~VPLL_ENABLE;
+
+ writel(temp, S5P_VPLL_CON);
+
+ temp = 0;
+
+ if (vsel)
+ temp |= VCO_FREQ_SEL;
+
+ temp |= VPLL_ENABLE;
+ temp |= MDIV(mdiv) | PDIV(pdiv) | SDIV(sdiv);
+
+ writel(VPLL_LOCKTIME(lock_time), S5P_VPLL_LOCK);
+ writel(temp, S5P_VPLL_CON);
+
+ while (!VPLL_LOCKED(readl(S5P_VPLL_CON)))
+ ;
+
+ TVCLKPRINTK("0x%08x,0x%08x\n\r",
+ readl(S5P_VPLL_LOCK), readl(S5P_VPLL_CON));
+}
+
+/* prevent hdmi hang-up when reboot */
+int tv_clk_change_internal(void)
+{
+ u32 reg = readl(S5P_CLK_SRC1);
+ /* set to SCLK_DAC */
+ reg &= HDMI_SEL_MASK;
+ /* set to SCLK_PIXEL */
+ reg &= VMIXER_SEL_MASK;
+
+ writel(reg, S5P_CLK_SRC1);
+
+ return 0;
+}
+
+enum s5p_tv_clk_err tv_clk_init_mout_hpll(enum s5p_tv_clk_mout_hpll mout_hpll)
+{
+ TVCLKPRINTK("(%d)\n\r", mout_hpll);
+
+ writel(readl(S5P_CLK_SRC1) | HDMI_SEL_HDMIPHY, S5P_CLK_SRC1);
+
+ TVCLKPRINTK("S5P_CLK_SRC1 :0x%08x\n", readl(S5P_CLK_SRC1));
+ return S5P_TV_CLK_ERR_NO_ERROR;
+}
+
+enum s5p_tv_clk_err tv_clk_init_video_mixer(
+ enum s5p_tv_clk_vmiexr_srcclk src_clk)
+{
+ switch (src_clk) {
+
+ /* for analog tv out 0:SCLK_DAC */
+ case TVOUT_CLK_VMIXER_SRCCLK_VCLK_54:
+ writel(readl(S5P_CLK_SRC1) & VMIXER_SEL_MASK, S5P_CLK_SRC1);
+ break;
+
+ /* for digital hdmi_phy 1: SCLK_HDMI */
+ case TVOUT_CLK_VMIXER_SRCCLK_MOUT_HPLL:
+ writel(readl(S5P_CLK_SRC1) | VMIXER_SEL_MOUT_VPLL,
+ S5P_CLK_SRC1);
+ break;
+
+ default:
+ TVCLKPRINTK("[ERR] invalid src_clk parameter = %d\n", src_clk);
+ return S5P_TV_CLK_ERR_INVALID_PARAM;
+ }
+
+ TVCLKPRINTK("S5P_CLK_SRC1 :0x%08x\n", readl(S5P_CLK_SRC1));
+
+ return S5P_TV_CLK_ERR_NO_ERROR;
+}
+
+void tv_clk_init_hdmi_ratio(unsigned int clk_div)
+{
+ TVCLKPRINTK("(%d)\n\r", clk_div);
+
+ writel((readl(S5P_CLK_DIV1) & HDMI_DIV_RATIO_MASK) |
+ HDMI_DIV_RATIO(clk_div), S5P_CLK_DIV1);
+
+ TVCLKPRINTK("(0x%08x)\n\r", readl(S5P_CLK_DIV3));
+}
+
« no previous file with comments | « drivers/media/video/samsung/tv20/sdout_s5pv210.c ('k') | drivers/media/video/samsung/tv20/tv_out_s5pv210.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698