Merge series from Cezary Rojewski <cezary.rojewski@intel.com>: Set is made of one fix for dma-transfer so that result of dmaengine_submit() is tested before moving on, and few cleanups: - two non-impactful, where catpt_component_open() layout gets improved slightly as well as relocation of couple of locals found in PCM-functions so that they look more cohesive - no need to expose catpt-driver board-matching information globally. Most fields are not by it and it's the sole user of haswell_machines table. By having them locally it is clear what is actually being used Cezary Rojewski (5): ASoC: Intel: catpt: Test dmaengine_submit() result before moving on ASoC: Intel: catpt: Reduce size of catpt_component_open() ASoC: Intel: catpt: Streamline locals declaration for PCM-functions ASoC: Intel: catpt: Drop SND_SOC_ACPI_INTEL_MATCH dependency ASoC: Intel: Drop legacy HSW/BDW board-match information include/sound/soc-acpi-intel-match.h | 1 - sound/soc/intel/Kconfig | 2 +- sound/soc/intel/catpt/device.c | 33 +++++++++++++++-- sound/soc/intel/catpt/dsp.c | 14 ++++++- sound/soc/intel/catpt/pcm.c | 37 +++++++++---------- .../common/soc-acpi-intel-hsw-bdw-match.c | 16 -------- 6 files changed, 61 insertions(+), 42 deletions(-) -- 2.25.1
Unified · Split
| @@ -65,6 +65,7 @@ static int catpt_dma_memcpy(struct catpt_dev *cdev, struct dma_chan *chan, · 64 unmodified lines | |||
| 65 | { | 65 | { |
| 66 | struct dma_async_tx_descriptor *desc; | 66 | struct dma_async_tx_descriptor *desc; |
| 67 | enum dma_status status; | 67 | enum dma_status status; |
| 68 | int ret; | ||
| 68 | 69 | ||
| 69 | desc = dmaengine_prep_dma_memcpy(chan, dst_addr, src_addr, size, | 70 | desc = dmaengine_prep_dma_memcpy(chan, dst_addr, src_addr, size, |
| 70 | DMA_CTRL_ACK); | 71 | DMA_CTRL_ACK); |
| @@ -77,13 +78,22 @@ static int catpt_dma_memcpy(struct catpt_dev *cdev, struct dma_chan *chan, · 6 unmodified lines | |||
| 77 | catpt_updatel_shim(cdev, HMDC, | 78 | catpt_updatel_shim(cdev, HMDC, |
| 78 | CATPT_HMDC_HDDA(CATPT_DMA_DEVID, chan->chan_id), | 79 | CATPT_HMDC_HDDA(CATPT_DMA_DEVID, chan->chan_id), |
| 79 | CATPT_HMDC_HDDA(CATPT_DMA_DEVID, chan->chan_id)); | 80 | CATPT_HMDC_HDDA(CATPT_DMA_DEVID, chan->chan_id)); |
| 80 | dmaengine_submit(desc); | 81 | |
| 82 | ret = dma_submit_error(dmaengine_submit(desc)); | ||
| 83 | if (ret) { | ||
| 84 | dev_err(cdev->dev, "submit tx failed: %d\n", ret); | ||
| 85 | goto clear_hdda; | ||
| 86 | } | ||
| 87 | |||
| 81 | status = dma_wait_for_async_tx(desc); | 88 | status = dma_wait_for_async_tx(desc); |
| 89 | ret = (status == DMA_COMPLETE) ? 0 : -EPROTO; | ||
| 90 | |||
| 91 | clear_hdda: | ||
| 82 | /* regardless of status, disable access to HOST memory in demand mode */ | 92 | /* regardless of status, disable access to HOST memory in demand mode */ |
| 83 | catpt_updatel_shim(cdev, HMDC, | 93 | catpt_updatel_shim(cdev, HMDC, |
| 84 | CATPT_HMDC_HDDA(CATPT_DMA_DEVID, chan->chan_id), 0); | 94 | CATPT_HMDC_HDDA(CATPT_DMA_DEVID, chan->chan_id), 0); |
| 85 | 95 | ||
| 86 | return (status == DMA_COMPLETE) ? 0 : -EPROTO; | 96 | return ret; |
| 87 | } | 97 | } |
| 88 | 98 | ||
| 89 | int catpt_dma_memcpy_todsp(struct catpt_dev *cdev, struct dma_chan *chan, | 99 | int catpt_dma_memcpy_todsp(struct catpt_dev *cdev, struct dma_chan *chan, |
| @@ -259,9 +259,9 @@ static enum catpt_channel_config catpt_get_channel_config(u32 num_channels) · 258 unmodified lines | |||
| 259 | static int catpt_dai_startup(struct snd_pcm_substream *substream, | 259 | static int catpt_dai_startup(struct snd_pcm_substream *substream, |
| 260 | struct snd_soc_dai *dai) | 260 | struct snd_soc_dai *dai) |
| 261 | { | 261 | { |
| 262 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 263 | struct catpt_stream_template *template; | 262 | struct catpt_stream_template *template; |
| 264 | struct catpt_stream_runtime *stream; | 263 | struct catpt_stream_runtime *stream; |
| 264 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 265 | struct resource *res; | 265 | struct resource *res; |
| 266 | int ret; | 266 | int ret; |
| 267 | 267 | ||
| @@ -306,8 +306,8 @@ err_pgtbl: · 38 unmodified lines | |||
| 306 | static void catpt_dai_shutdown(struct snd_pcm_substream *substream, | 306 | static void catpt_dai_shutdown(struct snd_pcm_substream *substream, |
| 307 | struct snd_soc_dai *dai) | 307 | struct snd_soc_dai *dai) |
| 308 | { | 308 | { |
| 309 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 310 | struct catpt_stream_runtime *stream; | 309 | struct catpt_stream_runtime *stream; |
| 310 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 311 | 311 | ||
| 312 | stream = snd_soc_dai_get_dma_data(dai, substream); | 312 | stream = snd_soc_dai_get_dma_data(dai, substream); |
| 313 | 313 | ||
| @@ -329,9 +329,9 @@ static int catpt_set_dspvol(struct catpt_dev *cdev, u8 stream_id, long *ctlvol); · 15 unmodified lines | |||
| 329 | static int catpt_dai_apply_usettings(struct snd_soc_dai *dai, | 329 | static int catpt_dai_apply_usettings(struct snd_soc_dai *dai, |
| 330 | struct catpt_stream_runtime *stream) | 330 | struct catpt_stream_runtime *stream) |
| 331 | { | 331 | { |
| 332 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 333 | struct snd_soc_component *component = dai->component; | 332 | struct snd_soc_component *component = dai->component; |
| 334 | struct snd_kcontrol *pos; | 333 | struct snd_kcontrol *pos; |
| 334 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 335 | const char *name; | 335 | const char *name; |
| 336 | int ret; | 336 | int ret; |
| 337 | u32 id = stream->info.stream_hw_id; | 337 | u32 id = stream->info.stream_hw_id; |
| @@ -374,12 +374,12 @@ static int catpt_dai_hw_params(struct snd_pcm_substream *substream, · 36 unmodified lines | |||
| 374 | struct snd_pcm_hw_params *params, | 374 | struct snd_pcm_hw_params *params, |
| 375 | struct snd_soc_dai *dai) | 375 | struct snd_soc_dai *dai) |
| 376 | { | 376 | { |
| 377 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | 377 | struct snd_pcm_runtime *rtm = substream->runtime; |
| 378 | struct snd_dma_buffer *dmab; | ||
| 378 | struct catpt_stream_runtime *stream; | 379 | struct catpt_stream_runtime *stream; |
| 379 | struct catpt_audio_format afmt; | 380 | struct catpt_audio_format afmt; |
| 380 | struct catpt_ring_info rinfo; | 381 | struct catpt_ring_info rinfo; |
| 381 | struct snd_pcm_runtime *rtm = substream->runtime; | 382 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); |
| 382 | struct snd_dma_buffer *dmab; | ||
| 383 | int ret; | 383 | int ret; |
| 384 | 384 | ||
| 385 | stream = snd_soc_dai_get_dma_data(dai, substream); | 385 | stream = snd_soc_dai_get_dma_data(dai, substream); |
| @@ -427,8 +427,8 @@ static int catpt_dai_hw_params(struct snd_pcm_substream *substream, · 41 unmodified lines | |||
| 427 | static int catpt_dai_hw_free(struct snd_pcm_substream *substream, | 427 | static int catpt_dai_hw_free(struct snd_pcm_substream *substream, |
| 428 | struct snd_soc_dai *dai) | 428 | struct snd_soc_dai *dai) |
| 429 | { | 429 | { |
| 430 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 431 | struct catpt_stream_runtime *stream; | 430 | struct catpt_stream_runtime *stream; |
| 431 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 432 | 432 | ||
| 433 | stream = snd_soc_dai_get_dma_data(dai, substream); | 433 | stream = snd_soc_dai_get_dma_data(dai, substream); |
| 434 | if (!stream->allocated) | 434 | if (!stream->allocated) |
| @@ -444,8 +444,8 @@ static int catpt_dai_hw_free(struct snd_pcm_substream *substream, · 9 unmodified lines | |||
| 444 | static int catpt_dai_prepare(struct snd_pcm_substream *substream, | 444 | static int catpt_dai_prepare(struct snd_pcm_substream *substream, |
| 445 | struct snd_soc_dai *dai) | 445 | struct snd_soc_dai *dai) |
| 446 | { | 446 | { |
| 447 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 448 | struct catpt_stream_runtime *stream; | 447 | struct catpt_stream_runtime *stream; |
| 448 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 449 | int ret; | 449 | int ret; |
| 450 | 450 | ||
| 451 | stream = snd_soc_dai_get_dma_data(dai, substream); | 451 | stream = snd_soc_dai_get_dma_data(dai, substream); |
| @@ -467,9 +467,9 @@ static int catpt_dai_prepare(struct snd_pcm_substream *substream, · 15 unmodified lines | |||
| 467 | static int catpt_dai_trigger(struct snd_pcm_substream *substream, int cmd, | 467 | static int catpt_dai_trigger(struct snd_pcm_substream *substream, int cmd, |
| 468 | struct snd_soc_dai *dai) | 468 | struct snd_soc_dai *dai) |
| 469 | { | 469 | { |
| 470 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 471 | struct catpt_stream_runtime *stream; | ||
| 472 | struct snd_pcm_runtime *runtime = substream->runtime; | 470 | struct snd_pcm_runtime *runtime = substream->runtime; |
| 471 | struct catpt_stream_runtime *stream; | ||
| 472 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 473 | snd_pcm_uframes_t pos; | 473 | snd_pcm_uframes_t pos; |
| 474 | int ret; | 474 | int ret; |
| 475 | 475 | ||
| @@ -595,9 +595,8 @@ static int catpt_component_open(struct snd_soc_component *component, · 119 unmodified lines | |||
| 595 | { | 595 | { |
| 596 | struct snd_soc_pcm_runtime *rtm = substream->private_data; | 596 | struct snd_soc_pcm_runtime *rtm = substream->private_data; |
| 597 | 597 | ||
| 598 | if (rtm->dai_link->no_pcm) | 598 | if (!rtm->dai_link->no_pcm) |
| 599 | return 0; | 599 | snd_soc_set_runtime_hwparams(substream, &catpt_pcm_hardware); |
| 600 | snd_soc_set_runtime_hwparams(substream, &catpt_pcm_hardware); | ||
| 601 | return 0; | 600 | return 0; |
| 602 | } | 601 | } |
| 603 | 602 | ||
| @@ -605,10 +604,10 @@ static snd_pcm_uframes_t · 1 unmodified line | |||
| 605 | catpt_component_pointer(struct snd_soc_component *component, | 604 | catpt_component_pointer(struct snd_soc_component *component, |
| 606 | struct snd_pcm_substream *substream) | 605 | struct snd_pcm_substream *substream) |
| 607 | { | 606 | { |
| 608 | struct catpt_dev *cdev = dev_get_drvdata(component->dev); | ||
| 609 | struct catpt_stream_runtime *stream; | ||
| 610 | struct snd_soc_pcm_runtime *rtm = substream->private_data; | 607 | struct snd_soc_pcm_runtime *rtm = substream->private_data; |
| 611 | struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtm, 0); | 608 | struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtm, 0); |
| 609 | struct catpt_stream_runtime *stream; | ||
| 610 | struct catpt_dev *cdev = dev_get_drvdata(component->dev); | ||
| 612 | u32 pos; | 611 | u32 pos; |
| 613 | 612 | ||
| 614 | if (rtm->dai_link->no_pcm) | 613 | if (rtm->dai_link->no_pcm) |
| @@ -633,8 +632,8 @@ static int catpt_dai_pcm_new(struct snd_soc_pcm_runtime *rtm, · 18 unmodified lines | |||
| 633 | struct snd_soc_dai *dai) | 632 | struct snd_soc_dai *dai) |
| 634 | { | 633 | { |
| 635 | struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtm, 0); | 634 | struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtm, 0); |
| 636 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 637 | struct catpt_ssp_device_format devfmt; | 635 | struct catpt_ssp_device_format devfmt; |
| 636 | struct catpt_dev *cdev = dev_get_drvdata(dai->dev); | ||
| 638 | int ret; | 637 | int ret; |
| 639 | 638 | ||
| 640 | devfmt.iface = dai->driver->id; | 639 | devfmt.iface = dai->driver->id; |
| @@ -894,8 +893,8 @@ static int catpt_stream_volume_get(struct snd_kcontrol *kcontrol, · 253 unmodified lines | |||
| 894 | { | 893 | { |
| 895 | struct snd_soc_component *component = | 894 | struct snd_soc_component *component = |
| 896 | snd_soc_kcontrol_component(kcontrol); | 895 | snd_soc_kcontrol_component(kcontrol); |
| 897 | struct catpt_dev *cdev = dev_get_drvdata(component->dev); | ||
| 898 | struct catpt_stream_runtime *stream; | 896 | struct catpt_stream_runtime *stream; |
| 897 | struct catpt_dev *cdev = dev_get_drvdata(component->dev); | ||
| 899 | long *ctlvol = (long *)kcontrol->private_value; | 898 | long *ctlvol = (long *)kcontrol->private_value; |
| 900 | u32 dspvol; | 899 | u32 dspvol; |
| 901 | int i; | 900 | int i; |
| @@ -926,8 +925,8 @@ static int catpt_stream_volume_put(struct snd_kcontrol *kcontrol, · 24 unmodified lines | |||
| 926 | { | 925 | { |
| 927 | struct snd_soc_component *component = | 926 | struct snd_soc_component *component = |
| 928 | snd_soc_kcontrol_component(kcontrol); | 927 | snd_soc_kcontrol_component(kcontrol); |
| 929 | struct catpt_dev *cdev = dev_get_drvdata(component->dev); | ||
| 930 | struct catpt_stream_runtime *stream; | 928 | struct catpt_stream_runtime *stream; |
| 929 | struct catpt_dev *cdev = dev_get_drvdata(component->dev); | ||
| 931 | long *ctlvol = (long *)kcontrol->private_value; | 930 | long *ctlvol = (long *)kcontrol->private_value; |
| 932 | int ret, i; | 931 | int ret, i; |
| 933 | 932 | ||
| @@ -1002,8 +1001,8 @@ static int catpt_loopback_switch_put(struct snd_kcontrol *kcontrol, · 68 unmodified lines | |||
| 1002 | { | 1001 | { |
| 1003 | struct snd_soc_component *component = | 1002 | struct snd_soc_component *component = |
| 1004 | snd_soc_kcontrol_component(kcontrol); | 1003 | snd_soc_kcontrol_component(kcontrol); |
| 1005 | struct catpt_dev *cdev = dev_get_drvdata(component->dev); | ||
| 1006 | struct catpt_stream_runtime *stream; | 1004 | struct catpt_stream_runtime *stream; |
| 1005 | struct catpt_dev *cdev = dev_get_drvdata(component->dev); | ||
| 1007 | bool mute; | 1006 | bool mute; |
| 1008 | int ret; | 1007 | int ret; |
| 1009 | 1008 | ||