cs5535-mfgpt: reuse timers that have never been set up
The MFGPT hardware may be set up only once, therefore cs5535_mfgpt_free_timer() didn't re-set the timer's "avail" bit. However if a timer is freed before it has actually been in use then it may be made available again. Signed-off-by: Jens Rottmann <JRottmann@LiPPERTEmbedded.de> Acked-by: Andres Salomon <dilinger@queued.net> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Jordan Crouse <jordan@cosmicpenguin.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
e73790a57a
commit
ecd6269174
1 changed files with 11 additions and 0 deletions
|
@ -211,6 +211,17 @@ EXPORT_SYMBOL_GPL(cs5535_mfgpt_alloc_timer);
|
||||||
*/
|
*/
|
||||||
void cs5535_mfgpt_free_timer(struct cs5535_mfgpt_timer *timer)
|
void cs5535_mfgpt_free_timer(struct cs5535_mfgpt_timer *timer)
|
||||||
{
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
uint16_t val;
|
||||||
|
|
||||||
|
/* timer can be made available again only if never set up */
|
||||||
|
val = cs5535_mfgpt_read(timer, MFGPT_REG_SETUP);
|
||||||
|
if (!(val & MFGPT_SETUP_SETUP)) {
|
||||||
|
spin_lock_irqsave(&timer->chip->lock, flags);
|
||||||
|
__set_bit(timer->nr, timer->chip->avail);
|
||||||
|
spin_unlock_irqrestore(&timer->chip->lock, flags);
|
||||||
|
}
|
||||||
|
|
||||||
kfree(timer);
|
kfree(timer);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(cs5535_mfgpt_free_timer);
|
EXPORT_SYMBOL_GPL(cs5535_mfgpt_free_timer);
|
||||||
|
|
Loading…
Reference in a new issue