From: Tomi Valkeinen <tomi.valkeinen@ti.com>
To: linux-omap@vger.kernel.org, linux-fbdev@vger.kernel.org
Cc: b-cousson@ti.com, paul@pwsan.com, khilman@ti.com,
Tomi Valkeinen <tomi.valkeinen@ti.com>
Subject: [PATCHv2 05/28] OMAP: DSS2: Clean up probe for DSS & DSI
Date: Thu, 09 Jun 2011 13:56:27 +0000 [thread overview]
Message-ID: <1307627810-3768-6-git-send-email-tomi.valkeinen@ti.com> (raw)
In-Reply-To: <1307627810-3768-1-git-send-email-tomi.valkeinen@ti.com>
Both dss.c and dsi.c had a probe function, which was almost a dummy one,
calling dss_init() and dsi_init().
Remove the init functions by moving the initialization code into probe
functions.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
drivers/video/omap2/dss/dsi.c | 30 ++-------
drivers/video/omap2/dss/dss.c | 145 ++++++++++++++++++-----------------------
2 files changed, 69 insertions(+), 106 deletions(-)
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index 4496d09..0609885 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -4450,7 +4450,8 @@ static void dsi_calc_clock_param_ranges(struct platform_device *dsidev)
dsi->lpdiv_max = dss_feat_get_param_max(FEAT_PARAM_DSIPLL_LPDIV);
}
-static int dsi_init(struct platform_device *dsidev)
+/* DSI1 HW IP initialisation */
+static int omap_dsi1hw_probe(struct platform_device *dsidev)
{
struct omap_display_platform_data *dss_plat_data;
struct omap_dss_board_info *board_info;
@@ -4547,10 +4548,12 @@ err0:
return r;
}
-static void dsi_exit(struct platform_device *dsidev)
+static int omap_dsi1hw_remove(struct platform_device *dsidev)
{
struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
+ WARN_ON(dsi->scp_clk_refcount > 0);
+
if (dsi->vdds_dsi_reg != NULL) {
if (dsi->vdds_dsi_enabled) {
regulator_disable(dsi->vdds_dsi_reg);
@@ -4566,29 +4569,6 @@ static void dsi_exit(struct platform_device *dsidev)
kfree(dsi);
- DSSDBG("omap_dsi_exit\n");
-}
-
-/* DSI1 HW IP initialisation */
-static int omap_dsi1hw_probe(struct platform_device *dsidev)
-{
- int r;
-
- r = dsi_init(dsidev);
- if (r) {
- DSSERR("Failed to initialize DSI\n");
- goto err_dsi;
- }
-err_dsi:
- return r;
-}
-
-static int omap_dsi1hw_remove(struct platform_device *dsidev)
-{
- struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
-
- dsi_exit(dsidev);
- WARN_ON(dsi->scp_clk_refcount > 0);
return 0;
}
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index bcd4a07..57ce428 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -664,79 +664,6 @@ void dss_select_hdmi_venc_clk_source(enum dss_hdmi_venc_clk_source_select hdmi)
REG_FLD_MOD(DSS_CONTROL, hdmi, 15, 15); /* VENC_HDMI_SWITCH */
}
-static int dss_init(void)
-{
- int r;
- u32 rev;
- struct resource *dss_mem;
-
- dss_mem = platform_get_resource(dss.pdev, IORESOURCE_MEM, 0);
- if (!dss_mem) {
- DSSERR("can't get IORESOURCE_MEM DSS\n");
- r = -EINVAL;
- goto fail0;
- }
- dss.base = ioremap(dss_mem->start, resource_size(dss_mem));
- if (!dss.base) {
- DSSERR("can't ioremap DSS\n");
- r = -ENOMEM;
- goto fail0;
- }
-
- /* disable LCD and DIGIT output. This seems to fix the synclost
- * problem that we get, if the bootloader starts the DSS and
- * the kernel resets it */
- omap_writel(omap_readl(0x48050440) & ~0x3, 0x48050440);
-
-#ifdef CONFIG_OMAP2_DSS_SLEEP_BEFORE_RESET
- /* We need to wait here a bit, otherwise we sometimes start to
- * get synclost errors, and after that only power cycle will
- * restore DSS functionality. I have no idea why this happens.
- * And we have to wait _before_ resetting the DSS, but after
- * enabling clocks.
- *
- * This bug was at least present on OMAP3430. It's unknown
- * if it happens on OMAP2 or OMAP3630.
- */
- msleep(50);
-#endif
-
- _omap_dss_reset();
-
- /* autoidle */
- REG_FLD_MOD(DSS_SYSCONFIG, 1, 0, 0);
-
- /* Select DPLL */
- REG_FLD_MOD(DSS_CONTROL, 0, 0, 0);
-
-#ifdef CONFIG_OMAP2_DSS_VENC
- REG_FLD_MOD(DSS_CONTROL, 1, 4, 4); /* venc dac demen */
- REG_FLD_MOD(DSS_CONTROL, 1, 3, 3); /* venc clock 4x enable */
- REG_FLD_MOD(DSS_CONTROL, 0, 2, 2); /* venc clock mode = normal */
-#endif
- dss.dsi_clk_source[0] = OMAP_DSS_CLK_SRC_FCK;
- dss.dsi_clk_source[1] = OMAP_DSS_CLK_SRC_FCK;
- dss.dispc_clk_source = OMAP_DSS_CLK_SRC_FCK;
- dss.lcd_clk_source[0] = OMAP_DSS_CLK_SRC_FCK;
- dss.lcd_clk_source[1] = OMAP_DSS_CLK_SRC_FCK;
-
- dss_save_context();
-
- rev = dss_read_reg(DSS_REVISION);
- printk(KERN_INFO "OMAP DSS rev %d.%d\n",
- FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
-
- return 0;
-
-fail0:
- return r;
-}
-
-static void dss_exit(void)
-{
- iounmap(dss.base);
-}
-
/* CONTEXT */
static int dss_get_ctx_id(void)
{
@@ -1094,10 +1021,25 @@ void dss_debug_dump_clocks(struct seq_file *s)
/* DSS HW IP initialisation */
static int omap_dsshw_probe(struct platform_device *pdev)
{
+ struct resource *dss_mem;
+ u32 rev;
int r;
dss.pdev = pdev;
+ dss_mem = platform_get_resource(dss.pdev, IORESOURCE_MEM, 0);
+ if (!dss_mem) {
+ DSSERR("can't get IORESOURCE_MEM DSS\n");
+ r = -EINVAL;
+ goto err_ioremap;
+ }
+ dss.base = ioremap(dss_mem->start, resource_size(dss_mem));
+ if (!dss.base) {
+ DSSERR("can't ioremap DSS\n");
+ r = -ENOMEM;
+ goto err_ioremap;
+ }
+
r = dss_get_clocks();
if (r)
goto err_clocks;
@@ -1107,11 +1049,42 @@ static int omap_dsshw_probe(struct platform_device *pdev)
dss.ctx_id = dss_get_ctx_id();
DSSDBG("initial ctx id %u\n", dss.ctx_id);
- r = dss_init();
- if (r) {
- DSSERR("Failed to initialize DSS\n");
- goto err_dss;
- }
+ /* disable LCD and DIGIT output. This seems to fix the synclost
+ * problem that we get, if the bootloader starts the DSS and
+ * the kernel resets it */
+ omap_writel(omap_readl(0x48050440) & ~0x3, 0x48050440);
+
+#ifdef CONFIG_OMAP2_DSS_SLEEP_BEFORE_RESET
+ /* We need to wait here a bit, otherwise we sometimes start to
+ * get synclost errors, and after that only power cycle will
+ * restore DSS functionality. I have no idea why this happens.
+ * And we have to wait _before_ resetting the DSS, but after
+ * enabling clocks.
+ *
+ * This bug was at least present on OMAP3430. It's unknown
+ * if it happens on OMAP2 or OMAP3630.
+ */
+ msleep(50);
+#endif
+
+ _omap_dss_reset();
+
+ /* autoidle */
+ REG_FLD_MOD(DSS_SYSCONFIG, 1, 0, 0);
+
+ /* Select DPLL */
+ REG_FLD_MOD(DSS_CONTROL, 0, 0, 0);
+
+#ifdef CONFIG_OMAP2_DSS_VENC
+ REG_FLD_MOD(DSS_CONTROL, 1, 4, 4); /* venc dac demen */
+ REG_FLD_MOD(DSS_CONTROL, 1, 3, 3); /* venc clock 4x enable */
+ REG_FLD_MOD(DSS_CONTROL, 0, 2, 2); /* venc clock mode = normal */
+#endif
+ dss.dsi_clk_source[0] = OMAP_DSS_CLK_SRC_FCK;
+ dss.dsi_clk_source[1] = OMAP_DSS_CLK_SRC_FCK;
+ dss.dispc_clk_source = OMAP_DSS_CLK_SRC_FCK;
+ dss.lcd_clk_source[0] = OMAP_DSS_CLK_SRC_FCK;
+ dss.lcd_clk_source[1] = OMAP_DSS_CLK_SRC_FCK;
r = dpi_init();
if (r) {
@@ -1125,23 +1098,32 @@ static int omap_dsshw_probe(struct platform_device *pdev)
goto err_sdi;
}
+ dss_save_context();
+
+ rev = dss_read_reg(DSS_REVISION);
+ printk(KERN_INFO "OMAP DSS rev %d.%d\n",
+ FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
+
dss_clk_disable_all_no_ctx();
+
return 0;
err_sdi:
dpi_exit();
err_dpi:
- dss_exit();
-err_dss:
dss_clk_disable_all_no_ctx();
dss_put_clocks();
err_clocks:
+ iounmap(dss.base);
+err_ioremap:
return r;
}
static int omap_dsshw_remove(struct platform_device *pdev)
{
+ dpi_exit();
+ sdi_exit();
- dss_exit();
+ iounmap(dss.base);
/*
* As part of hwmod changes, DSS is not the only controller of dss
@@ -1152,6 +1134,7 @@ static int omap_dsshw_remove(struct platform_device *pdev)
WARN_ON(dss.num_clks_enabled > 0);
dss_put_clocks();
+
return 0;
}
--
1.7.4.1
next prev parent reply other threads:[~2011-06-09 13:56 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-09 13:56 [PATCHv2 00/28] OMAP DSS runtime PM adaptation Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 01/28] OMAP: change get_context_loss_count ret value to int Tomi Valkeinen
2011-06-13 9:51 ` [PATCHv2 01/28] OMAP: change get_context_loss_count ret value Tomi Valkeinen
2011-06-13 16:37 ` [PATCHv2 01/28] OMAP: change get_context_loss_count ret value to int Ghongdemath, Girish
2011-06-13 16:45 ` [PATCHv2 01/28] OMAP: change get_context_loss_count ret value Tomi Valkeinen
2011-06-14 7:13 ` Paul Walmsley
2011-06-14 7:24 ` Tomi Valkeinen
2011-06-14 13:55 ` Rajendra Nayak
2011-06-15 9:19 ` Rajendra Nayak
2011-08-21 6:19 ` Paul Walmsley
2011-10-06 23:11 ` Paul Walmsley
2011-10-06 23:14 ` Tony Lindgren
2011-06-09 13:56 ` [PATCHv2 02/28] OMAP: DSS2: Taal: Make driver more fault tolerant Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 03/28] OMAP: DSS2: Reset LANEx_ULPS_SIG2 bits after use Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 04/28] OMAP: DSS2: Handle dpll4_m4_ck in dss_get/put_clocks Tomi Valkeinen
2011-06-09 13:56 ` Tomi Valkeinen [this message]
2011-06-09 13:56 ` [PATCHv2 06/28] OMAP: DSS2: Init dispc first before other components Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 07/28] OMAP: DSS2: Remove clk optimization at dss init Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 08/28] OMAP: DSS2: rewrite use of context_loss_count Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 09/28] OMAP: DSS2: Use omap_pm_get_dev_context_loss_count to get ctx loss count Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 10/28] OMAP: DSS2: DPI: remove unneeded SYSCK enable/disable Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 11/28] OMAP: DSS2: Add FEAT_VENC_REQUIRES_TV_DAC_CLK Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 12/28] OMAP: DSS2: Add new FEAT definitions for features missing from OMAP2 Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 13/28] OMAP: DSS2: Remove core_dump_clocks Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 14/28] OMAP: DSS2: Remove CONFIG_OMAP2_DSS_SLEEP_BEFORE_RESET Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 15/28] OMAP4: HWMOD: Modify DSS opt clocks Tomi Valkeinen
2011-06-15 11:23 ` Tomi Valkeinen
2011-06-21 6:20 ` Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 16/28] OMAP3: HWMOD: Add " Tomi Valkeinen
2011-07-15 6:49 ` Paul Walmsley
2011-08-02 1:27 ` Paul Walmsley
2011-08-02 7:47 ` Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 17/28] OMAP2420: " Tomi Valkeinen
2011-07-15 6:48 ` Paul Walmsley
2011-08-02 1:14 ` Paul Walmsley
2011-08-02 7:57 ` Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 18/28] OMAP2430: " Tomi Valkeinen
2011-07-15 6:49 ` Paul Walmsley
2011-06-09 13:56 ` [PATCHv2 19/28] OMAP4: HWMOD: change DSS main_clk scheme Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 20/28] OMAP: DSS2: Use PM runtime & HWMOD support Tomi Valkeinen
2011-06-09 20:03 ` Paul Mundt
2011-06-10 6:52 ` Tomi Valkeinen
2011-06-10 7:24 ` Paul Mundt
2011-06-21 14:49 ` Kevin Hilman
2011-06-21 15:18 ` Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 21/28] OMAP4: HWMOD: Remove unneeded DSS opt clocks Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 22/28] OMAP: DSS2: Remove unused opt_clock_available Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 23/28] OMAP: DSS2: DISPC: remove finegrained clk enables/disables Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 24/28] OMAP: DSS2: Remove unused code from display.c Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 25/28] OMAP: DSS2: Remove ctx loss count from dss.c Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 26/28] OMAP4: CLKDEV: Remove omapdss clock aliases Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 27/28] OMAP: DSS2: DISPC: Fix context save/restore Tomi Valkeinen
2011-06-09 13:56 ` [PATCHv2 28/28] OMAP: DSS2: DSS: " Tomi Valkeinen
2011-06-09 14:27 ` [PATCHv2 00/28] OMAP DSS runtime PM adaptation Tomi Valkeinen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1307627810-3768-6-git-send-email-tomi.valkeinen@ti.com \
--to=tomi.valkeinen@ti.com \
--cc=b-cousson@ti.com \
--cc=khilman@ti.com \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=paul@pwsan.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).