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.c39
1 files changed, 17 insertions, 22 deletions
diff --git a/io-module/mts-io.c b/io-module/mts-io.c
index 167e3f0..db736f9 100644
--- a/io-module/mts-io.c
+++ b/io-module/mts-io.c
@@ -90,8 +90,14 @@ EXPORT_SYMBOL(mts_get_hw_version);
#include "adc.c"
+struct platform_device *mts_io_platform_device;
+EXPORT_SYMBOL(mts_io_platform_device);
+
+
static int mts_io_probe(struct platform_device *pdev)
{
+ mts_io_platform_device = pdev;
+ dev_dbg(&pdev->dev,"%s: ENTER\n",__func__);
return 0;
}
@@ -114,8 +120,6 @@ static struct platform_driver mts_io_driver = {
static uint8_t mts_hw_version;
-struct platform_device *mts_io_platform_device;
-EXPORT_SYMBOL(mts_io_platform_device);
static struct attribute_group *attr_group;
static struct attribute_group *attr_group_lora; // on-board lora peripheral to be stored in the lora/ sub-directory
@@ -1313,10 +1317,13 @@ mts_id_eeprom_load(void)
static void cleanup(void)
{
log_info("cleaning up....");
- if (mts_io_platform_device) {
- platform_device_unregister(mts_io_platform_device);
+
+ if (mts_io_platform_device != NULL && attr_group != NULL) {
+ sysfs_remove_group(&mts_io_platform_device->dev.kobj, attr_group);
}
+ platform_driver_unregister(&mts_io_driver);
+
if(freelater) {
kfree(freelater);
freelater = NULL;
@@ -1328,7 +1335,7 @@ static void cleanup(void)
}
mts_capab_dir_delete();
- mts_cpu_dir_delete();
+ mts_cpu_dir_delete();
}
static int __init mts_io_init(void)
@@ -1346,27 +1353,15 @@ static int __init mts_io_init(void)
* probe function, we will do a 2nd probe in
* platform_device_add, which will result in a
* stack trace in the log. */
- ret = platform_driver_register(&mts_io_driver);
- if (ret)
- printk(KERN_ERR "mts-io: probe failed: %d\n", ret);
- platform_driver_unregister(&mts_io_driver);
-
- mts_io_platform_device = platform_device_alloc(PLATFORM_NAME, -1);
- if (!mts_io_platform_device)
- return -ENOMEM;
-
- /* request_firmware() requires a device, so call after device allocated */
- ret = mts_id_eeprom_load();
+ ret = platform_driver_register(&mts_io_driver);
if (ret) {
- kfree(mts_io_platform_device);
+ printk(KERN_ERR "mts-io: probe failed: %d\n", ret);
+ cleanup();
return ret;
}
- ret = platform_device_add(mts_io_platform_device);
- if (ret) {
- kfree(mts_io_platform_device);
- return ret;
- }
+ /* request_firmware() requires a device, so call after device allocated */
+ ret = mts_id_eeprom_load();
if (DEVICE_CAPA(id_eeprom.capa, CAPA_DOUT)) {
ret = spi_register_driver(&mts_spi_dout_driver);