@@ -32,13 +32,18 @@ static const struct acpi_device_id lps0_device_ids[] = {
32
32
{"" , },
33
33
};
34
34
35
+ /* Microsoft platform agnostic UUID */
36
+ #define ACPI_LPS0_DSM_UUID_MICROSOFT "11e00d56-ce64-47ce-837b-1f898f9aa461"
37
+
35
38
#define ACPI_LPS0_DSM_UUID "c4eb40a0-6cd2-11e2-bcfd-0800200c9a66"
36
39
37
40
#define ACPI_LPS0_GET_DEVICE_CONSTRAINTS 1
38
41
#define ACPI_LPS0_SCREEN_OFF 3
39
42
#define ACPI_LPS0_SCREEN_ON 4
40
43
#define ACPI_LPS0_ENTRY 5
41
44
#define ACPI_LPS0_EXIT 6
45
+ #define ACPI_LPS0_MS_ENTRY 7
46
+ #define ACPI_LPS0_MS_EXIT 8
42
47
43
48
/* AMD */
44
49
#define ACPI_LPS0_DSM_UUID_AMD "e3f32452-febc-43ce-9039-932122d37721"
@@ -51,6 +56,9 @@ static acpi_handle lps0_device_handle;
51
56
static guid_t lps0_dsm_guid ;
52
57
static int lps0_dsm_func_mask ;
53
58
59
+ static guid_t lps0_dsm_guid_microsoft ;
60
+ static int lps0_dsm_func_mask_microsoft ;
61
+
54
62
/* Device constraint entry structure */
55
63
struct lpi_device_info {
56
64
char * name ;
@@ -366,14 +374,18 @@ static int lps0_device_attach(struct acpi_device *adev,
366
374
rev_id = 0 ;
367
375
lps0_dsm_func_mask = validate_dsm (adev -> handle ,
368
376
ACPI_LPS0_DSM_UUID_AMD , rev_id , & lps0_dsm_guid );
377
+ lps0_dsm_func_mask_microsoft = validate_dsm (adev -> handle ,
378
+ ACPI_LPS0_DSM_UUID_MICROSOFT , rev_id ,
379
+ & lps0_dsm_guid_microsoft );
369
380
} else {
370
381
rev_id = 1 ;
371
382
lps0_dsm_func_mask = validate_dsm (adev -> handle ,
372
383
ACPI_LPS0_DSM_UUID , rev_id , & lps0_dsm_guid );
384
+ lps0_dsm_func_mask_microsoft = - EINVAL ;
373
385
}
374
386
375
- if (lps0_dsm_func_mask < 0 )
376
- return 0 ;//function eval failed
387
+ if (lps0_dsm_func_mask < 0 && lps0_dsm_func_mask_microsoft < 0 )
388
+ return 0 ; //function evaluation failed
377
389
378
390
lps0_device_handle = adev -> handle ;
379
391
@@ -412,7 +424,14 @@ int acpi_s2idle_prepare_late(void)
412
424
if (pm_debug_messages_on )
413
425
lpi_check_constraints ();
414
426
415
- if (acpi_s2idle_vendor_amd ()) {
427
+ if (lps0_dsm_func_mask_microsoft > 0 ) {
428
+ acpi_sleep_run_lps0_dsm (ACPI_LPS0_SCREEN_OFF ,
429
+ lps0_dsm_func_mask_microsoft , lps0_dsm_guid_microsoft );
430
+ acpi_sleep_run_lps0_dsm (ACPI_LPS0_MS_EXIT ,
431
+ lps0_dsm_func_mask_microsoft , lps0_dsm_guid_microsoft );
432
+ acpi_sleep_run_lps0_dsm (ACPI_LPS0_ENTRY ,
433
+ lps0_dsm_func_mask_microsoft , lps0_dsm_guid_microsoft );
434
+ } else if (acpi_s2idle_vendor_amd ()) {
416
435
acpi_sleep_run_lps0_dsm (ACPI_LPS0_SCREEN_OFF_AMD ,
417
436
lps0_dsm_func_mask , lps0_dsm_guid );
418
437
acpi_sleep_run_lps0_dsm (ACPI_LPS0_ENTRY_AMD ,
@@ -432,7 +451,14 @@ void acpi_s2idle_restore_early(void)
432
451
if (!lps0_device_handle || sleep_no_lps0 )
433
452
return ;
434
453
435
- if (acpi_s2idle_vendor_amd ()) {
454
+ if (lps0_dsm_func_mask_microsoft > 0 ) {
455
+ acpi_sleep_run_lps0_dsm (ACPI_LPS0_EXIT ,
456
+ lps0_dsm_func_mask_microsoft , lps0_dsm_guid_microsoft );
457
+ acpi_sleep_run_lps0_dsm (ACPI_LPS0_MS_ENTRY ,
458
+ lps0_dsm_func_mask_microsoft , lps0_dsm_guid_microsoft );
459
+ acpi_sleep_run_lps0_dsm (ACPI_LPS0_SCREEN_ON ,
460
+ lps0_dsm_func_mask_microsoft , lps0_dsm_guid_microsoft );
461
+ } else if (acpi_s2idle_vendor_amd ()) {
436
462
acpi_sleep_run_lps0_dsm (ACPI_LPS0_EXIT_AMD ,
437
463
lps0_dsm_func_mask , lps0_dsm_guid );
438
464
acpi_sleep_run_lps0_dsm (ACPI_LPS0_SCREEN_ON_AMD ,
0 commit comments