ACPI updates for 6.13-rc1

- Fix _CPC register setting issue for registers located in memory in
    the ACPI CPPC library code (Lifeng Zheng).
 
  - Use DEFINE_SIMPLE_DEV_PM_OPS in the ACPI battery driver, make it use
    devm_ for initializing mutexes and allocating driver data, and make
    it check the register_pm_notifier() return value (Thomas Weißschuh,
    Andy Shevchenko).
 
  - Make the ACPI EC driver support compile-time conditional and allow
    ACPI to be built without CONFIG_HAS_IOPORT (Arnd Bergmann).
 
  - Remove a redundant error check from the pfr_telemetry driver (Colin
    Ian King).
 
  - Rearrange the processor_perflib code in the ACPI processor driver
    to avoid compiling x86-specific code on other architectures (Arnd
    Bergmann).
 
  - Add adev NULL check to acpi_quirk_skip_serdev_enumeration() and
    make UART skip quirks work on PCI UARTs without an UID (Hans de
    Goede).
 
  - Force native backlight handling Apple MacbookPro11,2 and Air7,2 in
    the ACPI video driver (Jonathan Denose).
 
  - Switch several ACPI platform drivers back to using struct
    platform_driver::remove() (Uwe Kleine-König).
 
  - Replace strcpy() with strscpy() in multiple places in the ACPI
    subsystem (Muhammad Qasim Abdul Majeed, Abdul Rahim).
 -----BEGIN PGP SIGNATURE-----
 
 iQJGBAABCAAwFiEE4fcc61cGeeHD/fCwgsRv/nhiVHEFAmc3sGASHHJqd0Byand5
 c29ja2kubmV0AAoJEILEb/54YlRxSJkP/i0bX629JC+K794y+a3m+3tDEFlBYnFA
 fRD2mADWei2V7xQr3PnKIwcREEEv7Wx7RXAH01R8DFW9cMRWMsCY7nZWw4p4TofZ
 TyaPhJAwzNqk+d1yfFgEXwsDiyDi9m8ozpYwUS2XCt7jDaBnBc5xEC/urVApEjbQ
 AMPuGg5nB5BF+mv7Lik84EWwVcg9pYJ0XgWfQGevp3q9NXiBLx8LOT9V/bDkjdHH
 yLaowfsdUUNJZULjtfi6pWEI8QfCoZwa7p+zWO0qzagPaK4F1nO0nD+553gpXegy
 rP5PRimfiVpUmQfm8iYGFHpFr5j3RTOfDkEczdVkvnQkeA4IduN0QCtfEuXvUNuB
 qGrqMkxjn4ji2xA74ujb9hnBKnNoRW8C2Y6/2OGZOpCq6enR1xQMItOFMuFhNnCP
 ZGOm03o0m+wGJT3ObTAPVOX/JRwul47GbIdby7boS4wHnbKNY0CKHZWskBbTM6O5
 IhmbMyGfNb4Rep7wTofAO/r8JWTxKdxa4OANsF94IsOP2+lLAOWcM0J6JjJ1X8DE
 FunVckca8ocSoQj92S513knjpJXml54Bh7G+CLbpX8sZsdz05Ynq7T8Fr1uMI+HI
 UEvTsfNGIYLVNea1gG6fYmj7owCu6v29zZKZTplaE3tC9O4FxysYt8Tcec3x2epy
 5Q/OyydVEtTd
 =ejtE
 -----END PGP SIGNATURE-----

Merge tag 'acpi-6.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull ACPI updates from Rafael Wysocki:
 "These include a couple of fixes, a new ACPI backlight quirk for Apple
  MacbookPro11,2 and Air7,2 and a bunch of cleanups:

   - Fix _CPC register setting issue for registers located in memory in
     the ACPI CPPC library code (Lifeng Zheng)

   - Use DEFINE_SIMPLE_DEV_PM_OPS in the ACPI battery driver, make it
     use devm_ for initializing mutexes and allocating driver data, and
     make it check the register_pm_notifier() return value (Thomas
     Weißschuh, Andy Shevchenko)

   - Make the ACPI EC driver support compile-time conditional and allow
     ACPI to be built without CONFIG_HAS_IOPORT (Arnd Bergmann)

   - Remove a redundant error check from the pfr_telemetry driver (Colin
     Ian King)

   - Rearrange the processor_perflib code in the ACPI processor driver
     to avoid compiling x86-specific code on other architectures (Arnd
     Bergmann)

   - Add adev NULL check to acpi_quirk_skip_serdev_enumeration() and
     make UART skip quirks work on PCI UARTs without an UID (Hans de
     Goede)

   - Force native backlight handling Apple MacbookPro11,2 and Air7,2 in
     the ACPI video driver (Jonathan Denose)

   - Switch several ACPI platform drivers back to using struct
     platform_driver::remove() (Uwe Kleine-König)

   - Replace strcpy() with strscpy() in multiple places in the ACPI
     subsystem (Muhammad Qasim Abdul Majeed, Abdul Rahim)"

* tag 'acpi-6.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (24 commits)
  ACPI: video: force native for Apple MacbookPro11,2 and Air7,2
  ACPI: CPPC: Fix _CPC register setting issue
  ACPI: Switch back to struct platform_driver::remove()
  ACPI: x86: Add adev NULL check to acpi_quirk_skip_serdev_enumeration()
  ACPI: x86: Make UART skip quirks work on PCI UARTs without an UID
  ACPI: allow building without CONFIG_HAS_IOPORT
  ACPI: processor_perflib: extend X86 dependency
  ACPI: scan: Use strscpy() instead of strcpy()
  ACPI: SBSHC: Use strscpy() instead of strcpy()
  ACPI: SBS: Use strscpy() instead of strcpy()
  ACPI: power: Use strscpy() instead of strcpy()
  ACPI: pci_root: Use strscpy() instead of strcpy()
  ACPI: pci_link: Use strscpy() instead of strcpy()
  ACPI: event: Use strscpy() instead of strcpy()
  ACPI: EC: Use strscpy() instead of strcpy()
  ACPI: APD: Use strscpy() instead of strcpy()
  ACPI: thermal: Use strscpy() instead of strcpy()
  ACPI: battery: Check for error code from devm_mutex_init() call
  ACPI: EC: make EC support compile-time conditional
  ACPI: pfr_telemetry: remove redundant error check on ret
  ...
This commit is contained in:
Linus Torvalds 2024-11-19 11:17:53 -08:00
commit 4e9ad033b4
38 changed files with 190 additions and 102 deletions

View File

@ -132,8 +132,17 @@ config ACPI_REV_OVERRIDE_POSSIBLE
makes it possible to force the kernel to return "5" as the supported makes it possible to force the kernel to return "5" as the supported
ACPI revision via the "acpi_rev_override" command line switch. ACPI revision via the "acpi_rev_override" command line switch.
config ACPI_EC
bool "Embedded Controller"
depends on HAS_IOPORT
default X86
help
This driver handles communication with the microcontroller
on many x86 laptops and other machines.
config ACPI_EC_DEBUGFS config ACPI_EC_DEBUGFS
tristate "EC read/write access through /sys/kernel/debug/ec" tristate "EC read/write access through /sys/kernel/debug/ec"
depends on ACPI_EC
help help
Say N to disable Embedded Controller /sys/kernel/debug interface Say N to disable Embedded Controller /sys/kernel/debug interface
@ -433,7 +442,7 @@ config ACPI_HOTPLUG_IOAPIC
config ACPI_SBS config ACPI_SBS
tristate "Smart Battery System" tristate "Smart Battery System"
depends on X86 depends on X86 && ACPI_EC
select POWER_SUPPLY select POWER_SUPPLY
help help
This driver supports the Smart Battery System, another This driver supports the Smart Battery System, another

View File

@ -41,7 +41,7 @@ acpi-y += resource.o
acpi-y += acpi_processor.o acpi-y += acpi_processor.o
acpi-y += processor_core.o acpi-y += processor_core.o
acpi-$(CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC) += processor_pdc.o acpi-$(CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC) += processor_pdc.o
acpi-y += ec.o acpi-$(CONFIG_ACPI_EC) += ec.o
acpi-$(CONFIG_ACPI_DOCK) += dock.o acpi-$(CONFIG_ACPI_DOCK) += dock.o
acpi-$(CONFIG_PCI) += pci_root.o pci_link.o pci_irq.o acpi-$(CONFIG_PCI) += pci_root.o pci_link.o pci_irq.o
obj-$(CONFIG_ACPI_MCFG) += pci_mcfg.o obj-$(CONFIG_ACPI_MCFG) += pci_mcfg.o

View File

@ -290,7 +290,7 @@ static void acpi_ac_remove(struct platform_device *pdev)
static struct platform_driver acpi_ac_driver = { static struct platform_driver acpi_ac_driver = {
.probe = acpi_ac_probe, .probe = acpi_ac_probe,
.remove_new = acpi_ac_remove, .remove = acpi_ac_remove,
.driver = { .driver = {
.name = "ac", .name = "ac",
.acpi_match_table = ac_device_ids, .acpi_match_table = ac_device_ids,

View File

@ -86,7 +86,7 @@ static int fch_misc_setup(struct apd_private_data *pdata)
if (!clk_data->name) if (!clk_data->name)
return -ENOMEM; return -ENOMEM;
strcpy(clk_data->name, obj->string.pointer); strscpy(clk_data->name, obj->string.pointer, obj->string.length);
} else { } else {
/* Set default name to mclk if entry missing in firmware */ /* Set default name to mclk if entry missing in firmware */
clk_data->name = "mclk"; clk_data->name = "mclk";

View File

@ -462,7 +462,7 @@ MODULE_DEVICE_TABLE(acpi, pad_device_ids);
static struct platform_driver acpi_pad_driver = { static struct platform_driver acpi_pad_driver = {
.probe = acpi_pad_probe, .probe = acpi_pad_probe,
.remove_new = acpi_pad_remove, .remove = acpi_pad_remove,
.driver = { .driver = {
.dev_groups = acpi_pad_groups, .dev_groups = acpi_pad_groups,
.name = "processor_aggregator", .name = "processor_aggregator",

View File

@ -684,7 +684,7 @@ static struct platform_driver acpi_tad_driver = {
.acpi_match_table = acpi_tad_ids, .acpi_match_table = acpi_tad_ids,
}, },
.probe = acpi_tad_probe, .probe = acpi_tad_probe,
.remove_new = acpi_tad_remove, .remove = acpi_tad_remove,
}; };
MODULE_DEVICE_TABLE(acpi, acpi_tad_ids); MODULE_DEVICE_TABLE(acpi, acpi_tad_ids);

View File

@ -880,7 +880,7 @@ static struct platform_device *einj_dev;
* triggering a section mismatch warning. * triggering a section mismatch warning.
*/ */
static struct platform_driver einj_driver __refdata = { static struct platform_driver einj_driver __refdata = {
.remove_new = __exit_p(einj_remove), .remove = __exit_p(einj_remove),
.driver = { .driver = {
.name = "acpi-einj", .name = "acpi-einj",
}, },

View File

@ -1605,7 +1605,7 @@ static struct platform_driver ghes_platform_driver = {
.name = "GHES", .name = "GHES",
}, },
.probe = ghes_probe, .probe = ghes_probe,
.remove_new = ghes_remove, .remove = ghes_remove,
}; };
void __init acpi_ghes_init(void) void __init acpi_ghes_init(void)

View File

@ -88,7 +88,7 @@ static struct platform_driver agdi_driver = {
.name = "agdi", .name = "agdi",
}, },
.probe = agdi_probe, .probe = agdi_probe,
.remove_new = agdi_remove, .remove = agdi_remove,
}; };
void __init acpi_agdi_init(void) void __init acpi_agdi_init(void)

View File

@ -1218,15 +1218,21 @@ static int acpi_battery_add(struct acpi_device *device)
if (device->dep_unmet) if (device->dep_unmet)
return -EPROBE_DEFER; return -EPROBE_DEFER;
battery = kzalloc(sizeof(struct acpi_battery), GFP_KERNEL); battery = devm_kzalloc(&device->dev, sizeof(*battery), GFP_KERNEL);
if (!battery) if (!battery)
return -ENOMEM; return -ENOMEM;
battery->device = device; battery->device = device;
strscpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME); strscpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
strscpy(acpi_device_class(device), ACPI_BATTERY_CLASS); strscpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
device->driver_data = battery; device->driver_data = battery;
mutex_init(&battery->lock); result = devm_mutex_init(&device->dev, &battery->lock);
mutex_init(&battery->sysfs_lock); if (result)
return result;
result = devm_mutex_init(&device->dev, &battery->sysfs_lock);
if (result)
return result;
if (acpi_has_method(battery->device->handle, "_BIX")) if (acpi_has_method(battery->device->handle, "_BIX"))
set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags); set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags);
@ -1238,7 +1244,9 @@ static int acpi_battery_add(struct acpi_device *device)
device->status.battery_present ? "present" : "absent"); device->status.battery_present ? "present" : "absent");
battery->pm_nb.notifier_call = battery_notify; battery->pm_nb.notifier_call = battery_notify;
register_pm_notifier(&battery->pm_nb); result = register_pm_notifier(&battery->pm_nb);
if (result)
goto fail;
device_init_wakeup(&device->dev, 1); device_init_wakeup(&device->dev, 1);
@ -1254,9 +1262,6 @@ fail_pm:
unregister_pm_notifier(&battery->pm_nb); unregister_pm_notifier(&battery->pm_nb);
fail: fail:
sysfs_remove_battery(battery); sysfs_remove_battery(battery);
mutex_destroy(&battery->lock);
mutex_destroy(&battery->sysfs_lock);
kfree(battery);
return result; return result;
} }
@ -1276,13 +1281,8 @@ static void acpi_battery_remove(struct acpi_device *device)
device_init_wakeup(&device->dev, 0); device_init_wakeup(&device->dev, 0);
unregister_pm_notifier(&battery->pm_nb); unregister_pm_notifier(&battery->pm_nb);
sysfs_remove_battery(battery); sysfs_remove_battery(battery);
mutex_destroy(&battery->lock);
mutex_destroy(&battery->sysfs_lock);
kfree(battery);
} }
#ifdef CONFIG_PM_SLEEP
/* this is needed to learn about changes made in suspended state */ /* this is needed to learn about changes made in suspended state */
static int acpi_battery_resume(struct device *dev) static int acpi_battery_resume(struct device *dev)
{ {
@ -1299,11 +1299,8 @@ static int acpi_battery_resume(struct device *dev)
acpi_battery_update(battery, true); acpi_battery_update(battery, true);
return 0; return 0;
} }
#else
#define acpi_battery_resume NULL
#endif
static SIMPLE_DEV_PM_OPS(acpi_battery_pm, NULL, acpi_battery_resume); static DEFINE_SIMPLE_DEV_PM_OPS(acpi_battery_pm, NULL, acpi_battery_resume);
static struct acpi_driver acpi_battery_driver = { static struct acpi_driver acpi_battery_driver = {
.name = "battery", .name = "battery",
@ -1313,7 +1310,7 @@ static struct acpi_driver acpi_battery_driver = {
.add = acpi_battery_add, .add = acpi_battery_add,
.remove = acpi_battery_remove, .remove = acpi_battery_remove,
}, },
.drv.pm = &acpi_battery_pm, .drv.pm = pm_sleep_ptr(&acpi_battery_pm),
.drv.probe_type = PROBE_PREFER_ASYNCHRONOUS, .drv.probe_type = PROBE_PREFER_ASYNCHRONOUS,
}; };

View File

@ -1011,7 +1011,8 @@ static int cpc_read(int cpu, struct cpc_register_resource *reg_res, u64 *val)
*val = 0; *val = 0;
size = GET_BIT_WIDTH(reg); size = GET_BIT_WIDTH(reg);
if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_IO) { if (IS_ENABLED(CONFIG_HAS_IOPORT) &&
reg->space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
u32 val_u32; u32 val_u32;
acpi_status status; acpi_status status;
@ -1085,7 +1086,8 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val)
size = GET_BIT_WIDTH(reg); size = GET_BIT_WIDTH(reg);
if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_IO) { if (IS_ENABLED(CONFIG_HAS_IOPORT) &&
reg->space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
acpi_status status; acpi_status status;
status = acpi_os_write_port((acpi_io_address)reg->address, status = acpi_os_write_port((acpi_io_address)reg->address,
@ -1140,7 +1142,6 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val)
return -EFAULT; return -EFAULT;
} }
val = MASK_VAL_WRITE(reg, prev_val, val); val = MASK_VAL_WRITE(reg, prev_val, val);
val |= prev_val;
} }
switch (size) { switch (size) {

View File

@ -158,7 +158,7 @@ MODULE_DEVICE_TABLE(acpi, pch_fivr_device_ids);
static struct platform_driver pch_fivr_driver = { static struct platform_driver pch_fivr_driver = {
.probe = pch_fivr_add, .probe = pch_fivr_add,
.remove_new = pch_fivr_remove, .remove = pch_fivr_remove,
.driver = { .driver = {
.name = "dptf_pch_fivr", .name = "dptf_pch_fivr",
.acpi_match_table = pch_fivr_device_ids, .acpi_match_table = pch_fivr_device_ids,

View File

@ -242,7 +242,7 @@ MODULE_DEVICE_TABLE(acpi, int3407_device_ids);
static struct platform_driver dptf_power_driver = { static struct platform_driver dptf_power_driver = {
.probe = dptf_power_add, .probe = dptf_power_add,
.remove_new = dptf_power_remove, .remove = dptf_power_remove,
.driver = { .driver = {
.name = "dptf_power", .name = "dptf_power",
.acpi_match_table = int3407_device_ids, .acpi_match_table = int3407_device_ids,

View File

@ -1677,8 +1677,8 @@ static int acpi_ec_add(struct acpi_device *device)
struct acpi_ec *ec; struct acpi_ec *ec;
int ret; int ret;
strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME); strscpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_EC_CLASS); strscpy(acpi_device_class(device), ACPI_EC_CLASS);
if (boot_ec && (boot_ec->handle == device->handle || if (boot_ec && (boot_ec->handle == device->handle ||
!strcmp(acpi_device_hid(device), ACPI_ECDT_HID))) { !strcmp(acpi_device_hid(device), ACPI_ECDT_HID))) {

View File

@ -28,8 +28,8 @@ int acpi_notifier_call_chain(struct acpi_device *dev, u32 type, u32 data)
{ {
struct acpi_bus_event event; struct acpi_bus_event event;
strcpy(event.device_class, dev->pnp.device_class); strscpy(event.device_class, dev->pnp.device_class);
strcpy(event.bus_id, dev->pnp.bus_id); strscpy(event.bus_id, dev->pnp.bus_id);
event.type = type; event.type = type;
event.data = data; event.data = data;
return (blocking_notifier_call_chain(&acpi_chain_head, 0, (void *)&event) return (blocking_notifier_call_chain(&acpi_chain_head, 0, (void *)&event)

View File

@ -185,7 +185,7 @@ static const struct acpi_device_id ged_acpi_ids[] = {
static struct platform_driver ged_driver = { static struct platform_driver ged_driver = {
.probe = ged_probe, .probe = ged_probe,
.remove_new = ged_remove, .remove = ged_remove,
.shutdown = ged_shutdown, .shutdown = ged_shutdown,
.driver = { .driver = {
.name = MODULE_NAME, .name = MODULE_NAME,

View File

@ -448,7 +448,7 @@ static const struct dev_pm_ops acpi_fan_pm = {
static struct platform_driver acpi_fan_driver = { static struct platform_driver acpi_fan_driver = {
.probe = acpi_fan_probe, .probe = acpi_fan_probe,
.remove_new = acpi_fan_remove, .remove = acpi_fan_remove,
.driver = { .driver = {
.name = "acpi-fan", .name = "acpi-fan",
.acpi_match_table = fan_device_ids, .acpi_match_table = fan_device_ids,

View File

@ -215,6 +215,8 @@ extern struct acpi_ec *first_ec;
/* External interfaces use first EC only, so remember */ /* External interfaces use first EC only, so remember */
typedef int (*acpi_ec_query_func) (void *data); typedef int (*acpi_ec_query_func) (void *data);
#ifdef CONFIG_ACPI_EC
void acpi_ec_init(void); void acpi_ec_init(void);
void acpi_ec_ecdt_probe(void); void acpi_ec_ecdt_probe(void);
void acpi_ec_dsdt_probe(void); void acpi_ec_dsdt_probe(void);
@ -231,6 +233,29 @@ void acpi_ec_flush_work(void);
bool acpi_ec_dispatch_gpe(void); bool acpi_ec_dispatch_gpe(void);
#endif #endif
#else
static inline void acpi_ec_init(void) {}
static inline void acpi_ec_ecdt_probe(void) {}
static inline void acpi_ec_dsdt_probe(void) {}
static inline void acpi_ec_block_transactions(void) {}
static inline void acpi_ec_unblock_transactions(void) {}
static inline int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit,
acpi_handle handle, acpi_ec_query_func func,
void *data)
{
return -ENXIO;
}
static inline void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit) {}
static inline void acpi_ec_register_opregions(struct acpi_device *adev) {}
static inline void acpi_ec_flush_work(void) {}
static inline bool acpi_ec_dispatch_gpe(void)
{
return false;
}
#endif
/*-------------------------------------------------------------------------- /*--------------------------------------------------------------------------
Suspend/Resume Suspend/Resume

View File

@ -642,6 +642,15 @@ acpi_status acpi_os_read_port(acpi_io_address port, u32 *value, u32 width)
{ {
u32 dummy; u32 dummy;
if (!IS_ENABLED(CONFIG_HAS_IOPORT)) {
/*
* set all-1 result as if reading from non-existing
* I/O port
*/
*value = GENMASK(width, 0);
return AE_NOT_IMPLEMENTED;
}
if (value) if (value)
*value = 0; *value = 0;
else else
@ -665,6 +674,9 @@ EXPORT_SYMBOL(acpi_os_read_port);
acpi_status acpi_os_write_port(acpi_io_address port, u32 value, u32 width) acpi_status acpi_os_write_port(acpi_io_address port, u32 value, u32 width)
{ {
if (!IS_ENABLED(CONFIG_HAS_IOPORT))
return AE_NOT_IMPLEMENTED;
if (width <= 8) { if (width <= 8) {
outb(value, port); outb(value, port);
} else if (width <= 16) { } else if (width <= 16) {

View File

@ -714,8 +714,8 @@ static int acpi_pci_link_add(struct acpi_device *device,
return -ENOMEM; return -ENOMEM;
link->device = device; link->device = device;
strcpy(acpi_device_name(device), ACPI_PCI_LINK_DEVICE_NAME); strscpy(acpi_device_name(device), ACPI_PCI_LINK_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_PCI_LINK_CLASS); strscpy(acpi_device_class(device), ACPI_PCI_LINK_CLASS);
device->driver_data = link; device->driver_data = link;
mutex_lock(&acpi_link_lock); mutex_lock(&acpi_link_lock);

View File

@ -689,8 +689,8 @@ static int acpi_pci_root_add(struct acpi_device *device,
root->device = device; root->device = device;
root->segment = segment & 0xFFFF; root->segment = segment & 0xFFFF;
strcpy(acpi_device_name(device), ACPI_PCI_ROOT_DEVICE_NAME); strscpy(acpi_device_name(device), ACPI_PCI_ROOT_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS); strscpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS);
device->driver_data = root; device->driver_data = root;
if (hotadd && dmar_device_add(handle)) { if (hotadd && dmar_device_add(handle)) {

View File

@ -272,9 +272,6 @@ static long pfrt_log_ioctl(struct file *file, unsigned int cmd, unsigned long ar
case PFRT_LOG_IOC_GET_INFO: case PFRT_LOG_IOC_GET_INFO:
info.log_level = get_pfrt_log_level(pfrt_log_dev); info.log_level = get_pfrt_log_level(pfrt_log_dev);
if (ret < 0)
return ret;
info.log_type = pfrt_log_dev->info.log_type; info.log_type = pfrt_log_dev->info.log_type;
info.log_revid = pfrt_log_dev->info.log_revid; info.log_revid = pfrt_log_dev->info.log_revid;
if (copy_to_user(p, &info, sizeof(info))) if (copy_to_user(p, &info, sizeof(info)))
@ -425,7 +422,7 @@ static struct platform_driver acpi_pfrt_log_driver = {
.acpi_match_table = acpi_pfrt_log_ids, .acpi_match_table = acpi_pfrt_log_ids,
}, },
.probe = acpi_pfrt_log_probe, .probe = acpi_pfrt_log_probe,
.remove_new = acpi_pfrt_log_remove, .remove = acpi_pfrt_log_remove,
}; };
module_platform_driver(acpi_pfrt_log_driver); module_platform_driver(acpi_pfrt_log_driver);

View File

@ -565,7 +565,7 @@ static struct platform_driver acpi_pfru_driver = {
.acpi_match_table = acpi_pfru_ids, .acpi_match_table = acpi_pfru_ids,
}, },
.probe = acpi_pfru_probe, .probe = acpi_pfru_probe,
.remove_new = acpi_pfru_remove, .remove = acpi_pfru_remove,
}; };
module_platform_driver(acpi_pfru_driver); module_platform_driver(acpi_pfru_driver);

View File

@ -950,8 +950,8 @@ struct acpi_device *acpi_add_power_resource(acpi_handle handle)
mutex_init(&resource->resource_lock); mutex_init(&resource->resource_lock);
INIT_LIST_HEAD(&resource->list_node); INIT_LIST_HEAD(&resource->list_node);
INIT_LIST_HEAD(&resource->dependents); INIT_LIST_HEAD(&resource->dependents);
strcpy(acpi_device_name(device), ACPI_POWER_DEVICE_NAME); strscpy(acpi_device_name(device), ACPI_POWER_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_POWER_CLASS); strscpy(acpi_device_class(device), ACPI_POWER_CLASS);
device->power.state = ACPI_STATE_UNKNOWN; device->power.state = ACPI_STATE_UNKNOWN;
device->flags.match_driver = true; device->flags.match_driver = true;

View File

@ -24,8 +24,6 @@
#define ACPI_PROCESSOR_FILE_PERFORMANCE "performance" #define ACPI_PROCESSOR_FILE_PERFORMANCE "performance"
static DEFINE_MUTEX(performance_mutex);
/* /*
* _PPC support is implemented as a CPUfreq policy notifier: * _PPC support is implemented as a CPUfreq policy notifier:
* This means each time a CPUfreq driver registered also with * This means each time a CPUfreq driver registered also with
@ -209,6 +207,10 @@ void acpi_processor_ppc_exit(struct cpufreq_policy *policy)
} }
} }
#ifdef CONFIG_X86
static DEFINE_MUTEX(performance_mutex);
static int acpi_processor_get_performance_control(struct acpi_processor *pr) static int acpi_processor_get_performance_control(struct acpi_processor *pr)
{ {
int result = 0; int result = 0;
@ -267,7 +269,6 @@ end:
return result; return result;
} }
#ifdef CONFIG_X86
/* /*
* Some AMDs have 50MHz frequency multiples, but only provide 100MHz rounding * Some AMDs have 50MHz frequency multiples, but only provide 100MHz rounding
* in their ACPI data. Calculate the real values and fix up the _PSS data. * in their ACPI data. Calculate the real values and fix up the _PSS data.
@ -298,9 +299,6 @@ static void amd_fixup_frequency(struct acpi_processor_px *px, int i)
px->core_frequency = (100 * (fid + 8)) >> did; px->core_frequency = (100 * (fid + 8)) >> did;
} }
} }
#else
static void amd_fixup_frequency(struct acpi_processor_px *px, int i) {};
#endif
static int acpi_processor_get_performance_states(struct acpi_processor *pr) static int acpi_processor_get_performance_states(struct acpi_processor *pr)
{ {
@ -440,13 +438,11 @@ int acpi_processor_get_performance_info(struct acpi_processor *pr)
* the BIOS is older than the CPU and does not know its frequencies * the BIOS is older than the CPU and does not know its frequencies
*/ */
update_bios: update_bios:
#ifdef CONFIG_X86
if (acpi_has_method(pr->handle, "_PPC")) { if (acpi_has_method(pr->handle, "_PPC")) {
if(boot_cpu_has(X86_FEATURE_EST)) if(boot_cpu_has(X86_FEATURE_EST))
pr_warn(FW_BUG "BIOS needs update for CPU " pr_warn(FW_BUG "BIOS needs update for CPU "
"frequency support\n"); "frequency support\n");
} }
#endif
return result; return result;
} }
EXPORT_SYMBOL_GPL(acpi_processor_get_performance_info); EXPORT_SYMBOL_GPL(acpi_processor_get_performance_info);
@ -788,3 +784,4 @@ unlock:
mutex_unlock(&performance_mutex); mutex_unlock(&performance_mutex);
} }
EXPORT_SYMBOL(acpi_processor_unregister_performance); EXPORT_SYMBOL(acpi_processor_unregister_performance);
#endif

View File

@ -644,8 +644,8 @@ static int acpi_sbs_add(struct acpi_device *device)
sbs->hc = acpi_driver_data(acpi_dev_parent(device)); sbs->hc = acpi_driver_data(acpi_dev_parent(device));
sbs->device = device; sbs->device = device;
strcpy(acpi_device_name(device), ACPI_SBS_DEVICE_NAME); strscpy(acpi_device_name(device), ACPI_SBS_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_SBS_CLASS); strscpy(acpi_device_class(device), ACPI_SBS_CLASS);
device->driver_data = sbs; device->driver_data = sbs;
result = acpi_charger_add(sbs); result = acpi_charger_add(sbs);

View File

@ -14,6 +14,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include "sbshc.h" #include "sbshc.h"
#include "internal.h"
#define ACPI_SMB_HC_CLASS "smbus_host_ctl" #define ACPI_SMB_HC_CLASS "smbus_host_ctl"
#define ACPI_SMB_HC_DEVICE_NAME "ACPI SMBus HC" #define ACPI_SMB_HC_DEVICE_NAME "ACPI SMBus HC"
@ -236,12 +237,6 @@ static int smbus_alarm(void *context)
return 0; return 0;
} }
typedef int (*acpi_ec_query_func) (void *data);
extern int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit,
acpi_handle handle, acpi_ec_query_func func,
void *data);
static int acpi_smbus_hc_add(struct acpi_device *device) static int acpi_smbus_hc_add(struct acpi_device *device)
{ {
int status; int status;
@ -257,8 +252,8 @@ static int acpi_smbus_hc_add(struct acpi_device *device)
return -EIO; return -EIO;
} }
strcpy(acpi_device_name(device), ACPI_SMB_HC_DEVICE_NAME); strscpy(acpi_device_name(device), ACPI_SMB_HC_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_SMB_HC_CLASS); strscpy(acpi_device_class(device), ACPI_SMB_HC_CLASS);
hc = kzalloc(sizeof(struct acpi_smb_hc), GFP_KERNEL); hc = kzalloc(sizeof(struct acpi_smb_hc), GFP_KERNEL);
if (!hc) if (!hc)
@ -278,8 +273,6 @@ static int acpi_smbus_hc_add(struct acpi_device *device)
return 0; return 0;
} }
extern void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit);
static void acpi_smbus_hc_remove(struct acpi_device *device) static void acpi_smbus_hc_remove(struct acpi_device *device)
{ {
struct acpi_smb_hc *hc; struct acpi_smb_hc *hc;

View File

@ -1179,19 +1179,19 @@ static void acpi_device_get_busid(struct acpi_device *device)
* TBD: Shouldn't this value be unique (within the ACPI namespace)? * TBD: Shouldn't this value be unique (within the ACPI namespace)?
*/ */
if (!acpi_dev_parent(device)) { if (!acpi_dev_parent(device)) {
strcpy(device->pnp.bus_id, "ACPI"); strscpy(device->pnp.bus_id, "ACPI");
return; return;
} }
switch (device->device_type) { switch (device->device_type) {
case ACPI_BUS_TYPE_POWER_BUTTON: case ACPI_BUS_TYPE_POWER_BUTTON:
strcpy(device->pnp.bus_id, "PWRF"); strscpy(device->pnp.bus_id, "PWRF");
break; break;
case ACPI_BUS_TYPE_SLEEP_BUTTON: case ACPI_BUS_TYPE_SLEEP_BUTTON:
strcpy(device->pnp.bus_id, "SLPF"); strscpy(device->pnp.bus_id, "SLPF");
break; break;
case ACPI_BUS_TYPE_ECDT_EC: case ACPI_BUS_TYPE_ECDT_EC:
strcpy(device->pnp.bus_id, "ECDT"); strscpy(device->pnp.bus_id, "ECDT");
break; break;
default: default:
acpi_get_name(device->handle, ACPI_SINGLE_NAME, &buffer); acpi_get_name(device->handle, ACPI_SINGLE_NAME, &buffer);
@ -1202,7 +1202,7 @@ static void acpi_device_get_busid(struct acpi_device *device)
else else
break; break;
} }
strcpy(device->pnp.bus_id, bus_id); strscpy(device->pnp.bus_id, bus_id);
break; break;
} }
} }
@ -1453,8 +1453,8 @@ static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp,
acpi_object_is_system_bus(handle)) { acpi_object_is_system_bus(handle)) {
/* \_SB, \_TZ, LNXSYBUS */ /* \_SB, \_TZ, LNXSYBUS */
acpi_add_id(pnp, ACPI_BUS_HID); acpi_add_id(pnp, ACPI_BUS_HID);
strcpy(pnp->device_name, ACPI_BUS_DEVICE_NAME); strscpy(pnp->device_name, ACPI_BUS_DEVICE_NAME);
strcpy(pnp->device_class, ACPI_BUS_CLASS); strscpy(pnp->device_class, ACPI_BUS_CLASS);
} }
break; break;

View File

@ -796,9 +796,9 @@ static int acpi_thermal_add(struct acpi_device *device)
return -ENOMEM; return -ENOMEM;
tz->device = device; tz->device = device;
strcpy(tz->name, device->pnp.bus_id); strscpy(tz->name, device->pnp.bus_id);
strcpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME); strscpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_THERMAL_CLASS); strscpy(acpi_device_class(device), ACPI_THERMAL_CLASS);
device->driver_data = tz; device->driver_data = tz;
acpi_thermal_aml_dependency_fix(tz); acpi_thermal_aml_dependency_fix(tz);

View File

@ -549,6 +549,14 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "iMac12,2"), DMI_MATCH(DMI_PRODUCT_NAME, "iMac12,2"),
}, },
}, },
{
.callback = video_detect_force_native,
/* Apple MacBook Air 7,2 */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir7,2"),
},
},
{ {
.callback = video_detect_force_native, .callback = video_detect_force_native,
/* Apple MacBook Air 9,1 */ /* Apple MacBook Air 9,1 */
@ -565,6 +573,14 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro9,2"), DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro9,2"),
}, },
}, },
{
.callback = video_detect_force_native,
/* Apple MacBook Pro 11,2 */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro11,2"),
},
},
{ {
/* https://bugzilla.redhat.com/show_bug.cgi?id=1217249 */ /* https://bugzilla.redhat.com/show_bug.cgi?id=1217249 */
.callback = video_detect_force_native, .callback = video_detect_force_native,

View File

@ -12,6 +12,7 @@
#include <linux/acpi.h> #include <linux/acpi.h>
#include <linux/dmi.h> #include <linux/dmi.h>
#include <linux/pci.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <asm/cpu_device_id.h> #include <asm/cpu_device_id.h>
#include <asm/intel-family.h> #include <asm/intel-family.h>
@ -391,6 +392,19 @@ static const struct dmi_system_id acpi_quirk_skip_dmi_ids[] = {
.driver_data = (void *)(ACPI_QUIRK_SKIP_I2C_CLIENTS | .driver_data = (void *)(ACPI_QUIRK_SKIP_I2C_CLIENTS |
ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY), ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY),
}, },
{
/* Vexia Edu Atla 10 tablet 9V version */
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"),
/* Above strings are too generic, also match on BIOS date */
DMI_MATCH(DMI_BIOS_DATE, "08/25/2014"),
},
.driver_data = (void *)(ACPI_QUIRK_SKIP_I2C_CLIENTS |
ACPI_QUIRK_UART1_SKIP |
ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY |
ACPI_QUIRK_SKIP_GPIO_EVENT_HANDLERS),
},
{ {
/* Whitelabel (sold as various brands) TM800A550L */ /* Whitelabel (sold as various brands) TM800A550L */
.matches = { .matches = {
@ -439,18 +453,35 @@ static int acpi_dmi_skip_serdev_enumeration(struct device *controller_parent, bo
struct acpi_device *adev = ACPI_COMPANION(controller_parent); struct acpi_device *adev = ACPI_COMPANION(controller_parent);
const struct dmi_system_id *dmi_id; const struct dmi_system_id *dmi_id;
long quirks = 0; long quirks = 0;
u64 uid; u64 uid = 0;
int ret;
ret = acpi_dev_uid_to_integer(adev, &uid);
if (ret)
return 0;
dmi_id = dmi_first_match(acpi_quirk_skip_dmi_ids); dmi_id = dmi_first_match(acpi_quirk_skip_dmi_ids);
if (dmi_id) if (!dmi_id)
quirks = (unsigned long)dmi_id->driver_data; return 0;
if (!dev_is_platform(controller_parent)) { quirks = (unsigned long)dmi_id->driver_data;
/* uid is left at 0 on errors and 0 is not a valid UART UID */
acpi_dev_uid_to_integer(adev, &uid);
/* For PCI UARTs without an UID */
if (!uid && dev_is_pci(controller_parent)) {
struct pci_dev *pdev = to_pci_dev(controller_parent);
/*
* Devfn values for PCI UARTs on Bay Trail SoCs, which are
* the only devices where this fallback is necessary.
*/
if (pdev->devfn == PCI_DEVFN(0x1e, 3))
uid = 1;
else if (pdev->devfn == PCI_DEVFN(0x1e, 4))
uid = 2;
}
if (!uid)
return 0;
if (!dev_is_platform(controller_parent) && !dev_is_pci(controller_parent)) {
/* PNP enumerated UARTs */ /* PNP enumerated UARTs */
if ((quirks & ACPI_QUIRK_PNP_UART1_SKIP) && uid == 1) if ((quirks & ACPI_QUIRK_PNP_UART1_SKIP) && uid == 1)
*skip = true; *skip = true;
@ -505,7 +536,7 @@ int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *s
* Set skip to true so that the tty core creates a serdev ctrl device. * Set skip to true so that the tty core creates a serdev ctrl device.
* The backlight driver will manually create the serdev client device. * The backlight driver will manually create the serdev client device.
*/ */
if (acpi_dev_hid_match(adev, "DELL0501")) { if (adev && acpi_dev_hid_match(adev, "DELL0501")) {
*skip = true; *skip = true;
/* /*
* Create a platform dev for dell-uart-backlight to bind to. * Create a platform dev for dell-uart-backlight to bind to.

View File

@ -238,6 +238,7 @@ config APPLICOM
config SONYPI config SONYPI
tristate "Sony Vaio Programmable I/O Control Device support" tristate "Sony Vaio Programmable I/O Control Device support"
depends on X86_32 && PCI && INPUT depends on X86_32 && PCI && INPUT
depends on ACPI_EC || !ACPI
help help
This driver enables access to the Sony Programmable I/O Control This driver enables access to the Sony Programmable I/O Control
Device which can be found in many (all ?) Sony Vaio laptops. Device which can be found in many (all ?) Sony Vaio laptops.

View File

@ -1752,7 +1752,7 @@ source "drivers/hwmon/occ/Kconfig"
config SENSORS_OXP config SENSORS_OXP
tristate "OneXPlayer EC fan control" tristate "OneXPlayer EC fan control"
depends on ACPI depends on ACPI_EC
depends on X86 depends on X86
help help
If you say yes here you get support for fan readings and control over If you say yes here you get support for fan readings and control over
@ -2592,6 +2592,7 @@ config SENSORS_ASUS_WMI
config SENSORS_ASUS_EC config SENSORS_ASUS_EC
tristate "ASUS EC Sensors" tristate "ASUS EC Sensors"
depends on X86 depends on X86
depends on ACPI_EC
help help
If you say yes here you get support for the ACPI embedded controller If you say yes here you get support for the ACPI embedded controller
hardware monitoring interface found in ASUS motherboards. The driver hardware monitoring interface found in ASUS motherboards. The driver

View File

@ -52,6 +52,7 @@ config WMI_BMOF
config HUAWEI_WMI config HUAWEI_WMI
tristate "Huawei WMI laptop extras driver" tristate "Huawei WMI laptop extras driver"
depends on ACPI_BATTERY depends on ACPI_BATTERY
depends on ACPI_EC
depends on ACPI_WMI depends on ACPI_WMI
depends on INPUT depends on INPUT
select INPUT_SPARSEKMAP select INPUT_SPARSEKMAP
@ -147,7 +148,7 @@ config YT2_1380
config ACERHDF config ACERHDF
tristate "Acer Aspire One temperature and fan driver" tristate "Acer Aspire One temperature and fan driver"
depends on ACPI && THERMAL depends on ACPI_EC && THERMAL
select THERMAL_GOV_BANG_BANG select THERMAL_GOV_BANG_BANG
help help
This is a driver for Acer Aspire One netbooks. It allows to access This is a driver for Acer Aspire One netbooks. It allows to access
@ -186,6 +187,7 @@ config ACER_WMI
depends on SERIO_I8042 depends on SERIO_I8042
depends on INPUT depends on INPUT
depends on RFKILL || RFKILL = n depends on RFKILL || RFKILL = n
depends on ACPI_EC
depends on ACPI_WMI depends on ACPI_WMI
depends on ACPI_VIDEO || ACPI_VIDEO = n depends on ACPI_VIDEO || ACPI_VIDEO = n
depends on HWMON depends on HWMON
@ -334,7 +336,7 @@ config MERAKI_MX100
config EEEPC_LAPTOP config EEEPC_LAPTOP
tristate "Eee PC Hotkey Driver" tristate "Eee PC Hotkey Driver"
depends on ACPI depends on ACPI_EC
depends on INPUT depends on INPUT
depends on RFKILL || RFKILL = n depends on RFKILL || RFKILL = n
depends on ACPI_VIDEO || ACPI_VIDEO = n depends on ACPI_VIDEO || ACPI_VIDEO = n
@ -503,7 +505,7 @@ config SENSORS_HDAPS
config THINKPAD_ACPI config THINKPAD_ACPI
tristate "ThinkPad ACPI Laptop Extras" tristate "ThinkPad ACPI Laptop Extras"
depends on ACPI depends on ACPI_EC
depends on ACPI_BATTERY depends on ACPI_BATTERY
depends on INPUT depends on INPUT
depends on RFKILL || RFKILL = n depends on RFKILL || RFKILL = n
@ -682,7 +684,7 @@ config MEEGOPAD_ANX7428
config MSI_EC config MSI_EC
tristate "MSI EC Extras" tristate "MSI EC Extras"
depends on ACPI depends on ACPI_EC
depends on ACPI_BATTERY depends on ACPI_BATTERY
help help
This driver allows various MSI laptops' functionalities to be This driver allows various MSI laptops' functionalities to be
@ -690,7 +692,7 @@ config MSI_EC
config MSI_LAPTOP config MSI_LAPTOP
tristate "MSI Laptop Extras" tristate "MSI Laptop Extras"
depends on ACPI depends on ACPI_EC
depends on BACKLIGHT_CLASS_DEVICE depends on BACKLIGHT_CLASS_DEVICE
depends on ACPI_VIDEO || ACPI_VIDEO = n depends on ACPI_VIDEO || ACPI_VIDEO = n
depends on RFKILL depends on RFKILL
@ -796,7 +798,7 @@ config SAMSUNG_LAPTOP
config SAMSUNG_Q10 config SAMSUNG_Q10
tristate "Samsung Q10 Extras" tristate "Samsung Q10 Extras"
depends on ACPI depends on ACPI_EC
select BACKLIGHT_CLASS_DEVICE select BACKLIGHT_CLASS_DEVICE
help help
This driver provides support for backlight control on Samsung Q10 This driver provides support for backlight control on Samsung Q10
@ -804,7 +806,7 @@ config SAMSUNG_Q10
config ACPI_TOSHIBA config ACPI_TOSHIBA
tristate "Toshiba Laptop Extras" tristate "Toshiba Laptop Extras"
depends on ACPI depends on ACPI_EC
depends on ACPI_BATTERY depends on ACPI_BATTERY
depends on ACPI_WMI depends on ACPI_WMI
select LEDS_CLASS select LEDS_CLASS
@ -904,7 +906,7 @@ config ACPI_CMPC
config COMPAL_LAPTOP config COMPAL_LAPTOP
tristate "Compal (and others) Laptop Extras" tristate "Compal (and others) Laptop Extras"
depends on ACPI depends on ACPI_EC
depends on BACKLIGHT_CLASS_DEVICE depends on BACKLIGHT_CLASS_DEVICE
depends on ACPI_VIDEO || ACPI_VIDEO = n depends on ACPI_VIDEO || ACPI_VIDEO = n
depends on RFKILL depends on RFKILL
@ -949,7 +951,7 @@ config PANASONIC_LAPTOP
config SONY_LAPTOP config SONY_LAPTOP
tristate "Sony Laptop Extras" tristate "Sony Laptop Extras"
depends on ACPI depends on ACPI_EC
depends on ACPI_VIDEO || ACPI_VIDEO = n depends on ACPI_VIDEO || ACPI_VIDEO = n
depends on BACKLIGHT_CLASS_DEVICE depends on BACKLIGHT_CLASS_DEVICE
depends on INPUT depends on INPUT
@ -972,7 +974,7 @@ config SONYPI_COMPAT
config SYSTEM76_ACPI config SYSTEM76_ACPI
tristate "System76 ACPI Driver" tristate "System76 ACPI Driver"
depends on ACPI depends on ACPI_EC
depends on ACPI_BATTERY depends on ACPI_BATTERY
depends on HWMON depends on HWMON
depends on INPUT depends on INPUT

View File

@ -194,6 +194,7 @@ config DELL_WMI
config DELL_WMI_PRIVACY config DELL_WMI_PRIVACY
bool "Dell WMI Hardware Privacy Support" bool "Dell WMI Hardware Privacy Support"
depends on DELL_WMI depends on DELL_WMI
depends on ACPI_EC
help help
This option adds integration with the "Dell Hardware Privacy" This option adds integration with the "Dell Hardware Privacy"
feature of Dell laptops to the dell-wmi driver. feature of Dell laptops to the dell-wmi driver.

View File

@ -37,6 +37,7 @@ config HP_ACCEL
config HP_WMI config HP_WMI
tristate "HP WMI extras" tristate "HP WMI extras"
default m default m
depends on ACPI_EC
depends on ACPI_WMI depends on ACPI_WMI
depends on INPUT depends on INPUT
depends on RFKILL || RFKILL = n depends on RFKILL || RFKILL = n

View File

@ -62,7 +62,7 @@ config INTEL_INT0002_VGPIO
config INTEL_OAKTRAIL config INTEL_OAKTRAIL
tristate "Intel Oaktrail Platform Extras" tristate "Intel Oaktrail Platform Extras"
depends on ACPI depends on ACPI_EC
depends on ACPI_VIDEO || ACPI_VIDEO=n depends on ACPI_VIDEO || ACPI_VIDEO=n
depends on RFKILL && BACKLIGHT_CLASS_DEVICE && ACPI depends on RFKILL && BACKLIGHT_CLASS_DEVICE && ACPI
help help

View File

@ -1164,8 +1164,6 @@ int acpi_subsys_suspend_noirq(struct device *dev);
int acpi_subsys_suspend(struct device *dev); int acpi_subsys_suspend(struct device *dev);
int acpi_subsys_freeze(struct device *dev); int acpi_subsys_freeze(struct device *dev);
int acpi_subsys_poweroff(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); int acpi_subsys_restore_early(struct device *dev);
#else #else
static inline int acpi_subsys_prepare(struct device *dev) { return 0; } static inline int acpi_subsys_prepare(struct device *dev) { return 0; }
@ -1176,6 +1174,12 @@ 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_freeze(struct device *dev) { return 0; }
static inline int acpi_subsys_poweroff(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 int acpi_subsys_restore_early(struct device *dev) { return 0; }
#endif
#if defined(CONFIG_ACPI_EC) && defined(CONFIG_PM_SLEEP)
void acpi_ec_mark_gpe_for_wake(void);
void acpi_ec_set_gpe_wake_mask(u8 action);
#else
static inline void acpi_ec_mark_gpe_for_wake(void) {} static inline void acpi_ec_mark_gpe_for_wake(void) {}
static inline void acpi_ec_set_gpe_wake_mask(u8 action) {} static inline void acpi_ec_set_gpe_wake_mask(u8 action) {}
#endif #endif