ASoC: omap-mcbsp: Simplify DMA configuration
Configure the DMA request line, port address, and stream name at probe time instead of every time we start a stream. These settings are static in the system. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Tested-by: Grazvydas Ignotas <notasas@gmail.com> Tested-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Jarkko Nikula <jarkko.nikula@bitmer.com> Signed-off-by: Liam Girdwood <lrg@ti.com>
This commit is contained in:
committed by
Liam Girdwood
parent
256d9c251f
commit
b8fb4907a7
@@ -175,22 +175,6 @@ void omap_mcbsp_config(struct omap_mcbsp *mcbsp,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* omap_mcbsp_dma_params - returns the dma channel number
|
|
||||||
* @id - mcbsp id
|
|
||||||
* @stream - indicates the direction of data flow (rx or tx)
|
|
||||||
*
|
|
||||||
* Returns the dma channel number for the rx channel or tx channel
|
|
||||||
* based on the value of @stream for the requested mcbsp given by @id
|
|
||||||
*/
|
|
||||||
int omap_mcbsp_dma_ch_params(struct omap_mcbsp *mcbsp, unsigned int stream)
|
|
||||||
{
|
|
||||||
if (stream)
|
|
||||||
return mcbsp->dma_rx_sync;
|
|
||||||
else
|
|
||||||
return mcbsp->dma_tx_sync;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* omap_mcbsp_dma_reg_params - returns the address of mcbsp data register
|
* omap_mcbsp_dma_reg_params - returns the address of mcbsp data register
|
||||||
* @id - mcbsp id
|
* @id - mcbsp id
|
||||||
@@ -200,7 +184,8 @@ int omap_mcbsp_dma_ch_params(struct omap_mcbsp *mcbsp, unsigned int stream)
|
|||||||
* to be used by DMA for transferring/receiving data based on the value of
|
* to be used by DMA for transferring/receiving data based on the value of
|
||||||
* @stream for the requested mcbsp given by @id
|
* @stream for the requested mcbsp given by @id
|
||||||
*/
|
*/
|
||||||
int omap_mcbsp_dma_reg_params(struct omap_mcbsp *mcbsp, unsigned int stream)
|
static int omap_mcbsp_dma_reg_params(struct omap_mcbsp *mcbsp,
|
||||||
|
unsigned int stream)
|
||||||
{
|
{
|
||||||
int data_reg;
|
int data_reg;
|
||||||
|
|
||||||
@@ -983,14 +968,20 @@ int __devinit omap_mcbsp_init(struct platform_device *pdev)
|
|||||||
dev_err(&pdev->dev, "invalid rx DMA channel\n");
|
dev_err(&pdev->dev, "invalid rx DMA channel\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
mcbsp->dma_rx_sync = res->start;
|
/* RX DMA request number, and port address configuration */
|
||||||
|
mcbsp->dma_data[1].name = "Audio Capture";
|
||||||
|
mcbsp->dma_data[1].dma_req = res->start;
|
||||||
|
mcbsp->dma_data[1].port_addr = omap_mcbsp_dma_reg_params(mcbsp, 1);
|
||||||
|
|
||||||
res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
|
res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
|
||||||
if (!res) {
|
if (!res) {
|
||||||
dev_err(&pdev->dev, "invalid tx DMA channel\n");
|
dev_err(&pdev->dev, "invalid tx DMA channel\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
mcbsp->dma_tx_sync = res->start;
|
/* TX DMA request number, and port address configuration */
|
||||||
|
mcbsp->dma_data[0].name = "Audio Playback";
|
||||||
|
mcbsp->dma_data[0].dma_req = res->start;
|
||||||
|
mcbsp->dma_data[0].port_addr = omap_mcbsp_dma_reg_params(mcbsp, 0);
|
||||||
|
|
||||||
mcbsp->fclk = clk_get(&pdev->dev, "fck");
|
mcbsp->fclk = clk_get(&pdev->dev, "fck");
|
||||||
if (IS_ERR(mcbsp->fclk)) {
|
if (IS_ERR(mcbsp->fclk)) {
|
||||||
|
|||||||
@@ -288,10 +288,6 @@ struct omap_mcbsp {
|
|||||||
int rx_irq;
|
int rx_irq;
|
||||||
int tx_irq;
|
int tx_irq;
|
||||||
|
|
||||||
/* DMA stuff */
|
|
||||||
u8 dma_rx_sync;
|
|
||||||
u8 dma_tx_sync;
|
|
||||||
|
|
||||||
/* Protect the field .free, while checking if the mcbsp is in use */
|
/* Protect the field .free, while checking if the mcbsp is in use */
|
||||||
struct omap_mcbsp_platform_data *pdata;
|
struct omap_mcbsp_platform_data *pdata;
|
||||||
struct omap_mcbsp_st_data *st_data;
|
struct omap_mcbsp_st_data *st_data;
|
||||||
@@ -328,9 +324,6 @@ int omap2_mcbsp_set_clks_src(struct omap_mcbsp *mcbsp, u8 fck_src_id);
|
|||||||
void omap2_mcbsp1_mux_clkr_src(struct omap_mcbsp *mcbsp, u8 mux);
|
void omap2_mcbsp1_mux_clkr_src(struct omap_mcbsp *mcbsp, u8 mux);
|
||||||
void omap2_mcbsp1_mux_fsr_src(struct omap_mcbsp *mcbsp, u8 mux);
|
void omap2_mcbsp1_mux_fsr_src(struct omap_mcbsp *mcbsp, u8 mux);
|
||||||
|
|
||||||
int omap_mcbsp_dma_ch_params(struct omap_mcbsp *mcbsp, unsigned int stream);
|
|
||||||
int omap_mcbsp_dma_reg_params(struct omap_mcbsp *mcbsp, unsigned int stream);
|
|
||||||
|
|
||||||
/* Sidetone specific API */
|
/* Sidetone specific API */
|
||||||
int omap_st_set_chgain(struct omap_mcbsp *mcbsp, int channel, s16 chgain);
|
int omap_st_set_chgain(struct omap_mcbsp *mcbsp, int channel, s16 chgain);
|
||||||
int omap_st_get_chgain(struct omap_mcbsp *mcbsp, int channel, s16 *chgain);
|
int omap_st_get_chgain(struct omap_mcbsp *mcbsp, int channel, s16 *chgain);
|
||||||
|
|||||||
@@ -225,17 +225,12 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
|
|||||||
struct omap_mcbsp *mcbsp = snd_soc_dai_get_drvdata(cpu_dai);
|
struct omap_mcbsp *mcbsp = snd_soc_dai_get_drvdata(cpu_dai);
|
||||||
struct omap_mcbsp_reg_cfg *regs = &mcbsp->cfg_regs;
|
struct omap_mcbsp_reg_cfg *regs = &mcbsp->cfg_regs;
|
||||||
struct omap_pcm_dma_data *dma_data;
|
struct omap_pcm_dma_data *dma_data;
|
||||||
int dma;
|
|
||||||
int wlen, channels, wpf, sync_mode = OMAP_DMA_SYNC_ELEMENT;
|
int wlen, channels, wpf, sync_mode = OMAP_DMA_SYNC_ELEMENT;
|
||||||
int pkt_size = 0;
|
int pkt_size = 0;
|
||||||
unsigned long port;
|
|
||||||
unsigned int format, div, framesize, master;
|
unsigned int format, div, framesize, master;
|
||||||
|
|
||||||
dma_data = &mcbsp->dma_data[substream->stream];
|
dma_data = &mcbsp->dma_data[substream->stream];
|
||||||
|
|
||||||
dma = omap_mcbsp_dma_ch_params(mcbsp, substream->stream);
|
|
||||||
port = omap_mcbsp_dma_reg_params(mcbsp, substream->stream);
|
|
||||||
|
|
||||||
switch (params_format(params)) {
|
switch (params_format(params)) {
|
||||||
case SNDRV_PCM_FORMAT_S16_LE:
|
case SNDRV_PCM_FORMAT_S16_LE:
|
||||||
dma_data->data_type = OMAP_DMA_DATA_TYPE_S16;
|
dma_data->data_type = OMAP_DMA_DATA_TYPE_S16;
|
||||||
@@ -291,9 +286,6 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dma_data->name = substream->stream ? "Audio Capture" : "Audio Playback";
|
|
||||||
dma_data->dma_req = dma;
|
|
||||||
dma_data->port_addr = port;
|
|
||||||
dma_data->sync_mode = sync_mode;
|
dma_data->sync_mode = sync_mode;
|
||||||
dma_data->packet_size = pkt_size;
|
dma_data->packet_size = pkt_size;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user