ALSA: pcm_format_to_bits strong-typed conversion
authorEldad Zack <eldad@fogrefinery.com>
Mon, 22 Apr 2013 23:00:41 +0000 (01:00 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 29 Apr 2013 11:36:15 +0000 (13:36 +0200)
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: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/pcm.h
sound/aoa/soundbus/i2sbus/pcm.c
sound/atmel/ac97c.c
sound/drivers/aloop.c
sound/pci/asihpi/asihpi.c
sound/usb/format.c
sound/usb/pcm.c
sound/usb/proc.c

index 1b0c6484e71abce23955462d19b5a0e26e4b953e..5357ecbecc487412297391eb7a8f7616de5b59f6 100644 (file)
@@ -1133,4 +1133,10 @@ int snd_pcm_add_chmap_ctls(struct snd_pcm *pcm, int stream,
                           unsigned long private_value,
                           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 */
index 19491ed9292f5cb58fd8e894ff6a128d15a5f290..7b74a4ba75f8bce451309a9f704ea16e7d42816a 100644 (file)
@@ -179,7 +179,7 @@ static int i2sbus_pcm_open(struct i2sbus_dev *i2sdev, int in)
         */
        if (other->active) {
                /* 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 */
                hw->rate_min = i2sdev->rate;
                hw->rate_max = i2sdev->rate;
index 79d6bda58753a2c575969a5fea2c56008eb9daf6..6b7e2b5a72dead0fe1e542fa47460e3184929a0d 100644 (file)
@@ -182,7 +182,7 @@ static int atmel_ac97c_playback_open(struct snd_pcm_substream *substream)
                runtime->hw.rate_max = chip->cur_rate;
        }
        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);
        chip->playback_substream = substream;
        return 0;
@@ -201,7 +201,7 @@ static int atmel_ac97c_capture_open(struct snd_pcm_substream *substream)
                runtime->hw.rate_max = chip->cur_rate;
        }
        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);
        chip->capture_substream = substream;
        return 0;
index 64d534710b5177e44fbbe6d91c208eb30f6158f8..6f78de9c6fb68bbcedcbbbe473d1eb6c837d24a6 100644 (file)
@@ -325,7 +325,7 @@ static void params_change(struct snd_pcm_substream *substream)
        struct loopback_pcm *dpcm = runtime->private_data;
        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_max = runtime->rate;
        cable->hw.channels_min = runtime->channels;
index 0aabfedeecbae241b6ab4e182713a3d2e85b82e8..160cf830d327e3528d412166f76949c4efdd5f2e 100644 (file)
@@ -966,7 +966,7 @@ static u64 snd_card_asihpi_playback_formats(struct snd_card_asihpi *asihpi,
                if (!err)
                        err = hpi_outstream_query_format(h_stream, &hpi_format);
                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;
 }
@@ -1142,7 +1142,7 @@ static u64 snd_card_asihpi_capture_formats(struct snd_card_asihpi *asihpi,
                if (!err)
                        err = hpi_instream_query_format(h_stream, &hpi_format);
                if (!err)
-                       formats |= (1ULL << hpi_to_alsa_formats[format]);
+                       formats |= pcm_format_to_bits(hpi_to_alsa_formats[format]);
        }
        return formats;
 }
index 020ede0259eb2b43a95a096b6d63335af735611e..99299ffb33ac22597d57b1a11fd2b1e856f154bd 100644 (file)
@@ -365,7 +365,8 @@ static int parse_audio_format_i(struct snd_usb_audio *chip,
 {
        struct usb_interface_descriptor *altsd = get_iface_desc(iface);
        int protocol = altsd->bInterfaceProtocol;
-       int pcm_format, ret;
+       snd_pcm_format_t pcm_format;
+       int ret;
 
        if (fmt->bFormatType == UAC_FORMAT_TYPE_III) {
                /* FIXME: the format type is really IECxxx
@@ -384,7 +385,7 @@ static int parse_audio_format_i(struct snd_usb_audio *chip,
                default:
                        pcm_format = SNDRV_PCM_FORMAT_S16_LE;
                }
-               fp->formats = 1uLL << pcm_format;
+               fp->formats = pcm_format_to_bits(pcm_format);
        } else {
                fp->formats = parse_audio_format_i_type(chip, fp, format,
                                                        fmt, protocol);
index 9723f3ceb155be11d94c7a7efe8b003263ef2646..93b6e32cfeadbdec4e55aff381b8dc60738fca4a 100644 (file)
@@ -100,7 +100,7 @@ static struct audioformat *find_format(struct snd_usb_substream *subs)
        int cur_attr = 0, attr;
 
        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;
                if (fp->channels != subs->channels)
                        continue;
@@ -478,7 +478,7 @@ static int match_endpoint_audioformats(struct audioformat *fp,
                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__,
                        fp, pcm_format);
                return 0;
index 0182ef634d8bfaa2f7c8dec2fc6a2ee79b7dd468..135c7687106303fe53a156decdf434150aaba02e 100644 (file)
@@ -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, "    Format:");
                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_pcm_format_name(fmt));
                snd_iprintf(buffer, "\n");
This page took 0.032122 seconds and 5 git commands to generate.