atheros: ar2315-spiflash: use devm_* API to simplify the code

Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>

SVN-Revision: 42489
master
John Crispin 10 years ago
parent f9e46af383
commit 7a4cf9adfd
  1. 48
      target/linux/atheros/patches-3.14/120-spiflash.patch

@ -23,7 +23,7 @@
--- /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
@ -452,41 +452,33 @@
+ 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);
@ -513,24 +505,14 @@
+#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;
+}

Loading…
Cancel
Save