* [PATCH, for-next] ALSA: usb-audio: use FMTBITs in parse_audio_format_i
@ 2013-04-21 23:44 Eldad Zack
2013-04-22 8:51 ` Takashi Iwai
0 siblings, 1 reply; 8+ messages in thread
From: Eldad Zack @ 2013-04-21 23:44 UTC (permalink / raw)
To: Takashi Iwai, Jaroslav Kysela, Daniel Mack, Clemens Ladisch
Cc: alsa-devel, Eldad Zack
Replace the usage of SNDRV_PCM_FORMAT_* macros with the equivalent
SNDRV_PCM_FMTBIT_* macros, and the result be can assigned directly
to the formats field.
Modify the variable name to reflect the change.
The following sparse messages are silenced:
sound/usb/format.c:377:44: warning: incorrect type in assignment (different base types)
sound/usb/format.c:377:44: expected int [signed] pcm_format
sound/usb/format.c:377:44: got restricted snd_pcm_format_t [usertype] <noident>
sound/usb/format.c:379:44: warning: incorrect type in assignment (different base types)
sound/usb/format.c:379:44: expected int [signed] pcm_format
sound/usb/format.c:379:44: got restricted snd_pcm_format_t [usertype] <noident>
sound/usb/format.c:382:36: warning: incorrect type in assignment (different base types)
sound/usb/format.c:382:36: expected int [signed] pcm_format
sound/usb/format.c:382:36: got restricted snd_pcm_format_t [usertype] <noident>
Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
---
sound/usb/format.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/sound/usb/format.c b/sound/usb/format.c
index 020ede0..e025e28 100644
--- a/sound/usb/format.c
+++ b/sound/usb/format.c
@@ -365,7 +365,7 @@ 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;
+ int pcm_formats, ret;
if (fmt->bFormatType == UAC_FORMAT_TYPE_III) {
/* FIXME: the format type is really IECxxx
@@ -377,14 +377,14 @@ static int parse_audio_format_i(struct snd_usb_audio *chip,
case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
if (chip->setup == 0x00 &&
fp->altsetting == 6)
- pcm_format = SNDRV_PCM_FORMAT_S16_BE;
+ pcm_formats = SNDRV_PCM_FMTBIT_S16_BE;
else
- pcm_format = SNDRV_PCM_FORMAT_S16_LE;
+ pcm_formats = SNDRV_PCM_FMTBIT_S16_LE;
break;
default:
- pcm_format = SNDRV_PCM_FORMAT_S16_LE;
+ pcm_formats = SNDRV_PCM_FMTBIT_S16_LE;
}
- fp->formats = 1uLL << pcm_format;
+ fp->formats = pcm_formats;
} else {
fp->formats = parse_audio_format_i_type(chip, fp, format,
fmt, protocol);
--
1.8.1.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH, for-next] ALSA: usb-audio: use FMTBITs in parse_audio_format_i
2013-04-21 23:44 [PATCH, for-next] ALSA: usb-audio: use FMTBITs in parse_audio_format_i Eldad Zack
@ 2013-04-22 8:51 ` Takashi Iwai
2013-04-22 11:29 ` Eldad Zack
0 siblings, 1 reply; 8+ messages in thread
From: Takashi Iwai @ 2013-04-22 8:51 UTC (permalink / raw)
To: Eldad Zack; +Cc: alsa-devel, Daniel Mack, Clemens Ladisch
At Mon, 22 Apr 2013 01:44:04 +0200,
Eldad Zack wrote:
>
> Replace the usage of SNDRV_PCM_FORMAT_* macros with the equivalent
> SNDRV_PCM_FMTBIT_* macros, and the result be can assigned directly
> to the formats field.
Note that SNDRV_PCM_FMTBIT_* are 64bit integer. And it makes sense to
use FMTBIT only when multiple formats are supposed. For a single
format, keeping SNDRV_PCM_FORMAT_* is more reasonable.
In other words, a proper fix would be to replace the type of variable
format with snd_pcm_format_t, and cast at converting to format bits
like
1ULL << (unsigned int)pcm_format
thanks,
Takashi
> Modify the variable name to reflect the change.
>
> The following sparse messages are silenced:
>
> sound/usb/format.c:377:44: warning: incorrect type in assignment (different base types)
> sound/usb/format.c:377:44: expected int [signed] pcm_format
> sound/usb/format.c:377:44: got restricted snd_pcm_format_t [usertype] <noident>
> sound/usb/format.c:379:44: warning: incorrect type in assignment (different base types)
> sound/usb/format.c:379:44: expected int [signed] pcm_format
> sound/usb/format.c:379:44: got restricted snd_pcm_format_t [usertype] <noident>
> sound/usb/format.c:382:36: warning: incorrect type in assignment (different base types)
> sound/usb/format.c:382:36: expected int [signed] pcm_format
> sound/usb/format.c:382:36: got restricted snd_pcm_format_t [usertype] <noident>
>
> Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
> ---
> sound/usb/format.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/sound/usb/format.c b/sound/usb/format.c
> index 020ede0..e025e28 100644
> --- a/sound/usb/format.c
> +++ b/sound/usb/format.c
> @@ -365,7 +365,7 @@ 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;
> + int pcm_formats, ret;
>
> if (fmt->bFormatType == UAC_FORMAT_TYPE_III) {
> /* FIXME: the format type is really IECxxx
> @@ -377,14 +377,14 @@ static int parse_audio_format_i(struct snd_usb_audio *chip,
> case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
> if (chip->setup == 0x00 &&
> fp->altsetting == 6)
> - pcm_format = SNDRV_PCM_FORMAT_S16_BE;
> + pcm_formats = SNDRV_PCM_FMTBIT_S16_BE;
> else
> - pcm_format = SNDRV_PCM_FORMAT_S16_LE;
> + pcm_formats = SNDRV_PCM_FMTBIT_S16_LE;
> break;
> default:
> - pcm_format = SNDRV_PCM_FORMAT_S16_LE;
> + pcm_formats = SNDRV_PCM_FMTBIT_S16_LE;
> }
> - fp->formats = 1uLL << pcm_format;
> + fp->formats = pcm_formats;
> } else {
> fp->formats = parse_audio_format_i_type(chip, fp, format,
> fmt, protocol);
> --
> 1.8.1.5
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH, for-next] ALSA: usb-audio: use FMTBITs in parse_audio_format_i
2013-04-22 8:51 ` Takashi Iwai
@ 2013-04-22 11:29 ` Eldad Zack
2013-04-22 11:34 ` Takashi Iwai
0 siblings, 1 reply; 8+ messages in thread
From: Eldad Zack @ 2013-04-22 11:29 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel, Daniel Mack, Clemens Ladisch
On Mon, 22 Apr 2013, Takashi Iwai wrote:
> At Mon, 22 Apr 2013 01:44:04 +0200,
> Eldad Zack wrote:
> >
> > Replace the usage of SNDRV_PCM_FORMAT_* macros with the equivalent
> > SNDRV_PCM_FMTBIT_* macros, and the result be can assigned directly
> > to the formats field.
>
> Note that SNDRV_PCM_FMTBIT_* are 64bit integer. And it makes sense to
> use FMTBIT only when multiple formats are supposed. For a single
> format, keeping SNDRV_PCM_FORMAT_* is more reasonable.
>
> In other words, a proper fix would be to replace the type of variable
> format with snd_pcm_format_t, and cast at converting to format bits
> like
> 1ULL << (unsigned int)pcm_format
I see your point. I just figured making the assignment directly would
make sense just for this case.
There are a couple of other places with the same conversion that
"break" the strong typing - how about something like this:
#define pcm_format_to_bits(fmt) (1uLL << ((__force int)(fmt)))
Or an equivalent function?
Cheers,
Eldad
> > Modify the variable name to reflect the change.
> >
> > The following sparse messages are silenced:
> >
> > sound/usb/format.c:377:44: warning: incorrect type in assignment (different base types)
> > sound/usb/format.c:377:44: expected int [signed] pcm_format
> > sound/usb/format.c:377:44: got restricted snd_pcm_format_t [usertype] <noident>
> > sound/usb/format.c:379:44: warning: incorrect type in assignment (different base types)
> > sound/usb/format.c:379:44: expected int [signed] pcm_format
> > sound/usb/format.c:379:44: got restricted snd_pcm_format_t [usertype] <noident>
> > sound/usb/format.c:382:36: warning: incorrect type in assignment (different base types)
> > sound/usb/format.c:382:36: expected int [signed] pcm_format
> > sound/usb/format.c:382:36: got restricted snd_pcm_format_t [usertype] <noident>
> >
> > Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
> > ---
> > sound/usb/format.c | 10 +++++-----
> > 1 file changed, 5 insertions(+), 5 deletions(-)
> >
> > diff --git a/sound/usb/format.c b/sound/usb/format.c
> > index 020ede0..e025e28 100644
> > --- a/sound/usb/format.c
> > +++ b/sound/usb/format.c
> > @@ -365,7 +365,7 @@ 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;
> > + int pcm_formats, ret;
> >
> > if (fmt->bFormatType == UAC_FORMAT_TYPE_III) {
> > /* FIXME: the format type is really IECxxx
> > @@ -377,14 +377,14 @@ static int parse_audio_format_i(struct snd_usb_audio *chip,
> > case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
> > if (chip->setup == 0x00 &&
> > fp->altsetting == 6)
> > - pcm_format = SNDRV_PCM_FORMAT_S16_BE;
> > + pcm_formats = SNDRV_PCM_FMTBIT_S16_BE;
> > else
> > - pcm_format = SNDRV_PCM_FORMAT_S16_LE;
> > + pcm_formats = SNDRV_PCM_FMTBIT_S16_LE;
> > break;
> > default:
> > - pcm_format = SNDRV_PCM_FORMAT_S16_LE;
> > + pcm_formats = SNDRV_PCM_FMTBIT_S16_LE;
> > }
> > - fp->formats = 1uLL << pcm_format;
> > + fp->formats = pcm_formats;
> > } else {
> > fp->formats = parse_audio_format_i_type(chip, fp, format,
> > fmt, protocol);
> > --
> > 1.8.1.5
> >
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH, for-next] ALSA: usb-audio: use FMTBITs in parse_audio_format_i
2013-04-22 11:29 ` Eldad Zack
@ 2013-04-22 11:34 ` Takashi Iwai
2013-04-22 11:47 ` Eldad Zack
0 siblings, 1 reply; 8+ messages in thread
From: Takashi Iwai @ 2013-04-22 11:34 UTC (permalink / raw)
To: Eldad Zack; +Cc: alsa-devel, Daniel Mack, Clemens Ladisch
At Mon, 22 Apr 2013 13:29:41 +0200 (CEST),
Eldad Zack wrote:
>
>
>
> On Mon, 22 Apr 2013, Takashi Iwai wrote:
>
> > At Mon, 22 Apr 2013 01:44:04 +0200,
> > Eldad Zack wrote:
> > >
> > > Replace the usage of SNDRV_PCM_FORMAT_* macros with the equivalent
> > > SNDRV_PCM_FMTBIT_* macros, and the result be can assigned directly
> > > to the formats field.
> >
> > Note that SNDRV_PCM_FMTBIT_* are 64bit integer. And it makes sense to
> > use FMTBIT only when multiple formats are supposed. For a single
> > format, keeping SNDRV_PCM_FORMAT_* is more reasonable.
> >
> > In other words, a proper fix would be to replace the type of variable
> > format with snd_pcm_format_t, and cast at converting to format bits
> > like
> > 1ULL << (unsigned int)pcm_format
>
> I see your point. I just figured making the assignment directly would
> make sense just for this case.
>
> There are a couple of other places with the same conversion that
> "break" the strong typing - how about something like this:
>
> #define pcm_format_to_bits(fmt) (1uLL << ((__force int)(fmt)))
>
> Or an equivalent function?
Yep, I just wanted to propose that :)
Takashi
>
> Cheers,
> Eldad
>
> > > Modify the variable name to reflect the change.
> > >
> > > The following sparse messages are silenced:
> > >
> > > sound/usb/format.c:377:44: warning: incorrect type in assignment (different base types)
> > > sound/usb/format.c:377:44: expected int [signed] pcm_format
> > > sound/usb/format.c:377:44: got restricted snd_pcm_format_t [usertype] <noident>
> > > sound/usb/format.c:379:44: warning: incorrect type in assignment (different base types)
> > > sound/usb/format.c:379:44: expected int [signed] pcm_format
> > > sound/usb/format.c:379:44: got restricted snd_pcm_format_t [usertype] <noident>
> > > sound/usb/format.c:382:36: warning: incorrect type in assignment (different base types)
> > > sound/usb/format.c:382:36: expected int [signed] pcm_format
> > > sound/usb/format.c:382:36: got restricted snd_pcm_format_t [usertype] <noident>
> > >
> > > Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
> > > ---
> > > sound/usb/format.c | 10 +++++-----
> > > 1 file changed, 5 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/sound/usb/format.c b/sound/usb/format.c
> > > index 020ede0..e025e28 100644
> > > --- a/sound/usb/format.c
> > > +++ b/sound/usb/format.c
> > > @@ -365,7 +365,7 @@ 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;
> > > + int pcm_formats, ret;
> > >
> > > if (fmt->bFormatType == UAC_FORMAT_TYPE_III) {
> > > /* FIXME: the format type is really IECxxx
> > > @@ -377,14 +377,14 @@ static int parse_audio_format_i(struct snd_usb_audio *chip,
> > > case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
> > > if (chip->setup == 0x00 &&
> > > fp->altsetting == 6)
> > > - pcm_format = SNDRV_PCM_FORMAT_S16_BE;
> > > + pcm_formats = SNDRV_PCM_FMTBIT_S16_BE;
> > > else
> > > - pcm_format = SNDRV_PCM_FORMAT_S16_LE;
> > > + pcm_formats = SNDRV_PCM_FMTBIT_S16_LE;
> > > break;
> > > default:
> > > - pcm_format = SNDRV_PCM_FORMAT_S16_LE;
> > > + pcm_formats = SNDRV_PCM_FMTBIT_S16_LE;
> > > }
> > > - fp->formats = 1uLL << pcm_format;
> > > + fp->formats = pcm_formats;
> > > } else {
> > > fp->formats = parse_audio_format_i_type(chip, fp, format,
> > > fmt, protocol);
> > > --
> > > 1.8.1.5
> > >
> >
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH, for-next] ALSA: usb-audio: use FMTBITs in parse_audio_format_i
2013-04-22 11:34 ` Takashi Iwai
@ 2013-04-22 11:47 ` Eldad Zack
2013-04-22 11:49 ` Takashi Iwai
0 siblings, 1 reply; 8+ messages in thread
From: Eldad Zack @ 2013-04-22 11:47 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel, Daniel Mack, Clemens Ladisch
On Mon, 22 Apr 2013, Takashi Iwai wrote:
> At Mon, 22 Apr 2013 13:29:41 +0200 (CEST),
> Eldad Zack wrote:
> >
> >
> >
> > On Mon, 22 Apr 2013, Takashi Iwai wrote:
> >
> > > At Mon, 22 Apr 2013 01:44:04 +0200,
> > > Eldad Zack wrote:
> > > >
> > > > Replace the usage of SNDRV_PCM_FORMAT_* macros with the equivalent
> > > > SNDRV_PCM_FMTBIT_* macros, and the result be can assigned directly
> > > > to the formats field.
> > >
> > > Note that SNDRV_PCM_FMTBIT_* are 64bit integer. And it makes sense to
> > > use FMTBIT only when multiple formats are supposed. For a single
> > > format, keeping SNDRV_PCM_FORMAT_* is more reasonable.
> > >
> > > In other words, a proper fix would be to replace the type of variable
> > > format with snd_pcm_format_t, and cast at converting to format bits
> > > like
> > > 1ULL << (unsigned int)pcm_format
> >
> > I see your point. I just figured making the assignment directly would
> > make sense just for this case.
> >
> > There are a couple of other places with the same conversion that
> > "break" the strong typing - how about something like this:
> >
> > #define pcm_format_to_bits(fmt) (1uLL << ((__force int)(fmt)))
> >
> > Or an equivalent function?
>
> Yep, I just wanted to propose that :)
Cool :)
I think a function would be better so the format can be checked to use
the correct type as well, and put it in pcm.h:
static inline u64 pcm_format_to_bits(snd_pcm_format_t pcm_format)
{
return 1ULL << (__force int) pcm_format;
}
If that looks good I'll search for all the relevant places and change
them (in one patch).
Cheers,
Eldad
>
>
> Takashi
>
> >
> > Cheers,
> > Eldad
> >
> > > > Modify the variable name to reflect the change.
> > > >
> > > > The following sparse messages are silenced:
> > > >
> > > > sound/usb/format.c:377:44: warning: incorrect type in assignment (different base types)
> > > > sound/usb/format.c:377:44: expected int [signed] pcm_format
> > > > sound/usb/format.c:377:44: got restricted snd_pcm_format_t [usertype] <noident>
> > > > sound/usb/format.c:379:44: warning: incorrect type in assignment (different base types)
> > > > sound/usb/format.c:379:44: expected int [signed] pcm_format
> > > > sound/usb/format.c:379:44: got restricted snd_pcm_format_t [usertype] <noident>
> > > > sound/usb/format.c:382:36: warning: incorrect type in assignment (different base types)
> > > > sound/usb/format.c:382:36: expected int [signed] pcm_format
> > > > sound/usb/format.c:382:36: got restricted snd_pcm_format_t [usertype] <noident>
> > > >
> > > > Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
> > > > ---
> > > > sound/usb/format.c | 10 +++++-----
> > > > 1 file changed, 5 insertions(+), 5 deletions(-)
> > > >
> > > > diff --git a/sound/usb/format.c b/sound/usb/format.c
> > > > index 020ede0..e025e28 100644
> > > > --- a/sound/usb/format.c
> > > > +++ b/sound/usb/format.c
> > > > @@ -365,7 +365,7 @@ 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;
> > > > + int pcm_formats, ret;
> > > >
> > > > if (fmt->bFormatType == UAC_FORMAT_TYPE_III) {
> > > > /* FIXME: the format type is really IECxxx
> > > > @@ -377,14 +377,14 @@ static int parse_audio_format_i(struct snd_usb_audio *chip,
> > > > case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
> > > > if (chip->setup == 0x00 &&
> > > > fp->altsetting == 6)
> > > > - pcm_format = SNDRV_PCM_FORMAT_S16_BE;
> > > > + pcm_formats = SNDRV_PCM_FMTBIT_S16_BE;
> > > > else
> > > > - pcm_format = SNDRV_PCM_FORMAT_S16_LE;
> > > > + pcm_formats = SNDRV_PCM_FMTBIT_S16_LE;
> > > > break;
> > > > default:
> > > > - pcm_format = SNDRV_PCM_FORMAT_S16_LE;
> > > > + pcm_formats = SNDRV_PCM_FMTBIT_S16_LE;
> > > > }
> > > > - fp->formats = 1uLL << pcm_format;
> > > > + fp->formats = pcm_formats;
> > > > } else {
> > > > fp->formats = parse_audio_format_i_type(chip, fp, format,
> > > > fmt, protocol);
> > > > --
> > > > 1.8.1.5
> > > >
> > >
> >
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH, for-next] ALSA: usb-audio: use FMTBITs in parse_audio_format_i
2013-04-22 11:47 ` Eldad Zack
@ 2013-04-22 11:49 ` Takashi Iwai
2013-04-22 23:00 ` [PATCH, for-next 1/2] ALSA: pcm_format_to_bits strong-typed conversion Eldad Zack
0 siblings, 1 reply; 8+ messages in thread
From: Takashi Iwai @ 2013-04-22 11:49 UTC (permalink / raw)
To: Eldad Zack; +Cc: alsa-devel, Daniel Mack, Clemens Ladisch
At Mon, 22 Apr 2013 13:47:23 +0200 (CEST),
Eldad Zack wrote:
>
>
>
> On Mon, 22 Apr 2013, Takashi Iwai wrote:
>
> > At Mon, 22 Apr 2013 13:29:41 +0200 (CEST),
> > Eldad Zack wrote:
> > >
> > >
> > >
> > > On Mon, 22 Apr 2013, Takashi Iwai wrote:
> > >
> > > > At Mon, 22 Apr 2013 01:44:04 +0200,
> > > > Eldad Zack wrote:
> > > > >
> > > > > Replace the usage of SNDRV_PCM_FORMAT_* macros with the equivalent
> > > > > SNDRV_PCM_FMTBIT_* macros, and the result be can assigned directly
> > > > > to the formats field.
> > > >
> > > > Note that SNDRV_PCM_FMTBIT_* are 64bit integer. And it makes sense to
> > > > use FMTBIT only when multiple formats are supposed. For a single
> > > > format, keeping SNDRV_PCM_FORMAT_* is more reasonable.
> > > >
> > > > In other words, a proper fix would be to replace the type of variable
> > > > format with snd_pcm_format_t, and cast at converting to format bits
> > > > like
> > > > 1ULL << (unsigned int)pcm_format
> > >
> > > I see your point. I just figured making the assignment directly would
> > > make sense just for this case.
> > >
> > > There are a couple of other places with the same conversion that
> > > "break" the strong typing - how about something like this:
> > >
> > > #define pcm_format_to_bits(fmt) (1uLL << ((__force int)(fmt)))
> > >
> > > Or an equivalent function?
> >
> > Yep, I just wanted to propose that :)
>
> Cool :)
>
> I think a function would be better so the format can be checked to use
> the correct type as well, and put it in pcm.h:
>
> static inline u64 pcm_format_to_bits(snd_pcm_format_t pcm_format)
> {
> return 1ULL << (__force int) pcm_format;
> }
>
> If that looks good I'll search for all the relevant places and change
> them (in one patch).
It looks good.
thanks,
Takashi
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH, for-next 1/2] ALSA: pcm_format_to_bits strong-typed conversion
2013-04-22 11:49 ` Takashi Iwai
@ 2013-04-22 23:00 ` Eldad Zack
2013-04-22 23:00 ` [PATCH, for-next 2/2] ALSA: asihpi: add format support check in snd_card_asihpi_capture_formats Eldad Zack
0 siblings, 1 reply; 8+ messages in thread
From: Eldad Zack @ 2013-04-22 23:00 UTC (permalink / raw)
To: Takashi Iwai, alsa-devel; +Cc: Eldad Zack, Daniel Mack, Clemens Ladisch
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>
---
include/sound/pcm.h | 6 ++++++
sound/aoa/soundbus/i2sbus/pcm.c | 2 +-
sound/atmel/ac97c.c | 4 ++--
sound/drivers/aloop.c | 2 +-
sound/pci/asihpi/asihpi.c | 4 ++--
sound/usb/format.c | 5 +++--
sound/usb/pcm.c | 4 ++--
sound/usb/proc.c | 2 +-
8 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index 1b0c648..5357ecb 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -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 */
diff --git a/sound/aoa/soundbus/i2sbus/pcm.c b/sound/aoa/soundbus/i2sbus/pcm.c
index 19491ed..7b74a4b 100644
--- a/sound/aoa/soundbus/i2sbus/pcm.c
+++ b/sound/aoa/soundbus/i2sbus/pcm.c
@@ -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;
diff --git a/sound/atmel/ac97c.c b/sound/atmel/ac97c.c
index 79d6bda..6b7e2b5 100644
--- a/sound/atmel/ac97c.c
+++ b/sound/atmel/ac97c.c
@@ -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;
diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c
index 64d5347..6f78de9 100644
--- a/sound/drivers/aloop.c
+++ b/sound/drivers/aloop.c
@@ -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;
diff --git a/sound/pci/asihpi/asihpi.c b/sound/pci/asihpi/asihpi.c
index 0aabfed..160cf83 100644
--- a/sound/pci/asihpi/asihpi.c
+++ b/sound/pci/asihpi/asihpi.c
@@ -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;
}
diff --git a/sound/usb/format.c b/sound/usb/format.c
index 020ede0..99299ff 100644
--- a/sound/usb/format.c
+++ b/sound/usb/format.c
@@ -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);
diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
index 9723f3c..93b6e32 100644
--- a/sound/usb/pcm.c
+++ b/sound/usb/pcm.c
@@ -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;
diff --git a/sound/usb/proc.c b/sound/usb/proc.c
index 0182ef6..135c768 100644
--- a/sound/usb/proc.c
+++ b/sound/usb/proc.c
@@ -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");
--
1.8.1.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH, for-next 2/2] ALSA: asihpi: add format support check in snd_card_asihpi_capture_formats
2013-04-22 23:00 ` [PATCH, for-next 1/2] ALSA: pcm_format_to_bits strong-typed conversion Eldad Zack
@ 2013-04-22 23:00 ` Eldad Zack
0 siblings, 0 replies; 8+ messages in thread
From: Eldad Zack @ 2013-04-22 23:00 UTC (permalink / raw)
To: Takashi Iwai, alsa-devel; +Cc: Eldad Zack, Daniel Mack, Clemens Ladisch
Some Asihpi formats are not supported or invalid, and their mapping to
ALSA format is set to -1.
Before performing the format conversion into ALSA bitwise formats,
add a consistency check for the requested format, as done in
snd_card_asihpi_playback_formats().
Compile tested only.
Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
---
sound/pci/asihpi/asihpi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/pci/asihpi/asihpi.c b/sound/pci/asihpi/asihpi.c
index 160cf83..fbc1720 100644
--- a/sound/pci/asihpi/asihpi.c
+++ b/sound/pci/asihpi/asihpi.c
@@ -1141,7 +1141,7 @@ static u64 snd_card_asihpi_capture_formats(struct snd_card_asihpi *asihpi,
format, sample_rate, 128000, 0);
if (!err)
err = hpi_instream_query_format(h_stream, &hpi_format);
- if (!err)
+ if (!err && (hpi_to_alsa_formats[format] != -1))
formats |= pcm_format_to_bits(hpi_to_alsa_formats[format]);
}
return formats;
--
1.8.1.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-04-22 23:01 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-04-21 23:44 [PATCH, for-next] ALSA: usb-audio: use FMTBITs in parse_audio_format_i Eldad Zack
2013-04-22 8:51 ` Takashi Iwai
2013-04-22 11:29 ` Eldad Zack
2013-04-22 11:34 ` Takashi Iwai
2013-04-22 11:47 ` Eldad Zack
2013-04-22 11:49 ` Takashi Iwai
2013-04-22 23:00 ` [PATCH, for-next 1/2] ALSA: pcm_format_to_bits strong-typed conversion Eldad Zack
2013-04-22 23:00 ` [PATCH, for-next 2/2] ALSA: asihpi: add format support check in snd_card_asihpi_capture_formats Eldad Zack
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.