summaryrefslogtreecommitdiff
path: root/io-module/mts-io.c
diff options
context:
space:
mode:
Diffstat (limited to 'io-module/mts-io.c')
-rw-r--r--io-module/mts-io.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/io-module/mts-io.c b/io-module/mts-io.c
index ca7fdcb..a6e5204 100644
--- a/io-module/mts-io.c
+++ b/io-module/mts-io.c
@@ -93,16 +93,63 @@ EXPORT_SYMBOL(mts_get_hw_version);
struct platform_device *mts_io_platform_device;
EXPORT_SYMBOL(mts_io_platform_device);
+#ifdef PLATFORM_BUS_SYMLINK
+struct mts_io_drvdata {
+ bool f_platform_bus_symlink;
+};
+#endif // PLATFORM_BUS_SYMLINK
static int mts_io_probe(struct platform_device *pdev)
{
+#ifdef PLATFORM_BUS_SYMLINK
+ struct device *dev = &pdev->dev;
+ const char *symlink_name = kobject_name(&pdev->dev.kobj);
+ struct mts_io_drvdata *mts_io_dd;
+ int res;
+#endif // PLATFORM_BUS_SYMLINK
+
mts_io_platform_device = pdev;
dev_dbg(&pdev->dev,"%s: ENTER\n",__func__);
+
+#ifdef PLATFORM_BUS_SYMLINK
+ mts_io_dd = devm_kzalloc(dev, sizeof(*mts_io_dd), GFP_KERNEL);
+ if (!mts_io_dd) {
+ return -ENOMEM;
+ };
+ mts_io_dd->f_platform_bus_symlink = false;
+ platform_set_drvdata(pdev, mts_io_dd);
+
+ if (!dev->parent) {
+ log_warning("Parent device is not found");
+ } else if (dev->parent == &platform_bus) {
+ log_info("Parent device is platform_bus. No need to create symlink");
+ goto exit;
+ }
+ log_info("Creating symlink on platform_bus to %s", symlink_name);
+
+ res = sysfs_create_link(&platform_bus.kobj, &dev->kobj, symlink_name);
+ if (!res) {
+ mts_io_dd->f_platform_bus_symlink = true;
+ } else {
+ log_warning("Failed to create symlink");
+ }
+
+exit:
+#endif // PLATFORM_BUS_SYMLINK
+
return 0;
}
static int mts_io_remove(struct platform_device *pdev)
{
+#ifdef PLATFORM_BUS_SYMLINK
+ struct mts_io_drvdata *mts_io_dd = platform_get_drvdata(pdev);
+ const char *symlink_name = kobject_name(&pdev->dev.kobj);
+ if (mts_io_dd && mts_io_dd->f_platform_bus_symlink) {
+ log_info("Removing %s symlink from platform_bus", symlink_name);
+ sysfs_remove_link(&platform_bus.kobj, symlink_name);
+ }
+#endif // PLATFORM_BUS_SYMLINK
return 0;
}