From: cym Date: Sun, 28 Apr 2013 08:39:26 +0000 (+0800) Subject: RK3188:ddr_freq_mode add DDR_FREQ_DUALVIEW for HDMI X-Git-Tag: firefly_0821_release~7189 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=1c5268cf1c0d6f34f49a48657151a9c6acf73c93;p=firefly-linux-kernel-4.4.55.git RK3188:ddr_freq_mode add DDR_FREQ_DUALVIEW for HDMI --- diff --git a/arch/arm/mach-rk30/board-rk3168-tb.c b/arch/arm/mach-rk30/board-rk3168-tb.c index dac7fbd3ca9b..6608973c67d5 100644 --- a/arch/arm/mach-rk30/board-rk3168-tb.c +++ b/arch/arm/mach-rk30/board-rk3168-tb.c @@ -2532,6 +2532,7 @@ static struct cpufreq_frequency_table dvfs_ddr_table_volt_level0[] = { {.frequency = 200 * 1000 + DDR_FREQ_SUSPEND, .index = 950 * 1000}, {.frequency = 300 * 1000 + DDR_FREQ_VIDEO, .index = 1000 * 1000}, {.frequency = 396 * 1000 + DDR_FREQ_NORMAL, .index = 1100 * 1000}, + {.frequency = 460 * 1000 + DDR_FREQ_DUALVIEW, .index = 1150 * 1000}, //{.frequency = 528 * 1000 + DDR_FREQ_NORMAL, .index = 1200 * 1000}, {.frequency = CPUFREQ_TABLE_END}, }; diff --git a/arch/arm/plat-rk/ddr_freq.c b/arch/arm/plat-rk/ddr_freq.c index 8e2af89442f8..f971a99183eb 100755 --- a/arch/arm/plat-rk/ddr_freq.c +++ b/arch/arm/plat-rk/ddr_freq.c @@ -39,6 +39,8 @@ enum SYS_STATUS { SYS_STATUS_CIF0, // 0x10 SYS_STATUS_CIF1, // 0x20 SYS_STATUS_REBOOT, // 0x40 + SYS_STATUS_LCDC0, // 0x80 + SYS_STATUS_LCDC1, // 0x100 }; struct ddr { @@ -49,6 +51,7 @@ struct ddr { struct clk *clk; unsigned long normal_rate; unsigned long video_rate; + unsigned long dualview_rate; unsigned long idle_rate; unsigned long suspend_rate; unsigned long reboot_rate; @@ -109,6 +112,11 @@ static noinline void ddrfreq_work(unsigned long sys_status) ddrfreq_mode(false, &ddr.reboot_rate, "shutdown/reboot"); } else if (ddr.suspend_rate && (s & (1 << SYS_STATUS_SUSPEND))) { ddrfreq_mode(true, &ddr.suspend_rate, "suspend"); + } else if (ddr.dualview_rate + && (s & (1 << SYS_STATUS_LCDC0)) + && (s & (1 << SYS_STATUS_LCDC1)) + ) { + ddrfreq_mode(false, &ddr.dualview_rate, "dual-view"); } else if (ddr.video_rate && (s & (1 << SYS_STATUS_VIDEO))) { ddrfreq_mode(false, &ddr.video_rate, "video"); } else if (ddr.idle_rate @@ -307,6 +315,8 @@ CLK_NOTIFIER(pd_gpu, GPU); CLK_NOTIFIER(pd_rga, RGA); CLK_NOTIFIER(pd_cif0, CIF0); CLK_NOTIFIER(pd_cif1, CIF1); +CLK_NOTIFIER(pd_lcdc0, LCDC0); +CLK_NOTIFIER(pd_lcdc1, LCDC1); static int ddrfreq_reboot_notifier_event(struct notifier_block *this, unsigned long event, void *ptr) { @@ -405,6 +415,7 @@ static int ddrfreq_init(void) } if (!new_version) { ddr.video_rate = 300 * MHZ; + ddr.dualview_rate = ddr.normal_rate; ddr.suspend_rate = 200 * MHZ; } for (i = 0; new_version && table && table[i].frequency != CPUFREQ_TABLE_END; i++) { @@ -421,6 +432,9 @@ static int ddrfreq_init(void) case DDR_FREQ_VIDEO: ddr.video_rate = rate; break; + case DDR_FREQ_DUALVIEW: + ddr.dualview_rate= rate; + break; case DDR_FREQ_IDLE: ddr.idle_rate = rate; break; @@ -437,6 +451,11 @@ static int ddrfreq_init(void) REGISTER_CLK_NOTIFIER(pd_cif1); } + if (ddr.dualview_rate) { + REGISTER_CLK_NOTIFIER(pd_lcdc0); + REGISTER_CLK_NOTIFIER(pd_lcdc1); + } + return 0; } @@ -482,9 +501,9 @@ static int ddrfreq_late_init(void) register_reboot_notifier(&ddrfreq_reboot_notifier); - pr_info("verion 2.2\n"); - dprintk(DEBUG_DDR, "normal %luMHz video %luMHz idle %luMHz suspend %luMHz reboot %luMHz\n", - ddr.normal_rate / MHZ, ddr.video_rate / MHZ, ddr.idle_rate / MHZ, ddr.suspend_rate / MHZ, ddr.reboot_rate / MHZ); + pr_info("verion 2.4 20130427\n"); + dprintk(DEBUG_DDR, "normal %luMHz video %luMHz dualview %luMHz idle %luMHz suspend %luMHz reboot %luMHz\n", + ddr.normal_rate / MHZ, ddr.video_rate / MHZ, ddr.dualview_rate / MHZ,ddr.idle_rate / MHZ, ddr.suspend_rate / MHZ, ddr.reboot_rate / MHZ); return 0; @@ -500,6 +519,10 @@ err: UNREGISTER_CLK_NOTIFIER(pd_cif0); UNREGISTER_CLK_NOTIFIER(pd_cif1); } + if (ddr.dualview_rate) { + UNREGISTER_CLK_NOTIFIER(pd_lcdc0); + UNREGISTER_CLK_NOTIFIER(pd_lcdc1); + } return ret; } diff --git a/arch/arm/plat-rk/include/plat/board.h b/arch/arm/plat-rk/include/plat/board.h index 6bd1ec3f5d57..4529b1ea789a 100755 --- a/arch/arm/plat-rk/include/plat/board.h +++ b/arch/arm/plat-rk/include/plat/board.h @@ -531,6 +531,7 @@ void __sramfunc board_pmu_resume(void); enum ddr_freq_mode { DDR_FREQ_NORMAL = 1, // default DDR_FREQ_VIDEO, // when video is playing + DDR_FREQ_DUALVIEW, // when dual view,lcdc0 and lcdc1 open at the same time DDR_FREQ_IDLE, // when screen is idle DDR_FREQ_SUSPEND, // when early suspend };