diff --git a/drivers/staging/greybus/vibrator.c b/drivers/staging/greybus/vibrator.c
index 94110ca..d93c8f7 100644
--- a/drivers/staging/greybus/vibrator.c
+++ b/drivers/staging/greybus/vibrator.c
@@ -19,9 +19,6 @@
 struct gb_vibrator_device {
 	struct gb_connection	*connection;
 	struct input_dev	*input;
-	struct device		*dev;
-	int			minor;		/* vibrator minor number */
-	struct delayed_work     delayed_work;
 	bool			running;
 	bool			on;
 	struct work_struct	play_work;
@@ -45,7 +42,7 @@
 	return ret;
 }
 
-static int turn_on(struct gb_vibrator_device *vib, u16 timeout_ms)
+static int turn_on(struct gb_vibrator_device *vib)
 {
 	struct gb_bundle *bundle = vib->connection->bundle;
 	int ret;
@@ -54,10 +51,6 @@
 	if (ret)
 		return ret;
 
-	/* Vibrator was switched ON earlier */
-	if (cancel_delayed_work_sync(&vib->delayed_work))
-		turn_off(vib);
-
 	ret = gb_operation_sync(vib->connection, GB_VIBRATOR_TYPE_ON,
 				NULL, 0, NULL, 0);
 	if (ret) {
@@ -66,8 +59,6 @@
 	}
 
 	vib->on = true;
-	schedule_delayed_work(&vib->delayed_work, msecs_to_jiffies(timeout_ms));
-
 	return 0;
 }
 
@@ -79,7 +70,7 @@
 	if (vib->running)
 		turn_off(vib);
 	else
-		turn_on(vib, 100);
+		turn_on(vib);
 }
 
 static int gb_vibrator_play_effect(struct input_dev *input, void *data,
@@ -101,68 +92,17 @@
 {
 	struct gb_vibrator_device *vib = input_get_drvdata(input);
 
-	cancel_delayed_work_sync(&vib->delayed_work);
 	cancel_work_sync(&vib->play_work);
 	turn_off(vib);
 	vib->running = false;
 }
 
-static void gb_vibrator_worker(struct work_struct *work)
-{
-	struct delayed_work *delayed_work = to_delayed_work(work);
-	struct gb_vibrator_device *vib =
-		container_of(delayed_work,
-			     struct gb_vibrator_device,
-			     delayed_work);
-
-	turn_off(vib);
-}
-
-static ssize_t timeout_store(struct device *dev, struct device_attribute *attr,
-			     const char *buf, size_t count)
-{
-	struct gb_vibrator_device *vib = dev_get_drvdata(dev);
-	unsigned long val;
-	int retval;
-
-	retval = kstrtoul(buf, 10, &val);
-	if (retval < 0) {
-		dev_err(dev, "could not parse timeout value %d\n", retval);
-		return retval;
-	}
-
-	if (val)
-		retval = turn_on(vib, (u16)val);
-	else
-		retval = turn_off(vib);
-	if (retval)
-		return retval;
-
-	return count;
-}
-static DEVICE_ATTR_WO(timeout);
-
-static struct attribute *vibrator_attrs[] = {
-	&dev_attr_timeout.attr,
-	NULL,
-};
-ATTRIBUTE_GROUPS(vibrator);
-
-static struct class vibrator_class = {
-	.name		= "vibrator",
-	.owner		= THIS_MODULE,
-	.dev_groups	= vibrator_groups,
-};
-
-static DEFINE_IDA(minors);
-
 static int gb_vibrator_probe(struct gb_bundle *bundle,
 			     const struct greybus_bundle_id *id)
 {
 	struct greybus_descriptor_cport *cport_desc;
 	struct gb_connection *connection;
 	struct gb_vibrator_device *vib;
-	struct device *dev;
 	int retval;
 
 	if (bundle->num_cports != 1)
@@ -192,26 +132,6 @@
 	if (retval)
 		goto err_connection_destroy;
 
-	/*
-	 * For now we create a device in sysfs for the vibrator, but odds are
-	 * there is a "real" device somewhere in the kernel for this, but I
-	 * can't find it at the moment...
-	 */
-	vib->minor = ida_simple_get(&minors, 0, 0, GFP_KERNEL);
-	if (vib->minor < 0) {
-		retval = vib->minor;
-		goto err_connection_disable;
-	}
-	dev = device_create(&vibrator_class, &bundle->dev,
-			    MKDEV(0, 0), vib, "vibrator%d", vib->minor);
-	if (IS_ERR(dev)) {
-		retval = -EINVAL;
-		goto err_ida_remove;
-	}
-	vib->dev = dev;
-
-	INIT_DELAYED_WORK(&vib->delayed_work, gb_vibrator_worker);
-
 	INIT_WORK(&vib->play_work, gb_vibrator_play_work);
 	vib->input->name = "greybus-vibrator";
 	vib->input->close = gb_vibrator_close;
@@ -224,16 +144,12 @@
 	retval = input_ff_create_memless(vib->input, NULL,
 					 gb_vibrator_play_effect);
 	if (retval)
-		goto err_device_remove;
+		goto err_connection_disable;
 
 	gb_pm_runtime_put_autosuspend(bundle);
 
 	return 0;
 
-err_device_remove:
-	device_unregister(vib->dev);
-err_ida_remove:
-	ida_simple_remove(&minors, vib->minor);
 err_connection_disable:
 	gb_connection_disable(connection);
 err_connection_destroy:
@@ -253,11 +169,8 @@
 	if (ret)
 		gb_pm_runtime_get_noresume(bundle);
 
-	if (cancel_delayed_work_sync(&vib->delayed_work))
-		turn_off(vib);
+	turn_off(vib);
 
-	device_unregister(vib->dev);
-	ida_simple_remove(&minors, vib->minor);
 	gb_connection_disable(vib->connection);
 	gb_connection_destroy(vib->connection);
 	kfree(vib);
@@ -275,34 +188,6 @@
 	.disconnect	= gb_vibrator_disconnect,
 	.id_table	= gb_vibrator_id_table,
 };
-
-static __init int gb_vibrator_init(void)
-{
-	int retval;
-
-	retval = class_register(&vibrator_class);
-	if (retval)
-		return retval;
-
-	retval = greybus_register(&gb_vibrator_driver);
-	if (retval)
-		goto err_class_unregister;
-
-	return 0;
-
-err_class_unregister:
-	class_unregister(&vibrator_class);
-
-	return retval;
-}
-module_init(gb_vibrator_init);
-
-static __exit void gb_vibrator_exit(void)
-{
-	greybus_deregister(&gb_vibrator_driver);
-	class_unregister(&vibrator_class);
-	ida_destroy(&minors);
-}
-module_exit(gb_vibrator_exit);
+module_greybus_driver(gb_vibrator_driver);
 
 MODULE_LICENSE("GPL v2");
