Commit 74c34ca1 authored by Eldad Zack's avatar Eldad Zack Committed by Takashi Iwai

ALSA: pcm_format_to_bits strong-typed conversion

Add a function to handle conversion from snd_pcm_format_t
to bitwise with proper typing.

Change such conversions to use this function and silence sparse
warnings.
Signed-off-by: default avatarEldad Zack <eldad@fogrefinery.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 75481347
...@@ -1133,4 +1133,10 @@ int snd_pcm_add_chmap_ctls(struct snd_pcm *pcm, int stream, ...@@ -1133,4 +1133,10 @@ int snd_pcm_add_chmap_ctls(struct snd_pcm *pcm, int stream,
unsigned long private_value, unsigned long private_value,
struct snd_pcm_chmap **info_ret); struct snd_pcm_chmap **info_ret);
/* Strong-typed conversion of pcm_format to bitwise */
static inline u64 pcm_format_to_bits(snd_pcm_format_t pcm_format)
{
return 1ULL << (__force int) pcm_format;
}
#endif /* __SOUND_PCM_H */ #endif /* __SOUND_PCM_H */
...@@ -179,7 +179,7 @@ static int i2sbus_pcm_open(struct i2sbus_dev *i2sdev, int in) ...@@ -179,7 +179,7 @@ static int i2sbus_pcm_open(struct i2sbus_dev *i2sdev, int in)
*/ */
if (other->active) { if (other->active) {
/* FIXME: is this guaranteed by the alsa api? */ /* FIXME: is this guaranteed by the alsa api? */
hw->formats &= (1ULL << i2sdev->format); hw->formats &= pcm_format_to_bits(i2sdev->format);
/* see above, restrict rates to the one we already have */ /* see above, restrict rates to the one we already have */
hw->rate_min = i2sdev->rate; hw->rate_min = i2sdev->rate;
hw->rate_max = i2sdev->rate; hw->rate_max = i2sdev->rate;
......
...@@ -182,7 +182,7 @@ static int atmel_ac97c_playback_open(struct snd_pcm_substream *substream) ...@@ -182,7 +182,7 @@ static int atmel_ac97c_playback_open(struct snd_pcm_substream *substream)
runtime->hw.rate_max = chip->cur_rate; runtime->hw.rate_max = chip->cur_rate;
} }
if (chip->cur_format) if (chip->cur_format)
runtime->hw.formats = (1ULL << chip->cur_format); runtime->hw.formats = pcm_format_to_bits(chip->cur_format);
mutex_unlock(&opened_mutex); mutex_unlock(&opened_mutex);
chip->playback_substream = substream; chip->playback_substream = substream;
return 0; return 0;
...@@ -201,7 +201,7 @@ static int atmel_ac97c_capture_open(struct snd_pcm_substream *substream) ...@@ -201,7 +201,7 @@ static int atmel_ac97c_capture_open(struct snd_pcm_substream *substream)
runtime->hw.rate_max = chip->cur_rate; runtime->hw.rate_max = chip->cur_rate;
} }
if (chip->cur_format) if (chip->cur_format)
runtime->hw.formats = (1ULL << chip->cur_format); runtime->hw.formats = pcm_format_to_bits(chip->cur_format);
mutex_unlock(&opened_mutex); mutex_unlock(&opened_mutex);
chip->capture_substream = substream; chip->capture_substream = substream;
return 0; return 0;
......
...@@ -325,7 +325,7 @@ static void params_change(struct snd_pcm_substream *substream) ...@@ -325,7 +325,7 @@ static void params_change(struct snd_pcm_substream *substream)
struct loopback_pcm *dpcm = runtime->private_data; struct loopback_pcm *dpcm = runtime->private_data;
struct loopback_cable *cable = dpcm->cable; struct loopback_cable *cable = dpcm->cable;
cable->hw.formats = (1ULL << runtime->format); cable->hw.formats = pcm_format_to_bits(runtime->format);
cable->hw.rate_min = runtime->rate; cable->hw.rate_min = runtime->rate;
cable->hw.rate_max = runtime->rate; cable->hw.rate_max = runtime->rate;
cable->hw.channels_min = runtime->channels; cable->hw.channels_min = runtime->channels;
......
...@@ -966,7 +966,7 @@ static u64 snd_card_asihpi_playback_formats(struct snd_card_asihpi *asihpi, ...@@ -966,7 +966,7 @@ static u64 snd_card_asihpi_playback_formats(struct snd_card_asihpi *asihpi,
if (!err) if (!err)
err = hpi_outstream_query_format(h_stream, &hpi_format); err = hpi_outstream_query_format(h_stream, &hpi_format);
if (!err && (hpi_to_alsa_formats[format] != -1)) if (!err && (hpi_to_alsa_formats[format] != -1))
formats |= (1ULL << hpi_to_alsa_formats[format]); formats |= pcm_format_to_bits(hpi_to_alsa_formats[format]);
} }
return formats; return formats;
} }
...@@ -1142,7 +1142,7 @@ static u64 snd_card_asihpi_capture_formats(struct snd_card_asihpi *asihpi, ...@@ -1142,7 +1142,7 @@ static u64 snd_card_asihpi_capture_formats(struct snd_card_asihpi *asihpi,
if (!err) if (!err)
err = hpi_instream_query_format(h_stream, &hpi_format); err = hpi_instream_query_format(h_stream, &hpi_format);
if (!err) if (!err)
formats |= (1ULL << hpi_to_alsa_formats[format]); formats |= pcm_format_to_bits(hpi_to_alsa_formats[format]);
} }
return formats; return formats;
} }
......
...@@ -365,7 +365,8 @@ static int parse_audio_format_i(struct snd_usb_audio *chip, ...@@ -365,7 +365,8 @@ static int parse_audio_format_i(struct snd_usb_audio *chip,
{ {
struct usb_interface_descriptor *altsd = get_iface_desc(iface); struct usb_interface_descriptor *altsd = get_iface_desc(iface);
int protocol = altsd->bInterfaceProtocol; int protocol = altsd->bInterfaceProtocol;
int pcm_format, ret; snd_pcm_format_t pcm_format;
int ret;
if (fmt->bFormatType == UAC_FORMAT_TYPE_III) { if (fmt->bFormatType == UAC_FORMAT_TYPE_III) {
/* FIXME: the format type is really IECxxx /* FIXME: the format type is really IECxxx
...@@ -384,7 +385,7 @@ static int parse_audio_format_i(struct snd_usb_audio *chip, ...@@ -384,7 +385,7 @@ static int parse_audio_format_i(struct snd_usb_audio *chip,
default: default:
pcm_format = SNDRV_PCM_FORMAT_S16_LE; pcm_format = SNDRV_PCM_FORMAT_S16_LE;
} }
fp->formats = 1uLL << pcm_format; fp->formats = pcm_format_to_bits(pcm_format);
} else { } else {
fp->formats = parse_audio_format_i_type(chip, fp, format, fp->formats = parse_audio_format_i_type(chip, fp, format,
fmt, protocol); fmt, protocol);
......
...@@ -100,7 +100,7 @@ static struct audioformat *find_format(struct snd_usb_substream *subs) ...@@ -100,7 +100,7 @@ static struct audioformat *find_format(struct snd_usb_substream *subs)
int cur_attr = 0, attr; int cur_attr = 0, attr;
list_for_each_entry(fp, &subs->fmt_list, list) { list_for_each_entry(fp, &subs->fmt_list, list) {
if (!(fp->formats & (1uLL << subs->pcm_format))) if (!(fp->formats & pcm_format_to_bits(subs->pcm_format)))
continue; continue;
if (fp->channels != subs->channels) if (fp->channels != subs->channels)
continue; continue;
...@@ -478,7 +478,7 @@ static int match_endpoint_audioformats(struct audioformat *fp, ...@@ -478,7 +478,7 @@ static int match_endpoint_audioformats(struct audioformat *fp,
return 0; return 0;
} }
if (!(fp->formats & (1ULL << pcm_format))) { if (!(fp->formats & pcm_format_to_bits(pcm_format))) {
snd_printdd("%s: (fmt @%p) no match for format %d\n", __func__, snd_printdd("%s: (fmt @%p) no match for format %d\n", __func__,
fp, pcm_format); fp, pcm_format);
return 0; return 0;
......
...@@ -85,7 +85,7 @@ static void proc_dump_substream_formats(struct snd_usb_substream *subs, struct s ...@@ -85,7 +85,7 @@ static void proc_dump_substream_formats(struct snd_usb_substream *subs, struct s
snd_iprintf(buffer, " Altset %d\n", fp->altsetting); snd_iprintf(buffer, " Altset %d\n", fp->altsetting);
snd_iprintf(buffer, " Format:"); snd_iprintf(buffer, " Format:");
for (fmt = 0; fmt <= SNDRV_PCM_FORMAT_LAST; ++fmt) for (fmt = 0; fmt <= SNDRV_PCM_FORMAT_LAST; ++fmt)
if (fp->formats & (1uLL << fmt)) if (fp->formats & pcm_format_to_bits(fmt))
snd_iprintf(buffer, " %s", snd_iprintf(buffer, " %s",
snd_pcm_format_name(fmt)); snd_pcm_format_name(fmt));
snd_iprintf(buffer, "\n"); snd_iprintf(buffer, "\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment