At Thu, 19 Dec 2013 15:54:59 +0000, Lee Jones wrote:
Commit '166a34d ASoC: ab8500: Fix invalid cast to long pointer' rather carelessly converts find_next_bit() to fls() (find last bit set), which are not the same.
Does it break on the real machines?
fls() behaves differently from find_next_bit(), of course, but in this case, it should work same in the end, since there are at most two bits.
Takashi
Although this implementation may not be portable, the alternative breaks audio on anything using the AB8500 CODEC, which is a much greater evil. Besides, this driver will never run on anything else.
Cc: Takashi Iwai tiwai@suse.de Signed-off-by: Lee Jones lee.jones@linaro.org
sound/soc/codecs/ab8500-codec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sound/soc/codecs/ab8500-codec.c b/sound/soc/codecs/ab8500-codec.c index 1ad92cb..51ae3e9 100644 --- a/sound/soc/codecs/ab8500-codec.c +++ b/sound/soc/codecs/ab8500-codec.c @@ -2322,7 +2322,7 @@ static int ab8500_codec_set_dai_tdm_slot(struct snd_soc_dai *dai, slot = ffs(tx_mask); snd_soc_update_bits(codec, AB8500_DASLOTCONF1, mask, slot); snd_soc_update_bits(codec, AB8500_DASLOTCONF3, mask, slot);
slot = fls(tx_mask);
snd_soc_update_bits(codec, AB8500_DASLOTCONF2, mask, slot); snd_soc_update_bits(codec, AB8500_DASLOTCONF4, mask, slot); break;slot = find_next_bit((unsigned long *)&tx_mask, 32, slot + 1);
@@ -2364,7 +2364,7 @@ static int ab8500_codec_set_dai_tdm_slot(struct snd_soc_dai *dai, AB8500_ADSLOTSEL(slot), AB8500_MASK_SLOT(slot), AB8500_ADSLOTSELX_AD_OUT_TO_SLOT(AB8500_AD_OUT3, slot));
slot = fls(rx_mask);
snd_soc_update_bits(codec, AB8500_ADSLOTSEL(slot), AB8500_MASK_SLOT(slot),slot = find_next_bit((unsigned long *)&rx_mask, 32, slot + 1);
-- 1.8.3.2