Skip to content

Commit 5deeea2

Browse files
pelwellpopcornmix
authored andcommitted
ASoC: bcm: Use the correct sample width value
ALSA's concept of the physical width of a sample is how much memory it occupies, including any padding. This not the same as the count of bits of actual sample content. In particular, S24_LE has a width of 24 bits but a physical width of 32 bits because there is a byte of padding with each sample. When calculating bclk_ratio, etc., it is width that matters, not physical width. Correct the error that has been replicated across the drivers for many Raspberry Pi-compatible soundcards. Signed-off-by: Phil Elwell <[email protected]>
1 parent 1bc9da0 commit 5deeea2

10 files changed

+9
-12
lines changed

sound/soc/bcm/allo-boss-dac.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ static int snd_allo_boss_hw_params(
274274
int ret = 0;
275275
struct snd_soc_pcm_runtime *rtd = substream->private_data;
276276
int channels = params_channels(params);
277-
int width = snd_pcm_format_physical_width(params_format(params));
277+
int width = snd_pcm_format_width(params_format(params));
278278

279279
if (snd_soc_allo_boss_master) {
280280
struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component;

sound/soc/bcm/dionaudio_loco.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ static int snd_rpi_dionaudio_loco_hw_params(
3232
struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
3333

3434
unsigned int sample_bits =
35-
snd_pcm_format_physical_width(params_format(params));
35+
snd_pcm_format_width(params_format(params));
3636

3737
return snd_soc_dai_set_bclk_ratio(cpu_dai, sample_bits * 2);
3838
}

sound/soc/bcm/hifiberry_dacplus.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ static int snd_rpi_hifiberry_dacplus_hw_params(
295295
int ret = 0;
296296
struct snd_soc_pcm_runtime *rtd = substream->private_data;
297297
int channels = params_channels(params);
298-
int width = snd_pcm_format_physical_width(params_format(params));
298+
int width = snd_pcm_format_width(params_format(params));
299299

300300
if (snd_rpi_hifiberry_is_dacpro) {
301301
struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component;

sound/soc/bcm/hifiberry_dacplusadc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ static int snd_rpi_hifiberry_dacplusadc_hw_params(
234234
if (snd_rpi_hifiberry_is_dacpro) {
235235
struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component;
236236

237-
width = snd_pcm_format_physical_width(params_format(params));
237+
width = snd_pcm_format_width(params_format(params));
238238

239239
snd_rpi_hifiberry_dacplusadc_set_sclk(component,
240240
params_rate(params));

sound/soc/bcm/hifiberry_dacplusadcpro.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ static int snd_rpi_hifiberry_dacplusadcpro_hw_params(
383383
int ret = 0;
384384
struct snd_soc_pcm_runtime *rtd = substream->private_data;
385385
int channels = params_channels(params);
386-
int width = snd_pcm_format_physical_width(params_format(params));
386+
int width = snd_pcm_format_width(params_format(params));
387387
struct snd_soc_component *dac = snd_soc_rtd_to_codec(rtd, 0)->component;
388388
struct snd_soc_dai *dai = snd_soc_rtd_to_codec(rtd, 0);
389389
struct snd_soc_dai_driver *drv = dai->driver;

sound/soc/bcm/i-sabre-q2m.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ static int snd_rpi_i_sabre_q2m_hw_params(
5353
struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
5454
int bclk_ratio;
5555

56-
bclk_ratio = snd_pcm_format_physical_width(
56+
bclk_ratio = snd_pcm_format_width(
5757
params_format(params)) * params_channels(params);
5858
return snd_soc_dai_set_bclk_ratio(cpu_dai, bclk_ratio);
5959
}

sound/soc/bcm/pifi-40.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,7 @@ static int snd_pifi_40_hw_params(struct snd_pcm_substream *substream,
140140
{
141141
struct snd_soc_pcm_runtime *rtd = substream->private_data;
142142
struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
143-
unsigned int sample_bits;
144143

145-
sample_bits = snd_pcm_format_physical_width(params_format(params));
146144
return snd_soc_dai_set_bclk_ratio(cpu_dai, 64);
147145
}
148146

sound/soc/bcm/pisound.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -895,7 +895,7 @@ static int pisnd_hw_params(
895895
printd("rate = %d\n", params_rate(params));
896896
printd("ch = %d\n", params_channels(params));
897897
printd("bits = %u\n",
898-
snd_pcm_format_physical_width(params_format(params)));
898+
snd_pcm_format_width(params_format(params)));
899899
printd("format = %d\n", params_format(params));
900900

901901
gpiod_set_value(reset, false);

sound/soc/bcm/rpi-cirrus.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -704,8 +704,7 @@ static int rpi_cirrus_hw_params(struct snd_pcm_substream *substream,
704704

705705
int ret;
706706

707-
unsigned int width = snd_pcm_format_physical_width(
708-
params_format(params));
707+
unsigned int width = snd_pcm_format_width(params_format(params));
709708
unsigned int rate = params_rate(params);
710709
unsigned int clk_freq = calc_sysclk(rate);
711710

sound/soc/bcm/rpi-simple-soundcard.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ static int snd_rpi_simple_hw_params(struct snd_pcm_substream *substream,
137137
* hard-code this for now. More complex drivers could just replace
138138
* the hw_params routine.
139139
*/
140-
sample_bits = snd_pcm_format_physical_width(params_format(params));
140+
sample_bits = snd_pcm_format_width(params_format(params));
141141
return snd_soc_dai_set_bclk_ratio(cpu_dai, sample_bits * 2);
142142
}
143143

0 commit comments

Comments
 (0)