diff options
Diffstat (limited to 'io-module/mts-io.c')
-rw-r--r-- | io-module/mts-io.c | 39 |
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); |