mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-01 10:42:11 +00:00
Merge branches 'acpi-pm', 'acpi-processor', 'acpi-ec' and 'acpi-video'
Make ACPI power management changes, ACPI processor driver updates, ACPI EC driver quirk and ACPI backlight driver updates for 6.2-rc1: - Print full name paths of ACPI power resources objects during enumeration (Kane Chen). - Eliminate a compiler warning regarding a missing function prototype in the ACPI power management code (Sudeep Holla). - Fix and clean up the ACPI processor driver (Rafael Wysocki, Li Zhong, Colin Ian King, Sudeep Holla). - Add quirk for the HP Pavilion Gaming 15-cx0041ur to the ACPI EC driver (Mia Kanashi). - Add some mew ACPI backlight handling quirks and update some existing ones (Hans de Goede). - Make the ACPI backlight driver prefer the native backlight control over vendor backlight control when possible (Hans de Goede). * acpi-pm: ACPI: PM: Silence missing prototype warning ACPI: PM: Print full name path while adding power resource * acpi-processor: ACPI: processor: perflib: Adjust acpi_processor_notify_smm() return value ACPI: processor: perflib: Rearrange acpi_processor_notify_smm() ACPI: processor: perflib: Rearrange unregistration routine ACPI: processor: perflib: Drop redundant parentheses ACPI: processor: perflib: Adjust white space ACPI: processor: idle: Drop unnecessary statements and parens ACPI: processor: Silence missing prototype warnings ACPI: processor_idle: Silence missing prototype warnings ACPI: processor: throttling: remove variable count ACPI: processor: idle: Check acpi_fetch_acpi_dev() return value * acpi-ec: ACPI: EC: Add quirk for the HP Pavilion Gaming 15-cx0041ur * acpi-video: ACPI: video: Prefer native over vendor ACPI: video: Simplify __acpi_video_get_backlight_type() ACPI: video: Add force_native quirk for Sony Vaio VPCY11S1E ACPI: video: Add force_vendor quirk for Sony Vaio PCG-FRV35 ACPI: video: Change Sony Vaio VPCEH3U1E quirk to force_native ACPI: video: Change GIGABYTE GB-BXBT-2807 quirk to force_none ACPI: video: Add a few bugtracker links to DMI quirks
This commit is contained in:
commit
6f1581810b
@ -1874,6 +1874,16 @@ static const struct dmi_system_id ec_dmi_table[] __initconst = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Gaming Laptop 15-cx0xxx"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/*
|
||||
* HP Pavilion Gaming Laptop 15-cx0041ur
|
||||
*/
|
||||
.callback = ec_honor_dsdt_gpe,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "HP"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "HP 15-cx0041ur"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/*
|
||||
* Samsung hardware
|
||||
|
@ -967,7 +967,7 @@ struct acpi_device *acpi_add_power_resource(acpi_handle handle)
|
||||
if (acpi_power_get_state(resource, &state_dummy))
|
||||
__acpi_power_on(resource);
|
||||
|
||||
pr_info("%s [%s]\n", acpi_device_name(device), acpi_device_bid(device));
|
||||
acpi_handle_info(handle, "New power resource\n");
|
||||
|
||||
result = acpi_tie_acpi_dev(device);
|
||||
if (result)
|
||||
|
@ -324,7 +324,7 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
|
||||
* the erratum), but this is known to disrupt certain ISA
|
||||
* devices thus we take the conservative approach.
|
||||
*/
|
||||
else if (errata.piix4.fdma) {
|
||||
if (errata.piix4.fdma) {
|
||||
acpi_handle_debug(pr->handle,
|
||||
"C3 not supported on PIIX4 with Type-F DMA\n");
|
||||
return;
|
||||
@ -384,8 +384,6 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
|
||||
* handle BM_RLD is to set it and leave it set.
|
||||
*/
|
||||
acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_RLD, 1);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static int acpi_cst_latency_cmp(const void *a, const void *b)
|
||||
@ -459,7 +457,7 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
|
||||
|
||||
lapic_timer_propagate_broadcast(pr);
|
||||
|
||||
return (working);
|
||||
return working;
|
||||
}
|
||||
|
||||
static int acpi_processor_get_cstate_info(struct acpi_processor *pr)
|
||||
@ -1134,6 +1132,9 @@ static int acpi_processor_get_lpi_info(struct acpi_processor *pr)
|
||||
status = acpi_get_parent(handle, &pr_ahandle);
|
||||
while (ACPI_SUCCESS(status)) {
|
||||
d = acpi_fetch_acpi_dev(pr_ahandle);
|
||||
if (!d)
|
||||
break;
|
||||
|
||||
handle = pr_ahandle;
|
||||
|
||||
if (strcmp(acpi_device_hid(d), ACPI_PROCESSOR_CONTAINER_HID))
|
||||
|
@ -142,6 +142,7 @@ int acpi_processor_get_bios_limit(int cpu, unsigned int *limit)
|
||||
pr = per_cpu(processors, cpu);
|
||||
if (!pr || !pr->performance || !pr->performance->state_count)
|
||||
return -ENODEV;
|
||||
|
||||
*limit = pr->performance->states[pr->performance_platform_limit].
|
||||
core_frequency * 1000;
|
||||
return 0;
|
||||
@ -201,8 +202,7 @@ static int acpi_processor_get_performance_control(struct acpi_processor *pr)
|
||||
}
|
||||
|
||||
pct = (union acpi_object *)buffer.pointer;
|
||||
if (!pct || (pct->type != ACPI_TYPE_PACKAGE)
|
||||
|| (pct->package.count != 2)) {
|
||||
if (!pct || pct->type != ACPI_TYPE_PACKAGE || pct->package.count != 2) {
|
||||
pr_err("Invalid _PCT data\n");
|
||||
result = -EFAULT;
|
||||
goto end;
|
||||
@ -214,9 +214,8 @@ static int acpi_processor_get_performance_control(struct acpi_processor *pr)
|
||||
|
||||
obj = pct->package.elements[0];
|
||||
|
||||
if ((obj.type != ACPI_TYPE_BUFFER)
|
||||
|| (obj.buffer.length < sizeof(struct acpi_pct_register))
|
||||
|| (obj.buffer.pointer == NULL)) {
|
||||
if (!obj.buffer.pointer || obj.type != ACPI_TYPE_BUFFER ||
|
||||
obj.buffer.length < sizeof(struct acpi_pct_register)) {
|
||||
pr_err("Invalid _PCT data (control_register)\n");
|
||||
result = -EFAULT;
|
||||
goto end;
|
||||
@ -230,9 +229,8 @@ static int acpi_processor_get_performance_control(struct acpi_processor *pr)
|
||||
|
||||
obj = pct->package.elements[1];
|
||||
|
||||
if ((obj.type != ACPI_TYPE_BUFFER)
|
||||
|| (obj.buffer.length < sizeof(struct acpi_pct_register))
|
||||
|| (obj.buffer.pointer == NULL)) {
|
||||
if (!obj.buffer.pointer || obj.type != ACPI_TYPE_BUFFER ||
|
||||
obj.buffer.length < sizeof(struct acpi_pct_register)) {
|
||||
pr_err("Invalid _PCT data (status_register)\n");
|
||||
result = -EFAULT;
|
||||
goto end;
|
||||
@ -260,8 +258,8 @@ static void amd_fixup_frequency(struct acpi_processor_px *px, int i)
|
||||
if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
|
||||
return;
|
||||
|
||||
if ((boot_cpu_data.x86 == 0x10 && boot_cpu_data.x86_model < 10)
|
||||
|| boot_cpu_data.x86 == 0x11) {
|
||||
if ((boot_cpu_data.x86 == 0x10 && boot_cpu_data.x86_model < 10) ||
|
||||
boot_cpu_data.x86 == 0x11) {
|
||||
rdmsr(MSR_AMD_PSTATE_DEF_BASE + index, lo, hi);
|
||||
/*
|
||||
* MSR C001_0064+:
|
||||
@ -300,7 +298,7 @@ static int acpi_processor_get_performance_states(struct acpi_processor *pr)
|
||||
}
|
||||
|
||||
pss = buffer.pointer;
|
||||
if (!pss || (pss->type != ACPI_TYPE_PACKAGE)) {
|
||||
if (!pss || pss->type != ACPI_TYPE_PACKAGE) {
|
||||
pr_err("Invalid _PSS data\n");
|
||||
result = -EFAULT;
|
||||
goto end;
|
||||
@ -353,8 +351,7 @@ static int acpi_processor_get_performance_states(struct acpi_processor *pr)
|
||||
* Check that ACPI's u64 MHz will be valid as u32 KHz in cpufreq
|
||||
*/
|
||||
if (!px->core_frequency ||
|
||||
((u32)(px->core_frequency * 1000) !=
|
||||
(px->core_frequency * 1000))) {
|
||||
(u32)(px->core_frequency * 1000) != px->core_frequency * 1000) {
|
||||
pr_err(FW_BUG
|
||||
"Invalid BIOS _PSS frequency found for processor %d: 0x%llx MHz\n",
|
||||
pr->id, px->core_frequency);
|
||||
@ -456,7 +453,7 @@ int acpi_processor_pstate_control(void)
|
||||
int acpi_processor_notify_smm(struct module *calling_module)
|
||||
{
|
||||
static int is_done;
|
||||
int result;
|
||||
int result = 0;
|
||||
|
||||
if (!acpi_processor_cpufreq_init)
|
||||
return -EBUSY;
|
||||
@ -464,42 +461,41 @@ int acpi_processor_notify_smm(struct module *calling_module)
|
||||
if (!try_module_get(calling_module))
|
||||
return -EINVAL;
|
||||
|
||||
/* is_done is set to negative if an error occurred,
|
||||
* and to postitive if _no_ error occurred, but SMM
|
||||
* was already notified. This avoids double notification
|
||||
* which might lead to unexpected results...
|
||||
/*
|
||||
* is_done is set to negative if an error occurs and to 1 if no error
|
||||
* occurrs, but SMM has been notified already. This avoids repeated
|
||||
* notification which might lead to unexpected results.
|
||||
*/
|
||||
if (is_done > 0) {
|
||||
module_put(calling_module);
|
||||
return 0;
|
||||
} else if (is_done < 0) {
|
||||
module_put(calling_module);
|
||||
return is_done;
|
||||
}
|
||||
if (is_done != 0) {
|
||||
if (is_done < 0)
|
||||
result = is_done;
|
||||
|
||||
is_done = -EIO;
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
result = acpi_processor_pstate_control();
|
||||
if (!result) {
|
||||
pr_debug("No SMI port or pstate_control\n");
|
||||
module_put(calling_module);
|
||||
return 0;
|
||||
}
|
||||
if (result < 0) {
|
||||
module_put(calling_module);
|
||||
return result;
|
||||
if (result <= 0) {
|
||||
if (result) {
|
||||
is_done = result;
|
||||
} else {
|
||||
pr_debug("No SMI port or pstate_control\n");
|
||||
is_done = 1;
|
||||
}
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
/* Success. If there's no _PPC, we need to fear nothing, so
|
||||
* we can allow the cpufreq driver to be rmmod'ed. */
|
||||
is_done = 1;
|
||||
/*
|
||||
* Success. If there _PPC, unloading the cpufreq driver would be risky,
|
||||
* so disallow it in that case.
|
||||
*/
|
||||
if (acpi_processor_ppc_in_use)
|
||||
return 0;
|
||||
|
||||
if (!acpi_processor_ppc_in_use)
|
||||
module_put(calling_module);
|
||||
|
||||
return 0;
|
||||
out_put:
|
||||
module_put(calling_module);
|
||||
return result;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(acpi_processor_notify_smm);
|
||||
|
||||
int acpi_processor_get_psd(acpi_handle handle, struct acpi_psd_package *pdomain)
|
||||
@ -517,7 +513,7 @@ int acpi_processor_get_psd(acpi_handle handle, struct acpi_psd_package *pdomain)
|
||||
}
|
||||
|
||||
psd = buffer.pointer;
|
||||
if (!psd || (psd->type != ACPI_TYPE_PACKAGE)) {
|
||||
if (!psd || psd->type != ACPI_TYPE_PACKAGE) {
|
||||
pr_err("Invalid _PSD data\n");
|
||||
result = -EFAULT;
|
||||
goto end;
|
||||
@ -532,8 +528,7 @@ int acpi_processor_get_psd(acpi_handle handle, struct acpi_psd_package *pdomain)
|
||||
state.length = sizeof(struct acpi_psd_package);
|
||||
state.pointer = pdomain;
|
||||
|
||||
status = acpi_extract_package(&(psd->package.elements[0]),
|
||||
&format, &state);
|
||||
status = acpi_extract_package(&(psd->package.elements[0]), &format, &state);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
pr_err("Invalid _PSD data\n");
|
||||
result = -EFAULT;
|
||||
@ -716,9 +711,8 @@ int acpi_processor_preregister_performance(
|
||||
}
|
||||
EXPORT_SYMBOL(acpi_processor_preregister_performance);
|
||||
|
||||
int
|
||||
acpi_processor_register_performance(struct acpi_processor_performance
|
||||
*performance, unsigned int cpu)
|
||||
int acpi_processor_register_performance(struct acpi_processor_performance
|
||||
*performance, unsigned int cpu)
|
||||
{
|
||||
struct acpi_processor *pr;
|
||||
|
||||
@ -751,7 +745,6 @@ acpi_processor_register_performance(struct acpi_processor_performance
|
||||
mutex_unlock(&performance_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(acpi_processor_register_performance);
|
||||
|
||||
void acpi_processor_unregister_performance(unsigned int cpu)
|
||||
@ -761,18 +754,15 @@ void acpi_processor_unregister_performance(unsigned int cpu)
|
||||
mutex_lock(&performance_mutex);
|
||||
|
||||
pr = per_cpu(processors, cpu);
|
||||
if (!pr) {
|
||||
mutex_unlock(&performance_mutex);
|
||||
return;
|
||||
}
|
||||
if (!pr)
|
||||
goto unlock;
|
||||
|
||||
if (pr->performance)
|
||||
kfree(pr->performance->states);
|
||||
|
||||
pr->performance = NULL;
|
||||
|
||||
unlock:
|
||||
mutex_unlock(&performance_mutex);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(acpi_processor_unregister_performance);
|
||||
|
@ -50,7 +50,7 @@ static int __acpi_processor_set_throttling(struct acpi_processor *pr,
|
||||
|
||||
static int acpi_processor_update_tsd_coord(void)
|
||||
{
|
||||
int count, count_target;
|
||||
int count_target;
|
||||
int retval = 0;
|
||||
unsigned int i, j;
|
||||
cpumask_var_t covered_cpus;
|
||||
@ -107,7 +107,6 @@ static int acpi_processor_update_tsd_coord(void)
|
||||
|
||||
/* Validate the Domain info */
|
||||
count_target = pdomain->num_processors;
|
||||
count = 1;
|
||||
|
||||
for_each_possible_cpu(j) {
|
||||
if (i == j)
|
||||
@ -140,7 +139,6 @@ static int acpi_processor_update_tsd_coord(void)
|
||||
|
||||
cpumask_set_cpu(j, covered_cpus);
|
||||
cpumask_set_cpu(j, pthrottling->shared_cpu_map);
|
||||
count++;
|
||||
}
|
||||
for_each_possible_cpu(j) {
|
||||
if (i == j)
|
||||
|
@ -132,6 +132,10 @@ static int video_detect_force_none(const struct dmi_system_id *d)
|
||||
}
|
||||
|
||||
static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||
/*
|
||||
* Models which should use the vendor backlight interface,
|
||||
* because of broken ACPI video backlight control.
|
||||
*/
|
||||
{
|
||||
/* https://bugzilla.redhat.com/show_bug.cgi?id=1128309 */
|
||||
.callback = video_detect_force_vendor,
|
||||
@ -166,6 +170,7 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||
},
|
||||
},
|
||||
{
|
||||
/* https://bugs.launchpad.net/bugs/1000146 */
|
||||
.callback = video_detect_force_vendor,
|
||||
/* Asus X101CH */
|
||||
.matches = {
|
||||
@ -190,6 +195,7 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||
},
|
||||
},
|
||||
{
|
||||
/* https://bugs.launchpad.net/bugs/1000146 */
|
||||
.callback = video_detect_force_vendor,
|
||||
/* Asus 1015CX */
|
||||
.matches = {
|
||||
@ -197,14 +203,6 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "1015CX"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_vendor,
|
||||
/* GIGABYTE GB-BXBT-2807 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "GB-BXBT-2807"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_vendor,
|
||||
/* Samsung N150/N210/N220 */
|
||||
@ -232,14 +230,6 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "NC210/NC110"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_vendor,
|
||||
/* Sony VPCEH3U1E */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "VPCEH3U1E"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_vendor,
|
||||
/* Xiaomi Mi Pad 2 */
|
||||
@ -249,6 +239,19 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||
},
|
||||
},
|
||||
|
||||
/*
|
||||
* Models which should use the vendor backlight interface,
|
||||
* because of broken native backlight control.
|
||||
*/
|
||||
{
|
||||
.callback = video_detect_force_vendor,
|
||||
/* Sony Vaio PCG-FRV35 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PCG-FRV35"),
|
||||
},
|
||||
},
|
||||
|
||||
/*
|
||||
* Toshiba models with Transflective display, these need to use
|
||||
* the toshiba_acpi vendor driver for proper Transflective handling.
|
||||
@ -400,8 +403,8 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "530U4E/540U4E"),
|
||||
},
|
||||
},
|
||||
/* https://bugs.launchpad.net/bugs/1894667 */
|
||||
{
|
||||
/* https://bugs.launchpad.net/bugs/1894667 */
|
||||
.callback = video_detect_force_video,
|
||||
/* HP 635 Notebook */
|
||||
.matches = {
|
||||
@ -609,6 +612,23 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "N250P"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* https://bugzilla.kernel.org/show_bug.cgi?id=202401 */
|
||||
.callback = video_detect_force_native,
|
||||
/* Sony Vaio VPCEH3U1E */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "VPCEH3U1E"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_native,
|
||||
/* Sony Vaio VPCY11S1E */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "VPCY11S1E"),
|
||||
},
|
||||
},
|
||||
|
||||
/*
|
||||
* These Toshibas have a broken acpi-video interface for brightness
|
||||
@ -671,6 +691,14 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 9020M"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_none,
|
||||
/* GIGABYTE GB-BXBT-2807 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "GB-BXBT-2807"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_none,
|
||||
/* MSI MS-7721 */
|
||||
@ -687,6 +715,16 @@ static bool google_cros_ec_present(void)
|
||||
return acpi_dev_found("GOOG0004") || acpi_dev_found("GOOG000C");
|
||||
}
|
||||
|
||||
/*
|
||||
* Windows 8 and newer no longer use the ACPI video interface, so it often
|
||||
* does not work. So on win8+ systems prefer native brightness control.
|
||||
* Chromebooks should always prefer native backlight control.
|
||||
*/
|
||||
static bool prefer_native_over_acpi_video(void)
|
||||
{
|
||||
return acpi_osi_is_win8() || google_cros_ec_present();
|
||||
}
|
||||
|
||||
/*
|
||||
* Determine which type of backlight interface to use on this system,
|
||||
* First check cmdline, then dmi quirks, then do autodetect.
|
||||
@ -732,28 +770,16 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native)
|
||||
if (apple_gmux_present())
|
||||
return acpi_backlight_apple_gmux;
|
||||
|
||||
/* Chromebooks should always prefer native backlight control. */
|
||||
if (google_cros_ec_present() && native_available)
|
||||
/* Use ACPI video if available, except when native should be preferred. */
|
||||
if ((video_caps & ACPI_VIDEO_BACKLIGHT) &&
|
||||
!(native_available && prefer_native_over_acpi_video()))
|
||||
return acpi_backlight_video;
|
||||
|
||||
/* Use native if available */
|
||||
if (native_available)
|
||||
return acpi_backlight_native;
|
||||
|
||||
/* On systems with ACPI video use either native or ACPI video. */
|
||||
if (video_caps & ACPI_VIDEO_BACKLIGHT) {
|
||||
/*
|
||||
* Windows 8 and newer no longer use the ACPI video interface,
|
||||
* so it often does not work. If the ACPI tables are written
|
||||
* for win8 and native brightness ctl is available, use that.
|
||||
*
|
||||
* The native check deliberately is inside the if acpi-video
|
||||
* block on older devices without acpi-video support native
|
||||
* is usually not the best choice.
|
||||
*/
|
||||
if (acpi_osi_is_win8() && native_available)
|
||||
return acpi_backlight_native;
|
||||
else
|
||||
return acpi_backlight_video;
|
||||
}
|
||||
|
||||
/* No ACPI video (old hw), use vendor specific fw methods. */
|
||||
/* No ACPI video/native (old hw), use vendor specific fw methods. */
|
||||
return acpi_backlight_vendor;
|
||||
}
|
||||
|
||||
@ -765,18 +791,6 @@ EXPORT_SYMBOL(acpi_video_get_backlight_type);
|
||||
|
||||
bool acpi_video_backlight_use_native(void)
|
||||
{
|
||||
/*
|
||||
* Call __acpi_video_get_backlight_type() to let it know that
|
||||
* a native backlight is available.
|
||||
*/
|
||||
__acpi_video_get_backlight_type(true);
|
||||
|
||||
/*
|
||||
* For now just always return true. There is a whole bunch of laptop
|
||||
* models where (video_caps & ACPI_VIDEO_BACKLIGHT) is false causing
|
||||
* __acpi_video_get_backlight_type() to return vendor, while these
|
||||
* models only have a native backlight control.
|
||||
*/
|
||||
return true;
|
||||
return __acpi_video_get_backlight_type(true) == acpi_backlight_native;
|
||||
}
|
||||
EXPORT_SYMBOL(acpi_video_backlight_use_native);
|
||||
|
@ -460,4 +460,14 @@ static inline void acpi_thermal_cpufreq_exit(struct cpufreq_policy *policy)
|
||||
}
|
||||
#endif /* CONFIG_CPU_FREQ */
|
||||
|
||||
#ifdef CONFIG_ACPI_PROCESSOR_IDLE
|
||||
extern int acpi_processor_ffh_lpi_probe(unsigned int cpu);
|
||||
extern int acpi_processor_ffh_lpi_enter(struct acpi_lpi_state *lpi);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ACPI_HOTPLUG_CPU
|
||||
extern int arch_register_cpu(int cpu);
|
||||
extern void arch_unregister_cpu(int cpu);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -1137,6 +1137,7 @@ int acpi_subsys_freeze(struct device *dev);
|
||||
int acpi_subsys_poweroff(struct device *dev);
|
||||
void acpi_ec_mark_gpe_for_wake(void);
|
||||
void acpi_ec_set_gpe_wake_mask(u8 action);
|
||||
int acpi_subsys_restore_early(struct device *dev);
|
||||
#else
|
||||
static inline int acpi_subsys_prepare(struct device *dev) { return 0; }
|
||||
static inline void acpi_subsys_complete(struct device *dev) {}
|
||||
@ -1145,6 +1146,7 @@ static inline int acpi_subsys_suspend_noirq(struct device *dev) { return 0; }
|
||||
static inline int acpi_subsys_suspend(struct device *dev) { return 0; }
|
||||
static inline int acpi_subsys_freeze(struct device *dev) { return 0; }
|
||||
static inline int acpi_subsys_poweroff(struct device *dev) { return 0; }
|
||||
static inline int acpi_subsys_restore_early(struct device *dev) { return 0; }
|
||||
static inline void acpi_ec_mark_gpe_for_wake(void) {}
|
||||
static inline void acpi_ec_set_gpe_wake_mask(u8 action) {}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user