* [PATCH 0/2] OMAP: DSS2: Fix DSS core init fail path
@ 2010-05-06 11:59 Jani Nikula
2010-05-06 11:59 ` [PATCH 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup Jani Nikula
2010-05-07 8:07 ` [PATCH 0/2] OMAP: DSS2: Fix DSS core init fail path Tomi Valkeinen
0 siblings, 2 replies; 11+ messages in thread
From: Jani Nikula @ 2010-05-06 11:59 UTC (permalink / raw)
To: Tomi.Valkeinen, khilman; +Cc: linux-fbdev-devel, linux-omap, ext-jani.1.nikula
Hi -
These patches fix the broken DSS omap_dss_probe() fail path, reported by Kevin
Hilman [1].
Kevin, could you please check this with your setup too? It would be much
appreciated.
[1] http://www.mail-archive.com/linux-omap@vger.kernel.org/msg27112.html
BR,
Jani.
Jani Nikula (2):
OMAP: DSS2: omap_dss_probe() conditional compilation cleanup
OMAP: DSS2: Fix omap_dss_probe() error path
drivers/video/omap2/dss/core.c | 85 ++++++++++++++++++++++++---------------
drivers/video/omap2/dss/dss.h | 40 +++++++++++++++++++
2 files changed, 92 insertions(+), 33 deletions(-)
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup
2010-05-06 11:59 [PATCH 0/2] OMAP: DSS2: Fix DSS core init fail path Jani Nikula
@ 2010-05-06 11:59 ` Jani Nikula
2010-05-06 11:59 ` [PATCH 2/2] OMAP: DSS2: Fix omap_dss_probe() error path Jani Nikula
2010-05-06 18:52 ` [PATCH 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup Kevin Hilman
2010-05-07 8:07 ` [PATCH 0/2] OMAP: DSS2: Fix DSS core init fail path Tomi Valkeinen
1 sibling, 2 replies; 11+ messages in thread
From: Jani Nikula @ 2010-05-06 11:59 UTC (permalink / raw)
To: Tomi.Valkeinen, khilman; +Cc: linux-fbdev-devel, linux-omap, ext-jani.1.nikula
From: Jani Nikula <ext-jani.1.nikula@nokia.com>
Move a number of #ifdefs from code into dss.h and elsewhere, and
conditionally define no-op static inline functions, cleaning up the
code. This style is according to Documentation/SubmittingPatches.
Signed-off-by: Jani Nikula <ext-jani.1.nikula@nokia.com>
---
drivers/video/omap2/dss/core.c | 31 +++++++++++--------------------
drivers/video/omap2/dss/dss.h | 40 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 51 insertions(+), 20 deletions(-)
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 7ebe50b..92ee067 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -482,6 +482,14 @@ static void dss_uninitialize_debugfs(void)
if (dss_debugfs_dir)
debugfs_remove_recursive(dss_debugfs_dir);
}
+#else /* CONFIG_DEBUG_FS && CONFIG_OMAP2_DSS_DEBUG_SUPPORT */
+static inline int dss_initialize_debugfs(void)
+{
+ return 0;
+}
+static inline void dss_uninitialize_debugfs(void)
+{
+}
#endif /* CONFIG_DEBUG_FS && CONFIG_OMAP2_DSS_DEBUG_SUPPORT */
/* PLATFORM DEVICE */
@@ -518,13 +526,11 @@ static int omap_dss_probe(struct platform_device *pdev)
goto fail0;
}
-#ifdef CONFIG_OMAP2_DSS_RFBI
r = rfbi_init();
if (r) {
DSSERR("Failed to initialize rfbi\n");
goto fail0;
}
-#endif
r = dpi_init(pdev);
if (r) {
@@ -537,35 +543,30 @@ static int omap_dss_probe(struct platform_device *pdev)
DSSERR("Failed to initialize dispc\n");
goto fail0;
}
-#ifdef CONFIG_OMAP2_DSS_VENC
+
r = venc_init(pdev);
if (r) {
DSSERR("Failed to initialize venc\n");
goto fail0;
}
-#endif
+
if (cpu_is_omap34xx()) {
-#ifdef CONFIG_OMAP2_DSS_SDI
r = sdi_init(skip_init);
if (r) {
DSSERR("Failed to initialize SDI\n");
goto fail0;
}
-#endif
-#ifdef CONFIG_OMAP2_DSS_DSI
+
r = dsi_init(pdev);
if (r) {
DSSERR("Failed to initialize DSI\n");
goto fail0;
}
-#endif
}
-#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
r = dss_initialize_debugfs();
if (r)
goto fail0;
-#endif
for (i = 0; i < pdata->num_devices; ++i) {
struct omap_dss_device *dssdev = pdata->devices[i];
@@ -593,25 +594,15 @@ static int omap_dss_remove(struct platform_device *pdev)
int i;
int c;
-#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
dss_uninitialize_debugfs();
-#endif
-#ifdef CONFIG_OMAP2_DSS_VENC
venc_exit();
-#endif
dispc_exit();
dpi_exit();
-#ifdef CONFIG_OMAP2_DSS_RFBI
rfbi_exit();
-#endif
if (cpu_is_omap34xx()) {
-#ifdef CONFIG_OMAP2_DSS_DSI
dsi_exit();
-#endif
-#ifdef CONFIG_OMAP2_DSS_SDI
sdi_exit();
-#endif
}
dss_exit();
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 24326a5..65f95ee 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -242,11 +242,22 @@ int dss_calc_clock_div(bool is_tft, unsigned long req_pck,
struct dispc_clock_info *dispc_cinfo);
/* SDI */
+#ifdef CONFIG_OMAP2_DSS_SDI
int sdi_init(bool skip_init);
void sdi_exit(void);
int sdi_init_display(struct omap_dss_device *display);
+#else
+static inline int sdi_init(bool skip_init)
+{
+ return 0;
+}
+static inline void sdi_exit(void)
+{
+}
+#endif
/* DSI */
+#ifdef CONFIG_OMAP2_DSS_DSI
int dsi_init(struct platform_device *pdev);
void dsi_exit(void);
@@ -270,6 +281,15 @@ void dsi_pll_uninit(void);
void dsi_get_overlay_fifo_thresholds(enum omap_plane plane,
u32 fifo_size, enum omap_burst_size *burst_size,
u32 *fifo_low, u32 *fifo_high);
+#else
+static inline int dsi_init(struct platform_device *pdev)
+{
+ return 0;
+}
+static inline void dsi_exit(void)
+{
+}
+#endif
/* DPI */
int dpi_init(struct platform_device *pdev);
@@ -362,12 +382,23 @@ int dispc_get_clock_div(struct dispc_clock_info *cinfo);
/* VENC */
+#ifdef CONFIG_OMAP2_DSS_VENC
int venc_init(struct platform_device *pdev);
void venc_exit(void);
void venc_dump_regs(struct seq_file *s);
int venc_init_display(struct omap_dss_device *display);
+#else
+static inline int venc_init(struct platform_device *pdev)
+{
+ return 0;
+}
+static inline void venc_exit(void)
+{
+}
+#endif
/* RFBI */
+#ifdef CONFIG_OMAP2_DSS_RFBI
int rfbi_init(void);
void rfbi_exit(void);
void rfbi_dump_regs(struct seq_file *s);
@@ -379,6 +410,15 @@ void rfbi_transfer_area(u16 width, u16 height,
void rfbi_set_timings(int rfbi_module, struct rfbi_timings *t);
unsigned long rfbi_get_max_tx_rate(void);
int rfbi_init_display(struct omap_dss_device *display);
+#else
+static inline int rfbi_init(void)
+{
+ return 0;
+}
+static inline void rfbi_exit(void)
+{
+}
+#endif
#ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
--
1.6.5.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/2] OMAP: DSS2: Fix omap_dss_probe() error path
2010-05-06 11:59 ` [PATCH 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup Jani Nikula
@ 2010-05-06 11:59 ` Jani Nikula
2010-05-06 18:54 ` Kevin Hilman
2010-05-06 18:52 ` [PATCH 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup Kevin Hilman
1 sibling, 1 reply; 11+ messages in thread
From: Jani Nikula @ 2010-05-06 11:59 UTC (permalink / raw)
To: Tomi.Valkeinen, khilman; +Cc: linux-fbdev-devel, linux-omap, ext-jani.1.nikula
From: Jani Nikula <ext-jani.1.nikula@nokia.com>
Perform graceful cleanup on errors instead of just bailing out.
Signed-off-by: Jani Nikula <ext-jani.1.nikula@nokia.com>
---
drivers/video/omap2/dss/core.c | 54 ++++++++++++++++++++++++++++++---------
1 files changed, 41 insertions(+), 13 deletions(-)
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 92ee067..b3a498f 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -507,7 +507,7 @@ static int omap_dss_probe(struct platform_device *pdev)
r = dss_get_clocks();
if (r)
- goto fail0;
+ goto err_clocks;
dss_clk_enable_all_no_ctx();
@@ -523,57 +523,64 @@ static int omap_dss_probe(struct platform_device *pdev)
r = dss_init(skip_init);
if (r) {
DSSERR("Failed to initialize DSS\n");
- goto fail0;
+ goto err_dss;
}
r = rfbi_init();
if (r) {
DSSERR("Failed to initialize rfbi\n");
- goto fail0;
+ goto err_rfbi;
}
r = dpi_init(pdev);
if (r) {
DSSERR("Failed to initialize dpi\n");
- goto fail0;
+ goto err_dpi;
}
r = dispc_init();
if (r) {
DSSERR("Failed to initialize dispc\n");
- goto fail0;
+ goto err_dispc;
}
r = venc_init(pdev);
if (r) {
DSSERR("Failed to initialize venc\n");
- goto fail0;
+ goto err_venc;
}
if (cpu_is_omap34xx()) {
r = sdi_init(skip_init);
if (r) {
DSSERR("Failed to initialize SDI\n");
- goto fail0;
+ goto err_sdi;
}
r = dsi_init(pdev);
if (r) {
DSSERR("Failed to initialize DSI\n");
- goto fail0;
+ goto err_dsi;
}
}
r = dss_initialize_debugfs();
if (r)
- goto fail0;
+ goto err_debugfs;
for (i = 0; i < pdata->num_devices; ++i) {
struct omap_dss_device *dssdev = pdata->devices[i];
r = omap_dss_register_device(dssdev);
- if (r)
- DSSERR("device reg failed %d\n", i);
+ if (r) {
+ DSSERR("device %d %s register failed %d\n", i,
+ dssdev->name ?: "unnamed", r);
+
+ while (--i >= 0)
+ omap_dss_unregister_device(pdata->devices[i]);
+
+ goto err_register;
+ }
if (def_disp_name && strcmp(def_disp_name, dssdev->name) == 0)
pdata->default_device = dssdev;
@@ -583,8 +590,29 @@ static int omap_dss_probe(struct platform_device *pdev)
return 0;
- /* XXX fail correctly */
-fail0:
+err_register:
+ dss_uninitialize_debugfs();
+err_debugfs:
+ if (cpu_is_omap34xx())
+ dsi_exit();
+err_dsi:
+ if (cpu_is_omap34xx())
+ sdi_exit();
+err_sdi:
+ venc_exit();
+err_venc:
+ dispc_exit();
+err_dispc:
+ dpi_exit();
+err_dpi:
+ rfbi_exit();
+err_rfbi:
+ dss_exit();
+err_dss:
+ dss_clk_disable_all_no_ctx();
+ dss_put_clocks();
+err_clocks:
+
return r;
}
--
1.6.5.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup
2010-05-06 11:59 ` [PATCH 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup Jani Nikula
2010-05-06 11:59 ` [PATCH 2/2] OMAP: DSS2: Fix omap_dss_probe() error path Jani Nikula
@ 2010-05-06 18:52 ` Kevin Hilman
1 sibling, 0 replies; 11+ messages in thread
From: Kevin Hilman @ 2010-05-06 18:52 UTC (permalink / raw)
To: Jani Nikula; +Cc: Tomi.Valkeinen, linux-fbdev-devel, linux-omap
Jani Nikula <ext-jani.1.nikula@nokia.com> writes:
> From: Jani Nikula <ext-jani.1.nikula@nokia.com>
>
> Move a number of #ifdefs from code into dss.h and elsewhere, and
> conditionally define no-op static inline functions, cleaning up the
> code. This style is according to Documentation/SubmittingPatches.
>
> Signed-off-by: Jani Nikula <ext-jani.1.nikula@nokia.com>
Indeed, this helps readability greatly.
Acked-by: Kevin Hilman <khilman@deeprootsystems.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] OMAP: DSS2: Fix omap_dss_probe() error path
2010-05-06 11:59 ` [PATCH 2/2] OMAP: DSS2: Fix omap_dss_probe() error path Jani Nikula
@ 2010-05-06 18:54 ` Kevin Hilman
2010-05-07 12:12 ` Jani Nikula
0 siblings, 1 reply; 11+ messages in thread
From: Kevin Hilman @ 2010-05-06 18:54 UTC (permalink / raw)
To: Jani Nikula; +Cc: Tomi.Valkeinen, linux-fbdev-devel, linux-omap
Jani Nikula <ext-jani.1.nikula@nokia.com> writes:
> From: Jani Nikula <ext-jani.1.nikula@nokia.com>
>
> Perform graceful cleanup on errors instead of just bailing out.
>
> Signed-off-by: Jani Nikula <ext-jani.1.nikula@nokia.com>
Tested-by: Kevin Hilman <khilman@deeprootsystems.com>
Nice. Much cleaner than my previous one.
Tested on my n900, and with failed init, clocks are turned off
and doesn't prevent suspend.
Thanks,
Kevin
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/2] OMAP: DSS2: Fix DSS core init fail path
2010-05-06 11:59 [PATCH 0/2] OMAP: DSS2: Fix DSS core init fail path Jani Nikula
2010-05-06 11:59 ` [PATCH 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup Jani Nikula
@ 2010-05-07 8:07 ` Tomi Valkeinen
2010-05-07 9:58 ` [PATCH v2 " Jani Nikula
1 sibling, 1 reply; 11+ messages in thread
From: Tomi Valkeinen @ 2010-05-07 8:07 UTC (permalink / raw)
To: Nikula Jani.1 (EXT-Nixu/Helsinki)
Cc: khilman@deeprootsystems.com,
linux-fbdev-devel@lists.sourceforge.net,
linux-omap@vger.kernel.org
Hi,
On Thu, 2010-05-06 at 13:59 +0200, Nikula Jani.1 (EXT-Nixu/Helsinki)
wrote:
> Hi -
>
> These patches fix the broken DSS omap_dss_probe() fail path, reported by Kevin
> Hilman [1].
>
> Kevin, could you please check this with your setup too? It would be much
> appreciated.
>
> [1] http://www.mail-archive.com/linux-omap@vger.kernel.org/msg27112.html
Jani, I just noticed that this conflicts with the following patch in my
for-next branch:
commit 36b33efe80eb07e3447107c2bdba3c674c10a41a
Author: Roger Quadros <roger.quadros@nokia.com>
Date: Wed Mar 17 13:35:19 2010 +0100
OMAP: DSS2: Add Kconfig option for DPI display type
This allows us to disable DPI on systems that do not have it
Signed-off-by: Roger Quadros <roger.quadros@nokia.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
Can you rebase the patches on top of my for-next branch?
Tomi
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2 0/2] OMAP: DSS2: Fix DSS core init fail path
2010-05-07 8:07 ` [PATCH 0/2] OMAP: DSS2: Fix DSS core init fail path Tomi Valkeinen
@ 2010-05-07 9:58 ` Jani Nikula
2010-05-07 9:58 ` [PATCH v2 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup Jani Nikula
2010-05-10 7:01 ` [PATCH v2 0/2] OMAP: DSS2: Fix DSS core init fail path Tomi Valkeinen
0 siblings, 2 replies; 11+ messages in thread
From: Jani Nikula @ 2010-05-07 9:58 UTC (permalink / raw)
To: Tomi.Valkeinen, khilman; +Cc: linux-fbdev-devel, linux-omap, ext-jani.1.nikula
Hi -
These patches fix the broken DSS omap_dss_probe() fail path, reported by Kevin
Hilman [1].
v2:
- rebased against [2]
[1] http://www.mail-archive.com/linux-omap@vger.kernel.org/msg27112.html
[2] git://gitorious.org/linux-omap-dss2/linux.git
BR,
Jani.
Jani Nikula (2):
OMAP: DSS2: omap_dss_probe() conditional compilation cleanup
OMAP: DSS2: Fix omap_dss_probe() error path
drivers/video/omap2/dss/core.c | 89 +++++++++++++++++++++++----------------
drivers/video/omap2/dss/dss.h | 50 ++++++++++++++++++++++
2 files changed, 102 insertions(+), 37 deletions(-)
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup
2010-05-07 9:58 ` [PATCH v2 " Jani Nikula
@ 2010-05-07 9:58 ` Jani Nikula
2010-05-07 9:58 ` [PATCH v2 2/2] OMAP: DSS2: Fix omap_dss_probe() error path Jani Nikula
2010-05-10 7:01 ` [PATCH v2 0/2] OMAP: DSS2: Fix DSS core init fail path Tomi Valkeinen
1 sibling, 1 reply; 11+ messages in thread
From: Jani Nikula @ 2010-05-07 9:58 UTC (permalink / raw)
To: Tomi.Valkeinen, khilman; +Cc: linux-fbdev-devel, linux-omap, ext-jani.1.nikula
From: Jani Nikula <ext-jani.1.nikula@nokia.com>
Move a number of #ifdefs from code into dss.h and elsewhere, and
conditionally define no-op static inline functions, cleaning up the
code. This style is according to Documentation/SubmittingPatches.
Signed-off-by: Jani Nikula <ext-jani.1.nikula@nokia.com>
---
drivers/video/omap2/dss/core.c | 35 ++++++++-------------------
drivers/video/omap2/dss/dss.h | 50 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+), 24 deletions(-)
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 6d54467..92ee067 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -482,6 +482,14 @@ static void dss_uninitialize_debugfs(void)
if (dss_debugfs_dir)
debugfs_remove_recursive(dss_debugfs_dir);
}
+#else /* CONFIG_DEBUG_FS && CONFIG_OMAP2_DSS_DEBUG_SUPPORT */
+static inline int dss_initialize_debugfs(void)
+{
+ return 0;
+}
+static inline void dss_uninitialize_debugfs(void)
+{
+}
#endif /* CONFIG_DEBUG_FS && CONFIG_OMAP2_DSS_DEBUG_SUPPORT */
/* PLATFORM DEVICE */
@@ -518,56 +526,47 @@ static int omap_dss_probe(struct platform_device *pdev)
goto fail0;
}
-#ifdef CONFIG_OMAP2_DSS_RFBI
r = rfbi_init();
if (r) {
DSSERR("Failed to initialize rfbi\n");
goto fail0;
}
-#endif
-#ifdef CONFIG_OMAP2_DSS_DPI
r = dpi_init(pdev);
if (r) {
DSSERR("Failed to initialize dpi\n");
goto fail0;
}
-#endif
r = dispc_init();
if (r) {
DSSERR("Failed to initialize dispc\n");
goto fail0;
}
-#ifdef CONFIG_OMAP2_DSS_VENC
+
r = venc_init(pdev);
if (r) {
DSSERR("Failed to initialize venc\n");
goto fail0;
}
-#endif
+
if (cpu_is_omap34xx()) {
-#ifdef CONFIG_OMAP2_DSS_SDI
r = sdi_init(skip_init);
if (r) {
DSSERR("Failed to initialize SDI\n");
goto fail0;
}
-#endif
-#ifdef CONFIG_OMAP2_DSS_DSI
+
r = dsi_init(pdev);
if (r) {
DSSERR("Failed to initialize DSI\n");
goto fail0;
}
-#endif
}
-#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
r = dss_initialize_debugfs();
if (r)
goto fail0;
-#endif
for (i = 0; i < pdata->num_devices; ++i) {
struct omap_dss_device *dssdev = pdata->devices[i];
@@ -595,27 +594,15 @@ static int omap_dss_remove(struct platform_device *pdev)
int i;
int c;
-#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
dss_uninitialize_debugfs();
-#endif
-#ifdef CONFIG_OMAP2_DSS_VENC
venc_exit();
-#endif
dispc_exit();
-#ifdef CONFIG_OMAP2_DSS_DPI
dpi_exit();
-#endif
-#ifdef CONFIG_OMAP2_DSS_RFBI
rfbi_exit();
-#endif
if (cpu_is_omap34xx()) {
-#ifdef CONFIG_OMAP2_DSS_DSI
dsi_exit();
-#endif
-#ifdef CONFIG_OMAP2_DSS_SDI
sdi_exit();
-#endif
}
dss_exit();
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 24326a5..786f433 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -242,11 +242,22 @@ int dss_calc_clock_div(bool is_tft, unsigned long req_pck,
struct dispc_clock_info *dispc_cinfo);
/* SDI */
+#ifdef CONFIG_OMAP2_DSS_SDI
int sdi_init(bool skip_init);
void sdi_exit(void);
int sdi_init_display(struct omap_dss_device *display);
+#else
+static inline int sdi_init(bool skip_init)
+{
+ return 0;
+}
+static inline void sdi_exit(void)
+{
+}
+#endif
/* DSI */
+#ifdef CONFIG_OMAP2_DSS_DSI
int dsi_init(struct platform_device *pdev);
void dsi_exit(void);
@@ -270,11 +281,30 @@ void dsi_pll_uninit(void);
void dsi_get_overlay_fifo_thresholds(enum omap_plane plane,
u32 fifo_size, enum omap_burst_size *burst_size,
u32 *fifo_low, u32 *fifo_high);
+#else
+static inline int dsi_init(struct platform_device *pdev)
+{
+ return 0;
+}
+static inline void dsi_exit(void)
+{
+}
+#endif
/* DPI */
+#ifdef CONFIG_OMAP2_DSS_DPI
int dpi_init(struct platform_device *pdev);
void dpi_exit(void);
int dpi_init_display(struct omap_dss_device *dssdev);
+#else
+static inline int dpi_init(struct platform_device *pdev)
+{
+ return 0;
+}
+static inline void dpi_exit(void)
+{
+}
+#endif
/* DISPC */
int dispc_init(void);
@@ -362,12 +392,23 @@ int dispc_get_clock_div(struct dispc_clock_info *cinfo);
/* VENC */
+#ifdef CONFIG_OMAP2_DSS_VENC
int venc_init(struct platform_device *pdev);
void venc_exit(void);
void venc_dump_regs(struct seq_file *s);
int venc_init_display(struct omap_dss_device *display);
+#else
+static inline int venc_init(struct platform_device *pdev)
+{
+ return 0;
+}
+static inline void venc_exit(void)
+{
+}
+#endif
/* RFBI */
+#ifdef CONFIG_OMAP2_DSS_RFBI
int rfbi_init(void);
void rfbi_exit(void);
void rfbi_dump_regs(struct seq_file *s);
@@ -379,6 +420,15 @@ void rfbi_transfer_area(u16 width, u16 height,
void rfbi_set_timings(int rfbi_module, struct rfbi_timings *t);
unsigned long rfbi_get_max_tx_rate(void);
int rfbi_init_display(struct omap_dss_device *display);
+#else
+static inline int rfbi_init(void)
+{
+ return 0;
+}
+static inline void rfbi_exit(void)
+{
+}
+#endif
#ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
--
1.6.5.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 2/2] OMAP: DSS2: Fix omap_dss_probe() error path
2010-05-07 9:58 ` [PATCH v2 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup Jani Nikula
@ 2010-05-07 9:58 ` Jani Nikula
0 siblings, 0 replies; 11+ messages in thread
From: Jani Nikula @ 2010-05-07 9:58 UTC (permalink / raw)
To: Tomi.Valkeinen, khilman; +Cc: linux-fbdev-devel, linux-omap, ext-jani.1.nikula
From: Jani Nikula <ext-jani.1.nikula@nokia.com>
Perform graceful cleanup on errors instead of just bailing out.
Signed-off-by: Jani Nikula <ext-jani.1.nikula@nokia.com>
---
drivers/video/omap2/dss/core.c | 54 ++++++++++++++++++++++++++++++---------
1 files changed, 41 insertions(+), 13 deletions(-)
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 92ee067..b3a498f 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -507,7 +507,7 @@ static int omap_dss_probe(struct platform_device *pdev)
r = dss_get_clocks();
if (r)
- goto fail0;
+ goto err_clocks;
dss_clk_enable_all_no_ctx();
@@ -523,57 +523,64 @@ static int omap_dss_probe(struct platform_device *pdev)
r = dss_init(skip_init);
if (r) {
DSSERR("Failed to initialize DSS\n");
- goto fail0;
+ goto err_dss;
}
r = rfbi_init();
if (r) {
DSSERR("Failed to initialize rfbi\n");
- goto fail0;
+ goto err_rfbi;
}
r = dpi_init(pdev);
if (r) {
DSSERR("Failed to initialize dpi\n");
- goto fail0;
+ goto err_dpi;
}
r = dispc_init();
if (r) {
DSSERR("Failed to initialize dispc\n");
- goto fail0;
+ goto err_dispc;
}
r = venc_init(pdev);
if (r) {
DSSERR("Failed to initialize venc\n");
- goto fail0;
+ goto err_venc;
}
if (cpu_is_omap34xx()) {
r = sdi_init(skip_init);
if (r) {
DSSERR("Failed to initialize SDI\n");
- goto fail0;
+ goto err_sdi;
}
r = dsi_init(pdev);
if (r) {
DSSERR("Failed to initialize DSI\n");
- goto fail0;
+ goto err_dsi;
}
}
r = dss_initialize_debugfs();
if (r)
- goto fail0;
+ goto err_debugfs;
for (i = 0; i < pdata->num_devices; ++i) {
struct omap_dss_device *dssdev = pdata->devices[i];
r = omap_dss_register_device(dssdev);
- if (r)
- DSSERR("device reg failed %d\n", i);
+ if (r) {
+ DSSERR("device %d %s register failed %d\n", i,
+ dssdev->name ?: "unnamed", r);
+
+ while (--i >= 0)
+ omap_dss_unregister_device(pdata->devices[i]);
+
+ goto err_register;
+ }
if (def_disp_name && strcmp(def_disp_name, dssdev->name) == 0)
pdata->default_device = dssdev;
@@ -583,8 +590,29 @@ static int omap_dss_probe(struct platform_device *pdev)
return 0;
- /* XXX fail correctly */
-fail0:
+err_register:
+ dss_uninitialize_debugfs();
+err_debugfs:
+ if (cpu_is_omap34xx())
+ dsi_exit();
+err_dsi:
+ if (cpu_is_omap34xx())
+ sdi_exit();
+err_sdi:
+ venc_exit();
+err_venc:
+ dispc_exit();
+err_dispc:
+ dpi_exit();
+err_dpi:
+ rfbi_exit();
+err_rfbi:
+ dss_exit();
+err_dss:
+ dss_clk_disable_all_no_ctx();
+ dss_put_clocks();
+err_clocks:
+
return r;
}
--
1.6.5.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] OMAP: DSS2: Fix omap_dss_probe() error path
2010-05-06 18:54 ` Kevin Hilman
@ 2010-05-07 12:12 ` Jani Nikula
0 siblings, 0 replies; 11+ messages in thread
From: Jani Nikula @ 2010-05-07 12:12 UTC (permalink / raw)
To: ext Kevin Hilman
Cc: Valkeinen Tomi (Nokia-D/Helsinki),
linux-fbdev-devel@lists.sourceforge.net,
linux-omap@vger.kernel.org
On Thu, 6 May 2010, ext Kevin Hilman wrote:
> Tested on my n900, and with failed init, clocks are turned off
> and doesn't prevent suspend.
Many thanks for testing this, Kevin!
BR,
Jani.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 0/2] OMAP: DSS2: Fix DSS core init fail path
2010-05-07 9:58 ` [PATCH v2 " Jani Nikula
2010-05-07 9:58 ` [PATCH v2 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup Jani Nikula
@ 2010-05-10 7:01 ` Tomi Valkeinen
1 sibling, 0 replies; 11+ messages in thread
From: Tomi Valkeinen @ 2010-05-10 7:01 UTC (permalink / raw)
To: Nikula Jani.1 (EXT-Nixu/Helsinki)
Cc: khilman@deeprootsystems.com,
linux-fbdev-devel@lists.sourceforge.net,
linux-omap@vger.kernel.org
On Fri, 2010-05-07 at 11:58 +0200, Nikula Jani.1 (EXT-Nixu/Helsinki)
wrote:
> Hi -
>
> These patches fix the broken DSS omap_dss_probe() fail path, reported by Kevin
> Hilman [1].
Thanks, looks good. Applied to my DSS tree.
Tomi
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2010-05-10 7:01 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-06 11:59 [PATCH 0/2] OMAP: DSS2: Fix DSS core init fail path Jani Nikula
2010-05-06 11:59 ` [PATCH 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup Jani Nikula
2010-05-06 11:59 ` [PATCH 2/2] OMAP: DSS2: Fix omap_dss_probe() error path Jani Nikula
2010-05-06 18:54 ` Kevin Hilman
2010-05-07 12:12 ` Jani Nikula
2010-05-06 18:52 ` [PATCH 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup Kevin Hilman
2010-05-07 8:07 ` [PATCH 0/2] OMAP: DSS2: Fix DSS core init fail path Tomi Valkeinen
2010-05-07 9:58 ` [PATCH v2 " Jani Nikula
2010-05-07 9:58 ` [PATCH v2 1/2] OMAP: DSS2: omap_dss_probe() conditional compilation cleanup Jani Nikula
2010-05-07 9:58 ` [PATCH v2 2/2] OMAP: DSS2: Fix omap_dss_probe() error path Jani Nikula
2010-05-10 7:01 ` [PATCH v2 0/2] OMAP: DSS2: Fix DSS core init fail path Tomi Valkeinen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).