-greybus-y := core.o gbuf.o i2c-gb.o gpio-gb.o sdio-gb.o uart-gb.o
+greybus-y := core.o gbuf.o debugfs.o i2c-gb.o gpio-gb.o sdio-gb.o uart-gb.o
obj-m += greybus.o
obj-m += es1-ap-usb.o
return 0;
}
-struct bus_type greybus_bus_type = {
+static struct bus_type greybus_bus_type = {
.name = "greybus",
.match = greybus_device_match,
.uevent = greybus_uevent,
{
int retval;
- retval = gb_tty_init();
+ retval = greybus_debugfs_init();
if (retval)
return retval;
+ retval = bus_register(&greybus_bus_type);
+ if (retval)
+ goto error_bus;
+
+ // FIXME - more gb core init goes here
+
+ retval = gb_tty_init();
+ if (retval)
+ goto error_tty;
+
return 0;
+
+error_tty:
+ bus_unregister(&greybus_bus_type);
+
+error_bus:
+ greybus_debugfs_cleanup();
+
+ return retval;
}
static void __exit gb_exit(void)
{
gb_tty_exit();
+ bus_unregister(&greybus_bus_type);
+ greybus_debugfs_cleanup();
}
module_init(gb_init);
--- /dev/null
+/*
+ * Greybus debugfs code
+ *
+ * Copyright 2014 Google Inc.
+ *
+ * Released under the GPLv2 only.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/kernel.h>
+#include <linux/device.h>
+#include <linux/debugfs.h>
+
+#include "greybus.h"
+
+static struct dentry *gb_debug_root;
+
+int greybus_debugfs_init(void)
+{
+ gb_debug_root = debugfs_create_dir("greybus", NULL);
+ if (!gb_debug_root)
+ return -ENOENT;
+
+ return 0;
+}
+
+void greybus_debugfs_cleanup(void)
+{
+ debugfs_remove_recursive(gb_debug_root);
+}
#define module_greybus_driver(__greybus_driver) \
module_driver(__greybus_driver, greybus_register, greybus_deregister)
-extern struct bus_type greybus_bus_type;
-
int greybus_disabled(void);
+int greybus_debugfs_init(void);
+void greybus_debugfs_cleanup(void);
#endif /* __KERNEL__ */
#endif /* __LINUX_GREYBUS_H */