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
40f2663d
Commit
40f2663d
authored
Sep 30, 2002
by
Greg Kroah-Hartman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
USB: add a lot more driverfs files for all usb devices.
parent
c422d217
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
186 additions
and
101 deletions
+186
-101
drivers/usb/core/Makefile
drivers/usb/core/Makefile
+1
-1
drivers/usb/core/driverfs.c
drivers/usb/core/driverfs.c
+177
-0
drivers/usb/core/usb.c
drivers/usb/core/usb.c
+3
-100
drivers/usb/core/usb.h
drivers/usb/core/usb.h
+5
-0
No files found.
drivers/usb/core/Makefile
View file @
40f2663d
...
...
@@ -5,7 +5,7 @@
export-objs
:=
usb.o hcd.o hcd-pci.o urb.o message.o file.o buffer.o
usbcore-objs
:=
usb.o usb-debug.o hub.o hcd.o urb.o message.o
\
config.o file.o buffer.o
config.o file.o buffer.o
driverfs.o
ifeq
($(CONFIG_PCI),y)
usbcore-objs
+=
hcd-pci.o
...
...
drivers/usb/core/driverfs.c
0 → 100644
View file @
40f2663d
/*
* drivers/usb/core/driverfs.c
*
* (C) Copyright 2002 David Brownell
* (C) Copyright 2002 Greg Kroah-Hartman
* (C) Copyright 2002 IBM Corp.
*
* All of the driverfs file attributes for usb devices and interfaces.
*
*/
#include <linux/config.h>
#include <linux/kernel.h>
#ifdef CONFIG_USB_DEBUG
#define DEBUG
#else
#undef DEBUG
#endif
#include <linux/usb.h>
#include "usb.h"
/* Active configuration fields */
#define usb_actconfig_attr(field, format_string) \
static ssize_t \
show_##field (struct device *dev, char *buf, size_t count, loff_t off) \
{ \
struct usb_device *udev; \
\
if (off) \
return 0; \
\
udev = to_usb_device (dev); \
return sprintf (buf, format_string, udev->actconfig->field); \
} \
static DEVICE_ATTR(field, S_IRUGO, show_##field, NULL);
usb_actconfig_attr
(
bNumInterfaces
,
"%2d
\n
"
)
usb_actconfig_attr
(
bConfigurationValue
,
"%2d
\n
"
)
usb_actconfig_attr
(
bmAttributes
,
"%2x
\n
"
)
usb_actconfig_attr
(
MaxPower
,
"%3dmA
\n
"
)
/* String fields */
static
ssize_t
show_product
(
struct
device
*
dev
,
char
*
buf
,
size_t
count
,
loff_t
off
)
{
struct
usb_device
*
udev
;
int
len
;
if
(
off
)
return
0
;
udev
=
to_usb_device
(
dev
);
len
=
usb_string
(
udev
,
udev
->
descriptor
.
iProduct
,
buf
,
PAGE_SIZE
);
if
(
len
<
0
)
return
0
;
buf
[
len
]
=
'\n'
;
buf
[
len
+
1
]
=
0
;
return
len
+
1
;
}
static
DEVICE_ATTR
(
product
,
S_IRUGO
,
show_product
,
NULL
);
static
ssize_t
show_manufacturer
(
struct
device
*
dev
,
char
*
buf
,
size_t
count
,
loff_t
off
)
{
struct
usb_device
*
udev
;
int
len
;
if
(
off
)
return
0
;
udev
=
to_usb_device
(
dev
);
len
=
usb_string
(
udev
,
udev
->
descriptor
.
iManufacturer
,
buf
,
PAGE_SIZE
);
if
(
len
<
0
)
return
0
;
buf
[
len
]
=
'\n'
;
buf
[
len
+
1
]
=
0
;
return
len
+
1
;
}
static
DEVICE_ATTR
(
manufacturer
,
S_IRUGO
,
show_manufacturer
,
NULL
);
static
ssize_t
show_serial
(
struct
device
*
dev
,
char
*
buf
,
size_t
count
,
loff_t
off
)
{
struct
usb_device
*
udev
;
int
len
;
if
(
off
)
return
0
;
udev
=
to_usb_device
(
dev
);
len
=
usb_string
(
udev
,
udev
->
descriptor
.
iSerialNumber
,
buf
,
PAGE_SIZE
);
if
(
len
<
0
)
return
0
;
buf
[
len
]
=
'\n'
;
buf
[
len
+
1
]
=
0
;
return
len
+
1
;
}
static
DEVICE_ATTR
(
serial
,
S_IRUGO
,
show_serial
,
NULL
);
/* Descriptor fields */
#define usb_descriptor_attr(field, format_string) \
static ssize_t \
show_##field (struct device *dev, char *buf, size_t count, loff_t off) \
{ \
struct usb_device *udev; \
\
if (off) \
return 0; \
\
udev = to_usb_device (dev); \
return sprintf (buf, format_string, udev->descriptor.field); \
} \
static DEVICE_ATTR(field, S_IRUGO, show_##field, NULL);
usb_descriptor_attr
(
idVendor
,
"%04x
\n
"
)
usb_descriptor_attr
(
idProduct
,
"%04x
\n
"
)
usb_descriptor_attr
(
bcdDevice
,
"%04x
\n
"
)
usb_descriptor_attr
(
bDeviceClass
,
"%02x
\n
"
)
usb_descriptor_attr
(
bDeviceSubClass
,
"%02x
\n
"
)
usb_descriptor_attr
(
bDeviceProtocol
,
"%02x
\n
"
)
void
usb_create_driverfs_dev_files
(
struct
usb_device
*
udev
)
{
struct
device
*
dev
=
&
udev
->
dev
;
device_create_file
(
dev
,
&
dev_attr_bNumInterfaces
);
device_create_file
(
dev
,
&
dev_attr_bConfigurationValue
);
device_create_file
(
dev
,
&
dev_attr_bmAttributes
);
device_create_file
(
dev
,
&
dev_attr_MaxPower
);
device_create_file
(
dev
,
&
dev_attr_idVendor
);
device_create_file
(
dev
,
&
dev_attr_idProduct
);
device_create_file
(
dev
,
&
dev_attr_bcdDevice
);
device_create_file
(
dev
,
&
dev_attr_bDeviceClass
);
device_create_file
(
dev
,
&
dev_attr_bDeviceSubClass
);
device_create_file
(
dev
,
&
dev_attr_bDeviceProtocol
);
if
(
udev
->
descriptor
.
iManufacturer
)
device_create_file
(
dev
,
&
dev_attr_manufacturer
);
if
(
udev
->
descriptor
.
iProduct
)
device_create_file
(
dev
,
&
dev_attr_product
);
if
(
udev
->
descriptor
.
iSerialNumber
)
device_create_file
(
dev
,
&
dev_attr_serial
);
}
/* Interface fields */
#define usb_intf_attr(field, format_string) \
static ssize_t \
show_##field (struct device *dev, char *buf, size_t count, loff_t off) \
{ \
struct usb_interface *intf; \
int alt; \
\
if (off) \
return 0; \
\
intf = to_usb_interface (dev); \
alt = intf->act_altsetting; \
\
return sprintf (buf, format_string, intf->altsetting[alt].field); \
} \
static DEVICE_ATTR(field, S_IRUGO, show_##field, NULL);
usb_intf_attr
(
bAlternateSetting
,
"%2d
\n
"
)
usb_intf_attr
(
bInterfaceClass
,
"%02x
\n
"
)
usb_intf_attr
(
bInterfaceSubClass
,
"%02x
\n
"
)
usb_intf_attr
(
bInterfaceProtocol
,
"%02x
\n
"
)
void
usb_create_driverfs_intf_files
(
struct
usb_interface
*
intf
)
{
device_create_file
(
&
intf
->
dev
,
&
dev_attr_bAlternateSetting
);
device_create_file
(
&
intf
->
dev
,
&
dev_attr_bInterfaceClass
);
device_create_file
(
&
intf
->
dev
,
&
dev_attr_bInterfaceSubClass
);
device_create_file
(
&
intf
->
dev
,
&
dev_attr_bInterfaceProtocol
);
}
drivers/usb/core/usb.c
View file @
40f2663d
...
...
@@ -42,6 +42,7 @@
#include <linux/usb.h>
#include "hcd.h"
#include "usb.h"
extern
int
usb_hub_init
(
void
);
extern
void
usb_hub_cleanup
(
void
);
...
...
@@ -629,98 +630,6 @@ static int usb_hotplug (struct device *dev, char **envp,
#endif
/* CONFIG_HOTPLUG */
/* driverfs files */
/* devices have one current configuration, with one
* or more interfaces that are used concurrently
*/
static
ssize_t
show_config
(
struct
device
*
dev
,
char
*
buf
,
size_t
count
,
loff_t
off
)
{
struct
usb_device
*
udev
;
if
(
off
)
return
0
;
udev
=
to_usb_device
(
dev
);
return
sprintf
(
buf
,
"%u
\n
"
,
udev
->
actconfig
->
bConfigurationValue
);
}
static
DEVICE_ATTR
(
configuration
,
S_IRUGO
,
show_config
,
NULL
);
/* interfaces have one current setting; alternates
* can have different endpoints and class info.
*/
static
ssize_t
show_altsetting
(
struct
device
*
dev
,
char
*
buf
,
size_t
count
,
loff_t
off
)
{
struct
usb_interface
*
interface
;
if
(
off
)
return
0
;
interface
=
to_usb_interface
(
dev
);
return
sprintf
(
buf
,
"%u
\n
"
,
interface
->
altsetting
->
bAlternateSetting
);
}
static
DEVICE_ATTR
(
altsetting
,
S_IRUGO
,
show_altsetting
,
NULL
);
/* product driverfs file */
static
ssize_t
show_product
(
struct
device
*
dev
,
char
*
buf
,
size_t
count
,
loff_t
off
)
{
struct
usb_device
*
udev
;
int
len
;
if
(
off
)
return
0
;
udev
=
to_usb_device
(
dev
);
len
=
usb_string
(
udev
,
udev
->
descriptor
.
iProduct
,
buf
,
PAGE_SIZE
);
if
(
len
<
0
)
return
0
;
buf
[
len
]
=
'\n'
;
buf
[
len
+
1
]
=
0
;
return
len
+
1
;
}
static
DEVICE_ATTR
(
product
,
S_IRUGO
,
show_product
,
NULL
);
/* manufacturer driverfs file */
static
ssize_t
show_manufacturer
(
struct
device
*
dev
,
char
*
buf
,
size_t
count
,
loff_t
off
)
{
struct
usb_device
*
udev
;
int
len
;
if
(
off
)
return
0
;
udev
=
to_usb_device
(
dev
);
len
=
usb_string
(
udev
,
udev
->
descriptor
.
iManufacturer
,
buf
,
PAGE_SIZE
);
if
(
len
<
0
)
return
0
;
buf
[
len
]
=
'\n'
;
buf
[
len
+
1
]
=
0
;
return
len
+
1
;
}
static
DEVICE_ATTR
(
manufacturer
,
S_IRUGO
,
show_manufacturer
,
NULL
);
/* serial number driverfs file */
static
ssize_t
show_serial
(
struct
device
*
dev
,
char
*
buf
,
size_t
count
,
loff_t
off
)
{
struct
usb_device
*
udev
;
int
len
;
if
(
off
)
return
0
;
udev
=
to_usb_device
(
dev
);
len
=
usb_string
(
udev
,
udev
->
descriptor
.
iSerialNumber
,
buf
,
PAGE_SIZE
);
if
(
len
<
0
)
return
0
;
buf
[
len
]
=
'\n'
;
buf
[
len
+
1
]
=
0
;
return
len
+
1
;
}
static
DEVICE_ATTR
(
serial
,
S_IRUGO
,
show_serial
,
NULL
);
/**
* usb_alloc_dev - allocate a usb device structure (usbcore-internal)
* @parent: hub to which device is connected
...
...
@@ -1133,13 +1042,7 @@ int usb_new_device(struct usb_device *dev, struct device *parent)
return
err
;
/* add the USB device specific driverfs files */
device_create_file
(
&
dev
->
dev
,
&
dev_attr_configuration
);
if
(
dev
->
descriptor
.
iManufacturer
)
device_create_file
(
&
dev
->
dev
,
&
dev_attr_manufacturer
);
if
(
dev
->
descriptor
.
iProduct
)
device_create_file
(
&
dev
->
dev
,
&
dev_attr_product
);
if
(
dev
->
descriptor
.
iSerialNumber
)
device_create_file
(
&
dev
->
dev
,
&
dev_attr_serial
);
usb_create_driverfs_dev_files
(
dev
);
/* Register all of the interfaces for this device with the driver core.
* Remember, interfaces get bound to drivers, not devices. */
...
...
@@ -1169,7 +1072,7 @@ int usb_new_device(struct usb_device *dev, struct device *parent)
}
dbg
(
"%s - registering %s"
,
__FUNCTION__
,
interface
->
dev
.
bus_id
);
device_register
(
&
interface
->
dev
);
device_create_file
(
&
interface
->
dev
,
&
dev_attr_altsetting
);
usb_create_driverfs_intf_files
(
interface
);
}
/* add a /proc/bus/usb entry */
...
...
drivers/usb/core/usb.h
0 → 100644
View file @
40f2663d
/* Functions local to drivers/usb/core/ */
extern
void
usb_create_driverfs_dev_files
(
struct
usb_device
*
dev
);
extern
void
usb_create_driverfs_intf_files
(
struct
usb_interface
*
intf
);
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