lp8727_charger: Add configurable debouce timer
Debounce time is configurable in the platform side. If it is not defined,
the default value is 270ms.
Platform data is msec unit, and this time is converted to jiffies
internally. The workqueue uses this jiffies time in the interrupt
handling. So debounce_jiffies is added in the private data.
Signed-off-by: Milo(Woogyom) Kim <milo.kim@ti.com>
Signed-off-by: Anton Vorontsov <anton.vorontsov@linaro.org>
diff --git a/drivers/power/lp8727_charger.c b/drivers/power/lp8727_charger.c
index 7c19c09..1907b1f 100644
--- a/drivers/power/lp8727_charger.c
+++ b/drivers/power/lp8727_charger.c
@@ -17,7 +17,7 @@
#include <linux/power_supply.h>
#include <linux/platform_data/lp8727.h>
-#define DEBOUNCE_MSEC 270
+#define DEFAULT_DEBOUNCE_MSEC 270
/* Registers */
#define CTRL1 0x1
@@ -90,6 +90,7 @@
struct lp8727_psy *psy;
struct lp8727_chg_param *chg_parm;
enum lp8727_dev_id devid;
+ unsigned long debounce_jiffies;
};
static int lp8727_read_bytes(struct lp8727_chg *pchg, u8 reg, u8 *data, u8 len)
@@ -236,15 +237,18 @@
static irqreturn_t lp8727_isr_func(int irq, void *ptr)
{
struct lp8727_chg *pchg = ptr;
- unsigned long delay = msecs_to_jiffies(DEBOUNCE_MSEC);
- queue_delayed_work(pchg->irqthread, &pchg->work, delay);
+ queue_delayed_work(pchg->irqthread, &pchg->work,
+ pchg->debounce_jiffies);
return IRQ_HANDLED;
}
static int lp8727_intr_config(struct lp8727_chg *pchg)
{
+ unsigned delay_msec = pchg->pdata ? pchg->pdata->debounce_msec :
+ DEFAULT_DEBOUNCE_MSEC;
+
INIT_DELAYED_WORK(&pchg->work, lp8727_delayed_func);
pchg->irqthread = create_singlethread_workqueue("lp8727-irqthd");
@@ -253,6 +257,8 @@
return -ENOMEM;
}
+ pchg->debounce_jiffies = msecs_to_jiffies(delay_msec);
+
return request_threaded_irq(pchg->client->irq,
NULL,
lp8727_isr_func,