]> git.karo-electronics.de Git - linux-beck.git/commitdiff
extcon: max8997: Set default of ADC debounce time during initialization
authorChanwoo Choi <cw00.choi@samsung.com>
Tue, 12 Feb 2013 23:50:00 +0000 (08:50 +0900)
committerChanwoo Choi <cw00.choi@samsung.com>
Wed, 13 Feb 2013 22:54:09 +0000 (07:54 +0900)
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.choi@samsung.com>
Signed-off-by: Myungjoo Ham <myungjoo.ham@samsung.com>
drivers/extcon/extcon-max8997.c
include/linux/mfd/max8997-private.h

index 8739b50c2b36603e3f77e14a604157deb0256286..3206daaf8e085572f9757772bf2835f333c5d00d 100644 (file)
 
 #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;
@@ -94,6 +101,38 @@ static const char *max8997_extcon_cable[] = {
        NULL,
 };
 
+/*
+ * 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
@@ -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);
 
index 010173a9227457e8251b21b693b03354aff03e79..cd37a92ccba940fc81b9b3c7ce7cf5242b438aea 100644 (file)
@@ -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