Re: [PATCH] OMAPDSS: Check if RPM enabled before trying to change state

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 26 June 2012 17:33, Tomi Valkeinen <tomi.valkeinen@xxxxxx> wrote:
> On Tue, 2012-06-26 at 15:27 +0530, Jassi Brar wrote:
>
>> Seems similar, but I only tested OMAP4 HDMI.
>
> Would something like this one below work for you? It fixes the issues on
> my overo board.
>
I think this should work too (I will get to test it only tomorrow).

Though I don't think it'll fix stack spew when run without
CONFIG_PM_RUNTIME. Maybe we could simply remove the WARN_ON in the
xxx_runtime_put() as Alan noted?

-j

> Instead of using omapdss device's suspend/resume callbacks, this one
> uses PM notifier calls which happen before suspend and after resume.
>
> I still think the suspend handling is wrong, omapdss shouldn't be
> enabling and disabling panel devices like that, but this one should
> remove the biggest issues with the current suspend method.
>
>  Tomi
>
> diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
> index 5066eee..c35a248 100644
> --- a/drivers/video/omap2/dss/core.c
> +++ b/drivers/video/omap2/dss/core.c
> @@ -32,6 +32,7 @@
>  #include <linux/io.h>
>  #include <linux/device.h>
>  #include <linux/regulator/consumer.h>
> +#include <linux/suspend.h>
>
>  #include <video/omapdss.h>
>
> @@ -201,6 +202,30 @@ int dss_debugfs_create_file(const char *name, void (*write)(struct seq_file *))
>  #endif /* CONFIG_DEBUG_FS && CONFIG_OMAP2_DSS_DEBUG_SUPPORT */
>
>  /* PLATFORM DEVICE */
> +static int omap_dss_pm_notif(struct notifier_block *b, unsigned long v, void *d)
> +{
> +       DSSDBG("pm notif %lu\n", v);
> +
> +       switch (v)
> +       {
> +       case PM_SUSPEND_PREPARE:
> +               DSSDBG("suspending displays\n");
> +               return dss_suspend_all_devices();
> +
> +       case PM_POST_SUSPEND:
> +               DSSDBG("resuming displays\n");
> +               return dss_resume_all_devices();
> +
> +       default:
> +               return 0;
> +       }
> +}
> +
> +static struct notifier_block omap_dss_pm_notif_block =
> +{
> +       .notifier_call = omap_dss_pm_notif,
> +};
> +
>  static int __init omap_dss_probe(struct platform_device *pdev)
>  {
>        struct omap_dss_board_info *pdata = pdev->dev.platform_data;
> @@ -224,6 +249,8 @@ static int __init omap_dss_probe(struct platform_device *pdev)
>        else if (pdata->default_device)
>                core.default_display_name = pdata->default_device->name;
>
> +       register_pm_notifier(&omap_dss_pm_notif_block);
> +
>        return 0;
>
>  err_debugfs:
> @@ -233,6 +260,8 @@ err_debugfs:
>
>  static int omap_dss_remove(struct platform_device *pdev)
>  {
> +       unregister_pm_notifier(&omap_dss_pm_notif_block);
> +
>        dss_uninitialize_debugfs();
>
>        dss_uninit_overlays(pdev);
> @@ -247,25 +276,9 @@ static void omap_dss_shutdown(struct platform_device *pdev)
>        dss_disable_all_devices();
>  }
>
> -static int omap_dss_suspend(struct platform_device *pdev, pm_message_t state)
> -{
> -       DSSDBG("suspend %d\n", state.event);
> -
> -       return dss_suspend_all_devices();
> -}
> -
> -static int omap_dss_resume(struct platform_device *pdev)
> -{
> -       DSSDBG("resume\n");
> -
> -       return dss_resume_all_devices();
> -}
> -
>  static struct platform_driver omap_dss_driver = {
>        .remove         = omap_dss_remove,
>        .shutdown       = omap_dss_shutdown,
> -       .suspend        = omap_dss_suspend,
> -       .resume         = omap_dss_resume,
>        .driver         = {
>                .name   = "omapdss",
>                .owner  = THIS_MODULE,
>



-- 
Linaro.org │ Open source software for ARM SoCs | Follow Linaro
http://facebook.com/pages/Linaro/155974581091106  -
http://twitter.com/#!/linaroorg - http://linaro.org/linaro-blog
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux