lkml.org 
[lkml]   [2012]   [Aug]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH RESEND] mtd: lpc32xx_slc: Make driver independent of AMBA DMA engine driver
Date
This patch makes the SLC NAND driver independent of the single AMBA DMA engine
driver by using the platform data provided dma_filter callback.

(This also fixes the build error of the SLC NAND driver in case of module
linking because the (not exported) reference to pl08x_filter_id is gone now.)

Signed-off-by: Roland Stigge <stigge@antcom.de>

---
Applies to: v3.6-rc2

drivers/mtd/nand/lpc32xx_slc.c | 13 +++++++++++--
include/linux/mtd/lpc32xx_slc.h | 20 ++++++++++++++++++++
2 files changed, 31 insertions(+), 2 deletions(-)

--- linux-2.6.orig/drivers/mtd/nand/lpc32xx_slc.c
+++ linux-2.6/drivers/mtd/nand/lpc32xx_slc.c
@@ -37,7 +37,7 @@
#include <linux/of.h>
#include <linux/of_mtd.h>
#include <linux/of_gpio.h>
-#include <linux/amba/pl08x.h>
+#include <linux/mtd/lpc32xx_slc.h>

#define LPC32XX_MODNAME "lpc32xx-nand"

@@ -199,6 +199,7 @@ struct lpc32xx_nand_cfg_slc {

struct lpc32xx_nand_host {
struct nand_chip nand_chip;
+ struct lpc32xx_slc_platform_data *pdata;
struct clk *clk;
struct mtd_info mtd;
void __iomem *io_base;
@@ -714,9 +715,15 @@ static int lpc32xx_nand_dma_setup(struct
struct mtd_info *mtd = &host->mtd;
dma_cap_mask_t mask;

+ if (!host->pdata || !host->pdata->dma_filter) {
+ dev_err(mtd->dev.parent, "no DMA platform data\n");
+ return -ENOENT;
+ }
+
dma_cap_zero(mask);
dma_cap_set(DMA_SLAVE, mask);
- host->dma_chan = dma_request_channel(mask, pl08x_filter_id, "nand-slc");
+ host->dma_chan = dma_request_channel(mask, host->pdata->dma_filter,
+ "nand-slc");
if (!host->dma_chan) {
dev_err(mtd->dev.parent, "Failed to request DMA channel\n");
return -EBUSY;
@@ -814,6 +821,8 @@ static int __devinit lpc32xx_nand_probe(
}
lpc32xx_wp_disable(host);

+ host->pdata = pdev->dev.platform_data;
+
mtd = &host->mtd;
chip = &host->nand_chip;
chip->priv = host;
--- /dev/null
+++ linux-2.6/include/linux/mtd/lpc32xx_slc.h
@@ -0,0 +1,20 @@
+/*
+ * Platform data for LPC32xx SoC SLC NAND controller
+ *
+ * Copyright (C) 2012 Roland Stigge
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __LINUX_MTD_LPC32XX_SLC_H
+#define __LINUX_MTD_LPC32XX_SLC_H
+
+#include <linux/dmaengine.h>
+
+struct lpc32xx_slc_platform_data {
+ bool (*dma_filter)(struct dma_chan *chan, void *filter_param);
+};
+
+#endif /* __LINUX_MTD_LPC32XX_SLC_H */

\
 
 \ /
  Last update: 2012-08-23 01:01    [W:0.044 / U:1.332 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site