summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2020-10-03 00:10:31 -0400
committerSolomon Peachy <pizza@shaftnet.org>2020-10-03 04:12:51 +0000
commit90c30bc7ef52cd447eb92157c53ba6ffc266efae (patch)
treee82735663bf4a920a18c0df57909aead79d6411c
parentc7eceea183d5fe80d7346a4331dff1b60c8a500c (diff)
downloadrockbox-90c30bc7ef52cd447eb92157c53ba6ffc266efae.tar.gz
rockbox-90c30bc7ef52cd447eb92157c53ba6ffc266efae.zip
alsa: Explicitly mute the output when we stop playing, and unmute after playback starts
Allows us to avoid hearing the codec powering on and off. Change-Id: Idaaff437932009952ed248be97eedf54cb4cf28e
-rw-r--r--firmware/target/hosted/pcm-alsa.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/firmware/target/hosted/pcm-alsa.c b/firmware/target/hosted/pcm-alsa.c
index d42775e8ef..1395d071aa 100644
--- a/firmware/target/hosted/pcm-alsa.c
+++ b/firmware/target/hosted/pcm-alsa.c
@@ -443,6 +443,7 @@ static int async_rw(snd_pcm_t *handle)
443 } else { 443 } else {
444 return state; 444 return state;
445 } 445 }
446
446 return 0; 447 return 0;
447} 448}
448 449
@@ -470,6 +471,10 @@ void pcm_play_dma_init(void)
470 if ((err = snd_pcm_nonblock(handle, 1))) 471 if ((err = snd_pcm_nonblock(handle, 1)))
471 panicf("Could not set non-block mode: %s\n", snd_strerror(err)); 472 panicf("Could not set non-block mode: %s\n", snd_strerror(err));
472 473
474#if defined(HAVE_XDUOO_LINUX_CODEC) || defined(HAVE_FIIO_LINUX_CODEC) || defined(HAVE_ROCKER_CODEC)
475 audiohw_mute(true);
476#endif
477
473 if ((err = set_hwparams(handle)) < 0) 478 if ((err = set_hwparams(handle)) < 0)
474 { 479 {
475 panicf("Setting of hwparams failed: %s\n", snd_strerror(err)); 480 panicf("Setting of hwparams failed: %s\n", snd_strerror(err));
@@ -523,12 +528,14 @@ static void pcm_dma_apply_settings_nolock(void)
523 audiohw_mute(true); 528 audiohw_mute(true);
524 snd_pcm_drop(handle); 529 snd_pcm_drop(handle);
525 set_hwparams(handle); 530 set_hwparams(handle);
526 audiohw_mute(false); 531// audiohw_mute(false); /// Play DMA will unmute us.
527 } 532 }
528} 533}
529#else 534#else
530static void pcm_dma_apply_settings_nolock(void) 535static void pcm_dma_apply_settings_nolock(void)
531{ 536{
537 logf("PCM DMA Settings %d %d", sample_rate, pcm_sampr);
538
532 snd_pcm_drop(handle); 539 snd_pcm_drop(handle);
533 set_hwparams(handle); 540 set_hwparams(handle);
534#if defined(HAVE_NWZ_LINUX_CODEC) 541#if defined(HAVE_NWZ_LINUX_CODEC)
@@ -557,6 +564,9 @@ void pcm_play_dma_stop(void)
557 snd_pcm_drain(handle); 564 snd_pcm_drain(handle);
558 snd_pcm_nonblock(handle, 1); 565 snd_pcm_nonblock(handle, 1);
559 sample_rate = 0; 566 sample_rate = 0;
567#if defined(HAVE_XDUOO_LINUX_CODEC) || defined(HAVE_FIIO_LINUX_CODEC) || defined(HAVE_ROCKER_CODEC)
568 audiohw_mute(true);
569#endif
560 logf("PCM DMA stopped"); 570 logf("PCM DMA stopped");
561} 571}
562 572
@@ -600,6 +610,9 @@ void pcm_play_dma_start(const void *addr, size_t size)
600 logf("Start error: %s\n", snd_strerror(err)); 610 logf("Start error: %s\n", snd_strerror(err));
601 return; 611 return;
602 } 612 }
613#if defined(HAVE_XDUOO_LINUX_CODEC) || defined(HAVE_FIIO_LINUX_CODEC) || defined(HAVE_ROCKER_CODEC)
614 audiohw_mute(false);
615#endif
603 if (err == 0) 616 if (err == 0)
604 return; 617 return;
605 break; 618 break;