aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/dss/dss.c
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2011-02-24 07:18:50 -0500
committerTomi Valkeinen <tomi.valkeinen@ti.com>2011-03-11 08:46:25 -0500
commit6ec549e50b192105ede7bb289a31da6f6e1a61e9 (patch)
treed3d2e11e82251dcedf27375cab8f477e30551978 /drivers/video/omap2/dss/dss.c
parentf8df01f1a47ea6e503f5ba8d782fc6fb53bb40e8 (diff)
OMAP: DSS2: Check for SDI HW before accessing SDI registers
Only OMAP 3430 hardware has SDI support. The availability of SDI HW can be found out by checking if the LCD channel supports SDI displays. This patch checks for SDI HW support before accessing SDI registers, which fixes a crash on OMAP4 when SDI SW support is compiled in. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video/omap2/dss/dss.c')
-rw-r--r--drivers/video/omap2/dss/dss.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index dc57100cc43d..50c18677684d 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -32,6 +32,7 @@
32#include <plat/display.h> 32#include <plat/display.h>
33#include <plat/clock.h> 33#include <plat/clock.h>
34#include "dss.h" 34#include "dss.h"
35#include "dss_features.h"
35 36
36#define DSS_SZ_REGS SZ_512 37#define DSS_SZ_REGS SZ_512
37 38
@@ -110,10 +111,11 @@ void dss_save_context(void)
110 SR(SYSCONFIG); 111 SR(SYSCONFIG);
111 SR(CONTROL); 112 SR(CONTROL);
112 113
113#ifdef CONFIG_OMAP2_DSS_SDI 114 if (dss_feat_get_supported_displays(OMAP_DSS_CHANNEL_LCD) &
114 SR(SDI_CONTROL); 115 OMAP_DISPLAY_TYPE_SDI) {
115 SR(PLL_CONTROL); 116 SR(SDI_CONTROL);
116#endif 117 SR(PLL_CONTROL);
118 }
117} 119}
118 120
119void dss_restore_context(void) 121void dss_restore_context(void)
@@ -124,10 +126,11 @@ void dss_restore_context(void)
124 RR(SYSCONFIG); 126 RR(SYSCONFIG);
125 RR(CONTROL); 127 RR(CONTROL);
126 128
127#ifdef CONFIG_OMAP2_DSS_SDI 129 if (dss_feat_get_supported_displays(OMAP_DSS_CHANNEL_LCD) &
128 RR(SDI_CONTROL); 130 OMAP_DISPLAY_TYPE_SDI) {
129 RR(PLL_CONTROL); 131 RR(SDI_CONTROL);
130#endif 132 RR(PLL_CONTROL);
133 }
131} 134}
132 135
133#undef SR 136#undef SR
@@ -259,9 +262,13 @@ void dss_dump_regs(struct seq_file *s)
259 DUMPREG(DSS_SYSSTATUS); 262 DUMPREG(DSS_SYSSTATUS);
260 DUMPREG(DSS_IRQSTATUS); 263 DUMPREG(DSS_IRQSTATUS);
261 DUMPREG(DSS_CONTROL); 264 DUMPREG(DSS_CONTROL);
262 DUMPREG(DSS_SDI_CONTROL); 265
263 DUMPREG(DSS_PLL_CONTROL); 266 if (dss_feat_get_supported_displays(OMAP_DSS_CHANNEL_LCD) &
264 DUMPREG(DSS_SDI_STATUS); 267 OMAP_DISPLAY_TYPE_SDI) {
268 DUMPREG(DSS_SDI_CONTROL);
269 DUMPREG(DSS_PLL_CONTROL);
270 DUMPREG(DSS_SDI_STATUS);
271 }
265 272
266 dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK); 273 dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
267#undef DUMPREG 274#undef DUMPREG