pcm_sink: allow per-sink swvol/hwvol selection
rockbox-gerrit-noreply--- via rockbox-cvs <[email protected]>
| Newsgroups | gmane.comp.systems.archos.rockbox.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit 9a7ffac2e4f46d812334d19fa7df59f21771eef2 Author: Skye <[email protected]> Date: Fri Aug 14 22:39:13 2026 +0900 pcm_sink: allow per-sink swvol/hwvol selection Change-Id: I5b0a66f2e41ca32a2d6c88bda3ffe0db0df08ce0 diff --git a/firmware/SOURCES b/firmware/SOURCES index 7ae34427e9..488f61ccab 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -552,9 +552,9 @@ sound.c pcm_sampr.c pcm.c pcm_mixer.c -#ifdef HAVE_SW_VOLUME_CONTROL +#ifdef WANT_SWVOL pcm_sw_volume.c -#endif /* HAVE_SW_VOLUME_CONTROL */ +#endif /* WANT_SWVOL */ #ifdef HAVE_RECORDING enc_base.c #endif /* HAVE_RECORDING */ diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h index c6308b3aff..75e65e05a4 100644 --- a/firmware/export/audiohw.h +++ b/firmware/export/audiohw.h @@ -696,4 +696,12 @@ AUDIOHW_SETTING(STEREO_WIDTH, "%", 0, 5, 0, 250, 100) # define PCM_NATIVE_BITDEPTH 16 #endif +#ifndef PCM_NATIVE_VOLUME_TYPE +#if !defined(HAVE_SW_VOLUME_CONTROL) || defined(PCM_SW_VOLUME_UNBUFFERED) +#define PCM_NATIVE_VOLUME_TYPE PCM_SINK_HWVOL +#else +#define PCM_NATIVE_VOLUME_TYPE PCM_SINK_SWVOL +#endif +#endif + #endif /* _AUDIOHW_H_ */ diff --git a/firmware/export/config.h b/firmware/export/config.h index afa0b274f8..1a70ad7bdb 100644 --- a/firmware/export/config.h +++ b/firmware/export/config.h @@ -1494,4 +1494,12 @@ Lyre prototype 1 */ #define ucschar_t unsigned short #endif +#ifdef HAVE_SW_VOLUME_CONTROL +#define WANT_SWVOL +#endif + +#if defined(PCM_NATIVE_BITDEPTH) && (PCM_NATIVE_BITDEPTH > 16) +#define WANT_SWVOL_32 +#endif + #endif /* __CONFIG_H__ */ diff --git a/firmware/export/pcm-internal.h b/firmware/export/pcm-internal.h index 4f69f77806..7ffbb08b36 100644 --- a/firmware/export/pcm-internal.h +++ b/firmware/export/pcm-internal.h @@ -45,21 +45,22 @@ #define PCM_FACTOR_UNITY (1u << PCM_SW_VOLUME_FRACBITS) #endif /* PCM_SW_VOLUME_FRACBITS */ +#ifdef HAVE_SDL_AUDIO #ifdef PCM_SW_VOLUME_UNBUFFERED /* Copies buffer with volume scaling applied */ void pcm_sw_volume_copy_buffer(void *dst, const void *src, size_t size); #define pcm_copy_buffer pcm_sw_volume_copy_buffer -#else /* !PCM_SW_VOLUME_UNBUFFERED */ -#ifdef HAVE_SDL_AUDIO +#else /* PCM_SW_VOLUME_UNBUFFERED */ #define pcm_copy_buffer memcpy -#endif +#endif /* PCM_SW_VOLUME_UNBUFFERED */ +#endif /* HAVE_SDL_AUDIO */ + #ifndef PCM_PLAY_DBL_BUF_SAMPLES #define PCM_PLAY_DBL_BUF_SAMPLES 1024 /* Max 4KByte chunks */ #endif #ifndef PCM_DBL_BUF_BSS #define PCM_DBL_BUF_BSS /* In DRAM, uncached may be better */ #endif -#endif /* PCM_SW_VOLUME_UNBUFFERED */ void pcm_sync_pcm_factors(void); #endif /* HAVE_SW_VOLUME_CONTROL */ @@ -126,20 +127,15 @@ static FORCE_INLINE enum pcm_dma_status pcm_play_call_status_cb( static FORCE_INLINE enum pcm_dma_status pcm_play_dma_status_callback(enum pcm_dma_status status) { -#if defined(HAVE_SW_VOLUME_CONTROL) && !defined(PCM_SW_VOLUME_UNBUFFERED) +#ifdef WANT_SWVOL extern enum pcm_dma_status - pcm_play_dma_status_callback_int(enum pcm_dma_status status); - return pcm_play_dma_status_callback_int(status); -#else + pcm_play_dma_status_callback_int_swvol(enum pcm_dma_status status); + if (pcm_current_sink_caps()->volume_type == PCM_SINK_SWVOL) + return pcm_play_dma_status_callback_int_swvol(status); +#endif /* WANT_SWVOL */ return pcm_play_call_status_cb(status); -#endif /* HAVE_SW_VOLUME_CONTROL && !PCM_SW_VOLUME_UNBUFFERED */ } -#if defined(HAVE_SW_VOLUME_CONTROL) && !defined(PCM_SW_VOLUME_UNBUFFERED) -void pcm_play_dma_start_int(const void *addr, size_t size); -void pcm_play_dma_stop_int(void); -#endif /* HAVE_SW_VOLUME_CONTROL && !PCM_SW_VOLUME_UNBUFFERED */ - /* Called by the bottom layer ISR when more data is needed. Returns true * if a new buffer is available, false otherwise. */ bool pcm_play_dma_complete_callback(enum pcm_dma_status status, diff --git a/firmware/export/pcm_sink.h b/firmware/export/pcm_sink.h index 522a5aa853..54eb261014 100644 --- a/firmware/export/pcm_sink.h +++ b/firmware/export/pcm_sink.h @@ -23,10 +23,16 @@ #include "config.h" +#define PCM_SINK_HWVOL 0 +#ifdef WANT_SWVOL +#define PCM_SINK_SWVOL 1 +#endif + struct pcm_sink_caps { const unsigned long* samprs; - uint16_t num_samprs; - uint16_t default_freq; + uint8_t num_samprs; + uint8_t default_freq; + uint8_t volume_type; }; struct pcm_sink_ops { diff --git a/firmware/export/pcm_sw_volume.h b/firmware/export/pcm_sw_volume.h index 5aba259b2a..dc9962fbb5 100644 --- a/firmware/export/pcm_sw_volume.h +++ b/firmware/export/pcm_sw_volume.h @@ -26,10 +26,11 @@ ** the library or a hardware necessity. Normally, it shouldn't be used and ** only the port developer can properly decide. **/ -#ifdef HAVE_SW_VOLUME_CONTROL +#ifdef WANT_SWVOL #include <audiohw.h> #include <limits.h> +#include <stddef.h> #define PCM_MUTE_LEVEL INT_MIN @@ -41,6 +42,11 @@ void pcm_set_prescaler(int prescale); /* Set the per-channel volume cut/gain for all PCM playback */ void pcm_set_master_volume(int vol_l, int vol_r); -#endif /* HAVE_SW_VOLUME_CONTROL */ +void pcm_play_dma_start_int_swvol(const void *addr, size_t size); +void pcm_play_dma_stop_int_swvol(void); +enum pcm_dma_status pcm_play_dma_status_callback_int_swvol(enum pcm_dma_status status); +bool pcm_play_dma_complete_callback_swvol(enum pcm_dma_status status, + const void **addr, size_t *size); +#endif /* WANT_SWVOL */ #endif /* PCM_SW_VOLUME_H */ diff --git a/firmware/pcm.c b/firmware/pcm.c index 5fa368911f..bea1edb376 100644 --- a/firmware/pcm.c +++ b/firmware/pcm.c @@ -30,6 +30,7 @@ #include "general.h" #include "pcm-internal.h" #include "pcm_mixer.h" +#include "pcm_sw_volume.h" /** * Aspects implemented in the target-specific portion: @@ -105,12 +106,15 @@ struct pcm_sink* pcm_get_current_sink(void) return sinks[cur_sink]; } -#if !defined(HAVE_SW_VOLUME_CONTROL) || defined(PCM_SW_VOLUME_UNBUFFERED) /** Standard hw volume/unbuffered control functions - otherwise, see ** pcm_sw_volume.c **/ static inline void pcm_play_dma_start_int(const void *addr, size_t size) { -#ifdef HAVE_SW_VOLUME_CONTROL +#ifdef WANT_SWVOL + if (sinks[cur_sink]->caps.volume_type == PCM_SINK_SWVOL) { + pcm_play_dma_start_int_swvol(addr, size); + return; + } /* Smoothed transition might not have happened so sync now */ pcm_sync_pcm_factors(); #endif @@ -119,12 +123,23 @@ static inline void pcm_play_dma_start_int(const void *addr, size_t size) static inline void pcm_play_dma_stop_int(void) { +#ifdef WANT_SWVOL + if (sinks[cur_sink]->caps.volume_type == PCM_SINK_SWVOL) { + pcm_play_dma_stop_int_swvol(); + return; + } +#endif sinks[cur_sink]->ops.stop(); } bool pcm_play_dma_complete_callback(enum pcm_dma_status status, const void **addr, size_t *size) { +#ifdef WANT_SWVOL + if (sinks[cur_sink]->caps.volume_type == PCM_SINK_SWVOL) { + return pcm_play_dma_complete_callback_swvol(status, addr, size); + } +#endif /* Check status callback first if error */ if (status < PCM_DMAST_OK) status = pcm_play_dma_status_callback(status); @@ -137,7 +152,6 @@ bool pcm_play_dma_complete_callback(enum pcm_dma_status status, pcm_play_stop_int(); return false; } -#endif /* !HAVE_SW_VOLUME_CONTROL || PCM_SW_VOLUME_UNBUFFERED */ void pcm_play_stop_int(void) { diff --git a/firmware/pcm_sw_volume.c b/firmware/pcm_sw_volume.c index 99e5d62cb4..293cda643b 100644 --- a/firmware/pcm_sw_volume.c +++ b/firmware/pcm_sw_volume.c @@ -210,7 +210,7 @@ void pcm_sync_pcm_factors(void) #endif } -#ifndef PCM_SW_VOLUME_UNBUFFERED +#ifdef WANT_SWVOL /* source buffer from client */ static const void * volatile src_buf_addr = NULL; static size_t volatile src_buf_rem = 0; @@ -227,7 +227,7 @@ static unsigned int frame_count, frame_err, frame_frac; /** Overrides of certain functions in pcm.c and pcm-internal.h **/ -bool pcm_play_dma_complete_callback(enum pcm_dma_status status, +bool pcm_play_dma_complete_callback_swvol(enum pcm_dma_status status, const void **addr, size_t *size) { /* Check status callback first if error */ @@ -268,7 +268,7 @@ static void update_frame_params(size_t size) /* Obtain the next buffer and prepare it for pcm driver playback */ enum pcm_dma_status -pcm_play_dma_status_callback_int(enum pcm_dma_status status) +pcm_play_dma_status_callback_int_swvol(enum pcm_dma_status status) { if (status != PCM_DMAST_STARTED) return status; @@ -327,7 +327,7 @@ static void start_pcm(bool reframe) pcm_get_current_sink()->ops.play(pcm_dbl_buf[1], pcm_dbl_buf_size[1]); } -void pcm_play_dma_start_int(const void *addr, size_t size) +void pcm_play_dma_start_int_swvol(const void *addr, size_t size) { src_buf_addr = addr; /* divide by 2 for 32 bit, optimize away to 1 for 16 bit */ @@ -335,14 +335,14 @@ void pcm_play_dma_start_int(const void *addr, size_t size) start_pcm(true); } -void pcm_play_dma_stop_int(void) +void pcm_play_dma_stop_int_swvol(void) { pcm_get_current_sink()->ops.stop(); src_buf_addr = NULL; src_buf_rem = 0; } -#endif /* PCM_SW_VOLUME_UNBUFFERED */ +#endif /* WANT_SWVOL */ /** Internal **/ diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c index 029c075e52..dbc362910f 100644 --- a/firmware/target/arm/as3525/pcm-as3525.c +++ b/firmware/target/arm/as3525/pcm-as3525.c @@ -205,6 +205,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/arm/imx233/pcm-imx233.c b/firmware/target/arm/imx233/pcm-imx233.c index 0c5b4624f4..7ee5860c0f 100644 --- a/firmware/target/arm/imx233/pcm-imx233.c +++ b/firmware/target/arm/imx233/pcm-imx233.c @@ -175,6 +175,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = audiohw_preinit, diff --git a/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c b/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c index 25d149f74d..772964aaae 100644 --- a/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c +++ b/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c @@ -229,6 +229,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/arm/pcm-telechips.c b/firmware/target/arm/pcm-telechips.c index 3c9ca6b9b5..37c69a5323 100644 --- a/firmware/target/arm/pcm-telechips.c +++ b/firmware/target/arm/pcm-telechips.c @@ -174,6 +174,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/arm/pp/pcm-pp.c b/firmware/target/arm/pp/pcm-pp.c index 2a1ddd7668..08b7328e1c 100644 --- a/firmware/target/arm/pp/pcm-pp.c +++ b/firmware/target/arm/pp/pcm-pp.c @@ -517,6 +517,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/arm/rk27xx/pcm-rk27xx.c b/firmware/target/arm/rk27xx/pcm-rk27xx.c index 3d7532d787..88139aecc4 100644 --- a/firmware/target/arm/rk27xx/pcm-rk27xx.c +++ b/firmware/target/arm/rk27xx/pcm-rk27xx.c @@ -263,6 +263,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c index 432862d39d..c76790d609 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/pcm-meg-fx.c @@ -220,6 +220,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/arm/s5l8700/pcm-s5l8700.c b/firmware/target/arm/s5l8700/pcm-s5l8700.c index 5bd2d4046d..8e36c9d60e 100644 --- a/firmware/target/arm/s5l8700/pcm-s5l8700.c +++ b/firmware/target/arm/s5l8700/pcm-s5l8700.c @@ -272,6 +272,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/arm/s5l8702/pcm-s5l8702.c b/firmware/target/arm/s5l8702/pcm-s5l8702.c index bd110f31c4..9af30b9c4b 100644 --- a/firmware/target/arm/s5l8702/pcm-s5l8702.c +++ b/firmware/target/arm/s5l8702/pcm-s5l8702.c @@ -220,6 +220,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/arm/stm32/echoplayer/pcm-echoplayer.c b/firmware/target/arm/stm32/echoplayer/pcm-echoplayer.c index d4944ce241..d1b4830d47 100644 --- a/firmware/target/arm/stm32/echoplayer/pcm-echoplayer.c +++ b/firmware/target/arm/stm32/echoplayer/pcm-echoplayer.c @@ -309,6 +309,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c index 8cb966fb8a..f8c261755e 100644 --- a/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c +++ b/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c @@ -162,6 +162,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/arm/tms320dm320/sansa-connect/pcm-sansaconnect.c b/firmware/target/arm/tms320dm320/sansa-connect/pcm-sansaconnect.c index 0f529f733d..61cd143221 100644 --- a/firmware/target/arm/tms320dm320/sansa-connect/pcm-sansaconnect.c +++ b/firmware/target/arm/tms320dm320/sansa-connect/pcm-sansaconnect.c @@ -164,6 +164,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/coldfire/pcm-coldfire.c b/firmware/target/coldfire/pcm-coldfire.c index 531feeec2d..24ef8ee190 100644 --- a/firmware/target/coldfire/pcm-coldfire.c +++ b/firmware/target/coldfire/pcm-coldfire.c @@ -306,6 +306,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/hosted/android/pcm-android.c b/firmware/target/hosted/android/pcm-android.c index 467f60e6cb..ca53d9a27d 100644 --- a/firmware/target/hosted/android/pcm-android.c +++ b/firmware/target/hosted/android/pcm-android.c @@ -29,6 +29,7 @@ #include "pcm-internal.h" #include "pcm_sampr.h" #include "pcm_sink.h" +#include "audiohw.h" extern JNIEnv *env_ptr; @@ -220,6 +221,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/hosted/ctru/pcm-ctru.c b/firmware/target/hosted/ctru/pcm-ctru.c index 4c296b6284..999b87ca0e 100644 --- a/firmware/target/hosted/ctru/pcm-ctru.c +++ b/firmware/target/hosted/ctru/pcm-ctru.c @@ -364,6 +364,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/hosted/ibasso/pcm-ibasso.c b/firmware/target/hosted/ibasso/pcm-ibasso.c index ea5651ac7e..94f9359029 100644 --- a/firmware/target/hosted/ibasso/pcm-ibasso.c +++ b/firmware/target/hosted/ibasso/pcm-ibasso.c @@ -33,6 +33,7 @@ #include "pcm-internal.h" #include "pcm_sampr.h" #include "pcm_sink.h" +#include "audiohw.h" #include "sound/asound.h" #include "tinyalsa/asoundlib.h" @@ -458,6 +459,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/hosted/pcm-alsa.c b/firmware/target/hosted/pcm-alsa.c index 7e4833fdfe..10b379b03d 100644 --- a/firmware/target/hosted/pcm-alsa.c +++ b/firmware/target/hosted/pcm-alsa.c @@ -775,6 +775,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/hosted/sdl/pcm-sdl.c b/firmware/target/hosted/sdl/pcm-sdl.c index 2b9df50faf..d2ed462a4d 100644 --- a/firmware/target/hosted/sdl/pcm-sdl.c +++ b/firmware/target/hosted/sdl/pcm-sdl.c @@ -449,6 +449,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c index a843480309..93fc4f4ca6 100644 --- a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c @@ -193,6 +193,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/mips/ingenic_jz47xx/pcm-jz4760.c b/firmware/target/mips/ingenic_jz47xx/pcm-jz4760.c index 37718d08da..29e35b63a4 100644 --- a/firmware/target/mips/ingenic_jz47xx/pcm-jz4760.c +++ b/firmware/target/mips/ingenic_jz47xx/pcm-jz4760.c @@ -178,6 +178,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/target/mips/ingenic_x1000/pcm-x1000.c b/firmware/target/mips/ingenic_x1000/pcm-x1000.c index 24dc49a1a1..05baa3cf44 100644 --- a/firmware/target/mips/ingenic_x1000/pcm-x1000.c +++ b/firmware/target/mips/ingenic_x1000/pcm-x1000.c @@ -208,6 +208,7 @@ struct pcm_sink builtin_pcm_sink = { .samprs = hw_freq_sampr, .num_samprs = HW_NUM_FREQ, .default_freq = HW_FREQ_DEFAULT, + .volume_type = PCM_NATIVE_VOLUME_TYPE, }, .ops = { .init = sink_dma_init, diff --git a/firmware/usbstack/iap/audio.c b/firmware/usbstack/iap/audio.c index 9dcbd01025..f4706b56d6 100644 --- a/firmware/usbstack/iap/audio.c +++ b/firmware/usbstack/iap/audio.c @@ -187,6 +187,7 @@ struct pcm_sink iap_pcm_sink = { .samprs = samprs, .num_samprs = ARRAYLEN(samprs), .default_freq = 0, + .volume_type = PCM_SINK_HWVOL, }, .ops = { .init = sink_nop, -- rockbox-cvs mailing list [email protected] https://lists.haxx.se/mailman/listinfo/rockbox-cvs