mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6: (36 commits) Driver core: show drivers in /sys/module/ Documentation/driver-model/platform.txt update/rewrite Driver core: platform_driver_probe(), can save codespace driver core: Use klist_remove() in device_move() driver core: Introduce device_move(): move a device to a new parent. Driver core: make drivers/base/core.c:setup_parent() static driver core: Introduce device_find_child(). sysfs: sysfs_write_file() writes zero terminated data cpu topology: consider sysfs_create_group return value Driver core: Call platform_notify_remove later ACPI: Change ACPI to use dev_archdata instead of firmware_data Driver core: add dev_archdata to struct device Driver core: convert sound core to use struct device Driver core: change mem class_devices to be real devices Driver core: convert fb code to use struct device Driver core: convert firmware code to use struct device Driver core: convert mmc code to use struct device Driver core: convert ppdev code to use struct device Driver core: convert PPP code to use struct device Driver core: convert cpuid code to use struct device ...
This commit is contained in:
commit
4549df891a
80 changed files with 1418 additions and 607 deletions
|
|
@ -162,7 +162,8 @@ static struct miscdevice rng_miscdev = {
|
|||
};
|
||||
|
||||
|
||||
static ssize_t hwrng_attr_current_store(struct class_device *class,
|
||||
static ssize_t hwrng_attr_current_store(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
const char *buf, size_t len)
|
||||
{
|
||||
int err;
|
||||
|
|
@ -192,7 +193,8 @@ static ssize_t hwrng_attr_current_store(struct class_device *class,
|
|||
return err ? : len;
|
||||
}
|
||||
|
||||
static ssize_t hwrng_attr_current_show(struct class_device *class,
|
||||
static ssize_t hwrng_attr_current_show(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
int err;
|
||||
|
|
@ -210,7 +212,8 @@ static ssize_t hwrng_attr_current_show(struct class_device *class,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static ssize_t hwrng_attr_available_show(struct class_device *class,
|
||||
static ssize_t hwrng_attr_available_show(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
int err;
|
||||
|
|
@ -234,20 +237,18 @@ static ssize_t hwrng_attr_available_show(struct class_device *class,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static CLASS_DEVICE_ATTR(rng_current, S_IRUGO | S_IWUSR,
|
||||
hwrng_attr_current_show,
|
||||
hwrng_attr_current_store);
|
||||
static CLASS_DEVICE_ATTR(rng_available, S_IRUGO,
|
||||
hwrng_attr_available_show,
|
||||
NULL);
|
||||
static DEVICE_ATTR(rng_current, S_IRUGO | S_IWUSR,
|
||||
hwrng_attr_current_show,
|
||||
hwrng_attr_current_store);
|
||||
static DEVICE_ATTR(rng_available, S_IRUGO,
|
||||
hwrng_attr_available_show,
|
||||
NULL);
|
||||
|
||||
|
||||
static void unregister_miscdev(void)
|
||||
{
|
||||
class_device_remove_file(rng_miscdev.class,
|
||||
&class_device_attr_rng_available);
|
||||
class_device_remove_file(rng_miscdev.class,
|
||||
&class_device_attr_rng_current);
|
||||
device_remove_file(rng_miscdev.this_device, &dev_attr_rng_available);
|
||||
device_remove_file(rng_miscdev.this_device, &dev_attr_rng_current);
|
||||
misc_deregister(&rng_miscdev);
|
||||
}
|
||||
|
||||
|
|
@ -258,20 +259,19 @@ static int register_miscdev(void)
|
|||
err = misc_register(&rng_miscdev);
|
||||
if (err)
|
||||
goto out;
|
||||
err = class_device_create_file(rng_miscdev.class,
|
||||
&class_device_attr_rng_current);
|
||||
err = device_create_file(rng_miscdev.this_device,
|
||||
&dev_attr_rng_current);
|
||||
if (err)
|
||||
goto err_misc_dereg;
|
||||
err = class_device_create_file(rng_miscdev.class,
|
||||
&class_device_attr_rng_available);
|
||||
err = device_create_file(rng_miscdev.this_device,
|
||||
&dev_attr_rng_available);
|
||||
if (err)
|
||||
goto err_remove_current;
|
||||
out:
|
||||
return err;
|
||||
|
||||
err_remove_current:
|
||||
class_device_remove_file(rng_miscdev.class,
|
||||
&class_device_attr_rng_current);
|
||||
device_remove_file(rng_miscdev.this_device, &dev_attr_rng_current);
|
||||
err_misc_dereg:
|
||||
misc_deregister(&rng_miscdev);
|
||||
goto out;
|
||||
|
|
|
|||
|
|
@ -980,10 +980,10 @@ static int __init chr_dev_init(void)
|
|||
|
||||
mem_class = class_create(THIS_MODULE, "mem");
|
||||
for (i = 0; i < ARRAY_SIZE(devlist); i++)
|
||||
class_device_create(mem_class, NULL,
|
||||
MKDEV(MEM_MAJOR, devlist[i].minor),
|
||||
NULL, devlist[i].name);
|
||||
|
||||
device_create(mem_class, NULL,
|
||||
MKDEV(MEM_MAJOR, devlist[i].minor),
|
||||
devlist[i].name);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -169,11 +169,6 @@ fail:
|
|||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO for 2.7:
|
||||
* - add a struct kref to struct miscdevice and make all usages of
|
||||
* them dynamic.
|
||||
*/
|
||||
static struct class *misc_class;
|
||||
|
||||
static const struct file_operations misc_fops = {
|
||||
|
|
@ -228,10 +223,10 @@ int misc_register(struct miscdevice * misc)
|
|||
misc_minors[misc->minor >> 3] |= 1 << (misc->minor & 7);
|
||||
dev = MKDEV(MISC_MAJOR, misc->minor);
|
||||
|
||||
misc->class = class_device_create(misc_class, NULL, dev, misc->dev,
|
||||
misc->this_device = device_create(misc_class, misc->parent, dev,
|
||||
"%s", misc->name);
|
||||
if (IS_ERR(misc->class)) {
|
||||
err = PTR_ERR(misc->class);
|
||||
if (IS_ERR(misc->this_device)) {
|
||||
err = PTR_ERR(misc->this_device);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
@ -264,7 +259,7 @@ int misc_deregister(struct miscdevice * misc)
|
|||
|
||||
down(&misc_sem);
|
||||
list_del(&misc->list);
|
||||
class_device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor));
|
||||
device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor));
|
||||
if (i < DYNAMIC_MINORS && i>0) {
|
||||
misc_minors[i>>3] &= ~(1 << (misc->minor & 7));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -752,13 +752,13 @@ static const struct file_operations pp_fops = {
|
|||
|
||||
static void pp_attach(struct parport *port)
|
||||
{
|
||||
class_device_create(ppdev_class, NULL, MKDEV(PP_MAJOR, port->number),
|
||||
NULL, "parport%d", port->number);
|
||||
device_create(ppdev_class, NULL, MKDEV(PP_MAJOR, port->number),
|
||||
"parport%d", port->number);
|
||||
}
|
||||
|
||||
static void pp_detach(struct parport *port)
|
||||
{
|
||||
class_device_destroy(ppdev_class, MKDEV(PP_MAJOR, port->number));
|
||||
device_destroy(ppdev_class, MKDEV(PP_MAJOR, port->number));
|
||||
}
|
||||
|
||||
static struct parport_driver pp_driver = {
|
||||
|
|
|
|||
|
|
@ -127,9 +127,9 @@ raw_ioctl(struct inode *inode, struct file *filp,
|
|||
|
||||
static void bind_device(struct raw_config_request *rq)
|
||||
{
|
||||
class_device_destroy(raw_class, MKDEV(RAW_MAJOR, rq->raw_minor));
|
||||
class_device_create(raw_class, NULL, MKDEV(RAW_MAJOR, rq->raw_minor),
|
||||
NULL, "raw%d", rq->raw_minor);
|
||||
device_destroy(raw_class, MKDEV(RAW_MAJOR, rq->raw_minor));
|
||||
device_create(raw_class, NULL, MKDEV(RAW_MAJOR, rq->raw_minor),
|
||||
"raw%d", rq->raw_minor);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -200,7 +200,7 @@ 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_device_destroy(raw_class,
|
||||
device_destroy(raw_class,
|
||||
MKDEV(RAW_MAJOR, rq.raw_minor));
|
||||
} else {
|
||||
rawdev->binding = bdget(dev);
|
||||
|
|
@ -283,7 +283,7 @@ static int __init raw_init(void)
|
|||
ret = PTR_ERR(raw_class);
|
||||
goto error_region;
|
||||
}
|
||||
class_device_create(raw_class, NULL, MKDEV(RAW_MAJOR, 0), NULL, "rawctl");
|
||||
device_create(raw_class, NULL, MKDEV(RAW_MAJOR, 0), "rawctl");
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
@ -295,7 +295,7 @@ error:
|
|||
|
||||
static void __exit raw_exit(void)
|
||||
{
|
||||
class_device_destroy(raw_class, MKDEV(RAW_MAJOR, 0));
|
||||
device_destroy(raw_class, MKDEV(RAW_MAJOR, 0));
|
||||
class_destroy(raw_class);
|
||||
cdev_del(&raw_cdev);
|
||||
unregister_chrdev_region(MKDEV(RAW_MAJOR, 0), MAX_RAW_MINORS);
|
||||
|
|
|
|||
|
|
@ -1130,7 +1130,7 @@ struct tpm_chip *tpm_register_hardware(struct device *dev, const struct tpm_vend
|
|||
scnprintf(devname, DEVNAME_SIZE, "%s%d", "tpm", chip->dev_num);
|
||||
chip->vendor.miscdev.name = devname;
|
||||
|
||||
chip->vendor.miscdev.dev = dev;
|
||||
chip->vendor.miscdev.parent = dev;
|
||||
chip->dev = get_device(dev);
|
||||
|
||||
if (misc_register(&chip->vendor.miscdev)) {
|
||||
|
|
|
|||
|
|
@ -3612,7 +3612,8 @@ static struct class *tty_class;
|
|||
* This field is optional, if there is no known struct device
|
||||
* for this tty device it can be set to NULL safely.
|
||||
*
|
||||
* Returns a pointer to the class device (or ERR_PTR(-EFOO) on error).
|
||||
* Returns a pointer to the struct device for this tty device
|
||||
* (or ERR_PTR(-EFOO) on error).
|
||||
*
|
||||
* This call is required to be made to register an individual tty device
|
||||
* if the tty driver's flags have the TTY_DRIVER_DYNAMIC_DEV bit set. If
|
||||
|
|
@ -3622,8 +3623,8 @@ static struct class *tty_class;
|
|||
* Locking: ??
|
||||
*/
|
||||
|
||||
struct class_device *tty_register_device(struct tty_driver *driver,
|
||||
unsigned index, struct device *device)
|
||||
struct device *tty_register_device(struct tty_driver *driver, unsigned index,
|
||||
struct device *device)
|
||||
{
|
||||
char name[64];
|
||||
dev_t dev = MKDEV(driver->major, driver->minor_start) + index;
|
||||
|
|
@ -3639,7 +3640,7 @@ struct class_device *tty_register_device(struct tty_driver *driver,
|
|||
else
|
||||
tty_line_name(driver, index, name);
|
||||
|
||||
return class_device_create(tty_class, NULL, dev, device, "%s", name);
|
||||
return device_create(tty_class, device, dev, name);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -3655,7 +3656,7 @@ struct class_device *tty_register_device(struct tty_driver *driver,
|
|||
|
||||
void tty_unregister_device(struct tty_driver *driver, unsigned index)
|
||||
{
|
||||
class_device_destroy(tty_class, MKDEV(driver->major, driver->minor_start) + index);
|
||||
device_destroy(tty_class, MKDEV(driver->major, driver->minor_start) + index);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(tty_register_device);
|
||||
|
|
@ -3895,20 +3896,20 @@ static int __init tty_init(void)
|
|||
if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||
|
||||
register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)
|
||||
panic("Couldn't register /dev/tty driver\n");
|
||||
class_device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), NULL, "tty");
|
||||
device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), "tty");
|
||||
|
||||
cdev_init(&console_cdev, &console_fops);
|
||||
if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) ||
|
||||
register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0)
|
||||
panic("Couldn't register /dev/console driver\n");
|
||||
class_device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 1), NULL, "console");
|
||||
device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 1), "console");
|
||||
|
||||
#ifdef CONFIG_UNIX98_PTYS
|
||||
cdev_init(&ptmx_cdev, &ptmx_fops);
|
||||
if (cdev_add(&ptmx_cdev, MKDEV(TTYAUX_MAJOR, 2), 1) ||
|
||||
register_chrdev_region(MKDEV(TTYAUX_MAJOR, 2), 1, "/dev/ptmx") < 0)
|
||||
panic("Couldn't register /dev/ptmx driver\n");
|
||||
class_device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 2), NULL, "ptmx");
|
||||
device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 2), "ptmx");
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_VT
|
||||
|
|
@ -3916,7 +3917,7 @@ static int __init tty_init(void)
|
|||
if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) ||
|
||||
register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1, "/dev/vc/0") < 0)
|
||||
panic("Couldn't register /dev/tty0 driver\n");
|
||||
class_device_create(tty_class, NULL, MKDEV(TTY_MAJOR, 0), NULL, "tty0");
|
||||
device_create(tty_class, NULL, MKDEV(TTY_MAJOR, 0), "tty0");
|
||||
|
||||
vty_init();
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -476,16 +476,16 @@ static struct class *vc_class;
|
|||
|
||||
void vcs_make_sysfs(struct tty_struct *tty)
|
||||
{
|
||||
class_device_create(vc_class, NULL, MKDEV(VCS_MAJOR, tty->index + 1),
|
||||
NULL, "vcs%u", tty->index + 1);
|
||||
class_device_create(vc_class, NULL, MKDEV(VCS_MAJOR, tty->index + 129),
|
||||
NULL, "vcsa%u", tty->index + 1);
|
||||
device_create(vc_class, NULL, MKDEV(VCS_MAJOR, tty->index + 1),
|
||||
"vcs%u", tty->index + 1);
|
||||
device_create(vc_class, NULL, MKDEV(VCS_MAJOR, tty->index + 129),
|
||||
"vcsa%u", tty->index + 1);
|
||||
}
|
||||
|
||||
void vcs_remove_sysfs(struct tty_struct *tty)
|
||||
{
|
||||
class_device_destroy(vc_class, MKDEV(VCS_MAJOR, tty->index + 1));
|
||||
class_device_destroy(vc_class, MKDEV(VCS_MAJOR, tty->index + 129));
|
||||
device_destroy(vc_class, MKDEV(VCS_MAJOR, tty->index + 1));
|
||||
device_destroy(vc_class, MKDEV(VCS_MAJOR, tty->index + 129));
|
||||
}
|
||||
|
||||
int __init vcs_init(void)
|
||||
|
|
@ -494,7 +494,7 @@ int __init vcs_init(void)
|
|||
panic("unable to get major %d for vcs device", VCS_MAJOR);
|
||||
vc_class = class_create(THIS_MODULE, "vc");
|
||||
|
||||
class_device_create(vc_class, NULL, MKDEV(VCS_MAJOR, 0), NULL, "vcs");
|
||||
class_device_create(vc_class, NULL, MKDEV(VCS_MAJOR, 128), NULL, "vcsa");
|
||||
device_create(vc_class, NULL, MKDEV(VCS_MAJOR, 0), "vcs");
|
||||
device_create(vc_class, NULL, MKDEV(VCS_MAJOR, 128), "vcsa");
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@
|
|||
struct con_driver {
|
||||
const struct consw *con;
|
||||
const char *desc;
|
||||
struct class_device *class_dev;
|
||||
struct device *dev;
|
||||
int node;
|
||||
int first;
|
||||
int last;
|
||||
|
|
@ -3023,10 +3023,10 @@ static inline int vt_unbind(struct con_driver *con)
|
|||
}
|
||||
#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)
|
||||
{
|
||||
struct con_driver *con = class_get_devdata(class_device);
|
||||
struct con_driver *con = dev_get_drvdata(dev);
|
||||
int bind = simple_strtoul(buf, NULL, 0);
|
||||
|
||||
if (bind)
|
||||
|
|
@ -3037,17 +3037,19 @@ static ssize_t store_bind(struct class_device *class_device,
|
|||
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);
|
||||
|
||||
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",
|
||||
(con->flag & CON_DRIVER_FLAG_MODULE) ? "(M)" : "(S)",
|
||||
|
|
@ -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(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 error = 0;
|
||||
|
||||
con->flag |= CON_DRIVER_FLAG_ATTR;
|
||||
class_set_devdata(con->class_dev, con);
|
||||
for (i = 0; i < ARRAY_SIZE(class_device_attrs); i++) {
|
||||
error = class_device_create_file(con->class_dev,
|
||||
&class_device_attrs[i]);
|
||||
dev_set_drvdata(con->dev, con);
|
||||
for (i = 0; i < ARRAY_SIZE(device_attrs); i++) {
|
||||
error = device_create_file(con->dev, &device_attrs[i]);
|
||||
if (error)
|
||||
break;
|
||||
}
|
||||
|
||||
if (error) {
|
||||
while (--i >= 0)
|
||||
class_device_remove_file(con->class_dev,
|
||||
&class_device_attrs[i]);
|
||||
device_remove_file(con->dev, &device_attrs[i]);
|
||||
con->flag &= ~CON_DRIVER_FLAG_ATTR;
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
static void vtconsole_deinit_class_device(struct con_driver *con)
|
||||
static void vtconsole_deinit_device(struct con_driver *con)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (con->flag & CON_DRIVER_FLAG_ATTR) {
|
||||
for (i = 0; i < ARRAY_SIZE(class_device_attrs); i++)
|
||||
class_device_remove_file(con->class_dev,
|
||||
&class_device_attrs[i]);
|
||||
for (i = 0; i < ARRAY_SIZE(device_attrs); i++)
|
||||
device_remove_file(con->dev, &device_attrs[i]);
|
||||
con->flag &= ~CON_DRIVER_FLAG_ATTR;
|
||||
}
|
||||
}
|
||||
|
|
@ -3179,18 +3178,17 @@ int register_con_driver(const struct consw *csw, int first, int last)
|
|||
if (retval)
|
||||
goto err;
|
||||
|
||||
con_driver->class_dev = class_device_create(vtconsole_class, NULL,
|
||||
MKDEV(0, con_driver->node),
|
||||
NULL, "vtcon%i",
|
||||
con_driver->node);
|
||||
con_driver->dev = device_create(vtconsole_class, NULL,
|
||||
MKDEV(0, con_driver->node),
|
||||
"vtcon%i", con_driver->node);
|
||||
|
||||
if (IS_ERR(con_driver->class_dev)) {
|
||||
printk(KERN_WARNING "Unable to create class_device for %s; "
|
||||
if (IS_ERR(con_driver->dev)) {
|
||||
printk(KERN_WARNING "Unable to create device for %s; "
|
||||
"errno = %ld\n", con_driver->desc,
|
||||
PTR_ERR(con_driver->class_dev));
|
||||
con_driver->class_dev = NULL;
|
||||
PTR_ERR(con_driver->dev));
|
||||
con_driver->dev = NULL;
|
||||
} else {
|
||||
vtconsole_init_class_device(con_driver);
|
||||
vtconsole_init_device(con_driver);
|
||||
}
|
||||
|
||||
err:
|
||||
|
|
@ -3226,12 +3224,12 @@ int unregister_con_driver(const struct consw *csw)
|
|||
|
||||
if (con_driver->con == csw &&
|
||||
con_driver->flag & CON_DRIVER_FLAG_MODULE) {
|
||||
vtconsole_deinit_class_device(con_driver);
|
||||
class_device_destroy(vtconsole_class,
|
||||
MKDEV(0, con_driver->node));
|
||||
vtconsole_deinit_device(con_driver);
|
||||
device_destroy(vtconsole_class,
|
||||
MKDEV(0, con_driver->node));
|
||||
con_driver->con = NULL;
|
||||
con_driver->desc = NULL;
|
||||
con_driver->class_dev = NULL;
|
||||
con_driver->dev = NULL;
|
||||
con_driver->node = 0;
|
||||
con_driver->flag = 0;
|
||||
con_driver->first = 0;
|
||||
|
|
@ -3289,19 +3287,18 @@ static int __init vtconsole_class_init(void)
|
|||
for (i = 0; i < MAX_NR_CON_DRIVER; i++) {
|
||||
struct con_driver *con = ®istered_con_driver[i];
|
||||
|
||||
if (con->con && !con->class_dev) {
|
||||
con->class_dev =
|
||||
class_device_create(vtconsole_class, NULL,
|
||||
MKDEV(0, con->node), NULL,
|
||||
"vtcon%i", con->node);
|
||||
if (con->con && !con->dev) {
|
||||
con->dev = device_create(vtconsole_class, NULL,
|
||||
MKDEV(0, con->node),
|
||||
"vtcon%i", con->node);
|
||||
|
||||
if (IS_ERR(con->class_dev)) {
|
||||
if (IS_ERR(con->dev)) {
|
||||
printk(KERN_WARNING "Unable to create "
|
||||
"class_device for %s; errno = %ld\n",
|
||||
con->desc, PTR_ERR(con->class_dev));
|
||||
con->class_dev = NULL;
|
||||
"device for %s; errno = %ld\n",
|
||||
con->desc, PTR_ERR(con->dev));
|
||||
con->dev = NULL;
|
||||
} else {
|
||||
vtconsole_init_class_device(con);
|
||||
vtconsole_init_device(con);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue