forked from luck/tmp_suning_uos_patched
ASoC: samsung: use irq resource for idma
With multiplatform kernels, we cannot use hardwired IRQ numbers in device drivers. This changes the idma driver to use a proper resource, like all other drivers do. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
a7c1a644e1
commit
cb00e3a16d
|
@ -146,14 +146,20 @@ struct platform_device s3c_device_camif = {
|
|||
|
||||
/* ASOC DMA */
|
||||
|
||||
#ifdef CONFIG_PLAT_S5P
|
||||
static struct resource samsung_asoc_idma_resource = DEFINE_RES_IRQ(IRQ_I2S0);
|
||||
|
||||
struct platform_device samsung_asoc_idma = {
|
||||
.name = "samsung-idma",
|
||||
.id = -1,
|
||||
.num_resources = 1,
|
||||
.resource = &samsung_asoc_idma_resource,
|
||||
.dev = {
|
||||
.dma_mask = &samsung_device_dma_mask,
|
||||
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
/* FB */
|
||||
|
||||
|
|
|
@ -68,6 +68,8 @@ static struct idma_info {
|
|||
dma_addr_t lp_tx_addr;
|
||||
} idma;
|
||||
|
||||
static int idma_irq;
|
||||
|
||||
static void idma_getpos(dma_addr_t *src)
|
||||
{
|
||||
*src = idma.lp_tx_addr +
|
||||
|
@ -305,7 +307,7 @@ static int idma_open(struct snd_pcm_substream *substream)
|
|||
if (prtd == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = request_irq(IRQ_I2S0, iis_irq, 0, "i2s", prtd);
|
||||
ret = request_irq(idma_irq, iis_irq, 0, "i2s", prtd);
|
||||
if (ret < 0) {
|
||||
pr_err("fail to claim i2s irq , ret = %d\n", ret);
|
||||
kfree(prtd);
|
||||
|
@ -324,7 +326,7 @@ static int idma_close(struct snd_pcm_substream *substream)
|
|||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct idma_ctrl *prtd = runtime->private_data;
|
||||
|
||||
free_irq(IRQ_I2S0, prtd);
|
||||
free_irq(idma_irq, prtd);
|
||||
|
||||
if (!prtd)
|
||||
pr_err("idma_close called with prtd == NULL\n");
|
||||
|
@ -418,6 +420,10 @@ static struct snd_soc_platform_driver asoc_idma_platform = {
|
|||
|
||||
static int asoc_idma_platform_probe(struct platform_device *pdev)
|
||||
{
|
||||
idma_irq = platform_get_irq(pdev, 0);
|
||||
if (idma_irq < 0)
|
||||
return idma_irq;
|
||||
|
||||
return snd_soc_register_platform(&pdev->dev, &asoc_idma_platform);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user