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
Kirill Smelkov
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
Hide 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
;
strcpy
(
buffer
,
"MODALIAS="
);
if
(
create_modalias
(
acpi_dev
,
buffer
+
9
,
buffer_size
-
9
)
>
0
)
{
for
(
j
=
0
;
j
<
cid_list
->
count
;
j
++
)
{
envp
[
0
]
=
buffer
;
ret
=
add_uevent_var
(
envp
,
num_envp
,
&
i
,
buffer
,
envp
[
1
]
=
NULL
;
buffer_size
,
&
length
,
"COMPTID=%s"
,
cid_list
->
id
[
j
].
value
);
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