Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6a1c64cb authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/apm into pm-apm-next

Pull APM update for 3.14-rc1 from Jiri Kosina.

* 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/apm:
  apm-emulation: add hibernation APM events to support suspend2disk
parents 13de22c5 15820439
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -531,6 +531,7 @@ static int apm_suspend_notifier(struct notifier_block *nb,
{
	struct apm_user *as;
	int err;
	unsigned long apm_event;

	/* short-cut emergency suspends */
	if (atomic_read(&userspace_notification_inhibit))
@@ -538,6 +539,9 @@ static int apm_suspend_notifier(struct notifier_block *nb,

	switch (event) {
	case PM_SUSPEND_PREPARE:
	case PM_HIBERNATION_PREPARE:
		apm_event = (event == PM_SUSPEND_PREPARE) ?
			APM_USER_SUSPEND : APM_USER_HIBERNATION;
		/*
		 * Queue an event to all "writer" users that we want
		 * to suspend and need their ack.
@@ -550,7 +554,7 @@ static int apm_suspend_notifier(struct notifier_block *nb,
			    as->writer && as->suser) {
				as->suspend_state = SUSPEND_PENDING;
				atomic_inc(&suspend_acks_pending);
				queue_add_event(&as->queue, APM_USER_SUSPEND);
				queue_add_event(&as->queue, apm_event);
			}
		}

@@ -601,11 +605,14 @@ static int apm_suspend_notifier(struct notifier_block *nb,
		return notifier_from_errno(err);

	case PM_POST_SUSPEND:
	case PM_POST_HIBERNATION:
		apm_event = (event == PM_POST_SUSPEND) ?
			APM_NORMAL_RESUME : APM_HIBERNATION_RESUME;
		/*
		 * Anyone on the APM queues will think we're still suspended.
		 * Send a message so everyone knows we're now awake again.
		 */
		queue_event(APM_NORMAL_RESUME);
		queue_event(apm_event);

		/*
		 * Finally, wake up anyone who is sleeping on the suspend.
+2 −0
Original line number Diff line number Diff line
@@ -67,6 +67,8 @@ struct apm_bios_info {
#define APM_USER_SUSPEND	0x000a
#define APM_STANDBY_RESUME	0x000b
#define APM_CAPABILITY_CHANGE	0x000c
#define APM_USER_HIBERNATION	0x000d
#define APM_HIBERNATION_RESUME	0x000e

/*
 * Error codes