Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
323ef30a
Commit
323ef30a
authored
Jul 25, 2007
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Pull auto-load-modules into release branch
parents
cb3e0c10
1ba90e3a
Changes
33
Show whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
336 additions
and
106 deletions
+336
-106
drivers/acpi/ac.c
drivers/acpi/ac.c
+7
-2
drivers/acpi/acpi_memhotplug.c
drivers/acpi/acpi_memhotplug.c
+7
-1
drivers/acpi/asus_acpi.c
drivers/acpi/asus_acpi.c
+8
-3
drivers/acpi/battery.c
drivers/acpi/battery.c
+7
-2
drivers/acpi/button.c
drivers/acpi/button.c
+11
-1
drivers/acpi/container.c
drivers/acpi/container.c
+9
-1
drivers/acpi/ec.c
drivers/acpi/ec.c
+6
-2
drivers/acpi/events/evrgnini.c
drivers/acpi/events/evrgnini.c
+1
-1
drivers/acpi/fan.c
drivers/acpi/fan.c
+7
-1
drivers/acpi/namespace/nsxfeval.c
drivers/acpi/namespace/nsxfeval.c
+1
-1
drivers/acpi/pci_link.c
drivers/acpi/pci_link.c
+7
-2
drivers/acpi/pci_root.c
drivers/acpi/pci_root.c
+7
-2
drivers/acpi/power.c
drivers/acpi/power.c
+7
-1
drivers/acpi/processor_core.c
drivers/acpi/processor_core.c
+7
-1
drivers/acpi/sbs.c
drivers/acpi/sbs.c
+8
-2
drivers/acpi/scan.c
drivers/acpi/scan.c
+111
-45
drivers/acpi/thermal.c
drivers/acpi/thermal.c
+7
-1
drivers/acpi/utilities/uteval.c
drivers/acpi/utilities/uteval.c
+2
-2
drivers/acpi/video.c
drivers/acpi/video.c
+7
-1
drivers/char/hpet.c
drivers/char/hpet.c
+7
-1
drivers/input/misc/atlas_btns.c
drivers/input/misc/atlas_btns.c
+7
-2
drivers/misc/asus-laptop.c
drivers/misc/asus-laptop.c
+7
-2
drivers/misc/sony-laptop.c
drivers/misc/sony-laptop.c
+19
-2
drivers/misc/thinkpad_acpi.c
drivers/misc/thinkpad_acpi.c
+16
-4
drivers/misc/thinkpad_acpi.h
drivers/misc/thinkpad_acpi.h
+1
-1
drivers/pnp/pnpacpi/core.c
drivers/pnp/pnpacpi/core.c
+12
-7
include/acpi/acpi_bus.h
include/acpi/acpi_bus.h
+3
-2
include/acpi/acpi_drivers.h
include/acpi/acpi_drivers.h
+13
-8
include/acpi/actypes.h
include/acpi/actypes.h
+3
-3
include/acpi/acutils.h
include/acpi/acutils.h
+2
-2
include/linux/acpi.h
include/linux/acpi.h
+1
-0
include/linux/mod_devicetable.h
include/linux/mod_devicetable.h
+6
-0
scripts/mod/file2alias.c
scripts/mod/file2alias.c
+12
-0
No files found.
drivers/acpi/ac.c
View file @
323ef30a
...
@@ -34,7 +34,6 @@
...
@@ -34,7 +34,6 @@
#define ACPI_AC_COMPONENT 0x00020000
#define ACPI_AC_COMPONENT 0x00020000
#define ACPI_AC_CLASS "ac_adapter"
#define ACPI_AC_CLASS "ac_adapter"
#define ACPI_AC_HID "ACPI0003"
#define ACPI_AC_DEVICE_NAME "AC Adapter"
#define ACPI_AC_DEVICE_NAME "AC Adapter"
#define ACPI_AC_FILE_STATE "state"
#define ACPI_AC_FILE_STATE "state"
#define ACPI_AC_NOTIFY_STATUS 0x80
#define ACPI_AC_NOTIFY_STATUS 0x80
...
@@ -56,10 +55,16 @@ static int acpi_ac_add(struct acpi_device *device);
...
@@ -56,10 +55,16 @@ static int acpi_ac_add(struct acpi_device *device);
static
int
acpi_ac_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_ac_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_ac_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
acpi_ac_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
const
static
struct
acpi_device_id
ac_device_ids
[]
=
{
{
"ACPI0003"
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
ac_device_ids
);
static
struct
acpi_driver
acpi_ac_driver
=
{
static
struct
acpi_driver
acpi_ac_driver
=
{
.
name
=
"ac"
,
.
name
=
"ac"
,
.
class
=
ACPI_AC_CLASS
,
.
class
=
ACPI_AC_CLASS
,
.
ids
=
ACPI_AC_HID
,
.
ids
=
ac_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_ac_add
,
.
add
=
acpi_ac_add
,
.
remove
=
acpi_ac_remove
,
.
remove
=
acpi_ac_remove
,
...
...
drivers/acpi/acpi_memhotplug.c
View file @
323ef30a
...
@@ -53,10 +53,16 @@ static int acpi_memory_device_add(struct acpi_device *device);
...
@@ -53,10 +53,16 @@ static int acpi_memory_device_add(struct acpi_device *device);
static
int
acpi_memory_device_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_memory_device_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_memory_device_start
(
struct
acpi_device
*
device
);
static
int
acpi_memory_device_start
(
struct
acpi_device
*
device
);
static
const
struct
acpi_device_id
memory_device_ids
[]
=
{
{
ACPI_MEMORY_DEVICE_HID
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
memory_device_ids
);
static
struct
acpi_driver
acpi_memory_device_driver
=
{
static
struct
acpi_driver
acpi_memory_device_driver
=
{
.
name
=
"acpi_memhotplug"
,
.
name
=
"acpi_memhotplug"
,
.
class
=
ACPI_MEMORY_DEVICE_CLASS
,
.
class
=
ACPI_MEMORY_DEVICE_CLASS
,
.
ids
=
ACPI_MEMORY_DEVICE_HID
,
.
ids
=
memory_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_memory_device_add
,
.
add
=
acpi_memory_device_add
,
.
remove
=
acpi_memory_device_remove
,
.
remove
=
acpi_memory_device_remove
,
...
...
drivers/acpi/asus_acpi.c
View file @
323ef30a
...
@@ -56,7 +56,6 @@
...
@@ -56,7 +56,6 @@
#define ACPI_HOTK_NAME "Asus Laptop ACPI Extras Driver"
#define ACPI_HOTK_NAME "Asus Laptop ACPI Extras Driver"
#define ACPI_HOTK_CLASS "hotkey"
#define ACPI_HOTK_CLASS "hotkey"
#define ACPI_HOTK_DEVICE_NAME "Hotkey"
#define ACPI_HOTK_DEVICE_NAME "Hotkey"
#define ACPI_HOTK_HID "ATK0100"
/*
/*
* Some events we use, same for all Asus
* Some events we use, same for all Asus
...
@@ -426,14 +425,20 @@ static struct acpi_table_header *asus_info;
...
@@ -426,14 +425,20 @@ static struct acpi_table_header *asus_info;
static
struct
asus_hotk
*
hotk
;
static
struct
asus_hotk
*
hotk
;
/*
/*
* The hotkey driver declaration
* The hotkey driver
and autoloading
declaration
*/
*/
static
int
asus_hotk_add
(
struct
acpi_device
*
device
);
static
int
asus_hotk_add
(
struct
acpi_device
*
device
);
static
int
asus_hotk_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
asus_hotk_remove
(
struct
acpi_device
*
device
,
int
type
);
static
const
struct
acpi_device_id
asus_device_ids
[]
=
{
{
"ATK0100"
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
asus_device_ids
);
static
struct
acpi_driver
asus_hotk_driver
=
{
static
struct
acpi_driver
asus_hotk_driver
=
{
.
name
=
"asus_acpi"
,
.
name
=
"asus_acpi"
,
.
class
=
ACPI_HOTK_CLASS
,
.
class
=
ACPI_HOTK_CLASS
,
.
ids
=
ACPI_HOTK_HID
,
.
ids
=
asus_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
asus_hotk_add
,
.
add
=
asus_hotk_add
,
.
remove
=
asus_hotk_remove
,
.
remove
=
asus_hotk_remove
,
...
...
drivers/acpi/battery.c
View file @
323ef30a
...
@@ -41,7 +41,6 @@
...
@@ -41,7 +41,6 @@
#define ACPI_BATTERY_COMPONENT 0x00040000
#define ACPI_BATTERY_COMPONENT 0x00040000
#define ACPI_BATTERY_CLASS "battery"
#define ACPI_BATTERY_CLASS "battery"
#define ACPI_BATTERY_HID "PNP0C0A"
#define ACPI_BATTERY_DEVICE_NAME "Battery"
#define ACPI_BATTERY_DEVICE_NAME "Battery"
#define ACPI_BATTERY_NOTIFY_STATUS 0x80
#define ACPI_BATTERY_NOTIFY_STATUS 0x80
#define ACPI_BATTERY_NOTIFY_INFO 0x81
#define ACPI_BATTERY_NOTIFY_INFO 0x81
...
@@ -74,10 +73,16 @@ static int acpi_battery_add(struct acpi_device *device);
...
@@ -74,10 +73,16 @@ static int acpi_battery_add(struct acpi_device *device);
static
int
acpi_battery_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_battery_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_battery_resume
(
struct
acpi_device
*
device
);
static
int
acpi_battery_resume
(
struct
acpi_device
*
device
);
static
const
struct
acpi_device_id
battery_device_ids
[]
=
{
{
"PNP0C0A"
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
battery_device_ids
);
static
struct
acpi_driver
acpi_battery_driver
=
{
static
struct
acpi_driver
acpi_battery_driver
=
{
.
name
=
"battery"
,
.
name
=
"battery"
,
.
class
=
ACPI_BATTERY_CLASS
,
.
class
=
ACPI_BATTERY_CLASS
,
.
ids
=
ACPI_BATTERY_HID
,
.
ids
=
battery_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_battery_add
,
.
add
=
acpi_battery_add
,
.
resume
=
acpi_battery_resume
,
.
resume
=
acpi_battery_resume
,
...
...
drivers/acpi/button.c
View file @
323ef30a
...
@@ -66,6 +66,16 @@ MODULE_AUTHOR("Paul Diefenbaugh");
...
@@ -66,6 +66,16 @@ MODULE_AUTHOR("Paul Diefenbaugh");
MODULE_DESCRIPTION
(
"ACPI Button Driver"
);
MODULE_DESCRIPTION
(
"ACPI Button Driver"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
static
const
struct
acpi_device_id
button_device_ids
[]
=
{
{
ACPI_BUTTON_HID_LID
,
0
},
{
ACPI_BUTTON_HID_SLEEP
,
0
},
{
ACPI_BUTTON_HID_SLEEPF
,
0
},
{
ACPI_BUTTON_HID_POWER
,
0
},
{
ACPI_BUTTON_HID_POWERF
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
button_device_ids
);
static
int
acpi_button_add
(
struct
acpi_device
*
device
);
static
int
acpi_button_add
(
struct
acpi_device
*
device
);
static
int
acpi_button_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_button_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_button_info_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
acpi_button_info_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
...
@@ -74,7 +84,7 @@ static int acpi_button_state_open_fs(struct inode *inode, struct file *file);
...
@@ -74,7 +84,7 @@ static int acpi_button_state_open_fs(struct inode *inode, struct file *file);
static
struct
acpi_driver
acpi_button_driver
=
{
static
struct
acpi_driver
acpi_button_driver
=
{
.
name
=
"button"
,
.
name
=
"button"
,
.
class
=
ACPI_BUTTON_CLASS
,
.
class
=
ACPI_BUTTON_CLASS
,
.
ids
=
"button_power,button_sleep,PNP0C0D,PNP0C0C,PNP0C0E"
,
.
ids
=
button_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_button_add
,
.
add
=
acpi_button_add
,
.
remove
=
acpi_button_remove
,
.
remove
=
acpi_button_remove
,
...
...
drivers/acpi/container.c
View file @
323ef30a
...
@@ -52,10 +52,18 @@ MODULE_LICENSE("GPL");
...
@@ -52,10 +52,18 @@ MODULE_LICENSE("GPL");
static
int
acpi_container_add
(
struct
acpi_device
*
device
);
static
int
acpi_container_add
(
struct
acpi_device
*
device
);
static
int
acpi_container_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_container_remove
(
struct
acpi_device
*
device
,
int
type
);
static
const
struct
acpi_device_id
container_device_ids
[]
=
{
{
"ACPI0004"
,
0
},
{
"PNP0A05"
,
0
},
{
"PNP0A06"
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
container_device_ids
);
static
struct
acpi_driver
acpi_container_driver
=
{
static
struct
acpi_driver
acpi_container_driver
=
{
.
name
=
"container"
,
.
name
=
"container"
,
.
class
=
ACPI_CONTAINER_CLASS
,
.
class
=
ACPI_CONTAINER_CLASS
,
.
ids
=
"ACPI0004,PNP0A05,PNP0A06"
,
.
ids
=
container_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_container_add
,
.
add
=
acpi_container_add
,
.
remove
=
acpi_container_remove
,
.
remove
=
acpi_container_remove
,
...
...
drivers/acpi/ec.c
View file @
323ef30a
...
@@ -41,7 +41,6 @@
...
@@ -41,7 +41,6 @@
#include <acpi/actypes.h>
#include <acpi/actypes.h>
#define ACPI_EC_CLASS "embedded_controller"
#define ACPI_EC_CLASS "embedded_controller"
#define ACPI_EC_HID "PNP0C09"
#define ACPI_EC_DEVICE_NAME "Embedded Controller"
#define ACPI_EC_DEVICE_NAME "Embedded Controller"
#define ACPI_EC_FILE_INFO "info"
#define ACPI_EC_FILE_INFO "info"
...
@@ -82,10 +81,15 @@ static int acpi_ec_start(struct acpi_device *device);
...
@@ -82,10 +81,15 @@ static int acpi_ec_start(struct acpi_device *device);
static
int
acpi_ec_stop
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_ec_stop
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_ec_add
(
struct
acpi_device
*
device
);
static
int
acpi_ec_add
(
struct
acpi_device
*
device
);
static
const
struct
acpi_device_id
ec_device_ids
[]
=
{
{
"PNP0C09"
,
0
},
{
""
,
0
},
};
static
struct
acpi_driver
acpi_ec_driver
=
{
static
struct
acpi_driver
acpi_ec_driver
=
{
.
name
=
"ec"
,
.
name
=
"ec"
,
.
class
=
ACPI_EC_CLASS
,
.
class
=
ACPI_EC_CLASS
,
.
ids
=
ACPI_EC_HID
,
.
ids
=
ec_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_ec_add
,
.
add
=
acpi_ec_add
,
.
remove
=
acpi_ec_remove
,
.
remove
=
acpi_ec_remove
,
...
...
drivers/acpi/events/evrgnini.c
View file @
323ef30a
...
@@ -378,7 +378,7 @@ static u8 acpi_ev_match_pci_root_bridge(char *id)
...
@@ -378,7 +378,7 @@ static u8 acpi_ev_match_pci_root_bridge(char *id)
static
u8
acpi_ev_is_pci_root_bridge
(
struct
acpi_namespace_node
*
node
)
static
u8
acpi_ev_is_pci_root_bridge
(
struct
acpi_namespace_node
*
node
)
{
{
acpi_status
status
;
acpi_status
status
;
struct
acpi_device_id
hid
;
struct
acpi
ca
_device_id
hid
;
struct
acpi_compatible_id_list
*
cid
;
struct
acpi_compatible_id_list
*
cid
;
acpi_native_uint
i
;
acpi_native_uint
i
;
...
...
drivers/acpi/fan.c
View file @
323ef30a
...
@@ -50,10 +50,16 @@ static int acpi_fan_remove(struct acpi_device *device, int type);
...
@@ -50,10 +50,16 @@ static int acpi_fan_remove(struct acpi_device *device, int type);
static
int
acpi_fan_suspend
(
struct
acpi_device
*
device
,
pm_message_t
state
);
static
int
acpi_fan_suspend
(
struct
acpi_device
*
device
,
pm_message_t
state
);
static
int
acpi_fan_resume
(
struct
acpi_device
*
device
);
static
int
acpi_fan_resume
(
struct
acpi_device
*
device
);
static
const
struct
acpi_device_id
fan_device_ids
[]
=
{
{
"PNP0C0B"
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
fan_device_ids
);
static
struct
acpi_driver
acpi_fan_driver
=
{
static
struct
acpi_driver
acpi_fan_driver
=
{
.
name
=
"fan"
,
.
name
=
"fan"
,
.
class
=
ACPI_FAN_CLASS
,
.
class
=
ACPI_FAN_CLASS
,
.
ids
=
"PNP0C0B"
,
.
ids
=
fan_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_fan_add
,
.
add
=
acpi_fan_add
,
.
remove
=
acpi_fan_remove
,
.
remove
=
acpi_fan_remove
,
...
...
drivers/acpi/namespace/nsxfeval.c
View file @
323ef30a
...
@@ -440,7 +440,7 @@ acpi_ns_get_device_callback(acpi_handle obj_handle,
...
@@ -440,7 +440,7 @@ acpi_ns_get_device_callback(acpi_handle obj_handle,
acpi_status
status
;
acpi_status
status
;
struct
acpi_namespace_node
*
node
;
struct
acpi_namespace_node
*
node
;
u32
flags
;
u32
flags
;
struct
acpi_device_id
hid
;
struct
acpi
ca
_device_id
hid
;
struct
acpi_compatible_id_list
*
cid
;
struct
acpi_compatible_id_list
*
cid
;
acpi_native_uint
i
;
acpi_native_uint
i
;
...
...
drivers/acpi/pci_link.c
View file @
323ef30a
...
@@ -46,7 +46,6 @@
...
@@ -46,7 +46,6 @@
#define _COMPONENT ACPI_PCI_COMPONENT
#define _COMPONENT ACPI_PCI_COMPONENT
ACPI_MODULE_NAME
(
"pci_link"
);
ACPI_MODULE_NAME
(
"pci_link"
);
#define ACPI_PCI_LINK_CLASS "pci_irq_routing"
#define ACPI_PCI_LINK_CLASS "pci_irq_routing"
#define ACPI_PCI_LINK_HID "PNP0C0F"
#define ACPI_PCI_LINK_DEVICE_NAME "PCI Interrupt Link"
#define ACPI_PCI_LINK_DEVICE_NAME "PCI Interrupt Link"
#define ACPI_PCI_LINK_FILE_INFO "info"
#define ACPI_PCI_LINK_FILE_INFO "info"
#define ACPI_PCI_LINK_FILE_STATUS "state"
#define ACPI_PCI_LINK_FILE_STATUS "state"
...
@@ -54,10 +53,16 @@ ACPI_MODULE_NAME("pci_link");
...
@@ -54,10 +53,16 @@ ACPI_MODULE_NAME("pci_link");
static
int
acpi_pci_link_add
(
struct
acpi_device
*
device
);
static
int
acpi_pci_link_add
(
struct
acpi_device
*
device
);
static
int
acpi_pci_link_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_pci_link_remove
(
struct
acpi_device
*
device
,
int
type
);
static
struct
acpi_device_id
link_device_ids
[]
=
{
{
"PNP0C0F"
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
link_device_ids
);
static
struct
acpi_driver
acpi_pci_link_driver
=
{
static
struct
acpi_driver
acpi_pci_link_driver
=
{
.
name
=
"pci_link"
,
.
name
=
"pci_link"
,
.
class
=
ACPI_PCI_LINK_CLASS
,
.
class
=
ACPI_PCI_LINK_CLASS
,
.
ids
=
ACPI_PCI_LINK_HID
,
.
ids
=
link_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_pci_link_add
,
.
add
=
acpi_pci_link_add
,
.
remove
=
acpi_pci_link_remove
,
.
remove
=
acpi_pci_link_remove
,
...
...
drivers/acpi/pci_root.c
View file @
323ef30a
...
@@ -38,16 +38,21 @@
...
@@ -38,16 +38,21 @@
#define _COMPONENT ACPI_PCI_COMPONENT
#define _COMPONENT ACPI_PCI_COMPONENT
ACPI_MODULE_NAME
(
"pci_root"
);
ACPI_MODULE_NAME
(
"pci_root"
);
#define ACPI_PCI_ROOT_CLASS "pci_bridge"
#define ACPI_PCI_ROOT_CLASS "pci_bridge"
#define ACPI_PCI_ROOT_HID "PNP0A03"
#define ACPI_PCI_ROOT_DEVICE_NAME "PCI Root Bridge"
#define ACPI_PCI_ROOT_DEVICE_NAME "PCI Root Bridge"
static
int
acpi_pci_root_add
(
struct
acpi_device
*
device
);
static
int
acpi_pci_root_add
(
struct
acpi_device
*
device
);
static
int
acpi_pci_root_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_pci_root_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_pci_root_start
(
struct
acpi_device
*
device
);
static
int
acpi_pci_root_start
(
struct
acpi_device
*
device
);
static
struct
acpi_device_id
root_device_ids
[]
=
{
{
"PNP0A03"
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
root_device_ids
);
static
struct
acpi_driver
acpi_pci_root_driver
=
{
static
struct
acpi_driver
acpi_pci_root_driver
=
{
.
name
=
"pci_root"
,
.
name
=
"pci_root"
,
.
class
=
ACPI_PCI_ROOT_CLASS
,
.
class
=
ACPI_PCI_ROOT_CLASS
,
.
ids
=
ACPI_PCI_ROOT_HID
,
.
ids
=
root_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_pci_root_add
,
.
add
=
acpi_pci_root_add
,
.
remove
=
acpi_pci_root_remove
,
.
remove
=
acpi_pci_root_remove
,
...
...
drivers/acpi/power.c
View file @
323ef30a
...
@@ -59,10 +59,16 @@ static int acpi_power_remove(struct acpi_device *device, int type);
...
@@ -59,10 +59,16 @@ static int acpi_power_remove(struct acpi_device *device, int type);
static
int
acpi_power_resume
(
struct
acpi_device
*
device
);
static
int
acpi_power_resume
(
struct
acpi_device
*
device
);
static
int
acpi_power_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
acpi_power_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
struct
acpi_device_id
power_device_ids
[]
=
{
{
ACPI_POWER_HID
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
power_device_ids
);
static
struct
acpi_driver
acpi_power_driver
=
{
static
struct
acpi_driver
acpi_power_driver
=
{
.
name
=
"power"
,
.
name
=
"power"
,
.
class
=
ACPI_POWER_CLASS
,
.
class
=
ACPI_POWER_CLASS
,
.
ids
=
ACPI_POWER_HID
,
.
ids
=
power_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_power_add
,
.
add
=
acpi_power_add
,
.
remove
=
acpi_power_remove
,
.
remove
=
acpi_power_remove
,
...
...
drivers/acpi/processor_core.c
View file @
323ef30a
...
@@ -88,10 +88,16 @@ static int acpi_processor_handle_eject(struct acpi_processor *pr);
...
@@ -88,10 +88,16 @@ static int acpi_processor_handle_eject(struct acpi_processor *pr);
extern
int
acpi_processor_tstate_has_changed
(
struct
acpi_processor
*
pr
);
extern
int
acpi_processor_tstate_has_changed
(
struct
acpi_processor
*
pr
);
static
const
struct
acpi_device_id
processor_device_ids
[]
=
{
{
ACPI_PROCESSOR_HID
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
processor_device_ids
);
static
struct
acpi_driver
acpi_processor_driver
=
{
static
struct
acpi_driver
acpi_processor_driver
=
{
.
name
=
"processor"
,
.
name
=
"processor"
,
.
class
=
ACPI_PROCESSOR_CLASS
,
.
class
=
ACPI_PROCESSOR_CLASS
,
.
ids
=
ACPI_PROCESSOR_HID
,
.
ids
=
processor_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_processor_add
,
.
add
=
acpi_processor_add
,
.
remove
=
acpi_processor_remove
,
.
remove
=
acpi_processor_remove
,
...
...
drivers/acpi/sbs.c
View file @
323ef30a
...
@@ -38,7 +38,6 @@
...
@@ -38,7 +38,6 @@
#define ACPI_SBS_CLASS "sbs"
#define ACPI_SBS_CLASS "sbs"
#define ACPI_AC_CLASS "ac_adapter"
#define ACPI_AC_CLASS "ac_adapter"
#define ACPI_BATTERY_CLASS "battery"
#define ACPI_BATTERY_CLASS "battery"
#define ACPI_SBS_HID "ACPI0002"
#define ACPI_SBS_DEVICE_NAME "Smart Battery System"
#define ACPI_SBS_DEVICE_NAME "Smart Battery System"
#define ACPI_SBS_FILE_INFO "info"
#define ACPI_SBS_FILE_INFO "info"
#define ACPI_SBS_FILE_STATE "state"
#define ACPI_SBS_FILE_STATE "state"
...
@@ -124,10 +123,17 @@ static int acpi_sbs_add(struct acpi_device *device);
...
@@ -124,10 +123,17 @@ static int acpi_sbs_add(struct acpi_device *device);
static
int
acpi_sbs_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_sbs_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_sbs_resume
(
struct
acpi_device
*
device
);
static
int
acpi_sbs_resume
(
struct
acpi_device
*
device
);
static
const
struct
acpi_device_id
sbs_device_ids
[]
=
{
{
"ACPI0001"
,
0
},
{
"ACPI0005"
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
sbs_device_ids
);
static
struct
acpi_driver
acpi_sbs_driver
=
{
static
struct
acpi_driver
acpi_sbs_driver
=
{
.
name
=
"sbs"
,
.
name
=
"sbs"
,
.
class
=
ACPI_SBS_CLASS
,
.
class
=
ACPI_SBS_CLASS
,
.
ids
=
"ACPI0001,ACPI0005"
,
.
ids
=
sbs_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_sbs_add
,
.
add
=
acpi_sbs_add
,
.
remove
=
acpi_sbs_remove
,
.
remove
=
acpi_sbs_remove
,
...
...
drivers/acpi/scan.c
View file @
323ef30a
...
@@ -16,7 +16,7 @@ ACPI_MODULE_NAME("scan");
...
@@ -16,7 +16,7 @@ ACPI_MODULE_NAME("scan");
extern
struct
acpi_device
*
acpi_root
;
extern
struct
acpi_device
*
acpi_root
;
#define ACPI_BUS_CLASS "system_bus"
#define ACPI_BUS_CLASS "system_bus"
#define ACPI_BUS_HID "
ACPI_
BUS"
#define ACPI_BUS_HID "
LNXSY
BUS"
#define ACPI_BUS_DEVICE_NAME "System Bus"
#define ACPI_BUS_DEVICE_NAME "System Bus"
static
LIST_HEAD
(
acpi_device_list
);
static
LIST_HEAD
(
acpi_device_list
);
...
@@ -29,6 +29,62 @@ struct acpi_device_bus_id{
...
@@ -29,6 +29,62 @@ struct acpi_device_bus_id{
unsigned
int
instance_no
;
unsigned
int
instance_no
;
struct
list_head
node
;
struct
list_head
node
;
};
};
/*
* Creates hid/cid(s) string needed for modalias and uevent
* e.g. on a device with hid:IBM0001 and cid:ACPI0001 you get:
* char *modalias: "acpi:IBM0001:ACPI0001"
*/
int
create_modalias
(
struct
acpi_device
*
acpi_dev
,
char
*
modalias
,
int
size
){
int
len
;
if
(
!
acpi_dev
->
flags
.
hardware_id
)
return
-
ENODEV
;
len
=
snprintf
(
modalias
,
size
,
"acpi:%s:"
,
acpi_dev
->
pnp
.
hardware_id
);
if
(
len
<
0
||
len
>=
size
)
return
-
EINVAL
;
size
-=
len
;
if
(
acpi_dev
->
flags
.
compatible_ids
)
{
struct
acpi_compatible_id_list
*
cid_list
;
int
i
;
int
count
;
cid_list
=
acpi_dev
->
pnp
.
cid_list
;
for
(
i
=
0
;
i
<
cid_list
->
count
;
i
++
)
{
count
=
snprintf
(
&
modalias
[
len
],
size
,
"%s:"
,
cid_list
->
id
[
i
].
value
);
if
(
count
<
0
||
count
>=
size
)
{
printk
(
KERN_ERR
"acpi: %s cid[%i] exceeds event buffer size"
,
acpi_dev
->
pnp
.
device_name
,
i
);
break
;
}
len
+=
count
;
size
-=
count
;
}
}
modalias
[
len
]
=
'\0'
;
return
len
;
}
static
ssize_t
acpi_device_modalias_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
struct
acpi_device
*
acpi_dev
=
to_acpi_device
(
dev
);
int
len
;
/* Device has no HID and no CID or string is >1024 */
len
=
create_modalias
(
acpi_dev
,
buf
,
1024
);
if
(
len
<=
0
)
return
0
;
buf
[
len
++
]
=
'\n'
;
return
len
;
}
static
DEVICE_ATTR
(
modalias
,
0444
,
acpi_device_modalias_show
,
NULL
);
static
int
acpi_eject_operation
(
acpi_handle
handle
,
int
lockable
)
static
int
acpi_eject_operation
(
acpi_handle
handle
,
int
lockable
)
{
{
struct
acpi_object_list
arg_list
;
struct
acpi_object_list
arg_list
;
...
@@ -154,6 +210,12 @@ static int acpi_device_setup_files(struct acpi_device *dev)
...
@@ -154,6 +210,12 @@ static int acpi_device_setup_files(struct acpi_device *dev)
goto
end
;
goto
end
;
}
}
if
(
dev
->
flags
.
hardware_id
||
dev
->
flags
.
compatible_ids
){
result
=
device_create_file
(
&
dev
->
dev
,
&
dev_attr_modalias
);
if
(
result
)
goto
end
;
}
/*
/*
* If device has _EJ0, 'eject' file is created that is used to trigger
* If device has _EJ0, 'eject' file is created that is used to trigger
* hot-removal function from userland.
* hot-removal function from userland.
...
@@ -178,6 +240,9 @@ static void acpi_device_remove_files(struct acpi_device *dev)
...
@@ -178,6 +240,9 @@ static void acpi_device_remove_files(struct acpi_device *dev)
if
(
ACPI_SUCCESS
(
status
))
if
(
ACPI_SUCCESS
(
status
))
device_remove_file
(
&
dev
->
dev
,
&
dev_attr_eject
);
device_remove_file
(
&
dev
->
dev
,
&
dev_attr_eject
);
if
(
dev
->
flags
.
hardware_id
||
dev
->
flags
.
compatible_ids
)
device_remove_file
(
&
dev
->
dev
,
&
dev_attr_modalias
);
if
(
dev
->
flags
.
hardware_id
)
if
(
dev
->
flags
.
hardware_id
)
device_remove_file
(
&
dev
->
dev
,
&
dev_attr_hid
);
device_remove_file
(
&
dev
->
dev
,
&
dev_attr_hid
);
if
(
dev
->
handle
)
if
(
dev
->
handle
)
...
@@ -186,6 +251,37 @@ static void acpi_device_remove_files(struct acpi_device *dev)
...
@@ -186,6 +251,37 @@ static void acpi_device_remove_files(struct acpi_device *dev)
/* --------------------------------------------------------------------------
/* --------------------------------------------------------------------------
ACPI Bus operations
ACPI Bus operations
-------------------------------------------------------------------------- */
-------------------------------------------------------------------------- */
int
acpi_match_device_ids
(
struct
acpi_device
*
device
,
const
struct
acpi_device_id
*
ids
)
{
const
struct
acpi_device_id
*
id
;
if
(
device
->
flags
.
hardware_id
)
{
for
(
id
=
ids
;
id
->
id
[
0
];
id
++
)
{
if
(
!
strcmp
((
char
*
)
id
->
id
,
device
->
pnp
.
hardware_id
))
return
0
;
}
}
if
(
device
->
flags
.
compatible_ids
)
{
struct
acpi_compatible_id_list
*
cid_list
=
device
->
pnp
.
cid_list
;
int
i
;
for
(
id
=
ids
;
id
->
id
[
0
];
id
++
)
{
/* compare multiple _CID entries against driver ids */
for
(
i
=
0
;
i
<
cid_list
->
count
;
i
++
)
{
if
(
!
strcmp
((
char
*
)
id
->
id
,
cid_list
->
id
[
i
].
value
))
return
0
;
}
}
}
return
-
ENOENT
;
}
EXPORT_SYMBOL
(
acpi_match_device_ids
);
static
void
acpi_device_release
(
struct
device
*
dev
)
static
void
acpi_device_release
(
struct
device
*
dev
)
{
{
struct
acpi_device
*
acpi_dev
=
to_acpi_device
(
dev
);
struct
acpi_device
*
acpi_dev
=
to_acpi_device
(
dev
);
...
@@ -219,37 +315,19 @@ static int acpi_bus_match(struct device *dev, struct device_driver *drv)
...
@@ -219,37 +315,19 @@ static int acpi_bus_match(struct device *dev, struct device_driver *drv)
struct
acpi_device
*
acpi_dev
=
to_acpi_device
(
dev
);
struct
acpi_device
*
acpi_dev
=
to_acpi_device
(
dev
);
struct
acpi_driver
*
acpi_drv
=
to_acpi_driver
(
drv
);
struct
acpi_driver
*
acpi_drv
=
to_acpi_driver
(
drv
);
return
!
acpi_match_ids
(
acpi_dev
,
acpi_drv
->
ids
);
return
!
acpi_match_
device_
ids
(
acpi_dev
,
acpi_drv
->
ids
);
}
}
static
int
acpi_device_uevent
(
struct
device
*
dev
,
char
**
envp
,
int
num_envp
,
static
int
acpi_device_uevent
(
struct
device
*
dev
,
char
**
envp
,
int
num_envp
,
char
*
buffer
,
int
buffer_size
)
char
*
buffer
,
int
buffer_size
)
{
{
struct
acpi_device
*
acpi_dev
=
to_acpi_device
(
dev
);
struct
acpi_device
*
acpi_dev
=
to_acpi_device
(
dev
);
int
i
=
0
,
length
=
0
,
ret
=
0
;
if
(
acpi_dev
->
flags
.
hardware_id
)
ret
=
add_uevent_var
(
envp
,
num_envp
,
&
i
,
buffer
,
buffer_size
,
&
length
,
"HWID=%s"
,
acpi_dev
->
pnp
.
hardware_id
);
if
(
ret
)
return
-
ENOMEM
;
if
(
acpi_dev
->
flags
.
compatible_ids
)
{
int
j
;
struct
acpi_compatible_id_list
*
cid_list
;
cid_list
=
acpi_dev
->
pnp
.
cid_list
;
for
(
j
=
0
;
j
<
cid_list
->
count
;
j
++
)
{
strcpy
(
buffer
,
"MODALIAS="
);
ret
=
add_uevent_var
(
envp
,
num_envp
,
&
i
,
buffer
,
if
(
create_modalias
(
acpi_dev
,
buffer
+
9
,
buffer_size
-
9
)
>
0
)
{
buffer_size
,
&
length
,
"COMPTID=%s"
,
envp
[
0
]
=
buffer
;
cid_list
->
id
[
j
].
value
);
envp
[
1
]
=
NULL
;
if
(
ret
)
return
-
ENOMEM
;
}
}
}
envp
[
i
]
=
NULL
;
return
0
;
return
0
;
}
}
...
@@ -543,25 +621,6 @@ void acpi_bus_data_handler(acpi_handle handle, u32 function, void *context)
...
@@ -543,25 +621,6 @@ void acpi_bus_data_handler(acpi_handle handle, u32 function, void *context)
return
;
return
;
}
}
int
acpi_match_ids
(
struct
acpi_device
*
device
,
char
*
ids
)
{
if
(
device
->
flags
.
hardware_id
)
if
(
strstr
(
ids
,
device
->
pnp
.
hardware_id
))
return
0
;
if
(
device
->
flags
.
compatible_ids
)
{
struct
acpi_compatible_id_list
*
cid_list
=
device
->
pnp
.
cid_list
;
int
i
;
/* compare multiple _CID entries against driver ids */
for
(
i
=
0
;
i
<
cid_list
->
count
;
i
++
)
{
if
(
strstr
(
ids
,
cid_list
->
id
[
i
].
value
))
return
0
;
}
}
return
-
ENOENT
;
}
static
int
acpi_bus_get_perf_flags
(
struct
acpi_device
*
device
)
static
int
acpi_bus_get_perf_flags
(
struct
acpi_device
*
device
)
{
{
device
->
performance
.
state
=
ACPI_STATE_UNKNOWN
;
device
->
performance
.
state
=
ACPI_STATE_UNKNOWN
;
...
@@ -624,6 +683,13 @@ static int acpi_bus_get_wakeup_device_flags(struct acpi_device *device)
...
@@ -624,6 +683,13 @@ static int acpi_bus_get_wakeup_device_flags(struct acpi_device *device)
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
union
acpi_object
*
package
=
NULL
;
union
acpi_object
*
package
=
NULL
;
struct
acpi_device_id
button_device_ids
[]
=
{
{
"PNP0C0D"
,
0
},
{
"PNP0C0C"
,
0
},
{
"PNP0C0E"
,
0
},
{
""
,
0
},
};
/* _PRW */
/* _PRW */
status
=
acpi_evaluate_object
(
device
->
handle
,
"_PRW"
,
NULL
,
&
buffer
);
status
=
acpi_evaluate_object
(
device
->
handle
,
"_PRW"
,
NULL
,
&
buffer
);
...
@@ -643,7 +709,7 @@ static int acpi_bus_get_wakeup_device_flags(struct acpi_device *device)
...
@@ -643,7 +709,7 @@ static int acpi_bus_get_wakeup_device_flags(struct acpi_device *device)
device
->
wakeup
.
flags
.
valid
=
1
;
device
->
wakeup
.
flags
.
valid
=
1
;
/* Power button, Lid switch always enable wakeup */
/* Power button, Lid switch always enable wakeup */
if
(
!
acpi_match_
ids
(
device
,
"PNP0C0D,PNP0C0C,PNP0C0E"
))
if
(
!
acpi_match_
device_ids
(
device
,
button_device_ids
))
device
->
wakeup
.
flags
.
run_wake
=
1
;
device
->
wakeup
.
flags
.
run_wake
=
1
;
end:
end:
...
...
drivers/acpi/thermal.c
View file @
323ef30a
...
@@ -92,10 +92,16 @@ static int acpi_thermal_polling_open_fs(struct inode *inode, struct file *file);
...
@@ -92,10 +92,16 @@ static int acpi_thermal_polling_open_fs(struct inode *inode, struct file *file);
static
ssize_t
acpi_thermal_write_polling
(
struct
file
*
,
const
char
__user
*
,
static
ssize_t
acpi_thermal_write_polling
(
struct
file
*
,
const
char
__user
*
,
size_t
,
loff_t
*
);
size_t
,
loff_t
*
);
static
const
struct
acpi_device_id
thermal_device_ids
[]
=
{
{
ACPI_THERMAL_HID
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
thermal_device_ids
);
static
struct
acpi_driver
acpi_thermal_driver
=
{
static
struct
acpi_driver
acpi_thermal_driver
=
{
.
name
=
"thermal"
,
.
name
=
"thermal"
,
.
class
=
ACPI_THERMAL_CLASS
,
.
class
=
ACPI_THERMAL_CLASS
,
.
ids
=
ACPI_THERMAL_HID
,
.
ids
=
thermal_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_thermal_add
,
.
add
=
acpi_thermal_add
,
.
remove
=
acpi_thermal_remove
,
.
remove
=
acpi_thermal_remove
,
...
...
drivers/acpi/utilities/uteval.c
View file @
323ef30a
...
@@ -407,7 +407,7 @@ acpi_ut_copy_id_string(char *destination, char *source, acpi_size max_length)
...
@@ -407,7 +407,7 @@ acpi_ut_copy_id_string(char *destination, char *source, acpi_size max_length)
acpi_status
acpi_status
acpi_ut_execute_HID
(
struct
acpi_namespace_node
*
device_node
,
acpi_ut_execute_HID
(
struct
acpi_namespace_node
*
device_node
,
struct
acpi_device_id
*
hid
)
struct
acpi
ca
_device_id
*
hid
)
{
{
union
acpi_operand_object
*
obj_desc
;
union
acpi_operand_object
*
obj_desc
;
acpi_status
status
;
acpi_status
status
;
...
@@ -609,7 +609,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node,
...
@@ -609,7 +609,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node,
acpi_status
acpi_status
acpi_ut_execute_UID
(
struct
acpi_namespace_node
*
device_node
,
acpi_ut_execute_UID
(
struct
acpi_namespace_node
*
device_node
,
struct
acpi_device_id
*
uid
)
struct
acpi
ca
_device_id
*
uid
)
{
{
union
acpi_operand_object
*
obj_desc
;
union
acpi_operand_object
*
obj_desc
;
acpi_status
status
;
acpi_status
status
;
...
...
drivers/acpi/video.c
View file @
323ef30a
...
@@ -74,10 +74,16 @@ MODULE_LICENSE("GPL");
...
@@ -74,10 +74,16 @@ MODULE_LICENSE("GPL");
static
int
acpi_video_bus_add
(
struct
acpi_device
*
device
);
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_remove
(
struct
acpi_device
*
device
,
int
type
);
static
const
struct
acpi_device_id
video_device_ids
[]
=
{
{
ACPI_VIDEO_HID
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
video_device_ids
);
static
struct
acpi_driver
acpi_video_bus
=
{
static
struct
acpi_driver
acpi_video_bus
=
{
.
name
=
"video"
,
.
name
=
"video"
,
.
class
=
ACPI_VIDEO_CLASS
,
.
class
=
ACPI_VIDEO_CLASS
,
.
ids
=
ACPI_VIDEO_HID
,
.
ids
=
video_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
acpi_video_bus_add
,
.
add
=
acpi_video_bus_add
,
.
remove
=
acpi_video_bus_remove
,
.
remove
=
acpi_video_bus_remove
,
...
...
drivers/char/hpet.c
View file @
323ef30a
...
@@ -1007,9 +1007,15 @@ static int hpet_acpi_remove(struct acpi_device *device, int type)
...
@@ -1007,9 +1007,15 @@ static int hpet_acpi_remove(struct acpi_device *device, int type)
return
-
EINVAL
;
return
-
EINVAL
;
}
}
static
const
struct
acpi_device_id
hpet_device_ids
[]
=
{
{
"PNP0103"
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
hpet_device_ids
);
static
struct
acpi_driver
hpet_acpi_driver
=
{
static
struct
acpi_driver
hpet_acpi_driver
=
{
.
name
=
"hpet"
,
.
name
=
"hpet"
,
.
ids
=
"PNP0103"
,
.
ids
=
hpet_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
hpet_acpi_add
,
.
add
=
hpet_acpi_add
,
.
remove
=
hpet_acpi_remove
,
.
remove
=
hpet_acpi_remove
,
...
...
drivers/input/misc/atlas_btns.c
View file @
323ef30a
...
@@ -31,7 +31,6 @@
...
@@ -31,7 +31,6 @@
#define ACPI_ATLAS_NAME "Atlas ACPI"
#define ACPI_ATLAS_NAME "Atlas ACPI"
#define ACPI_ATLAS_CLASS "Atlas"
#define ACPI_ATLAS_CLASS "Atlas"
#define ACPI_ATLAS_BUTTON_HID "ASIM0000"
static
struct
input_dev
*
input_dev
;
static
struct
input_dev
*
input_dev
;
...
@@ -130,10 +129,16 @@ static int atlas_acpi_button_remove(struct acpi_device *device, int type)
...
@@ -130,10 +129,16 @@ static int atlas_acpi_button_remove(struct acpi_device *device, int type)
return
status
;
return
status
;
}
}
static
const
struct
acpi_device_id
atlas_device_ids
[]
=
{
{
"ASIM0000"
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
atlas_device_ids
);
static
struct
acpi_driver
atlas_acpi_driver
=
{
static
struct
acpi_driver
atlas_acpi_driver
=
{
.
name
=
ACPI_ATLAS_NAME
,
.
name
=
ACPI_ATLAS_NAME
,
.
class
=
ACPI_ATLAS_CLASS
,
.
class
=
ACPI_ATLAS_CLASS
,
.
ids
=
ACPI_ATLAS_BUTTON_HID
,
.
ids
=
atlas_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
atlas_acpi_button_add
,
.
add
=
atlas_acpi_button_add
,
.
remove
=
atlas_acpi_button_remove
,
.
remove
=
atlas_acpi_button_remove
,
...
...
drivers/misc/asus-laptop.c
View file @
323ef30a
...
@@ -53,7 +53,6 @@
...
@@ -53,7 +53,6 @@
#define ASUS_HOTK_NAME "Asus Laptop Support"
#define ASUS_HOTK_NAME "Asus Laptop Support"
#define ASUS_HOTK_CLASS "hotkey"
#define ASUS_HOTK_CLASS "hotkey"
#define ASUS_HOTK_DEVICE_NAME "Hotkey"
#define ASUS_HOTK_DEVICE_NAME "Hotkey"
#define ASUS_HOTK_HID "ATK0100"
#define ASUS_HOTK_FILE "asus-laptop"
#define ASUS_HOTK_FILE "asus-laptop"
#define ASUS_HOTK_PREFIX "\\_SB.ATKD."
#define ASUS_HOTK_PREFIX "\\_SB.ATKD."
...
@@ -197,12 +196,18 @@ static struct asus_hotk *hotk;
...
@@ -197,12 +196,18 @@ static struct asus_hotk *hotk;
/*
/*
* The hotkey driver declaration
* The hotkey driver declaration
*/
*/
static
const
struct
acpi_device_id
asus_device_ids
[]
=
{
{
"ATK0100"
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
asus_device_ids
);
static
int
asus_hotk_add
(
struct
acpi_device
*
device
);
static
int
asus_hotk_add
(
struct
acpi_device
*
device
);
static
int
asus_hotk_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
asus_hotk_remove
(
struct
acpi_device
*
device
,
int
type
);
static
struct
acpi_driver
asus_hotk_driver
=
{
static
struct
acpi_driver
asus_hotk_driver
=
{
.
name
=
ASUS_HOTK_NAME
,
.
name
=
ASUS_HOTK_NAME
,
.
class
=
ASUS_HOTK_CLASS
,
.
class
=
ASUS_HOTK_CLASS
,
.
ids
=
ASUS_HOTK_HID
,
.
ids
=
asus_device_ids
,
.
ops
=
{
.
ops
=
{
.
add
=
asus_hotk_add
,
.
add
=
asus_hotk_add
,
.
remove
=
asus_hotk_remove
,
.
remove
=
asus_hotk_remove
,
...
...
drivers/misc/sony-laptop.c
View file @
323ef30a
...
@@ -1124,10 +1124,22 @@ static int sony_nc_remove(struct acpi_device *device, int type)
...
@@ -1124,10 +1124,22 @@ static int sony_nc_remove(struct acpi_device *device, int type)
return
0
;
return
0
;
}
}
static
const
struct
acpi_device_id
sony_device_ids
[]
=
{
{
SONY_NC_HID
,
0
},
{
SONY_PIC_HID
,
0
},
{
""
,
0
},
};
MODULE_DEVICE_TABLE
(
acpi
,
sony_device_ids
);
static
const
struct
acpi_device_id
sony_nc_device_ids
[]
=
{
{
SONY_NC_HID
,
0
},
{
""
,
0
},
};
static
struct
acpi_driver
sony_nc_driver
=
{
static
struct
acpi_driver
sony_nc_driver
=
{
.
name
=
SONY_NC_DRIVER_NAME
,
.
name
=
SONY_NC_DRIVER_NAME
,
.
class
=
SONY_NC_CLASS
,
.
class
=
SONY_NC_CLASS
,
.
ids
=
SONY_NC_HID
,
.
ids
=
sony_nc_device_ids
,
.
owner
=
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
.
ops
=
{
.
ops
=
{
.
add
=
sony_nc_add
,
.
add
=
sony_nc_add
,
...
@@ -2470,10 +2482,15 @@ static int sony_pic_resume(struct acpi_device *device)
...
@@ -2470,10 +2482,15 @@ static int sony_pic_resume(struct acpi_device *device)
return
0
;
return
0
;
}
}
static
const
struct
acpi_device_id
sony_pic_device_ids
[]
=
{
{
SONY_PIC_HID
,
0
},
{
""
,
0
},
};
static
struct
acpi_driver
sony_pic_driver
=
{
static
struct
acpi_driver
sony_pic_driver
=
{
.
name
=
SONY_PIC_DRIVER_NAME
,
.
name
=
SONY_PIC_DRIVER_NAME
,
.
class
=
SONY_PIC_CLASS
,
.
class
=
SONY_PIC_CLASS
,
.
ids
=
SONY_PIC_HID
,
.
ids
=
sony_pic_device_ids
,
.
owner
=
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
.
ops
=
{
.
ops
=
{
.
add
=
sony_pic_add
,
.
add
=
sony_pic_add
,
...
...
drivers/misc/thinkpad_acpi.c
View file @
323ef30a
...
@@ -411,12 +411,13 @@ static int __init register_tpacpi_subdriver(struct ibm_struct *ibm)
...
@@ -411,12 +411,13 @@ static int __init register_tpacpi_subdriver(struct ibm_struct *ibm)
sprintf
(
ibm
->
acpi
->
driver
->
name
,
"%s_%s"
,
IBM_NAME
,
ibm
->
name
);
sprintf
(
ibm
->
acpi
->
driver
->
name
,
"%s_%s"
,
IBM_NAME
,
ibm
->
name
);
ibm
->
acpi
->
driver
->
ids
=
ibm
->
acpi
->
hid
;
ibm
->
acpi
->
driver
->
ids
=
ibm
->
acpi
->
hid
;
ibm
->
acpi
->
driver
->
ops
.
add
=
&
tpacpi_device_add
;
ibm
->
acpi
->
driver
->
ops
.
add
=
&
tpacpi_device_add
;
rc
=
acpi_bus_register_driver
(
ibm
->
acpi
->
driver
);
rc
=
acpi_bus_register_driver
(
ibm
->
acpi
->
driver
);
if
(
rc
<
0
)
{
if
(
rc
<
0
)
{
printk
(
IBM_ERR
"acpi_bus_register_driver(%s) failed: %d
\n
"
,
printk
(
IBM_ERR
"acpi_bus_register_driver(%s) failed: %d
\n
"
,
ibm
->
acpi
->
hid
,
rc
);
ibm
->
name
,
rc
);
kfree
(
ibm
->
acpi
->
driver
);
kfree
(
ibm
->
acpi
->
driver
);
ibm
->
acpi
->
driver
=
NULL
;
ibm
->
acpi
->
driver
=
NULL
;
}
else
if
(
!
rc
)
}
else
if
(
!
rc
)
...
@@ -1316,8 +1317,13 @@ static int hotkey_write(char *buf)
...
@@ -1316,8 +1317,13 @@ static int hotkey_write(char *buf)
return
res
;
return
res
;
}
}
static
const
struct
acpi_device_id
ibm_htk_device_ids
[]
=
{
{
IBM_HKEY_HID
,
0
},
{
""
,
0
},
};
static
struct
tp_acpi_drv_struct
ibm_hotkey_acpidriver
=
{
static
struct
tp_acpi_drv_struct
ibm_hotkey_acpidriver
=
{
.
hid
=
IBM_HKEY_HID
,
.
hid
=
ibm_htk_device_ids
,
.
notify
=
hotkey_notify
,
.
notify
=
hotkey_notify
,
.
handle
=
&
hkey_handle
,
.
handle
=
&
hkey_handle
,
.
type
=
ACPI_DEVICE_NOTIFY
,
.
type
=
ACPI_DEVICE_NOTIFY
,
...
@@ -2080,6 +2086,11 @@ IBM_HANDLE(dock, root, "\\_SB.GDCK", /* X30, X31, X40 */
...
@@ -2080,6 +2086,11 @@ IBM_HANDLE(dock, root, "\\_SB.GDCK", /* X30, X31, X40 */
/* don't list other alternatives as we install a notify handler on the 570 */
/* don't list other alternatives as we install a notify handler on the 570 */
IBM_HANDLE
(
pci
,
root
,
"
\\
_SB.PCI"
);
/* 570 */
IBM_HANDLE
(
pci
,
root
,
"
\\
_SB.PCI"
);
/* 570 */
static
const
struct
acpi_device_id
ibm_pci_device_ids
[]
=
{
{
PCI_ROOT_HID_STRING
,
0
},
{
""
,
0
},
};
static
struct
tp_acpi_drv_struct
ibm_dock_acpidriver
[
2
]
=
{
static
struct
tp_acpi_drv_struct
ibm_dock_acpidriver
[
2
]
=
{
{
{
.
notify
=
dock_notify
,
.
notify
=
dock_notify
,
...
@@ -2090,7 +2101,7 @@ static struct tp_acpi_drv_struct ibm_dock_acpidriver[2] = {
...
@@ -2090,7 +2101,7 @@ static struct tp_acpi_drv_struct ibm_dock_acpidriver[2] = {
/* THIS ONE MUST NEVER BE USED FOR DRIVER AUTOLOADING.
/* THIS ONE MUST NEVER BE USED FOR DRIVER AUTOLOADING.
* We just use it to get notifications of dock hotplug
* We just use it to get notifications of dock hotplug
* in very old thinkpads */
* in very old thinkpads */
.
hid
=
PCI_ROOT_HID_STRING
,
.
hid
=
ibm_pci_device_ids
,
.
notify
=
dock_notify
,
.
notify
=
dock_notify
,
.
handle
=
&
pci_handle
,
.
handle
=
&
pci_handle
,
.
type
=
ACPI_SYSTEM_NOTIFY
,
.
type
=
ACPI_SYSTEM_NOTIFY
,
...
@@ -2149,7 +2160,8 @@ static int __init dock_init2(struct ibm_init_struct *iibm)
...
@@ -2149,7 +2160,8 @@ static int __init dock_init2(struct ibm_init_struct *iibm)
static
void
dock_notify
(
struct
ibm_struct
*
ibm
,
u32
event
)
static
void
dock_notify
(
struct
ibm_struct
*
ibm
,
u32
event
)
{
{
int
docked
=
dock_docked
();
int
docked
=
dock_docked
();
int
pci
=
ibm
->
acpi
->
hid
&&
strstr
(
ibm
->
acpi
->
hid
,
PCI_ROOT_HID_STRING
);
int
pci
=
ibm
->
acpi
->
hid
&&
ibm
->
acpi
->
device
&&
acpi_match_device_ids
(
ibm
->
acpi
->
device
,
ibm_pci_device_ids
);
if
(
event
==
1
&&
!
pci
)
/* 570 */
if
(
event
==
1
&&
!
pci
)
/* 570 */
acpi_bus_generate_event
(
ibm
->
acpi
->
device
,
event
,
1
);
/* button */
acpi_bus_generate_event
(
ibm
->
acpi
->
device
,
event
,
1
);
/* button */
...
...
drivers/misc/thinkpad_acpi.h
View file @
323ef30a
...
@@ -193,7 +193,7 @@ static void thinkpad_acpi_module_exit(void);
...
@@ -193,7 +193,7 @@ static void thinkpad_acpi_module_exit(void);
struct
ibm_struct
;
struct
ibm_struct
;
struct
tp_acpi_drv_struct
{
struct
tp_acpi_drv_struct
{
c
har
*
hid
;
c
onst
struct
acpi_device_id
*
hid
;
struct
acpi_driver
*
driver
;
struct
acpi_driver
*
driver
;
void
(
*
notify
)
(
struct
ibm_struct
*
,
u32
);
void
(
*
notify
)
(
struct
ibm_struct
*
,
u32
);
...
...
drivers/pnp/pnpacpi/core.c
View file @
323ef30a
...
@@ -21,7 +21,10 @@
...
@@ -21,7 +21,10 @@
#include <linux/acpi.h>
#include <linux/acpi.h>
#include <linux/pnp.h>
#include <linux/pnp.h>
#include <linux/mod_devicetable.h>
#include <acpi/acpi_bus.h>
#include <acpi/acpi_bus.h>
#include <acpi/actypes.h>
#include "pnpacpi.h"
#include "pnpacpi.h"
static
int
num
=
0
;
static
int
num
=
0
;
...
@@ -33,15 +36,17 @@ static int num = 0;
...
@@ -33,15 +36,17 @@ static int num = 0;
* have irqs (PIC, Timer) because we call acpi_register_gsi.
* have irqs (PIC, Timer) because we call acpi_register_gsi.
* Finaly only devices that have a CRS method need to be in this list.
* Finaly only devices that have a CRS method need to be in this list.
*/
*/
static
char
__initdata
excluded_id_list
[]
=
static
__initdata
struct
acpi_device_id
excluded_id_list
[]
=
{
"PNP0C09,"
/* EC */
{
"PNP0C09"
,
0
},
/* EC */
"PNP0C0F,"
/* Link device */
{
"PNP0C0F"
,
0
},
/* Link device */
"PNP0000,"
/* PIC */
{
"PNP0000"
,
0
},
/* PIC */
"PNP0100,"
/* Timer */
{
"PNP0100"
,
0
},
/* Timer */
;
{
""
,
0
},
};
static
inline
int
is_exclusive_device
(
struct
acpi_device
*
dev
)
static
inline
int
is_exclusive_device
(
struct
acpi_device
*
dev
)
{
{
return
(
!
acpi_match_ids
(
dev
,
excluded_id_list
));
return
(
!
acpi_match_
device_
ids
(
dev
,
excluded_id_list
));
}
}
/*
/*
...
...
include/acpi/acpi_bus.h
View file @
323ef30a
...
@@ -131,7 +131,7 @@ struct acpi_device_ops {
...
@@ -131,7 +131,7 @@ struct acpi_device_ops {
struct
acpi_driver
{
struct
acpi_driver
{
char
name
[
80
];
char
name
[
80
];
char
class
[
80
];
char
class
[
80
];
c
har
*
ids
;
/* Supported Hardware IDs */
c
onst
struct
acpi_device_id
*
ids
;
/* Supported Hardware IDs */
struct
acpi_device_ops
ops
;
struct
acpi_device_ops
ops
;
struct
device_driver
drv
;
struct
device_driver
drv
;
struct
module
*
owner
;
struct
module
*
owner
;
...
@@ -341,7 +341,8 @@ int acpi_bus_add(struct acpi_device **child, struct acpi_device *parent,
...
@@ -341,7 +341,8 @@ int acpi_bus_add(struct acpi_device **child, struct acpi_device *parent,
int
acpi_bus_trim
(
struct
acpi_device
*
start
,
int
rmdevice
);
int
acpi_bus_trim
(
struct
acpi_device
*
start
,
int
rmdevice
);
int
acpi_bus_start
(
struct
acpi_device
*
device
);
int
acpi_bus_start
(
struct
acpi_device
*
device
);
acpi_status
acpi_bus_get_ejd
(
acpi_handle
handle
,
acpi_handle
*
ejd
);
acpi_status
acpi_bus_get_ejd
(
acpi_handle
handle
,
acpi_handle
*
ejd
);
int
acpi_match_ids
(
struct
acpi_device
*
device
,
char
*
ids
);
int
acpi_match_device_ids
(
struct
acpi_device
*
device
,
const
struct
acpi_device_id
*
ids
);
int
acpi_create_dir
(
struct
acpi_device
*
);
int
acpi_create_dir
(
struct
acpi_device
*
);
void
acpi_remove_dir
(
struct
acpi_device
*
);
void
acpi_remove_dir
(
struct
acpi_device
*
);
...
...
include/acpi/acpi_drivers.h
View file @
323ef30a
...
@@ -34,16 +34,21 @@
...
@@ -34,16 +34,21 @@
#define ACPI_BUS_COMPONENT 0x00010000
#define ACPI_BUS_COMPONENT 0x00010000
#define ACPI_SYSTEM_COMPONENT 0x02000000
#define ACPI_SYSTEM_COMPONENT 0x02000000
/* _HID definitions */
/*
* _HID definitions
* HIDs must conform to ACPI spec(6.1.4)
* Linux specific HIDs do not apply to this and begin with LNX:
*/
#define ACPI_POWER_HID "
power_resource
"
#define ACPI_POWER_HID "
LNXPOWER
"
#define ACPI_PROCESSOR_HID "ACPI0007"
#define ACPI_PROCESSOR_HID "ACPI0007"
#define ACPI_SYSTEM_HID "acpi_system"
#define ACPI_SYSTEM_HID "LNXSYSTM"
#define ACPI_THERMAL_HID "thermal"
#define ACPI_THERMAL_HID "LNXTHERM"
#define ACPI_BUTTON_HID_POWERF "button_power"
#define ACPI_BUTTON_HID_POWERF "LNXPWRBN"
#define ACPI_BUTTON_HID_SLEEPF "button_sleep"
#define ACPI_BUTTON_HID_SLEEPF "LNXSLPBN"
#define ACPI_VIDEO_HID "video"
#define ACPI_VIDEO_HID "LNXVIDEO"
#define ACPI_BAY_HID "bay"
#define ACPI_BAY_HID "LNXIOBAY"
/* --------------------------------------------------------------------------
/* --------------------------------------------------------------------------
PCI
PCI
-------------------------------------------------------------------------- */
-------------------------------------------------------------------------- */
...
...
include/acpi/actypes.h
View file @
323ef30a
...
@@ -809,7 +809,7 @@ acpi_status(*acpi_walk_callback) (acpi_handle obj_handle,
...
@@ -809,7 +809,7 @@ acpi_status(*acpi_walk_callback) (acpi_handle obj_handle,
/* Common string version of device HIDs and UIDs */
/* Common string version of device HIDs and UIDs */
struct
acpi_device_id
{
struct
acpi
ca
_device_id
{
char
value
[
ACPI_DEVICE_ID_LENGTH
];
char
value
[
ACPI_DEVICE_ID_LENGTH
];
};
};
...
@@ -859,8 +859,8 @@ struct acpi_device_info {
...
@@ -859,8 +859,8 @@ struct acpi_device_info {
u32
valid
;
/* Indicates which fields below are valid */
u32
valid
;
/* Indicates which fields below are valid */
u32
current_status
;
/* _STA value */
u32
current_status
;
/* _STA value */
acpi_integer
address
;
/* _ADR value if any */
acpi_integer
address
;
/* _ADR value if any */
struct
acpi_device_id
hardware_id
;
/* _HID value if any */
struct
acpi
ca
_device_id
hardware_id
;
/* _HID value if any */
struct
acpi_device_id
unique_id
;
/* _UID value if any */
struct
acpi
ca
_device_id
unique_id
;
/* _UID value if any */
u8
highest_dstates
[
4
];
/* _sx_d values: 0xFF indicates not valid */
u8
highest_dstates
[
4
];
/* _sx_d values: 0xFF indicates not valid */
struct
acpi_compatible_id_list
compatibility_id
;
/* List of _CIDs if any */
struct
acpi_compatible_id_list
compatibility_id
;
/* List of _CIDs if any */
};
};
...
...
include/acpi/acutils.h
View file @
323ef30a
...
@@ -354,7 +354,7 @@ acpi_ut_evaluate_numeric_object(char *object_name,
...
@@ -354,7 +354,7 @@ acpi_ut_evaluate_numeric_object(char *object_name,
acpi_status
acpi_status
acpi_ut_execute_HID
(
struct
acpi_namespace_node
*
device_node
,
acpi_ut_execute_HID
(
struct
acpi_namespace_node
*
device_node
,
struct
acpi_device_id
*
hid
);
struct
acpi
ca
_device_id
*
hid
);
acpi_status
acpi_status
acpi_ut_execute_CID
(
struct
acpi_namespace_node
*
device_node
,
acpi_ut_execute_CID
(
struct
acpi_namespace_node
*
device_node
,
...
@@ -366,7 +366,7 @@ acpi_ut_execute_STA(struct acpi_namespace_node *device_node,
...
@@ -366,7 +366,7 @@ acpi_ut_execute_STA(struct acpi_namespace_node *device_node,
acpi_status
acpi_status
acpi_ut_execute_UID
(
struct
acpi_namespace_node
*
device_node
,
acpi_ut_execute_UID
(
struct
acpi_namespace_node
*
device_node
,
struct
acpi_device_id
*
uid
);
struct
acpi
ca
_device_id
*
uid
);
acpi_status
acpi_status
acpi_ut_execute_sxds
(
struct
acpi_namespace_node
*
device_node
,
u8
*
highest
);
acpi_ut_execute_sxds
(
struct
acpi_namespace_node
*
device_node
,
u8
*
highest
);
...
...
include/linux/acpi.h
View file @
323ef30a
...
@@ -33,6 +33,7 @@
...
@@ -33,6 +33,7 @@
#endif
#endif
#include <linux/list.h>
#include <linux/list.h>
#include <linux/mod_devicetable.h>
#include <acpi/acpi.h>
#include <acpi/acpi.h>
#include <acpi/acpi_bus.h>
#include <acpi/acpi_bus.h>
...
...
include/linux/mod_devicetable.h
View file @
323ef30a
...
@@ -159,6 +159,12 @@ struct ap_device_id {
...
@@ -159,6 +159,12 @@ struct ap_device_id {
#define AP_DEVICE_ID_MATCH_DEVICE_TYPE 0x01
#define AP_DEVICE_ID_MATCH_DEVICE_TYPE 0x01
#define ACPI_ID_LEN 9
struct
acpi_device_id
{
__u8
id
[
ACPI_ID_LEN
];
kernel_ulong_t
driver_data
;
};
#define PNP_ID_LEN 8
#define PNP_ID_LEN 8
#define PNP_MAX_DEVICES 8
#define PNP_MAX_DEVICES 8
...
...
scripts/mod/file2alias.c
View file @
323ef30a
...
@@ -290,6 +290,14 @@ static int do_serio_entry(const char *filename,
...
@@ -290,6 +290,14 @@ static int do_serio_entry(const char *filename,
return
1
;
return
1
;
}
}
/* looks like: "acpi:ACPI0003 or acpi:PNP0C0B" or "acpi:LNXVIDEO" */
static
int
do_acpi_entry
(
const
char
*
filename
,
struct
acpi_device_id
*
id
,
char
*
alias
)
{
sprintf
(
alias
,
"acpi*:%s:"
,
id
->
id
);
return
1
;
}
/* looks like: "pnp:dD" */
/* looks like: "pnp:dD" */
static
int
do_pnp_entry
(
const
char
*
filename
,
static
int
do_pnp_entry
(
const
char
*
filename
,
struct
pnp_device_id
*
id
,
char
*
alias
)
struct
pnp_device_id
*
id
,
char
*
alias
)
...
@@ -551,6 +559,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
...
@@ -551,6 +559,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
do_table
(
symval
,
sym
->
st_size
,
do_table
(
symval
,
sym
->
st_size
,
sizeof
(
struct
serio_device_id
),
"serio"
,
sizeof
(
struct
serio_device_id
),
"serio"
,
do_serio_entry
,
mod
);
do_serio_entry
,
mod
);
else
if
(
sym_is
(
symname
,
"__mod_acpi_device_table"
))
do_table
(
symval
,
sym
->
st_size
,
sizeof
(
struct
acpi_device_id
),
"acpi"
,
do_acpi_entry
,
mod
);
else
if
(
sym_is
(
symname
,
"__mod_pnp_device_table"
))
else
if
(
sym_is
(
symname
,
"__mod_pnp_device_table"
))
do_table
(
symval
,
sym
->
st_size
,
do_table
(
symval
,
sym
->
st_size
,
sizeof
(
struct
pnp_device_id
),
"pnp"
,
sizeof
(
struct
pnp_device_id
),
"pnp"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment