|
@@ -545,12 +545,15 @@ static int dcdbas_probe(struct platform_device *dev)
|
|
|
host_control_action = HC_ACTION_NONE;
|
|
|
host_control_smi_type = HC_SMITYPE_NONE;
|
|
|
|
|
|
+ dcdbas_pdev = dev;
|
|
|
+
|
|
|
/*
|
|
|
* BIOS SMI calls require buffer addresses be in 32-bit address space.
|
|
|
* This is done by setting the DMA mask below.
|
|
|
*/
|
|
|
- dcdbas_pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
|
|
|
- dcdbas_pdev->dev.dma_mask = &dcdbas_pdev->dev.coherent_dma_mask;
|
|
|
+ error = dma_set_coherent_mask(&dcdbas_pdev->dev, DMA_BIT_MASK(32));
|
|
|
+ if (error)
|
|
|
+ return error;
|
|
|
|
|
|
error = sysfs_create_group(&dev->dev.kobj, &dcdbas_attr_group);
|
|
|
if (error)
|
|
@@ -581,6 +584,14 @@ static struct platform_driver dcdbas_driver = {
|
|
|
.remove = dcdbas_remove,
|
|
|
};
|
|
|
|
|
|
+static const struct platform_device_info dcdbas_dev_info __initdata = {
|
|
|
+ .name = DRIVER_NAME,
|
|
|
+ .id = -1,
|
|
|
+ .dma_mask = DMA_BIT_MASK(32),
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device *dcdbas_pdev_reg;
|
|
|
+
|
|
|
/**
|
|
|
* dcdbas_init: initialize driver
|
|
|
*/
|
|
@@ -592,20 +603,14 @@ static int __init dcdbas_init(void)
|
|
|
if (error)
|
|
|
return error;
|
|
|
|
|
|
- dcdbas_pdev = platform_device_alloc(DRIVER_NAME, -1);
|
|
|
- if (!dcdbas_pdev) {
|
|
|
- error = -ENOMEM;
|
|
|
+ dcdbas_pdev_reg = platform_device_register_full(&dcdbas_dev_info);
|
|
|
+ if (IS_ERR(dcdbas_pdev_reg)) {
|
|
|
+ error = PTR_ERR(dcdbas_pdev_reg);
|
|
|
goto err_unregister_driver;
|
|
|
}
|
|
|
|
|
|
- error = platform_device_add(dcdbas_pdev);
|
|
|
- if (error)
|
|
|
- goto err_free_device;
|
|
|
-
|
|
|
return 0;
|
|
|
|
|
|
- err_free_device:
|
|
|
- platform_device_put(dcdbas_pdev);
|
|
|
err_unregister_driver:
|
|
|
platform_driver_unregister(&dcdbas_driver);
|
|
|
return error;
|
|
@@ -628,8 +633,9 @@ static void __exit dcdbas_exit(void)
|
|
|
* all sysfs attributes belonging to this module have been
|
|
|
* released.
|
|
|
*/
|
|
|
- smi_data_buf_free();
|
|
|
- platform_device_unregister(dcdbas_pdev);
|
|
|
+ if (dcdbas_pdev)
|
|
|
+ smi_data_buf_free();
|
|
|
+ platform_device_unregister(dcdbas_pdev_reg);
|
|
|
platform_driver_unregister(&dcdbas_driver);
|
|
|
}
|
|
|
|