summaryrefslogtreecommitdiffstats
path: root/sound/mips
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2019-02-01 03:48:00 -0500
committerTakashi Iwai <tiwai@suse.de>2019-02-01 11:15:18 -0500
commit9f7d35d9f7a184ffb591b090b2cbf63d2d599c02 (patch)
tree7ed9e41f15612529917e4279d8e7bbe649aea5a5 /sound/mips
parent515548fdd8a3c579535fe05e3c39558f75158bc5 (diff)
ALSA: hal2: pass struct device to DMA API functions
The DMA API generally relies on a struct device to work properly, and only barely works without one for legacy reasons. Pass the easily available struct device from the platform_device to remedy this. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/mips')
-rw-r--r--sound/mips/hal2.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/sound/mips/hal2.c b/sound/mips/hal2.c
index a4ed54aeaf1d..d63e1565b62b 100644
--- a/sound/mips/hal2.c
+++ b/sound/mips/hal2.c
@@ -454,21 +454,22 @@ static inline void hal2_stop_adc(struct snd_hal2 *hal2)
454 hal2->adc.pbus.pbus->pbdma_ctrl = HPC3_PDMACTRL_LD; 454 hal2->adc.pbus.pbus->pbdma_ctrl = HPC3_PDMACTRL_LD;
455} 455}
456 456
457static int hal2_alloc_dmabuf(struct hal2_codec *codec) 457static int hal2_alloc_dmabuf(struct snd_hal2 *hal2, struct hal2_codec *codec)
458{ 458{
459 struct device *dev = hal2->card->dev;
459 struct hal2_desc *desc; 460 struct hal2_desc *desc;
460 dma_addr_t desc_dma, buffer_dma; 461 dma_addr_t desc_dma, buffer_dma;
461 int count = H2_BUF_SIZE / H2_BLOCK_SIZE; 462 int count = H2_BUF_SIZE / H2_BLOCK_SIZE;
462 int i; 463 int i;
463 464
464 codec->buffer = dma_alloc_attrs(NULL, H2_BUF_SIZE, &buffer_dma, 465 codec->buffer = dma_alloc_attrs(dev, H2_BUF_SIZE, &buffer_dma,
465 GFP_KERNEL, DMA_ATTR_NON_CONSISTENT); 466 GFP_KERNEL, DMA_ATTR_NON_CONSISTENT);
466 if (!codec->buffer) 467 if (!codec->buffer)
467 return -ENOMEM; 468 return -ENOMEM;
468 desc = dma_alloc_attrs(NULL, count * sizeof(struct hal2_desc), 469 desc = dma_alloc_attrs(dev, count * sizeof(struct hal2_desc),
469 &desc_dma, GFP_KERNEL, DMA_ATTR_NON_CONSISTENT); 470 &desc_dma, GFP_KERNEL, DMA_ATTR_NON_CONSISTENT);
470 if (!desc) { 471 if (!desc) {
471 dma_free_attrs(NULL, H2_BUF_SIZE, codec->buffer, buffer_dma, 472 dma_free_attrs(dev, H2_BUF_SIZE, codec->buffer, buffer_dma,
472 DMA_ATTR_NON_CONSISTENT); 473 DMA_ATTR_NON_CONSISTENT);
473 return -ENOMEM; 474 return -ENOMEM;
474 } 475 }
@@ -482,17 +483,19 @@ static int hal2_alloc_dmabuf(struct hal2_codec *codec)
482 desc_dma : desc_dma + (i + 1) * sizeof(struct hal2_desc); 483 desc_dma : desc_dma + (i + 1) * sizeof(struct hal2_desc);
483 desc++; 484 desc++;
484 } 485 }
485 dma_cache_sync(NULL, codec->desc, count * sizeof(struct hal2_desc), 486 dma_cache_sync(dev, codec->desc, count * sizeof(struct hal2_desc),
486 DMA_TO_DEVICE); 487 DMA_TO_DEVICE);
487 codec->desc_count = count; 488 codec->desc_count = count;
488 return 0; 489 return 0;
489} 490}
490 491
491static void hal2_free_dmabuf(struct hal2_codec *codec) 492static void hal2_free_dmabuf(struct snd_hal2 *hal2, struct hal2_codec *codec)
492{ 493{
493 dma_free_attrs(NULL, codec->desc_count * sizeof(struct hal2_desc), 494 struct device *dev = hal2->card->dev;
495
496 dma_free_attrs(dev, codec->desc_count * sizeof(struct hal2_desc),
494 codec->desc, codec->desc_dma, DMA_ATTR_NON_CONSISTENT); 497 codec->desc, codec->desc_dma, DMA_ATTR_NON_CONSISTENT);
495 dma_free_attrs(NULL, H2_BUF_SIZE, codec->buffer, codec->buffer_dma, 498 dma_free_attrs(dev, H2_BUF_SIZE, codec->buffer, codec->buffer_dma,
496 DMA_ATTR_NON_CONSISTENT); 499 DMA_ATTR_NON_CONSISTENT);
497} 500}
498 501
@@ -540,7 +543,7 @@ static int hal2_playback_open(struct snd_pcm_substream *substream)
540 543
541 runtime->hw = hal2_pcm_hw; 544 runtime->hw = hal2_pcm_hw;
542 545
543 err = hal2_alloc_dmabuf(&hal2->dac); 546 err = hal2_alloc_dmabuf(hal2, &hal2->dac);
544 if (err) 547 if (err)
545 return err; 548 return err;
546 return 0; 549 return 0;
@@ -550,7 +553,7 @@ static int hal2_playback_close(struct snd_pcm_substream *substream)
550{ 553{
551 struct snd_hal2 *hal2 = snd_pcm_substream_chip(substream); 554 struct snd_hal2 *hal2 = snd_pcm_substream_chip(substream);
552 555
553 hal2_free_dmabuf(&hal2->dac); 556 hal2_free_dmabuf(hal2, &hal2->dac);
554 return 0; 557 return 0;
555} 558}
556 559
@@ -606,7 +609,7 @@ static void hal2_playback_transfer(struct snd_pcm_substream *substream,
606 unsigned char *buf = hal2->dac.buffer + rec->hw_data; 609 unsigned char *buf = hal2->dac.buffer + rec->hw_data;
607 610
608 memcpy(buf, substream->runtime->dma_area + rec->sw_data, bytes); 611 memcpy(buf, substream->runtime->dma_area + rec->sw_data, bytes);
609 dma_cache_sync(NULL, buf, bytes, DMA_TO_DEVICE); 612 dma_cache_sync(hal2->card->dev, buf, bytes, DMA_TO_DEVICE);
610 613
611} 614}
612 615
@@ -629,7 +632,7 @@ static int hal2_capture_open(struct snd_pcm_substream *substream)
629 632
630 runtime->hw = hal2_pcm_hw; 633 runtime->hw = hal2_pcm_hw;
631 634
632 err = hal2_alloc_dmabuf(adc); 635 err = hal2_alloc_dmabuf(hal2, adc);
633 if (err) 636 if (err)
634 return err; 637 return err;
635 return 0; 638 return 0;
@@ -639,7 +642,7 @@ static int hal2_capture_close(struct snd_pcm_substream *substream)
639{ 642{
640 struct snd_hal2 *hal2 = snd_pcm_substream_chip(substream); 643 struct snd_hal2 *hal2 = snd_pcm_substream_chip(substream);
641 644
642 hal2_free_dmabuf(&hal2->adc); 645 hal2_free_dmabuf(hal2, &hal2->adc);
643 return 0; 646 return 0;
644} 647}
645 648
@@ -694,7 +697,7 @@ static void hal2_capture_transfer(struct snd_pcm_substream *substream,
694 struct snd_hal2 *hal2 = snd_pcm_substream_chip(substream); 697 struct snd_hal2 *hal2 = snd_pcm_substream_chip(substream);
695 unsigned char *buf = hal2->adc.buffer + rec->hw_data; 698 unsigned char *buf = hal2->adc.buffer + rec->hw_data;
696 699
697 dma_cache_sync(NULL, buf, bytes, DMA_FROM_DEVICE); 700 dma_cache_sync(hal2->card->dev, buf, bytes, DMA_FROM_DEVICE);
698 memcpy(substream->runtime->dma_area + rec->sw_data, buf, bytes); 701 memcpy(substream->runtime->dma_area + rec->sw_data, buf, bytes);
699} 702}
700 703