提交 3ecf44b3 编写于 作者: J Jean Delvare

hwmon: (smsc47m1) Fail module loading on error

If an error occurs during probing, there's no point in keeping the
module in memory. Better fail the module loading early to make the
problem more visible.
Signed-off-by: NJean Delvare <khali@linux-fr.org>
Tested-by: NSean Fidler <fidlersean@gmail.com>
上级 a0e92d70
...@@ -139,8 +139,7 @@ struct smsc47m1_sio_data { ...@@ -139,8 +139,7 @@ struct smsc47m1_sio_data {
}; };
static int smsc47m1_probe(struct platform_device *pdev); static int __exit smsc47m1_remove(struct platform_device *pdev);
static int __devexit smsc47m1_remove(struct platform_device *pdev);
static struct smsc47m1_data *smsc47m1_update_device(struct device *dev, static struct smsc47m1_data *smsc47m1_update_device(struct device *dev,
int init); int init);
...@@ -160,8 +159,7 @@ static struct platform_driver smsc47m1_driver = { ...@@ -160,8 +159,7 @@ static struct platform_driver smsc47m1_driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.name = DRVNAME, .name = DRVNAME,
}, },
.probe = smsc47m1_probe, .remove = __exit_p(smsc47m1_remove),
.remove = __devexit_p(smsc47m1_remove),
}; };
static ssize_t get_fan(struct device *dev, struct device_attribute static ssize_t get_fan(struct device *dev, struct device_attribute
...@@ -562,7 +560,7 @@ static int smsc47m1_handle_resources(unsigned short address, enum chips type, ...@@ -562,7 +560,7 @@ static int smsc47m1_handle_resources(unsigned short address, enum chips type,
return 0; return 0;
} }
static int __devinit smsc47m1_probe(struct platform_device *pdev) static int __init smsc47m1_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct smsc47m1_sio_data *sio_data = dev->platform_data; struct smsc47m1_sio_data *sio_data = dev->platform_data;
...@@ -720,7 +718,7 @@ static int __devinit smsc47m1_probe(struct platform_device *pdev) ...@@ -720,7 +718,7 @@ static int __devinit smsc47m1_probe(struct platform_device *pdev)
return err; return err;
} }
static int __devexit smsc47m1_remove(struct platform_device *pdev) static int __exit smsc47m1_remove(struct platform_device *pdev)
{ {
struct smsc47m1_data *data = platform_get_drvdata(pdev); struct smsc47m1_data *data = platform_get_drvdata(pdev);
struct resource *res; struct resource *res;
...@@ -845,27 +843,27 @@ static int __init sm_smsc47m1_init(void) ...@@ -845,27 +843,27 @@ static int __init sm_smsc47m1_init(void)
if (smsc47m1_find(&address, &sio_data)) if (smsc47m1_find(&address, &sio_data))
return -ENODEV; return -ENODEV;
err = platform_driver_register(&smsc47m1_driver); /* Sets global pdev as a side effect */
err = smsc47m1_device_add(address, &sio_data);
if (err) if (err)
goto exit; goto exit;
/* Sets global pdev as a side effect */ err = platform_driver_probe(&smsc47m1_driver, smsc47m1_probe);
err = smsc47m1_device_add(address, &sio_data);
if (err) if (err)
goto exit_driver; goto exit_device;
return 0; return 0;
exit_driver: exit_device:
platform_driver_unregister(&smsc47m1_driver); platform_device_unregister(pdev);
exit: exit:
return err; return err;
} }
static void __exit sm_smsc47m1_exit(void) static void __exit sm_smsc47m1_exit(void)
{ {
platform_device_unregister(pdev);
platform_driver_unregister(&smsc47m1_driver); platform_driver_unregister(&smsc47m1_driver);
platform_device_unregister(pdev);
} }
MODULE_AUTHOR("Mark D. Studebaker <mdsxyz123@yahoo.com>"); MODULE_AUTHOR("Mark D. Studebaker <mdsxyz123@yahoo.com>");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册