diff options
author | Manuel Lauss <mano@roarinelk.homelinux.net> | 2007-11-06 11:56:17 +0100 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2008-01-31 17:29:17 +0100 |
commit | 690eceb58ca900a55ae0cec5e8770ac166a881d8 (patch) | |
tree | d4cb76b81691fd959e8194d65cb036e3aac02040 /sound/soc/sh | |
parent | e035b841015251062316cb60b47d1f11d2703f6d (diff) | |
download | op-kernel-dev-690eceb58ca900a55ae0cec5e8770ac166a881d8.zip op-kernel-dev-690eceb58ca900a55ae0cec5e8770ac166a881d8.tar.gz |
[ALSA] ASoC: sh: improve generated code for HAC module (AC97)
Change loops in ac97_read/write functions to count down to zero
rather than up. Gcc will then use the 'dt' (decrement-and-test) op
instead of an increment/compare op-pair.
Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'sound/soc/sh')
-rw-r--r-- | sound/soc/sh/hac.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/sound/soc/sh/hac.c b/sound/soc/sh/hac.c index 8e3f039..34b77b9 100644 --- a/sound/soc/sh/hac.c +++ b/sound/soc/sh/hac.c @@ -105,7 +105,7 @@ static int hac_get_codec_data(struct hac_priv *hac, unsigned short r, unsigned int to1, to2, i; unsigned short adr; - for (i = 0; i < AC97_READ_RETRY; ++i) { + for (i = AC97_READ_RETRY; i; i--) { *v = 0; /* wait for HAC to receive something from the codec */ for (to1 = TMO_E4; @@ -132,7 +132,7 @@ static int hac_get_codec_data(struct hac_priv *hac, unsigned short r, udelay(21); } HACREG(HACRSR) &= ~(RSR_STDRY | RSR_STARY); - return (i < AC97_READ_RETRY); + return i; } static unsigned short hac_read_codec_aux(struct hac_priv *hac, @@ -141,7 +141,7 @@ static unsigned short hac_read_codec_aux(struct hac_priv *hac, unsigned short val; unsigned int i, to; - for (i = 0; i < AC97_READ_RETRY; i++) { + for (i = AC97_READ_RETRY; i; i--) { /* send_read_request */ local_irq_disable(); HACREG(HACTSR) &= ~(TSR_CMDAMT); @@ -159,10 +159,7 @@ static unsigned short hac_read_codec_aux(struct hac_priv *hac, break; } - if (i == AC97_READ_RETRY) - return ~0; - - return val; + return i ? val : ~0; } static void hac_ac97_write(struct snd_ac97 *ac97, unsigned short reg, @@ -172,7 +169,7 @@ static void hac_ac97_write(struct snd_ac97 *ac97, unsigned short reg, struct hac_priv *hac = &hac_cpu_data[unit_id]; unsigned int i, to; /* write_codec_aux */ - for (i = 0; i < AC97_WRITE_RETRY; i++) { + for (i = AC97_WRITE_RETRY; i; i--) { /* send_write_request */ local_irq_disable(); HACREG(HACTSR) &= ~(TSR_CMDDMT | TSR_CMDAMT); |