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
8d3c4ddb
Commit
8d3c4ddb
authored
Jun 08, 2004
by
Greg Kroah-Hartman
Browse files
Options
Browse Files
Download
Plain Diff
merge i2c-2.6 into driver-2.6 trees due to problems people reported.
parents
a85f1c6a
fce72d4b
Changes
25
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
667 additions
and
212 deletions
+667
-212
MAINTAINERS
MAINTAINERS
+6
-0
arch/i386/kernel/cpuid.c
arch/i386/kernel/cpuid.c
+71
-2
drivers/base/bus.c
drivers/base/bus.c
+71
-0
drivers/base/class.c
drivers/base/class.c
+75
-6
drivers/base/core.c
drivers/base/core.c
+1
-1
drivers/base/platform.c
drivers/base/platform.c
+86
-0
drivers/char/raw.c
drivers/char/raw.c
+24
-1
drivers/i2c/chips/asb100.c
drivers/i2c/chips/asb100.c
+33
-33
drivers/i2c/chips/it87.c
drivers/i2c/chips/it87.c
+11
-11
drivers/i2c/chips/lm78.c
drivers/i2c/chips/lm78.c
+11
-11
drivers/i2c/chips/lm85.c
drivers/i2c/chips/lm85.c
+13
-13
drivers/i2c/chips/via686a.c
drivers/i2c/chips/via686a.c
+9
-9
drivers/i2c/chips/w83627hf.c
drivers/i2c/chips/w83627hf.c
+48
-48
drivers/i2c/chips/w83781d.c
drivers/i2c/chips/w83781d.c
+15
-15
drivers/i2c/chips/w83l785ts.c
drivers/i2c/chips/w83l785ts.c
+2
-2
drivers/pci/pci-driver.c
drivers/pci/pci-driver.c
+1
-0
drivers/pci/pci-sysfs.c
drivers/pci/pci-sysfs.c
+15
-18
drivers/pci/pci.h
drivers/pci/pci.h
+1
-0
drivers/scsi/scsi_debug.c
drivers/scsi/scsi_debug.c
+8
-8
drivers/scsi/scsi_sysfs.c
drivers/scsi/scsi_sysfs.c
+7
-7
drivers/scsi/scsi_transport_spi.c
drivers/scsi/scsi_transport_spi.c
+2
-2
include/linux/device.h
include/linux/device.h
+17
-25
include/linux/module.h
include/linux/module.h
+19
-0
include/linux/sysfs.h
include/linux/sysfs.h
+21
-0
kernel/module.c
kernel/module.c
+100
-0
No files found.
MAINTAINERS
View file @
8d3c4ddb
...
...
@@ -689,6 +689,12 @@ M: jrv@vanzandt.mv.com
L: blinux-list@redhat.com
S: Maintained
DRIVER CORE, KOBJECTS, AND SYSFS
P: Greg Kroah-Hartman
M: greg@kroah.com
L: linux-kernel@vger.kernel.org
S: Supported
DRM DRIVERS
L: dri-devel@lists.sourceforge.net
S: Supported
...
...
arch/i386/kernel/cpuid.c
View file @
8d3c4ddb
...
...
@@ -36,12 +36,17 @@
#include <linux/fs.h>
#include <linux/smp_lock.h>
#include <linux/fs.h>
#include <linux/device.h>
#include <linux/cpu.h>
#include <linux/notifier.h>
#include <asm/processor.h>
#include <asm/msr.h>
#include <asm/uaccess.h>
#include <asm/system.h>
static
struct
class_simple
*
cpuid_class
;
#ifdef CONFIG_SMP
struct
cpuid_command
{
...
...
@@ -153,20 +158,84 @@ static struct file_operations cpuid_fops = {
.
open
=
cpuid_open
,
};
static
int
cpuid_class_simple_device_add
(
int
i
)
{
int
err
=
0
;
struct
class_device
*
class_err
;
class_err
=
class_simple_device_add
(
cpuid_class
,
MKDEV
(
CPUID_MAJOR
,
i
),
NULL
,
"cpu%d"
,
i
);
if
(
IS_ERR
(
class_err
))
err
=
PTR_ERR
(
class_err
);
return
err
;
}
static
int
__devinit
cpuid_class_cpu_callback
(
struct
notifier_block
*
nfb
,
unsigned
long
action
,
void
*
hcpu
)
{
unsigned
int
cpu
=
(
unsigned
long
)
hcpu
;
switch
(
action
)
{
case
CPU_ONLINE
:
cpuid_class_simple_device_add
(
cpu
);
break
;
case
CPU_DEAD
:
class_simple_device_remove
(
MKDEV
(
CPUID_MAJOR
,
cpu
));
break
;
}
return
NOTIFY_OK
;
}
static
struct
notifier_block
cpuid_class_cpu_notifier
=
{
.
notifier_call
=
cpuid_class_cpu_callback
,
};
int
__init
cpuid_init
(
void
)
{
int
i
,
err
=
0
;
i
=
0
;
if
(
register_chrdev
(
CPUID_MAJOR
,
"cpu/cpuid"
,
&
cpuid_fops
))
{
printk
(
KERN_ERR
"cpuid: unable to get major %d for cpuid
\n
"
,
CPUID_MAJOR
);
return
-
EBUSY
;
err
=
-
EBUSY
;
goto
out
;
}
cpuid_class
=
class_simple_create
(
THIS_MODULE
,
"cpuid"
);
if
(
IS_ERR
(
cpuid_class
))
{
err
=
PTR_ERR
(
cpuid_class
);
goto
out_chrdev
;
}
for_each_online_cpu
(
i
)
{
err
=
cpuid_class_simple_device_add
(
i
);
if
(
err
!=
0
)
goto
out_class
;
}
register_cpu_notifier
(
&
cpuid_class_cpu_notifier
);
return
0
;
err
=
0
;
goto
out
;
out_class:
i
=
0
;
for_each_online_cpu
(
i
)
{
class_simple_device_remove
(
MKDEV
(
CPUID_MAJOR
,
i
));
}
class_simple_destroy
(
cpuid_class
);
out_chrdev:
unregister_chrdev
(
CPUID_MAJOR
,
"cpu/cpuid"
);
out:
return
err
;
}
void
__exit
cpuid_exit
(
void
)
{
int
cpu
=
0
;
for_each_online_cpu
(
cpu
)
class_simple_device_remove
(
MKDEV
(
CPUID_MAJOR
,
cpu
));
class_simple_destroy
(
cpuid_class
);
unregister_chrdev
(
CPUID_MAJOR
,
"cpu/cpuid"
);
unregister_cpu_notifier
(
&
cpuid_class_cpu_notifier
);
}
module_init
(
cpuid_init
);
...
...
drivers/base/bus.c
View file @
8d3c4ddb
...
...
@@ -392,6 +392,38 @@ static void driver_detach(struct device_driver * drv)
}
static
int
device_add_attrs
(
struct
bus_type
*
bus
,
struct
device
*
dev
)
{
int
error
=
0
;
int
i
;
if
(
bus
->
dev_attrs
)
{
for
(
i
=
0
;
attr_name
(
bus
->
dev_attrs
[
i
]);
i
++
)
{
error
=
device_create_file
(
dev
,
&
bus
->
dev_attrs
[
i
]);
if
(
error
)
goto
Err
;
}
}
Done:
return
error
;
Err:
while
(
--
i
>=
0
)
device_remove_file
(
dev
,
&
bus
->
dev_attrs
[
i
]);
goto
Done
;
}
static
void
device_remove_attrs
(
struct
bus_type
*
bus
,
struct
device
*
dev
)
{
int
i
;
if
(
bus
->
dev_attrs
)
{
for
(
i
=
0
;
attr_name
(
bus
->
dev_attrs
[
i
]);
i
++
)
device_remove_file
(
dev
,
&
bus
->
dev_attrs
[
i
]);
}
}
/**
* bus_add_device - add device to bus
* @dev: device being added
...
...
@@ -411,6 +443,7 @@ int bus_add_device(struct device * dev)
list_add_tail
(
&
dev
->
bus_list
,
&
dev
->
bus
->
devices
.
list
);
device_attach
(
dev
);
up_write
(
&
dev
->
bus
->
subsys
.
rwsem
);
device_add_attrs
(
bus
,
dev
);
sysfs_create_link
(
&
bus
->
devices
.
kobj
,
&
dev
->
kobj
,
dev
->
bus_id
);
}
return
error
;
...
...
@@ -429,6 +462,7 @@ void bus_remove_device(struct device * dev)
{
if
(
dev
->
bus
)
{
sysfs_remove_link
(
&
dev
->
bus
->
devices
.
kobj
,
dev
->
bus_id
);
device_remove_attrs
(
dev
->
bus
,
dev
);
down_write
(
&
dev
->
bus
->
subsys
.
rwsem
);
pr_debug
(
"bus %s: remove device %s
\n
"
,
dev
->
bus
->
name
,
dev
->
bus_id
);
device_release_driver
(
dev
);
...
...
@@ -549,6 +583,41 @@ struct bus_type * find_bus(char * name)
return
k
?
to_bus
(
k
)
:
NULL
;
}
/**
* bus_add_attrs - Add default attributes for this bus.
* @bus: Bus that has just been registered.
*/
static
int
bus_add_attrs
(
struct
bus_type
*
bus
)
{
int
error
=
0
;
int
i
;
if
(
bus
->
bus_attrs
)
{
for
(
i
=
0
;
attr_name
(
bus
->
bus_attrs
[
i
]);
i
++
)
{
if
((
error
=
bus_create_file
(
bus
,
&
bus
->
bus_attrs
[
i
])))
goto
Err
;
}
}
Done:
return
error
;
Err:
while
(
--
i
>=
0
)
bus_remove_file
(
bus
,
&
bus
->
bus_attrs
[
i
]);
goto
Done
;
}
static
void
bus_remove_attrs
(
struct
bus_type
*
bus
)
{
int
i
;
if
(
bus
->
bus_attrs
)
{
for
(
i
=
0
;
attr_name
(
bus
->
bus_attrs
[
i
]);
i
++
)
bus_remove_file
(
bus
,
&
bus
->
bus_attrs
[
i
]);
}
}
/**
* bus_register - register a bus with the system.
* @bus: bus.
...
...
@@ -582,6 +651,7 @@ int bus_register(struct bus_type * bus)
retval
=
kset_register
(
&
bus
->
drivers
);
if
(
retval
)
goto
bus_drivers_fail
;
bus_add_attrs
(
bus
);
pr_debug
(
"bus type '%s' registered
\n
"
,
bus
->
name
);
return
0
;
...
...
@@ -605,6 +675,7 @@ int bus_register(struct bus_type * bus)
void
bus_unregister
(
struct
bus_type
*
bus
)
{
pr_debug
(
"bus %s: unregistering
\n
"
,
bus
->
name
);
bus_remove_attrs
(
bus
);
kset_unregister
(
&
bus
->
drivers
);
kset_unregister
(
&
bus
->
devices
);
subsystem_unregister
(
&
bus
->
subsys
);
...
...
drivers/base/class.c
View file @
8d3c4ddb
...
...
@@ -100,6 +100,37 @@ void class_put(struct class * cls)
subsys_put
(
&
cls
->
subsys
);
}
static
int
add_class_attrs
(
struct
class
*
cls
)
{
int
i
;
int
error
=
0
;
if
(
cls
->
class_attrs
)
{
for
(
i
=
0
;
attr_name
(
cls
->
class_attrs
[
i
]);
i
++
)
{
error
=
class_create_file
(
cls
,
&
cls
->
class_attrs
[
i
]);
if
(
error
)
goto
Err
;
}
}
Done:
return
error
;
Err:
while
(
--
i
>=
0
)
class_remove_file
(
cls
,
&
cls
->
class_attrs
[
i
]);
goto
Done
;
}
static
void
remove_class_attrs
(
struct
class
*
cls
)
{
int
i
;
if
(
cls
->
class_attrs
)
{
for
(
i
=
0
;
attr_name
(
cls
->
class_attrs
[
i
]);
i
++
)
class_remove_file
(
cls
,
&
cls
->
class_attrs
[
i
]);
}
}
int
class_register
(
struct
class
*
cls
)
{
int
error
;
...
...
@@ -115,18 +146,21 @@ int class_register(struct class * cls)
subsys_set_kset
(
cls
,
class_subsys
);
error
=
subsystem_register
(
&
cls
->
subsys
);
if
(
error
)
return
error
;
return
0
;
if
(
!
error
)
{
error
=
add_class_attrs
(
class_get
(
cls
));
class_put
(
cls
);
}
return
error
;
}
void
class_unregister
(
struct
class
*
cls
)
{
pr_debug
(
"device class '%s': unregistering
\n
"
,
cls
->
name
);
remove_class_attrs
(
cls
);
subsystem_unregister
(
&
cls
->
subsys
);
}
/* Class Device Stuff */
int
class_device_create_file
(
struct
class_device
*
class_dev
,
...
...
@@ -272,6 +306,40 @@ static struct kset_hotplug_ops class_hotplug_ops = {
static
decl_subsys
(
class_obj
,
&
ktype_class_device
,
&
class_hotplug_ops
);
static
int
class_device_add_attrs
(
struct
class_device
*
cd
)
{
int
i
;
int
error
=
0
;
struct
class
*
cls
=
cd
->
class
;
if
(
cls
->
class_dev_attrs
)
{
for
(
i
=
0
;
attr_name
(
cls
->
class_dev_attrs
[
i
]);
i
++
)
{
error
=
class_device_create_file
(
cd
,
&
cls
->
class_dev_attrs
[
i
]);
if
(
error
)
goto
Err
;
}
}
Done:
return
error
;
Err:
while
(
--
i
>=
0
)
class_device_remove_file
(
cd
,
&
cls
->
class_dev_attrs
[
i
]);
goto
Done
;
}
static
void
class_device_remove_attrs
(
struct
class_device
*
cd
)
{
int
i
;
struct
class
*
cls
=
cd
->
class
;
if
(
cls
->
class_dev_attrs
)
{
for
(
i
=
0
;
attr_name
(
cls
->
class_dev_attrs
[
i
]);
i
++
)
class_device_remove_file
(
cd
,
&
cls
->
class_dev_attrs
[
i
]);
}
}
void
class_device_initialize
(
struct
class_device
*
class_dev
)
{
kobj_set_kset_s
(
class_dev
,
class_obj_subsys
);
...
...
@@ -311,7 +379,7 @@ int class_device_add(struct class_device *class_dev)
class_intf
->
add
(
class_dev
);
up_write
(
&
parent
->
subsys
.
rwsem
);
}
class_device_add_attrs
(
class_dev
);
class_device_dev_link
(
class_dev
);
class_device_driver_link
(
class_dev
);
...
...
@@ -344,7 +412,8 @@ void class_device_del(struct class_device *class_dev)
class_device_dev_unlink
(
class_dev
);
class_device_driver_unlink
(
class_dev
);
class_device_remove_attrs
(
class_dev
);
kobject_del
(
&
class_dev
->
kobj
);
if
(
parent
)
...
...
drivers/base/core.c
View file @
8d3c4ddb
...
...
@@ -245,7 +245,7 @@ int device_add(struct device *dev)
BusError:
device_pm_remove
(
dev
);
PMError:
kobject_
unregister
(
&
dev
->
kobj
);
kobject_
del
(
&
dev
->
kobj
);
Error:
if
(
parent
)
put_device
(
parent
);
...
...
drivers/base/platform.c
View file @
8d3c4ddb
...
...
@@ -18,6 +18,90 @@ struct device platform_bus = {
.
bus_id
=
"platform"
,
};
/**
* platform_get_resource - get a resource for a device
* @dev: platform device
* @type: resource type
* @num: resource index
*/
struct
resource
*
platform_get_resource
(
struct
platform_device
*
dev
,
unsigned
int
type
,
unsigned
int
num
)
{
int
i
;
for
(
i
=
0
;
i
<
dev
->
num_resources
;
i
++
)
{
struct
resource
*
r
=
&
dev
->
resource
[
i
];
if
((
r
->
flags
&
(
IORESOURCE_IO
|
IORESOURCE_MEM
|
IORESOURCE_IRQ
|
IORESOURCE_DMA
))
==
type
)
if
(
num
--
==
0
)
return
r
;
}
return
NULL
;
}
/**
* platform_get_irq - get an IRQ for a device
* @dev: platform device
* @num: IRQ number index
*/
int
platform_get_irq
(
struct
platform_device
*
dev
,
unsigned
int
num
)
{
struct
resource
*
r
=
platform_get_resource
(
dev
,
IORESOURCE_IRQ
,
num
);
return
r
?
r
->
start
:
0
;
}
/**
* platform_add_device - add one platform device
* @dev: platform device
*
* Adds one platform device, claiming the memory resources
*/
int
platform_add_device
(
struct
platform_device
*
dev
)
{
int
i
;
for
(
i
=
0
;
i
<
dev
->
num_resources
;
i
++
)
{
struct
resource
*
p
,
*
r
=
&
dev
->
resource
[
i
];
r
->
name
=
dev
->
dev
.
bus_id
;
p
=
NULL
;
if
(
r
->
flags
&
IORESOURCE_MEM
)
p
=
&
iomem_resource
;
else
if
(
r
->
flags
&
IORESOURCE_IO
)
p
=
&
ioport_resource
;
if
(
p
&&
request_resource
(
p
,
r
))
{
printk
(
KERN_ERR
"%s%d: failed to claim resource %d
\n
"
,
dev
->
name
,
dev
->
id
,
i
);
break
;
}
}
if
(
i
==
dev
->
num_resources
)
platform_device_register
(
dev
);
return
0
;
}
/**
* platform_add_devices - add a numbers of platform devices
* @devs: array of platform devices to add
* @num: number of platform devices in array
*/
int
platform_add_devices
(
struct
platform_device
**
devs
,
int
num
)
{
int
i
;
for
(
i
=
0
;
i
<
num
;
i
++
)
platform_add_device
(
devs
[
i
]);
return
0
;
}
/**
* platform_device_register - add a platform-level device
* @dev: platform device we're adding
...
...
@@ -114,3 +198,5 @@ EXPORT_SYMBOL(platform_bus);
EXPORT_SYMBOL
(
platform_bus_type
);
EXPORT_SYMBOL
(
platform_device_register
);
EXPORT_SYMBOL
(
platform_device_unregister
);
EXPORT_SYMBOL
(
platform_get_irq
);
EXPORT_SYMBOL
(
platform_get_resource
);
drivers/char/raw.c
View file @
8d3c4ddb
...
...
@@ -18,6 +18,7 @@
#include <linux/capability.h>
#include <linux/uio.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <asm/uaccess.h>
...
...
@@ -26,6 +27,7 @@ struct raw_device_data {
int
inuse
;
};
static
struct
class_simple
*
raw_class
;
static
struct
raw_device_data
raw_devices
[
MAX_RAW_MINORS
];
static
DECLARE_MUTEX
(
raw_mutex
);
static
struct
file_operations
raw_ctl_fops
;
/* forward declaration */
...
...
@@ -123,6 +125,13 @@ raw_ioctl(struct inode *inode, struct file *filp,
return
ioctl_by_bdev
(
bdev
,
command
,
arg
);
}
static
void
bind_device
(
struct
raw_config_request
rq
)
{
class_simple_device_remove
(
MKDEV
(
RAW_MAJOR
,
rq
.
raw_minor
));
class_simple_device_add
(
raw_class
,
MKDEV
(
RAW_MAJOR
,
rq
.
raw_minor
),
NULL
,
"raw%d"
,
rq
.
raw_minor
);
}
/*
* Deal with ioctls against the raw-device control interface, to bind
* and unbind other raw devices.
...
...
@@ -191,12 +200,15 @@ static int raw_ctl_ioctl(struct inode *inode, struct file *filp,
if
(
rq
.
block_major
==
0
&&
rq
.
block_minor
==
0
)
{
/* unbind */
rawdev
->
binding
=
NULL
;
class_simple_device_remove
(
MKDEV
(
RAW_MAJOR
,
rq
.
raw_minor
));
}
else
{
rawdev
->
binding
=
bdget
(
dev
);
if
(
rawdev
->
binding
==
NULL
)
err
=
-
ENOMEM
;
else
else
{
__module_get
(
THIS_MODULE
);
bind_device
(
rq
);
}
}
up
(
&
raw_mutex
);
}
else
{
...
...
@@ -287,6 +299,15 @@ static int __init raw_init(void)
goto
error
;
}
raw_class
=
class_simple_create
(
THIS_MODULE
,
"raw"
);
if
(
IS_ERR
(
raw_class
))
{
printk
(
KERN_ERR
"Error creating raw class.
\n
"
);
cdev_del
(
&
raw_cdev
);
unregister_chrdev_region
(
dev
,
MAX_RAW_MINORS
);
goto
error
;
}
class_simple_device_add
(
raw_class
,
MKDEV
(
RAW_MAJOR
,
0
),
NULL
,
"rawctl"
);
devfs_mk_cdev
(
MKDEV
(
RAW_MAJOR
,
0
),
S_IFCHR
|
S_IRUGO
|
S_IWUGO
,
"raw/rawctl"
);
...
...
@@ -309,6 +330,8 @@ static void __exit raw_exit(void)
devfs_remove
(
"raw/raw%d"
,
i
);
devfs_remove
(
"raw/rawctl"
);
devfs_remove
(
"raw"
);
class_simple_device_remove
(
MKDEV
(
RAW_MAJOR
,
0
));
class_simple_destroy
(
raw_class
);
cdev_del
(
&
raw_cdev
);
unregister_chrdev_region
(
MKDEV
(
RAW_MAJOR
,
0
),
MAX_RAW_MINORS
);
}
...
...
drivers/i2c/chips/asb100.c
View file @
8d3c4ddb
...
...
@@ -272,7 +272,7 @@ static ssize_t \
return show_in(dev, buf, 0x##offset); \
} \
static DEVICE_ATTR(in##offset##_input, S_IRUGO, \
show_in##offset, NULL) \
show_in##offset, NULL)
;
\
static ssize_t \
show_in##offset##_min (struct device *dev, char *buf) \
{ \
...
...
@@ -294,17 +294,17 @@ static ssize_t set_in##offset##_max (struct device *dev, \
return set_in_max(dev, buf, count, 0x##offset); \
} \
static DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
show_in##offset##_min, set_in##offset##_min) \
show_in##offset##_min, set_in##offset##_min)
;
\
static DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
show_in##offset##_max, set_in##offset##_max)
show_in##offset##_max, set_in##offset##_max)
;
sysfs_in
(
0
)
sysfs_in
(
1
)
sysfs_in
(
2
)
sysfs_in
(
3
)
sysfs_in
(
4
)
sysfs_in
(
5
)
sysfs_in
(
6
)
sysfs_in
(
0
)
;
sysfs_in
(
1
)
;
sysfs_in
(
2
)
;
sysfs_in
(
3
)
;
sysfs_in
(
4
)
;
sysfs_in
(
5
)
;
sysfs_in
(
6
)
;
#define device_create_file_in(client, offset) do { \
device_create_file(&client->dev, &dev_attr_in##offset##_input); \
...
...
@@ -410,15 +410,15 @@ static ssize_t set_fan##offset##_div(struct device *dev, const char *buf, \
return set_fan_div(dev, buf, count, offset - 1); \
} \
static DEVICE_ATTR(fan##offset##_input, S_IRUGO, \
show_fan##offset, NULL) \
show_fan##offset, NULL)
;
\
static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
show_fan##offset##_min, set_fan##offset##_min) \
show_fan##offset##_min, set_fan##offset##_min)
;
\
static DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
show_fan##offset##_div, set_fan##offset##_div)
show_fan##offset##_div, set_fan##offset##_div)
;
sysfs_fan
(
1
)
sysfs_fan
(
2
)
sysfs_fan
(
3
)
sysfs_fan
(
1
)
;
sysfs_fan
(
2
)
;
sysfs_fan
(
3
)
;
#define device_create_file_fan(client, offset) do { \
device_create_file(&client->dev, &dev_attr_fan##offset##_input); \
...
...
@@ -449,9 +449,9 @@ static ssize_t show_##reg(struct device *dev, char *buf, int nr) \
return sprintf_temp_from_reg(data->reg[nr], buf, nr); \
}
show_temp_reg
(
temp
)
show_temp_reg
(
temp_max
)
show_temp_reg
(
temp_hyst
)
show_temp_reg
(
temp
)
;
show_temp_reg
(
temp_max
)
;
show_temp_reg
(
temp_hyst
)
;
#define set_temp_reg(REG, reg) \
static ssize_t set_##reg(struct device *dev, const char *buf, \
...
...
@@ -473,15 +473,15 @@ static ssize_t set_##reg(struct device *dev, const char *buf, \
return count; \
}
set_temp_reg
(
MAX
,
temp_max
)
set_temp_reg
(
HYST
,
temp_hyst
)
set_temp_reg
(
MAX
,
temp_max
)
;
set_temp_reg
(
HYST
,
temp_hyst
)
;
#define sysfs_temp(num) \
static ssize_t show_temp##num(struct device *dev, char *buf) \
{ \
return show_temp(dev, buf, num-1); \
} \
static DEVICE_ATTR(temp##num##_input, S_IRUGO, show_temp##num, NULL) \
static DEVICE_ATTR(temp##num##_input, S_IRUGO, show_temp##num, NULL)
;
\
static ssize_t show_temp_max##num(struct device *dev, char *buf) \
{ \
return show_temp_max(dev, buf, num-1); \
...
...
@@ -492,7 +492,7 @@ static ssize_t set_temp_max##num(struct device *dev, const char *buf, \
return set_temp_max(dev, buf, count, num-1); \
} \
static DEVICE_ATTR(temp##num##_max, S_IRUGO | S_IWUSR, \
show_temp_max##num, set_temp_max##num) \
show_temp_max##num, set_temp_max##num)
;
\
static ssize_t show_temp_hyst##num(struct device *dev, char *buf) \
{ \
return show_temp_hyst(dev, buf, num-1); \
...
...
@@ -503,12 +503,12 @@ static ssize_t set_temp_hyst##num(struct device *dev, const char *buf, \
return set_temp_hyst(dev, buf, count, num-1); \
} \
static DEVICE_ATTR(temp##num##_max_hyst, S_IRUGO | S_IWUSR, \
show_temp_hyst##num, set_temp_hyst##num)
show_temp_hyst##num, set_temp_hyst##num)
;
sysfs_temp
(
1
)
sysfs_temp
(
2
)
sysfs_temp
(
3
)
sysfs_temp
(
4
)
sysfs_temp
(
1
)
;
sysfs_temp
(
2
)
;
sysfs_temp
(
3
)
;
sysfs_temp
(
4
)
;
/* VID */
#define device_create_file_temp(client, num) do { \
...
...
@@ -523,7 +523,7 @@ static ssize_t show_vid(struct device *dev, char *buf)
return
sprintf
(
buf
,
"%d
\n
"
,
vid_from_reg
(
data
->
vid
,
data
->
vrm
));
}
static
DEVICE_ATTR
(
in0_ref
,
S_IRUGO
,
show_vid
,
NULL
)
static
DEVICE_ATTR
(
in0_ref
,
S_IRUGO
,
show_vid
,
NULL
)
;
#define device_create_file_vid(client) \
device_create_file(&client->dev, &dev_attr_in0_ref)
...
...
@@ -544,7 +544,7 @@ static ssize_t set_vrm(struct device *dev, const char *buf, size_t count)
}
/* Alarms */
static
DEVICE_ATTR
(
vrm
,
S_IRUGO
|
S_IWUSR
,
show_vrm
,
set_vrm
)
static
DEVICE_ATTR
(
vrm
,
S_IRUGO
|
S_IWUSR
,
show_vrm
,
set_vrm
)
;
#define device_create_file_vrm(client) \
device_create_file(&client->dev, &dev_attr_vrm);
...
...
@@ -554,7 +554,7 @@ static ssize_t show_alarms(struct device *dev, char *buf)
return
sprintf
(
buf
,
"%d
\n
"
,
ALARMS_FROM_REG
(
data
->
alarms
));
}
static
DEVICE_ATTR
(
alarms
,
S_IRUGO
,
show_alarms
,
NULL
)
static
DEVICE_ATTR
(
alarms
,
S_IRUGO
,
show_alarms
,
NULL
)
;
#define device_create_file_alarms(client) \
device_create_file(&client->dev, &dev_attr_alarms)
...
...
@@ -594,9 +594,9 @@ static ssize_t set_pwm_enable1(struct device *dev, const char *buf,
return
count
;
}
static
DEVICE_ATTR
(
fan1_pwm
,
S_IRUGO
|
S_IWUSR
,
show_pwm1
,
set_pwm1
)
static
DEVICE_ATTR
(
fan1_pwm
,
S_IRUGO
|
S_IWUSR
,
show_pwm1
,
set_pwm1
)
;
static
DEVICE_ATTR
(
fan1_pwm_enable
,
S_IRUGO
|
S_IWUSR
,
show_pwm_enable1
,
set_pwm_enable1
)
show_pwm_enable1
,
set_pwm_enable1
)
;
#define device_create_file_pwm1(client) do { \
device_create_file(&new_client->dev, &dev_attr_fan1_pwm); \
device_create_file(&new_client->dev, &dev_attr_fan1_pwm_enable); \
...
...
drivers/i2c/chips/it87.c
View file @
8d3c4ddb
...
...
@@ -275,7 +275,7 @@ static ssize_t \
{ \
return show_in(dev, buf, 0x##offset); \
} \
static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_in##offset, NULL)
static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_in##offset, NULL)
;
#define limit_in_offset(offset) \
static ssize_t \
...
...
@@ -299,9 +299,9 @@ static ssize_t set_in##offset##_max (struct device *dev, \
return set_in_max(dev, buf, count, 0x##offset); \
} \
static DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
show_in##offset##_min, set_in##offset##_min) \
show_in##offset##_min, set_in##offset##_min)
;
\
static DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
show_in##offset##_max, set_in##offset##_max)
show_in##offset##_max, set_in##offset##_max)
;
show_in_offset
(
0
);
limit_in_offset
(
0
);
...
...
@@ -382,11 +382,11 @@ static ssize_t set_temp_##offset##_min (struct device *dev, \
{ \
return set_temp_min(dev, buf, count, 0x##offset - 1); \
} \
static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp_##offset, NULL) \
static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp_##offset, NULL)
;
\
static DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
show_temp_##offset##_max, set_temp_##offset##_max) \
show_temp_##offset##_max, set_temp_##offset##_max)
;
\
static DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \
show_temp_##offset##_min, set_temp_##offset##_min)
show_temp_##offset##_min, set_temp_##offset##_min)
;
show_temp_offset
(
1
);
show_temp_offset
(
2
);
...
...
@@ -430,8 +430,8 @@ static ssize_t set_sensor_##offset (struct device *dev, \
{ \
return set_sensor(dev, buf, count, 0x##offset - 1); \
} \
static DEVICE_ATTR(temp##offset##_type, S_IRUGO | S_IWUSR,
\
show_sensor_##offset, set_sensor_##offset)
static DEVICE_ATTR(temp##offset##_type, S_IRUGO | S_IWUSR, \
show_sensor_##offset, set_sensor_##offset)
;
show_sensor_offset
(
1
);
show_sensor_offset
(
2
);
...
...
@@ -525,11 +525,11 @@ static ssize_t set_fan_##offset##_div (struct device *dev, \
{ \
return set_fan_div(dev, buf, count, 0x##offset - 1); \
} \
static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan_##offset, NULL) \
static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan_##offset, NULL)
;
\
static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
show_fan_##offset##_min, set_fan_##offset##_min) \
show_fan_##offset##_min, set_fan_##offset##_min)
;
\
static DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
show_fan_##offset##_div, set_fan_##offset##_div)
show_fan_##offset##_div, set_fan_##offset##_div)
;
show_fan_offset
(
1
);
show_fan_offset
(
2
);
...
...
drivers/i2c/chips/lm78.c
View file @
8d3c4ddb
...
...
@@ -281,7 +281,7 @@ static ssize_t \
return show_in(dev, buf, 0x##offset); \
} \
static DEVICE_ATTR(in##offset##_input, S_IRUGO, \
show_in##offset, NULL) \
show_in##offset, NULL)
;
\
static ssize_t \
show_in##offset##_min (struct device *dev, char *buf) \
{ \
...
...
@@ -303,9 +303,9 @@ static ssize_t set_in##offset##_max (struct device *dev, \
return set_in_max(dev, buf, count, 0x##offset); \
} \
static DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
show_in##offset##_min, set_in##offset##_min)
\
show_in##offset##_min, set_in##offset##_min)
;
\
static DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
show_in##offset##_max, set_in##offset##_max)
show_in##offset##_max, set_in##offset##_max)
;
show_in_offset
(
0
);
show_in_offset
(
1
);
...
...
@@ -354,11 +354,11 @@ static ssize_t set_temp_hyst(struct device *dev, const char *buf, size_t count)
return
count
;
}
static
DEVICE_ATTR
(
temp1_input
,
S_IRUGO
,
show_temp
,
NULL
)
static
DEVICE_ATTR
(
temp1_input
,
S_IRUGO
,
show_temp
,
NULL
)
;
static
DEVICE_ATTR
(
temp1_max
,
S_IRUGO
|
S_IWUSR
,
show_temp_over
,
set_temp_over
)
show_temp_over
,
set_temp_over
)
;
static
DEVICE_ATTR
(
temp1_max_hyst
,
S_IRUGO
|
S_IWUSR
,
show_temp_hyst
,
set_temp_hyst
)
show_temp_hyst
,
set_temp_hyst
)
;
/* 3 Fans */
static
ssize_t
show_fan
(
struct
device
*
dev
,
char
*
buf
,
int
nr
)
...
...
@@ -439,9 +439,9 @@ static ssize_t set_fan_##offset##_min (struct device *dev, \
{ \
return set_fan_min(dev, buf, count, 0x##offset - 1); \
} \
static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan_##offset, NULL)
\
static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan_##offset, NULL)
;
\
static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
show_fan_##offset##_min, set_fan_##offset##_min)
show_fan_##offset##_min, set_fan_##offset##_min)
;
static
ssize_t
set_fan_1_div
(
struct
device
*
dev
,
const
char
*
buf
,
size_t
count
)
...
...
@@ -461,10 +461,10 @@ show_fan_offset(3);
/* Fan 3 divisor is locked in H/W */
static
DEVICE_ATTR
(
fan1_div
,
S_IRUGO
|
S_IWUSR
,
show_fan_1_div
,
set_fan_1_div
)
show_fan_1_div
,
set_fan_1_div
)
;
static
DEVICE_ATTR
(
fan2_div
,
S_IRUGO
|
S_IWUSR
,
show_fan_2_div
,
set_fan_2_div
)
static
DEVICE_ATTR
(
fan3_div
,
S_IRUGO
,
show_fan_3_div
,
NULL
)
show_fan_2_div
,
set_fan_2_div
)
;
static
DEVICE_ATTR
(
fan3_div
,
S_IRUGO
,
show_fan_3_div
,
NULL
)
;
/* VID */
static
ssize_t
show_vid
(
struct
device
*
dev
,
char
*
buf
)
...
...
drivers/i2c/chips/lm85.c
View file @
8d3c4ddb
...
...
@@ -451,9 +451,9 @@ static ssize_t set_fan_##offset##_min (struct device *dev, \
{ \
return set_fan_min(dev, buf, count, 0x##offset - 1); \
} \
static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan_##offset, NULL)
\
static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan_##offset, NULL)
;
\
static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
show_fan_##offset##_min, set_fan_##offset##_min)
show_fan_##offset##_min, set_fan_##offset##_min)
;
show_fan_offset
(
1
);
show_fan_offset
(
2
);
...
...
@@ -468,7 +468,7 @@ static ssize_t show_vid_reg(struct device *dev, char *buf)
return
sprintf
(
buf
,
"%ld
\n
"
,
(
long
)
vid_from_reg
(
data
->
vid
,
data
->
vrm
));
}
static
DEVICE_ATTR
(
in0_ref
,
S_IRUGO
,
show_vid_reg
,
NULL
)
static
DEVICE_ATTR
(
in0_ref
,
S_IRUGO
,
show_vid_reg
,
NULL
)
;
static
ssize_t
show_vrm_reg
(
struct
device
*
dev
,
char
*
buf
)
{
...
...
@@ -487,7 +487,7 @@ static ssize_t store_vrm_reg(struct device *dev, const char *buf, size_t count)
return
count
;
}
static
DEVICE_ATTR
(
vrm
,
S_IRUGO
|
S_IWUSR
,
show_vrm_reg
,
store_vrm_reg
)
static
DEVICE_ATTR
(
vrm
,
S_IRUGO
|
S_IWUSR
,
show_vrm_reg
,
store_vrm_reg
)
;
static
ssize_t
show_alarms_reg
(
struct
device
*
dev
,
char
*
buf
)
{
...
...
@@ -495,7 +495,7 @@ static ssize_t show_alarms_reg(struct device *dev, char *buf)
return
sprintf
(
buf
,
"%ld
\n
"
,
(
long
)
ALARMS_FROM_REG
(
data
->
alarms
));
}
static
DEVICE_ATTR
(
alarms
,
S_IRUGO
,
show_alarms_reg
,
NULL
)
static
DEVICE_ATTR
(
alarms
,
S_IRUGO
,
show_alarms_reg
,
NULL
)
;
/* pwm */
...
...
@@ -542,8 +542,8 @@ static ssize_t show_pwm_enable##offset (struct device *dev, char *buf) \
return show_pwm_enable(dev, buf, 0x##offset - 1); \
} \
static DEVICE_ATTR(fan##offset##_pwm, S_IRUGO | S_IWUSR, \
show_pwm_##offset, set_pwm_##offset) \
static DEVICE_ATTR(fan##offset##_pwm_enable, S_IRUGO, show_pwm_enable##offset, NULL)
show_pwm_##offset, set_pwm_##offset)
;
\
static DEVICE_ATTR(fan##offset##_pwm_enable, S_IRUGO, show_pwm_enable##offset, NULL)
;
show_pwm_reg
(
1
);
show_pwm_reg
(
2
);
...
...
@@ -617,11 +617,11 @@ static ssize_t set_in_##offset##_max (struct device *dev, \
{ \
return set_in_max(dev, buf, count, 0x##offset); \
} \
static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_in_##offset, NULL) \
static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_in_##offset, NULL)
;
\
static DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
show_in_##offset##_min, set_in_##offset##_min) \
show_in_##offset##_min, set_in_##offset##_min)
;
\
static DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
show_in_##offset##_max, set_in_##offset##_max)
show_in_##offset##_max, set_in_##offset##_max)
;
show_in_reg
(
0
);
show_in_reg
(
1
);
...
...
@@ -697,11 +697,11 @@ static ssize_t set_temp_##offset##_max (struct device *dev, \
{ \
return set_temp_max(dev, buf, count, 0x##offset - 1); \
} \
static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp_##offset, NULL) \
static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp_##offset, NULL)
;
\
static DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \
show_temp_##offset##_min, set_temp_##offset##_min) \
show_temp_##offset##_min, set_temp_##offset##_min)
;
\
static DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
show_temp_##offset##_max, set_temp_##offset##_max)
show_temp_##offset##_max, set_temp_##offset##_max)
;
show_temp_reg
(
1
);
show_temp_reg
(
2
);
...
...
drivers/i2c/chips/via686a.c
View file @
8d3c4ddb
...
...
@@ -405,11 +405,11 @@ static ssize_t set_in##offset##_max (struct device *dev, \
{ \
return set_in_max(dev, buf, count, 0x##offset); \
} \
static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_in##offset, NULL)
\
static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_in##offset, NULL)
;
\
static DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
show_in##offset##_min, set_in##offset##_min) \
show_in##offset##_min, set_in##offset##_min)
;
\
static DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
show_in##offset##_max, set_in##offset##_max)
show_in##offset##_max, set_in##offset##_max)
;
show_in_offset
(
0
);
show_in_offset
(
1
);
...
...
@@ -473,11 +473,11 @@ static ssize_t set_temp_##offset##_hyst (struct device *dev, \
{ \
return set_temp_hyst(dev, buf, count, 0x##offset - 1); \
} \
static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp_##offset, NULL)
\
static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp_##offset, NULL)
;
\
static DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
show_temp_##offset##_over, set_temp_##offset##_over)
\
show_temp_##offset##_over, set_temp_##offset##_over)
;
\
static DEVICE_ATTR(temp##offset##_max_hyst, S_IRUGO | S_IWUSR, \
show_temp_##offset##_hyst, set_temp_##offset##_hyst)
show_temp_##offset##_hyst, set_temp_##offset##_hyst)
;
show_temp_offset
(
1
);
show_temp_offset
(
2
);
...
...
@@ -542,11 +542,11 @@ static ssize_t set_fan_##offset##_div (struct device *dev, \
{ \
return set_fan_div(dev, buf, count, 0x##offset - 1); \
} \
static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan_##offset, NULL)
\
static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan_##offset, NULL)
;
\
static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
show_fan_##offset##_min, set_fan_##offset##_min)
\
show_fan_##offset##_min, set_fan_##offset##_min)
;
\
static DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
show_fan_##offset##_div, set_fan_##offset##_div)
show_fan_##offset##_div, set_fan_##offset##_div)
;
show_fan_offset
(
1
);
show_fan_offset
(
2
);
...
...
drivers/i2c/chips/w83627hf.c
View file @
8d3c4ddb
...
...
@@ -371,7 +371,7 @@ show_regs_in_##offset (struct device *dev, char *buf) \
{ \
return show_in(dev, buf, 0x##offset); \
} \
static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_regs_in_##offset, NULL)
static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_regs_in_##offset, NULL)
;
#define sysfs_in_reg_offset(reg, offset) \
static ssize_t show_regs_in_##reg##offset (struct device *dev, char *buf) \
...
...
@@ -385,21 +385,21 @@ store_regs_in_##reg##offset (struct device *dev, \
return store_in_##reg (dev, buf, count, 0x##offset); \
} \
static DEVICE_ATTR(in##offset##_##reg, S_IRUGO| S_IWUSR, \
show_regs_in_##reg##offset, store_regs_in_##reg##offset)
show_regs_in_##reg##offset, store_regs_in_##reg##offset)
;
#define sysfs_in_offsets(offset) \
sysfs_in_offset(offset) \
sysfs_in_reg_offset(min, offset) \
sysfs_in_reg_offset(max, offset)
sysfs_in_offsets
(
1
)
sysfs_in_offsets
(
2
)
sysfs_in_offsets
(
3
)
sysfs_in_offsets
(
4
)
sysfs_in_offsets
(
5
)
sysfs_in_offsets
(
6
)
sysfs_in_offsets
(
7
)
sysfs_in_offsets
(
8
)
sysfs_in_offsets
(
1
)
;
sysfs_in_offsets
(
2
)
;
sysfs_in_offsets
(
3
)
;
sysfs_in_offsets
(
4
)
;
sysfs_in_offsets
(
5
)
;
sysfs_in_offsets
(
6
)
;
sysfs_in_offsets
(
7
)
;
sysfs_in_offsets
(
8
)
;
/* use a different set of functions for in0 */
static
ssize_t
show_in_0
(
struct
w83627hf_data
*
data
,
char
*
buf
,
u8
reg
)
...
...
@@ -499,8 +499,8 @@ static ssize_t show_##reg (struct device *dev, char *buf, int nr) \
FAN_FROM_REG(data->reg[nr-1], \
(long)DIV_FROM_REG(data->fan_div[nr-1]))); \
}
show_fan_reg
(
fan
)
show_fan_reg
(
fan_min
)
show_fan_reg
(
fan
)
;
show_fan_reg
(
fan_min
)
;
static
ssize_t
store_fan_min
(
struct
device
*
dev
,
const
char
*
buf
,
size_t
count
,
int
nr
)
...
...
@@ -523,7 +523,7 @@ static ssize_t show_regs_fan_##offset (struct device *dev, char *buf) \
{ \
return show_fan(dev, buf, 0x##offset); \
} \
static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_regs_fan_##offset, NULL)
static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_regs_fan_##offset, NULL)
;
#define sysfs_fan_min_offset(offset) \
static ssize_t show_regs_fan_min##offset (struct device *dev, char *buf) \
...
...
@@ -536,14 +536,14 @@ store_regs_fan_min##offset (struct device *dev, const char *buf, size_t count) \
return store_fan_min(dev, buf, count, 0x##offset); \
} \
static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
show_regs_fan_min##offset, store_regs_fan_min##offset)
show_regs_fan_min##offset, store_regs_fan_min##offset)
;
sysfs_fan_offset
(
1
)
sysfs_fan_min_offset
(
1
)
sysfs_fan_offset
(
2
)
sysfs_fan_min_offset
(
2
)
sysfs_fan_offset
(
3
)
sysfs_fan_min_offset
(
3
)
sysfs_fan_offset
(
1
)
;
sysfs_fan_min_offset
(
1
)
;
sysfs_fan_offset
(
2
)
;
sysfs_fan_min_offset
(
2
)
;
sysfs_fan_offset
(
3
)
;
sysfs_fan_min_offset
(
3
)
;
#define device_create_file_fan(client, offset) \
do { \
...
...
@@ -562,9 +562,9 @@ static ssize_t show_##reg (struct device *dev, char *buf, int nr) \
return sprintf(buf,"%ld\n", (long)TEMP_FROM_REG(data->reg)); \
} \
}
show_temp_reg
(
temp
)
show_temp_reg
(
temp_max
)
show_temp_reg
(
temp_max_hyst
)
show_temp_reg
(
temp
)
;
show_temp_reg
(
temp_max
)
;
show_temp_reg
(
temp_max_hyst
)
;
#define store_temp_reg(REG, reg) \
static ssize_t \
...
...
@@ -588,8 +588,8 @@ store_temp_##reg (struct device *dev, const char *buf, size_t count, int nr) \
\
return count; \
}
store_temp_reg
(
OVER
,
max
)
store_temp_reg
(
HYST
,
max_hyst
)
store_temp_reg
(
OVER
,
max
)
;
store_temp_reg
(
HYST
,
max_hyst
)
;
#define sysfs_temp_offset(offset) \
static ssize_t \
...
...
@@ -597,7 +597,7 @@ show_regs_temp_##offset (struct device *dev, char *buf) \
{ \
return show_temp(dev, buf, 0x##offset); \
} \
static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_regs_temp_##offset, NULL)
static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_regs_temp_##offset, NULL)
;
#define sysfs_temp_reg_offset(reg, offset) \
static ssize_t show_regs_temp_##reg##offset (struct device *dev, char *buf) \
...
...
@@ -611,16 +611,16 @@ store_regs_temp_##reg##offset (struct device *dev, \
return store_temp_##reg (dev, buf, count, 0x##offset); \
} \
static DEVICE_ATTR(temp##offset##_##reg, S_IRUGO| S_IWUSR, \
show_regs_temp_##reg##offset, store_regs_temp_##reg##offset)
show_regs_temp_##reg##offset, store_regs_temp_##reg##offset)
;
#define sysfs_temp_offsets(offset) \
sysfs_temp_offset(offset) \
sysfs_temp_reg_offset(max, offset) \
sysfs_temp_reg_offset(max_hyst, offset)
sysfs_temp_offsets
(
1
)
sysfs_temp_offsets
(
2
)
sysfs_temp_offsets
(
3
)
sysfs_temp_offsets
(
1
)
;
sysfs_temp_offsets
(
2
)
;
sysfs_temp_offsets
(
3
)
;
#define device_create_file_temp(client, offset) \
do { \
...
...
@@ -635,7 +635,7 @@ show_vid_reg(struct device *dev, char *buf)
struct
w83627hf_data
*
data
=
w83627hf_update_device
(
dev
);
return
sprintf
(
buf
,
"%ld
\n
"
,
(
long
)
vid_from_reg
(
data
->
vid
,
data
->
vrm
));
}
static
DEVICE_ATTR
(
in0_ref
,
S_IRUGO
,
show_vid_reg
,
NULL
)
static
DEVICE_ATTR
(
in0_ref
,
S_IRUGO
,
show_vid_reg
,
NULL
)
;
#define device_create_file_vid(client) \
device_create_file(&client->dev, &dev_attr_in0_ref)
...
...
@@ -657,7 +657,7 @@ store_vrm_reg(struct device *dev, const char *buf, size_t count)
return
count
;
}
static
DEVICE_ATTR
(
vrm
,
S_IRUGO
|
S_IWUSR
,
show_vrm_reg
,
store_vrm_reg
)
static
DEVICE_ATTR
(
vrm
,
S_IRUGO
|
S_IWUSR
,
show_vrm_reg
,
store_vrm_reg
)
;
#define device_create_file_vrm(client) \
device_create_file(&client->dev, &dev_attr_vrm)
...
...
@@ -667,7 +667,7 @@ show_alarms_reg(struct device *dev, char *buf)
struct
w83627hf_data
*
data
=
w83627hf_update_device
(
dev
);
return
sprintf
(
buf
,
"%ld
\n
"
,
(
long
)
data
->
alarms
);
}
static
DEVICE_ATTR
(
alarms
,
S_IRUGO
,
show_alarms_reg
,
NULL
)
static
DEVICE_ATTR
(
alarms
,
S_IRUGO
,
show_alarms_reg
,
NULL
)
;
#define device_create_file_alarms(client) \
device_create_file(&client->dev, &dev_attr_alarms)
...
...
@@ -724,10 +724,10 @@ store_regs_beep_##reg (struct device *dev, const char *buf, size_t count) \
return store_beep_reg(dev, buf, count, BEEP_##REG); \
} \
static DEVICE_ATTR(beep_##reg, S_IRUGO | S_IWUSR, \
show_regs_beep_##reg, store_regs_beep_##reg)
show_regs_beep_##reg, store_regs_beep_##reg)
;
sysfs_beep
(
ENABLE
,
enable
)
sysfs_beep
(
MASK
,
mask
)
sysfs_beep
(
ENABLE
,
enable
)
;
sysfs_beep
(
MASK
,
mask
)
;
#define device_create_file_beep(client) \
do { \
...
...
@@ -790,11 +790,11 @@ store_regs_fan_div_##offset (struct device *dev, \
return store_fan_div_reg(dev, buf, count, offset - 1); \
} \
static DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
show_regs_fan_div_##offset, store_regs_fan_div_##offset)
show_regs_fan_div_##offset, store_regs_fan_div_##offset)
;
sysfs_fan_div
(
1
)
sysfs_fan_div
(
2
)
sysfs_fan_div
(
3
)
sysfs_fan_div
(
1
)
;
sysfs_fan_div
(
2
)
;
sysfs_fan_div
(
3
)
;
#define device_create_file_fan_div(client, offset) \
do { \
...
...
@@ -846,11 +846,11 @@ store_regs_pwm_##offset (struct device *dev, const char *buf, size_t count) \
return store_pwm_reg(dev, buf, count, offset); \
} \
static DEVICE_ATTR(fan##offset##_pwm, S_IRUGO | S_IWUSR, \
show_regs_pwm_##offset, store_regs_pwm_##offset)
show_regs_pwm_##offset, store_regs_pwm_##offset)
;
sysfs_pwm
(
1
)
sysfs_pwm
(
2
)
sysfs_pwm
(
3
)
sysfs_pwm
(
1
)
;
sysfs_pwm
(
2
)
;
sysfs_pwm
(
3
)
;
#define device_create_file_pwm(client, offset) \
do { \
...
...
@@ -919,11 +919,11 @@ store_regs_sensor_##offset (struct device *dev, const char *buf, size_t count) \
return store_sensor_reg(dev, buf, count, offset); \
} \
static DEVICE_ATTR(temp##offset##_type, S_IRUGO | S_IWUSR, \
show_regs_sensor_##offset, store_regs_sensor_##offset)
show_regs_sensor_##offset, store_regs_sensor_##offset)
;
sysfs_sensor
(
1
)
sysfs_sensor
(
2
)
sysfs_sensor
(
3
)
sysfs_sensor
(
1
)
;
sysfs_sensor
(
2
)
;
sysfs_sensor
(
3
)
;
#define device_create_file_sensor(client, offset) \
do { \
...
...
drivers/i2c/chips/w83781d.c
View file @
8d3c4ddb
...
...
@@ -320,7 +320,7 @@ show_regs_in_##offset (struct device *dev, char *buf) \
{ \
return show_in(dev, buf, 0x##offset); \
} \
static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_regs_in_##offset, NULL)
static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_regs_in_##offset, NULL)
;
#define sysfs_in_reg_offset(reg, offset) \
static ssize_t show_regs_in_##reg##offset (struct device *dev, char *buf) \
...
...
@@ -331,7 +331,7 @@ static ssize_t store_regs_in_##reg##offset (struct device *dev, const char *buf,
{ \
return store_in_##reg (dev, buf, count, 0x##offset); \
} \
static DEVICE_ATTR(in##offset##_##reg, S_IRUGO| S_IWUSR, show_regs_in_##reg##offset, store_regs_in_##reg##offset)
static DEVICE_ATTR(in##offset##_##reg, S_IRUGO| S_IWUSR, show_regs_in_##reg##offset, store_regs_in_##reg##offset)
;
#define sysfs_in_offsets(offset) \
sysfs_in_offset(offset); \
...
...
@@ -386,7 +386,7 @@ static ssize_t show_regs_fan_##offset (struct device *dev, char *buf) \
{ \
return show_fan(dev, buf, 0x##offset); \
} \
static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_regs_fan_##offset, NULL)
static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_regs_fan_##offset, NULL)
;
#define sysfs_fan_min_offset(offset) \
static ssize_t show_regs_fan_min##offset (struct device *dev, char *buf) \
...
...
@@ -397,7 +397,7 @@ static ssize_t store_regs_fan_min##offset (struct device *dev, const char *buf,
{ \
return store_fan_min(dev, buf, count, 0x##offset); \
} \
static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, show_regs_fan_min##offset, store_regs_fan_min##offset)
static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, show_regs_fan_min##offset, store_regs_fan_min##offset)
;
sysfs_fan_offset
(
1
);
sysfs_fan_min_offset
(
1
);
...
...
@@ -466,7 +466,7 @@ show_regs_temp_##offset (struct device *dev, char *buf) \
{ \
return show_temp(dev, buf, 0x##offset); \
} \
static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_regs_temp_##offset, NULL)
static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_regs_temp_##offset, NULL)
;
#define sysfs_temp_reg_offset(reg, offset) \
static ssize_t show_regs_temp_##reg##offset (struct device *dev, char *buf) \
...
...
@@ -477,7 +477,7 @@ static ssize_t store_regs_temp_##reg##offset (struct device *dev, const char *bu
{ \
return store_temp_##reg (dev, buf, count, 0x##offset); \
} \
static DEVICE_ATTR(temp##offset##_##reg, S_IRUGO| S_IWUSR, show_regs_temp_##reg##offset, store_regs_temp_##reg##offset)
static DEVICE_ATTR(temp##offset##_##reg, S_IRUGO| S_IWUSR, show_regs_temp_##reg##offset, store_regs_temp_##reg##offset)
;
#define sysfs_temp_offsets(offset) \
sysfs_temp_offset(offset); \
...
...
@@ -503,7 +503,7 @@ show_vid_reg(struct device *dev, char *buf)
}
static
DEVICE_ATTR
(
in0_ref
,
S_IRUGO
,
show_vid_reg
,
NULL
)
DEVICE_ATTR
(
in0_ref
,
S_IRUGO
,
show_vid_reg
,
NULL
)
;
#define device_create_file_vid(client) \
device_create_file(&client->dev, &dev_attr_in0_ref);
static
ssize_t
...
...
@@ -527,7 +527,7 @@ store_vrm_reg(struct device *dev, const char *buf, size_t count)
}
static
DEVICE_ATTR
(
vrm
,
S_IRUGO
|
S_IWUSR
,
show_vrm_reg
,
store_vrm_reg
)
DEVICE_ATTR
(
vrm
,
S_IRUGO
|
S_IWUSR
,
show_vrm_reg
,
store_vrm_reg
)
;
#define device_create_file_vrm(client) \
device_create_file(&client->dev, &dev_attr_vrm);
static
ssize_t
...
...
@@ -538,7 +538,7 @@ show_alarms_reg(struct device *dev, char *buf)
}
static
DEVICE_ATTR
(
alarms
,
S_IRUGO
,
show_alarms_reg
,
NULL
)
DEVICE_ATTR
(
alarms
,
S_IRUGO
,
show_alarms_reg
,
NULL
)
;
#define device_create_file_alarms(client) \
device_create_file(&client->dev, &dev_attr_alarms);
static
ssize_t
show_beep_mask
(
struct
device
*
dev
,
char
*
buf
)
...
...
@@ -598,7 +598,7 @@ static ssize_t store_regs_beep_##reg (struct device *dev, const char *buf, size_
{ \
return store_beep_reg(dev, buf, count, BEEP_##REG); \
} \
static DEVICE_ATTR(beep_##reg, S_IRUGO | S_IWUSR, show_regs_beep_##reg, store_regs_beep_##reg)
static DEVICE_ATTR(beep_##reg, S_IRUGO | S_IWUSR, show_regs_beep_##reg, store_regs_beep_##reg)
;
sysfs_beep
(
ENABLE
,
enable
);
sysfs_beep
(
MASK
,
mask
);
...
...
@@ -665,7 +665,7 @@ static ssize_t store_regs_fan_div_##offset (struct device *dev, const char *buf,
{ \
return store_fan_div_reg(dev, buf, count, offset - 1); \
} \
static DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, show_regs_fan_div_##offset, store_regs_fan_div_##offset)
static DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, show_regs_fan_div_##offset, store_regs_fan_div_##offset)
;
sysfs_fan_div
(
1
);
sysfs_fan_div
(
2
);
...
...
@@ -744,7 +744,7 @@ static ssize_t store_regs_pwm_##offset (struct device *dev, const char *buf, siz
{ \
return store_pwm_reg(dev, buf, count, offset); \
} \
static DEVICE_ATTR(fan##offset##_pwm, S_IRUGO | S_IWUSR, show_regs_pwm_##offset, store_regs_pwm_##offset)
static DEVICE_ATTR(fan##offset##_pwm, S_IRUGO | S_IWUSR, show_regs_pwm_##offset, store_regs_pwm_##offset)
;
#define sysfs_pwmenable(offset) \
static ssize_t show_regs_pwmenable_##offset (struct device *dev, char *buf) \
...
...
@@ -755,7 +755,7 @@ static ssize_t store_regs_pwmenable_##offset (struct device *dev, const char *bu
{ \
return store_pwmenable_reg(dev, buf, count, offset); \
} \
static DEVICE_ATTR(fan##offset##_pwm_enable, S_IRUGO | S_IWUSR, show_regs_pwmenable_##offset, store_regs_pwmenable_##offset)
static DEVICE_ATTR(fan##offset##_pwm_enable, S_IRUGO | S_IWUSR, show_regs_pwmenable_##offset, store_regs_pwmenable_##offset)
;
sysfs_pwm
(
1
);
sysfs_pwm
(
2
);
...
...
@@ -833,7 +833,7 @@ static ssize_t store_regs_sensor_##offset (struct device *dev, const char *buf,
{ \
return store_sensor_reg(dev, buf, count, offset); \
} \
static DEVICE_ATTR(temp##offset##_type, S_IRUGO | S_IWUSR, show_regs_sensor_##offset, store_regs_sensor_##offset)
static DEVICE_ATTR(temp##offset##_type, S_IRUGO | S_IWUSR, show_regs_sensor_##offset, store_regs_sensor_##offset)
;
sysfs_sensor
(
1
);
sysfs_sensor
(
2
);
...
...
@@ -891,7 +891,7 @@ static ssize_t store_regs_rt_##offset (struct device *dev, const char *buf, size
{ \
return store_rt_reg(dev, buf, count, offset); \
} \
static DEVICE_ATTR(rt##offset, S_IRUGO | S_IWUSR, show_regs_rt_##offset, store_regs_rt_##offset)
static DEVICE_ATTR(rt##offset, S_IRUGO | S_IWUSR, show_regs_rt_##offset, store_regs_rt_##offset)
;
sysfs_rt
(
1
);
sysfs_rt
(
2
);
...
...
drivers/i2c/chips/w83l785ts.c
View file @
8d3c4ddb
...
...
@@ -137,8 +137,8 @@ static ssize_t show_temp_over(struct device *dev, char *buf)
return
sprintf
(
buf
,
"%d
\n
"
,
TEMP_FROM_REG
(
data
->
temp_over
));
}
static
DEVICE_ATTR
(
temp1_input
,
S_IRUGO
,
show_temp
,
NULL
)
static
DEVICE_ATTR
(
temp1_max
,
S_IRUGO
,
show_temp_over
,
NULL
)
static
DEVICE_ATTR
(
temp1_input
,
S_IRUGO
,
show_temp
,
NULL
)
;
static
DEVICE_ATTR
(
temp1_max
,
S_IRUGO
,
show_temp_over
,
NULL
)
;
/*
* Real code
...
...
drivers/pci/pci-driver.c
View file @
8d3c4ddb
...
...
@@ -539,6 +539,7 @@ struct bus_type pci_bus_type = {
.
hotplug
=
pci_hotplug
,
.
suspend
=
pci_device_suspend
,
.
resume
=
pci_device_resume
,
.
dev_attrs
=
pci_dev_attrs
,
};
static
int
__init
pci_driver_init
(
void
)
...
...
drivers/pci/pci-sysfs.c
View file @
8d3c4ddb
...
...
@@ -23,14 +23,13 @@
/* show configuration fields */
#define pci_config_attr(field, format_string) \
static ssize_t \
show_##field
(struct device *dev, char *buf) \
field##_show
(struct device *dev, char *buf) \
{ \
struct pci_dev *pdev; \
\
pdev = to_pci_dev (dev); \
return sprintf (buf, format_string, pdev->field); \
} \
static DEVICE_ATTR(field, S_IRUGO, show_##field, NULL);
}
pci_config_attr
(
vendor
,
"0x%04x
\n
"
);
pci_config_attr
(
device
,
"0x%04x
\n
"
);
...
...
@@ -41,7 +40,7 @@ pci_config_attr(irq, "%u\n");
/* show resources */
static
ssize_t
pci_show_resources
(
struct
device
*
dev
,
char
*
buf
)
resource_show
(
struct
device
*
dev
,
char
*
buf
)
{
struct
pci_dev
*
pci_dev
=
to_pci_dev
(
dev
);
char
*
str
=
buf
;
...
...
@@ -60,7 +59,16 @@ pci_show_resources(struct device * dev, char * buf)
return
(
str
-
buf
);
}
static
DEVICE_ATTR
(
resource
,
S_IRUGO
,
pci_show_resources
,
NULL
);
struct
device_attribute
pci_dev_attrs
[]
=
{
__ATTR_RO
(
resource
),
__ATTR_RO
(
vendor
),
__ATTR_RO
(
device
),
__ATTR_RO
(
subsystem_vendor
),
__ATTR_RO
(
subsystem_device
),
__ATTR_RO
(
class
),
__ATTR_RO
(
irq
),
__ATTR_NULL
,
};
static
ssize_t
pci_read_config
(
struct
kobject
*
kobj
,
char
*
buf
,
loff_t
off
,
size_t
count
)
...
...
@@ -180,21 +188,10 @@ static struct bin_attribute pcie_config_attr = {
void
pci_create_sysfs_dev_files
(
struct
pci_dev
*
pdev
)
{
struct
device
*
dev
=
&
pdev
->
dev
;
/* current configuration's attributes */
device_create_file
(
dev
,
&
dev_attr_vendor
);
device_create_file
(
dev
,
&
dev_attr_device
);
device_create_file
(
dev
,
&
dev_attr_subsystem_vendor
);
device_create_file
(
dev
,
&
dev_attr_subsystem_device
);
device_create_file
(
dev
,
&
dev_attr_class
);
device_create_file
(
dev
,
&
dev_attr_irq
);
device_create_file
(
dev
,
&
dev_attr_resource
);
if
(
pdev
->
cfg_size
<
4096
)
sysfs_create_bin_file
(
&
dev
->
kobj
,
&
pci_config_attr
);
sysfs_create_bin_file
(
&
pdev
->
dev
.
kobj
,
&
pci_config_attr
);
else
sysfs_create_bin_file
(
&
dev
->
kobj
,
&
pcie_config_attr
);
sysfs_create_bin_file
(
&
pdev
->
dev
.
kobj
,
&
pcie_config_attr
);
/* add platform-specific attributes */
pcibios_add_platform_entries
(
pdev
);
...
...
drivers/pci/pci.h
View file @
8d3c4ddb
...
...
@@ -62,3 +62,4 @@ extern int pci_visit_dev(struct pci_visit *fn,
extern
spinlock_t
pci_bus_lock
;
extern
int
pciehp_msi_quirk
;
extern
struct
device_attribute
pci_dev_attrs
[];
drivers/scsi/scsi_debug.c
View file @
8d3c4ddb
...
...
@@ -1326,7 +1326,7 @@ static ssize_t sdebug_delay_store(struct device_driver * ddp,
return
-
EINVAL
;
}
DRIVER_ATTR
(
delay
,
S_IRUGO
|
S_IWUSR
,
sdebug_delay_show
,
sdebug_delay_store
)
sdebug_delay_store
)
;
static
ssize_t
sdebug_opts_show
(
struct
device_driver
*
ddp
,
char
*
buf
)
{
...
...
@@ -1355,7 +1355,7 @@ static ssize_t sdebug_opts_store(struct device_driver * ddp,
return
count
;
}
DRIVER_ATTR
(
opts
,
S_IRUGO
|
S_IWUSR
,
sdebug_opts_show
,
sdebug_opts_store
)
sdebug_opts_store
)
;
static
ssize_t
sdebug_num_tgts_show
(
struct
device_driver
*
ddp
,
char
*
buf
)
{
...
...
@@ -1373,13 +1373,13 @@ static ssize_t sdebug_num_tgts_store(struct device_driver * ddp,
return
-
EINVAL
;
}
DRIVER_ATTR
(
num_tgts
,
S_IRUGO
|
S_IWUSR
,
sdebug_num_tgts_show
,
sdebug_num_tgts_store
)
sdebug_num_tgts_store
)
;
static
ssize_t
sdebug_dev_size_mb_show
(
struct
device_driver
*
ddp
,
char
*
buf
)
{
return
scnprintf
(
buf
,
PAGE_SIZE
,
"%d
\n
"
,
scsi_debug_dev_size_mb
);
}
DRIVER_ATTR
(
dev_size_mb
,
S_IRUGO
,
sdebug_dev_size_mb_show
,
NULL
)
DRIVER_ATTR
(
dev_size_mb
,
S_IRUGO
,
sdebug_dev_size_mb_show
,
NULL
)
;
static
ssize_t
sdebug_every_nth_show
(
struct
device_driver
*
ddp
,
char
*
buf
)
{
...
...
@@ -1398,7 +1398,7 @@ static ssize_t sdebug_every_nth_store(struct device_driver * ddp,
return
-
EINVAL
;
}
DRIVER_ATTR
(
every_nth
,
S_IRUGO
|
S_IWUSR
,
sdebug_every_nth_show
,
sdebug_every_nth_store
)
sdebug_every_nth_store
)
;
static
ssize_t
sdebug_max_luns_show
(
struct
device_driver
*
ddp
,
char
*
buf
)
{
...
...
@@ -1416,13 +1416,13 @@ static ssize_t sdebug_max_luns_store(struct device_driver * ddp,
return
-
EINVAL
;
}
DRIVER_ATTR
(
max_luns
,
S_IRUGO
|
S_IWUSR
,
sdebug_max_luns_show
,
sdebug_max_luns_store
)
sdebug_max_luns_store
)
;
static
ssize_t
sdebug_scsi_level_show
(
struct
device_driver
*
ddp
,
char
*
buf
)
{
return
scnprintf
(
buf
,
PAGE_SIZE
,
"%d
\n
"
,
scsi_debug_scsi_level
);
}
DRIVER_ATTR
(
scsi_level
,
S_IRUGO
,
sdebug_scsi_level_show
,
NULL
)
DRIVER_ATTR
(
scsi_level
,
S_IRUGO
,
sdebug_scsi_level_show
,
NULL
)
;
static
ssize_t
sdebug_add_host_show
(
struct
device_driver
*
ddp
,
char
*
buf
)
{
...
...
@@ -1459,7 +1459,7 @@ static ssize_t sdebug_add_host_store(struct device_driver * ddp,
return
count
;
}
DRIVER_ATTR
(
add_host
,
S_IRUGO
|
S_IWUSR
,
sdebug_add_host_show
,
sdebug_add_host_store
)
sdebug_add_host_store
)
;
static
void
do_create_driverfs_files
(
void
)
{
...
...
drivers/scsi/scsi_sysfs.c
View file @
8d3c4ddb
...
...
@@ -99,7 +99,7 @@ show_##name (struct class_device *class_dev, char *buf) \
*/
#define shost_rd_attr2(name, field, format_string) \
shost_show_function(name, field, format_string) \
static CLASS_DEVICE_ATTR(name, S_IRUGO, show_##name, NULL)
static CLASS_DEVICE_ATTR(name, S_IRUGO, show_##name, NULL)
;
#define shost_rd_attr(field, format_string) \
shost_rd_attr2(field, field, format_string)
...
...
@@ -228,8 +228,8 @@ sdev_show_##field (struct device *dev, char *buf) \
* read only field.
*/
#define sdev_rd_attr(field, format_string) \
sdev_show_function(field, format_string)
\
static DEVICE_ATTR(field, S_IRUGO, sdev_show_##field, NULL)
sdev_show_function(field, format_string) \
static DEVICE_ATTR(field, S_IRUGO, sdev_show_##field, NULL)
;
/*
...
...
@@ -247,7 +247,7 @@ sdev_store_##field (struct device *dev, const char *buf, size_t count) \
snscanf (buf, 20, format_string, &sdev->field); \
return count; \
} \
static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field)
static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field)
;
/* Currently we don't export bit fields, but we might in future,
* so leave this code in */
...
...
@@ -272,7 +272,7 @@ sdev_store_##field (struct device *dev, const char *buf, size_t count) \
} \
return ret; \
} \
static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field)
static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field)
;
/*
* scsi_sdev_check_buf_bit: return 0 if buf is "0", return 1 if buf is "1",
...
...
@@ -320,7 +320,7 @@ sdev_store_timeout (struct device *dev, const char *buf, size_t count)
sdev
->
timeout
=
timeout
*
HZ
;
return
count
;
}
static
DEVICE_ATTR
(
timeout
,
S_IRUGO
|
S_IWUSR
,
sdev_show_timeout
,
sdev_store_timeout
)
static
DEVICE_ATTR
(
timeout
,
S_IRUGO
|
S_IWUSR
,
sdev_show_timeout
,
sdev_store_timeout
)
;
static
ssize_t
store_rescan_field
(
struct
device
*
dev
,
const
char
*
buf
,
size_t
count
)
...
...
@@ -328,7 +328,7 @@ store_rescan_field (struct device *dev, const char *buf, size_t count)
scsi_rescan_device
(
dev
);
return
count
;
}
static
DEVICE_ATTR
(
rescan
,
S_IWUSR
,
NULL
,
store_rescan_field
)
static
DEVICE_ATTR
(
rescan
,
S_IWUSR
,
NULL
,
store_rescan_field
)
;
static
ssize_t
sdev_store_delete
(
struct
device
*
dev
,
const
char
*
buf
,
size_t
count
)
...
...
drivers/scsi/scsi_transport_spi.c
View file @
8d3c4ddb
...
...
@@ -152,7 +152,7 @@ store_spi_transport_##field(struct class_device *cdev, const char *buf, \
spi_transport_store_function(field, format_string) \
static CLASS_DEVICE_ATTR(field, S_IRUGO | S_IWUSR, \
show_spi_transport_##field, \
store_spi_transport_##field)
store_spi_transport_##field)
;
/* The Parallel SCSI Tranport Attributes: */
spi_transport_rd_attr
(
offset
,
"%d
\n
"
);
...
...
@@ -173,7 +173,7 @@ store_spi_revalidate(struct class_device *cdev, const char *buf, size_t count)
spi_dv_device
(
sdev
);
return
count
;
}
static
CLASS_DEVICE_ATTR
(
revalidate
,
S_IWUSR
,
NULL
,
store_spi_revalidate
)
static
CLASS_DEVICE_ATTR
(
revalidate
,
S_IWUSR
,
NULL
,
store_spi_revalidate
)
;
/* Translate the period into ns according to the current spec
* for SDTR/PPR messages */
...
...
include/linux/device.h
View file @
8d3c4ddb
...
...
@@ -54,6 +54,9 @@ struct bus_type {
struct
kset
drivers
;
struct
kset
devices
;
struct
bus_attribute
*
bus_attrs
;
struct
device_attribute
*
dev_attrs
;
int
(
*
match
)(
struct
device
*
dev
,
struct
device_driver
*
drv
);
struct
device
*
(
*
add
)
(
struct
device
*
parent
,
char
*
bus_id
);
int
(
*
hotplug
)
(
struct
device
*
dev
,
char
**
envp
,
...
...
@@ -90,11 +93,7 @@ struct bus_attribute {
};
#define BUS_ATTR(_name,_mode,_show,_store) \
struct bus_attribute bus_attr_##_name = { \
.attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \
.show = _show, \
.store = _store, \
};
struct bus_attribute bus_attr_##_name = __ATTR(_name,_mode,_show,_store)
extern
int
bus_create_file
(
struct
bus_type
*
,
struct
bus_attribute
*
);
extern
void
bus_remove_file
(
struct
bus_type
*
,
struct
bus_attribute
*
);
...
...
@@ -131,11 +130,7 @@ struct driver_attribute {
};
#define DRIVER_ATTR(_name,_mode,_show,_store) \
struct driver_attribute driver_attr_##_name = { \
.attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \
.show = _show, \
.store = _store, \
};
struct driver_attribute driver_attr_##_name = __ATTR(_name,_mode,_show,_store)
extern
int
driver_create_file
(
struct
device_driver
*
,
struct
driver_attribute
*
);
extern
void
driver_remove_file
(
struct
device_driver
*
,
struct
driver_attribute
*
);
...
...
@@ -151,6 +146,9 @@ struct class {
struct
list_head
children
;
struct
list_head
interfaces
;
struct
class_attribute
*
class_attrs
;
struct
class_device_attribute
*
class_dev_attrs
;
int
(
*
hotplug
)(
struct
class_device
*
dev
,
char
**
envp
,
int
num_envp
,
char
*
buffer
,
int
buffer_size
);
...
...
@@ -172,11 +170,7 @@ struct class_attribute {
};
#define CLASS_ATTR(_name,_mode,_show,_store) \
struct class_attribute class_attr_##_name = { \
.attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \
.show = _show, \
.store = _store, \
};
struct class_attribute class_attr_##_name = __ATTR(_name,_mode,_show,_store)
extern
int
class_create_file
(
struct
class
*
,
const
struct
class_attribute
*
);
extern
void
class_remove_file
(
struct
class
*
,
const
struct
class_attribute
*
);
...
...
@@ -224,11 +218,8 @@ struct class_device_attribute {
};
#define CLASS_DEVICE_ATTR(_name,_mode,_show,_store) \
struct class_device_attribute class_device_attr_##_name = { \
.attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \
.show = _show, \
.store = _store, \
};
struct class_device_attribute class_device_attr_##_name = \
__ATTR(_name,_mode,_show,_store)
extern
int
class_device_create_file
(
struct
class_device
*
,
const
struct
class_device_attribute
*
);
...
...
@@ -342,11 +333,7 @@ struct device_attribute {
};
#define DEVICE_ATTR(_name,_mode,_show,_store) \
struct device_attribute dev_attr_##_name = { \
.attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \
.show = _show, \
.store = _store, \
};
struct device_attribute dev_attr_##_name = __ATTR(_name,_mode,_show,_store)
extern
int
device_create_file
(
struct
device
*
device
,
struct
device_attribute
*
entry
);
...
...
@@ -390,6 +377,11 @@ extern void platform_device_unregister(struct platform_device *);
extern
struct
bus_type
platform_bus_type
;
extern
struct
device
platform_bus
;
extern
struct
resource
*
platform_get_resource
(
struct
platform_device
*
,
unsigned
int
,
unsigned
int
);
extern
int
platform_get_irq
(
struct
platform_device
*
,
unsigned
int
);
extern
int
platform_add_device
(
struct
platform_device
*
);
extern
int
platform_add_devices
(
struct
platform_device
**
,
int
);
/* drivers/base/power.c */
extern
void
device_shutdown
(
void
);
...
...
include/linux/module.h
View file @
8d3c4ddb
...
...
@@ -225,6 +225,22 @@ struct module_kobject
struct
module_attribute
attr
[
0
];
};
/* Similar stuff for section attributes. */
#define MODULE_SECT_NAME_LEN 32
struct
module_sect_attr
{
struct
attribute
attr
;
char
name
[
MODULE_SECT_NAME_LEN
];
unsigned
long
address
;
};
struct
module_sections
{
struct
kobject
kobj
;
struct
module_sect_attr
attrs
[
0
];
};
struct
module
{
enum
module_state
state
;
...
...
@@ -298,6 +314,9 @@ struct module
Elf_Sym
*
symtab
;
unsigned
long
num_symtab
;
char
*
strtab
;
/* Section attributes */
struct
module_sections
*
sect_attrs
;
#endif
/* Per-cpu data. */
...
...
include/linux/sysfs.h
View file @
8d3c4ddb
...
...
@@ -24,6 +24,27 @@ struct attribute_group {
};
/**
* Use these macros to make defining attributes easier. See include/linux/device.h
* for examples..
*/
#define __ATTR(_name,_mode,_show,_store) { \
.attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \
.show = _show, \
.store = _store, \
}
#define __ATTR_RO(_name) { \
.attr = { .name = __stringify(_name), .mode = 0444, .owner = THIS_MODULE }, \
.show = _name##_show, \
}
#define __ATTR_NULL { .attr = { .name = NULL } }
#define attr_name(_attr) (_attr).attr.name
struct
bin_attribute
{
struct
attribute
attr
;
size_t
size
;
...
...
kernel/module.c
View file @
8d3c4ddb
...
...
@@ -981,6 +981,104 @@ static unsigned long resolve_symbol(Elf_Shdr *sechdrs,
return
ret
;
}
/*
* /sys/module/foo/sections stuff
* J. Corbet <corbet@lwn.net>
*/
#ifdef CONFIG_KALLSYMS
static
void
module_sect_attrs_release
(
struct
kobject
*
kobj
)
{
kfree
(
container_of
(
kobj
,
struct
module_sections
,
kobj
));
}
static
ssize_t
module_sect_show
(
struct
kobject
*
kobj
,
struct
attribute
*
attr
,
char
*
buf
)
{
struct
module_sect_attr
*
sattr
=
container_of
(
attr
,
struct
module_sect_attr
,
attr
);
return
sprintf
(
buf
,
"0x%lx
\n
"
,
sattr
->
address
);
}
static
struct
sysfs_ops
module_sect_ops
=
{
.
show
=
module_sect_show
,
};
static
struct
kobj_type
module_sect_ktype
=
{
.
sysfs_ops
=
&
module_sect_ops
,
.
release
=
module_sect_attrs_release
,
};
static
void
add_sect_attrs
(
struct
module
*
mod
,
unsigned
int
nsect
,
char
*
secstrings
,
Elf_Shdr
*
sechdrs
)
{
unsigned
int
nloaded
=
0
,
i
;
struct
module_sect_attr
*
sattr
;
if
(
!
mod
->
mkobj
)
return
;
/* Count loaded sections and allocate structures */
for
(
i
=
0
;
i
<
nsect
;
i
++
)
if
(
sechdrs
[
i
].
sh_flags
&
SHF_ALLOC
)
nloaded
++
;
mod
->
sect_attrs
=
kmalloc
(
sizeof
(
struct
module_sections
)
+
nloaded
*
sizeof
(
mod
->
sect_attrs
->
attrs
[
0
]),
GFP_KERNEL
);
if
(
!
mod
->
sect_attrs
)
return
;
/* sections entry setup */
memset
(
mod
->
sect_attrs
,
0
,
sizeof
(
struct
module_sections
));
if
(
kobject_set_name
(
&
mod
->
sect_attrs
->
kobj
,
"sections"
))
goto
out
;
mod
->
sect_attrs
->
kobj
.
parent
=
&
mod
->
mkobj
->
kobj
;
mod
->
sect_attrs
->
kobj
.
ktype
=
&
module_sect_ktype
;
if
(
kobject_register
(
&
mod
->
sect_attrs
->
kobj
))
goto
out
;
/* And the section attributes. */
sattr
=
&
mod
->
sect_attrs
->
attrs
[
0
];
for
(
i
=
0
;
i
<
nsect
;
i
++
)
{
if
(
!
(
sechdrs
[
i
].
sh_flags
&
SHF_ALLOC
))
continue
;
sattr
->
address
=
sechdrs
[
i
].
sh_addr
;
strlcpy
(
sattr
->
name
,
secstrings
+
sechdrs
[
i
].
sh_name
,
MODULE_SECT_NAME_LEN
);
sattr
->
attr
.
name
=
sattr
->
name
;
sattr
->
attr
.
owner
=
mod
;
sattr
->
attr
.
mode
=
S_IRUGO
;
(
void
)
sysfs_create_file
(
&
mod
->
sect_attrs
->
kobj
,
&
sattr
->
attr
);
sattr
++
;
}
return
;
out:
kfree
(
mod
->
sect_attrs
);
mod
->
sect_attrs
=
NULL
;
}
static
void
remove_sect_attrs
(
struct
module
*
mod
)
{
if
(
mod
->
sect_attrs
)
{
kobject_unregister
(
&
mod
->
sect_attrs
->
kobj
);
mod
->
sect_attrs
=
NULL
;
}
}
#else
static
inline
void
add_sect_attrs
(
struct
module
*
mod
,
unsigned
int
nsect
,
char
*
sectstrings
,
Elf_Shdr
*
sechdrs
)
{
}
static
inline
void
remove_sect_attrs
(
struct
module
*
mod
)
{
}
#endif
/* CONFIG_KALLSYMS */
#define to_module_attr(n) container_of(n, struct module_attribute, attr);
static
ssize_t
module_attr_show
(
struct
kobject
*
kobj
,
...
...
@@ -1099,6 +1197,7 @@ static void free_module(struct module *mod)
list_del
(
&
mod
->
list
);
spin_unlock_irq
(
&
modlist_lock
);
remove_sect_attrs
(
mod
);
mod_kobject_remove
(
mod
);
/* Arch-specific cleanup. */
...
...
@@ -1712,6 +1811,7 @@ static struct module *load_module(void __user *umod,
/
sizeof
(
struct
kernel_param
));
if
(
err
<
0
)
goto
arch_cleanup
;
add_sect_attrs
(
mod
,
hdr
->
e_shnum
,
secstrings
,
sechdrs
);
/* Get rid of temporary copy */
vfree
(
hdr
);
...
...
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