aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2011-05-26 07:54:05 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2011-07-25 03:22:06 -0400
commit39020710e707a01d80ea6c9e55dad4de93bb4730 (patch)
tree3686e8c7a03de39feafd395126d3105e0ef365c3 /drivers/video/omap2
parent6d9f29dd62142a173b54c0a5645fbdfb296f1316 (diff)
OMAP: DSS2: Remove ctx loss count from dss.c
dss.c only saves 1 register (3 in OMAP3) so the extra overhead from need_ctx_restore & co. is probably bigger than the time spent saving and restoring those few registers every time. So remove the code from dss.c and restore context every time dss has been off. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video/omap2')
-rw-r--r--drivers/video/omap2/dss/dss.c62
1 files changed, 1 insertions, 61 deletions
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index a83c449d2ed1..2424064c9cef 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -62,8 +62,6 @@ static struct {
62 struct platform_device *pdev; 62 struct platform_device *pdev;
63 void __iomem *base; 63 void __iomem *base;
64 64
65 int ctx_loss_cnt;
66
67 struct clk *dpll4_m4_ck; 65 struct clk *dpll4_m4_ck;
68 struct clk *dss_clk; 66 struct clk *dss_clk;
69 67
@@ -631,61 +629,6 @@ void dss_select_hdmi_venc_clk_source(enum dss_hdmi_venc_clk_source_select hdmi)
631 REG_FLD_MOD(DSS_CONTROL, hdmi, 15, 15); /* VENC_HDMI_SWITCH */ 629 REG_FLD_MOD(DSS_CONTROL, hdmi, 15, 15); /* VENC_HDMI_SWITCH */
632} 630}
633 631
634/* CONTEXT */
635static void dss_init_ctx_loss_count(void)
636{
637 struct device *dev = &dss.pdev->dev;
638 struct omap_display_platform_data *pdata = dev->platform_data;
639 struct omap_dss_board_info *board_data = pdata->board_data;
640 int cnt = 0;
641
642 /*
643 * get_context_loss_count returns negative on error. We'll ignore the
644 * error and store the error to ctx_loss_cnt, which will cause
645 * dss_need_ctx_restore() call to return true.
646 */
647
648 if (board_data->get_context_loss_count)
649 cnt = board_data->get_context_loss_count(dev);
650
651 WARN_ON(cnt < 0);
652
653 dss.ctx_loss_cnt = cnt;
654
655 DSSDBG("initial ctx_loss_cnt %u\n", cnt);
656}
657
658static bool dss_need_ctx_restore(void)
659{
660 struct device *dev = &dss.pdev->dev;
661 struct omap_display_platform_data *pdata = dev->platform_data;
662 struct omap_dss_board_info *board_data = pdata->board_data;
663 int cnt;
664
665 /*
666 * If get_context_loss_count is not available, assume that we need
667 * context restore always.
668 */
669 if (!board_data->get_context_loss_count)
670 return true;
671
672 cnt = board_data->get_context_loss_count(dev);
673 if (cnt < 0) {
674 dev_err(dev, "getting context loss count failed, will force "
675 "context restore\n");
676 dss.ctx_loss_cnt = cnt;
677 return true;
678 }
679
680 if (cnt == dss.ctx_loss_cnt)
681 return false;
682
683 DSSDBG("ctx_loss_cnt %d -> %d\n", dss.ctx_loss_cnt, cnt);
684 dss.ctx_loss_cnt = cnt;
685
686 return true;
687}
688
689static int dss_get_clocks(void) 632static int dss_get_clocks(void)
690{ 633{
691 struct clk *clk; 634 struct clk *clk;
@@ -797,8 +740,6 @@ static int omap_dsshw_probe(struct platform_device *pdev)
797 if (r) 740 if (r)
798 goto err_clocks; 741 goto err_clocks;
799 742
800 dss_init_ctx_loss_count();
801
802 pm_runtime_enable(&pdev->dev); 743 pm_runtime_enable(&pdev->dev);
803 744
804 r = dss_runtime_get(); 745 r = dss_runtime_get();
@@ -875,8 +816,7 @@ static int dss_runtime_suspend(struct device *dev)
875static int dss_runtime_resume(struct device *dev) 816static int dss_runtime_resume(struct device *dev)
876{ 817{
877 clk_enable(dss.dss_clk); 818 clk_enable(dss.dss_clk);
878 if (dss_need_ctx_restore()) 819 dss_restore_context();
879 dss_restore_context();
880 return 0; 820 return 0;
881} 821}
882 822