From patchwork Thu Sep 2 19:57:41 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Poirier X-Patchwork-Id: 63538 X-Patchwork-Delegate: leann.ogasawara@canonical.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from chlorine.canonical.com (chlorine.canonical.com [91.189.94.204]) by ozlabs.org (Postfix) with ESMTP id 0E4B0B7187 for ; Fri, 3 Sep 2010 05:57:54 +1000 (EST) Received: from localhost ([127.0.0.1] helo=chlorine.canonical.com) by chlorine.canonical.com with esmtp (Exim 4.69) (envelope-from ) id 1OrFus-0000I7-3V; Thu, 02 Sep 2010 20:57:46 +0100 Received: from adelie.canonical.com ([91.189.90.139]) by chlorine.canonical.com with esmtp (Exim 4.69) (envelope-from ) id 1OrFuq-0000I2-LL for kernel-team@lists.ubuntu.com; Thu, 02 Sep 2010 20:57:44 +0100 Received: from hutte.canonical.com ([91.189.90.181]) by adelie.canonical.com with esmtp (Exim 4.69 #1 (Debian)) id 1OrFuq-0005jF-K2 for ; Thu, 02 Sep 2010 20:57:44 +0100 Received: from s0106002369de4dac.cg.shawcable.net ([70.73.24.112] helo=[192.168.1.100]) by hutte.canonical.com with esmtpsa (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69) (envelope-from ) id 1OrFuq-000271-25 for kernel-team@lists.ubuntu.com; Thu, 02 Sep 2010 20:57:44 +0100 Subject: [Maverick] pull-request: DSS2: Don't power off panel twice From: Mathieu Poirier To: kernel-team@lists.ubuntu.com Date: Thu, 02 Sep 2010 13:57:41 -0600 Message-ID: <1283457461.8721.23.camel@black> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.9 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kernel-team-bounces@lists.ubuntu.com Errors-To: kernel-team-bounces@lists.ubuntu.com This patch fixes: BugLink: http://bugs.launchpad.net/bug/588243 The following changes since commit 9f02aef9921f0f213a6680768641eb2af6113c3b: Leann Ogasawara (1): UBUNTU: Start new release are available in the git repository at: git://kernel.ubuntu.com/mpoirier/ubuntu-maverick.git lp588243 Mathieu J. Poirier (1): DSS2: Don't power off panel twice drivers/video/omap2/displays/panel-generic.c | 6 ++++++ .../video/omap2/displays/panel-sharp-lq043t1dg01.c | 6 ++++++ .../video/omap2/displays/panel-sharp-ls037v7dw01.c | 6 ++++++ drivers/video/omap2/displays/panel-taal.c | 6 ++++++ .../video/omap2/displays/panel-toppoly-tdo35s.c | 6 ++++++ .../video/omap2/displays/panel-tpo-td043mtea1.c | 6 ++++++ 6 files changed, 36 insertions(+), 0 deletions(-) ------------------------------------------------------------- >From 7c6524b497a454ff07e1efc6237dcef2fe655c11 Mon Sep 17 00:00:00 2001 From: Mathieu J. Poirier Date: Thu, 2 Sep 2010 11:05:49 -0600 Subject: [PATCH] DSS2: Don't power off panel twice Adding the work of Stanley Miao that has been submitted to linux-omap-2.6. This work simply avoids disabling the display if it is already inactive, something that causes the kernel to print a trace dump when rebooting/halting the system. BugLink: http://bugs.launchpad.net/bug/588243 Signed-off-by: Mathieu Poirier Signed-off-by: Bryan Wu ------------------------------------------------------------- >From c3b386edd12ca5e085e8d013fd23cafd19b6296f Mon Sep 17 00:00:00 2001 From: Stanley.Miao Date: Wed, 11 Aug 2010 11:19:13 +0800 Subject: [PATCH] OMAP: DSS2: don't power off a panel twice If we blank the panel by echo 1 > /sys/devices/platform/omapfb/graphics/fb0/blank Then, we reboot the sytem, the kernel will crash at drivers/video/omap2/dss/core.c:323 This is because the panel is closed twice. Now check the state of a dssdev to forbid a panel is power on or power off twice. Signed-off-by: Stanley.Miao --- drivers/video/omap2/displays/panel-generic.c | 6 ++++++ .../video/omap2/displays/panel-sharp-lq043t1dg01.c | 6 ++++++ .../video/omap2/displays/panel-sharp-ls037v7dw01.c | 6 ++++++ drivers/video/omap2/displays/panel-taal.c | 6 ++++++ .../video/omap2/displays/panel-toppoly-tdo35s.c | 6 ++++++ .../video/omap2/displays/panel-tpo-td043mtea1.c | 6 ++++++ 6 files changed, 36 insertions(+), 0 deletions(-) diff --git a/drivers/video/omap2/displays/panel-generic.c b/drivers/video/omap2/displays/panel-generic.c index 300eff5..395a68d 100644 --- a/drivers/video/omap2/displays/panel-generic.c +++ b/drivers/video/omap2/displays/panel-generic.c @@ -39,6 +39,9 @@ static int generic_panel_power_on(struct omap_dss_device *dssdev) { int r; + if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) + return 0; + r = omapdss_dpi_display_enable(dssdev); if (r) goto err0; @@ -58,6 +61,9 @@ err0: static void generic_panel_power_off(struct omap_dss_device *dssdev) { + if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) + return; + if (dssdev->platform_disable) dssdev->platform_disable(dssdev); diff --git a/drivers/video/omap2/displays/panel-sharp-lq043t1dg01.c b/drivers/video/omap2/displays/panel-sharp-lq043t1dg01.c index 1026746..0c6896c 100644 --- a/drivers/video/omap2/displays/panel-sharp-lq043t1dg01.c +++ b/drivers/video/omap2/displays/panel-sharp-lq043t1dg01.c @@ -43,6 +43,9 @@ static int sharp_lq_panel_power_on(struct omap_dss_device *dssdev) { int r; + if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) + return 0; + r = omapdss_dpi_display_enable(dssdev); if (r) goto err0; @@ -65,6 +68,9 @@ err0: static void sharp_lq_panel_power_off(struct omap_dss_device *dssdev) { + if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) + return; + if (dssdev->platform_disable) dssdev->platform_disable(dssdev); diff --git a/drivers/video/omap2/displays/panel-sharp-ls037v7dw01.c b/drivers/video/omap2/displays/panel-sharp-ls037v7dw01.c index 7d9eb2b..9a138f6 100644 --- a/drivers/video/omap2/displays/panel-sharp-ls037v7dw01.c +++ b/drivers/video/omap2/displays/panel-sharp-ls037v7dw01.c @@ -135,6 +135,9 @@ static int sharp_ls_power_on(struct omap_dss_device *dssdev) { int r = 0; + if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) + return 0; + r = omapdss_dpi_display_enable(dssdev); if (r) goto err0; @@ -157,6 +160,9 @@ err0: static void sharp_ls_power_off(struct omap_dss_device *dssdev) { + if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) + return; + if (dssdev->platform_disable) dssdev->platform_disable(dssdev); diff --git a/drivers/video/omap2/displays/panel-taal.c b/drivers/video/omap2/displays/panel-taal.c index aaf5d30..c649f06 100644 --- a/drivers/video/omap2/displays/panel-taal.c +++ b/drivers/video/omap2/displays/panel-taal.c @@ -635,6 +635,9 @@ static int taal_power_on(struct omap_dss_device *dssdev) u8 id1, id2, id3; int r; + if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) + return 0; + if (dssdev->platform_enable) { r = dssdev->platform_enable(dssdev); if (r) @@ -715,6 +718,9 @@ static void taal_power_off(struct omap_dss_device *dssdev) { struct taal_data *td = dev_get_drvdata(&dssdev->dev); + if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) + return; + dsi_bus_lock(); cancel_delayed_work(&td->esd_work); diff --git a/drivers/video/omap2/displays/panel-toppoly-tdo35s.c b/drivers/video/omap2/displays/panel-toppoly-tdo35s.c index fa434ca..49e1dec 100644 --- a/drivers/video/omap2/displays/panel-toppoly-tdo35s.c +++ b/drivers/video/omap2/displays/panel-toppoly-tdo35s.c @@ -46,6 +46,9 @@ static int toppoly_tdo_panel_power_on(struct omap_dss_device *dssdev) { int r; + if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) + return 0; + r = omapdss_dpi_display_enable(dssdev); if (r) goto err0; @@ -65,6 +68,9 @@ err0: static void toppoly_tdo_panel_power_off(struct omap_dss_device *dssdev) { + if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) + return; + if (dssdev->platform_disable) dssdev->platform_disable(dssdev); diff --git a/drivers/video/omap2/displays/panel-tpo-td043mtea1.c b/drivers/video/omap2/displays/panel-tpo-td043mtea1.c index e866e76..dbe9d43 100644 --- a/drivers/video/omap2/displays/panel-tpo-td043mtea1.c +++ b/drivers/video/omap2/displays/panel-tpo-td043mtea1.c @@ -269,6 +269,9 @@ static int tpo_td043_power_on(struct omap_dss_device *dssdev) int nreset_gpio = dssdev->reset_gpio; int r; + if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) + return 0; + r = omapdss_dpi_display_enable(dssdev); if (r) goto err0; @@ -308,6 +311,9 @@ static void tpo_td043_power_off(struct omap_dss_device *dssdev) struct tpo_td043_device *tpo_td043 = dev_get_drvdata(&dssdev->dev); int nreset_gpio = dssdev->reset_gpio; + if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) + return; + tpo_td043_write(tpo_td043->spi, 3, TPO_R03_VAL_STANDBY | TPO_R03_EN_PWM);