extcon: arizona: Make mic detection timeout configurable
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 1 Apr 2013 18:25:55 +0000 (19:25 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 2 Apr 2013 10:54:07 +0000 (11:54 +0100)
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/extcon/extcon-arizona.c
include/linux/mfd/arizona/pdata.h

index c7f8eb4299d2da37946ef77768aedc7bf0e21381..7a1b4a7791baf9e1fb3f0932903736014582559d 100644 (file)
@@ -42,7 +42,7 @@
 #define ARIZONA_HPDET_MAX 10000
 
 #define HPDET_DEBOUNCE 500
-#define MICD_TIMEOUT 2000
+#define DEFAULT_MICD_TIMEOUT 2000
 
 struct arizona_extcon_info {
        struct device *dev;
@@ -60,6 +60,8 @@ struct arizona_extcon_info {
        const struct arizona_micd_range *micd_ranges;
        int num_micd_ranges;
 
+       int micd_timeout;
+
        bool micd_reva;
        bool micd_clamp;
 
@@ -889,7 +891,7 @@ static void arizona_micd_detect(struct work_struct *work)
 handled:
        if (info->detecting)
                schedule_delayed_work(&info->micd_timeout_work,
-                                     msecs_to_jiffies(MICD_TIMEOUT));
+                                     msecs_to_jiffies(info->micd_timeout));
 
        pm_runtime_mark_last_busy(info->dev);
        mutex_unlock(&info->lock);
@@ -970,7 +972,7 @@ static irqreturn_t arizona_jackdet(int irq, void *data)
 
                if (cancelled_mic)
                        schedule_delayed_work(&info->micd_timeout_work,
-                                             msecs_to_jiffies(MICD_TIMEOUT));
+                                             msecs_to_jiffies(info->micd_timeout));
 
                goto out;
        }
@@ -1027,6 +1029,11 @@ static irqreturn_t arizona_jackdet(int irq, void *data)
                                   ARIZONA_MICD_CLAMP_DB | ARIZONA_JD1_DB);
        }
 
+       if (arizona->pdata.micd_timeout)
+               info->micd_timeout = arizona->pdata.micd_timeout;
+       else
+               info->micd_timeout = DEFAULT_MICD_TIMEOUT;
+
        /* Clear trig_sts to make sure DCVDD is not forced up */
        regmap_write(arizona->regmap, ARIZONA_AOD_WKUP_AND_TRIG,
                     ARIZONA_MICD_CLAMP_FALL_TRIG_STS |
index 3ef300baa2e60d5712d50d4913a2ed8eccbcda01..a0f940987a3e45dc7c2f0b6fc3aa4078f5068f63 100644 (file)
@@ -149,6 +149,9 @@ struct arizona_pdata {
        /** Mic detect debounce level */
        int micd_dbtime;
 
+       /** Mic detect timeout (ms) */
+       int micd_timeout;
+
        /** Force MICBIAS on for mic detect */
        bool micd_force_micbias;