From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dong Aisheng Subject: [PATCH 3/5] dma: mxs-dma: add device tree probe support Date: Wed, 18 Apr 2012 20:46:35 +0800 Message-ID: <1334753197-12032-4-git-send-email-b29396@freescale.com> References: <1334753197-12032-1-git-send-email-b29396@freescale.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1334753197-12032-1-git-send-email-b29396@freescale.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-arm-kernel-bounces@lists.infradead.org Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: linux-arm-kernel@lists.infradead.org Cc: b32955@freescale.com, vinod.koul@intel.com, devicetree-discuss@lists.ozlabs.org, rob.herring@calxeda.com, grant.likely@secretlab.ca, marek.vasut@gmail.com, kernel@pengutronix.de, dan.j.williams@intel.com, s.hauer@pengutronix.de, shawn.guo@freescale.com List-Id: devicetree@vger.kernel.org From: Dong Aisheng Cc: Grant Likely Cc: Rob Herring Cc: Rob Landley Cc: Vinod Koul Cc: Dan Williams Cc: Shawn Guo Cc: Sascha Hauer Cc: Marek Vasut Cc: Huang Shijie Signed-off-by: Dong Aisheng --- .../devicetree/bindings/dma/fsl-mxs-dma.txt | 19 +++++++++++++ drivers/dma/mxs-dma.c | 29 +++++++++++++++++--- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt b/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt new file mode 100644 index 0000000..ded0398 --- /dev/null +++ b/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt @@ -0,0 +1,19 @@ +* Freescale MXS DMA + +Required properties: +- compatible : Should be "fsl,-dma-apbh" or "fsl,-dma-apbx" +- reg : Should contain registers location and length + +Supported chips: +imx23, imx28. + +Examples: +dma-apbh@80004000 { + compatible = "fsl,imx28-dma-apbh"; + reg = <0x80004000 2000>; +}; + +dma-apbx@80024000 { + compatible = "fsl,imx28-dma-apbx"; + reg = <0x80024000 2000>; +}; diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c index 51a29f9..74c3275 100644 --- a/drivers/dma/mxs-dma.c +++ b/drivers/dma/mxs-dma.c @@ -22,8 +22,11 @@ #include #include #include +#include #include #include +#include +#include #include @@ -178,6 +181,17 @@ static struct platform_device_id mxs_dma_idt[] = { } }; +#ifdef CONFIG_OF +static const struct of_device_id mxs_dma_dt_ids[] = { + { .compatible = "fsl,imx23-dma-apbh", .data = &mxs_dma_idt[0], }, + { .compatible = "fsl,imx23-dma-apbx", .data = &mxs_dma_idt[1], }, + { .compatible = "fsl,imx28-dma-apbh", .data = &mxs_dma_idt[2], }, + { .compatible = "fsl,imx28-dma-apbx", .data = &mxs_dma_idt[3], }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, mxs_dma_dt_ids); +#endif + static struct mxs_dma_chan *to_mxs_dma_chan(struct dma_chan *chan) { return container_of(chan, struct mxs_dma_chan, chan); @@ -671,10 +685,9 @@ err_out: static int __init mxs_dma_probe(struct platform_device *pdev) { - const struct platform_device_id *id_entry = - platform_get_device_id(pdev); - const struct mxs_dma_type *mtype = - (struct mxs_dma_type *)id_entry->driver_data; + const struct platform_device_id *id_entry; + const struct of_device_id *of_id; + const struct mxs_dma_type *mtype; struct mxs_dma_engine *mxs_dma; struct resource *iores; int ret, i; @@ -683,6 +696,13 @@ static int __init mxs_dma_probe(struct platform_device *pdev) if (!mxs_dma) return -ENOMEM; + of_id = of_match_device(mxs_dma_dt_ids, &pdev->dev); + if (of_id) + id_entry = of_id->data; + else + id_entry = platform_get_device_id(pdev); + + mtype = (struct mxs_dma_type *)id_entry->driver_data; mxs_dma->type = mtype->type; mxs_dma->dev_id = mtype->id; @@ -770,6 +790,7 @@ err_request_region: static struct platform_driver mxs_dma_driver = { .driver = { .name = "mxs-dma", + .of_match_table = of_match_ptr(mxs_dma_dt_ids), }, .id_table = mxs_dma_idt, }; -- 1.7.0.4