mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
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:
commit
4e9ad033b4
@ -132,8 +132,17 @@ config ACPI_REV_OVERRIDE_POSSIBLE
|
||||
makes it possible to force the kernel to return "5" as the supported
|
||||
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
|
||||
tristate "EC read/write access through /sys/kernel/debug/ec"
|
||||
depends on ACPI_EC
|
||||
help
|
||||
Say N to disable Embedded Controller /sys/kernel/debug interface
|
||||
|
||||
@ -433,7 +442,7 @@ config ACPI_HOTPLUG_IOAPIC
|
||||
|
||||
config ACPI_SBS
|
||||
tristate "Smart Battery System"
|
||||
depends on X86
|
||||
depends on X86 && ACPI_EC
|
||||
select POWER_SUPPLY
|
||||
help
|
||||
This driver supports the Smart Battery System, another
|
||||
|
@ -41,7 +41,7 @@ acpi-y += resource.o
|
||||
acpi-y += acpi_processor.o
|
||||
acpi-y += processor_core.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_PCI) += pci_root.o pci_link.o pci_irq.o
|
||||
obj-$(CONFIG_ACPI_MCFG) += pci_mcfg.o
|
||||
|
@ -290,7 +290,7 @@ static void acpi_ac_remove(struct platform_device *pdev)
|
||||
|
||||
static struct platform_driver acpi_ac_driver = {
|
||||
.probe = acpi_ac_probe,
|
||||
.remove_new = acpi_ac_remove,
|
||||
.remove = acpi_ac_remove,
|
||||
.driver = {
|
||||
.name = "ac",
|
||||
.acpi_match_table = ac_device_ids,
|
||||
|
@ -86,7 +86,7 @@ static int fch_misc_setup(struct apd_private_data *pdata)
|
||||
if (!clk_data->name)
|
||||
return -ENOMEM;
|
||||
|
||||
strcpy(clk_data->name, obj->string.pointer);
|
||||
strscpy(clk_data->name, obj->string.pointer, obj->string.length);
|
||||
} else {
|
||||
/* Set default name to mclk if entry missing in firmware */
|
||||
clk_data->name = "mclk";
|
||||
|
@ -462,7 +462,7 @@ MODULE_DEVICE_TABLE(acpi, pad_device_ids);
|
||||
|
||||
static struct platform_driver acpi_pad_driver = {
|
||||
.probe = acpi_pad_probe,
|
||||
.remove_new = acpi_pad_remove,
|
||||
.remove = acpi_pad_remove,
|
||||
.driver = {
|
||||
.dev_groups = acpi_pad_groups,
|
||||
.name = "processor_aggregator",
|
||||
|
@ -684,7 +684,7 @@ static struct platform_driver acpi_tad_driver = {
|
||||
.acpi_match_table = acpi_tad_ids,
|
||||
},
|
||||
.probe = acpi_tad_probe,
|
||||
.remove_new = acpi_tad_remove,
|
||||
.remove = acpi_tad_remove,
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, acpi_tad_ids);
|
||||
|
||||
|
@ -880,7 +880,7 @@ static struct platform_device *einj_dev;
|
||||
* triggering a section mismatch warning.
|
||||
*/
|
||||
static struct platform_driver einj_driver __refdata = {
|
||||
.remove_new = __exit_p(einj_remove),
|
||||
.remove = __exit_p(einj_remove),
|
||||
.driver = {
|
||||
.name = "acpi-einj",
|
||||
},
|
||||
|
@ -1605,7 +1605,7 @@ static struct platform_driver ghes_platform_driver = {
|
||||
.name = "GHES",
|
||||
},
|
||||
.probe = ghes_probe,
|
||||
.remove_new = ghes_remove,
|
||||
.remove = ghes_remove,
|
||||
};
|
||||
|
||||
void __init acpi_ghes_init(void)
|
||||
|
@ -88,7 +88,7 @@ static struct platform_driver agdi_driver = {
|
||||
.name = "agdi",
|
||||
},
|
||||
.probe = agdi_probe,
|
||||
.remove_new = agdi_remove,
|
||||
.remove = agdi_remove,
|
||||
};
|
||||
|
||||
void __init acpi_agdi_init(void)
|
||||
|
@ -1218,15 +1218,21 @@ static int acpi_battery_add(struct acpi_device *device)
|
||||
if (device->dep_unmet)
|
||||
return -EPROBE_DEFER;
|
||||
|
||||
battery = kzalloc(sizeof(struct acpi_battery), GFP_KERNEL);
|
||||
battery = devm_kzalloc(&device->dev, sizeof(*battery), GFP_KERNEL);
|
||||
if (!battery)
|
||||
return -ENOMEM;
|
||||
battery->device = device;
|
||||
strscpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
|
||||
strscpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
|
||||
device->driver_data = battery;
|
||||
mutex_init(&battery->lock);
|
||||
mutex_init(&battery->sysfs_lock);
|
||||
result = devm_mutex_init(&device->dev, &battery->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"))
|
||||
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");
|
||||
|
||||
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);
|
||||
|
||||
@ -1254,9 +1262,6 @@ fail_pm:
|
||||
unregister_pm_notifier(&battery->pm_nb);
|
||||
fail:
|
||||
sysfs_remove_battery(battery);
|
||||
mutex_destroy(&battery->lock);
|
||||
mutex_destroy(&battery->sysfs_lock);
|
||||
kfree(battery);
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -1276,13 +1281,8 @@ static void acpi_battery_remove(struct acpi_device *device)
|
||||
device_init_wakeup(&device->dev, 0);
|
||||
unregister_pm_notifier(&battery->pm_nb);
|
||||
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 */
|
||||
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);
|
||||
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 = {
|
||||
.name = "battery",
|
||||
@ -1313,7 +1310,7 @@ static struct acpi_driver acpi_battery_driver = {
|
||||
.add = acpi_battery_add,
|
||||
.remove = acpi_battery_remove,
|
||||
},
|
||||
.drv.pm = &acpi_battery_pm,
|
||||
.drv.pm = pm_sleep_ptr(&acpi_battery_pm),
|
||||
.drv.probe_type = PROBE_PREFER_ASYNCHRONOUS,
|
||||
};
|
||||
|
||||
|
@ -1011,7 +1011,8 @@ static int cpc_read(int cpu, struct cpc_register_resource *reg_res, u64 *val)
|
||||
*val = 0;
|
||||
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;
|
||||
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);
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
}
|
||||
val = MASK_VAL_WRITE(reg, prev_val, val);
|
||||
val |= prev_val;
|
||||
}
|
||||
|
||||
switch (size) {
|
||||
|
@ -158,7 +158,7 @@ MODULE_DEVICE_TABLE(acpi, pch_fivr_device_ids);
|
||||
|
||||
static struct platform_driver pch_fivr_driver = {
|
||||
.probe = pch_fivr_add,
|
||||
.remove_new = pch_fivr_remove,
|
||||
.remove = pch_fivr_remove,
|
||||
.driver = {
|
||||
.name = "dptf_pch_fivr",
|
||||
.acpi_match_table = pch_fivr_device_ids,
|
||||
|
@ -242,7 +242,7 @@ MODULE_DEVICE_TABLE(acpi, int3407_device_ids);
|
||||
|
||||
static struct platform_driver dptf_power_driver = {
|
||||
.probe = dptf_power_add,
|
||||
.remove_new = dptf_power_remove,
|
||||
.remove = dptf_power_remove,
|
||||
.driver = {
|
||||
.name = "dptf_power",
|
||||
.acpi_match_table = int3407_device_ids,
|
||||
|
@ -1677,8 +1677,8 @@ static int acpi_ec_add(struct acpi_device *device)
|
||||
struct acpi_ec *ec;
|
||||
int ret;
|
||||
|
||||
strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME);
|
||||
strcpy(acpi_device_class(device), ACPI_EC_CLASS);
|
||||
strscpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME);
|
||||
strscpy(acpi_device_class(device), ACPI_EC_CLASS);
|
||||
|
||||
if (boot_ec && (boot_ec->handle == device->handle ||
|
||||
!strcmp(acpi_device_hid(device), ACPI_ECDT_HID))) {
|
||||
|
@ -28,8 +28,8 @@ int acpi_notifier_call_chain(struct acpi_device *dev, u32 type, u32 data)
|
||||
{
|
||||
struct acpi_bus_event event;
|
||||
|
||||
strcpy(event.device_class, dev->pnp.device_class);
|
||||
strcpy(event.bus_id, dev->pnp.bus_id);
|
||||
strscpy(event.device_class, dev->pnp.device_class);
|
||||
strscpy(event.bus_id, dev->pnp.bus_id);
|
||||
event.type = type;
|
||||
event.data = data;
|
||||
return (blocking_notifier_call_chain(&acpi_chain_head, 0, (void *)&event)
|
||||
|
@ -185,7 +185,7 @@ static const struct acpi_device_id ged_acpi_ids[] = {
|
||||
|
||||
static struct platform_driver ged_driver = {
|
||||
.probe = ged_probe,
|
||||
.remove_new = ged_remove,
|
||||
.remove = ged_remove,
|
||||
.shutdown = ged_shutdown,
|
||||
.driver = {
|
||||
.name = MODULE_NAME,
|
||||
|
@ -448,7 +448,7 @@ static const struct dev_pm_ops acpi_fan_pm = {
|
||||
|
||||
static struct platform_driver acpi_fan_driver = {
|
||||
.probe = acpi_fan_probe,
|
||||
.remove_new = acpi_fan_remove,
|
||||
.remove = acpi_fan_remove,
|
||||
.driver = {
|
||||
.name = "acpi-fan",
|
||||
.acpi_match_table = fan_device_ids,
|
||||
|
@ -215,6 +215,8 @@ extern struct acpi_ec *first_ec;
|
||||
/* External interfaces use first EC only, so remember */
|
||||
typedef int (*acpi_ec_query_func) (void *data);
|
||||
|
||||
#ifdef CONFIG_ACPI_EC
|
||||
|
||||
void acpi_ec_init(void);
|
||||
void acpi_ec_ecdt_probe(void);
|
||||
void acpi_ec_dsdt_probe(void);
|
||||
@ -231,6 +233,29 @@ void acpi_ec_flush_work(void);
|
||||
bool acpi_ec_dispatch_gpe(void);
|
||||
#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
|
||||
|
@ -642,6 +642,15 @@ acpi_status acpi_os_read_port(acpi_io_address port, u32 *value, u32 width)
|
||||
{
|
||||
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)
|
||||
*value = 0;
|
||||
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)
|
||||
{
|
||||
if (!IS_ENABLED(CONFIG_HAS_IOPORT))
|
||||
return AE_NOT_IMPLEMENTED;
|
||||
|
||||
if (width <= 8) {
|
||||
outb(value, port);
|
||||
} else if (width <= 16) {
|
||||
|
@ -714,8 +714,8 @@ static int acpi_pci_link_add(struct acpi_device *device,
|
||||
return -ENOMEM;
|
||||
|
||||
link->device = device;
|
||||
strcpy(acpi_device_name(device), ACPI_PCI_LINK_DEVICE_NAME);
|
||||
strcpy(acpi_device_class(device), ACPI_PCI_LINK_CLASS);
|
||||
strscpy(acpi_device_name(device), ACPI_PCI_LINK_DEVICE_NAME);
|
||||
strscpy(acpi_device_class(device), ACPI_PCI_LINK_CLASS);
|
||||
device->driver_data = link;
|
||||
|
||||
mutex_lock(&acpi_link_lock);
|
||||
|
@ -689,8 +689,8 @@ static int acpi_pci_root_add(struct acpi_device *device,
|
||||
|
||||
root->device = device;
|
||||
root->segment = segment & 0xFFFF;
|
||||
strcpy(acpi_device_name(device), ACPI_PCI_ROOT_DEVICE_NAME);
|
||||
strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS);
|
||||
strscpy(acpi_device_name(device), ACPI_PCI_ROOT_DEVICE_NAME);
|
||||
strscpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS);
|
||||
device->driver_data = root;
|
||||
|
||||
if (hotadd && dmar_device_add(handle)) {
|
||||
|
@ -272,9 +272,6 @@ static long pfrt_log_ioctl(struct file *file, unsigned int cmd, unsigned long ar
|
||||
|
||||
case PFRT_LOG_IOC_GET_INFO:
|
||||
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_revid = pfrt_log_dev->info.log_revid;
|
||||
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,
|
||||
},
|
||||
.probe = acpi_pfrt_log_probe,
|
||||
.remove_new = acpi_pfrt_log_remove,
|
||||
.remove = acpi_pfrt_log_remove,
|
||||
};
|
||||
module_platform_driver(acpi_pfrt_log_driver);
|
||||
|
||||
|
@ -565,7 +565,7 @@ static struct platform_driver acpi_pfru_driver = {
|
||||
.acpi_match_table = acpi_pfru_ids,
|
||||
},
|
||||
.probe = acpi_pfru_probe,
|
||||
.remove_new = acpi_pfru_remove,
|
||||
.remove = acpi_pfru_remove,
|
||||
};
|
||||
module_platform_driver(acpi_pfru_driver);
|
||||
|
||||
|
@ -950,8 +950,8 @@ struct acpi_device *acpi_add_power_resource(acpi_handle handle)
|
||||
mutex_init(&resource->resource_lock);
|
||||
INIT_LIST_HEAD(&resource->list_node);
|
||||
INIT_LIST_HEAD(&resource->dependents);
|
||||
strcpy(acpi_device_name(device), ACPI_POWER_DEVICE_NAME);
|
||||
strcpy(acpi_device_class(device), ACPI_POWER_CLASS);
|
||||
strscpy(acpi_device_name(device), ACPI_POWER_DEVICE_NAME);
|
||||
strscpy(acpi_device_class(device), ACPI_POWER_CLASS);
|
||||
device->power.state = ACPI_STATE_UNKNOWN;
|
||||
device->flags.match_driver = true;
|
||||
|
||||
|
@ -24,8 +24,6 @@
|
||||
|
||||
#define ACPI_PROCESSOR_FILE_PERFORMANCE "performance"
|
||||
|
||||
static DEFINE_MUTEX(performance_mutex);
|
||||
|
||||
/*
|
||||
* _PPC support is implemented as a CPUfreq policy notifier:
|
||||
* 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)
|
||||
{
|
||||
int result = 0;
|
||||
@ -267,7 +269,6 @@ end:
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
/*
|
||||
* 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.
|
||||
@ -298,9 +299,6 @@ static void amd_fixup_frequency(struct acpi_processor_px *px, int i)
|
||||
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)
|
||||
{
|
||||
@ -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
|
||||
*/
|
||||
update_bios:
|
||||
#ifdef CONFIG_X86
|
||||
if (acpi_has_method(pr->handle, "_PPC")) {
|
||||
if(boot_cpu_has(X86_FEATURE_EST))
|
||||
pr_warn(FW_BUG "BIOS needs update for CPU "
|
||||
"frequency support\n");
|
||||
}
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(acpi_processor_get_performance_info);
|
||||
@ -788,3 +784,4 @@ unlock:
|
||||
mutex_unlock(&performance_mutex);
|
||||
}
|
||||
EXPORT_SYMBOL(acpi_processor_unregister_performance);
|
||||
#endif
|
||||
|
@ -644,8 +644,8 @@ static int acpi_sbs_add(struct acpi_device *device)
|
||||
|
||||
sbs->hc = acpi_driver_data(acpi_dev_parent(device));
|
||||
sbs->device = device;
|
||||
strcpy(acpi_device_name(device), ACPI_SBS_DEVICE_NAME);
|
||||
strcpy(acpi_device_class(device), ACPI_SBS_CLASS);
|
||||
strscpy(acpi_device_name(device), ACPI_SBS_DEVICE_NAME);
|
||||
strscpy(acpi_device_class(device), ACPI_SBS_CLASS);
|
||||
device->driver_data = sbs;
|
||||
|
||||
result = acpi_charger_add(sbs);
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include "sbshc.h"
|
||||
#include "internal.h"
|
||||
|
||||
#define ACPI_SMB_HC_CLASS "smbus_host_ctl"
|
||||
#define ACPI_SMB_HC_DEVICE_NAME "ACPI SMBus HC"
|
||||
@ -236,12 +237,6 @@ static int smbus_alarm(void *context)
|
||||
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)
|
||||
{
|
||||
int status;
|
||||
@ -257,8 +252,8 @@ static int acpi_smbus_hc_add(struct acpi_device *device)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
strcpy(acpi_device_name(device), ACPI_SMB_HC_DEVICE_NAME);
|
||||
strcpy(acpi_device_class(device), ACPI_SMB_HC_CLASS);
|
||||
strscpy(acpi_device_name(device), ACPI_SMB_HC_DEVICE_NAME);
|
||||
strscpy(acpi_device_class(device), ACPI_SMB_HC_CLASS);
|
||||
|
||||
hc = kzalloc(sizeof(struct acpi_smb_hc), GFP_KERNEL);
|
||||
if (!hc)
|
||||
@ -278,8 +273,6 @@ static int acpi_smbus_hc_add(struct acpi_device *device)
|
||||
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)
|
||||
{
|
||||
struct acpi_smb_hc *hc;
|
||||
|
@ -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)?
|
||||
*/
|
||||
if (!acpi_dev_parent(device)) {
|
||||
strcpy(device->pnp.bus_id, "ACPI");
|
||||
strscpy(device->pnp.bus_id, "ACPI");
|
||||
return;
|
||||
}
|
||||
|
||||
switch (device->device_type) {
|
||||
case ACPI_BUS_TYPE_POWER_BUTTON:
|
||||
strcpy(device->pnp.bus_id, "PWRF");
|
||||
strscpy(device->pnp.bus_id, "PWRF");
|
||||
break;
|
||||
case ACPI_BUS_TYPE_SLEEP_BUTTON:
|
||||
strcpy(device->pnp.bus_id, "SLPF");
|
||||
strscpy(device->pnp.bus_id, "SLPF");
|
||||
break;
|
||||
case ACPI_BUS_TYPE_ECDT_EC:
|
||||
strcpy(device->pnp.bus_id, "ECDT");
|
||||
strscpy(device->pnp.bus_id, "ECDT");
|
||||
break;
|
||||
default:
|
||||
acpi_get_name(device->handle, ACPI_SINGLE_NAME, &buffer);
|
||||
@ -1202,7 +1202,7 @@ static void acpi_device_get_busid(struct acpi_device *device)
|
||||
else
|
||||
break;
|
||||
}
|
||||
strcpy(device->pnp.bus_id, bus_id);
|
||||
strscpy(device->pnp.bus_id, bus_id);
|
||||
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)) {
|
||||
/* \_SB, \_TZ, LNXSYBUS */
|
||||
acpi_add_id(pnp, ACPI_BUS_HID);
|
||||
strcpy(pnp->device_name, ACPI_BUS_DEVICE_NAME);
|
||||
strcpy(pnp->device_class, ACPI_BUS_CLASS);
|
||||
strscpy(pnp->device_name, ACPI_BUS_DEVICE_NAME);
|
||||
strscpy(pnp->device_class, ACPI_BUS_CLASS);
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -796,9 +796,9 @@ static int acpi_thermal_add(struct acpi_device *device)
|
||||
return -ENOMEM;
|
||||
|
||||
tz->device = device;
|
||||
strcpy(tz->name, device->pnp.bus_id);
|
||||
strcpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME);
|
||||
strcpy(acpi_device_class(device), ACPI_THERMAL_CLASS);
|
||||
strscpy(tz->name, device->pnp.bus_id);
|
||||
strscpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME);
|
||||
strscpy(acpi_device_class(device), ACPI_THERMAL_CLASS);
|
||||
device->driver_data = tz;
|
||||
|
||||
acpi_thermal_aml_dependency_fix(tz);
|
||||
|
@ -549,6 +549,14 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||
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,
|
||||
/* 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"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.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 */
|
||||
.callback = video_detect_force_native,
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <asm/cpu_device_id.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 |
|
||||
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 */
|
||||
.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);
|
||||
const struct dmi_system_id *dmi_id;
|
||||
long quirks = 0;
|
||||
u64 uid;
|
||||
int ret;
|
||||
|
||||
ret = acpi_dev_uid_to_integer(adev, &uid);
|
||||
if (ret)
|
||||
return 0;
|
||||
u64 uid = 0;
|
||||
|
||||
dmi_id = dmi_first_match(acpi_quirk_skip_dmi_ids);
|
||||
if (dmi_id)
|
||||
quirks = (unsigned long)dmi_id->driver_data;
|
||||
if (!dmi_id)
|
||||
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 */
|
||||
if ((quirks & ACPI_QUIRK_PNP_UART1_SKIP) && uid == 1)
|
||||
*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.
|
||||
* 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;
|
||||
/*
|
||||
* Create a platform dev for dell-uart-backlight to bind to.
|
||||
|
@ -238,6 +238,7 @@ config APPLICOM
|
||||
config SONYPI
|
||||
tristate "Sony Vaio Programmable I/O Control Device support"
|
||||
depends on X86_32 && PCI && INPUT
|
||||
depends on ACPI_EC || !ACPI
|
||||
help
|
||||
This driver enables access to the Sony Programmable I/O Control
|
||||
Device which can be found in many (all ?) Sony Vaio laptops.
|
||||
|
@ -1752,7 +1752,7 @@ source "drivers/hwmon/occ/Kconfig"
|
||||
|
||||
config SENSORS_OXP
|
||||
tristate "OneXPlayer EC fan control"
|
||||
depends on ACPI
|
||||
depends on ACPI_EC
|
||||
depends on X86
|
||||
help
|
||||
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
|
||||
tristate "ASUS EC Sensors"
|
||||
depends on X86
|
||||
depends on ACPI_EC
|
||||
help
|
||||
If you say yes here you get support for the ACPI embedded controller
|
||||
hardware monitoring interface found in ASUS motherboards. The driver
|
||||
|
@ -52,6 +52,7 @@ config WMI_BMOF
|
||||
config HUAWEI_WMI
|
||||
tristate "Huawei WMI laptop extras driver"
|
||||
depends on ACPI_BATTERY
|
||||
depends on ACPI_EC
|
||||
depends on ACPI_WMI
|
||||
depends on INPUT
|
||||
select INPUT_SPARSEKMAP
|
||||
@ -147,7 +148,7 @@ config YT2_1380
|
||||
|
||||
config ACERHDF
|
||||
tristate "Acer Aspire One temperature and fan driver"
|
||||
depends on ACPI && THERMAL
|
||||
depends on ACPI_EC && THERMAL
|
||||
select THERMAL_GOV_BANG_BANG
|
||||
help
|
||||
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 INPUT
|
||||
depends on RFKILL || RFKILL = n
|
||||
depends on ACPI_EC
|
||||
depends on ACPI_WMI
|
||||
depends on ACPI_VIDEO || ACPI_VIDEO = n
|
||||
depends on HWMON
|
||||
@ -334,7 +336,7 @@ config MERAKI_MX100
|
||||
|
||||
config EEEPC_LAPTOP
|
||||
tristate "Eee PC Hotkey Driver"
|
||||
depends on ACPI
|
||||
depends on ACPI_EC
|
||||
depends on INPUT
|
||||
depends on RFKILL || RFKILL = n
|
||||
depends on ACPI_VIDEO || ACPI_VIDEO = n
|
||||
@ -503,7 +505,7 @@ config SENSORS_HDAPS
|
||||
|
||||
config THINKPAD_ACPI
|
||||
tristate "ThinkPad ACPI Laptop Extras"
|
||||
depends on ACPI
|
||||
depends on ACPI_EC
|
||||
depends on ACPI_BATTERY
|
||||
depends on INPUT
|
||||
depends on RFKILL || RFKILL = n
|
||||
@ -682,7 +684,7 @@ config MEEGOPAD_ANX7428
|
||||
|
||||
config MSI_EC
|
||||
tristate "MSI EC Extras"
|
||||
depends on ACPI
|
||||
depends on ACPI_EC
|
||||
depends on ACPI_BATTERY
|
||||
help
|
||||
This driver allows various MSI laptops' functionalities to be
|
||||
@ -690,7 +692,7 @@ config MSI_EC
|
||||
|
||||
config MSI_LAPTOP
|
||||
tristate "MSI Laptop Extras"
|
||||
depends on ACPI
|
||||
depends on ACPI_EC
|
||||
depends on BACKLIGHT_CLASS_DEVICE
|
||||
depends on ACPI_VIDEO || ACPI_VIDEO = n
|
||||
depends on RFKILL
|
||||
@ -796,7 +798,7 @@ config SAMSUNG_LAPTOP
|
||||
|
||||
config SAMSUNG_Q10
|
||||
tristate "Samsung Q10 Extras"
|
||||
depends on ACPI
|
||||
depends on ACPI_EC
|
||||
select BACKLIGHT_CLASS_DEVICE
|
||||
help
|
||||
This driver provides support for backlight control on Samsung Q10
|
||||
@ -804,7 +806,7 @@ config SAMSUNG_Q10
|
||||
|
||||
config ACPI_TOSHIBA
|
||||
tristate "Toshiba Laptop Extras"
|
||||
depends on ACPI
|
||||
depends on ACPI_EC
|
||||
depends on ACPI_BATTERY
|
||||
depends on ACPI_WMI
|
||||
select LEDS_CLASS
|
||||
@ -904,7 +906,7 @@ config ACPI_CMPC
|
||||
|
||||
config COMPAL_LAPTOP
|
||||
tristate "Compal (and others) Laptop Extras"
|
||||
depends on ACPI
|
||||
depends on ACPI_EC
|
||||
depends on BACKLIGHT_CLASS_DEVICE
|
||||
depends on ACPI_VIDEO || ACPI_VIDEO = n
|
||||
depends on RFKILL
|
||||
@ -949,7 +951,7 @@ config PANASONIC_LAPTOP
|
||||
|
||||
config SONY_LAPTOP
|
||||
tristate "Sony Laptop Extras"
|
||||
depends on ACPI
|
||||
depends on ACPI_EC
|
||||
depends on ACPI_VIDEO || ACPI_VIDEO = n
|
||||
depends on BACKLIGHT_CLASS_DEVICE
|
||||
depends on INPUT
|
||||
@ -972,7 +974,7 @@ config SONYPI_COMPAT
|
||||
|
||||
config SYSTEM76_ACPI
|
||||
tristate "System76 ACPI Driver"
|
||||
depends on ACPI
|
||||
depends on ACPI_EC
|
||||
depends on ACPI_BATTERY
|
||||
depends on HWMON
|
||||
depends on INPUT
|
||||
|
@ -194,6 +194,7 @@ config DELL_WMI
|
||||
config DELL_WMI_PRIVACY
|
||||
bool "Dell WMI Hardware Privacy Support"
|
||||
depends on DELL_WMI
|
||||
depends on ACPI_EC
|
||||
help
|
||||
This option adds integration with the "Dell Hardware Privacy"
|
||||
feature of Dell laptops to the dell-wmi driver.
|
||||
|
@ -37,6 +37,7 @@ config HP_ACCEL
|
||||
config HP_WMI
|
||||
tristate "HP WMI extras"
|
||||
default m
|
||||
depends on ACPI_EC
|
||||
depends on ACPI_WMI
|
||||
depends on INPUT
|
||||
depends on RFKILL || RFKILL = n
|
||||
|
@ -62,7 +62,7 @@ config INTEL_INT0002_VGPIO
|
||||
|
||||
config INTEL_OAKTRAIL
|
||||
tristate "Intel Oaktrail Platform Extras"
|
||||
depends on ACPI
|
||||
depends on ACPI_EC
|
||||
depends on ACPI_VIDEO || ACPI_VIDEO=n
|
||||
depends on RFKILL && BACKLIGHT_CLASS_DEVICE && ACPI
|
||||
help
|
||||
|
@ -1164,8 +1164,6 @@ int acpi_subsys_suspend_noirq(struct device *dev);
|
||||
int acpi_subsys_suspend(struct device *dev);
|
||||
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; }
|
||||
@ -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_poweroff(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_set_gpe_wake_mask(u8 action) {}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user