Commit 805952a8 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Driver core: convert vt code to use struct device

Converts from using struct "class_device" to "struct device" making
everything show up properly in /sys/devices/ with symlinks from the
/sys/class directory.
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 805fab47
...@@ -112,7 +112,7 @@ ...@@ -112,7 +112,7 @@
struct con_driver { struct con_driver {
const struct consw *con; const struct consw *con;
const char *desc; const char *desc;
struct class_device *class_dev; struct device *dev;
int node; int node;
int first; int first;
int last; int last;
...@@ -3023,10 +3023,10 @@ static inline int vt_unbind(struct con_driver *con) ...@@ -3023,10 +3023,10 @@ static inline int vt_unbind(struct con_driver *con)
} }
#endif /* CONFIG_VT_HW_CONSOLE_BINDING */ #endif /* CONFIG_VT_HW_CONSOLE_BINDING */
static ssize_t store_bind(struct class_device *class_device, static ssize_t store_bind(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count) const char *buf, size_t count)
{ {
struct con_driver *con = class_get_devdata(class_device); struct con_driver *con = dev_get_drvdata(dev);
int bind = simple_strtoul(buf, NULL, 0); int bind = simple_strtoul(buf, NULL, 0);
if (bind) if (bind)
...@@ -3037,17 +3037,19 @@ static ssize_t store_bind(struct class_device *class_device, ...@@ -3037,17 +3037,19 @@ static ssize_t store_bind(struct class_device *class_device,
return count; return count;
} }
static ssize_t show_bind(struct class_device *class_device, char *buf) static ssize_t show_bind(struct device *dev, struct device_attribute *attr,
char *buf)
{ {
struct con_driver *con = class_get_devdata(class_device); struct con_driver *con = dev_get_drvdata(dev);
int bind = con_is_bound(con->con); int bind = con_is_bound(con->con);
return snprintf(buf, PAGE_SIZE, "%i\n", bind); return snprintf(buf, PAGE_SIZE, "%i\n", bind);
} }
static ssize_t show_name(struct class_device *class_device, char *buf) static ssize_t show_name(struct device *dev, struct device_attribute *attr,
char *buf)
{ {
struct con_driver *con = class_get_devdata(class_device); struct con_driver *con = dev_get_drvdata(dev);
return snprintf(buf, PAGE_SIZE, "%s %s\n", return snprintf(buf, PAGE_SIZE, "%s %s\n",
(con->flag & CON_DRIVER_FLAG_MODULE) ? "(M)" : "(S)", (con->flag & CON_DRIVER_FLAG_MODULE) ? "(M)" : "(S)",
...@@ -3055,43 +3057,40 @@ static ssize_t show_name(struct class_device *class_device, char *buf) ...@@ -3055,43 +3057,40 @@ static ssize_t show_name(struct class_device *class_device, char *buf)
} }
static struct class_device_attribute class_device_attrs[] = { static struct device_attribute device_attrs[] = {
__ATTR(bind, S_IRUGO|S_IWUSR, show_bind, store_bind), __ATTR(bind, S_IRUGO|S_IWUSR, show_bind, store_bind),
__ATTR(name, S_IRUGO, show_name, NULL), __ATTR(name, S_IRUGO, show_name, NULL),
}; };
static int vtconsole_init_class_device(struct con_driver *con) static int vtconsole_init_device(struct con_driver *con)
{ {
int i; int i;
int error = 0; int error = 0;
con->flag |= CON_DRIVER_FLAG_ATTR; con->flag |= CON_DRIVER_FLAG_ATTR;
class_set_devdata(con->class_dev, con); dev_set_drvdata(con->dev, con);
for (i = 0; i < ARRAY_SIZE(class_device_attrs); i++) { for (i = 0; i < ARRAY_SIZE(device_attrs); i++) {
error = class_device_create_file(con->class_dev, error = device_create_file(con->dev, &device_attrs[i]);
&class_device_attrs[i]);
if (error) if (error)
break; break;
} }
if (error) { if (error) {
while (--i >= 0) while (--i >= 0)
class_device_remove_file(con->class_dev, device_remove_file(con->dev, &device_attrs[i]);
&class_device_attrs[i]);
con->flag &= ~CON_DRIVER_FLAG_ATTR; con->flag &= ~CON_DRIVER_FLAG_ATTR;
} }
return error; return error;
} }
static void vtconsole_deinit_class_device(struct con_driver *con) static void vtconsole_deinit_device(struct con_driver *con)
{ {
int i; int i;
if (con->flag & CON_DRIVER_FLAG_ATTR) { if (con->flag & CON_DRIVER_FLAG_ATTR) {
for (i = 0; i < ARRAY_SIZE(class_device_attrs); i++) for (i = 0; i < ARRAY_SIZE(device_attrs); i++)
class_device_remove_file(con->class_dev, device_remove_file(con->dev, &device_attrs[i]);
&class_device_attrs[i]);
con->flag &= ~CON_DRIVER_FLAG_ATTR; con->flag &= ~CON_DRIVER_FLAG_ATTR;
} }
} }
...@@ -3179,18 +3178,17 @@ int register_con_driver(const struct consw *csw, int first, int last) ...@@ -3179,18 +3178,17 @@ int register_con_driver(const struct consw *csw, int first, int last)
if (retval) if (retval)
goto err; goto err;
con_driver->class_dev = class_device_create(vtconsole_class, NULL, con_driver->dev = device_create(vtconsole_class, NULL,
MKDEV(0, con_driver->node), MKDEV(0, con_driver->node),
NULL, "vtcon%i", "vtcon%i", con_driver->node);
con_driver->node);
if (IS_ERR(con_driver->class_dev)) { if (IS_ERR(con_driver->dev)) {
printk(KERN_WARNING "Unable to create class_device for %s; " printk(KERN_WARNING "Unable to create device for %s; "
"errno = %ld\n", con_driver->desc, "errno = %ld\n", con_driver->desc,
PTR_ERR(con_driver->class_dev)); PTR_ERR(con_driver->dev));
con_driver->class_dev = NULL; con_driver->dev = NULL;
} else { } else {
vtconsole_init_class_device(con_driver); vtconsole_init_device(con_driver);
} }
err: err:
...@@ -3226,12 +3224,12 @@ int unregister_con_driver(const struct consw *csw) ...@@ -3226,12 +3224,12 @@ int unregister_con_driver(const struct consw *csw)
if (con_driver->con == csw && if (con_driver->con == csw &&
con_driver->flag & CON_DRIVER_FLAG_MODULE) { con_driver->flag & CON_DRIVER_FLAG_MODULE) {
vtconsole_deinit_class_device(con_driver); vtconsole_deinit_device(con_driver);
class_device_destroy(vtconsole_class, device_destroy(vtconsole_class,
MKDEV(0, con_driver->node)); MKDEV(0, con_driver->node));
con_driver->con = NULL; con_driver->con = NULL;
con_driver->desc = NULL; con_driver->desc = NULL;
con_driver->class_dev = NULL; con_driver->dev = NULL;
con_driver->node = 0; con_driver->node = 0;
con_driver->flag = 0; con_driver->flag = 0;
con_driver->first = 0; con_driver->first = 0;
...@@ -3289,19 +3287,18 @@ static int __init vtconsole_class_init(void) ...@@ -3289,19 +3287,18 @@ static int __init vtconsole_class_init(void)
for (i = 0; i < MAX_NR_CON_DRIVER; i++) { for (i = 0; i < MAX_NR_CON_DRIVER; i++) {
struct con_driver *con = &registered_con_driver[i]; struct con_driver *con = &registered_con_driver[i];
if (con->con && !con->class_dev) { if (con->con && !con->dev) {
con->class_dev = con->dev = device_create(vtconsole_class, NULL,
class_device_create(vtconsole_class, NULL, MKDEV(0, con->node),
MKDEV(0, con->node), NULL, "vtcon%i", con->node);
"vtcon%i", con->node);
if (IS_ERR(con->class_dev)) { if (IS_ERR(con->dev)) {
printk(KERN_WARNING "Unable to create " printk(KERN_WARNING "Unable to create "
"class_device for %s; errno = %ld\n", "device for %s; errno = %ld\n",
con->desc, PTR_ERR(con->class_dev)); con->desc, PTR_ERR(con->dev));
con->class_dev = NULL; con->dev = NULL;
} else { } else {
vtconsole_init_class_device(con); vtconsole_init_device(con);
} }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment