Skip to content

Commit

Permalink
Driver core: change misc class_devices to be real devices
Browse files Browse the repository at this point in the history
This also ment that some of the misc drivers had to also be fixed
up as they were assuming the device was a class_device.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
gregkh committed Dec 1, 2006
1 parent cd15422 commit 94fbcde
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 33 deletions.
38 changes: 19 additions & 19 deletions drivers/char/hw_random/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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);
}

Expand All @@ -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;
Expand Down
13 changes: 4 additions & 9 deletions drivers/char/misc.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,11 +169,6 @@ static int misc_open(struct inode * inode, struct file * file)
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 = {
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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));
}
Expand Down
2 changes: 1 addition & 1 deletion drivers/char/tpm/tpm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)) {
Expand Down
2 changes: 1 addition & 1 deletion drivers/input/serio/serio_raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ static int serio_raw_connect(struct serio *serio, struct serio_driver *drv)

serio_raw->dev.minor = PSMOUSE_MINOR;
serio_raw->dev.name = serio_raw->name;
serio_raw->dev.dev = &serio->dev;
serio_raw->dev.parent = &serio->dev;
serio_raw->dev.fops = &serio_raw_fops;

err = misc_register(&serio_raw->dev);
Expand Down
5 changes: 2 additions & 3 deletions include/linux/miscdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,14 @@
#define HPET_MINOR 228

struct device;
struct class_device;

struct miscdevice {
int minor;
const char *name;
const struct file_operations *fops;
struct list_head list;
struct device *dev;
struct class_device *class;
struct device *parent;
struct device *this_device;
};

extern int misc_register(struct miscdevice * misc);
Expand Down

0 comments on commit 94fbcde

Please sign in to comment.