mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
Pull sysfs into test branch
Conflicts: Documentation/feature-removal-schedule.txt include/acpi/acpi_drivers.h Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
commit
975a8e3ed2
@ -274,6 +274,7 @@ Who: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
|
||||
|
||||
---------------------------
|
||||
|
||||
<<<<<<< test:Documentation/feature-removal-schedule.txt
|
||||
What: ACPI hotkey driver (CONFIG_ACPI_HOTKEY)
|
||||
When: 2.6.21
|
||||
Why: hotkey.c was an attempt to consolidate multiple drivers that use
|
||||
@ -306,11 +307,18 @@ Why: The ACPI namespace is effectively the symbol list for
|
||||
the BIOS can be extracted and disassembled with acpidump
|
||||
and iasl as documented in the pmtools package here:
|
||||
http://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/utils
|
||||
|
||||
Who: Len Brown <len.brown@intel.com>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: ACPI procfs interface
|
||||
When: July 2007
|
||||
Why: After ACPI sysfs conversion, ACPI attributes will be duplicated
|
||||
in sysfs and the ACPI procfs interface should be removed.
|
||||
Who: Zhang Rui <rui.zhang@intel.com>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: /proc/acpi/button
|
||||
When: August 2007
|
||||
Why: /proc/acpi/button has been replaced by events to the input layer
|
||||
|
@ -77,6 +77,20 @@ config ACPI_SLEEP_PROC_SLEEP
|
||||
Create /proc/acpi/sleep
|
||||
Deprecated by /sys/power/state
|
||||
|
||||
config ACPI_PROCFS
|
||||
bool "Procfs interface (deprecated)"
|
||||
depends on ACPI
|
||||
default y
|
||||
---help---
|
||||
Procfs interface for ACPI is made optional for back-compatible.
|
||||
As the same functions are duplicated in sysfs interface
|
||||
and this proc interface will be removed some time later,
|
||||
it's marked as deprecated.
|
||||
( /proc/acpi/debug_layer && debug_level are deprecated by
|
||||
/sys/module/acpi/parameters/debug_layer && debug_level.
|
||||
/proc/acpi/info is deprecated by
|
||||
/sys/module/acpi/parameters/acpica_version )
|
||||
|
||||
config ACPI_AC
|
||||
tristate "AC Adapter"
|
||||
depends on X86
|
||||
|
@ -37,6 +37,7 @@ endif
|
||||
|
||||
obj-y += sleep/
|
||||
obj-y += bus.o glue.o
|
||||
obj-y += scan.o motherboard.o
|
||||
obj-$(CONFIG_ACPI_AC) += ac.o
|
||||
obj-$(CONFIG_ACPI_BATTERY) += battery.o
|
||||
obj-$(CONFIG_ACPI_BUTTON) += button.o
|
||||
@ -57,7 +58,6 @@ obj-$(CONFIG_ACPI_NUMA) += numa.o
|
||||
obj-$(CONFIG_ACPI_ASUS) += asus_acpi.o
|
||||
obj-$(CONFIG_ACPI_IBM) += ibm_acpi.o
|
||||
obj-$(CONFIG_ACPI_TOSHIBA) += toshiba_acpi.o
|
||||
obj-y += scan.o motherboard.o
|
||||
obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o
|
||||
obj-y += cm_sbs.o
|
||||
obj-$(CONFIG_ACPI_SBS) += i2c_ec.o sbs.o
|
||||
|
@ -64,7 +64,7 @@ extern void *acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir);
|
||||
|
||||
static int acpi_battery_add(struct acpi_device *device);
|
||||
static int acpi_battery_remove(struct acpi_device *device, int type);
|
||||
static int acpi_battery_resume(struct acpi_device *device, int status);
|
||||
static int acpi_battery_resume(struct acpi_device *device);
|
||||
|
||||
static struct acpi_driver acpi_battery_driver = {
|
||||
.name = ACPI_BATTERY_DRIVER_NAME,
|
||||
@ -753,7 +753,7 @@ static int acpi_battery_remove(struct acpi_device *device, int type)
|
||||
}
|
||||
|
||||
/* this is needed to learn about changes made in suspended state */
|
||||
static int acpi_battery_resume(struct acpi_device *device, int state)
|
||||
static int acpi_battery_resume(struct acpi_device *device)
|
||||
{
|
||||
struct acpi_battery *battery;
|
||||
|
||||
|
@ -192,7 +192,7 @@ int acpi_bus_set_power(acpi_handle handle, int state)
|
||||
|
||||
if (!device->flags.power_manageable) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device `[%s]' is not power manageable\n",
|
||||
device->kobj.name));
|
||||
device->dev.kobj.name));
|
||||
return -ENODEV;
|
||||
}
|
||||
/*
|
||||
|
@ -75,7 +75,7 @@ static int acpi_button_state_open_fs(struct inode *inode, struct file *file);
|
||||
static struct acpi_driver acpi_button_driver = {
|
||||
.name = ACPI_BUTTON_DRIVER_NAME,
|
||||
.class = ACPI_BUTTON_CLASS,
|
||||
.ids = "ACPI_FPB,ACPI_FSB,PNP0C0D,PNP0C0C,PNP0C0E",
|
||||
.ids = "button_power,button_sleep,PNP0C0D,PNP0C0C,PNP0C0E",
|
||||
.ops = {
|
||||
.add = acpi_button_add,
|
||||
.remove = acpi_button_remove,
|
||||
|
@ -167,7 +167,7 @@ static void container_notify_cb(acpi_handle handle, u32 type, void *context)
|
||||
if (ACPI_FAILURE(status) || !device) {
|
||||
result = container_device_add(&device, handle);
|
||||
if (!result)
|
||||
kobject_uevent(&device->kobj,
|
||||
kobject_uevent(&device->dev.kobj,
|
||||
KOBJ_ONLINE);
|
||||
else
|
||||
printk("Failed to add container\n");
|
||||
@ -175,13 +175,13 @@ static void container_notify_cb(acpi_handle handle, u32 type, void *context)
|
||||
} else {
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
/* device exist and this is a remove request */
|
||||
kobject_uevent(&device->kobj, KOBJ_OFFLINE);
|
||||
kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ACPI_NOTIFY_EJECT_REQUEST:
|
||||
if (!acpi_bus_get_device(handle, &device) && device) {
|
||||
kobject_uevent(&device->kobj, KOBJ_OFFLINE);
|
||||
kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -13,14 +13,11 @@
|
||||
|
||||
#define _COMPONENT ACPI_SYSTEM_COMPONENT
|
||||
ACPI_MODULE_NAME("debug")
|
||||
#define ACPI_SYSTEM_FILE_DEBUG_LAYER "debug_layer"
|
||||
#define ACPI_SYSTEM_FILE_DEBUG_LEVEL "debug_level"
|
||||
|
||||
#ifdef MODULE_PARAM_PREFIX
|
||||
#undef MODULE_PARAM_PREFIX
|
||||
#endif
|
||||
#define MODULE_PARAM_PREFIX
|
||||
module_param(acpi_dbg_layer, uint, 0400);
|
||||
module_param(acpi_dbg_level, uint, 0400);
|
||||
#define MODULE_PARAM_PREFIX "acpi."
|
||||
|
||||
struct acpi_dlayer {
|
||||
const char *name;
|
||||
@ -86,6 +83,60 @@ static const struct acpi_dlevel acpi_debug_levels[] = {
|
||||
ACPI_DEBUG_INIT(ACPI_LV_EVENTS),
|
||||
};
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
FS Interface (/sys)
|
||||
-------------------------------------------------------------------------- */
|
||||
static int param_get_debug_layer(char *buffer, struct kernel_param *kp) {
|
||||
int result = 0;
|
||||
int i;
|
||||
|
||||
result = sprintf(buffer, "%-25s\tHex SET\n", "Description");
|
||||
|
||||
for(i = 0; i <ARRAY_SIZE(acpi_debug_layers); i++) {
|
||||
result += sprintf(buffer+result, "%-25s\t0x%08lX [%c]\n",
|
||||
acpi_debug_layers[i].name,
|
||||
acpi_debug_layers[i].value,
|
||||
(acpi_dbg_layer & acpi_debug_layers[i].value) ? '*' : ' ');
|
||||
}
|
||||
result += sprintf(buffer+result, "%-25s\t0x%08X [%c]\n", "ACPI_ALL_DRIVERS",
|
||||
ACPI_ALL_DRIVERS,
|
||||
(acpi_dbg_layer & ACPI_ALL_DRIVERS) ==
|
||||
ACPI_ALL_DRIVERS ? '*' : (acpi_dbg_layer &
|
||||
ACPI_ALL_DRIVERS) == 0 ? ' ' : '-');
|
||||
result += sprintf(buffer+result, "--\ndebug_layer = 0x%08X ( * = enabled)\n", acpi_dbg_layer);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static int param_get_debug_level(char *buffer, struct kernel_param *kp) {
|
||||
int result = 0;
|
||||
int i;
|
||||
|
||||
result = sprintf(buffer, "%-25s\tHex SET\n", "Description");
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(acpi_debug_levels); i++) {
|
||||
result += sprintf(buffer+result, "%-25s\t0x%08lX [%c]\n",
|
||||
acpi_debug_levels[i].name,
|
||||
acpi_debug_levels[i].value,
|
||||
(acpi_dbg_level & acpi_debug_levels[i].
|
||||
value) ? '*' : ' ');
|
||||
}
|
||||
result += sprintf(buffer+result, "--\ndebug_level = 0x%08X (* = enabled)\n",
|
||||
acpi_dbg_level);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
module_param_call(debug_layer, param_set_uint, param_get_debug_layer, &acpi_dbg_layer, 0644);
|
||||
module_param_call(debug_level, param_set_uint, param_get_debug_level, &acpi_dbg_level, 0644);
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
FS Interface (/proc)
|
||||
-------------------------------------------------------------------------- */
|
||||
#ifdef CONFIG_ACPI_PROCFS
|
||||
#define ACPI_SYSTEM_FILE_DEBUG_LAYER "debug_layer"
|
||||
#define ACPI_SYSTEM_FILE_DEBUG_LEVEL "debug_level"
|
||||
|
||||
static int
|
||||
acpi_system_read_debug(char *page,
|
||||
char **start, off_t off, int count, int *eof, void *data)
|
||||
@ -221,3 +272,4 @@ static int __init acpi_debug_init(void)
|
||||
}
|
||||
|
||||
subsys_initcall(acpi_debug_init);
|
||||
#endif
|
||||
|
@ -48,8 +48,8 @@ MODULE_LICENSE("GPL");
|
||||
|
||||
static int acpi_fan_add(struct acpi_device *device);
|
||||
static int acpi_fan_remove(struct acpi_device *device, int type);
|
||||
static int acpi_fan_suspend(struct acpi_device *device, int state);
|
||||
static int acpi_fan_resume(struct acpi_device *device, int state);
|
||||
static int acpi_fan_suspend(struct acpi_device *device, pm_message_t state);
|
||||
static int acpi_fan_resume(struct acpi_device *device);
|
||||
|
||||
static struct acpi_driver acpi_fan_driver = {
|
||||
.name = ACPI_FAN_DRIVER_NAME,
|
||||
@ -237,7 +237,7 @@ static int acpi_fan_remove(struct acpi_device *device, int type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int acpi_fan_suspend(struct acpi_device *device, int state)
|
||||
static int acpi_fan_suspend(struct acpi_device *device, pm_message_t state)
|
||||
{
|
||||
if (!device)
|
||||
return -EINVAL;
|
||||
@ -247,7 +247,7 @@ static int acpi_fan_suspend(struct acpi_device *device, int state)
|
||||
return AE_OK;
|
||||
}
|
||||
|
||||
static int acpi_fan_resume(struct acpi_device *device, int state)
|
||||
static int acpi_fan_resume(struct acpi_device *device)
|
||||
{
|
||||
int result = 0;
|
||||
int power_state = 0;
|
||||
|
@ -33,8 +33,7 @@
|
||||
ACPI_MODULE_NAME("acpi_motherboard")
|
||||
|
||||
/* Dell use PNP0C01 instead of PNP0C02 */
|
||||
#define ACPI_MB_HID1 "PNP0C01"
|
||||
#define ACPI_MB_HID2 "PNP0C02"
|
||||
#define ACPI_MB_HID "PNP0C01,PNP0C02"
|
||||
/**
|
||||
* Doesn't care about legacy IO ports, only IO ports beyond 0x1000 are reserved
|
||||
* Doesn't care about the failure of 'request_region', since other may reserve
|
||||
@ -110,19 +109,10 @@ static int acpi_motherboard_add(struct acpi_device *device)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct acpi_driver acpi_motherboard_driver1 = {
|
||||
static struct acpi_driver acpi_motherboard_driver = {
|
||||
.name = "motherboard",
|
||||
.class = "",
|
||||
.ids = ACPI_MB_HID1,
|
||||
.ops = {
|
||||
.add = acpi_motherboard_add,
|
||||
},
|
||||
};
|
||||
|
||||
static struct acpi_driver acpi_motherboard_driver2 = {
|
||||
.name = "motherboard",
|
||||
.class = "",
|
||||
.ids = ACPI_MB_HID2,
|
||||
.ids = ACPI_MB_HID,
|
||||
.ops = {
|
||||
.add = acpi_motherboard_add,
|
||||
},
|
||||
@ -173,8 +163,7 @@ static void __init acpi_reserve_resources(void)
|
||||
|
||||
static int __init acpi_motherboard_init(void)
|
||||
{
|
||||
acpi_bus_register_driver(&acpi_motherboard_driver1);
|
||||
acpi_bus_register_driver(&acpi_motherboard_driver2);
|
||||
acpi_bus_register_driver(&acpi_motherboard_driver);
|
||||
/*
|
||||
* Guarantee motherboard IO reservation first
|
||||
* This module must run after scan.c
|
||||
|
@ -165,6 +165,21 @@ static acpi_status try_get_root_bridge_busnr(acpi_handle handle, int *busnum)
|
||||
return AE_OK;
|
||||
}
|
||||
|
||||
static void acpi_pci_bridge_scan(struct acpi_device *device)
|
||||
{
|
||||
int status;
|
||||
struct acpi_device *child = NULL;
|
||||
|
||||
if (device->flags.bus_address)
|
||||
if (device->parent && device->parent->ops.bind) {
|
||||
status = device->parent->ops.bind(device);
|
||||
if (!status) {
|
||||
list_for_each_entry(child, &device->children, node)
|
||||
acpi_pci_bridge_scan(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int acpi_pci_root_add(struct acpi_device *device)
|
||||
{
|
||||
int result = 0;
|
||||
@ -173,6 +188,7 @@ static int acpi_pci_root_add(struct acpi_device *device)
|
||||
acpi_status status = AE_OK;
|
||||
unsigned long value = 0;
|
||||
acpi_handle handle = NULL;
|
||||
struct acpi_device *child;
|
||||
|
||||
|
||||
if (!device)
|
||||
@ -188,9 +204,6 @@ static int acpi_pci_root_add(struct acpi_device *device)
|
||||
strcpy(acpi_device_class(device), ACPI_PCI_ROOT_CLASS);
|
||||
acpi_driver_data(device) = root;
|
||||
|
||||
/*
|
||||
* TBD: Doesn't the bus driver automatically set this?
|
||||
*/
|
||||
device->ops.bind = acpi_pci_bind;
|
||||
|
||||
/*
|
||||
@ -312,6 +325,12 @@ static int acpi_pci_root_add(struct acpi_device *device)
|
||||
result = acpi_pci_irq_add_prt(device->handle, root->id.segment,
|
||||
root->id.bus);
|
||||
|
||||
/*
|
||||
* Scan and bind all _ADR-Based Devices
|
||||
*/
|
||||
list_for_each_entry(child, &device->children, node)
|
||||
acpi_pci_bridge_scan(child);
|
||||
|
||||
end:
|
||||
if (result) {
|
||||
if (!list_empty(&root->node))
|
||||
|
@ -814,7 +814,7 @@ int acpi_processor_device_add(acpi_handle handle, struct acpi_device **device)
|
||||
return -ENODEV;
|
||||
|
||||
if ((pr->id >= 0) && (pr->id < NR_CPUS)) {
|
||||
kobject_uevent(&(*device)->kobj, KOBJ_ONLINE);
|
||||
kobject_uevent(&(*device)->dev.kobj, KOBJ_ONLINE);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -852,13 +852,13 @@ acpi_processor_hotplug_notify(acpi_handle handle, u32 event, void *data)
|
||||
}
|
||||
|
||||
if (pr->id >= 0 && (pr->id < NR_CPUS)) {
|
||||
kobject_uevent(&device->kobj, KOBJ_OFFLINE);
|
||||
kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE);
|
||||
break;
|
||||
}
|
||||
|
||||
result = acpi_processor_start(device);
|
||||
if ((!result) && ((pr->id >= 0) && (pr->id < NR_CPUS))) {
|
||||
kobject_uevent(&device->kobj, KOBJ_ONLINE);
|
||||
kobject_uevent(&device->dev.kobj, KOBJ_ONLINE);
|
||||
} else {
|
||||
printk(KERN_ERR PREFIX "Device [%s] failed to start\n",
|
||||
acpi_device_bid(device));
|
||||
@ -881,7 +881,7 @@ acpi_processor_hotplug_notify(acpi_handle handle, u32 event, void *data)
|
||||
}
|
||||
|
||||
if ((pr->id < NR_CPUS) && (cpu_present(pr->id)))
|
||||
kobject_uevent(&device->kobj, KOBJ_OFFLINE);
|
||||
kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE);
|
||||
break;
|
||||
default:
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
|
1224
drivers/acpi/scan.c
1224
drivers/acpi/scan.c
File diff suppressed because it is too large
Load Diff
@ -32,6 +32,11 @@
|
||||
|
||||
#define _COMPONENT ACPI_SYSTEM_COMPONENT
|
||||
ACPI_MODULE_NAME("acpi_system")
|
||||
#ifdef MODULE_PARAM_PREFIX
|
||||
#undef MODULE_PARAM_PREFIX
|
||||
#endif
|
||||
#define MODULE_PARAM_PREFIX "acpi."
|
||||
|
||||
#define ACPI_SYSTEM_CLASS "system"
|
||||
#define ACPI_SYSTEM_DRIVER_NAME "ACPI System Driver"
|
||||
#define ACPI_SYSTEM_DEVICE_NAME "System"
|
||||
@ -40,9 +45,23 @@ ACPI_MODULE_NAME("acpi_system")
|
||||
#define ACPI_SYSTEM_FILE_DSDT "dsdt"
|
||||
#define ACPI_SYSTEM_FILE_FADT "fadt"
|
||||
|
||||
/*
|
||||
* Make ACPICA version work as module param
|
||||
*/
|
||||
static int param_get_acpica_version(char *buffer, struct kernel_param *kp) {
|
||||
int result;
|
||||
|
||||
result = sprintf(buffer, "%x", ACPI_CA_VERSION);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
module_param_call(acpica_version, NULL, param_get_acpica_version, NULL, 0444);
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
FS Interface (/proc)
|
||||
-------------------------------------------------------------------------- */
|
||||
#ifdef CONFIG_ACPI_PROCFS
|
||||
|
||||
static int acpi_system_read_info(struct seq_file *seq, void *offset)
|
||||
{
|
||||
@ -62,6 +81,7 @@ static const struct file_operations acpi_system_info_ops = {
|
||||
.llseek = seq_lseek,
|
||||
.release = single_release,
|
||||
};
|
||||
#endif
|
||||
|
||||
static ssize_t acpi_system_read_dsdt(struct file *, char __user *, size_t,
|
||||
loff_t *);
|
||||
@ -125,6 +145,7 @@ static int __init acpi_system_init(void)
|
||||
if (acpi_disabled)
|
||||
return 0;
|
||||
|
||||
#ifdef CONFIG_ACPI_PROCFS
|
||||
/* 'info' [R] */
|
||||
name = ACPI_SYSTEM_FILE_INFO;
|
||||
entry = create_proc_entry(name, S_IRUGO, acpi_root_dir);
|
||||
@ -133,6 +154,7 @@ static int __init acpi_system_init(void)
|
||||
else {
|
||||
entry->proc_fops = &acpi_system_info_ops;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* 'dsdt' [R] */
|
||||
name = ACPI_SYSTEM_FILE_DSDT;
|
||||
@ -156,7 +178,9 @@ static int __init acpi_system_init(void)
|
||||
Error:
|
||||
remove_proc_entry(ACPI_SYSTEM_FILE_FADT, acpi_root_dir);
|
||||
remove_proc_entry(ACPI_SYSTEM_FILE_DSDT, acpi_root_dir);
|
||||
#ifdef CONFIG_ACPI_PROCFS
|
||||
remove_proc_entry(ACPI_SYSTEM_FILE_INFO, acpi_root_dir);
|
||||
#endif
|
||||
|
||||
error = -EFAULT;
|
||||
goto Done;
|
||||
|
@ -82,7 +82,7 @@ MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.\n");
|
||||
|
||||
static int acpi_thermal_add(struct acpi_device *device);
|
||||
static int acpi_thermal_remove(struct acpi_device *device, int type);
|
||||
static int acpi_thermal_resume(struct acpi_device *device, int state);
|
||||
static int acpi_thermal_resume(struct acpi_device *device);
|
||||
static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file);
|
||||
static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file);
|
||||
static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file);
|
||||
@ -1353,7 +1353,7 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int acpi_thermal_resume(struct acpi_device *device, int state)
|
||||
static int acpi_thermal_resume(struct acpi_device *device)
|
||||
{
|
||||
struct acpi_thermal *tz = NULL;
|
||||
int i;
|
||||
|
@ -73,16 +73,14 @@ MODULE_LICENSE("GPL");
|
||||
|
||||
static int acpi_video_bus_add(struct acpi_device *device);
|
||||
static int acpi_video_bus_remove(struct acpi_device *device, int type);
|
||||
static int acpi_video_bus_match(struct acpi_device *device,
|
||||
struct acpi_driver *driver);
|
||||
|
||||
static struct acpi_driver acpi_video_bus = {
|
||||
.name = ACPI_VIDEO_DRIVER_NAME,
|
||||
.class = ACPI_VIDEO_CLASS,
|
||||
.ids = ACPI_VIDEO_HID,
|
||||
.ops = {
|
||||
.add = acpi_video_bus_add,
|
||||
.remove = acpi_video_bus_remove,
|
||||
.match = acpi_video_bus_match,
|
||||
},
|
||||
};
|
||||
|
||||
@ -1885,39 +1883,6 @@ static int acpi_video_bus_remove(struct acpi_device *device, int type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
acpi_video_bus_match(struct acpi_device *device, struct acpi_driver *driver)
|
||||
{
|
||||
acpi_handle h_dummy1;
|
||||
acpi_handle h_dummy2;
|
||||
acpi_handle h_dummy3;
|
||||
|
||||
|
||||
if (!device || !driver)
|
||||
return -EINVAL;
|
||||
|
||||
/* Since there is no HID, CID for ACPI Video drivers, we have
|
||||
* to check well known required nodes for each feature we support.
|
||||
*/
|
||||
|
||||
/* Does this device able to support video switching ? */
|
||||
if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_DOD", &h_dummy1)) &&
|
||||
ACPI_SUCCESS(acpi_get_handle(device->handle, "_DOS", &h_dummy2)))
|
||||
return 0;
|
||||
|
||||
/* Does this device able to retrieve a video ROM ? */
|
||||
if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_ROM", &h_dummy1)))
|
||||
return 0;
|
||||
|
||||
/* Does this device able to configure which video head to be POSTed ? */
|
||||
if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_VPO", &h_dummy1)) &&
|
||||
ACPI_SUCCESS(acpi_get_handle(device->handle, "_GPD", &h_dummy2)) &&
|
||||
ACPI_SUCCESS(acpi_get_handle(device->handle, "_SPD", &h_dummy3)))
|
||||
return 0;
|
||||
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static int __init acpi_video_init(void)
|
||||
{
|
||||
int result = 0;
|
||||
|
@ -91,13 +91,12 @@ typedef int (*acpi_op_remove) (struct acpi_device * device, int type);
|
||||
typedef int (*acpi_op_lock) (struct acpi_device * device, int type);
|
||||
typedef int (*acpi_op_start) (struct acpi_device * device);
|
||||
typedef int (*acpi_op_stop) (struct acpi_device * device, int type);
|
||||
typedef int (*acpi_op_suspend) (struct acpi_device * device, int state);
|
||||
typedef int (*acpi_op_resume) (struct acpi_device * device, int state);
|
||||
typedef int (*acpi_op_suspend) (struct acpi_device * device, pm_message_t state);
|
||||
typedef int (*acpi_op_resume) (struct acpi_device * device);
|
||||
typedef int (*acpi_op_scan) (struct acpi_device * device);
|
||||
typedef int (*acpi_op_bind) (struct acpi_device * device);
|
||||
typedef int (*acpi_op_unbind) (struct acpi_device * device);
|
||||
typedef int (*acpi_op_match) (struct acpi_device * device,
|
||||
struct acpi_driver * driver);
|
||||
typedef int (*acpi_op_shutdown) (struct acpi_device * device);
|
||||
|
||||
struct acpi_bus_ops {
|
||||
u32 acpi_op_add:1;
|
||||
@ -110,7 +109,7 @@ struct acpi_bus_ops {
|
||||
u32 acpi_op_scan:1;
|
||||
u32 acpi_op_bind:1;
|
||||
u32 acpi_op_unbind:1;
|
||||
u32 acpi_op_match:1;
|
||||
u32 acpi_op_shutdown:1;
|
||||
u32 reserved:21;
|
||||
};
|
||||
|
||||
@ -125,16 +124,16 @@ struct acpi_device_ops {
|
||||
acpi_op_scan scan;
|
||||
acpi_op_bind bind;
|
||||
acpi_op_unbind unbind;
|
||||
acpi_op_match match;
|
||||
acpi_op_shutdown shutdown;
|
||||
};
|
||||
|
||||
struct acpi_driver {
|
||||
struct list_head node;
|
||||
char name[80];
|
||||
char class[80];
|
||||
atomic_t references;
|
||||
char *ids; /* Supported Hardware IDs */
|
||||
struct acpi_device_ops ops;
|
||||
struct device_driver drv;
|
||||
struct module *owner;
|
||||
};
|
||||
|
||||
/*
|
||||
@ -184,7 +183,7 @@ struct acpi_device_dir {
|
||||
|
||||
typedef char acpi_bus_id[5];
|
||||
typedef unsigned long acpi_bus_address;
|
||||
typedef char acpi_hardware_id[9];
|
||||
typedef char acpi_hardware_id[15];
|
||||
typedef char acpi_unique_id[9];
|
||||
typedef char acpi_device_name[40];
|
||||
typedef char acpi_device_class[20];
|
||||
@ -295,11 +294,14 @@ struct acpi_device {
|
||||
struct acpi_device_ops ops;
|
||||
struct acpi_driver *driver;
|
||||
void *driver_data;
|
||||
struct kobject kobj;
|
||||
struct device dev;
|
||||
struct acpi_bus_ops bus_ops; /* workaround for different code path for hotplug */
|
||||
enum acpi_bus_removal_type removal_type; /* indicate for different removal type */
|
||||
};
|
||||
|
||||
#define acpi_driver_data(d) ((d)->driver_data)
|
||||
#define to_acpi_device(d) container_of(d, struct acpi_device, dev)
|
||||
#define to_acpi_driver(d) container_of(d, struct acpi_driver, drv)
|
||||
|
||||
/*
|
||||
* Events
|
||||
|
@ -36,13 +36,14 @@
|
||||
|
||||
/* _HID definitions */
|
||||
|
||||
#define ACPI_POWER_HID "ACPI_PWR"
|
||||
#define ACPI_POWER_HID "power_resource"
|
||||
#define ACPI_PROCESSOR_HID "ACPI0007"
|
||||
#define ACPI_SYSTEM_HID "ACPI_SYS"
|
||||
#define ACPI_THERMAL_HID "ACPI_THM"
|
||||
#define ACPI_BUTTON_HID_POWERF "ACPI_FPB"
|
||||
#define ACPI_BUTTON_HID_SLEEPF "ACPI_FSB"
|
||||
|
||||
#define ACPI_SYSTEM_HID "acpi_system"
|
||||
#define ACPI_THERMAL_HID "thermal"
|
||||
#define ACPI_BUTTON_HID_POWERF "button_power"
|
||||
#define ACPI_BUTTON_HID_SLEEPF "button_sleep"
|
||||
#define ACPI_VIDEO_HID "video"
|
||||
#define ACPI_BAY_HID "bay"
|
||||
/* --------------------------------------------------------------------------
|
||||
PCI
|
||||
-------------------------------------------------------------------------- */
|
||||
|
Loading…
Reference in New Issue
Block a user