On 10/18/2012 6:56 PM, Matt Porter wrote: > Adds support for parsing the TI EDMA DT data into the required > EDMA private API platform data. > > Calls runtime PM API only in the DT case in order to unidle the > associated hwmods on AM33XX. Runtime PM is supported on DaVinci now, so if that was the reason for this choice, then it doesn't need to be that way. > > Signed-off-by: Matt Porter <mporter@xxxxxx> > --- > arch/arm/common/edma.c | 255 +++++++++++++++++++++++++-- > arch/arm/mach-davinci/board-da830-evm.c | 4 +- > arch/arm/mach-davinci/board-da850-evm.c | 8 +- > arch/arm/mach-davinci/board-dm646x-evm.c | 4 +- > arch/arm/mach-davinci/board-omapl138-hawk.c | 8 +- > arch/arm/mach-davinci/devices-da8xx.c | 8 +- > arch/arm/mach-davinci/devices-tnetv107x.c | 4 +- > arch/arm/mach-davinci/dm355.c | 4 +- > arch/arm/mach-davinci/dm365.c | 4 +- > arch/arm/mach-davinci/dm644x.c | 4 +- > arch/arm/mach-davinci/dm646x.c | 4 +- > include/linux/platform_data/edma.h | 8 +- > 12 files changed, 272 insertions(+), 43 deletions(-) > > diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c > index a3d189d..6d2a590 100644 > --- a/arch/arm/common/edma.c > +++ b/arch/arm/common/edma.c > @@ -24,6 +24,13 @@ > #include <linux/platform_device.h> > #include <linux/io.h> > #include <linux/slab.h> > +#include <linux/edma.h> > +#include <linux/err.h> > +#include <linux/of_address.h> > +#include <linux/of_device.h> > +#include <linux/of_dma.h> > +#include <linux/of_irq.h> > +#include <linux/pm_runtime.h> > > #include <linux/platform_data/edma.h> > > @@ -1366,31 +1373,237 @@ void edma_clear_event(unsigned channel) > EXPORT_SYMBOL(edma_clear_event); > > /*-----------------------------------------------------------------------*/ > +static int edma_of_read_u32_to_s8_array(const struct device_node *np, > + const char *propname, s8 *out_values, > + size_t sz) > +{ > + struct property *prop = of_find_property(np, propname, NULL); > + const __be32 *val; > + > + if (!prop) > + return -EINVAL; > + if (!prop->value) > + return -ENODATA; > + if ((sz * sizeof(u32)) > prop->length) > + return -EOVERFLOW; > + > + val = prop->value; > + > + while (sz--) > + *out_values++ = (s8)(be32_to_cpup(val++) & 0xff); > + > + /* Terminate it */ > + *out_values++ = -1; > + *out_values++ = -1; > + > + return 0; > +} > + > +static int edma_of_read_u32_to_s16_array(const struct device_node *np, > + const char *propname, s16 *out_values, > + size_t sz) > +{ > + struct property *prop = of_find_property(np, propname, NULL); > + const __be32 *val; > + > + if (!prop) > + return -EINVAL; > + if (!prop->value) > + return -ENODATA; > + if ((sz * sizeof(u32)) > prop->length) > + return -EOVERFLOW; > + > + val = prop->value; > + > + while (sz--) > + *out_values++ = (s16)(be32_to_cpup(val++) & 0xffff); > + > + /* Terminate it */ > + *out_values++ = -1; > + *out_values++ = -1; > + > + return 0; > +} I think these helper functions will have some general use beyond EDMA and can be kept in drivers/of/base.c. Grant/Rob need to agree though. > diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c > index 95b5e10..ffcbec1 100644 > --- a/arch/arm/mach-davinci/board-da830-evm.c > +++ b/arch/arm/mach-davinci/board-da830-evm.c > @@ -512,7 +512,7 @@ static struct davinci_i2c_platform_data da830_evm_i2c_0_pdata = { > * example: Timer, GPIO, UART events etc) on da830/omap-l137 EVM, hence > * they are being reserved for codecs on the DSP side. > */ > -static const s16 da830_dma_rsv_chans[][2] = { > +static s16 da830_dma_rsv_chans[][2] = { I wonder why you had to remove const here and in other places. You seem to be allocating new memory for DT case anyway. Its also not a good idea to modify the passed platform data. Thanks, Sekhar -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html