2013-06-18 18:16:57 +02:00
/*
* SHDMA Device Tree glue
*
* Copyright ( C ) 2013 Renesas Electronics Inc .
* Author : Guennadi Liakhovetski < g . liakhovetski @ gmx . de >
*
* This is free software ; you can redistribute it and / or modify
* it under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation .
*/
# include <linux/dmaengine.h>
# include <linux/module.h>
# include <linux/of.h>
# include <linux/of_dma.h>
# include <linux/of_platform.h>
# include <linux/platform_device.h>
# include <linux/shdma-base.h>
# define to_shdma_chan(c) container_of(c, struct shdma_chan, dma_chan)
static struct dma_chan * shdma_of_xlate ( struct of_phandle_args * dma_spec ,
struct of_dma * ofdma )
{
u32 id = dma_spec - > args [ 0 ] ;
dma_cap_mask_t mask ;
struct dma_chan * chan ;
if ( dma_spec - > args_count ! = 1 )
return NULL ;
dma_cap_zero ( mask ) ;
/* Only slave DMA channels can be allocated via DT */
dma_cap_set ( DMA_SLAVE , mask ) ;
2013-12-11 15:29:15 +01:00
chan = dma_request_channel ( mask , shdma_chan_filter ,
( void * ) ( uintptr_t ) id ) ;
2013-06-18 18:16:57 +02:00
if ( chan )
to_shdma_chan ( chan ) - > hw_req = id ;
return chan ;
}
static int shdma_of_probe ( struct platform_device * pdev )
{
2013-07-30 17:09:11 +09:00
const struct of_dev_auxdata * lookup = dev_get_platdata ( & pdev - > dev ) ;
2013-06-18 18:16:57 +02:00
int ret ;
ret = of_dma_controller_register ( pdev - > dev . of_node ,
shdma_of_xlate , pdev ) ;
if ( ret < 0 )
return ret ;
ret = of_platform_populate ( pdev - > dev . of_node , NULL , lookup , & pdev - > dev ) ;
if ( ret < 0 )
of_dma_controller_free ( pdev - > dev . of_node ) ;
return ret ;
}
static const struct of_device_id shdma_of_match [ ] = {
{ . compatible = " renesas,shdma-mux " , } ,
{ }
} ;
MODULE_DEVICE_TABLE ( of , sh_dmae_of_match ) ;
static struct platform_driver shdma_of = {
. driver = {
. name = " shdma-of " ,
. of_match_table = shdma_of_match ,
} ,
. probe = shdma_of_probe ,
} ;
module_platform_driver ( shdma_of ) ;
MODULE_LICENSE ( " GPL v2 " ) ;
MODULE_DESCRIPTION ( " SH-DMA driver DT glue " ) ;
MODULE_AUTHOR ( " Guennadi Liakhovetski <g.liakhovetski@gmx.de> " ) ;