-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branches 'acpi-soc', 'acpi-bus', 'acpi-pmic' and 'acpi-power'
* acpi-soc: ACPI / LPSS: Call pwm_add_table() for Bay Trail PWM device i2c: designware: Add ACPI HID for Hisilicon Hip07/08 I2C controller ACPI / APD: Add clock frequency for Hisilicon Hip07/08 I2C controller * acpi-bus: ACPI / bus: Add INT0002 to list of always-present devices ACPI / bus: Introduce a list of ids for "always present" devices * acpi-pmic: ACPI / PMIC: xpower: Fix power_table addresses * acpi-power: ACPI / power: Delay turning off unused power resources after suspend
- Loading branch information
Showing
11 changed files
with
173 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
/* | ||
* X86 ACPI Utility Functions | ||
* | ||
* Copyright (C) 2017 Hans de Goede <hdegoede@redhat.com> | ||
* | ||
* Based on various non upstream patches to support the CHT Whiskey Cove PMIC: | ||
* Copyright (C) 2013-2015 Intel Corporation. All rights reserved. | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
|
||
#include <linux/acpi.h> | ||
#include <asm/cpu_device_id.h> | ||
#include <asm/intel-family.h> | ||
#include "../internal.h" | ||
|
||
/* | ||
* Some ACPI devices are hidden (status == 0x0) in recent BIOS-es because | ||
* some recent Windows drivers bind to one device but poke at multiple | ||
* devices at the same time, so the others get hidden. | ||
* We work around this by always reporting ACPI_STA_DEFAULT for these | ||
* devices. Note this MUST only be done for devices where this is safe. | ||
* | ||
* This forcing of devices to be present is limited to specific CPU (SoC) | ||
* models both to avoid potentially causing trouble on other models and | ||
* because some HIDs are re-used on different SoCs for completely | ||
* different devices. | ||
*/ | ||
struct always_present_id { | ||
struct acpi_device_id hid[2]; | ||
struct x86_cpu_id cpu_ids[2]; | ||
const char *uid; | ||
}; | ||
|
||
#define ICPU(model) { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, } | ||
|
||
#define ENTRY(hid, uid, cpu_models) { \ | ||
{ { hid, }, {} }, \ | ||
{ cpu_models, {} }, \ | ||
uid, \ | ||
} | ||
|
||
static const struct always_present_id always_present_ids[] = { | ||
/* | ||
* Bay / Cherry Trail PWM directly poked by GPU driver in win10, | ||
* but Linux uses a separate PWM driver, harmless if not used. | ||
*/ | ||
ENTRY("80860F09", "1", ICPU(INTEL_FAM6_ATOM_SILVERMONT1)), | ||
ENTRY("80862288", "1", ICPU(INTEL_FAM6_ATOM_AIRMONT)), | ||
/* | ||
* The INT0002 device is necessary to clear wakeup interrupt sources | ||
* on Cherry Trail devices, without it we get nobody cared IRQ msgs. | ||
*/ | ||
ENTRY("INT0002", "1", ICPU(INTEL_FAM6_ATOM_AIRMONT)), | ||
}; | ||
|
||
bool acpi_device_always_present(struct acpi_device *adev) | ||
{ | ||
u32 *status = (u32 *)&adev->status; | ||
u32 old_status = *status; | ||
bool ret = false; | ||
unsigned int i; | ||
|
||
/* acpi_match_device_ids checks status, so set it to default */ | ||
*status = ACPI_STA_DEFAULT; | ||
for (i = 0; i < ARRAY_SIZE(always_present_ids); i++) { | ||
if (acpi_match_device_ids(adev, always_present_ids[i].hid)) | ||
continue; | ||
|
||
if (!adev->pnp.unique_id || | ||
strcmp(adev->pnp.unique_id, always_present_ids[i].uid)) | ||
continue; | ||
|
||
if (!x86_match_cpu(always_present_ids[i].cpu_ids)) | ||
continue; | ||
|
||
if (old_status != ACPI_STA_DEFAULT) /* Log only once */ | ||
dev_info(&adev->dev, | ||
"Device [%s] is in always present list\n", | ||
adev->pnp.bus_id); | ||
|
||
ret = true; | ||
break; | ||
} | ||
*status = old_status; | ||
|
||
return ret; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters