From mboxrd@z Thu Jan 1 00:00:00 1970 From: a.hajda@samsung.com (Andrzej Hajda) Date: Mon, 18 Aug 2014 14:58:14 +0200 Subject: [PATCH v2] imx-drm: imx-drm-core: add suspend/resume support In-Reply-To: <20140818123823.GK2114@dragon> References: <1406269240-24622-1-git-send-email-shawn.guo@freescale.com> <53F1AE97.8090807@samsung.com> <20140818123823.GK2114@dragon> Message-ID: <53F1F866.1@samsung.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 08/18/2014 02:38 PM, Shawn Guo wrote: > Hi Andrzej, > > On Mon, Aug 18, 2014 at 09:43:19AM +0200, Andrzej Hajda wrote: >>> diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c >>> index def8280d7ee6..ab41152089a3 100644 >>> --- a/drivers/staging/imx-drm/imx-drm-core.c >>> +++ b/drivers/staging/imx-drm/imx-drm-core.c >>> @@ -696,6 +696,29 @@ static int imx_drm_platform_remove(struct platform_device *pdev) >>> return 0; >>> } >>> >>> +#ifdef CONFIG_PM_SLEEP >>> +static int imx_drm_suspend(struct device *dev) >>> +{ >>> + struct drm_device *drm_dev = dev_get_drvdata(dev); >>> + >>> + drm_kms_helper_poll_disable(drm_dev); >> drm_dev can be NULL here. You should add check before. > The drvdata is set to drm_dev in drm_driver .load() hook. So are you > saying that .suspend() hook could possibly be called before the .load() > hook gets called? .load hook is called after all components are attached to the master. So if suspend happen after probe of the master and before attaching the last component you will have NULL here, I guess. Regards Andrzej > > Shawn > >>> + >>> + return 0; >>> +} >>> + >>> +static int imx_drm_resume(struct device *dev) >>> +{ >>> + struct drm_device *drm_dev = dev_get_drvdata(dev); >>> + >>> + drm_helper_resume_force_mode(drm_dev); >> ditto From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: Re: [PATCH v2] imx-drm: imx-drm-core: add suspend/resume support Date: Mon, 18 Aug 2014 14:58:14 +0200 Message-ID: <53F1F866.1@samsung.com> References: <1406269240-24622-1-git-send-email-shawn.guo@freescale.com> <53F1AE97.8090807@samsung.com> <20140818123823.GK2114@dragon> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mailout3.w1.samsung.com (mailout3.w1.samsung.com [210.118.77.13]) by gabe.freedesktop.org (Postfix) with ESMTP id A5FB989E1D for ; Mon, 18 Aug 2014 05:58:24 -0700 (PDT) Received: from eucpsbgm2.samsung.com (unknown [203.254.199.245]) by mailout3.w1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NAI002736P8XA20@mailout3.w1.samsung.com> for dri-devel@lists.freedesktop.org; Mon, 18 Aug 2014 13:58:20 +0100 (BST) In-reply-to: <20140818123823.GK2114@dragon> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Shawn Guo Cc: Russell King , dri-devel@lists.freedesktop.org, kernel@pengutronix.de, linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org On 08/18/2014 02:38 PM, Shawn Guo wrote: > Hi Andrzej, > > On Mon, Aug 18, 2014 at 09:43:19AM +0200, Andrzej Hajda wrote: >>> diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c >>> index def8280d7ee6..ab41152089a3 100644 >>> --- a/drivers/staging/imx-drm/imx-drm-core.c >>> +++ b/drivers/staging/imx-drm/imx-drm-core.c >>> @@ -696,6 +696,29 @@ static int imx_drm_platform_remove(struct platform_device *pdev) >>> return 0; >>> } >>> >>> +#ifdef CONFIG_PM_SLEEP >>> +static int imx_drm_suspend(struct device *dev) >>> +{ >>> + struct drm_device *drm_dev = dev_get_drvdata(dev); >>> + >>> + drm_kms_helper_poll_disable(drm_dev); >> drm_dev can be NULL here. You should add check before. > The drvdata is set to drm_dev in drm_driver .load() hook. So are you > saying that .suspend() hook could possibly be called before the .load() > hook gets called? .load hook is called after all components are attached to the master. So if suspend happen after probe of the master and before attaching the last component you will have NULL here, I guess. Regards Andrzej > > Shawn > >>> + >>> + return 0; >>> +} >>> + >>> +static int imx_drm_resume(struct device *dev) >>> +{ >>> + struct drm_device *drm_dev = dev_get_drvdata(dev); >>> + >>> + drm_helper_resume_force_mode(drm_dev); >> ditto