ASoC: rsnd: fixup rsnd_gen_dma_addr() for Gen1

ad32d0c7b0e993433df152ae747652647eb65a27
(ASoC: rsnd: add rsnd_gen_dma_addr() for DMAC addr)
added rsnd_gen_dma_addr() to calculate DMA addr,
but, it is necessary only for Gen2.
This patch ignores Gen1 case.
Kernel will be panic without this patch.
Special thanks to Simon

Reported-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tested-by: Simon Horman <horms+renesas@verge.net.au>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit 64eae986fc1e3a281b00f04b7c9c00b145ec8a57)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ASoC: rsnd: fixup loop exit timing of dma name search

Current dma name search loop didn't care about SSI index
This patch fixes it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit c08c3b088053cec1465051258844e7934d3e3e37)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ASoC: rcar: Fix dma direction type

dmaengine_prep_slave_single() expects a enum dma_transfer_direction and not a
enum dma_data_direction. Since the integer representations of both DMA_TO_DEVICE
and DMA_MEM_TO_DEV aswell as DMA_FROM_DEVICE and DMA_DEV_TO_MEM have the same
value the code worked fine even though it was using the wrong type.

Fixes the following warning from sparse:
	sound/soc/sh/rcar/core.c:227:49: warning: mixing different enum types
	sound/soc/sh/rcar/core.c:227:49:     int enum dma_data_direction  versus
	sound/soc/sh/rcar/core.c:227:49:     int enum dma_transfer_direction

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit cd7bcc6000165f6215d15e2e32b58a646e5de5ec)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ASoC: rsnd: SSI + DMA can select BUSIF

Sound data needs to be sent to R-Car sound SSI when playback.
But, there are 2 interfaces for it.
1st is SSITDR/SSIRDR which are mapped on SSI.
2nd is SSIn_BUSIF which are mapped on SSIU.

2nd SSIn_BUSIF is used when DMA transfer,
and it is always used if sound data came from via SRC.
But, we can use it when SSI+DMA case too.
(Current driver is assuming 1st SSITDR/SSIRDR for it)

2nd SSIn_BUSIF can be used as FIFO.
This is very helpful/useful for SSI+DMA.

But DMA address / DMA ID are not same between 1st/2nd cases.
This patch care about these settings.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit d9288d0ba12de1b5efb830b9128e4cc6877318fc)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ASoC: rsnd: use dmaengine_prep_dma_cyclic() instead of original method

Current R-Car sound driver is using DMAEngine directly,
but, ASoC is requesting to use common DMA transfer method,
like snd_dmaengine_pcm_trigger() or dmaengine_pcm_ops.
It is difficult to switch at this point, since Renesas
driver is also supporting PIO transfer.
This patch uses dmaengine_prep_dma_cyclic() instead
of dmaengine_prep_slave_single().
It is used in requested method,
and is good first step to switch over.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit ccd01559ead29b59918458e9b412ff18b88fc6cf)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ASoC: rsnd: enable DVC when capture

Current DVC can be enabled only when playback,
but, this came from misunderstanding.
It is not correct.

DVC <-> DMA relationship is...

Playback: MEM -> DMAC  -> SRC -> DVC -> DMACp -> SSI
Capture:  SSI -> DMACp -> SRC -> DVC -> DMAC  -> MEM

DVC can be used for both Playback/Capture

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit 65f459923b7926f6a7f156970d83360bd80cb169)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ASoC: rsnd: DMA cleanup for flexible SSI/SRC selection

Current R-Car sound SSI/SRC/DVC selection has feature limit.
(It is assuming that SSI/SRC are using same index number)

So that enabling SSI/SRC flexible selection,
this patch modifies DMA settings.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit 37523034851d6a4b1dc951e24bf2f11bc28fe58d)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ASoC: rsnd: DMA start address is properly used for each DMAC

R-Car sound uses Audio DMAC and Audio DMAC peri peri.
Audio DMAC peri peri transfers data inside circuit.

DMA transfer needs source / destination address,
and destination address can be set via dmaengine_slave_config().
The source address can be set when starting DMAEngine.
Because Audio DMAC peri peri always ignores its value,
current driver always used same source address for
Audio DMAC / Audio DMAC peri peri
(Audio DMAC peri peri source / destination address
is always fixed value)
But, This is not good match for DT booting.
This patch properly uses DMA start address
for Audio DMAC / Audio DMAC peri peri.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit 340371005d399b595f4044fc5e336f4a66ead101)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ASoC: rsnd: add DT support to DVC

Now, DVC can use DT

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit 34cb6123f90d264d63bdcd3ee0df0d2cb4b36aab)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Revert "ARM: shmobile: rcar-gen2: update call to dma_contiguous_reserve_area"

This reverts commit 16b29040d74720a00a0589e21e984a949b9dc96e.
ASoC: rsnd: add missing src/dst_addr_width for DMAEngine

Renesas new DMAEngine driver requests src/dst_addr_width

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit 2bf865ba30405056e7922b960a1687bb4d5a4999)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ARM: shmobile: lager: correct memory map value and syntax

The base address of the second memory region on the lager
board is 0x140000000. Update the tag used in the dts file accordingly.

Also correct a syntax error by using two comma-delimited 32 bit values
rather than a single 64 bit value.

This is a documentation fix and should have no run-time affect.

This problem was introduced when the second memory region
was added to the lager dts file by 62bc32a2573c4219
("ARM: shmobile: Include all 4 GiB of memory on Lager)" in v3.14.

Acked-by: Magnus Damm <damm+renesas@opensource.se>
Acked-by: Olof Johansson <olof@lixom.net>
Reported-by: NAOYA SHIIBA <naoya.shiiba.nx@renesas.com>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
(cherry picked from commit 13fb5167d07a9156e85a2c6d10c76cb77997ff7c)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ASoC: rsnd: delete unneeded test before of_node_put

Of_node_put supports NULL as its argument, so the initial test is not
necessary.

Suggested by Uwe Kleine-König.

The semantic patch that fixes this problem is as follows:
(http://coccinelle.lip6.fr/)

// <smpl>
@@
expression e;
@@

-if (e)
   of_node_put(e);
// </smpl>

Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit a493b6a637e9d8e828d7ed4be4bdf24dfd1f9250)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ASoC: rsnd: tidyup DVC control method

DVC can use Volume and Mute control,
and these control methods doesn't have much difference.
This patch cleanup current method,
and it will be used for Mute control.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit 486b09c750e58777976ad74a37de7b4252630332)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ASoC: rsnd: enable Mute control on DVC

DVC can control Mute.
This patch supports it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit cd2b65741e72da64508957cd1cde85116102d8dd)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ASoC: rsnd: fixup SND_SOC_DAIFMT_xB_xF behavior

In current R-Car rsnd driver,
the SND_SOC_DAIFMT_xB_xF flags are used to HW default behavior,
but, it should be used to specific format.
The waveforms of LEFT_J/RIGHT_J format with
SND_SOC_DAIFMT_NB_NF flag will be
started from "falling edge" without this patch.
But, it should be started from "rising edge".

Reported-by: Jun Watanabe <jun.watanabe.ue@renesas.com>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit 1a7889ca8aba333d7c74fad543d692c31bc7f280)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
ASoC: rsnd: fixup pcm_new callback method

bff58ea4f43d9b4a9fd6fb05fabc8f50f68131f5
(ASoC: rsnd: add DVC support) added DVC support,
and it added pcm_new callback feature for it.
Then it called all DAI's pcm_new callback, and it was wrong.
This patch fixup it and call correct callback.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit 7c63f3c02f5a998621758239abed43c5bd454b70)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Revert "ASoC: rsnd: use fast_io for bus"

This reverts commit f3c26770d62f984d3d64b7fa959d0cf0ad273188.
Revert "ASoC: rsnd: undefined clock is not error"

This reverts commit 0d7c485c22ce39782d53e15af8fe2361afcbd362.
ASoC: rsnd: fixup dai remove callback operation

rsnd driver is using SSI/SRC/DVC which are
using "mod" base operation.
These "mod" are supporting "probe" and "remove" callbacks.

Current rsnd_probe should call "remove" if "probe" was failed,
since "probe" might be having DMAEngine handle.
Some mod's "remove" callback might be called without calling
"probe", but it is no problem. because "remove" do nothing
in such case.

So, all mod's "remove" should be called when error case
of rsnd_probe() and rsnd_remove().

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit d62a3dcd4d75b1713d12697afdbffaf9a9da8f43)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>