X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=drivers%2Fmisc%2Fcs5535-mfgpt.c;h=6f6218061b0dfff3adc3b5cc862da3162d6b0077;hb=993af7c048f414121bc81e0d6e69456e3862a06b;hp=2d44b3300104eb183f902212bf281849dce00186;hpb=772320e84588dcbe1600ffb83e5f328f2209ac2a;p=karo-tx-linux.git diff --git a/drivers/misc/cs5535-mfgpt.c b/drivers/misc/cs5535-mfgpt.c index 2d44b3300104..6f6218061b0d 100644 --- a/drivers/misc/cs5535-mfgpt.c +++ b/drivers/misc/cs5535-mfgpt.c @@ -211,6 +211,17 @@ EXPORT_SYMBOL_GPL(cs5535_mfgpt_alloc_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); } EXPORT_SYMBOL_GPL(cs5535_mfgpt_free_timer);