CHROMIUM: Input: atmel_mxt_ts - add debugfs infrastructure
authorDaniel Kurtz <djkurtz@chromium.org>
Wed, 9 May 2012 02:18:14 +0000 (02:18 +0000)
committerOlof Johansson <olof@lixom.net>
Fri, 1 Jun 2012 06:50:30 +0000 (23:50 -0700)
This patch just creates a per-device debugfs root directory.
Actual debugfs entries will be added in subsequent patches.

Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
BUG=chromium-os:29899
TEST=ls /sys/kernel/debug/atmel_mxt_ts
   => Should show directories for each atmel_mxt_ts device on the system

Change-Id: I82e5470f5d1658dae03ad8d66bf348cc4fb2edb2
Reviewed-on: https://gerrit.chromium.org/gerrit/21051
Commit-Ready: Daniel Kurtz <djkurtz@chromium.org>
Reviewed-by: Daniel Kurtz <djkurtz@chromium.org>
Tested-by: Daniel Kurtz <djkurtz@chromium.org>
drivers/input/touchscreen/atmel_mxt_ts.c

index 1133eed..c1da72b 100644 (file)
@@ -11,6 +11,7 @@
  *
  */
 
+#include <linux/debugfs.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/delay.h>
@@ -279,8 +280,14 @@ struct mxt_data {
        u8 T9_reportid_max;
        u8 T19_reportid;
        u16 T44_address;
+
+       /* per-instance debugfs root */
+       struct dentry *dentry_dev;
 };
 
+/* global root node of the atmel_mxt_ts debugfs directory. */
+static struct dentry *mxt_debugfs_root;
+
 static int mxt_initialize(struct mxt_data *data);
 
 static bool mxt_object_readable(unsigned int type)
@@ -1228,6 +1235,27 @@ static const struct attribute_group mxt_attr_group = {
        .attrs = mxt_attrs,
 };
 
+/*
+ **************************************************************
+ * debugfs interface
+ **************************************************************
+*/
+static int mxt_debugfs_init(struct mxt_data *mxt)
+{
+       struct device *dev = &mxt->client->dev;
+
+       if (!mxt_debugfs_root)
+               return -ENODEV;
+
+       mxt->dentry_dev = debugfs_create_dir(kobject_name(&dev->kobj),
+                                            mxt_debugfs_root);
+
+       if (!mxt->dentry_dev)
+               return -ENODEV;
+
+       return 0;
+}
+
 static void mxt_start(struct mxt_data *data)
 {
        /* Touch enable */
@@ -1436,6 +1464,10 @@ static int __devinit mxt_probe(struct i2c_client *client,
        if (error)
                dev_warn(&client->dev, "error creating sysfs entries.\n");
 
+       error = mxt_debugfs_init(data);
+       if (error)
+               dev_warn(&client->dev, "error creating debugfs entries.\n");
+
        return 0;
 
 err_free_irq:
@@ -1452,6 +1484,8 @@ static int __devexit mxt_remove(struct i2c_client *client)
 {
        struct mxt_data *data = i2c_get_clientdata(client);
 
+       if (data->dentry_dev)
+               debugfs_remove_recursive(data->dentry_dev);
        sysfs_remove_group(&client->dev.kobj, &mxt_attr_group);
        free_irq(data->irq, data);
        input_unregister_device(data->input_dev);
@@ -1522,7 +1556,26 @@ static struct i2c_driver mxt_driver = {
        .id_table       = mxt_id,
 };
 
-module_i2c_driver(mxt_driver);
+static int __init mxt_init(void)
+{
+       /* Create a global debugfs root for all atmel_mxt_ts devices */
+       mxt_debugfs_root = debugfs_create_dir(mxt_driver.driver.name, NULL);
+       if (mxt_debugfs_root == ERR_PTR(-ENODEV))
+               mxt_debugfs_root = NULL;
+
+       return i2c_add_driver(&mxt_driver);
+}
+
+static void __exit mxt_exit(void)
+{
+       if (mxt_debugfs_root)
+               debugfs_remove_recursive(mxt_debugfs_root);
+
+       i2c_del_driver(&mxt_driver);
+}
+
+module_init(mxt_init);
+module_exit(mxt_exit);
 
 /* Module information */
 MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>");