All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] hibernation:stop resume screen during hibernation
@ 2021-06-22 12:45 pingshuo
  2021-06-22 13:06 ` Rafael J. Wysocki
  2021-06-22 13:19 ` Greg KH
  0 siblings, 2 replies; 7+ messages in thread
From: pingshuo @ 2021-06-22 12:45 UTC (permalink / raw)
  To: rjw, len.brown, pavel, gregkh, linux-pm; +Cc: linux-kernel, pingshuo

The display will be woken up during hibernation.
if the computer equipment is poor, it will cause the screen to flicker.
Skip to reusme the display devices in "thaw".

Signed-off-by: pingshuo <pingshuo@uniontech.com>
---
 drivers/base/power/main.c | 43 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index f893c3c5af07..f3e92ac7b4b3 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -35,11 +35,14 @@
 #include <linux/cpuidle.h>
 #include <linux/devfreq.h>
 #include <linux/timer.h>
+#include <linux/pci.h>
 
 #include "../base.h"
 #include "power.h"
 
 typedef int (*pm_callback_t)(struct device *);
+#define VIDEO_PCI_CLASS 0x030000
+#define VIDEO_PCI_CLASS_VALID 0xff0000
 
 #define list_for_each_entry_rcu_locked(pos, head, member) \
 	list_for_each_entry_rcu(pos, head, member, \
@@ -693,6 +696,40 @@ static void async_resume_noirq(void *data, async_cookie_t cookie)
 	put_device(dev);
 }
 
+/**
+ * dpm_resume_skip_display_devices - Skip to reusme the display devices.
+ * @dev: Device to handle.
+ * @state: PM transition of the system being carried out.
+ *
+ * Delete the display devices from the wake-up list during the "thaw".
+ */
+static int dpm_resume_skip_display_devices(struct device *dev, pm_message_t state)
+{
+	struct pci_dev *pci_test = to_pci_dev(dev);
+
+	if (state.event == PM_EVENT_THAW) {
+		/*
+		 * Filter out the display devices
+		 */
+		if ((pci_test && ((pci_test->class & VIDEO_PCI_CLASS_VALID) == VIDEO_PCI_CLASS)) ||
+			(dev->driver && dev->driver->name &&
+			strncmp(dev->driver->name, "video", 6) == 0)) {
+
+			pr_info("Skip the display devices during the thaw.");
+			/*
+			 * Remove the display devices from the resume stage
+			 */
+			list_del(&dev->power.entry);
+			/*
+			 * Remove the display devices from the power down stage
+			 */
+			list_del(&dev->kobj.entry);
+			return 1;
+		}
+	}
+	return 0;
+}
+
 static void dpm_noirq_resume_devices(pm_message_t state)
 {
 	struct device *dev;
@@ -713,6 +750,10 @@ static void dpm_noirq_resume_devices(pm_message_t state)
 	while (!list_empty(&dpm_noirq_list)) {
 		dev = to_device(dpm_noirq_list.next);
 		get_device(dev);
+
+		if (dpm_resume_skip_display_devices(dev, state))
+			continue;
+
 		list_move_tail(&dev->power.entry, &dpm_late_early_list);
 		mutex_unlock(&dpm_list_mtx);
 
@@ -737,6 +778,8 @@ static void dpm_noirq_resume_devices(pm_message_t state)
 	trace_suspend_resume(TPS("dpm_resume_noirq"), state.event, false);
 }
 
+
+
 /**
  * dpm_resume_noirq - Execute "noirq resume" callbacks for all devices.
  * @state: PM transition of the system being carried out.
-- 
2.20.1




^ permalink raw reply related	[flat|nested] 7+ messages in thread
* [PATCH] hibernation:stop resume screen during hibernation
@ 2021-06-22  8:38 pingshuo
  2021-06-22 10:22 ` Greg KH
  0 siblings, 1 reply; 7+ messages in thread
From: pingshuo @ 2021-06-22  8:38 UTC (permalink / raw)
  To: rjw; +Cc: len.brown, pavel, gregkh, linux-pm, linux-kernel, pingshuo

The display will be woken up during hibernation,
if the computer equipment is poor, it will cause the screen to flicker.
Skip to reusme the display devices in "thaw".

Signed-off-by: pingshuo <pingshuo@uniontech.com>
---
 drivers/base/power/main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index c7f51c94969d..376b2eca65c7 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -707,7 +707,7 @@ static int dpm_resume_skip_display_devices(struct device *dev, pm_message_t stat
 {
     struct pci_dev *pci_test = to_pci_dev(dev);
     if (state.event == PM_EVENT_THAW) {
-        /*
+	/*
         *Filter out the display devices
         */
         if((pci_test && ((pci_test->class&DISPLAY_PCI_CLASS_VALID_BIT) == DISPLAY_PCI_CLASS))||(dev->driver&&dev->driver->name&&strncmp(dev->driver->name,"video",6)==0))
-- 
2.20.1




^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-06-24  2:14 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-22 12:45 [PATCH] hibernation:stop resume screen during hibernation pingshuo
2021-06-22 13:06 ` Rafael J. Wysocki
2021-06-22 13:47   ` Pavel Machek
2021-06-24  2:06     ` pingshuo
2021-06-22 13:19 ` Greg KH
  -- strict thread matches above, loose matches on Subject: below --
2021-06-22  8:38 pingshuo
2021-06-22 10:22 ` Greg KH

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.