Merge branches 'acpi-ac', 'acpi-pad' and 'pnp'
Merge updates of the ACPI AC and ACPI PAD drivers and PNP updates for 6.7-rc1: - Switch over the ACPI AC and ACPI PAD drivers to using the platform driver interface which, is more logically consistent than binding a driver directly to an ACPI device object, and clean them up (Michal Wilczynski). - Replace strncpy() in the PNP code with either memcpy() or strscpy() as appropriate (Justin Stitt). - Clean up coding style in pnp.h (GuoHua Cheng). * acpi-ac: ACPI: AC: Rename ACPI device from device to adev ACPI: AC: Replace acpi_driver with platform_driver ACPI: AC: Use string_choices API instead of ternary operator ACPI: AC: Remove redundant checks * acpi-pad: ACPI: acpi_pad: Rename ACPI device from device to adev ACPI: acpi_pad: Use dev groups for sysfs ACPI: acpi_pad: Replace acpi_driver with platform_driver * pnp: PNP: replace deprecated strncpy() with memcpy() PNP: ACPI: replace deprecated strncpy() with strscpy() PNP: Clean up coding style in pnp.h
This commit is contained in:
commit
f4cb34a75e
@ -17,6 +17,7 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/power_supply.h>
|
||||
#include <linux/string_choices.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <acpi/battery.h>
|
||||
|
||||
@ -32,8 +33,9 @@ MODULE_AUTHOR("Paul Diefenbaugh");
|
||||
MODULE_DESCRIPTION("ACPI AC Adapter Driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
static int acpi_ac_add(struct acpi_device *device);
|
||||
static void acpi_ac_remove(struct acpi_device *device);
|
||||
static int acpi_ac_probe(struct platform_device *pdev);
|
||||
static void acpi_ac_remove(struct platform_device *pdev);
|
||||
|
||||
static void acpi_ac_notify(acpi_handle handle, u32 event, void *data);
|
||||
|
||||
static const struct acpi_device_id ac_device_ids[] = {
|
||||
@ -50,17 +52,6 @@ static SIMPLE_DEV_PM_OPS(acpi_ac_pm, NULL, acpi_ac_resume);
|
||||
static int ac_sleep_before_get_state_ms;
|
||||
static int ac_only;
|
||||
|
||||
static struct acpi_driver acpi_ac_driver = {
|
||||
.name = "ac",
|
||||
.class = ACPI_AC_CLASS,
|
||||
.ids = ac_device_ids,
|
||||
.ops = {
|
||||
.add = acpi_ac_add,
|
||||
.remove = acpi_ac_remove,
|
||||
},
|
||||
.drv.pm = &acpi_ac_pm,
|
||||
};
|
||||
|
||||
struct acpi_ac {
|
||||
struct power_supply *charger;
|
||||
struct power_supply_desc charger_desc;
|
||||
@ -128,15 +119,12 @@ static enum power_supply_property ac_props[] = {
|
||||
/* Driver Model */
|
||||
static void acpi_ac_notify(acpi_handle handle, u32 event, void *data)
|
||||
{
|
||||
struct acpi_device *device = data;
|
||||
struct acpi_ac *ac = acpi_driver_data(device);
|
||||
|
||||
if (!ac)
|
||||
return;
|
||||
struct acpi_ac *ac = data;
|
||||
struct acpi_device *adev = ac->device;
|
||||
|
||||
switch (event) {
|
||||
default:
|
||||
acpi_handle_debug(device->handle, "Unsupported event [0x%x]\n",
|
||||
acpi_handle_debug(adev->handle, "Unsupported event [0x%x]\n",
|
||||
event);
|
||||
fallthrough;
|
||||
case ACPI_AC_NOTIFY_STATUS:
|
||||
@ -153,10 +141,10 @@ static void acpi_ac_notify(acpi_handle handle, u32 event, void *data)
|
||||
msleep(ac_sleep_before_get_state_ms);
|
||||
|
||||
acpi_ac_get_state(ac);
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event,
|
||||
acpi_bus_generate_netlink_event(adev->pnp.device_class,
|
||||
dev_name(&adev->dev), event,
|
||||
(u32) ac->state);
|
||||
acpi_notifier_call_chain(device, event, (u32) ac->state);
|
||||
acpi_notifier_call_chain(adev, event, (u32) ac->state);
|
||||
kobject_uevent(&ac->charger->dev.kobj, KOBJ_CHANGE);
|
||||
}
|
||||
}
|
||||
@ -213,24 +201,22 @@ static const struct dmi_system_id ac_dmi_table[] __initconst = {
|
||||
{},
|
||||
};
|
||||
|
||||
static int acpi_ac_add(struct acpi_device *device)
|
||||
static int acpi_ac_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct acpi_device *adev = ACPI_COMPANION(&pdev->dev);
|
||||
struct power_supply_config psy_cfg = {};
|
||||
int result = 0;
|
||||
struct acpi_ac *ac = NULL;
|
||||
|
||||
|
||||
if (!device)
|
||||
return -EINVAL;
|
||||
struct acpi_ac *ac;
|
||||
int result;
|
||||
|
||||
ac = kzalloc(sizeof(struct acpi_ac), GFP_KERNEL);
|
||||
if (!ac)
|
||||
return -ENOMEM;
|
||||
|
||||
ac->device = device;
|
||||
strcpy(acpi_device_name(device), ACPI_AC_DEVICE_NAME);
|
||||
strcpy(acpi_device_class(device), ACPI_AC_CLASS);
|
||||
device->driver_data = ac;
|
||||
ac->device = adev;
|
||||
strcpy(acpi_device_name(adev), ACPI_AC_DEVICE_NAME);
|
||||
strcpy(acpi_device_class(adev), ACPI_AC_CLASS);
|
||||
|
||||
platform_set_drvdata(pdev, ac);
|
||||
|
||||
result = acpi_ac_get_state(ac);
|
||||
if (result)
|
||||
@ -238,26 +224,26 @@ static int acpi_ac_add(struct acpi_device *device)
|
||||
|
||||
psy_cfg.drv_data = ac;
|
||||
|
||||
ac->charger_desc.name = acpi_device_bid(device);
|
||||
ac->charger_desc.name = acpi_device_bid(adev);
|
||||
ac->charger_desc.type = POWER_SUPPLY_TYPE_MAINS;
|
||||
ac->charger_desc.properties = ac_props;
|
||||
ac->charger_desc.num_properties = ARRAY_SIZE(ac_props);
|
||||
ac->charger_desc.get_property = get_ac_property;
|
||||
ac->charger = power_supply_register(&ac->device->dev,
|
||||
ac->charger = power_supply_register(&pdev->dev,
|
||||
&ac->charger_desc, &psy_cfg);
|
||||
if (IS_ERR(ac->charger)) {
|
||||
result = PTR_ERR(ac->charger);
|
||||
goto err_release_ac;
|
||||
}
|
||||
|
||||
pr_info("%s [%s] (%s)\n", acpi_device_name(device),
|
||||
acpi_device_bid(device), ac->state ? "on-line" : "off-line");
|
||||
pr_info("%s [%s] (%s-line)\n", acpi_device_name(adev),
|
||||
acpi_device_bid(adev), str_on_off(ac->state));
|
||||
|
||||
ac->battery_nb.notifier_call = acpi_ac_battery_notify;
|
||||
register_acpi_notifier(&ac->battery_nb);
|
||||
|
||||
result = acpi_dev_install_notify_handler(device, ACPI_ALL_NOTIFY,
|
||||
acpi_ac_notify, device);
|
||||
result = acpi_dev_install_notify_handler(adev, ACPI_ALL_NOTIFY,
|
||||
acpi_ac_notify, ac);
|
||||
if (result)
|
||||
goto err_unregister;
|
||||
|
||||
@ -275,16 +261,9 @@ err_release_ac:
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int acpi_ac_resume(struct device *dev)
|
||||
{
|
||||
struct acpi_ac *ac;
|
||||
struct acpi_ac *ac = dev_get_drvdata(dev);
|
||||
unsigned int old_state;
|
||||
|
||||
if (!dev)
|
||||
return -EINVAL;
|
||||
|
||||
ac = acpi_driver_data(to_acpi_device(dev));
|
||||
if (!ac)
|
||||
return -EINVAL;
|
||||
|
||||
old_state = ac->state;
|
||||
if (acpi_ac_get_state(ac))
|
||||
return 0;
|
||||
@ -297,16 +276,11 @@ static int acpi_ac_resume(struct device *dev)
|
||||
#define acpi_ac_resume NULL
|
||||
#endif
|
||||
|
||||
static void acpi_ac_remove(struct acpi_device *device)
|
||||
static void acpi_ac_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct acpi_ac *ac = NULL;
|
||||
struct acpi_ac *ac = platform_get_drvdata(pdev);
|
||||
|
||||
if (!device || !acpi_driver_data(device))
|
||||
return;
|
||||
|
||||
ac = acpi_driver_data(device);
|
||||
|
||||
acpi_dev_remove_notify_handler(device, ACPI_ALL_NOTIFY,
|
||||
acpi_dev_remove_notify_handler(ac->device, ACPI_ALL_NOTIFY,
|
||||
acpi_ac_notify);
|
||||
power_supply_unregister(ac->charger);
|
||||
unregister_acpi_notifier(&ac->battery_nb);
|
||||
@ -314,6 +288,16 @@ static void acpi_ac_remove(struct acpi_device *device)
|
||||
kfree(ac);
|
||||
}
|
||||
|
||||
static struct platform_driver acpi_ac_driver = {
|
||||
.probe = acpi_ac_probe,
|
||||
.remove_new = acpi_ac_remove,
|
||||
.driver = {
|
||||
.name = "ac",
|
||||
.acpi_match_table = ac_device_ids,
|
||||
.pm = &acpi_ac_pm,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init acpi_ac_init(void)
|
||||
{
|
||||
int result;
|
||||
@ -326,7 +310,7 @@ static int __init acpi_ac_init(void)
|
||||
|
||||
dmi_check_system(ac_dmi_table);
|
||||
|
||||
result = acpi_bus_register_driver(&acpi_ac_driver);
|
||||
result = platform_driver_register(&acpi_ac_driver);
|
||||
if (result < 0)
|
||||
return -ENODEV;
|
||||
|
||||
@ -335,7 +319,7 @@ static int __init acpi_ac_init(void)
|
||||
|
||||
static void __exit acpi_ac_exit(void)
|
||||
{
|
||||
acpi_bus_unregister_driver(&acpi_ac_driver);
|
||||
platform_driver_unregister(&acpi_ac_driver);
|
||||
}
|
||||
module_init(acpi_ac_init);
|
||||
module_exit(acpi_ac_exit);
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/perf_event.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <asm/mwait.h>
|
||||
#include <xen/xen.h>
|
||||
|
||||
@ -336,33 +337,14 @@ static ssize_t idlecpus_show(struct device *dev,
|
||||
|
||||
static DEVICE_ATTR_RW(idlecpus);
|
||||
|
||||
static int acpi_pad_add_sysfs(struct acpi_device *device)
|
||||
{
|
||||
int result;
|
||||
static struct attribute *acpi_pad_attrs[] = {
|
||||
&dev_attr_idlecpus.attr,
|
||||
&dev_attr_idlepct.attr,
|
||||
&dev_attr_rrtime.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
result = device_create_file(&device->dev, &dev_attr_idlecpus);
|
||||
if (result)
|
||||
return -ENODEV;
|
||||
result = device_create_file(&device->dev, &dev_attr_idlepct);
|
||||
if (result) {
|
||||
device_remove_file(&device->dev, &dev_attr_idlecpus);
|
||||
return -ENODEV;
|
||||
}
|
||||
result = device_create_file(&device->dev, &dev_attr_rrtime);
|
||||
if (result) {
|
||||
device_remove_file(&device->dev, &dev_attr_idlecpus);
|
||||
device_remove_file(&device->dev, &dev_attr_idlepct);
|
||||
return -ENODEV;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void acpi_pad_remove_sysfs(struct acpi_device *device)
|
||||
{
|
||||
device_remove_file(&device->dev, &dev_attr_idlecpus);
|
||||
device_remove_file(&device->dev, &dev_attr_idlepct);
|
||||
device_remove_file(&device->dev, &dev_attr_rrtime);
|
||||
}
|
||||
ATTRIBUTE_GROUPS(acpi_pad);
|
||||
|
||||
/*
|
||||
* Query firmware how many CPUs should be idle
|
||||
@ -416,13 +398,13 @@ static void acpi_pad_handle_notify(acpi_handle handle)
|
||||
static void acpi_pad_notify(acpi_handle handle, u32 event,
|
||||
void *data)
|
||||
{
|
||||
struct acpi_device *device = data;
|
||||
struct acpi_device *adev = data;
|
||||
|
||||
switch (event) {
|
||||
case ACPI_PROCESSOR_AGGREGATOR_NOTIFY:
|
||||
acpi_pad_handle_notify(handle);
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event, 0);
|
||||
acpi_bus_generate_netlink_event(adev->pnp.device_class,
|
||||
dev_name(&adev->dev), event, 0);
|
||||
break;
|
||||
default:
|
||||
pr_warn("Unsupported event [0x%x]\n", event);
|
||||
@ -430,35 +412,33 @@ static void acpi_pad_notify(acpi_handle handle, u32 event,
|
||||
}
|
||||
}
|
||||
|
||||
static int acpi_pad_add(struct acpi_device *device)
|
||||
static int acpi_pad_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct acpi_device *adev = ACPI_COMPANION(&pdev->dev);
|
||||
acpi_status status;
|
||||
|
||||
strcpy(acpi_device_name(device), ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME);
|
||||
strcpy(acpi_device_class(device), ACPI_PROCESSOR_AGGREGATOR_CLASS);
|
||||
strcpy(acpi_device_name(adev), ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME);
|
||||
strcpy(acpi_device_class(adev), ACPI_PROCESSOR_AGGREGATOR_CLASS);
|
||||
|
||||
if (acpi_pad_add_sysfs(device))
|
||||
return -ENODEV;
|
||||
status = acpi_install_notify_handler(adev->handle,
|
||||
ACPI_DEVICE_NOTIFY, acpi_pad_notify, adev);
|
||||
|
||||
status = acpi_install_notify_handler(device->handle,
|
||||
ACPI_DEVICE_NOTIFY, acpi_pad_notify, device);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
acpi_pad_remove_sysfs(device);
|
||||
if (ACPI_FAILURE(status))
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void acpi_pad_remove(struct acpi_device *device)
|
||||
static void acpi_pad_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct acpi_device *adev = ACPI_COMPANION(&pdev->dev);
|
||||
|
||||
mutex_lock(&isolated_cpus_lock);
|
||||
acpi_pad_idle_cpus(0);
|
||||
mutex_unlock(&isolated_cpus_lock);
|
||||
|
||||
acpi_remove_notify_handler(device->handle,
|
||||
acpi_remove_notify_handler(adev->handle,
|
||||
ACPI_DEVICE_NOTIFY, acpi_pad_notify);
|
||||
acpi_pad_remove_sysfs(device);
|
||||
}
|
||||
|
||||
static const struct acpi_device_id pad_device_ids[] = {
|
||||
@ -467,13 +447,13 @@ static const struct acpi_device_id pad_device_ids[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, pad_device_ids);
|
||||
|
||||
static struct acpi_driver acpi_pad_driver = {
|
||||
.name = "processor_aggregator",
|
||||
.class = ACPI_PROCESSOR_AGGREGATOR_CLASS,
|
||||
.ids = pad_device_ids,
|
||||
.ops = {
|
||||
.add = acpi_pad_add,
|
||||
.remove = acpi_pad_remove,
|
||||
static struct platform_driver acpi_pad_driver = {
|
||||
.probe = acpi_pad_probe,
|
||||
.remove_new = acpi_pad_remove,
|
||||
.driver = {
|
||||
.dev_groups = acpi_pad_groups,
|
||||
.name = "processor_aggregator",
|
||||
.acpi_match_table = pad_device_ids,
|
||||
},
|
||||
};
|
||||
|
||||
@ -487,12 +467,12 @@ static int __init acpi_pad_init(void)
|
||||
if (power_saving_mwait_eax == 0)
|
||||
return -EINVAL;
|
||||
|
||||
return acpi_bus_register_driver(&acpi_pad_driver);
|
||||
return platform_driver_register(&acpi_pad_driver);
|
||||
}
|
||||
|
||||
static void __exit acpi_pad_exit(void)
|
||||
{
|
||||
acpi_bus_unregister_driver(&acpi_pad_driver);
|
||||
platform_driver_unregister(&acpi_pad_driver);
|
||||
}
|
||||
|
||||
module_init(acpi_pad_init);
|
||||
|
@ -250,12 +250,9 @@ static int __init pnpacpi_add_device(struct acpi_device *device)
|
||||
dev->capabilities |= PNP_DISABLE;
|
||||
|
||||
if (strlen(acpi_device_name(device)))
|
||||
strncpy(dev->name, acpi_device_name(device), sizeof(dev->name));
|
||||
strscpy(dev->name, acpi_device_name(device), sizeof(dev->name));
|
||||
else
|
||||
strncpy(dev->name, acpi_device_bid(device), sizeof(dev->name));
|
||||
|
||||
/* Handle possible string truncation */
|
||||
dev->name[sizeof(dev->name) - 1] = '\0';
|
||||
strscpy(dev->name, acpi_device_bid(device), sizeof(dev->name));
|
||||
|
||||
if (dev->active)
|
||||
pnpacpi_parse_allocated_resource(dev);
|
||||
|
@ -454,8 +454,8 @@ static unsigned char *pnpbios_parse_compatible_ids(unsigned char *p,
|
||||
switch (tag) {
|
||||
|
||||
case LARGE_TAG_ANSISTR:
|
||||
strncpy(dev->name, p + 3,
|
||||
len >= PNP_NAME_LEN ? PNP_NAME_LEN - 2 : len);
|
||||
memcpy(dev->name, p + 3,
|
||||
len >= PNP_NAME_LEN ? PNP_NAME_LEN - 2 : len);
|
||||
dev->name[len >=
|
||||
PNP_NAME_LEN ? PNP_NAME_LEN - 1 : len] = '\0';
|
||||
break;
|
||||
|
@ -291,7 +291,7 @@ static inline void pnp_set_drvdata(struct pnp_dev *pdev, void *data)
|
||||
|
||||
struct pnp_fixup {
|
||||
char id[7];
|
||||
void (*quirk_function) (struct pnp_dev * dev); /* fixup function */
|
||||
void (*quirk_function) (struct pnp_dev *dev); /* fixup function */
|
||||
};
|
||||
|
||||
/* config parameters */
|
||||
@ -419,8 +419,8 @@ struct pnp_protocol {
|
||||
|
||||
/* protocol specific suspend/resume */
|
||||
bool (*can_wakeup) (struct pnp_dev *dev);
|
||||
int (*suspend) (struct pnp_dev * dev, pm_message_t state);
|
||||
int (*resume) (struct pnp_dev * dev);
|
||||
int (*suspend) (struct pnp_dev *dev, pm_message_t state);
|
||||
int (*resume) (struct pnp_dev *dev);
|
||||
|
||||
/* used by pnp layer only (look but don't touch) */
|
||||
unsigned char number; /* protocol number */
|
||||
@ -492,7 +492,7 @@ static inline int pnp_start_dev(struct pnp_dev *dev) { return -ENODEV; }
|
||||
static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; }
|
||||
static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; }
|
||||
static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; }
|
||||
static inline int pnp_range_reserved(resource_size_t start, resource_size_t end) { return 0;}
|
||||
static inline int pnp_range_reserved(resource_size_t start, resource_size_t end) { return 0; }
|
||||
|
||||
/* protocol helpers */
|
||||
static inline int pnp_is_active(struct pnp_dev *dev) { return 0; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user