ADAU1373_BCLKDIV_SOURCE is defined as BIT(5) which uses UL constants. On
amd64 the result of the ones complement operator is then truncated to
unsigned int according to the prototype of snd_soc_update_bits(). I think
gcc is correctly warning that the upper 32 bits are lost.
sound/soc/codecs/adau1373.c: In function 'adau1373_hw_params':
sound/soc/codecs/adau1373.c:940:3: warning: large integer implicitly truncated to unsigned type [-Woverflow]
gcc version 4.6.3
Cc: Lars-Peter Clausen <[email protected]>
Cc: Liam Girdwood <[email protected]>
Cc: Mark Brown <[email protected]>
Cc: Jaroslav Kysela <[email protected]>
Cc: Takashi Iwai <[email protected]>
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Tim Gardner <[email protected]>
---
sound/soc/codecs/adau1373.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c
index 068b3ae..56ed788 100644
--- a/sound/soc/codecs/adau1373.c
+++ b/sound/soc/codecs/adau1373.c
@@ -132,7 +132,7 @@ struct adau1373 {
#define ADAU1373_DAI_FORMAT_I2S 0x2
#define ADAU1373_DAI_FORMAT_DSP 0x3
-#define ADAU1373_BCLKDIV_SOURCE BIT(5)
+#define ADAU1373_BCLKDIV_SOURCE (unsigned int)BIT(5)
#define ADAU1373_BCLKDIV_32 0x03
#define ADAU1373_BCLKDIV_64 0x02
#define ADAU1373_BCLKDIV_128 0x01
--
1.7.9.5
On 03/10/2013 06:34 PM, Tim Gardner wrote:
> ADAU1373_BCLKDIV_SOURCE is defined as BIT(5) which uses UL constants. On
> amd64 the result of the ones complement operator is then truncated to
> unsigned int according to the prototype of snd_soc_update_bits(). I think
> gcc is correctly warning that the upper 32 bits are lost.
>
> sound/soc/codecs/adau1373.c: In function 'adau1373_hw_params':
> sound/soc/codecs/adau1373.c:940:3: warning: large integer implicitly truncated to unsigned type [-Woverflow]
>
> gcc version 4.6.3
>
> Cc: Lars-Peter Clausen <[email protected]>
> Cc: Liam Girdwood <[email protected]>
> Cc: Mark Brown <[email protected]>
> Cc: Jaroslav Kysela <[email protected]>
> Cc: Takashi Iwai <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> Signed-off-by: Tim Gardner <[email protected]>
> ---
> sound/soc/codecs/adau1373.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c
> index 068b3ae..56ed788 100644
> --- a/sound/soc/codecs/adau1373.c
> +++ b/sound/soc/codecs/adau1373.c
> @@ -132,7 +132,7 @@ struct adau1373 {
> #define ADAU1373_DAI_FORMAT_I2S 0x2
> #define ADAU1373_DAI_FORMAT_DSP 0x3
>
> -#define ADAU1373_BCLKDIV_SOURCE BIT(5)
> +#define ADAU1373_BCLKDIV_SOURCE (unsigned int)BIT(5)
Hm, that's a bit ugly. How about the following instead:
diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c
index 068b3ae..1aa10dd 100644
--- a/sound/soc/codecs/adau1373.c
+++ b/sound/soc/codecs/adau1373.c
@@ -133,6 +133,8 @@ struct adau1373 {
#define ADAU1373_DAI_FORMAT_DSP 0x3
#define ADAU1373_BCLKDIV_SOURCE BIT(5)
+#define ADAU1373_BCLKDIV_SR_MASK (0x07 << 2)
+#define ADAU1373_BCLKDIV_BCLK_MASK 0x03
#define ADAU1373_BCLKDIV_32 0x03
#define ADAU1373_BCLKDIV_64 0x02
#define ADAU1373_BCLKDIV_128 0x01
@@ -937,7 +939,8 @@ static int adau1373_hw_params(struct snd_pcm_substream
*substream,
adau1373_dai->enable_src = (div != 0);
snd_soc_update_bits(codec, ADAU1373_BCLKDIV(dai->id),
- ~ADAU1373_BCLKDIV_SOURCE, (div << 2) | ADAU1373_BCLKDIV_64);
+ ADAU1373_BCLKDIV_SR_MASK | ADAU1373_BCLKDIV_BCLK_MASK,
+ (div << 2) | ADAU1373_BCLKDIV_64);
switch (params_format(params)) {
case SNDRV_PCM_FORMAT_S16_LE:
On 03/11/2013 04:01 AM, Lars-Peter Clausen wrote:
> On 03/10/2013 06:34 PM, Tim Gardner wrote:
>> ADAU1373_BCLKDIV_SOURCE is defined as BIT(5) which uses UL constants. On
>> amd64 the result of the ones complement operator is then truncated to
>> unsigned int according to the prototype of snd_soc_update_bits(). I think
>> gcc is correctly warning that the upper 32 bits are lost.
>>
>> sound/soc/codecs/adau1373.c: In function 'adau1373_hw_params':
>> sound/soc/codecs/adau1373.c:940:3: warning: large integer implicitly truncated to unsigned type [-Woverflow]
>>
>> gcc version 4.6.3
>>
>> Cc: Lars-Peter Clausen <[email protected]>
>> Cc: Liam Girdwood <[email protected]>
>> Cc: Mark Brown <[email protected]>
>> Cc: Jaroslav Kysela <[email protected]>
>> Cc: Takashi Iwai <[email protected]>
>> Cc: [email protected]
>> Cc: [email protected]
>> Signed-off-by: Tim Gardner <[email protected]>
>> ---
>> sound/soc/codecs/adau1373.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c
>> index 068b3ae..56ed788 100644
>> --- a/sound/soc/codecs/adau1373.c
>> +++ b/sound/soc/codecs/adau1373.c
>> @@ -132,7 +132,7 @@ struct adau1373 {
>> #define ADAU1373_DAI_FORMAT_I2S 0x2
>> #define ADAU1373_DAI_FORMAT_DSP 0x3
>>
>> -#define ADAU1373_BCLKDIV_SOURCE BIT(5)
>> +#define ADAU1373_BCLKDIV_SOURCE (unsigned int)BIT(5)
>
> Hm, that's a bit ugly. How about the following instead:
>
> diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c
> index 068b3ae..1aa10dd 100644
> --- a/sound/soc/codecs/adau1373.c
> +++ b/sound/soc/codecs/adau1373.c
> @@ -133,6 +133,8 @@ struct adau1373 {
> #define ADAU1373_DAI_FORMAT_DSP 0x3
>
> #define ADAU1373_BCLKDIV_SOURCE BIT(5)
> +#define ADAU1373_BCLKDIV_SR_MASK (0x07 << 2)
> +#define ADAU1373_BCLKDIV_BCLK_MASK 0x03
> #define ADAU1373_BCLKDIV_32 0x03
> #define ADAU1373_BCLKDIV_64 0x02
> #define ADAU1373_BCLKDIV_128 0x01
> @@ -937,7 +939,8 @@ static int adau1373_hw_params(struct snd_pcm_substream
> *substream,
> adau1373_dai->enable_src = (div != 0);
>
> snd_soc_update_bits(codec, ADAU1373_BCLKDIV(dai->id),
> - ~ADAU1373_BCLKDIV_SOURCE, (div << 2) | ADAU1373_BCLKDIV_64);
> + ADAU1373_BCLKDIV_SR_MASK | ADAU1373_BCLKDIV_BCLK_MASK,
> + (div << 2) | ADAU1373_BCLKDIV_64);
>
> switch (params_format(params)) {
> case SNDRV_PCM_FORMAT_S16_LE:
>
>
That seems way more complicated then need be. It also uses 2 bits in the
mask whereas the original code only used 1, e.g., bit 5. Is that correct ?
How about just open coding the macro thusly:
#define ADAU1373_BCLKDIV_SOURCE (1<<5) /*BIT(5)*/
rtg
--
Tim Gardner [email protected]
On 03/11/2013 04:37 PM, Tim Gardner wrote:
> On 03/11/2013 04:01 AM, Lars-Peter Clausen wrote:
>> On 03/10/2013 06:34 PM, Tim Gardner wrote:
>>> ADAU1373_BCLKDIV_SOURCE is defined as BIT(5) which uses UL constants. On
>>> amd64 the result of the ones complement operator is then truncated to
>>> unsigned int according to the prototype of snd_soc_update_bits(). I think
>>> gcc is correctly warning that the upper 32 bits are lost.
>>>
>>> sound/soc/codecs/adau1373.c: In function 'adau1373_hw_params':
>>> sound/soc/codecs/adau1373.c:940:3: warning: large integer implicitly truncated to unsigned type [-Woverflow]
>>>
>>> gcc version 4.6.3
>>>
>>> Cc: Lars-Peter Clausen <[email protected]>
>>> Cc: Liam Girdwood <[email protected]>
>>> Cc: Mark Brown <[email protected]>
>>> Cc: Jaroslav Kysela <[email protected]>
>>> Cc: Takashi Iwai <[email protected]>
>>> Cc: [email protected]
>>> Cc: [email protected]
>>> Signed-off-by: Tim Gardner <[email protected]>
>>> ---
>>> sound/soc/codecs/adau1373.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c
>>> index 068b3ae..56ed788 100644
>>> --- a/sound/soc/codecs/adau1373.c
>>> +++ b/sound/soc/codecs/adau1373.c
>>> @@ -132,7 +132,7 @@ struct adau1373 {
>>> #define ADAU1373_DAI_FORMAT_I2S 0x2
>>> #define ADAU1373_DAI_FORMAT_DSP 0x3
>>>
>>> -#define ADAU1373_BCLKDIV_SOURCE BIT(5)
>>> +#define ADAU1373_BCLKDIV_SOURCE (unsigned int)BIT(5)
>>
>> Hm, that's a bit ugly. How about the following instead:
>>
>> diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c
>> index 068b3ae..1aa10dd 100644
>> --- a/sound/soc/codecs/adau1373.c
>> +++ b/sound/soc/codecs/adau1373.c
>> @@ -133,6 +133,8 @@ struct adau1373 {
>> #define ADAU1373_DAI_FORMAT_DSP 0x3
>>
>> #define ADAU1373_BCLKDIV_SOURCE BIT(5)
>> +#define ADAU1373_BCLKDIV_SR_MASK (0x07 << 2)
>> +#define ADAU1373_BCLKDIV_BCLK_MASK 0x03
>> #define ADAU1373_BCLKDIV_32 0x03
>> #define ADAU1373_BCLKDIV_64 0x02
>> #define ADAU1373_BCLKDIV_128 0x01
>> @@ -937,7 +939,8 @@ static int adau1373_hw_params(struct snd_pcm_substream
>> *substream,
>> adau1373_dai->enable_src = (div != 0);
>>
>> snd_soc_update_bits(codec, ADAU1373_BCLKDIV(dai->id),
>> - ~ADAU1373_BCLKDIV_SOURCE, (div << 2) | ADAU1373_BCLKDIV_64);
>> + ADAU1373_BCLKDIV_SR_MASK | ADAU1373_BCLKDIV_BCLK_MASK,
>> + (div << 2) | ADAU1373_BCLKDIV_64);
>>
>> switch (params_format(params)) {
>> case SNDRV_PCM_FORMAT_S16_LE:
>>
>>
>
> That seems way more complicated then need be. It also uses 2 bits in the
> mask whereas the original code only used 1, e.g., bit 5. Is that correct ?
The BCLKDIV has three fields. The bitclock divider (bit 0-1), the samplerate
(bit 2-4) and the source select (bit 5). Here we want to update the bitclock
divider field and the samplerate field. When I wrote the code I was lazy and
used ~ADAU1373_BCLKDIV_SOURCE as the mask, which for this register is
functional equivalent to ADAU1373_BCLKDIV_SR_MASK | ADAU1373_BCLKDIV_BCLK_MASK.
>
> How about just open coding the macro thusly:
>
> #define ADAU1373_BCLKDIV_SOURCE (1<<5) /*BIT(5)*/
But now there is a inconsistency where we sometimes use (1<<x) and sometimes
BIT(x). I prefer my solution.
- Lars
ADAU1373_BCLKDIV_SOURCE is defined as BIT(5) which uses UL constants. On
amd64 the result of the ones complement operator is then truncated to
unsigned int according to the prototype of snd_soc_update_bits(). I think
gcc is correctly warning that the upper 32 bits are lost.
sound/soc/codecs/adau1373.c: In function 'adau1373_hw_params':
sound/soc/codecs/adau1373.c:940:3: warning: large integer implicitly truncated to unsigned type [-Woverflow]
gcc version 4.6.3
Add 2 more BCLKDIV mask macros as explained by Lars:
The BCLKDIV has three fields. The bitclock divider (bit 0-1), the samplerate
(bit 2-4) and the source select (bit 5). Here we want to update the bitclock
divider field and the samplerate field. When I wrote the code I was lazy and
used ~ADAU1373_BCLKDIV_SOURCE as the mask, which for this register is
functionally equivalent to ADAU1373_BCLKDIV_SR_MASK | ADAU1373_BCLKDIV_BCLK_MASK.
Cc: Lars-Peter Clausen <[email protected]>
Cc: Liam Girdwood <[email protected]>
Cc: Mark Brown <[email protected]>
Cc: Jaroslav Kysela <[email protected]>
Cc: Takashi Iwai <[email protected]>
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Tim Gardner <[email protected]>
---
v1 - simple cast solution
v2 - Implement a full set of field masks as suggested by Lars.
sound/soc/codecs/adau1373.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c
index 068b3ae..1aa10dd 100644
--- a/sound/soc/codecs/adau1373.c
+++ b/sound/soc/codecs/adau1373.c
@@ -133,6 +133,8 @@ struct adau1373 {
#define ADAU1373_DAI_FORMAT_DSP 0x3
#define ADAU1373_BCLKDIV_SOURCE BIT(5)
+#define ADAU1373_BCLKDIV_SR_MASK (0x07 << 2)
+#define ADAU1373_BCLKDIV_BCLK_MASK 0x03
#define ADAU1373_BCLKDIV_32 0x03
#define ADAU1373_BCLKDIV_64 0x02
#define ADAU1373_BCLKDIV_128 0x01
@@ -937,7 +939,8 @@ static int adau1373_hw_params(struct snd_pcm_substream *substream,
adau1373_dai->enable_src = (div != 0);
snd_soc_update_bits(codec, ADAU1373_BCLKDIV(dai->id),
- ~ADAU1373_BCLKDIV_SOURCE, (div << 2) | ADAU1373_BCLKDIV_64);
+ ADAU1373_BCLKDIV_SR_MASK | ADAU1373_BCLKDIV_BCLK_MASK,
+ (div << 2) | ADAU1373_BCLKDIV_64);
switch (params_format(params)) {
case SNDRV_PCM_FORMAT_S16_LE:
--
1.7.9.5
On 03/11/2013 08:18 PM, Tim Gardner wrote:
> ADAU1373_BCLKDIV_SOURCE is defined as BIT(5) which uses UL constants. On
> amd64 the result of the ones complement operator is then truncated to
> unsigned int according to the prototype of snd_soc_update_bits(). I think
> gcc is correctly warning that the upper 32 bits are lost.
>
> sound/soc/codecs/adau1373.c: In function 'adau1373_hw_params':
> sound/soc/codecs/adau1373.c:940:3: warning: large integer implicitly truncated to unsigned type [-Woverflow]
>
> gcc version 4.6.3
>
> Add 2 more BCLKDIV mask macros as explained by Lars:
>
> The BCLKDIV has three fields. The bitclock divider (bit 0-1), the samplerate
> (bit 2-4) and the source select (bit 5). Here we want to update the bitclock
> divider field and the samplerate field. When I wrote the code I was lazy and
> used ~ADAU1373_BCLKDIV_SOURCE as the mask, which for this register is
> functionally equivalent to ADAU1373_BCLKDIV_SR_MASK | ADAU1373_BCLKDIV_BCLK_MASK.
>
> Cc: Lars-Peter Clausen <[email protected]>
> Cc: Liam Girdwood <[email protected]>
> Cc: Mark Brown <[email protected]>
> Cc: Jaroslav Kysela <[email protected]>
> Cc: Takashi Iwai <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> Signed-off-by: Tim Gardner <[email protected]>
Acked-by: Lars-Peter Clausen <[email protected]>
Thanks.
> ---
> v1 - simple cast solution
> v2 - Implement a full set of field masks as suggested by Lars.
>
> sound/soc/codecs/adau1373.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c
> index 068b3ae..1aa10dd 100644
> --- a/sound/soc/codecs/adau1373.c
> +++ b/sound/soc/codecs/adau1373.c
> @@ -133,6 +133,8 @@ struct adau1373 {
> #define ADAU1373_DAI_FORMAT_DSP 0x3
>
> #define ADAU1373_BCLKDIV_SOURCE BIT(5)
> +#define ADAU1373_BCLKDIV_SR_MASK (0x07 << 2)
> +#define ADAU1373_BCLKDIV_BCLK_MASK 0x03
> #define ADAU1373_BCLKDIV_32 0x03
> #define ADAU1373_BCLKDIV_64 0x02
> #define ADAU1373_BCLKDIV_128 0x01
> @@ -937,7 +939,8 @@ static int adau1373_hw_params(struct snd_pcm_substream *substream,
> adau1373_dai->enable_src = (div != 0);
>
> snd_soc_update_bits(codec, ADAU1373_BCLKDIV(dai->id),
> - ~ADAU1373_BCLKDIV_SOURCE, (div << 2) | ADAU1373_BCLKDIV_64);
> + ADAU1373_BCLKDIV_SR_MASK | ADAU1373_BCLKDIV_BCLK_MASK,
> + (div << 2) | ADAU1373_BCLKDIV_64);
>
> switch (params_format(params)) {
> case SNDRV_PCM_FORMAT_S16_LE:
On Mon, Mar 11, 2013 at 01:18:23PM -0600, Tim Gardner wrote:
> ADAU1373_BCLKDIV_SOURCE is defined as BIT(5) which uses UL constants. On
> amd64 the result of the ones complement operator is then truncated to
Applied, but please don't bury patches in the middle of e-mail threads
(I nearly deleted this unread) and avoid including
> Cc: Lars-Peter Clausen <[email protected]>
> Cc: Liam Girdwood <[email protected]>
> Cc: Mark Brown <[email protected]>
> Cc: Jaroslav Kysela <[email protected]>
> Cc: Takashi Iwai <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> Signed-off-by: Tim Gardner <[email protected]>
enormous CC lists like this in the body of the mail.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
On 03/12/2013 12:47 PM, Mark Brown wrote:
> On Mon, Mar 11, 2013 at 01:18:23PM -0600, Tim Gardner wrote:
>> ADAU1373_BCLKDIV_SOURCE is defined as BIT(5) which uses UL
>> constants. On amd64 the result of the ones complement operator is
>> then truncated to
>
> Applied, but please don't bury patches in the middle of e-mail
> threads (I nearly deleted this unread) and avoid including
>
Point taken. In the future I'll start a new thread for each v(n).
>> Cc: Lars-Peter Clausen <[email protected]> Cc: Liam Girdwood
>> <[email protected]> Cc: Mark Brown
>> <[email protected]> Cc: Jaroslav Kysela
>> <[email protected]> Cc: Takashi Iwai <[email protected]> Cc:
>> [email protected] Cc:
>> [email protected] Signed-off-by: Tim Gardner
>> <[email protected]>
>
> enormous CC lists like this in the body of the mail.
>
I'm just going by the default output of scripts/get_maintainer.pl. Are
there better options to filter the roles ? In this case I received a
review from a supporter (Lars), and the patch is being committed by
yet another supporter (yourself). Would you have noticed this patch
had I restricted the Cc list to just maintainers and lists ?
Lars-Peter Clausen <[email protected]> (supporter:ANALOG DEVICES IN...)
Liam Girdwood <[email protected]> (supporter:SOUND - SOC LAYER...)
Mark Brown <[email protected]> (supporter:SOUND -
SOC LAYER...)
Jaroslav Kysela <[email protected]> (maintainer:SOUND)
Takashi Iwai <[email protected]> (maintainer:SOUND)
[email protected] (open list:ANALOG DEVICES IN...)
[email protected] (moderated list:ANALOG DEVICES IN...)
[email protected] (open list)
rtg
- --
Tim Gardner [email protected]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with undefined - http://www.enigmail.net/
iQIcBAEBCgAGBQJRP38/AAoJED12yEX6FEfKppEP/jAi6jFpqKwNF3KPiH4j7E9m
PYiydQTVHxgHlqzhJw+7+hyfz7fgbDSew0BpC84gtUYp2xcqCePkNoExT8COk08U
wzIVm6Z1OT57RZDBMoICcH/Xm9/Y2/cf4eXOgiEw5tfP25Gwae2Vep9NcHkCz3iA
4XNg+Cpq+Bu+l4f0WTTUmZlJmhbuai/knEodz413hIHXOhAXLe/ZnMSE2wh9/UnD
H17z7pijKcAMAtcYJmLGT928U2rereW4rlR3+jh9k7CQ4wADo8XrJHNVXo7fgS4Q
ws7hTWsaMuDTXKvg6fWbD9uMJc3OFodZ/ig0uEbZz7LXoxQd1M8MywJnInz6mGBQ
9UnSg4AZOqs64Hm9X98902Fzro8dAa0ltjyPCxYgFhuORG86+SFseS514Y8aYWS8
3/fdgR/kb4kNK4Zd+bDZv34/IEeIJiXlkUshIbhc58ErzVKP54shova2793UVcOk
f5JmM7Tx/ctm2jzj3NYUS6HUsXucaE1K6HSPZ5qJlZyk6s59jJJwNWTILkwNu3Nj
qxlPLWlRcyY8QuPQILx5podOhDmmAduPc8VOVF0YRed+J39BHJRVer3k/i2S/jkz
ACULLlA6edESk3/poeGdBP1S0UhuI3PlzMh9Kwkkx6O8r8COgNVa1hfBSc6DAj+i
YRSlhhPGE022ZQ6VhKUf
=VhzH
-----END PGP SIGNATURE-----
On Tue, Mar 12, 2013 at 01:17:26PM -0600, Tim Gardner wrote:
> > threads (I nearly deleted this unread) and avoid including
> > enormous CC lists like this in the body of the mail.
> I'm just going by the default output of scripts/get_maintainer.pl. Are
> there better options to filter the roles ? In this case I received a
> review from a supporter (Lars), and the patch is being committed by
> yet another supporter (yourself). Would you have noticed this patch
> had I restricted the Cc list to just maintainers and lists ?
I specifically mean don't include the lists in the body of the mail - it
means they either litter the git log or need to be manually deleted. If
you're just using unfiltered get_maintainer output then I'd suggest that
you generate the CCs in your scripts when sending rather than putting
them in the changelog.