diff options
author | Christoph Hellwig <hch@lst.de> | 2019-02-01 03:48:00 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2019-02-01 11:15:18 -0500 |
commit | 9f7d35d9f7a184ffb591b090b2cbf63d2d599c02 (patch) | |
tree | 7ed9e41f15612529917e4279d8e7bbe649aea5a5 /sound/mips | |
parent | 515548fdd8a3c579535fe05e3c39558f75158bc5 (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.c | 31 |
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 | ||
457 | static int hal2_alloc_dmabuf(struct hal2_codec *codec) | 457 | static 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 | ||
491 | static void hal2_free_dmabuf(struct hal2_codec *codec) | 492 | static 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 | ||