This patch set default of ADC Debounce Time(25ms) during probe step.
Also, can possible change ADC Debounce Time according to H/W situation
by using max8997_set_adc_debounce_time()

Signed-off-by: Chanwoo Choi <cw00.c...@samsung.com>
Signed-off-by: Myungjoo Ham <myungjoo....@samsung.com>
---
 drivers/extcon/extcon-max8997.c     | 42 +++++++++++++++++++++++++++++++++++++
 include/linux/mfd/max8997-private.h |  7 +++++++
 2 files changed, 49 insertions(+)

diff --git a/drivers/extcon/extcon-max8997.c b/drivers/extcon/extcon-max8997.c
index 8739b50..3206daa 100644
--- a/drivers/extcon/extcon-max8997.c
+++ b/drivers/extcon/extcon-max8997.c
@@ -30,6 +30,13 @@
 
 #define        DEV_NAME                        "max8997-muic"
 
+enum max8997_muic_adc_debounce_time {
+       ADC_DEBOUNCE_TIME_0_5MS = 0,    /* 0.5ms */
+       ADC_DEBOUNCE_TIME_10MS,         /* 10ms */
+       ADC_DEBOUNCE_TIME_25MS,         /* 25ms */
+       ADC_DEBOUNCE_TIME_38_62MS,      /* 38.62ms */
+};
+
 struct max8997_muic_irq {
        unsigned int irq;
        const char *name;
@@ -95,6 +102,38 @@ static const char *max8997_extcon_cable[] = {
 };
 
 /*
+ * max8997_muic_set_debounce_time - Set the debounce time of ADC
+ * @info: the instance including private data of max8997 MUIC
+ * @time: the debounce time of ADC
+ */
+static int max8997_muic_set_debounce_time(struct max8997_muic_info *info,
+               enum max8997_muic_adc_debounce_time time)
+{
+       int ret;
+
+       switch (time) {
+       case ADC_DEBOUNCE_TIME_0_5MS:
+       case ADC_DEBOUNCE_TIME_10MS:
+       case ADC_DEBOUNCE_TIME_25MS:
+       case ADC_DEBOUNCE_TIME_38_62MS:
+               ret = max8997_update_reg(info->muic,
+                                         MAX8997_MUIC_REG_CONTROL3,
+                                         time << CONTROL3_ADCDBSET_SHIFT,
+                                         CONTROL3_ADCDBSET_MASK);
+               if (ret) {
+                       dev_err(info->dev, "failed to set ADC debounce time\n");
+                       return -EAGAIN;
+               }
+               break;
+       default:
+               dev_err(info->dev, "invalid ADC debounce time\n");
+               return -EINVAL;
+       }
+
+       return 0;
+};
+
+/*
  * max8997_muic_set_path - Set hardware line according to attached cable
  * @info: the instance including private data of max8997 MUIC
  * @value: the path according to attached cable
@@ -507,6 +546,9 @@ static int max8997_muic_probe(struct platform_device *pdev)
                }
        }
 
+       /* Set ADC debounce time */
+       max8997_muic_set_debounce_time(info, ADC_DEBOUNCE_TIME_25MS);
+
        /* Initial device detection */
        max8997_muic_detect_dev(info);
 
diff --git a/include/linux/mfd/max8997-private.h 
b/include/linux/mfd/max8997-private.h
index 010173a..cd37a92 100644
--- a/include/linux/mfd/max8997-private.h
+++ b/include/linux/mfd/max8997-private.h
@@ -251,6 +251,13 @@ enum max8997_muic_reg {
 #define CONTROL2_USBCPINT_MASK         (0x1 << CONTROL2_USBCPINT_SHIFT)
 #define CONTROL2_RCPS_MASK             (0x1 << CONTROL2_RCPS_SHIFT)
 
+#define CONTROL3_JIGSET_SHIFT          (0)
+#define CONTROL3_BTLDSET_SHIFT         (2)
+#define CONTROL3_ADCDBSET_SHIFT                (4)
+#define CONTROL3_JIGSET_MASK           (0x3 << CONTROL3_JIGSET_SHIFT)
+#define CONTROL3_BTLDSET_MASK          (0x3 << CONTROL3_BTLDSET_SHIFT)
+#define CONTROL3_ADCDBSET_MASK         (0x3 << CONTROL3_ADCDBSET_SHIFT)
+
 #define        MAX8997_ADC_GROUND              0x00
 #define        MAX8997_ADC_MHL                 0x01
 #define        MAX8997_ADC_JIG_USB_1           0x18
-- 
1.8.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to