Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 94fbcded authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Driver core: change misc class_devices to be real devices



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: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent cd15422b
Loading
Loading
Loading
Loading
+19 −19
Original line number Diff line number Diff line
@@ -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,
static DEVICE_ATTR(rng_current, S_IRUGO | S_IWUSR,
		   hwrng_attr_current_show,
		   hwrng_attr_current_store);
static CLASS_DEVICE_ATTR(rng_available, S_IRUGO,
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;
+4 −9
Original line number Diff line number Diff line
@@ -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));
	}
+1 −1
Original line number Diff line number Diff line
@@ -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)) {
+1 −1
Original line number Diff line number Diff line
@@ -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);
+2 −3
Original line number Diff line number Diff line
@@ -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);