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
f3ab69a3
Commit
f3ab69a3
authored
Oct 25, 2010
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'procfs-cleanup-v2' into release
parents
aca209e5
03e7c343
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
29 additions
and
1415 deletions
+29
-1415
drivers/acpi/Kconfig
drivers/acpi/Kconfig
+3
-8
drivers/acpi/ac.c
drivers/acpi/ac.c
+0
-14
drivers/acpi/battery.c
drivers/acpi/battery.c
+0
-21
drivers/acpi/fan.c
drivers/acpi/fan.c
+1
-138
drivers/acpi/pci_irq.c
drivers/acpi/pci_irq.c
+0
-1
drivers/acpi/pci_link.c
drivers/acpi/pci_link.c
+0
-1
drivers/acpi/pci_root.c
drivers/acpi/pci_root.c
+0
-1
drivers/acpi/processor_driver.c
drivers/acpi/processor_driver.c
+19
-1
drivers/acpi/processor_throttling.c
drivers/acpi/processor_throttling.c
+4
-0
drivers/acpi/sbs.c
drivers/acpi/sbs.c
+0
-25
drivers/acpi/thermal.c
drivers/acpi/thermal.c
+1
-435
drivers/acpi/video.c
drivers/acpi/video.c
+1
-770
No files found.
drivers/acpi/Kconfig
View file @
f3ab69a3
...
...
@@ -66,7 +66,6 @@ config ACPI_PROCFS
config ACPI_PROCFS_POWER
bool "Deprecated power /proc/acpi directories"
depends on PROC_FS
default y
help
For backwards compatibility, this option allows
deprecated power /proc/acpi/ directories to exist, even when
...
...
@@ -90,13 +89,6 @@ config ACPI_POWER_METER
To compile this driver as a module, choose M here:
the module will be called power-meter.
config ACPI_SYSFS_POWER
bool "Future power /sys interface"
select POWER_SUPPLY
default y
help
Say N to disable power /sys interface
config ACPI_EC_DEBUGFS
tristate "EC read/write access through /sys/kernel/debug/ec"
default n
...
...
@@ -136,6 +128,7 @@ config ACPI_PROC_EVENT
config ACPI_AC
tristate "AC Adapter"
depends on X86
select POWER_SUPPLY
default y
help
This driver supports the AC Adapter object, which indicates
...
...
@@ -148,6 +141,7 @@ config ACPI_AC
config ACPI_BATTERY
tristate "Battery"
depends on X86
select POWER_SUPPLY
default y
help
This driver adds support for battery information through
...
...
@@ -364,6 +358,7 @@ config ACPI_HOTPLUG_MEMORY
config ACPI_SBS
tristate "Smart Battery System"
depends on X86
select POWER_SUPPLY
help
This driver supports the Smart Battery System, another
type of access to battery information, found on some laptops.
...
...
drivers/acpi/ac.c
View file @
f3ab69a3
...
...
@@ -32,9 +32,7 @@
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#endif
#ifdef CONFIG_ACPI_SYSFS_POWER
#include <linux/power_supply.h>
#endif
#include <acpi/acpi_bus.h>
#include <acpi/acpi_drivers.h>
...
...
@@ -86,9 +84,7 @@ static struct acpi_driver acpi_ac_driver = {
};
struct
acpi_ac
{
#ifdef CONFIG_ACPI_SYSFS_POWER
struct
power_supply
charger
;
#endif
struct
acpi_device
*
device
;
unsigned
long
long
state
;
};
...
...
@@ -104,7 +100,6 @@ static const struct file_operations acpi_ac_fops = {
.
release
=
single_release
,
};
#endif
#ifdef CONFIG_ACPI_SYSFS_POWER
static
int
get_ac_property
(
struct
power_supply
*
psy
,
enum
power_supply_property
psp
,
union
power_supply_propval
*
val
)
...
...
@@ -123,7 +118,6 @@ static int get_ac_property(struct power_supply *psy,
static
enum
power_supply_property
ac_props
[]
=
{
POWER_SUPPLY_PROP_ONLINE
,
};
#endif
/* --------------------------------------------------------------------------
AC Adapter Management
-------------------------------------------------------------------------- */
...
...
@@ -247,9 +241,7 @@ static void acpi_ac_notify(struct acpi_device *device, u32 event)
dev_name
(
&
device
->
dev
),
event
,
(
u32
)
ac
->
state
);
acpi_notifier_call_chain
(
device
,
event
,
(
u32
)
ac
->
state
);
#ifdef CONFIG_ACPI_SYSFS_POWER
kobject_uevent
(
&
ac
->
charger
.
dev
->
kobj
,
KOBJ_CHANGE
);
#endif
}
return
;
...
...
@@ -282,14 +274,12 @@ static int acpi_ac_add(struct acpi_device *device)
#endif
if
(
result
)
goto
end
;
#ifdef CONFIG_ACPI_SYSFS_POWER
ac
->
charger
.
name
=
acpi_device_bid
(
device
);
ac
->
charger
.
type
=
POWER_SUPPLY_TYPE_MAINS
;
ac
->
charger
.
properties
=
ac_props
;
ac
->
charger
.
num_properties
=
ARRAY_SIZE
(
ac_props
);
ac
->
charger
.
get_property
=
get_ac_property
;
power_supply_register
(
&
ac
->
device
->
dev
,
&
ac
->
charger
);
#endif
printk
(
KERN_INFO
PREFIX
"%s [%s] (%s)
\n
"
,
acpi_device_name
(
device
),
acpi_device_bid
(
device
),
...
...
@@ -316,10 +306,8 @@ static int acpi_ac_resume(struct acpi_device *device)
old_state
=
ac
->
state
;
if
(
acpi_ac_get_state
(
ac
))
return
0
;
#ifdef CONFIG_ACPI_SYSFS_POWER
if
(
old_state
!=
ac
->
state
)
kobject_uevent
(
&
ac
->
charger
.
dev
->
kobj
,
KOBJ_CHANGE
);
#endif
return
0
;
}
...
...
@@ -333,10 +321,8 @@ static int acpi_ac_remove(struct acpi_device *device, int type)
ac
=
acpi_driver_data
(
device
);
#ifdef CONFIG_ACPI_SYSFS_POWER
if
(
ac
->
charger
.
dev
)
power_supply_unregister
(
&
ac
->
charger
);
#endif
#ifdef CONFIG_ACPI_PROCFS_POWER
acpi_ac_remove_fs
(
device
);
#endif
...
...
drivers/acpi/battery.c
View file @
f3ab69a3
...
...
@@ -42,10 +42,7 @@
#include <acpi/acpi_bus.h>
#include <acpi/acpi_drivers.h>
#ifdef CONFIG_ACPI_SYSFS_POWER
#include <linux/power_supply.h>
#endif
#define PREFIX "ACPI: "
...
...
@@ -102,9 +99,7 @@ enum {
struct
acpi_battery
{
struct
mutex
lock
;
#ifdef CONFIG_ACPI_SYSFS_POWER
struct
power_supply
bat
;
#endif
struct
acpi_device
*
device
;
unsigned
long
update_time
;
int
rate_now
;
...
...
@@ -141,7 +136,6 @@ inline int acpi_battery_present(struct acpi_battery *battery)
return
battery
->
device
->
status
.
battery_present
;
}
#ifdef CONFIG_ACPI_SYSFS_POWER
static
int
acpi_battery_technology
(
struct
acpi_battery
*
battery
)
{
if
(
!
strcasecmp
(
"NiCd"
,
battery
->
type
))
...
...
@@ -281,7 +275,6 @@ static enum power_supply_property energy_battery_props[] = {
POWER_SUPPLY_PROP_MANUFACTURER
,
POWER_SUPPLY_PROP_SERIAL_NUMBER
,
};
#endif
#ifdef CONFIG_ACPI_PROCFS_POWER
inline
char
*
acpi_battery_units
(
struct
acpi_battery
*
battery
)
...
...
@@ -492,7 +485,6 @@ static int acpi_battery_init_alarm(struct acpi_battery *battery)
return
acpi_battery_set_alarm
(
battery
);
}
#ifdef CONFIG_ACPI_SYSFS_POWER
static
ssize_t
acpi_battery_alarm_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
...
...
@@ -552,7 +544,6 @@ static void sysfs_remove_battery(struct acpi_battery *battery)
power_supply_unregister
(
&
battery
->
bat
);
battery
->
bat
.
dev
=
NULL
;
}
#endif
static
void
acpi_battery_quirks
(
struct
acpi_battery
*
battery
)
{
...
...
@@ -568,9 +559,7 @@ static int acpi_battery_update(struct acpi_battery *battery)
if
(
result
)
return
result
;
if
(
!
acpi_battery_present
(
battery
))
{
#ifdef CONFIG_ACPI_SYSFS_POWER
sysfs_remove_battery
(
battery
);
#endif
battery
->
update_time
=
0
;
return
0
;
}
...
...
@@ -582,10 +571,8 @@ static int acpi_battery_update(struct acpi_battery *battery)
acpi_battery_quirks
(
battery
);
acpi_battery_init_alarm
(
battery
);
}
#ifdef CONFIG_ACPI_SYSFS_POWER
if
(
!
battery
->
bat
.
dev
)
sysfs_add_battery
(
battery
);
#endif
return
acpi_battery_get_state
(
battery
);
}
...
...
@@ -867,26 +854,20 @@ static void acpi_battery_remove_fs(struct acpi_device *device)
static
void
acpi_battery_notify
(
struct
acpi_device
*
device
,
u32
event
)
{
struct
acpi_battery
*
battery
=
acpi_driver_data
(
device
);
#ifdef CONFIG_ACPI_SYSFS_POWER
struct
device
*
old
;
#endif
if
(
!
battery
)
return
;
#ifdef CONFIG_ACPI_SYSFS_POWER
old
=
battery
->
bat
.
dev
;
#endif
acpi_battery_update
(
battery
);
acpi_bus_generate_proc_event
(
device
,
event
,
acpi_battery_present
(
battery
));
acpi_bus_generate_netlink_event
(
device
->
pnp
.
device_class
,
dev_name
(
&
device
->
dev
),
event
,
acpi_battery_present
(
battery
));
#ifdef CONFIG_ACPI_SYSFS_POWER
/* acpi_battery_update could remove power_supply object */
if
(
old
&&
battery
->
bat
.
dev
)
power_supply_changed
(
&
battery
->
bat
);
#endif
}
static
int
acpi_battery_add
(
struct
acpi_device
*
device
)
...
...
@@ -934,9 +915,7 @@ static int acpi_battery_remove(struct acpi_device *device, int type)
#ifdef CONFIG_ACPI_PROCFS_POWER
acpi_battery_remove_fs
(
device
);
#endif
#ifdef CONFIG_ACPI_SYSFS_POWER
sysfs_remove_battery
(
battery
);
#endif
mutex_destroy
(
&
battery
->
lock
);
kfree
(
battery
);
return
0
;
...
...
drivers/acpi/fan.c
View file @
f3ab69a3
...
...
@@ -27,8 +27,6 @@
#include <linux/module.h>
#include <linux/init.h>
#include <linux/types.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <asm/uaccess.h>
#include <linux/thermal.h>
#include <acpi/acpi_bus.h>
...
...
@@ -118,122 +116,6 @@ static struct thermal_cooling_device_ops fan_cooling_ops = {
.
set_cur_state
=
fan_set_cur_state
,
};
/* --------------------------------------------------------------------------
FS Interface (/proc)
-------------------------------------------------------------------------- */
#ifdef CONFIG_ACPI_PROCFS
static
struct
proc_dir_entry
*
acpi_fan_dir
;
static
int
acpi_fan_read_state
(
struct
seq_file
*
seq
,
void
*
offset
)
{
struct
acpi_device
*
device
=
seq
->
private
;
int
state
=
0
;
if
(
device
)
{
if
(
acpi_bus_get_power
(
device
->
handle
,
&
state
))
seq_printf
(
seq
,
"status: ERROR
\n
"
);
else
seq_printf
(
seq
,
"status: %s
\n
"
,
!
state
?
"on"
:
"off"
);
}
return
0
;
}
static
int
acpi_fan_state_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_fan_read_state
,
PDE
(
inode
)
->
data
);
}
static
ssize_t
acpi_fan_write_state
(
struct
file
*
file
,
const
char
__user
*
buffer
,
size_t
count
,
loff_t
*
ppos
)
{
int
result
=
0
;
struct
seq_file
*
m
=
file
->
private_data
;
struct
acpi_device
*
device
=
m
->
private
;
char
state_string
[
3
]
=
{
'\0'
};
if
(
count
>
sizeof
(
state_string
)
-
1
)
return
-
EINVAL
;
if
(
copy_from_user
(
state_string
,
buffer
,
count
))
return
-
EFAULT
;
state_string
[
count
]
=
'\0'
;
if
((
state_string
[
0
]
<
'0'
)
||
(
state_string
[
0
]
>
'3'
))
return
-
EINVAL
;
if
(
state_string
[
1
]
==
'\n'
)
state_string
[
1
]
=
'\0'
;
if
(
state_string
[
1
]
!=
'\0'
)
return
-
EINVAL
;
result
=
acpi_bus_set_power
(
device
->
handle
,
simple_strtoul
(
state_string
,
NULL
,
0
));
if
(
result
)
return
result
;
return
count
;
}
static
const
struct
file_operations
acpi_fan_state_ops
=
{
.
open
=
acpi_fan_state_open_fs
,
.
read
=
seq_read
,
.
write
=
acpi_fan_write_state
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
.
owner
=
THIS_MODULE
,
};
static
int
acpi_fan_add_fs
(
struct
acpi_device
*
device
)
{
struct
proc_dir_entry
*
entry
=
NULL
;
if
(
!
device
)
return
-
EINVAL
;
if
(
!
acpi_device_dir
(
device
))
{
acpi_device_dir
(
device
)
=
proc_mkdir
(
acpi_device_bid
(
device
),
acpi_fan_dir
);
if
(
!
acpi_device_dir
(
device
))
return
-
ENODEV
;
}
/* 'status' [R/W] */
entry
=
proc_create_data
(
ACPI_FAN_FILE_STATE
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
acpi_device_dir
(
device
),
&
acpi_fan_state_ops
,
device
);
if
(
!
entry
)
return
-
ENODEV
;
return
0
;
}
static
int
acpi_fan_remove_fs
(
struct
acpi_device
*
device
)
{
if
(
acpi_device_dir
(
device
))
{
remove_proc_entry
(
ACPI_FAN_FILE_STATE
,
acpi_device_dir
(
device
));
remove_proc_entry
(
acpi_device_bid
(
device
),
acpi_fan_dir
);
acpi_device_dir
(
device
)
=
NULL
;
}
return
0
;
}
#else
static
int
acpi_fan_add_fs
(
struct
acpi_device
*
device
)
{
return
0
;
}
static
int
acpi_fan_remove_fs
(
struct
acpi_device
*
device
)
{
return
0
;
}
#endif
/* --------------------------------------------------------------------------
Driver Interface
-------------------------------------------------------------------------- */
...
...
@@ -284,10 +166,6 @@ static int acpi_fan_add(struct acpi_device *device)
dev_err
(
&
device
->
dev
,
"Failed to create sysfs link "
"'device'
\n
"
);
result
=
acpi_fan_add_fs
(
device
);
if
(
result
)
goto
end
;
printk
(
KERN_INFO
PREFIX
"%s [%s] (%s)
\n
"
,
acpi_device_name
(
device
),
acpi_device_bid
(
device
),
!
device
->
power
.
state
?
"on"
:
"off"
);
...
...
@@ -303,7 +181,6 @@ static int acpi_fan_remove(struct acpi_device *device, int type)
if
(
!
device
||
!
cdev
)
return
-
EINVAL
;
acpi_fan_remove_fs
(
device
);
sysfs_remove_link
(
&
device
->
dev
.
kobj
,
"thermal_cooling"
);
sysfs_remove_link
(
&
cdev
->
device
.
kobj
,
"device"
);
thermal_cooling_device_unregister
(
cdev
);
...
...
@@ -347,19 +224,9 @@ static int __init acpi_fan_init(void)
{
int
result
=
0
;
#ifdef CONFIG_ACPI_PROCFS
acpi_fan_dir
=
proc_mkdir
(
ACPI_FAN_CLASS
,
acpi_root_dir
);
if
(
!
acpi_fan_dir
)
return
-
ENODEV
;
#endif
result
=
acpi_bus_register_driver
(
&
acpi_fan_driver
);
if
(
result
<
0
)
{
#ifdef CONFIG_ACPI_PROCFS
remove_proc_entry
(
ACPI_FAN_CLASS
,
acpi_root_dir
);
#endif
if
(
result
<
0
)
return
-
ENODEV
;
}
return
0
;
}
...
...
@@ -369,10 +236,6 @@ static void __exit acpi_fan_exit(void)
acpi_bus_unregister_driver
(
&
acpi_fan_driver
);
#ifdef CONFIG_ACPI_PROCFS
remove_proc_entry
(
ACPI_FAN_CLASS
,
acpi_root_dir
);
#endif
return
;
}
...
...
drivers/acpi/pci_irq.c
View file @
f3ab69a3
...
...
@@ -32,7 +32,6 @@
#include <linux/module.h>
#include <linux/init.h>
#include <linux/types.h>
#include <linux/proc_fs.h>
#include <linux/spinlock.h>
#include <linux/pm.h>
#include <linux/pci.h>
...
...
drivers/acpi/pci_link.c
View file @
f3ab69a3
...
...
@@ -34,7 +34,6 @@
#include <linux/module.h>
#include <linux/init.h>
#include <linux/types.h>
#include <linux/proc_fs.h>
#include <linux/spinlock.h>
#include <linux/pm.h>
#include <linux/pci.h>
...
...
drivers/acpi/pci_root.c
View file @
f3ab69a3
...
...
@@ -27,7 +27,6 @@
#include <linux/module.h>
#include <linux/init.h>
#include <linux/types.h>
#include <linux/proc_fs.h>
#include <linux/spinlock.h>
#include <linux/pm.h>
#include <linux/pm_runtime.h>
...
...
drivers/acpi/processor_driver.c
View file @
f3ab69a3
...
...
@@ -40,8 +40,10 @@
#include <linux/pm.h>
#include <linux/cpufreq.h>
#include <linux/cpu.h>
#ifdef CONFIG_ACPI_PROCFS
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#endif
#include <linux/dmi.h>
#include <linux/moduleparam.h>
#include <linux/cpuidle.h>
...
...
@@ -244,6 +246,7 @@ static int acpi_processor_errata(struct acpi_processor *pr)
return
result
;
}
#ifdef CONFIG_ACPI_PROCFS
static
struct
proc_dir_entry
*
acpi_processor_dir
=
NULL
;
static
int
__cpuinit
acpi_processor_add_fs
(
struct
acpi_device
*
device
)
...
...
@@ -280,7 +283,16 @@ static int acpi_processor_remove_fs(struct acpi_device *device)
return
0
;
}
#else
static
inline
int
acpi_processor_add_fs
(
struct
acpi_device
*
device
)
{
return
0
;
}
static
inline
int
acpi_processor_remove_fs
(
struct
acpi_device
*
device
)
{
return
0
;
}
#endif
/* --------------------------------------------------------------------------
Driver Interface
-------------------------------------------------------------------------- */
...
...
@@ -842,9 +854,11 @@ static int __init acpi_processor_init(void)
memset
(
&
errata
,
0
,
sizeof
(
errata
));
#ifdef CONFIG_ACPI_PROCFS
acpi_processor_dir
=
proc_mkdir
(
ACPI_PROCESSOR_CLASS
,
acpi_root_dir
);
if
(
!
acpi_processor_dir
)
return
-
ENOMEM
;
#endif
if
(
!
cpuidle_register_driver
(
&
acpi_idle_driver
))
{
printk
(
KERN_DEBUG
"ACPI: %s registered with cpuidle
\n
"
,
...
...
@@ -871,7 +885,9 @@ static int __init acpi_processor_init(void)
out_cpuidle:
cpuidle_unregister_driver
(
&
acpi_idle_driver
);
#ifdef CONFIG_ACPI_PROCFS
remove_proc_entry
(
ACPI_PROCESSOR_CLASS
,
acpi_root_dir
);
#endif
return
result
;
}
...
...
@@ -891,7 +907,9 @@ static void __exit acpi_processor_exit(void)
cpuidle_unregister_driver
(
&
acpi_idle_driver
);
#ifdef CONFIG_ACPI_PROCFS
remove_proc_entry
(
ACPI_PROCESSOR_CLASS
,
acpi_root_dir
);
#endif
return
;
}
...
...
drivers/acpi/processor_throttling.c
View file @
f3ab69a3
...
...
@@ -32,8 +32,10 @@
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/cpufreq.h>
#ifdef CONFIG_ACPI_PROCFS
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#endif
#include <asm/io.h>
#include <asm/uaccess.h>
...
...
@@ -1214,6 +1216,7 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
return
result
;
}
#ifdef CONFIG_ACPI_PROCFS
/* proc interface */
static
int
acpi_processor_throttling_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
...
...
@@ -1322,3 +1325,4 @@ const struct file_operations acpi_processor_throttling_fops = {
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
#endif
drivers/acpi/sbs.c
View file @
f3ab69a3
...
...
@@ -40,10 +40,7 @@
#include <linux/timer.h>
#include <linux/jiffies.h>
#include <linux/delay.h>
#ifdef CONFIG_ACPI_SYSFS_POWER
#include <linux/power_supply.h>
#endif
#include "sbshc.h"
...
...
@@ -85,9 +82,7 @@ static const struct acpi_device_id sbs_device_ids[] = {
MODULE_DEVICE_TABLE
(
acpi
,
sbs_device_ids
);
struct
acpi_battery
{
#ifdef CONFIG_ACPI_SYSFS_POWER
struct
power_supply
bat
;
#endif
struct
acpi_sbs
*
sbs
;
#ifdef CONFIG_ACPI_PROCFS_POWER
struct
proc_dir_entry
*
proc_entry
;
...
...
@@ -120,9 +115,7 @@ struct acpi_battery {
#define to_acpi_battery(x) container_of(x, struct acpi_battery, bat);
struct
acpi_sbs
{
#ifdef CONFIG_ACPI_SYSFS_POWER
struct
power_supply
charger
;
#endif
struct
acpi_device
*
device
;
struct
acpi_smb_hc
*
hc
;
struct
mutex
lock
;
...
...
@@ -166,7 +159,6 @@ static inline int acpi_battery_scale(struct acpi_battery *battery)
acpi_battery_ipscale
(
battery
);
}
#ifdef CONFIG_ACPI_SYSFS_POWER
static
int
sbs_get_ac_property
(
struct
power_supply
*
psy
,
enum
power_supply_property
psp
,
union
power_supply_propval
*
val
)
...
...
@@ -313,7 +305,6 @@ static enum power_supply_property sbs_energy_battery_props[] = {
POWER_SUPPLY_PROP_MANUFACTURER
,
};
#endif
/* --------------------------------------------------------------------------
Smart Battery System Management
...
...
@@ -449,7 +440,6 @@ static int acpi_ac_get_present(struct acpi_sbs *sbs)
return
result
;
}
#ifdef CONFIG_ACPI_SYSFS_POWER
static
ssize_t
acpi_battery_alarm_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
...
...
@@ -479,7 +469,6 @@ static struct device_attribute alarm_attr = {
.
show
=
acpi_battery_alarm_show
,
.
store
=
acpi_battery_alarm_store
,
};
#endif
/* --------------------------------------------------------------------------
FS Interface (/proc/acpi)
...
...
@@ -798,7 +787,6 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id)
&
acpi_battery_state_fops
,
&
acpi_battery_alarm_fops
,
battery
);
#endif
#ifdef CONFIG_ACPI_SYSFS_POWER
battery
->
bat
.
name
=
battery
->
name
;
battery
->
bat
.
type
=
POWER_SUPPLY_TYPE_BATTERY
;
if
(
!
acpi_battery_mode
(
battery
))
{
...
...
@@ -819,7 +807,6 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id)
goto
end
;
battery
->
have_sysfs_alarm
=
1
;
end:
#endif
printk
(
KERN_INFO
PREFIX
"%s [%s]: Battery Slot [%s] (battery %s)
\n
"
,
ACPI_SBS_DEVICE_NAME
,
acpi_device_bid
(
sbs
->
device
),
battery
->
name
,
battery
->
present
?
"present"
:
"absent"
);
...
...
@@ -828,17 +815,13 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id)
static
void
acpi_battery_remove
(
struct
acpi_sbs
*
sbs
,
int
id
)
{
#if defined(CONFIG_ACPI_SYSFS_POWER) || defined(CONFIG_ACPI_PROCFS_POWER)
struct
acpi_battery
*
battery
=
&
sbs
->
battery
[
id
];
#endif
#ifdef CONFIG_ACPI_SYSFS_POWER
if
(
battery
->
bat
.
dev
)
{
if
(
battery
->
have_sysfs_alarm
)
device_remove_file
(
battery
->
bat
.
dev
,
&
alarm_attr
);
power_supply_unregister
(
&
battery
->
bat
);
}
#endif
#ifdef CONFIG_ACPI_PROCFS_POWER
if
(
battery
->
proc_entry
)
acpi_sbs_remove_fs
(
&
battery
->
proc_entry
,
acpi_battery_dir
);
...
...
@@ -859,14 +842,12 @@ static int acpi_charger_add(struct acpi_sbs *sbs)
if
(
result
)
goto
end
;
#endif
#ifdef CONFIG_ACPI_SYSFS_POWER
sbs
->
charger
.
name
=
"sbs-charger"
;
sbs
->
charger
.
type
=
POWER_SUPPLY_TYPE_MAINS
;
sbs
->
charger
.
properties
=
sbs_ac_props
;
sbs
->
charger
.
num_properties
=
ARRAY_SIZE
(
sbs_ac_props
);
sbs
->
charger
.
get_property
=
sbs_get_ac_property
;
power_supply_register
(
&
sbs
->
device
->
dev
,
&
sbs
->
charger
);
#endif
printk
(
KERN_INFO
PREFIX
"%s [%s]: AC Adapter [%s] (%s)
\n
"
,
ACPI_SBS_DEVICE_NAME
,
acpi_device_bid
(
sbs
->
device
),
ACPI_AC_DIR_NAME
,
sbs
->
charger_present
?
"on-line"
:
"off-line"
);
...
...
@@ -876,10 +857,8 @@ static int acpi_charger_add(struct acpi_sbs *sbs)
static
void
acpi_charger_remove
(
struct
acpi_sbs
*
sbs
)
{
#ifdef CONFIG_ACPI_SYSFS_POWER
if
(
sbs
->
charger
.
dev
)
power_supply_unregister
(
&
sbs
->
charger
);
#endif
#ifdef CONFIG_ACPI_PROCFS_POWER
if
(
sbs
->
charger_entry
)
acpi_sbs_remove_fs
(
&
sbs
->
charger_entry
,
acpi_ac_dir
);
...
...
@@ -900,9 +879,7 @@ static void acpi_sbs_callback(void *context)
ACPI_SBS_NOTIFY_STATUS
,
sbs
->
charger_present
);
#endif
#ifdef CONFIG_ACPI_SYSFS_POWER
kobject_uevent
(
&
sbs
->
charger
.
dev
->
kobj
,
KOBJ_CHANGE
);
#endif
}
if
(
sbs
->
manager_present
)
{
for
(
id
=
0
;
id
<
MAX_SBS_BAT
;
++
id
)
{
...
...
@@ -919,9 +896,7 @@ static void acpi_sbs_callback(void *context)
ACPI_SBS_NOTIFY_STATUS
,
bat
->
present
);
#endif
#ifdef CONFIG_ACPI_SYSFS_POWER
kobject_uevent
(
&
bat
->
bat
.
dev
->
kobj
,
KOBJ_CHANGE
);
#endif
}
}
}
...
...
drivers/acpi/thermal.c
View file @
f3ab69a3
...
...
@@ -37,12 +37,6 @@
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/types.h>
#ifdef CONFIG_ACPI_PROCFS
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#endif
#include <linux/jiffies.h>
#include <linux/kmod.h>
#include <linux/reboot.h>
...
...
@@ -195,61 +189,6 @@ struct acpi_thermal {
struct
mutex
lock
;
};
#ifdef CONFIG_ACPI_PROCFS
static
int
acpi_thermal_state_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
acpi_thermal_temp_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
acpi_thermal_trip_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
acpi_thermal_cooling_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
ssize_t
acpi_thermal_write_cooling_mode
(
struct
file
*
,
const
char
__user
*
,
size_t
,
loff_t
*
);
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
*
,
size_t
,
loff_t
*
);
static
const
struct
file_operations
acpi_thermal_state_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_thermal_state_open_fs
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
static
const
struct
file_operations
acpi_thermal_temp_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_thermal_temp_open_fs
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
static
const
struct
file_operations
acpi_thermal_trip_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_thermal_trip_open_fs
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
static
const
struct
file_operations
acpi_thermal_cooling_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_thermal_cooling_open_fs
,
.
read
=
seq_read
,
.
write
=
acpi_thermal_write_cooling_mode
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
static
const
struct
file_operations
acpi_thermal_polling_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_thermal_polling_open_fs
,
.
read
=
seq_read
,
.
write
=
acpi_thermal_write_polling
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
#endif
/* CONFIG_ACPI_PROCFS*/
/* --------------------------------------------------------------------------
Thermal Zone Management
-------------------------------------------------------------------------- */
...
...
@@ -957,358 +896,6 @@ static void acpi_thermal_unregister_thermal_zone(struct acpi_thermal *tz)
}
/* --------------------------------------------------------------------------
FS Interface (/proc)
-------------------------------------------------------------------------- */
#ifdef CONFIG_ACPI_PROCFS
static
struct
proc_dir_entry
*
acpi_thermal_dir
;
static
int
acpi_thermal_state_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
struct
acpi_thermal
*
tz
=
seq
->
private
;
if
(
!
tz
)
goto
end
;
seq_puts
(
seq
,
"state: "
);
if
(
!
tz
->
state
.
critical
&&
!
tz
->
state
.
hot
&&
!
tz
->
state
.
passive
&&
!
tz
->
state
.
active
)
seq_puts
(
seq
,
"ok
\n
"
);
else
{
if
(
tz
->
state
.
critical
)
seq_puts
(
seq
,
"critical "
);
if
(
tz
->
state
.
hot
)
seq_puts
(
seq
,
"hot "
);
if
(
tz
->
state
.
passive
)
seq_puts
(
seq
,
"passive "
);
if
(
tz
->
state
.
active
)
seq_printf
(
seq
,
"active[%d]"
,
tz
->
state
.
active_index
);
seq_puts
(
seq
,
"
\n
"
);
}
end:
return
0
;
}
static
int
acpi_thermal_state_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_thermal_state_seq_show
,
PDE
(
inode
)
->
data
);
}
static
int
acpi_thermal_temp_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
int
result
=
0
;
struct
acpi_thermal
*
tz
=
seq
->
private
;
if
(
!
tz
)
goto
end
;
result
=
acpi_thermal_get_temperature
(
tz
);
if
(
result
)
goto
end
;
seq_printf
(
seq
,
"temperature: %ld C
\n
"
,
KELVIN_TO_CELSIUS
(
tz
->
temperature
));
end:
return
0
;
}
static
int
acpi_thermal_temp_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_thermal_temp_seq_show
,
PDE
(
inode
)
->
data
);
}
static
int
acpi_thermal_trip_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
struct
acpi_thermal
*
tz
=
seq
->
private
;
struct
acpi_device
*
device
;
acpi_status
status
;
int
i
=
0
;
int
j
=
0
;
if
(
!
tz
)
goto
end
;
if
(
tz
->
trips
.
critical
.
flags
.
valid
)
seq_printf
(
seq
,
"critical (S5): %ld C%s"
,
KELVIN_TO_CELSIUS
(
tz
->
trips
.
critical
.
temperature
),
nocrt
?
" <disabled>
\n
"
:
"
\n
"
);
if
(
tz
->
trips
.
hot
.
flags
.
valid
)
seq_printf
(
seq
,
"hot (S4): %ld C%s"
,
KELVIN_TO_CELSIUS
(
tz
->
trips
.
hot
.
temperature
),
nocrt
?
" <disabled>
\n
"
:
"
\n
"
);
if
(
tz
->
trips
.
passive
.
flags
.
valid
)
{
seq_printf
(
seq
,
"passive: %ld C: tc1=%lu tc2=%lu tsp=%lu devices="
,
KELVIN_TO_CELSIUS
(
tz
->
trips
.
passive
.
temperature
),
tz
->
trips
.
passive
.
tc1
,
tz
->
trips
.
passive
.
tc2
,
tz
->
trips
.
passive
.
tsp
);
for
(
j
=
0
;
j
<
tz
->
trips
.
passive
.
devices
.
count
;
j
++
)
{
status
=
acpi_bus_get_device
(
tz
->
trips
.
passive
.
devices
.
handles
[
j
],
&
device
);
seq_printf
(
seq
,
"%4.4s "
,
status
?
""
:
acpi_device_bid
(
device
));
}
seq_puts
(
seq
,
"
\n
"
);
}
else
{
seq_printf
(
seq
,
"passive (forced):"
);
if
(
tz
->
thermal_zone
->
forced_passive
)
seq_printf
(
seq
,
" %i C
\n
"
,
tz
->
thermal_zone
->
forced_passive
/
1000
);
else
seq_printf
(
seq
,
"<not set>
\n
"
);
}
for
(
i
=
0
;
i
<
ACPI_THERMAL_MAX_ACTIVE
;
i
++
)
{
if
(
!
(
tz
->
trips
.
active
[
i
].
flags
.
valid
))
break
;
seq_printf
(
seq
,
"active[%d]: %ld C: devices="
,
i
,
KELVIN_TO_CELSIUS
(
tz
->
trips
.
active
[
i
].
temperature
));
for
(
j
=
0
;
j
<
tz
->
trips
.
active
[
i
].
devices
.
count
;
j
++
){
status
=
acpi_bus_get_device
(
tz
->
trips
.
active
[
i
].
devices
.
handles
[
j
],
&
device
);
seq_printf
(
seq
,
"%4.4s "
,
status
?
""
:
acpi_device_bid
(
device
));
}
seq_puts
(
seq
,
"
\n
"
);
}
end:
return
0
;
}
static
int
acpi_thermal_trip_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_thermal_trip_seq_show
,
PDE
(
inode
)
->
data
);
}
static
int
acpi_thermal_cooling_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
struct
acpi_thermal
*
tz
=
seq
->
private
;
if
(
!
tz
)
goto
end
;
if
(
!
tz
->
flags
.
cooling_mode
)
seq_puts
(
seq
,
"<setting not supported>
\n
"
);
else
seq_puts
(
seq
,
"0 - Active; 1 - Passive
\n
"
);
end:
return
0
;
}
static
int
acpi_thermal_cooling_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_thermal_cooling_seq_show
,
PDE
(
inode
)
->
data
);
}
static
ssize_t
acpi_thermal_write_cooling_mode
(
struct
file
*
file
,
const
char
__user
*
buffer
,
size_t
count
,
loff_t
*
ppos
)
{
struct
seq_file
*
m
=
file
->
private_data
;
struct
acpi_thermal
*
tz
=
m
->
private
;
int
result
=
0
;
char
mode_string
[
12
]
=
{
'\0'
};
if
(
!
tz
||
(
count
>
sizeof
(
mode_string
)
-
1
))
return
-
EINVAL
;
if
(
!
tz
->
flags
.
cooling_mode
)
return
-
ENODEV
;
if
(
copy_from_user
(
mode_string
,
buffer
,
count
))
return
-
EFAULT
;
mode_string
[
count
]
=
'\0'
;
result
=
acpi_thermal_set_cooling_mode
(
tz
,
simple_strtoul
(
mode_string
,
NULL
,
0
));
if
(
result
)
return
result
;
acpi_thermal_check
(
tz
);
return
count
;
}
static
int
acpi_thermal_polling_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
struct
acpi_thermal
*
tz
=
seq
->
private
;
if
(
!
tz
)
goto
end
;
if
(
!
tz
->
thermal_zone
->
polling_delay
)
{
seq_puts
(
seq
,
"<polling disabled>
\n
"
);
goto
end
;
}
seq_printf
(
seq
,
"polling frequency: %d seconds
\n
"
,
(
tz
->
thermal_zone
->
polling_delay
/
1000
));
end:
return
0
;
}
static
int
acpi_thermal_polling_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_thermal_polling_seq_show
,
PDE
(
inode
)
->
data
);
}
static
int
acpi_thermal_set_polling
(
struct
acpi_thermal
*
tz
,
int
seconds
)
{
if
(
!
tz
)
return
-
EINVAL
;
/* Convert value to deci-seconds */
tz
->
polling_frequency
=
seconds
*
10
;
tz
->
thermal_zone
->
polling_delay
=
seconds
*
1000
;
if
(
tz
->
tz_enabled
)
thermal_zone_device_update
(
tz
->
thermal_zone
);
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Polling frequency set to %lu seconds
\n
"
,
tz
->
polling_frequency
/
10
));
return
0
;
}
static
ssize_t
acpi_thermal_write_polling
(
struct
file
*
file
,
const
char
__user
*
buffer
,
size_t
count
,
loff_t
*
ppos
)
{
struct
seq_file
*
m
=
file
->
private_data
;
struct
acpi_thermal
*
tz
=
m
->
private
;
int
result
=
0
;
char
polling_string
[
12
]
=
{
'\0'
};
int
seconds
=
0
;
if
(
!
tz
||
(
count
>
sizeof
(
polling_string
)
-
1
))
return
-
EINVAL
;
if
(
copy_from_user
(
polling_string
,
buffer
,
count
))
return
-
EFAULT
;
polling_string
[
count
]
=
'\0'
;
seconds
=
simple_strtoul
(
polling_string
,
NULL
,
0
);
result
=
acpi_thermal_set_polling
(
tz
,
seconds
);
if
(
result
)
return
result
;
acpi_thermal_check
(
tz
);
return
count
;
}
static
int
acpi_thermal_add_fs
(
struct
acpi_device
*
device
)
{
struct
proc_dir_entry
*
entry
=
NULL
;
if
(
!
acpi_device_dir
(
device
))
{
acpi_device_dir
(
device
)
=
proc_mkdir
(
acpi_device_bid
(
device
),
acpi_thermal_dir
);
if
(
!
acpi_device_dir
(
device
))
return
-
ENODEV
;
}
/* 'state' [R] */
entry
=
proc_create_data
(
ACPI_THERMAL_FILE_STATE
,
S_IRUGO
,
acpi_device_dir
(
device
),
&
acpi_thermal_state_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
return
-
ENODEV
;
/* 'temperature' [R] */
entry
=
proc_create_data
(
ACPI_THERMAL_FILE_TEMPERATURE
,
S_IRUGO
,
acpi_device_dir
(
device
),
&
acpi_thermal_temp_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
return
-
ENODEV
;
/* 'trip_points' [R] */
entry
=
proc_create_data
(
ACPI_THERMAL_FILE_TRIP_POINTS
,
S_IRUGO
,
acpi_device_dir
(
device
),
&
acpi_thermal_trip_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
return
-
ENODEV
;
/* 'cooling_mode' [R/W] */
entry
=
proc_create_data
(
ACPI_THERMAL_FILE_COOLING_MODE
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
acpi_device_dir
(
device
),
&
acpi_thermal_cooling_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
return
-
ENODEV
;
/* 'polling_frequency' [R/W] */
entry
=
proc_create_data
(
ACPI_THERMAL_FILE_POLLING_FREQ
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
acpi_device_dir
(
device
),
&
acpi_thermal_polling_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
return
-
ENODEV
;
return
0
;
}
static
int
acpi_thermal_remove_fs
(
struct
acpi_device
*
device
)
{
if
(
acpi_device_dir
(
device
))
{
remove_proc_entry
(
ACPI_THERMAL_FILE_POLLING_FREQ
,
acpi_device_dir
(
device
));
remove_proc_entry
(
ACPI_THERMAL_FILE_COOLING_MODE
,
acpi_device_dir
(
device
));
remove_proc_entry
(
ACPI_THERMAL_FILE_TRIP_POINTS
,
acpi_device_dir
(
device
));
remove_proc_entry
(
ACPI_THERMAL_FILE_TEMPERATURE
,
acpi_device_dir
(
device
));
remove_proc_entry
(
ACPI_THERMAL_FILE_STATE
,
acpi_device_dir
(
device
));
remove_proc_entry
(
acpi_device_bid
(
device
),
acpi_thermal_dir
);
acpi_device_dir
(
device
)
=
NULL
;
}
return
0
;
}
#else
static
inline
int
acpi_thermal_add_fs
(
struct
acpi_device
*
device
)
{
return
0
;
}
static
inline
int
acpi_thermal_remove_fs
(
struct
acpi_device
*
device
)
{
return
0
;
}
#endif
/* CONFIG_ACPI_PROCFS */
/* --------------------------------------------------------------------------
Driver Interface
-------------------------------------------------------------------------- */
...
...
@@ -1428,17 +1015,11 @@ static int acpi_thermal_add(struct acpi_device *device)
if
(
result
)
goto
free_memory
;
result
=
acpi_thermal_add_fs
(
device
);
if
(
result
)
goto
unregister_thermal_zone
;
printk
(
KERN_INFO
PREFIX
"%s [%s] (%ld C)
\n
"
,
acpi_device_name
(
device
),
acpi_device_bid
(
device
),
KELVIN_TO_CELSIUS
(
tz
->
temperature
));
goto
end
;
unregister_thermal_zone:
thermal_zone_device_unregister
(
tz
->
thermal_zone
);
free_memory:
kfree
(
tz
);
end:
...
...
@@ -1454,7 +1035,6 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
tz
=
acpi_driver_data
(
device
);
acpi_thermal_remove_fs
(
device
);
acpi_thermal_unregister_thermal_zone
(
tz
);
mutex_destroy
(
&
tz
->
lock
);
kfree
(
tz
);
...
...
@@ -1580,19 +1160,9 @@ static int __init acpi_thermal_init(void)
return
-
ENODEV
;
}
#ifdef CONFIG_ACPI_PROCFS
acpi_thermal_dir
=
proc_mkdir
(
ACPI_THERMAL_CLASS
,
acpi_root_dir
);
if
(
!
acpi_thermal_dir
)
return
-
ENODEV
;
#endif
result
=
acpi_bus_register_driver
(
&
acpi_thermal_driver
);
if
(
result
<
0
)
{
#ifdef CONFIG_ACPI_PROCFS
remove_proc_entry
(
ACPI_THERMAL_CLASS
,
acpi_root_dir
);
#endif
if
(
result
<
0
)
return
-
ENODEV
;
}
return
0
;
}
...
...
@@ -1602,10 +1172,6 @@ static void __exit acpi_thermal_exit(void)
acpi_bus_unregister_driver
(
&
acpi_thermal_driver
);
#ifdef CONFIG_ACPI_PROCFS
remove_proc_entry
(
ACPI_THERMAL_CLASS
,
acpi_root_dir
);
#endif
return
;
}
...
...
drivers/acpi/video.c
View file @
f3ab69a3
...
...
@@ -30,8 +30,6 @@
#include <linux/types.h>
#include <linux/list.h>
#include <linux/mutex.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/input.h>
#include <linux/backlight.h>
#include <linux/thermal.h>
...
...
@@ -152,9 +150,6 @@ struct acpi_video_bus {
struct
acpi_video_bus_flags
flags
;
struct
list_head
video_device_list
;
struct
mutex
device_list_lock
;
/* protects video_device_list */
#ifdef CONFIG_ACPI_PROCFS
struct
proc_dir_entry
*
dir
;
#endif
struct
input_dev
*
input
;
char
phys
[
32
];
/* for input device */
struct
notifier_block
pm_nb
;
...
...
@@ -210,108 +205,6 @@ struct acpi_video_device {
struct
output_device
*
output_dev
;
};
#ifdef CONFIG_ACPI_PROCFS
/* bus */
static
int
acpi_video_bus_info_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
const
struct
file_operations
acpi_video_bus_info_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_video_bus_info_open_fs
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
static
int
acpi_video_bus_ROM_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
const
struct
file_operations
acpi_video_bus_ROM_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_video_bus_ROM_open_fs
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
static
int
acpi_video_bus_POST_info_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
const
struct
file_operations
acpi_video_bus_POST_info_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_video_bus_POST_info_open_fs
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
static
int
acpi_video_bus_POST_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
ssize_t
acpi_video_bus_write_POST
(
struct
file
*
file
,
const
char
__user
*
buffer
,
size_t
count
,
loff_t
*
data
);
static
const
struct
file_operations
acpi_video_bus_POST_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_video_bus_POST_open_fs
,
.
read
=
seq_read
,
.
write
=
acpi_video_bus_write_POST
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
static
int
acpi_video_bus_DOS_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
ssize_t
acpi_video_bus_write_DOS
(
struct
file
*
file
,
const
char
__user
*
buffer
,
size_t
count
,
loff_t
*
data
);
static
const
struct
file_operations
acpi_video_bus_DOS_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_video_bus_DOS_open_fs
,
.
read
=
seq_read
,
.
write
=
acpi_video_bus_write_DOS
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
/* device */
static
int
acpi_video_device_info_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
const
struct
file_operations
acpi_video_device_info_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_video_device_info_open_fs
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
static
int
acpi_video_device_state_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
ssize_t
acpi_video_device_write_state
(
struct
file
*
file
,
const
char
__user
*
buffer
,
size_t
count
,
loff_t
*
data
);
static
const
struct
file_operations
acpi_video_device_state_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_video_device_state_open_fs
,
.
read
=
seq_read
,
.
write
=
acpi_video_device_write_state
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
static
int
acpi_video_device_brightness_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
ssize_t
acpi_video_device_write_brightness
(
struct
file
*
file
,
const
char
__user
*
buffer
,
size_t
count
,
loff_t
*
data
);
static
const
struct
file_operations
acpi_video_device_brightness_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_video_device_brightness_open_fs
,
.
read
=
seq_read
,
.
write
=
acpi_video_device_write_brightness
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
static
int
acpi_video_device_EDID_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
const
struct
file_operations
acpi_video_device_EDID_fops
=
{
.
owner
=
THIS_MODULE
,
.
open
=
acpi_video_device_EDID_open_fs
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
single_release
,
};
#endif
/* CONFIG_ACPI_PROCFS */
static
const
char
device_decode
[][
30
]
=
{
"motherboard VGA device"
,
"PCI VGA device"
,
...
...
@@ -1110,646 +1003,6 @@ static int acpi_video_bus_check(struct acpi_video_bus *video)
return
status
;
}
/* --------------------------------------------------------------------------
FS Interface (/proc)
-------------------------------------------------------------------------- */
#ifdef CONFIG_ACPI_PROCFS
static
struct
proc_dir_entry
*
acpi_video_dir
;
/* video devices */
static
int
acpi_video_device_info_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
struct
acpi_video_device
*
dev
=
seq
->
private
;
if
(
!
dev
)
goto
end
;
seq_printf
(
seq
,
"device_id: 0x%04x
\n
"
,
(
u32
)
dev
->
device_id
);
seq_printf
(
seq
,
"type: "
);
if
(
dev
->
flags
.
crt
)
seq_printf
(
seq
,
"CRT
\n
"
);
else
if
(
dev
->
flags
.
lcd
)
seq_printf
(
seq
,
"LCD
\n
"
);
else
if
(
dev
->
flags
.
tvout
)
seq_printf
(
seq
,
"TVOUT
\n
"
);
else
if
(
dev
->
flags
.
dvi
)
seq_printf
(
seq
,
"DVI
\n
"
);
else
seq_printf
(
seq
,
"UNKNOWN
\n
"
);
seq_printf
(
seq
,
"known by bios: %s
\n
"
,
dev
->
flags
.
bios
?
"yes"
:
"no"
);
end:
return
0
;
}
static
int
acpi_video_device_info_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_video_device_info_seq_show
,
PDE
(
inode
)
->
data
);
}
static
int
acpi_video_device_query
(
struct
acpi_video_device
*
device
,
unsigned
long
long
*
state
)
{
int
status
;
status
=
acpi_evaluate_integer
(
device
->
dev
->
handle
,
"_DGS"
,
NULL
,
state
);
return
status
;
}
static
int
acpi_video_device_state_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
int
status
;
struct
acpi_video_device
*
dev
=
seq
->
private
;
unsigned
long
long
state
;
if
(
!
dev
)
goto
end
;
status
=
acpi_video_device_get_state
(
dev
,
&
state
);
seq_printf
(
seq
,
"state: "
);
if
(
ACPI_SUCCESS
(
status
))
seq_printf
(
seq
,
"0x%02llx
\n
"
,
state
);
else
seq_printf
(
seq
,
"<not supported>
\n
"
);
status
=
acpi_video_device_query
(
dev
,
&
state
);
seq_printf
(
seq
,
"query: "
);
if
(
ACPI_SUCCESS
(
status
))
seq_printf
(
seq
,
"0x%02llx
\n
"
,
state
);
else
seq_printf
(
seq
,
"<not supported>
\n
"
);
end:
return
0
;
}
static
int
acpi_video_device_state_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_video_device_state_seq_show
,
PDE
(
inode
)
->
data
);
}
static
ssize_t
acpi_video_device_write_state
(
struct
file
*
file
,
const
char
__user
*
buffer
,
size_t
count
,
loff_t
*
data
)
{
int
status
;
struct
seq_file
*
m
=
file
->
private_data
;
struct
acpi_video_device
*
dev
=
m
->
private
;
char
str
[
12
]
=
{
0
};
u32
state
=
0
;
if
(
!
dev
||
count
>=
sizeof
(
str
))
return
-
EINVAL
;
if
(
copy_from_user
(
str
,
buffer
,
count
))
return
-
EFAULT
;
str
[
count
]
=
0
;
state
=
simple_strtoul
(
str
,
NULL
,
0
);
state
&=
((
1ul
<<
31
)
|
(
1ul
<<
30
)
|
(
1ul
<<
0
));
status
=
acpi_video_device_set_state
(
dev
,
state
);
if
(
status
)
return
-
EFAULT
;
return
count
;
}
static
int
acpi_video_device_brightness_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
struct
acpi_video_device
*
dev
=
seq
->
private
;
int
i
;
if
(
!
dev
||
!
dev
->
brightness
)
{
seq_printf
(
seq
,
"<not supported>
\n
"
);
return
0
;
}
seq_printf
(
seq
,
"levels: "
);
for
(
i
=
2
;
i
<
dev
->
brightness
->
count
;
i
++
)
seq_printf
(
seq
,
" %d"
,
dev
->
brightness
->
levels
[
i
]);
seq_printf
(
seq
,
"
\n
current: %d
\n
"
,
dev
->
brightness
->
curr
);
return
0
;
}
static
int
acpi_video_device_brightness_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_video_device_brightness_seq_show
,
PDE
(
inode
)
->
data
);
}
static
ssize_t
acpi_video_device_write_brightness
(
struct
file
*
file
,
const
char
__user
*
buffer
,
size_t
count
,
loff_t
*
data
)
{
struct
seq_file
*
m
=
file
->
private_data
;
struct
acpi_video_device
*
dev
=
m
->
private
;
char
str
[
5
]
=
{
0
};
unsigned
int
level
=
0
;
int
i
;
if
(
!
dev
||
!
dev
->
brightness
||
count
>=
sizeof
(
str
))
return
-
EINVAL
;
if
(
copy_from_user
(
str
,
buffer
,
count
))
return
-
EFAULT
;
str
[
count
]
=
0
;
level
=
simple_strtoul
(
str
,
NULL
,
0
);
if
(
level
>
100
)
return
-
EFAULT
;
/* validate through the list of available levels */
for
(
i
=
2
;
i
<
dev
->
brightness
->
count
;
i
++
)
if
(
level
==
dev
->
brightness
->
levels
[
i
])
{
if
(
!
acpi_video_device_lcd_set_level
(
dev
,
level
))
return
count
;
break
;
}
return
-
EINVAL
;
}
static
int
acpi_video_device_EDID_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
struct
acpi_video_device
*
dev
=
seq
->
private
;
int
status
;
int
i
;
union
acpi_object
*
edid
=
NULL
;
if
(
!
dev
)
goto
out
;
status
=
acpi_video_device_EDID
(
dev
,
&
edid
,
128
);
if
(
ACPI_FAILURE
(
status
))
{
status
=
acpi_video_device_EDID
(
dev
,
&
edid
,
256
);
}
if
(
ACPI_FAILURE
(
status
))
{
goto
out
;
}
if
(
edid
&&
edid
->
type
==
ACPI_TYPE_BUFFER
)
{
for
(
i
=
0
;
i
<
edid
->
buffer
.
length
;
i
++
)
seq_putc
(
seq
,
edid
->
buffer
.
pointer
[
i
]);
}
out:
if
(
!
edid
)
seq_printf
(
seq
,
"<not supported>
\n
"
);
else
kfree
(
edid
);
return
0
;
}
static
int
acpi_video_device_EDID_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_video_device_EDID_seq_show
,
PDE
(
inode
)
->
data
);
}
static
int
acpi_video_device_add_fs
(
struct
acpi_device
*
device
)
{
struct
proc_dir_entry
*
entry
,
*
device_dir
;
struct
acpi_video_device
*
vid_dev
;
vid_dev
=
acpi_driver_data
(
device
);
if
(
!
vid_dev
)
return
-
ENODEV
;
device_dir
=
proc_mkdir
(
acpi_device_bid
(
device
),
vid_dev
->
video
->
dir
);
if
(
!
device_dir
)
return
-
ENOMEM
;
/* 'info' [R] */
entry
=
proc_create_data
(
"info"
,
S_IRUGO
,
device_dir
,
&
acpi_video_device_info_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
goto
err_remove_dir
;
/* 'state' [R/W] */
entry
=
proc_create_data
(
"state"
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
device_dir
,
&
acpi_video_device_state_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
goto
err_remove_info
;
/* 'brightness' [R/W] */
entry
=
proc_create_data
(
"brightness"
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
device_dir
,
&
acpi_video_device_brightness_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
goto
err_remove_state
;
/* 'EDID' [R] */
entry
=
proc_create_data
(
"EDID"
,
S_IRUGO
,
device_dir
,
&
acpi_video_device_EDID_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
goto
err_remove_brightness
;
acpi_device_dir
(
device
)
=
device_dir
;
return
0
;
err_remove_brightness:
remove_proc_entry
(
"brightness"
,
device_dir
);
err_remove_state:
remove_proc_entry
(
"state"
,
device_dir
);
err_remove_info:
remove_proc_entry
(
"info"
,
device_dir
);
err_remove_dir:
remove_proc_entry
(
acpi_device_bid
(
device
),
vid_dev
->
video
->
dir
);
return
-
ENOMEM
;
}
static
int
acpi_video_device_remove_fs
(
struct
acpi_device
*
device
)
{
struct
acpi_video_device
*
vid_dev
;
struct
proc_dir_entry
*
device_dir
;
vid_dev
=
acpi_driver_data
(
device
);
if
(
!
vid_dev
||
!
vid_dev
->
video
||
!
vid_dev
->
video
->
dir
)
return
-
ENODEV
;
device_dir
=
acpi_device_dir
(
device
);
if
(
device_dir
)
{
remove_proc_entry
(
"info"
,
device_dir
);
remove_proc_entry
(
"state"
,
device_dir
);
remove_proc_entry
(
"brightness"
,
device_dir
);
remove_proc_entry
(
"EDID"
,
device_dir
);
remove_proc_entry
(
acpi_device_bid
(
device
),
vid_dev
->
video
->
dir
);
acpi_device_dir
(
device
)
=
NULL
;
}
return
0
;
}
/* video bus */
static
int
acpi_video_bus_info_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
struct
acpi_video_bus
*
video
=
seq
->
private
;
if
(
!
video
)
goto
end
;
seq_printf
(
seq
,
"Switching heads: %s
\n
"
,
video
->
flags
.
multihead
?
"yes"
:
"no"
);
seq_printf
(
seq
,
"Video ROM: %s
\n
"
,
video
->
flags
.
rom
?
"yes"
:
"no"
);
seq_printf
(
seq
,
"Device to be POSTed on boot: %s
\n
"
,
video
->
flags
.
post
?
"yes"
:
"no"
);
end:
return
0
;
}
static
int
acpi_video_bus_info_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_video_bus_info_seq_show
,
PDE
(
inode
)
->
data
);
}
static
int
acpi_video_bus_ROM_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
struct
acpi_video_bus
*
video
=
seq
->
private
;
if
(
!
video
)
goto
end
;
printk
(
KERN_INFO
PREFIX
"Please implement %s
\n
"
,
__func__
);
seq_printf
(
seq
,
"<TODO>
\n
"
);
end:
return
0
;
}
static
int
acpi_video_bus_ROM_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_video_bus_ROM_seq_show
,
PDE
(
inode
)
->
data
);
}
static
int
acpi_video_bus_POST_options
(
struct
acpi_video_bus
*
video
,
unsigned
long
long
*
options
)
{
int
status
;
status
=
acpi_evaluate_integer
(
video
->
device
->
handle
,
"_VPO"
,
NULL
,
options
);
*
options
&=
3
;
return
status
;
}
static
int
acpi_video_bus_POST_info_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
struct
acpi_video_bus
*
video
=
seq
->
private
;
unsigned
long
long
options
;
int
status
;
if
(
!
video
)
goto
end
;
status
=
acpi_video_bus_POST_options
(
video
,
&
options
);
if
(
ACPI_SUCCESS
(
status
))
{
if
(
!
(
options
&
1
))
{
printk
(
KERN_WARNING
PREFIX
"The motherboard VGA device is not listed as a possible POST device.
\n
"
);
printk
(
KERN_WARNING
PREFIX
"This indicates a BIOS bug. Please contact the manufacturer.
\n
"
);
}
printk
(
KERN_WARNING
"%llx
\n
"
,
options
);
seq_printf
(
seq
,
"can POST: <integrated video>"
);
if
(
options
&
2
)
seq_printf
(
seq
,
" <PCI video>"
);
if
(
options
&
4
)
seq_printf
(
seq
,
" <AGP video>"
);
seq_putc
(
seq
,
'\n'
);
}
else
seq_printf
(
seq
,
"<not supported>
\n
"
);
end:
return
0
;
}
static
int
acpi_video_bus_POST_info_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_video_bus_POST_info_seq_show
,
PDE
(
inode
)
->
data
);
}
static
int
acpi_video_bus_get_POST
(
struct
acpi_video_bus
*
video
,
unsigned
long
long
*
id
)
{
int
status
;
status
=
acpi_evaluate_integer
(
video
->
device
->
handle
,
"_GPD"
,
NULL
,
id
);
return
status
;
}
static
int
acpi_video_bus_POST_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
struct
acpi_video_bus
*
video
=
seq
->
private
;
int
status
;
unsigned
long
long
id
;
if
(
!
video
)
goto
end
;
status
=
acpi_video_bus_get_POST
(
video
,
&
id
);
if
(
!
ACPI_SUCCESS
(
status
))
{
seq_printf
(
seq
,
"<not supported>
\n
"
);
goto
end
;
}
seq_printf
(
seq
,
"device POSTed is <%s>
\n
"
,
device_decode
[
id
&
3
]);
end:
return
0
;
}
static
int
acpi_video_bus_DOS_seq_show
(
struct
seq_file
*
seq
,
void
*
offset
)
{
struct
acpi_video_bus
*
video
=
seq
->
private
;
seq_printf
(
seq
,
"DOS setting: <%d>
\n
"
,
video
->
dos_setting
);
return
0
;
}
static
int
acpi_video_bus_POST_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_video_bus_POST_seq_show
,
PDE
(
inode
)
->
data
);
}
static
int
acpi_video_bus_DOS_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
)
{
return
single_open
(
file
,
acpi_video_bus_DOS_seq_show
,
PDE
(
inode
)
->
data
);
}
static
int
acpi_video_bus_set_POST
(
struct
acpi_video_bus
*
video
,
unsigned
long
option
)
{
int
status
;
unsigned
long
long
tmp
;
union
acpi_object
arg0
=
{
ACPI_TYPE_INTEGER
};
struct
acpi_object_list
args
=
{
1
,
&
arg0
};
arg0
.
integer
.
value
=
option
;
status
=
acpi_evaluate_integer
(
video
->
device
->
handle
,
"_SPD"
,
&
args
,
&
tmp
);
if
(
ACPI_SUCCESS
(
status
))
status
=
tmp
?
(
-
EINVAL
)
:
(
AE_OK
);
return
status
;
}
static
ssize_t
acpi_video_bus_write_POST
(
struct
file
*
file
,
const
char
__user
*
buffer
,
size_t
count
,
loff_t
*
data
)
{
int
status
;
struct
seq_file
*
m
=
file
->
private_data
;
struct
acpi_video_bus
*
video
=
m
->
private
;
char
str
[
12
]
=
{
0
};
unsigned
long
long
opt
,
options
;
if
(
!
video
||
count
>=
sizeof
(
str
))
return
-
EINVAL
;
status
=
acpi_video_bus_POST_options
(
video
,
&
options
);
if
(
!
ACPI_SUCCESS
(
status
))
return
-
EINVAL
;
if
(
copy_from_user
(
str
,
buffer
,
count
))
return
-
EFAULT
;
str
[
count
]
=
0
;
opt
=
strtoul
(
str
,
NULL
,
0
);
if
(
opt
>
3
)
return
-
EFAULT
;
/* just in case an OEM 'forgot' the motherboard... */
options
|=
1
;
if
(
options
&
(
1ul
<<
opt
))
{
status
=
acpi_video_bus_set_POST
(
video
,
opt
);
if
(
!
ACPI_SUCCESS
(
status
))
return
-
EFAULT
;
}
return
count
;
}
static
ssize_t
acpi_video_bus_write_DOS
(
struct
file
*
file
,
const
char
__user
*
buffer
,
size_t
count
,
loff_t
*
data
)
{
int
status
;
struct
seq_file
*
m
=
file
->
private_data
;
struct
acpi_video_bus
*
video
=
m
->
private
;
char
str
[
12
]
=
{
0
};
unsigned
long
opt
;
if
(
!
video
||
count
>=
sizeof
(
str
))
return
-
EINVAL
;
if
(
copy_from_user
(
str
,
buffer
,
count
))
return
-
EFAULT
;
str
[
count
]
=
0
;
opt
=
strtoul
(
str
,
NULL
,
0
);
if
(
opt
>
7
)
return
-
EFAULT
;
status
=
acpi_video_bus_DOS
(
video
,
opt
&
0x3
,
(
opt
&
0x4
)
>>
2
);
if
(
!
ACPI_SUCCESS
(
status
))
return
-
EFAULT
;
return
count
;
}
static
int
acpi_video_bus_add_fs
(
struct
acpi_device
*
device
)
{
struct
acpi_video_bus
*
video
=
acpi_driver_data
(
device
);
struct
proc_dir_entry
*
device_dir
;
struct
proc_dir_entry
*
entry
;
device_dir
=
proc_mkdir
(
acpi_device_bid
(
device
),
acpi_video_dir
);
if
(
!
device_dir
)
return
-
ENOMEM
;
/* 'info' [R] */
entry
=
proc_create_data
(
"info"
,
S_IRUGO
,
device_dir
,
&
acpi_video_bus_info_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
goto
err_remove_dir
;
/* 'ROM' [R] */
entry
=
proc_create_data
(
"ROM"
,
S_IRUGO
,
device_dir
,
&
acpi_video_bus_ROM_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
goto
err_remove_info
;
/* 'POST_info' [R] */
entry
=
proc_create_data
(
"POST_info"
,
S_IRUGO
,
device_dir
,
&
acpi_video_bus_POST_info_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
goto
err_remove_rom
;
/* 'POST' [R/W] */
entry
=
proc_create_data
(
"POST"
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
device_dir
,
&
acpi_video_bus_POST_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
goto
err_remove_post_info
;
/* 'DOS' [R/W] */
entry
=
proc_create_data
(
"DOS"
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
device_dir
,
&
acpi_video_bus_DOS_fops
,
acpi_driver_data
(
device
));
if
(
!
entry
)
goto
err_remove_post
;
video
->
dir
=
acpi_device_dir
(
device
)
=
device_dir
;
return
0
;
err_remove_post:
remove_proc_entry
(
"POST"
,
device_dir
);
err_remove_post_info:
remove_proc_entry
(
"POST_info"
,
device_dir
);
err_remove_rom:
remove_proc_entry
(
"ROM"
,
device_dir
);
err_remove_info:
remove_proc_entry
(
"info"
,
device_dir
);
err_remove_dir:
remove_proc_entry
(
acpi_device_bid
(
device
),
acpi_video_dir
);
return
-
ENOMEM
;
}
static
int
acpi_video_bus_remove_fs
(
struct
acpi_device
*
device
)
{
struct
proc_dir_entry
*
device_dir
=
acpi_device_dir
(
device
);
if
(
device_dir
)
{
remove_proc_entry
(
"info"
,
device_dir
);
remove_proc_entry
(
"ROM"
,
device_dir
);
remove_proc_entry
(
"POST_info"
,
device_dir
);
remove_proc_entry
(
"POST"
,
device_dir
);
remove_proc_entry
(
"DOS"
,
device_dir
);
remove_proc_entry
(
acpi_device_bid
(
device
),
acpi_video_dir
);
acpi_device_dir
(
device
)
=
NULL
;
}
return
0
;
}
#else
static
inline
int
acpi_video_device_add_fs
(
struct
acpi_device
*
device
)
{
return
0
;
}
static
inline
int
acpi_video_device_remove_fs
(
struct
acpi_device
*
device
)
{
return
0
;
}
static
inline
int
acpi_video_bus_add_fs
(
struct
acpi_device
*
device
)
{
return
0
;
}
static
inline
int
acpi_video_bus_remove_fs
(
struct
acpi_device
*
device
)
{
return
0
;
}
#endif
/* CONFIG_ACPI_PROCFS */
/* --------------------------------------------------------------------------
Driver Interface
-------------------------------------------------------------------------- */
...
...
@@ -1877,8 +1130,6 @@ acpi_video_bus_get_one_device(struct acpi_device *device,
list_add_tail
(
&
data
->
entry
,
&
video
->
video_device_list
);
mutex_unlock
(
&
video
->
device_list_lock
);
acpi_video_device_add_fs
(
device
);
return
0
;
}
...
...
@@ -2181,8 +1432,6 @@ static int acpi_video_bus_put_one_device(struct acpi_video_device *device)
if
(
!
device
||
!
device
->
video
)
return
-
ENOENT
;
acpi_video_device_remove_fs
(
device
->
dev
);
status
=
acpi_remove_notify_handler
(
device
->
dev
->
handle
,
ACPI_DEVICE_NOTIFY
,
acpi_video_device_notify
);
...
...
@@ -2466,10 +1715,6 @@ static int acpi_video_bus_add(struct acpi_device *device)
if
(
error
)
goto
err_free_video
;
error
=
acpi_video_bus_add_fs
(
device
);
if
(
error
)
goto
err_free_video
;
mutex_init
(
&
video
->
device_list_lock
);
INIT_LIST_HEAD
(
&
video
->
video_device_list
);
...
...
@@ -2522,7 +1767,6 @@ static int acpi_video_bus_add(struct acpi_device *device)
acpi_video_bus_stop_devices
(
video
);
acpi_video_bus_put_devices
(
video
);
kfree
(
video
->
attached_array
);
acpi_video_bus_remove_fs
(
device
);
err_free_video:
kfree
(
video
);
device
->
driver_data
=
NULL
;
...
...
@@ -2544,7 +1788,6 @@ static int acpi_video_bus_remove(struct acpi_device *device, int type)
acpi_video_bus_stop_devices
(
video
);
acpi_video_bus_put_devices
(
video
);
acpi_video_bus_remove_fs
(
device
);
input_unregister_device
(
video
->
input
);
kfree
(
video
->
attached_array
);
...
...
@@ -2584,17 +1827,9 @@ int acpi_video_register(void)
return
0
;
}
#ifdef CONFIG_ACPI_PROCFS
acpi_video_dir
=
proc_mkdir
(
ACPI_VIDEO_CLASS
,
acpi_root_dir
);
if
(
!
acpi_video_dir
)
return
-
ENODEV
;
#endif
result
=
acpi_bus_register_driver
(
&
acpi_video_bus
);
if
(
result
<
0
)
{
remove_proc_entry
(
ACPI_VIDEO_CLASS
,
acpi_root_dir
);
if
(
result
<
0
)
return
-
ENODEV
;
}
/*
* When the acpi_video_bus is loaded successfully, increase
...
...
@@ -2617,10 +1852,6 @@ void acpi_video_unregister(void)
}
acpi_bus_unregister_driver
(
&
acpi_video_bus
);
#ifdef CONFIG_ACPI_PROCFS
remove_proc_entry
(
ACPI_VIDEO_CLASS
,
acpi_root_dir
);
#endif
register_count
=
0
;
return
;
...
...
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