- pdev = platform_device_alloc("ucmb", i);
- if (!pdev) {
- printk(KERN_ERR PFX "Failed to allocate platform device.\n");
- break;
- }
- err = platform_device_add_data(pdev, pdata, sizeof(*pdata));
- if (err) {
- printk(KERN_ERR PFX "Failed to add platform data.\n");
- platform_device_put(pdev);
- break;
- }
- err = platform_device_add(pdev);
- if (err) {
- printk(KERN_ERR PFX "Failed to register platform device.\n");
- platform_device_put(pdev);
- break;
- }
- pdata->pdev = pdev;
+void ucmb_device_unregister(struct ucmb_platform_data *pdata)
+{
+ if (!pdata->pdev)
+ return;
+ platform_device_unregister(pdata->pdev);
+ platform_device_put(pdata->pdev);
+ pdata->pdev = NULL;
+}
+EXPORT_SYMBOL(ucmb_device_unregister);
+
+static int ucmb_modinit(void)
+{
+ int err;
+
+ printk(KERN_INFO "Microcontroller message bus driver\n");
+
+ err = spi_register_driver(&ucmb_spi_driver);
+ if (err) {
+ printk(KERN_ERR PFX "Failed to register SPI driver\n");
+ return err;
+ }
+ err = platform_driver_register(&ucmb_driver);
+ if (err) {
+ printk(KERN_ERR PFX "Failed to register platform driver\n");
+ spi_unregister_driver(&ucmb_spi_driver);
+ return err;