--- /dev/null
+++ b/drivers/mtd/devices/ar2315.c
-@@ -0,0 +1,536 @@
+@@ -0,0 +1,518 @@
+
+/*
+ * MTD driver for the SPI Flash Memory support on Atheros AR2315
+ int index;
+ int result = 0;
+
-+ priv = kzalloc(sizeof(struct spiflash_priv), GFP_KERNEL);
++ priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
++ if (!priv)
++ return -ENOMEM;
++
+ spin_lock_init(&priv->lock);
+ init_waitqueue_head(&priv->wq);
+ priv->state = FL_READY;
+ mtd = &priv->mtd;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-+ if (!res) {
-+ dev_err(&pdev->dev, "No MMR resource found\n");
-+ goto error;
-+ }
-+
-+ priv->mmraddr = ioremap_nocache(res->start, resource_size(res));
-+ if (!priv->mmraddr) {
-+ dev_warn(&pdev->dev, SPIFLASH "Failed to map flash device\n");
-+ goto error;
++ priv->mmraddr = devm_ioremap_resource(&pdev->dev, res);
++ if (IS_ERR(priv->mmraddr)) {
++ dev_warn(&pdev->dev, "failed to map flash MMR\n");
++ return PTR_ERR(priv->mmraddr);
+ }
+
+ index = spiflash_probe_chip(priv);
+ if (!index) {
+ dev_warn(&pdev->dev, SPIFLASH "Found no flash device\n");
-+ goto error;
++ return -ENODEV;
+ }
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+ if (!res) {
-+ dev_err(&pdev->dev, "No flash readmem resource found\n");
-+ goto error;
-+ }
-+
-+ priv->readaddr = ioremap_nocache(res->start,
-+ flashconfig_tbl[index].byte_cnt);
-+ if (!priv->readaddr) {
-+ dev_warn(&pdev->dev, SPIFLASH "Failed to map flash device\n");
-+ goto error;
++ priv->readaddr = devm_ioremap_resource(&pdev->dev, res);
++ if (IS_ERR(priv->readaddr)) {
++ dev_warn(&pdev->dev, "failed to map flash read mem\n");
++ return PTR_ERR(priv->readaddr);
+ }
+
+ platform_set_drvdata(pdev, priv);
+#endif
+
+ return result;
-+
-+error:
-+ if (priv->mmraddr)
-+ iounmap(priv->mmraddr);
-+ kfree(priv);
-+ return -ENXIO;
+}
+
+static int
+spiflash_remove(struct platform_device *pdev)
+{
+ struct spiflash_priv *priv = platform_get_drvdata(pdev);
-+ struct mtd_info *mtd = &priv->mtd;
+
-+ mtd_device_unregister(mtd);
-+ iounmap(priv->mmraddr);
-+ iounmap(priv->readaddr);
-+ kfree(priv);
++ mtd_device_unregister(&priv->mtd);
+
+ return 0;
+}