/* Define max times to check status register before we give up. */
 #define        MAX_READY_WAIT_JIFFIES  (40 * HZ)       /* M25P16 specs 40s max chip erase */
-#define        MAX_CMD_SIZE            5
+#define        MAX_CMD_SIZE            6
 
 #define JEDEC_MFR(_jedec_id)   ((_jedec_id) >> 16)
 
                }
        }
 
-       flash = kzalloc(sizeof *flash, GFP_KERNEL);
+       flash = devm_kzalloc(&spi->dev, sizeof(*flash), GFP_KERNEL);
        if (!flash)
                return -ENOMEM;
-       flash->command = kmalloc(MAX_CMD_SIZE + (flash->fast_read ? 1 : 0),
-                                       GFP_KERNEL);
-       if (!flash->command) {
-               kfree(flash);
+
+       flash->command = devm_kzalloc(&spi->dev, MAX_CMD_SIZE, GFP_KERNEL);
+       if (!flash->command)
                return -ENOMEM;
-       }
 
        flash->spi = spi;
        mutex_init(&flash->lock);
 static int m25p_remove(struct spi_device *spi)
 {
        struct m25p     *flash = spi_get_drvdata(spi);
-       int             status;
 
        /* Clean up MTD stuff. */
-       status = mtd_device_unregister(&flash->mtd);
-       if (status == 0) {
-               kfree(flash->command);
-               kfree(flash);
-       }
+       mtd_device_unregister(&flash->mtd);
+
        return 0;
 }