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
06340efb
Commit
06340efb
authored
Sep 01, 2014
by
Greg Kroah-Hartman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
greybus: split sysfs functions out to separate file.
parent
e24e7257
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
169 additions
and
147 deletions
+169
-147
drivers/staging/greybus/Makefile
drivers/staging/greybus/Makefile
+1
-0
drivers/staging/greybus/core.c
drivers/staging/greybus/core.c
+0
-147
drivers/staging/greybus/greybus.h
drivers/staging/greybus/greybus.h
+2
-0
drivers/staging/greybus/sysfs.c
drivers/staging/greybus/sysfs.c
+166
-0
No files found.
drivers/staging/greybus/Makefile
View file @
06340efb
greybus-y
:=
core.o
\
greybus-y
:=
core.o
\
gbuf.o
\
gbuf.o
\
sysfs.o
\
debugfs.o
\
debugfs.o
\
ap.o
\
ap.o
\
i2c-gb.o
\
i2c-gb.o
\
...
...
drivers/staging/greybus/core.c
View file @
06340efb
...
@@ -190,153 +190,6 @@ static struct device_type greybus_module_type = {
...
@@ -190,153 +190,6 @@ static struct device_type greybus_module_type = {
.
release
=
greybus_module_release
,
.
release
=
greybus_module_release
,
};
};
/* Function fields */
#define greybus_function_attr(field) \
static ssize_t function_##field##_show(struct device *dev, \
struct device_attribute *attr, \
char *buf) \
{ \
struct greybus_device *gdev = to_greybus_device(dev); \
return sprintf(buf, "%d\n", gdev->function.field); \
} \
static DEVICE_ATTR_RO(function_##field)
greybus_function_attr
(
number
);
greybus_function_attr
(
cport
);
greybus_function_attr
(
class
);
greybus_function_attr
(
subclass
);
greybus_function_attr
(
protocol
);
static
struct
attribute
*
function_attrs
[]
=
{
&
dev_attr_function_number
.
attr
,
&
dev_attr_function_cport
.
attr
,
&
dev_attr_function_class
.
attr
,
&
dev_attr_function_subclass
.
attr
,
&
dev_attr_function_protocol
.
attr
,
NULL
,
};
static
umode_t
function_attrs_are_visible
(
struct
kobject
*
kobj
,
struct
attribute
*
a
,
int
n
)
{
struct
greybus_device
*
gdev
=
to_greybus_device
(
kobj_to_dev
(
kobj
));
// FIXME - make this a dynamic structure to "know" if it really is here
// or not easier?
if
(
gdev
->
function
.
number
||
gdev
->
function
.
cport
||
gdev
->
function
.
class
||
gdev
->
function
.
subclass
||
gdev
->
function
.
protocol
)
return
a
->
mode
;
return
0
;
}
static
struct
attribute_group
function_attr_grp
=
{
.
attrs
=
function_attrs
,
.
is_visible
=
function_attrs_are_visible
,
};
/* Module fields */
#define greybus_module_attr(field) \
static ssize_t module_##field##_show(struct device *dev, \
struct device_attribute *attr, \
char *buf) \
{ \
struct greybus_device *gdev = to_greybus_device(dev); \
return sprintf(buf, "%x\n", gdev->module_id.field); \
} \
static DEVICE_ATTR_RO(module_##field)
greybus_module_attr
(
vendor
);
greybus_module_attr
(
product
);
greybus_module_attr
(
version
);
static
ssize_t
module_vendor_string_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
struct
greybus_device
*
gdev
=
to_greybus_device
(
dev
);
return
sprintf
(
buf
,
"%s"
,
greybus_string
(
gdev
,
gdev
->
module_id
.
vendor_stringid
));
}
static
DEVICE_ATTR_RO
(
module_vendor_string
);
static
ssize_t
module_product_string_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
struct
greybus_device
*
gdev
=
to_greybus_device
(
dev
);
return
sprintf
(
buf
,
"%s"
,
greybus_string
(
gdev
,
gdev
->
module_id
.
product_stringid
));
}
static
DEVICE_ATTR_RO
(
module_product_string
);
static
struct
attribute
*
module_attrs
[]
=
{
&
dev_attr_module_vendor
.
attr
,
&
dev_attr_module_product
.
attr
,
&
dev_attr_module_version
.
attr
,
&
dev_attr_module_vendor_string
.
attr
,
&
dev_attr_module_product_string
.
attr
,
NULL
,
};
static
umode_t
module_attrs_are_visible
(
struct
kobject
*
kobj
,
struct
attribute
*
a
,
int
n
)
{
struct
greybus_device
*
gdev
=
to_greybus_device
(
kobj_to_dev
(
kobj
));
if
((
a
==
&
dev_attr_module_vendor_string
.
attr
)
&&
(
gdev
->
module_id
.
vendor_stringid
))
return
a
->
mode
;
if
((
a
==
&
dev_attr_module_product_string
.
attr
)
&&
(
gdev
->
module_id
.
product_stringid
))
return
a
->
mode
;
// FIXME - make this a dynamic structure to "know" if it really is here
// or not easier?
if
(
gdev
->
module_id
.
vendor
||
gdev
->
module_id
.
product
||
gdev
->
module_id
.
version
)
return
a
->
mode
;
return
0
;
}
static
struct
attribute_group
module_attr_grp
=
{
.
attrs
=
module_attrs
,
.
is_visible
=
module_attrs_are_visible
,
};
/* Serial Number */
static
ssize_t
serial_number_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
struct
greybus_device
*
gdev
=
to_greybus_device
(
dev
);
return
sprintf
(
buf
,
"%llX
\n
"
,
(
unsigned
long
long
)
gdev
->
serial_number
.
serial_number
);
}
static
DEVICE_ATTR_RO
(
serial_number
);
static
struct
attribute
*
serial_number_attrs
[]
=
{
&
dev_attr_serial_number
.
attr
,
NULL
,
};
static
struct
attribute_group
serial_number_attr_grp
=
{
.
attrs
=
serial_number_attrs
,
.
is_visible
=
function_attrs_are_visible
,
};
static
const
struct
attribute_group
*
greybus_module_groups
[]
=
{
&
function_attr_grp
,
&
module_attr_grp
,
&
serial_number_attr_grp
,
NULL
,
};
static
int
gb_init_subdevs
(
struct
greybus_device
*
gdev
,
static
int
gb_init_subdevs
(
struct
greybus_device
*
gdev
,
const
struct
greybus_module_id
*
id
)
const
struct
greybus_module_id
*
id
)
{
{
...
...
drivers/staging/greybus/greybus.h
View file @
06340efb
...
@@ -188,6 +188,8 @@ void gb_thread_destroy(void);
...
@@ -188,6 +188,8 @@ void gb_thread_destroy(void);
int
gb_debugfs_init
(
void
);
int
gb_debugfs_init
(
void
);
void
gb_debugfs_cleanup
(
void
);
void
gb_debugfs_cleanup
(
void
);
extern
const
struct
attribute_group
*
greybus_module_groups
[];
/*
/*
* Because we are allocating a data structure per "type" in the greybus device,
* Because we are allocating a data structure per "type" in the greybus device,
* we have static functions for this, not "dynamic" drivers like we really
* we have static functions for this, not "dynamic" drivers like we really
...
...
drivers/staging/greybus/sysfs.c
0 → 100644
View file @
06340efb
/*
* Greybus sysfs file functions
*
* Copyright 2014 Google Inc.
*
* Released under the GPLv2 only.
*/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/types.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/kthread.h>
#include <linux/device.h>
#include "greybus.h"
/* Function fields */
#define greybus_function_attr(field) \
static ssize_t function_##field##_show(struct device *dev, \
struct device_attribute *attr, \
char *buf) \
{ \
struct greybus_device *gdev = to_greybus_device(dev); \
return sprintf(buf, "%d\n", gdev->function.field); \
} \
static DEVICE_ATTR_RO(function_##field)
greybus_function_attr
(
number
);
greybus_function_attr
(
cport
);
greybus_function_attr
(
class
);
greybus_function_attr
(
subclass
);
greybus_function_attr
(
protocol
);
static
struct
attribute
*
function_attrs
[]
=
{
&
dev_attr_function_number
.
attr
,
&
dev_attr_function_cport
.
attr
,
&
dev_attr_function_class
.
attr
,
&
dev_attr_function_subclass
.
attr
,
&
dev_attr_function_protocol
.
attr
,
NULL
,
};
static
umode_t
function_attrs_are_visible
(
struct
kobject
*
kobj
,
struct
attribute
*
a
,
int
n
)
{
struct
greybus_device
*
gdev
=
to_greybus_device
(
kobj_to_dev
(
kobj
));
// FIXME - make this a dynamic structure to "know" if it really is here
// or not easier?
if
(
gdev
->
function
.
number
||
gdev
->
function
.
cport
||
gdev
->
function
.
class
||
gdev
->
function
.
subclass
||
gdev
->
function
.
protocol
)
return
a
->
mode
;
return
0
;
}
static
struct
attribute_group
function_attr_grp
=
{
.
attrs
=
function_attrs
,
.
is_visible
=
function_attrs_are_visible
,
};
/* Module fields */
#define greybus_module_attr(field) \
static ssize_t module_##field##_show(struct device *dev, \
struct device_attribute *attr, \
char *buf) \
{ \
struct greybus_device *gdev = to_greybus_device(dev); \
return sprintf(buf, "%x\n", gdev->module_id.field); \
} \
static DEVICE_ATTR_RO(module_##field)
greybus_module_attr
(
vendor
);
greybus_module_attr
(
product
);
greybus_module_attr
(
version
);
static
ssize_t
module_vendor_string_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
struct
greybus_device
*
gdev
=
to_greybus_device
(
dev
);
return
sprintf
(
buf
,
"%s"
,
greybus_string
(
gdev
,
gdev
->
module_id
.
vendor_stringid
));
}
static
DEVICE_ATTR_RO
(
module_vendor_string
);
static
ssize_t
module_product_string_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
struct
greybus_device
*
gdev
=
to_greybus_device
(
dev
);
return
sprintf
(
buf
,
"%s"
,
greybus_string
(
gdev
,
gdev
->
module_id
.
product_stringid
));
}
static
DEVICE_ATTR_RO
(
module_product_string
);
static
struct
attribute
*
module_attrs
[]
=
{
&
dev_attr_module_vendor
.
attr
,
&
dev_attr_module_product
.
attr
,
&
dev_attr_module_version
.
attr
,
&
dev_attr_module_vendor_string
.
attr
,
&
dev_attr_module_product_string
.
attr
,
NULL
,
};
static
umode_t
module_attrs_are_visible
(
struct
kobject
*
kobj
,
struct
attribute
*
a
,
int
n
)
{
struct
greybus_device
*
gdev
=
to_greybus_device
(
kobj_to_dev
(
kobj
));
if
((
a
==
&
dev_attr_module_vendor_string
.
attr
)
&&
(
gdev
->
module_id
.
vendor_stringid
))
return
a
->
mode
;
if
((
a
==
&
dev_attr_module_product_string
.
attr
)
&&
(
gdev
->
module_id
.
product_stringid
))
return
a
->
mode
;
// FIXME - make this a dynamic structure to "know" if it really is here
// or not easier?
if
(
gdev
->
module_id
.
vendor
||
gdev
->
module_id
.
product
||
gdev
->
module_id
.
version
)
return
a
->
mode
;
return
0
;
}
static
struct
attribute_group
module_attr_grp
=
{
.
attrs
=
module_attrs
,
.
is_visible
=
module_attrs_are_visible
,
};
/* Serial Number */
static
ssize_t
serial_number_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
struct
greybus_device
*
gdev
=
to_greybus_device
(
dev
);
return
sprintf
(
buf
,
"%llX
\n
"
,
(
unsigned
long
long
)
gdev
->
serial_number
.
serial_number
);
}
static
DEVICE_ATTR_RO
(
serial_number
);
static
struct
attribute
*
serial_number_attrs
[]
=
{
&
dev_attr_serial_number
.
attr
,
NULL
,
};
static
struct
attribute_group
serial_number_attr_grp
=
{
.
attrs
=
serial_number_attrs
,
.
is_visible
=
function_attrs_are_visible
,
};
const
struct
attribute_group
*
greybus_module_groups
[]
=
{
&
function_attr_grp
,
&
module_attr_grp
,
&
serial_number_attr_grp
,
NULL
,
};
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