Re: [PATCH 6/6] i2c: davinci: use devm_ functions

2012-08-27 Thread Julia Lawall

From: Julia Lawall 

The various devm_ functions allocate memory that is released when a driver
detaches.  This patch uses these functions for data that is allocated in
the probe function of a platform device and is only freed in the remove
function.

The call to platform_get_resource is moved down to the call to
devm_request_and_ioremap that uses it.

Signed-off-by: Julia Lawall 

---
Not compiled.
I was not sure what to do with the comment on the first line, so I just
left it where it is.
I was also concerned about the calls to get_device and put_device, and
whether they would cause &pdev->dev to be freed before the devm-allocated
objects were freed.  Most other platform drivers don't seem to have these
calls.

v2: deleted the now unused ioarea variable and changed some label names to
be more meaningful.

 drivers/i2c/busses/i2c-davinci.c |   53 +--
 1 file changed, 13 insertions(+), 40 deletions(-)


diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c
index b6185dc..30afa7c 100644
--- a/drivers/i2c/busses/i2c-davinci.c
+++ b/drivers/i2c/busses/i2c-davinci.c
@@ -643,34 +643,20 @@ static int davinci_i2c_probe(struct platform_device *pdev)
 {
struct davinci_i2c_dev *dev;
struct i2c_adapter *adap;
-   struct resource *mem, *irq, *ioarea;
+   struct resource *mem, *irq;
int r;

/* NOTE: driver uses the static register mapping */
-   mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!mem) {
-   dev_err(&pdev->dev, "no mem resource?\n");
-   return -ENODEV;
-   }
-
irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (!irq) {
dev_err(&pdev->dev, "no irq resource?\n");
return -ENODEV;
}

-   ioarea = request_mem_region(mem->start, resource_size(mem),
-   pdev->name);
-   if (!ioarea) {
-   dev_err(&pdev->dev, "I2C region already claimed\n");
-   return -EBUSY;
-   }
-
-   dev = kzalloc(sizeof(struct davinci_i2c_dev), GFP_KERNEL);
-   if (!dev) {
-   r = -ENOMEM;
-   goto err_release_region;
-   }
+   dev = devm_kzalloc(&pdev->dev, sizeof(struct davinci_i2c_dev),
+  GFP_KERNEL);
+   if (!dev)
+   return -ENOMEM;

init_completion(&dev->cmd_complete);
 #ifdef CONFIG_CPU_FREQ
@@ -699,22 +685,24 @@ static int davinci_i2c_probe(struct platform_device *pdev)
dev->pdata = &davinci_i2c_platform_data_default;
}

-   dev->clk = clk_get(&pdev->dev, NULL);
+   dev->clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(dev->clk)) {
r = -ENODEV;
goto err_free_mem;
}
clk_enable(dev->clk);

-   dev->base = ioremap(mem->start, resource_size(mem));
+   mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+   dev->base = devm_request_and_ioremap(&pdev->dev, mem);
if (!dev->base) {
r = -EBUSY;
-   goto err_mem_ioremap;
+   goto err_unuse_clocks;
}

i2c_davinci_init(dev);

-   r = request_irq(dev->irq, i2c_davinci_isr, 0, pdev->name, dev);
+   r = devm_request_irq(&pdev->dev, dev->irq, i2c_davinci_isr, 0,
+pdev->name, dev);
if (r) {
dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq);
goto err_unuse_clocks;
@@ -723,7 +711,7 @@ static int davinci_i2c_probe(struct platform_device *pdev)
r = i2c_davinci_cpufreq_register(dev);
if (r) {
dev_err(&pdev->dev, "failed to register cpufreq\n");
-   goto err_free_irq;
+   goto err_unuse_clocks;
}

adap = &dev->adapter;
@@ -740,26 +728,18 @@ static int davinci_i2c_probe(struct platform_device *pdev)
r = i2c_add_numbered_adapter(adap);
if (r) {
dev_err(&pdev->dev, "failure adding adapter\n");
-   goto err_free_irq;
+   goto err_unuse_clocks;
}
of_i2c_register_devices(adap);

return 0;

-err_free_irq:
-   free_irq(dev->irq, dev);
 err_unuse_clocks:
-   iounmap(dev->base);
-err_mem_ioremap:
clk_disable(dev->clk);
-   clk_put(dev->clk);
dev->clk = NULL;
 err_free_mem:
platform_set_drvdata(pdev, NULL);
put_device(&pdev->dev);
-   kfree(dev);
-err_release_region:
-   release_mem_region(mem->start, resource_size(mem));

return r;
 }
@@ -767,7 +747,6 @@ err_release_region:
 static int davinci_i2c_remove(struct platform_device *pdev)
 {
struct davinci_i2c_dev *dev = platform_get_drvdata(pdev);
-   struct resource *mem;

i2c_davinci_cpufreq_deregister(dev);

@@ -776,16 +755,10 @@ static int davinci_i2c_remove(struct platform_device 
*pdev)
put_device(&pdev->dev);

  

Re: [PATCH V2 5/6] ASoC: Davinci: machine: Add device tree binding

2012-08-27 Thread Mark Brown
On Mon, Aug 27, 2012 at 06:56:43PM +0530, Hebbar, Gururaja wrote:
> Device tree support for tlv320aic3x CODEC driver

Not really for the CODEC - this is a machine driver.

> +- dai-data   : A list of DAI data used by SOC code to register
> +   DAI, Codecs platform.
> +   The string index "should" be as shown below.
> +dai-data =
> +"","",
> +"",  "",
> +"";

What do these different ops do - how would the user figure it out or if
they're needed at all?
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH V2 4/6] ASoC: Davinci: McASP: add device tree support for McASP

2012-08-27 Thread Mark Brown
On Mon, Aug 27, 2012 at 06:56:42PM +0530, Hebbar, Gururaja wrote:
> Add device tree probe for McASP driver.

Applied, thanks.
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH V2 2/6] ARM: Davinci: Remove references to davinci pcm

2012-08-27 Thread Mark Brown
On Mon, Aug 27, 2012 at 06:56:40PM +0530, Hebbar, Gururaja wrote:
> Since davinci-pcm is no more a platform_driver but helper to register
> "platform" pcm driver, remove  davinci-pcm device registration

Applied, thanks.
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH V2 3/6] ASoC/ARM: Davinci: McASP: split asp header into platform and audio specific

2012-08-27 Thread Mark Brown
On Mon, Aug 27, 2012 at 06:56:41PM +0530, Hebbar, Gururaja wrote:
> Davinci McASP header & driver are shared by few OMAP platforms (like
> TI81xx, AM335x). Splitting asp header into Davinci platform specific
> header and Audio specific header helps to share them across platforms.

Applied, thanks.
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH V2 1/6] ASoC: davinci: davinci-pcm does not need to be a plaform_driver

2012-08-27 Thread Mark Brown
On Mon, Aug 27, 2012 at 06:56:39PM +0530, Hebbar, Gururaja wrote:
> Same as the commit 518de86 (ASoC: tegra: register 'platform' from DAIs,
> get rid of pdev). It makes davinci-pcm not a platform_driver but helper
> to register "platform", so that the platform_device for davinci-pcm can
> be saved completely.

Applied, thanks.
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH V2 4/6] ASoC: Davinci: McASP: add device tree support for McASP

2012-08-27 Thread Mark Brown
On Mon, Aug 27, 2012 at 06:56:42PM +0530, Hebbar, Gururaja wrote:

> +- sram-size-playback : size of sram to be allocated during playback
> +- sram-size-capture  : size of sram to be allocated during capture

These smell like runtime/policy configuration rather than fixed
properties of the device so it probably shouldn't appear in the device
tree, ideally at some point in the future we'll be able to work out some
wonderful way of automatically allocating the resources.

That said if the rest of the series looks OK I'll apply this but it'd be
nice to get these numbers from somewhere else.
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH V2 6/6] ASoC: tlv320aic3x: Add device tree bindings

2012-08-27 Thread Mark Brown
On Mon, Aug 27, 2012 at 06:56:44PM +0530, Hebbar, Gururaja wrote:

> Device tree support for tlv320aic3x CODEC driver.

Applied, thanks.
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH 6/6] i2c: davinci: use devm_ functions

2012-08-27 Thread Sergei Shtylyov
Hello.

On 08/25/2012 09:41 PM, Julia Lawall wrote:

> From: Julia Lawall 

> The various devm_ functions allocate memory that is released when a driver
> detaches.  This patch uses these functions for data that is allocated in
> the probe function of a platform device and is only freed in the remove
> function.

> The call to platform_get_resource is moved down to the call to
> devm_request_and_ioremap that uses it.

> Signed-off-by: Julia Lawall 

> ---
> Not compiled.

   I see. :-)

> I was not sure what to do with the comment on the first line, so I just
> left it where it is.
> I was also concerned about the calls to get_device and put_device, and
> whether they would cause &pdev->dev to be freed before the devm-allocated
> objects were freed.  Most other platform drivers don't seem to have these
> calls.

>  drivers/i2c/busses/i2c-davinci.c |   51 
> +--
>  1 file changed, 12 insertions(+), 39 deletions(-)

> diff --git a/drivers/i2c/busses/i2c-davinci.c 
> b/drivers/i2c/busses/i2c-davinci.c
> index b6185dc..c8e9c87 100644
> --- a/drivers/i2c/busses/i2c-davinci.c
> +++ b/drivers/i2c/busses/i2c-davinci.c
> @@ -647,30 +647,16 @@ static int davinci_i2c_probe(struct platform_device 
> *pdev)
>   int r;
>  
>   /* NOTE: driver uses the static register mapping */
> - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> - if (!mem) {
> - dev_err(&pdev->dev, "no mem resource?\n");
> - return -ENODEV;
> - }
> -
>   irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
>   if (!irq) {
>   dev_err(&pdev->dev, "no irq resource?\n");
>   return -ENODEV;
>   }
>  
> - ioarea = request_mem_region(mem->start, resource_size(mem),
> - pdev->name);
> - if (!ioarea) {
> - dev_err(&pdev->dev, "I2C region already claimed\n");
> - return -EBUSY;
> - }

   Shouldn't you have dropped the 'ioarea' variable? It should be unused now...

> @@ -699,14 +685,15 @@ static int davinci_i2c_probe(struct platform_device 
> *pdev)
[...]
> - dev->base = ioremap(mem->start, resource_size(mem));
> + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);

   Why you dropped check form 'mem' being NULL?

> + dev->base = devm_request_and_ioremap(&pdev->dev, mem);
>   if (!dev->base) {
>   r = -EBUSY;
>   goto err_mem_ioremap;
> @@ -714,16 +701,17 @@ static int davinci_i2c_probe(struct platform_device 
> *pdev)
>  
>   i2c_davinci_init(dev);
>  
> - r = request_irq(dev->irq, i2c_davinci_isr, 0, pdev->name, dev);
> + r = devm_request_irq(&pdev->dev, dev->irq, i2c_davinci_isr, 0,
> +  pdev->name, dev);
>   if (r) {
>   dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq);
> - goto err_unuse_clocks;
> + goto err_mem_ioremap;

   The label no longer corresponds the failure happening. Perhaps it's better to
leave 'err_unuse_clocks'...

>   }
>  
>   r = i2c_davinci_cpufreq_register(dev);
>   if (r) {
>   dev_err(&pdev->dev, "failed to register cpufreq\n");
> - goto err_free_irq;
> + goto err_mem_ioremap;

   Ditto...

> @@ -740,26 +728,18 @@ static int davinci_i2c_probe(struct platform_device 
> *pdev)
>   r = i2c_add_numbered_adapter(adap);
>   if (r) {
>   dev_err(&pdev->dev, "failure adding adapter\n");
> - goto err_free_irq;
> + goto err_mem_ioremap;

   Ditto...

WBR, Sergei

___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH 6/6] i2c: davinci: use devm_ functions

2012-08-27 Thread Julia Lawall
> > -   ioarea = request_mem_region(mem->start, resource_size(mem),
> > -   pdev->name);
> > -   if (!ioarea) {
> > -   dev_err(&pdev->dev, "I2C region already claimed\n");
> > -   return -EBUSY;
> > -   }
>
>Shouldn't you have dropped the 'ioarea' variable? It should be unused 
> now...

Indeed, this is probably the case.  I will check.

> > @@ -699,14 +685,15 @@ static int davinci_i2c_probe(struct platform_device 
> > *pdev)
> [...]
> > -   dev->base = ioremap(mem->start, resource_size(mem));
> > +   mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>
>Why you dropped check form 'mem' being NULL?

devm_request_and_ioremap does the check.  There have been some discussions
about this before.  Since the code is overall complicated and error-prone,
it seems better to minimize it when possible.

> > +   dev->base = devm_request_and_ioremap(&pdev->dev, mem);
> > if (!dev->base) {
> > r = -EBUSY;
> > goto err_mem_ioremap;
> > @@ -714,16 +701,17 @@ static int davinci_i2c_probe(struct platform_device 
> > *pdev)
> >
> > i2c_davinci_init(dev);
> >
> > -   r = request_irq(dev->irq, i2c_davinci_isr, 0, pdev->name, dev);
> > +   r = devm_request_irq(&pdev->dev, dev->irq, i2c_davinci_isr, 0,
> > +pdev->name, dev);
> > if (r) {
> > dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq);
> > -   goto err_unuse_clocks;
> > +   goto err_mem_ioremap;
>
>The label no longer corresponds the failure happening. Perhaps it's better 
> to
> leave 'err_unuse_clocks'...

OK.  It seemed nicer not to have a stack of empty labels...

I'll send another patch shortly.

julia

> > }
> >
> > r = i2c_davinci_cpufreq_register(dev);
> > if (r) {
> > dev_err(&pdev->dev, "failed to register cpufreq\n");
> > -   goto err_free_irq;
> > +   goto err_mem_ioremap;
>
>Ditto...
>
> > @@ -740,26 +728,18 @@ static int davinci_i2c_probe(struct platform_device 
> > *pdev)
> > r = i2c_add_numbered_adapter(adap);
> > if (r) {
> > dev_err(&pdev->dev, "failure adding adapter\n");
> > -   goto err_free_irq;
> > +   goto err_mem_ioremap;
>
>Ditto...
>
> WBR, Sergei
>
> --
> To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH v3 0/3] DaVinci DMA engine conversion

2012-08-27 Thread Daniel Mack
Hi Matt,

On 23.08.2012 03:09, Matt Porter wrote:
> This series begins the conversion of the DaVinci private EDMA API
> implementation to a DMA engine driver and converts two of the three
> in-kernel users of the private EDMA API to DMA engine.
> 
> The approach taken is similar to the recent OMAP DMA Engine
> conversion. The EDMA DMA Engine driver is a wrapper around the existing
> private EDMA implementation and registers the platform device within
> the driver.  This allows the conversion series to stand alone with just
> the drivers and no changes to platform code. It also allows peripheral
> drivers to continue to use the private EDMA implementation until they
> are converted.
> 
> The EDMA DMA Engine driver supports slave transfers only at this time. It
> is planned to add cyclic transfers in support of audio peripherals.
> 
> There are three users of the private EDMA API in the kernel now:
> davinci_mmc, spi-davinci, and davinci-mcasp.  This series provides DMA
> Engine conversions for the davinci_mmc and spi-davinci drivers which
> use the supported slave transfers.
> 
> This series has been tested on an AM18x EVM and Hawkboard with
> driver performance comparable to that of the private EDMA API
> implementations. Both MMC0 and MMC1 are tested which handles the
> DA850/OMAP-L138/AM18x specific case where MMC1 uses DMA channels on
> a second EDMA channel controller.  All other platforms have a simpler
> design with just a single EDMA channel controller.
> 
> For those wanting to easily test this series, I've pushed a branch for
> each version to my github tree at https://github.com/ohporter/linux. The
> current branch is edma-dmaengine-v3.
> 
> After this series, the current plan is to complete the mcasp driver
> conversion which includes adding cyclic dma support. This will then
> enable the removal and refactoring of the private EDMA API functionality
> into the EDMA DMA Engine driver.  Since EDMA is also used on the AM33xx
> family of parts in mach-omap2/, the plan is to enable this driver on
> that platform as well.

Once you have a patch for the McASP driver conversion, I can happily
test this on a AM33xx board, together with Gururaja's latest McASP
refactoring series. Let me know how I can help you here.


Thanks,
Daniel

___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


[PATCH V2 0/6] ARM/ASoC: Davinci: Add Device Tree Support

2012-08-27 Thread Hebbar, Gururaja
This patch-set is a cumulative of below tasks
1. Split asp header into platform and audio specific
   Davinci driver is shared by few OMAP platforms (like TI81xx, AM335x).
   Splitting asp header into Davinci platform specific and Audio specific helps
   to share them across platforms.

2. Add DT support for Davinci Audio Module (McASP, machine, pcm & Codec)


This patch was tested on AM18x Board (Tested to check if the commits doesn't
break on compile or runtime) and is based on repo at 
http://git.kernel.org/?p=linux/kernel/git/broonie/sound.git;
a=shortlog;h=refs/heads/for-3.7 (v3.6-rc2)

Note:
Matt Porter from TI is working on DMA engine conversion of DaVinci EDMA
support and DT conversion of DMA parts will be taken up post that is
complete.
Since Audio requires DMA to work, this patch set does not yet provide
complete functionality required to use sound on DT-based platforms, but
is a step towards that direction.

Changes from V1:
- Instanciate seudo-device (davinci-pcm) directly from DAI driver rather
  than having a separate virtual-device registered
- add more explanation to DT parameters
- Change DT parameter from "ti,codec-clock" to "ti,codec-clock-rate"
- use standard DT GPIO reference by phandle to populate gpio based DT
  parameters
- Dont return err if some DT parameters are missing. They will be
  treated as 0.
- Through Error warning if num-serializer != "serial-dir" array size
- Coding Style correction

Hebbar, Gururaja (6):
  ASoC: davinci: davinci-pcm does not need to be a plaform_driver
  ARM: Davinci: Remove references to davinci pcm
  ASoC/ARM: Davinci: McASP: split asp header into platform and audio
specific
  ASoC: Davinci: McASP: add device tree support for McASP
  ASoC: Davinci: machine: Add device tree binding
  ASoC: tlv320aic3x: Add device tree bindings

 .../bindings/sound/davinci-evm-audio.txt   |   63 ++
 .../bindings/sound/davinci-mcasp-audio.txt |   44 +
 .../devicetree/bindings/sound/tlv320aic3x.txt  |   20 ++
 arch/arm/mach-davinci/asp.h|   49 +
 arch/arm/mach-davinci/davinci.h|3 +-
 arch/arm/mach-davinci/devices-da8xx.c  |8 +-
 arch/arm/mach-davinci/devices.c|   11 -
 arch/arm/mach-davinci/dm355.c  |2 +-
 arch/arm/mach-davinci/dm365.c  |2 +-
 arch/arm/mach-davinci/dm644x.c |2 +-
 arch/arm/mach-davinci/dm646x.c |2 +-
 arch/arm/mach-davinci/include/mach/da8xx.h |2 +-
 .../linux/platform_data/davinci_asp.h  |   73 ++-
 sound/soc/codecs/tlv320aic3x.c |   31 +++
 sound/soc/davinci/davinci-evm.c|  203 +---
 sound/soc/davinci/davinci-i2s.c|   13 +-
 sound/soc/davinci/davinci-mcasp.c  |  134 +-
 sound/soc/davinci/davinci-mcasp.h  |3 +-
 sound/soc/davinci/davinci-pcm.c|   24 +--
 sound/soc/davinci/davinci-pcm.h|6 +-
 sound/soc/davinci/davinci-sffsdr.c |2 +-
 sound/soc/davinci/davinci-vcif.c   |8 +
 22 files changed, 573 insertions(+), 132 deletions(-)
 create mode 100644 
Documentation/devicetree/bindings/sound/davinci-evm-audio.txt
 create mode 100644 
Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt
 create mode 100644 Documentation/devicetree/bindings/sound/tlv320aic3x.txt
 create mode 100644 arch/arm/mach-davinci/asp.h
 rename arch/arm/mach-davinci/include/mach/asp.h => 
include/linux/platform_data/davinci_asp.h (56%)

___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


[PATCH V2 6/6] ASoC: tlv320aic3x: Add device tree bindings

2012-08-27 Thread Hebbar, Gururaja
Device tree support for tlv320aic3x CODEC driver.

Signed-off-by: Hebbar, Gururaja 
---
Changes from V1:
- use standard DT GPIO reference by phandle to populate gpio based DT
  parameters

:00 100644 000... e7b98f4... A  
Documentation/devicetree/bindings/sound/tlv320aic3x.txt
:100644 100644 01485bd... 5708a97... M  sound/soc/codecs/tlv320aic3x.c
 .../devicetree/bindings/sound/tlv320aic3x.txt  |   20 +
 sound/soc/codecs/tlv320aic3x.c |   31 
 2 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/Documentation/devicetree/bindings/sound/tlv320aic3x.txt 
b/Documentation/devicetree/bindings/sound/tlv320aic3x.txt
new file mode 100644
index 000..e7b98f4
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/tlv320aic3x.txt
@@ -0,0 +1,20 @@
+Texas Instruments - tlv320aic3x Codec module
+
+The tlv320aic3x serial control bus communicates through I2C protocols
+
+Required properties:
+- compatible - "string" -  "ti,tlv320aic3x"
+- reg -  -  I2C slave address
+
+
+Optional properties:
+
+- gpio-reset - gpio pin number used for codec reset
+- ai3x-gpio-func -  - AIC3X_GPIO1 & AIC3X_GPIO2 Functionality
+
+Example:
+
+tlv320aic3x: tlv320aic3x@1b {
+   compatible = "ti,tlv320aic3x";
+   reg = <0x1b>;
+};
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c
index 01485bd..5708a97 100644
--- a/sound/soc/codecs/tlv320aic3x.c
+++ b/sound/soc/codecs/tlv320aic3x.c
@@ -40,6 +40,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -1457,6 +1458,8 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,
 {
struct aic3x_pdata *pdata = i2c->dev.platform_data;
struct aic3x_priv *aic3x;
+   struct aic3x_setup_data *ai3x_setup;
+   struct device_node *np = i2c->dev.of_node;
int ret;
 
aic3x = devm_kzalloc(&i2c->dev, sizeof(struct aic3x_priv), GFP_KERNEL);
@@ -1471,6 +1474,25 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,
if (pdata) {
aic3x->gpio_reset = pdata->gpio_reset;
aic3x->setup = pdata->setup;
+   } else if (np) {
+   ai3x_setup = devm_kzalloc(&i2c->dev, sizeof(*ai3x_setup),
+   GFP_KERNEL);
+   if (ai3x_setup == NULL) {
+   dev_err(&i2c->dev, "failed to create private data\n");
+   return -ENOMEM;
+   }
+
+   ret = of_get_named_gpio(np, "gpio-reset", 0);
+   if (ret >= 0)
+   aic3x->gpio_reset = ret;
+   else
+   aic3x->gpio_reset = -1;
+
+   if (of_property_read_u32_array(np, "ai3x-gpio-func",
+   ai3x_setup->gpio_func, 2) >= 0) {
+   aic3x->setup = ai3x_setup;
+   }
+
} else {
aic3x->gpio_reset = -1;
}
@@ -1488,11 +1510,20 @@ static int aic3x_i2c_remove(struct i2c_client *client)
return 0;
 }
 
+#if defined(CONFIG_OF)
+static const struct of_device_id tlv320aic3x_of_match[] = {
+   { .compatible = "ti,tlv320aic3x", },
+   {},
+};
+MODULE_DEVICE_TABLE(of, tlv320aic3x_of_match);
+#endif
+
 /* machine i2c codec control layer */
 static struct i2c_driver aic3x_i2c_driver = {
.driver = {
.name = "tlv320aic3x-codec",
.owner = THIS_MODULE,
+   .of_match_table = of_match_ptr(tlv320aic3x_of_match),
},
.probe  = aic3x_i2c_probe,
.remove = aic3x_i2c_remove,
-- 
1.7.1

___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


[PATCH V2 2/6] ARM: Davinci: Remove references to davinci pcm

2012-08-27 Thread Hebbar, Gururaja
Since davinci-pcm is no more a platform_driver but helper to register
"platform" pcm driver, remove  davinci-pcm device registration

Signed-off-by: Hebbar, Gururaja 
---
Changes from V1:
- New Commit. 

:100644 100644 783eab6... 4735d64... M  arch/arm/mach-davinci/devices-da8xx.c
:100644 100644 d2f96662.. 70056fb... M  arch/arm/mach-davinci/devices.c
 arch/arm/mach-davinci/devices-da8xx.c |7 ---
 arch/arm/mach-davinci/devices.c   |   11 ---
 2 files changed, 0 insertions(+), 18 deletions(-)

diff --git a/arch/arm/mach-davinci/devices-da8xx.c 
b/arch/arm/mach-davinci/devices-da8xx.c
index 783eab6..4735d64 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c
@@ -505,15 +505,8 @@ static struct platform_device da850_mcasp_device = {
.resource   = da850_mcasp_resources,
 };
 
-static struct platform_device davinci_pcm_device = {
-   .name   = "davinci-pcm-audio",
-   .id = -1,
-};
-
 void __init da8xx_register_mcasp(int id, struct snd_platform_data *pdata)
 {
-   platform_device_register(&davinci_pcm_device);
-
/* DA830/OMAP-L137 has 3 instances of McASP */
if (cpu_is_davinci_da830() && id == 1) {
da830_mcasp1_device.dev.platform_data = pdata;
diff --git a/arch/arm/mach-davinci/devices.c b/arch/arm/mach-davinci/devices.c
index d2f9666..70056fb 100644
--- a/arch/arm/mach-davinci/devices.c
+++ b/arch/arm/mach-davinci/devices.c
@@ -313,16 +313,6 @@ static void davinci_init_wdt(void)
 
 /*-*/
 
-static struct platform_device davinci_pcm_device = {
-   .name   = "davinci-pcm-audio",
-   .id = -1,
-};
-
-static void davinci_init_pcm(void)
-{
-   platform_device_register(&davinci_pcm_device);
-}
-
 /*-*/
 
 struct davinci_timer_instance davinci_timer_instance[2] = {
@@ -345,7 +335,6 @@ static int __init davinci_init_devices(void)
/* please keep these calls, and their implementations above,
 * in alphabetical order so they're easier to sort through.
 */
-   davinci_init_pcm();
davinci_init_wdt();
 
return 0;
-- 
1.7.1

___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


[PATCH V2 3/6] ASoC/ARM: Davinci: McASP: split asp header into platform and audio specific

2012-08-27 Thread Hebbar, Gururaja
Davinci McASP header & driver are shared by few OMAP platforms (like
TI81xx, AM335x). Splitting asp header into Davinci platform specific
header and Audio specific header helps to share them across platforms.

Audio specific defines is moved to to common
 so that the header can be
accessed by all related platforms.

While here, correct the header usage (remove multiple header
re-definitions and unused headers) and remove platform names from
structures comments and enum. Also some some coding style errors.

Signed-off-by: Hebbar, Gururaja 
Acked-by: Vaibhav Bedia 

---
Changes from V1:
- Coding Style Correction

:00 100644 000... d9b2acd... A  arch/arm/mach-davinci/asp.h
:100644 100644 8db0fc6... 8661b20... M  arch/arm/mach-davinci/davinci.h
:100644 100644 4735d64... bd2f72b... M  arch/arm/mach-davinci/devices-da8xx.c
:100644 100644 678cd99... e47a3f0... M  arch/arm/mach-davinci/dm355.c
:100644 100644 a50d49de.. f473745... M  arch/arm/mach-davinci/dm365.c
:100644 100644 c8b8666... 0755d46... M  arch/arm/mach-davinci/dm644x.c
:100644 100644 9eb87c1... 97c0f8e... M  arch/arm/mach-davinci/dm646x.c
:100644 100644 a2f1f27... c74a6ab... M  
arch/arm/mach-davinci/include/mach/da8xx.h
:100644 100644 9aa2409... 79c26aa... R056   
arch/arm/mach-davinci/include/mach/asp.h
include/linux/platform_data/davinci_asp.h
:100644 100644 4b37e2a... ab0ad45... M  sound/soc/davinci/davinci-evm.c
:100644 100644 407df72... 8218312... M  sound/soc/davinci/davinci-i2s.c
:100644 100644 51479f9... 0de9ed6... M  sound/soc/davinci/davinci-mcasp.h
:100644 100644 4b70828... 93ea3bf... M  sound/soc/davinci/davinci-pcm.c
:100644 100644 5e55164... fc4d01c... M  sound/soc/davinci/davinci-pcm.h
 arch/arm/mach-davinci/asp.h|   49 +
 arch/arm/mach-davinci/davinci.h|3 +-
 arch/arm/mach-davinci/devices-da8xx.c  |1 +
 arch/arm/mach-davinci/dm355.c  |2 +-
 arch/arm/mach-davinci/dm365.c  |2 +-
 arch/arm/mach-davinci/dm644x.c |2 +-
 arch/arm/mach-davinci/dm646x.c |2 +-
 arch/arm/mach-davinci/include/mach/da8xx.h |2 +-
 .../linux/platform_data/davinci_asp.h  |   73 ++--
 sound/soc/davinci/davinci-evm.c|3 -
 sound/soc/davinci/davinci-i2s.c|3 +-
 sound/soc/davinci/davinci-mcasp.h  |3 +-
 sound/soc/davinci/davinci-pcm.c|1 -
 sound/soc/davinci/davinci-pcm.h|3 +-
 14 files changed, 81 insertions(+), 68 deletions(-)

diff --git a/arch/arm/mach-davinci/asp.h b/arch/arm/mach-davinci/asp.h
new file mode 100644
index 000..d9b2acd
--- /dev/null
+++ b/arch/arm/mach-davinci/asp.h
@@ -0,0 +1,49 @@
+/*
+ * TI DaVinci Audio definitions
+ */
+#ifndef __ASM_ARCH_DAVINCI_ASP_H
+#define __ASM_ARCH_DAVINCI_ASP_H
+
+/* Bases of dm644x and dm355 register banks */
+#define DAVINCI_ASP0_BASE  0x01E02000
+#define DAVINCI_ASP1_BASE  0x01E04000
+
+/* Bases of dm365 register banks */
+#define DAVINCI_DM365_ASP0_BASE0x01D02000
+
+/* Bases of dm646x register banks */
+#define DAVINCI_DM646X_MCASP0_REG_BASE 0x01D01000
+#define DAVINCI_DM646X_MCASP1_REG_BASE 0x01D01800
+
+/* Bases of da850/da830 McASP0  register banks */
+#define DAVINCI_DA8XX_MCASP0_REG_BASE  0x01D0
+
+/* Bases of da830 McASP1 register banks */
+#define DAVINCI_DA830_MCASP1_REG_BASE  0x01D04000
+
+/* EDMA channels of dm644x and dm355 */
+#define DAVINCI_DMA_ASP0_TX2
+#define DAVINCI_DMA_ASP0_RX3
+#define DAVINCI_DMA_ASP1_TX8
+#define DAVINCI_DMA_ASP1_RX9
+
+/* EDMA channels of dm646x */
+#define DAVINCI_DM646X_DMA_MCASP0_AXEVT0   6
+#define DAVINCI_DM646X_DMA_MCASP0_AREVT0   9
+#define DAVINCI_DM646X_DMA_MCASP1_AXEVT1   12
+
+/* EDMA channels of da850/da830 McASP0 */
+#define DAVINCI_DA8XX_DMA_MCASP0_AREVT 0
+#define DAVINCI_DA8XX_DMA_MCASP0_AXEVT 1
+
+/* EDMA channels of da830 McASP1 */
+#define DAVINCI_DA830_DMA_MCASP1_AREVT 2
+#define DAVINCI_DA830_DMA_MCASP1_AXEVT 3
+
+/* Interrupts */
+#define DAVINCI_ASP0_RX_INTIRQ_MBRINT
+#define DAVINCI_ASP0_TX_INTIRQ_MBXINT
+#define DAVINCI_ASP1_RX_INTIRQ_MBRINT
+#define DAVINCI_ASP1_TX_INTIRQ_MBXINT
+
+#endif /* __ASM_ARCH_DAVINCI_ASP_H */
diff --git a/arch/arm/mach-davinci/davinci.h b/arch/arm/mach-davinci/davinci.h
index 8db0fc6..8661b20 100644
--- a/arch/arm/mach-davinci/davinci.h
+++ b/arch/arm/mach-davinci/davinci.h
@@ -22,10 +22,11 @@
 #include 
 #include 
 #include 
+#include 
 
-#include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
diff --git a/arch/arm/mach-davinci/devices-da8xx.c 
b/arch/arm/mach-davinci/devices-da8xx.c
index 4735d64..bd2f72b 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c
@@ -24,6 +24,7 @@
 #include 
 
 #include "clock.h"
+#include "asp.h"
 
 #define DA8XX_

[PATCH V2 1/6] ASoC: davinci: davinci-pcm does not need to be a plaform_driver

2012-08-27 Thread Hebbar, Gururaja
Same as the commit 518de86 (ASoC: tegra: register 'platform' from DAIs,
get rid of pdev). It makes davinci-pcm not a platform_driver but helper
to register "platform", so that the platform_device for davinci-pcm can
be saved completely.

Signed-off-by: Hebbar, Gururaja 
---
Changes from V1:
- New Commit. Instanciate seudo-device (davinci-pcm) directly from DAI
  driver rather than having a separate virtual-device registered

:100644 100644 c80c20a... 4b37e2a... M  sound/soc/davinci/davinci-evm.c
:100644 100644 0a74b95... 407df72... M  sound/soc/davinci/davinci-i2s.c
:100644 100644 6a2c54c... 34ee2f1... M  sound/soc/davinci/davinci-mcasp.c
:100644 100644 97d77b2... 4b70828... M  sound/soc/davinci/davinci-pcm.c
:100644 100644 c0d6c9b... 5e55164... M  sound/soc/davinci/davinci-pcm.h
:100644 100644 f71175b... 5be65aa... M  sound/soc/davinci/davinci-sffsdr.c
:100644 100644 da030ff... 07bde2e... M  sound/soc/davinci/davinci-vcif.c
 sound/soc/davinci/davinci-evm.c|   15 ---
 sound/soc/davinci/davinci-i2s.c|   10 ++
 sound/soc/davinci/davinci-mcasp.c  |   10 ++
 sound/soc/davinci/davinci-pcm.c|   23 ++-
 sound/soc/davinci/davinci-pcm.h|3 +++
 sound/soc/davinci/davinci-sffsdr.c |2 +-
 sound/soc/davinci/davinci-vcif.c   |8 
 7 files changed, 46 insertions(+), 25 deletions(-)

diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c
index c80c20a..4b37e2a 100644
--- a/sound/soc/davinci/davinci-evm.c
+++ b/sound/soc/davinci/davinci-evm.c
@@ -159,7 +159,7 @@ static struct snd_soc_dai_link dm6446_evm_dai = {
.cpu_dai_name = "davinci-mcbsp",
.codec_dai_name = "tlv320aic3x-hifi",
.codec_name = "tlv320aic3x-codec.1-001b",
-   .platform_name = "davinci-pcm-audio",
+   .platform_name = "davinci-mcbsp",
.init = evm_aic3x_init,
.ops = &evm_ops,
 };
@@ -170,7 +170,7 @@ static struct snd_soc_dai_link dm355_evm_dai = {
.cpu_dai_name = "davinci-mcbsp.1",
.codec_dai_name = "tlv320aic3x-hifi",
.codec_name = "tlv320aic3x-codec.1-001b",
-   .platform_name = "davinci-pcm-audio",
+   .platform_name = "davinci-mcbsp.1",
.init = evm_aic3x_init,
.ops = &evm_ops,
 };
@@ -184,14 +184,15 @@ static struct snd_soc_dai_link dm365_evm_dai = {
.init = evm_aic3x_init,
.codec_name = "tlv320aic3x-codec.1-0018",
.ops = &evm_ops,
+   .platform_name = "davinci-mcbsp",
 #elif defined(CONFIG_SND_DM365_VOICE_CODEC)
.name = "Voice Codec - CQ93VC",
.stream_name = "CQ93",
.cpu_dai_name = "davinci-vcif",
.codec_dai_name = "cq93vc-hifi",
.codec_name = "cq93vc-codec",
+   .platform_name = "avinci-vcif",
 #endif
-   .platform_name = "davinci-pcm-audio",
 };
 
 static struct snd_soc_dai_link dm6467_evm_dai[] = {
@@ -200,7 +201,7 @@ static struct snd_soc_dai_link dm6467_evm_dai[] = {
.stream_name = "AIC3X",
.cpu_dai_name= "davinci-mcasp.0",
.codec_dai_name = "tlv320aic3x-hifi",
-   .platform_name ="davinci-pcm-audio",
+   .platform_name = "davinci-mcasp.0",
.codec_name = "tlv320aic3x-codec.0-001a",
.init = evm_aic3x_init,
.ops = &evm_ops,
@@ -211,7 +212,7 @@ static struct snd_soc_dai_link dm6467_evm_dai[] = {
.cpu_dai_name= "davinci-mcasp.1",
.codec_dai_name = "dit-hifi",
.codec_name = "spdif_dit",
-   .platform_name = "davinci-pcm-audio",
+   .platform_name = "davinci-mcasp.1",
.ops = &evm_spdif_ops,
},
 };
@@ -222,7 +223,7 @@ static struct snd_soc_dai_link da830_evm_dai = {
.cpu_dai_name = "davinci-mcasp.1",
.codec_dai_name = "tlv320aic3x-hifi",
.codec_name = "tlv320aic3x-codec.1-0018",
-   .platform_name = "davinci-pcm-audio",
+   .platform_name = "davinci-mcasp.1",
.init = evm_aic3x_init,
.ops = &evm_ops,
 };
@@ -233,7 +234,7 @@ static struct snd_soc_dai_link da850_evm_dai = {
.cpu_dai_name= "davinci-mcasp.0",
.codec_dai_name = "tlv320aic3x-hifi",
.codec_name = "tlv320aic3x-codec.1-0018",
-   .platform_name = "davinci-pcm-audio",
+   .platform_name = "davinci-mcasp.0",
.init = evm_aic3x_init,
.ops = &evm_ops,
 };
diff --git a/sound/soc/davinci/davinci-i2s.c b/sound/soc/davinci/davinci-i2s.c
index 0a74b95..407df72 100644
--- a/sound/soc/davinci/davinci-i2s.c
+++ b/sound/soc/davinci/davinci-i2s.c
@@ -732,8 +732,16 @@ static int davinci_i2s_probe(struct platform_device *pdev)
if (ret != 0)
goto err_release_clk;
 
+   ret = davinci_soc_platform_register(&pdev->dev);
+   if (ret) {
+   dev_err(&pdev->dev, "register PCM failed: %d\n", ret);
+   goto err_unregister_dai;
+   }
+
return 0;
 
+err_unregister_d

[PATCH V2 4/6] ASoC: Davinci: McASP: add device tree support for McASP

2012-08-27 Thread Hebbar, Gururaja
Add device tree probe for McASP driver.

Note:
DMA parameters are not populated from DT and will be done later.

Signed-off-by: Hebbar, Gururaja 
---
Changes from V1:
- add more explanation to DT parameters
- Dont return err if some DT parameters are missing. They will be
  treated as 0.
- Through Error warning if num-serializer != "serial-dir" array size

:00 100644 000... e6148ec... A  
Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt
:100644 100644 34ee2f1... c3eae1d... M  sound/soc/davinci/davinci-mcasp.c
 .../bindings/sound/davinci-mcasp-audio.txt |   44 +++
 sound/soc/davinci/davinci-mcasp.c  |  124 +++-
 2 files changed, 167 insertions(+), 1 deletions(-)

diff --git a/Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt 
b/Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt
new file mode 100644
index 000..e6148ec
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/davinci-mcasp-audio.txt
@@ -0,0 +1,44 @@
+Texas Instruments McASP controller
+
+Required properties:
+- compatible :
+   "ti,dm646x-mcasp-audio" : for DM646x platforms
+   "ti,da830-mcasp-audio"  : for both DA830 & DA850 platforms
+
+- reg : Should contain McASP registers offset and length
+- interrupts : Interrupt number for McASP
+- op-mode : I2S/DIT ops mode.
+- tdm-slots : Slots for TDM operation.
+- num-serializer : Serializers used by McASP.
+- serial-dir : A list of serializer pin mode. The list number should be equal
+   to "num-serializer" parameter. Each entry is a number indication
+   serializer pin direction. (0 - INACTIVE, 1 - TX, 2 - RX)
+
+
+Optional properties:
+
+- ti,hwmods : Must be "mcasp", n is controller instance starting 0
+- tx-num-evt : FIFO levels.
+- rx-num-evt : FIFO levels.
+- sram-size-playback : size of sram to be allocated during playback
+- sram-size-capture  : size of sram to be allocated during capture
+
+Example:
+
+mcasp0: mcasp0@1d0 {
+   compatible = "ti,da830-mcasp-audio";
+   #address-cells = <1>;
+   #size-cells = <0>;
+   reg = <0x10 0x3000>;
+   interrupts = <82 83>;
+   op-mode = <0>;  /* MCASP_IIS_MODE */
+   tdm-slots = <2>;
+   num-serializer = <16>;
+   serial-dir = <
+   0 0 0 0 /* 0: INACTIVE, 1: TX, 2: RX */
+   0 0 0 0
+   0 0 0 1
+   2 0 0 0 >;
+   tx-num-evt = <1>;
+   rx-num-evt = <1>;
+};
diff --git a/sound/soc/davinci/davinci-mcasp.c 
b/sound/soc/davinci/davinci-mcasp.c
index 34ee2f1..c3eae1d 100644
--- a/sound/soc/davinci/davinci-mcasp.c
+++ b/sound/soc/davinci/davinci-mcasp.c
@@ -22,6 +22,9 @@
 #include 
 #include 
 #include 
+#include 
+#include 
+#include 
 
 #include 
 #include 
@@ -862,6 +865,114 @@ static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
 
 };
 
+static const struct of_device_id mcasp_dt_ids[] = {
+   {
+   .compatible = "ti,dm646x-mcasp-audio",
+   .data = (void *)MCASP_VERSION_1,
+   },
+   {
+   .compatible = "ti,da830-mcasp-audio",
+   .data = (void *)MCASP_VERSION_2,
+   },
+   { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, mcasp_dt_ids);
+
+static struct snd_platform_data *davinci_mcasp_set_pdata_from_of(
+   struct platform_device *pdev)
+{
+   struct device_node *np = pdev->dev.of_node;
+   struct snd_platform_data *pdata = NULL;
+   const struct of_device_id *match =
+   of_match_device(of_match_ptr(mcasp_dt_ids), &pdev->dev);
+
+   const u32 *of_serial_dir32;
+   u8 *of_serial_dir;
+   u32 val;
+   int i, ret = 0;
+
+   if (pdev->dev.platform_data) {
+   pdata = pdev->dev.platform_data;
+   return pdata;
+   } else if (match) {
+   pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
+   if (!pdata) {
+   ret = -ENOMEM;
+   goto nodata;
+   }
+   } else {
+   /* control shouldn't reach here. something is wrong */
+   ret = -EINVAL;
+   goto nodata;
+   }
+
+   if (match->data)
+   pdata->version = (u8)((int)match->data);
+
+   ret = of_property_read_u32(np, "op-mode", &val);
+   if (ret >= 0)
+   pdata->op_mode = val;
+
+   ret = of_property_read_u32(np, "tdm-slots", &val);
+   if (ret >= 0)
+   pdata->tdm_slots = val;
+
+   ret = of_property_read_u32(np, "num-serializer", &val);
+   if (ret >= 0)
+   pdata->num_serializer = val;
+
+   of_serial_dir32 = of_get_property(np, "serial-dir", &val);
+   val /= sizeof(u32);
+   if (val != pdata->num_serializer) {
+   dev_err(&pdev->dev,
+   "num-serializer(%d) != 

[PATCH V2 5/6] ASoC: Davinci: machine: Add device tree binding

2012-08-27 Thread Hebbar, Gururaja
Device tree support for tlv320aic3x CODEC driver

When the board boots with device tree, the driver will receive card,
codec, dai interface details (like the card name, DAPM routing map,
phandle for the audio components described in the dts file, codec mclk
speed).

The card will be set up based on this information.
Since the routing is provided via DT we can mark the card fully routed
so core can take care of disconnecting the unused pins.

When here, code indentation and comment style is also fixed

Signed-off-by: Hebbar, Gururaja 
---
Changes from V1:
- Change DT parameter from "ti,codec-clock" to "ti,codec-clock-rate"
- add more explanation to DT parameters

:00 100644 000... fcbcd24... A  
Documentation/devicetree/bindings/sound/davinci-evm-audio.txt
:100644 100644 ab0ad45... ca2a547... M  sound/soc/davinci/davinci-evm.c
 .../bindings/sound/davinci-evm-audio.txt   |   63 +++
 sound/soc/davinci/davinci-evm.c|  185 +--
 2 files changed, 228 insertions(+), 20 deletions(-)

diff --git a/Documentation/devicetree/bindings/sound/davinci-evm-audio.txt 
b/Documentation/devicetree/bindings/sound/davinci-evm-audio.txt
new file mode 100644
index 000..fcbcd24
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/davinci-evm-audio.txt
@@ -0,0 +1,63 @@
+* Texas Instruments SoC audio setups with TLV320AIC3X Codec
+
+Required properties:
+- compatible : "ti,davinci-evm-audio"
+- ti,model : The user-visible name of this sound complex.
+- ti,audio-routing : A list of the connections between audio components.
+  Each entry is a pair of strings, the first being the connection's sink,
+  the second being the connection's source. Valid names for sources and
+  sinks are the codec's pins, and the jacks on the board:
+
+  Codec pins:
+
+  * MIC3L
+  * MIC3R
+  * LINE1L
+  * LINE2L
+  * LINE1R
+  * LINE2R
+
+  Board connectors:
+
+  * Headphone Jack
+  * Line Out
+  * Mic Jack
+
+- ti,mcasp-controller : The phandle of the McASP controller
+- ti,audio-codec : The phandle of the TLV320AIC3x audio codec
+- ti,codec-clock-rate : The Codec Clock rate (in Hz) applied to the Codec
+
+- dai-data : A list of DAI data used by SOC code to register
+ DAI, Codecs platform.
+ The string index "should" be as shown below.
+dai-data =
+"",  "",
+"","",
+"";
+
+Here fields
+""   : used to indicate the DAI Name
+"": used to indicate the Stream Name
+"" : used to bind the link between Codec DAI and ASOC DAI
+
+Machine related options
+"" : Whether the machine specific initialization
+   : evm_aic3x_init() is required
+
+""   : Which hardware ops function is to be used.
+   : (evm_ops or evm_spdif_ops)
+
+
+Example:
+
+sound {
+   compatible = "ti,davinci-evm-audio";
+   ti,model = "DA830 EVM";
+   ti,audio-codec = <&tlv320aic3x>;
+   ti,mcasp-controller = <&mcasp1>;
+   ti,codec-clock-rate = <1200>;
+   dai-data =
+   "TLV320AIC3X",  "AIC3X",
+   "tlv320aic3x-hifi", "true",
+   "evm-ops";
+};
diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c
index ab0ad45..ca2a547 100644
--- a/sound/soc/davinci/davinci-evm.c
+++ b/sound/soc/davinci/davinci-evm.c
@@ -34,27 +34,38 @@ static int evm_hw_params(struct snd_pcm_substream 
*substream,
struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct snd_soc_dai *codec_dai = rtd->codec_dai;
struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+   struct snd_soc_codec *codec = rtd->codec;
+   struct snd_soc_card *soc_card = codec->card;
+   struct device_node *np = soc_card->dev->of_node;
int ret = 0;
unsigned sysclk;
 
-   /* ASP1 on DM355 EVM is clocked by an external oscillator */
-   if (machine_is_davinci_dm355_evm() || machine_is_davinci_dm6467_evm() ||
-   machine_is_davinci_dm365_evm())
-   sysclk = 2700;
-
-   /* ASP0 in DM6446 EVM is clocked by U55, as configured by
-* board-dm644x-evm.c using GPIOs from U18.  There are six
-* options; here we "know" we use a 48 KHz sample rate.
-*/
-   else if (machine_is_davinci_evm())
-   sysclk = 12288000;
-
-   else if (machine_is_davinci_da830_evm() ||
-   machine_is_davinci_da850_evm())
-   sysclk = 24576000;
-
-   else
-   return -EINVAL;
+   if (np) {
+   ret = of_property_read_u32(np, "ti,codec-clock-rate", &sysclk);
+   if (ret < 0)
+   return ret;
+   } else {
+   /* ASP1 on DM355 EVM is clocked by an external oscillator */
+   if (machine_is_davinci_dm355_evm() ||
+   machine_is_davinci_dm6467_evm() ||
+   machine_is_davinci_dm365_evm())
+ 

Re: [PATCH v2 3/3] spi: spi-davinci: convert to DMA engine API

2012-08-27 Thread Vinod Koul
On Wed, 2012-08-22 at 12:04 -0400, Matt Porter wrote:
> for querying of these types of limitations. Right now, the
> mmc driver implicitly knows that EDMA needs this restriction
> but it's something that should be queried before calling
> prep_slave().
that's something we need to add; exporting channel capabilities. We only
tell that it slave or memcpy today, but we need to tell clients what are
channel supported parameter ranges.

-- 
~Vinod

___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH v2 2/3] mmc: davinci_mmc: convert to DMA engine API

2012-08-27 Thread Koen Kooi
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Op 21-08-12 20:43, Matt Porter schreef:
> Removes use of the DaVinci EDMA private DMA API and replaces it with use
> of the DMA engine API.
> 
> Signed-off-by: Matt Porter 

Runtime tested on hawkboard with 3.6.0-rc2 with rootfs on SD and running
bonnie++ on it.

Tested-by: Koen Kooi 

> --- drivers/mmc/host/davinci_mmc.c |  271
>  1 file changed, 82
> insertions(+), 189 deletions(-)
> 
> diff --git a/drivers/mmc/host/davinci_mmc.c
> b/drivers/mmc/host/davinci_mmc.c index 7cf6c62..c5e1eeb 100644 ---
> a/drivers/mmc/host/davinci_mmc.c +++ b/drivers/mmc/host/davinci_mmc.c @@
> -30,11 +30,12 @@ #include  #include  #include
>  +#include  #include
>  +#include  #include
> 
> 
> #include  -#include 
> 
> /* * Register Definitions @@ -200,21 +201,13 @@ struct mmc_davinci_host
> { u32 bytes_left;
> 
> u32 rxdma, txdma; +   struct dma_chan *dma_tx; +  struct dma_chan 
> *dma_rx; 
> bool use_dma; bool do_dma; bool sdio_int; bool active_request;
> 
> - /* Scatterlist DMA uses one or more parameter RAM entries: - * the
> main one (associated with rxdma or txdma) plus zero or -   * more links.
> The entries for a given transfer differ only - * by memory buffer
> (address, length) and link field. -*/ -   struct edmacc_param
> tx_template; -struct edmacc_param rx_template; -  unsigned
> n_link; -   u32
> links[MAX_NR_SG - 1]; - /* For PIO we walk scatterlists one segment at a
> time. */ unsigned int sg_len; struct scatterlist *sg; @@ -410,153
> +403,74 @@ static void mmc_davinci_start_command(struct mmc_davinci_host
> *host,
> 
> static void davinci_abort_dma(struct mmc_davinci_host *host) { -  int
> sync_dev; +   struct dma_chan *sync_dev;
> 
> if (host->data_dir == DAVINCI_MMC_DATADIR_READ) - sync_dev =
> host->rxdma; +sync_dev = host->dma_rx; else - 
> sync_dev = host->txdma; 
> - -   edma_stop(sync_dev); -  edma_clean_channel(sync_dev); -} - -static
> void -mmc_davinci_xfer_done(struct mmc_davinci_host *host, struct
> mmc_data *data); - -static void mmc_davinci_dma_cb(unsigned channel, u16
> ch_status, void *data) -{ -   if (DMA_COMPLETE != ch_status) { -  
> struct
> mmc_davinci_host *host = data; - -/* Currently means:  DMA Event
> Missed, or "null" transfer -   * request was seen.  In the future, TC
> errors (like bad - * addresses) might be presented too. - 
>  */ -
> dev_warn(mmc_dev(host->mmc), "DMA %s error\n", -  
> (host->data->flags &
> MMC_DATA_WRITE) - ? "write" : "read"); -  
> host->data->error = -EIO; -
> mmc_davinci_xfer_done(host, host->data); -} -} - -/* Set up tx or rx
> template, to be modified and updated later */ -static void __init
> mmc_davinci_dma_setup(struct mmc_davinci_host *host, -bool 
> tx, struct
> edmacc_param *template) -{ -  unsignedsync_dev; - const u16   
> acnt = 4; -
> const u16 bcnt = rw_threshold >> 2; - const u16   ccnt = 0; - 
> u32 src_port
> = 0; -u32 dst_port = 0; - s16 src_bidx, 
> dst_bidx; -   s16 src_cidx,
> dst_cidx; - - /* - * A-B Sync transfer:  each DMA request is for one
> "frame" of -   * rw_threshold bytes, broken into "acnt"-size chunks
> repeated - * "bcnt" times.  Each segment needs "ccnt" such frames;
> since -* we tell the block layer our mmc->max_seg_size limit, we can -
> * trust (later) that it's within bounds. - * - * The FIFOs are
> read/written in 4-byte chunks (acnt == 4) and -* EDMA will optimize
> memory operations to use larger bursts. -  */ -   if (tx) { - 
> sync_dev =
> host->txdma; - -  /* src_prt, ccnt, and link to be set up later 
> */ -
> src_bidx = acnt; -src_cidx = acnt * bcnt; - - 
> dst_port =
> host->mem_res->start + DAVINCI_MMCDXR; -  dst_bidx = 0; - 
> dst_cidx = 0; 
> - } else { -  sync_dev = host->rxdma; - - 
> src_port =
> host->mem_res->start + DAVINCI_MMCDRR; -  src_bidx = 0; - 
> src_cidx = 0; 
> - -   /* dst_prt, ccnt, and link to be set up later */ -  
> dst_bidx =
> acnt; -   dst_cidx = acnt * bcnt; -   } - -   /* - * We 
> can't use FIFO mode
> for the FIFOs because MMC FIFO addresses - * are not 256-bit (32-byte)
> aligned.  So we use INCR, and the W8BIT -  * parameter is ignored. -  
>  */ 
> - edma_set_src(sync_dev, src_port, INCR, W8BIT); -
> edma_set_dest(sync_dev, dst_port, INCR, W8BIT); + sync_dev =
> host->dma_tx;
> 
> - edma_set_src_index(sync_dev, src_bidx, src_cidx); -
> edma_set_dest_index(sync_dev, dst_bidx, dst_cidx); - -
> edma_set_transfer_params(sync_dev, acnt, bcnt, ccnt, 8, ABSYNC)

Re: [PATCH v3 0/3] DaVinci DMA engine conversion

2012-08-27 Thread Tom Rini
On Wed, Aug 22, 2012 at 09:09:33PM -0400, Matt Porter wrote:

[snip]
> Matt Porter (3):
>   dmaengine: add TI EDMA DMA engine driver
>   mmc: davinci_mmc: convert to DMA engine API
>   spi: spi-davinci: convert to DMA engine API
> 
>  drivers/dma/Kconfig|   10 +
>  drivers/dma/Makefile   |1 +
>  drivers/dma/edma.c |  671 
> 
>  drivers/mmc/host/davinci_mmc.c |  271 +---
>  drivers/spi/spi-davinci.c  |  292 -
>  include/linux/edma.h   |   29 ++
>  6 files changed, 923 insertions(+), 351 deletions(-)
>  create mode 100644 drivers/dma/edma.c
>  create mode 100644 include/linux/edma.h

On the Logic PD AM1808 EVM:
mmc0 rootfs: http://pastebin.com/HKVdmA0G
jffs2 on the SPI flash rootfs: http://pastebin.com/cpAHgdug

Tested-by: Tom Rini 

-- 
Tom


signature.asc
Description: Digital signature
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH v2 3/3] spi: spi-davinci: convert to DMA engine API

2012-08-27 Thread Vinod Koul
On Tue, 2012-08-21 at 14:43 -0400, Matt Porter wrote:
> Removes use of the DaVinci EDMA private DMA API and replaces
> it with use of the DMA engine API.
> 
> Signed-off-by: Matt Porter 
> ---

> + struct dma_slave_config dma_rx_conf = {
> + .direction = DMA_DEV_TO_MEM,
> + .src_addr = (unsigned long)dspi->pbase + SPIBUF,
> + .src_addr_width = data_type,
> + .src_maxburst = 1,
what does 1 mean in this context? We define as number of units that
needs to be transfered, so are you sure that you want only one unit to
be dma'ed in a single burst. that seems like killing your dmac,
shouldn't you be using larger bursts for a better dma performance?


-- 
~Vinod

___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


[PATCH 6/6] i2c: davinci: use devm_ functions

2012-08-27 Thread Julia Lawall
From: Julia Lawall 

The various devm_ functions allocate memory that is released when a driver
detaches.  This patch uses these functions for data that is allocated in
the probe function of a platform device and is only freed in the remove
function.

The call to platform_get_resource is moved down to the call to
devm_request_and_ioremap that uses it.

Signed-off-by: Julia Lawall 

---
Not compiled.
I was not sure what to do with the comment on the first line, so I just
left it where it is.
I was also concerned about the calls to get_device and put_device, and
whether they would cause &pdev->dev to be freed before the devm-allocated
objects were freed.  Most other platform drivers don't seem to have these
calls.

 drivers/i2c/busses/i2c-davinci.c |   51 +--
 1 file changed, 12 insertions(+), 39 deletions(-)

diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c
index b6185dc..c8e9c87 100644
--- a/drivers/i2c/busses/i2c-davinci.c
+++ b/drivers/i2c/busses/i2c-davinci.c
@@ -647,30 +647,16 @@ static int davinci_i2c_probe(struct platform_device *pdev)
int r;
 
/* NOTE: driver uses the static register mapping */
-   mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!mem) {
-   dev_err(&pdev->dev, "no mem resource?\n");
-   return -ENODEV;
-   }
-
irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (!irq) {
dev_err(&pdev->dev, "no irq resource?\n");
return -ENODEV;
}
 
-   ioarea = request_mem_region(mem->start, resource_size(mem),
-   pdev->name);
-   if (!ioarea) {
-   dev_err(&pdev->dev, "I2C region already claimed\n");
-   return -EBUSY;
-   }
-
-   dev = kzalloc(sizeof(struct davinci_i2c_dev), GFP_KERNEL);
-   if (!dev) {
-   r = -ENOMEM;
-   goto err_release_region;
-   }
+   dev = devm_kzalloc(&pdev->dev, sizeof(struct davinci_i2c_dev),
+  GFP_KERNEL);
+   if (!dev)
+   return -ENOMEM;
 
init_completion(&dev->cmd_complete);
 #ifdef CONFIG_CPU_FREQ
@@ -699,14 +685,15 @@ static int davinci_i2c_probe(struct platform_device *pdev)
dev->pdata = &davinci_i2c_platform_data_default;
}
 
-   dev->clk = clk_get(&pdev->dev, NULL);
+   dev->clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(dev->clk)) {
r = -ENODEV;
goto err_free_mem;
}
clk_enable(dev->clk);
 
-   dev->base = ioremap(mem->start, resource_size(mem));
+   mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+   dev->base = devm_request_and_ioremap(&pdev->dev, mem);
if (!dev->base) {
r = -EBUSY;
goto err_mem_ioremap;
@@ -714,16 +701,17 @@ static int davinci_i2c_probe(struct platform_device *pdev)
 
i2c_davinci_init(dev);
 
-   r = request_irq(dev->irq, i2c_davinci_isr, 0, pdev->name, dev);
+   r = devm_request_irq(&pdev->dev, dev->irq, i2c_davinci_isr, 0,
+pdev->name, dev);
if (r) {
dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq);
-   goto err_unuse_clocks;
+   goto err_mem_ioremap;
}
 
r = i2c_davinci_cpufreq_register(dev);
if (r) {
dev_err(&pdev->dev, "failed to register cpufreq\n");
-   goto err_free_irq;
+   goto err_mem_ioremap;
}
 
adap = &dev->adapter;
@@ -740,26 +728,18 @@ static int davinci_i2c_probe(struct platform_device *pdev)
r = i2c_add_numbered_adapter(adap);
if (r) {
dev_err(&pdev->dev, "failure adding adapter\n");
-   goto err_free_irq;
+   goto err_mem_ioremap;
}
of_i2c_register_devices(adap);
 
return 0;
 
-err_free_irq:
-   free_irq(dev->irq, dev);
-err_unuse_clocks:
-   iounmap(dev->base);
 err_mem_ioremap:
clk_disable(dev->clk);
-   clk_put(dev->clk);
dev->clk = NULL;
 err_free_mem:
platform_set_drvdata(pdev, NULL);
put_device(&pdev->dev);
-   kfree(dev);
-err_release_region:
-   release_mem_region(mem->start, resource_size(mem));
 
return r;
 }
@@ -767,7 +747,6 @@ err_release_region:
 static int davinci_i2c_remove(struct platform_device *pdev)
 {
struct davinci_i2c_dev *dev = platform_get_drvdata(pdev);
-   struct resource *mem;
 
i2c_davinci_cpufreq_deregister(dev);
 
@@ -776,16 +755,10 @@ static int davinci_i2c_remove(struct platform_device 
*pdev)
put_device(&pdev->dev);
 
clk_disable(dev->clk);
-   clk_put(dev->clk);
dev->clk = NULL;
 
davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, 0);
-   free_irq(dev->irq, dev);
-   iounmap(dev->base);
-   kfree(dev);
 
-   mem 

Re: [PATCH v2 1/3] dmaengine: add TI EDMA DMA engine driver

2012-08-27 Thread Vinod Koul
On Tue, 2012-08-21 at 14:43 -0400, Matt Porter wrote:
> Add a DMA engine driver for the TI EDMA controller. This driver
> is implemented as a wrapper around the existing DaVinci private
> DMA implementation. This approach allows for incremental conversion
> of each peripheral driver to the DMA engine API. The EDMA driver
> supports slave transfers but does not yet support cyclic transfers.
> 
> Signed-off-by: Matt Porter 
mostly looks decent and in shape.

> ---
> +config TI_EDMA
> + tristate "TI EDMA support"
> + depends on ARCH_DAVINCI
> + select DMA_ENGINE
> + select DMA_VIRTUAL_CHANNELS
> + default y
default should be n for new drivers

> + help
> +   Enable support for the TI EDMA controller. This DMA
> +   engine is found on TI DaVinci and AM33xx parts.
> +
>  config ARCH_HAS_ASYNC_TX_FIND_CHANNEL
>   bool
>  
> +/* Max of 16 segments per channel to conserve PaRAM slots */
> +#define MAX_NR_SG16
> +#define EDMA_MAX_SLOTS   MAX_NR_SG
> +#define EDMA_DESCRIPTORS 16
> +
> +struct edma_desc {
> + struct virt_dma_descvdesc;
> + struct list_headnode;
> +
dummy space?
> + int absync;
> + int pset_nr;
> + struct edmacc_param pset[0];
> +};
> +
> +struct edma_cc;
> +
> +struct edma_chan {
> + struct virt_dma_chanvchan;
> + struct list_headnode;
> + struct edma_desc*edesc;
> + struct edma_cc  *ecc;
> + int ch_num;
> + boolalloced;
> + int slot[EDMA_MAX_SLOTS];
> +
> + dma_addr_t  addr;
> + int addr_width;
> + int maxburst;
> +};
> +

> +/* Dispatch a queued descriptor to the controller (caller holds lock) */
> +static void edma_execute(struct edma_chan *echan)
> +{
> + struct virt_dma_desc *vdesc = vchan_next_desc(&echan->vchan);
> + struct edma_desc *edesc;
> + int i;
> +
> + if (!vdesc) {
> + echan->edesc = NULL;
> + return;
> + }
> +
> + list_del(&vdesc->node);
> +
> + echan->edesc = edesc = to_edma_desc(&vdesc->tx);
> +
> + /* Write descriptor PaRAM set(s) */
> + for (i = 0; i < edesc->pset_nr; i++) {
> + edma_write_slot(echan->slot[i], &edesc->pset[i]);
> + dev_dbg(echan->vchan.chan.device->dev,
> + "\n pset[%d]:\n"
> + "  chnum\t%d\n"
> + "  slot\t%d\n"
> + "  opt\t%08x\n"
> + "  src\t%08x\n"
> + "  dst\t%08x\n"
> + "  abcnt\t%08x\n"
> + "  ccnt\t%08x\n"
> + "  bidx\t%08x\n"
> + "  cidx\t%08x\n"
> + "  lkrld\t%08x\n",
> + i, echan->ch_num, echan->slot[i],
> + edesc->pset[i].opt,
> + edesc->pset[i].src,
> + edesc->pset[i].dst,
> + edesc->pset[i].a_b_cnt,
> + edesc->pset[i].ccnt,
> + edesc->pset[i].src_dst_bidx,
> + edesc->pset[i].src_dst_cidx,
> + edesc->pset[i].link_bcntrld);
> + /* Link to the previous slot if not the last set */
> + if (i != (edesc->pset_nr - 1))
> + edma_link(echan->slot[i], echan->slot[i+1]);
> + /* Final pset links to the dummy pset */
> + else
> + edma_link(echan->slot[i], echan->ecc->dummy_slot);
> + }
> +
> + edma_start(echan->ch_num);
> +}
> +
> +static int edma_terminate_all(struct edma_chan *echan)
> +{
> + unsigned long flags;
> + LIST_HEAD(head);
> +
> + spin_lock_irqsave(&echan->vchan.lock, flags);
> +
> + /*
> +  * Stop DMA activity: we assume the callback will not be called
> +  * after edma_dma() returns (even if it does, it will see
> +  * echan->edesc is NULL and exit.)
> +  */
> + if (echan->edesc) {
> + echan->edesc = NULL;
> + edma_stop(echan->ch_num);
> + }
> +
> + vchan_get_all_descriptors(&echan->vchan, &head);
> + spin_unlock_irqrestore(&echan->vchan.lock, flags);
> + vchan_dma_desc_free_list(&echan->vchan, &head);
> +
> + return 0;
> +}
> +
> +
> +static int edma_slave_config(struct edma_chan *echan,
> + struct dma_slave_config *config)
> +{
> + if ((config->src_addr_width > DMA_SLAVE_BUSWIDTH_4_BYTES) ||
> + (config->dst_addr_width > DMA_SLAVE_BUSWIDTH_4_BYTES))
> + return -EINVAL;
the indent needs help here
> +
> + if (config->direction == DMA_MEM_TO_DEV) {
> + if (config->dst_addr)
> + echan->addr = config->dst_a

RE: [PATCH v3 0/6] omap-am33xx rtc dt support

2012-08-27 Thread Mohammed, Afzal
Hi Alessandro,

On Sat, Aug 11, 2012 at 01:27:11, Nori, Sekhar wrote:
> On 7/27/2012 5:53 PM, Afzal Mohammed wrote:

> > This series makes rtc-omap driver DT capable, adds AM33xx
> > RTC DT support along with a few enchancments to the driver.
> > 
> > rtc-omap driver is made intelligent enough to handle kicker
> > mechanism. This helps in removing kicker mechanism support
> > done for DaVinci at platform level.
> > 
> > This has been tested on Beaglebone (AM33xx platform) and on
> > DaVinci DA850 EVM.
> > 
> > This series is based over linux-omap master and can be
> > directly applied over linux-next, except for
> > [PATCH 6/6] arm/dts: am33xx rtc node.
> > 
> > PATCH 6/6 should go through linux-omap tree and needs
> > http://www.mail-archive.com/linux-omap@vger.kernel.org/msg71644.html
> > (arm/dts: am33xx wdt node) to get applied cleanly
> 
> I tested patches 1-5 on AM18x EVM using rtcwake and hwclock commands.
> Also tested on DT enabled AM18x EVM using hwclock.
> 
> For patched 1-5:
> 
> Acked-by: Sekhar Nori 
> 
> Alessandro,
> 
> I assume you would want me to queue 2/6 through DaVinci tree. That patch
> depends on 1/6 being accepted and merged by you. Let me know how you
> want to move forward here.

Can you please help 1-5 patches in this series to get into mainline.
1-5 of this series is a prerequisite for adding RTC support for AM335X
SoC's, which is present in beaglebone, AM335X EVM.

Also this series does cleanup on DaVinci platform by moving kicker handling
mechanism to driver. And we have Ack from DaVinci maintainer on 1-5 of this
series.

Patch 6/6 adds AM335X RTC DT support, not sure whether you can take 6/6
or Tony should be taking it.

The series applies cleanly over linux-next (now including 6/6)

Regards
Afzal
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source