* [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
` (2 more replies)
0 siblings, 3 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 18:52 ` Kevin Hilman
2010-05-06 11:59 ` [PATCH 2/2] OMAP: DSS2: Fix omap_dss_probe() error path Jani Nikula
2010-05-07 8:07 ` [PATCH 0/2] OMAP: DSS2: Fix DSS core init fail path Tomi Valkeinen
2 siblings, 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>
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 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 ` Jani Nikula
2010-05-06 18:54 ` Kevin Hilman
2010-05-07 8:07 ` [PATCH 0/2] OMAP: DSS2: Fix DSS core init fail path Tomi Valkeinen
2 siblings, 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 18:52 ` Kevin Hilman
0 siblings, 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-06 11:59 ` [PATCH 2/2] OMAP: DSS2: Fix omap_dss_probe() error path Jani Nikula
@ 2010-05-07 8:07 ` Tomi Valkeinen
2010-05-07 9:58 ` [PATCH v2 " Jani Nikula
2 siblings, 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
` (2 more replies)
0 siblings, 3 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
2 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>
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 " 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 ` Jani Nikula
2010-05-10 7:01 ` [PATCH v2 0/2] OMAP: DSS2: Fix DSS core init fail path Tomi Valkeinen
2 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-07 9:58 ` [PATCH v2 2/2] OMAP: DSS2: Fix omap_dss_probe() error path Jani Nikula
@ 2010-05-10 7:01 ` Tomi Valkeinen
2 siblings, 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 18:52 ` Kevin Hilman
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-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.