]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
extcon: max8997: Remove duplicate code related to set H/W line path
authorChanwoo Choi <cw00.choi@samsung.com>
Tue, 12 Feb 2013 23:42:37 +0000 (08:42 +0900)
committerChanwoo Choi <cw00.choi@samsung.com>
Wed, 13 Feb 2013 22:53:55 +0000 (07:53 +0900)
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 0fb1d48b0741243e6ce6688de048b5d89b22f417..8739b50c2b36603e3f77e14a604157deb0256286 100644 (file)
@@ -94,16 +94,61 @@ static const char *max8997_extcon_cable[] = {
        NULL,
 };
 
+/*
+ * 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
+ * @attached: the state of cable (true:attached, false:detached)
+ *
+ * The max8997 MUIC device share outside H/W line among a varity of cables,
+ * so this function set internal path of H/W line according to the type of
+ * attached cable.
+ */
+static int max8997_muic_set_path(struct max8997_muic_info *info,
+               u8 val, bool attached)
+{
+       int ret = 0;
+       u8 ctrl1, ctrl2 = 0;
+
+       if (attached)
+               ctrl1 = val;
+       else
+               ctrl1 = CONTROL1_SW_OPEN;
+
+       ret = max8997_update_reg(info->muic,
+                       MAX8997_MUIC_REG_CONTROL1, ctrl1, COMP_SW_MASK);
+       if (ret < 0) {
+               dev_err(info->dev, "failed to update MUIC register\n");
+               return -EAGAIN;
+       }
+
+       if (attached)
+               ctrl2 |= CONTROL2_CPEN_MASK;    /* LowPwr=0, CPEn=1 */
+       else
+               ctrl2 |= CONTROL2_LOWPWR_MASK;  /* LowPwr=1, CPEn=0 */
+
+       ret = max8997_update_reg(info->muic,
+                       MAX8997_MUIC_REG_CONTROL2, ctrl2,
+                       CONTROL2_LOWPWR_MASK | CONTROL2_CPEN_MASK);
+       if (ret < 0) {
+               dev_err(info->dev, "failed to update MUIC register\n");
+               return -EAGAIN;
+       }
+
+       dev_info(info->dev,
+               "CONTROL1 : 0x%02x, CONTROL2 : 0x%02x, state : %s\n",
+               ctrl1, ctrl2, attached ? "attached" : "detached");
+
+       return 0;
+}
+
 static int max8997_muic_handle_usb(struct max8997_muic_info *info,
                        enum max8997_muic_usb_type usb_type, bool attached)
 {
        int ret = 0;
 
        if (usb_type == MAX8997_USB_HOST) {
-               /* switch to USB */
-               ret = max8997_update_reg(info->muic, MAX8997_MUIC_REG_CONTROL1,
-                               attached ? CONTROL1_SW_USB : CONTROL1_SW_OPEN,
-                               CONTROL1_SW_MASK);
+               ret = max8997_muic_set_path(info, CONTROL1_SW_USB, attached);
                if (ret) {
                        dev_err(info->dev, "failed to update muic register\n");
                        goto out;
@@ -131,10 +176,7 @@ static int max8997_muic_handle_dock(struct max8997_muic_info *info,
 {
        int ret = 0;
 
-       /* switch to AUDIO */
-       ret = max8997_update_reg(info->muic, MAX8997_MUIC_REG_CONTROL1,
-                               attached ? CONTROL1_SW_AUDIO : CONTROL1_SW_OPEN,
-                               CONTROL1_SW_MASK);
+       ret = max8997_muic_set_path(info, CONTROL1_SW_AUDIO, attached);
        if (ret) {
                dev_err(info->dev, "failed to update muic register\n");
                goto out;
@@ -161,9 +203,7 @@ static int max8997_muic_handle_jig_uart(struct max8997_muic_info *info,
        int ret = 0;
 
        /* switch to UART */
-       ret = max8997_update_reg(info->muic, MAX8997_MUIC_REG_CONTROL1,
-                               attached ? CONTROL1_SW_UART : CONTROL1_SW_OPEN,
-                               CONTROL1_SW_MASK);
+       ret = max8997_muic_set_path(info, CONTROL1_SW_UART, attached);
        if (ret) {
                dev_err(info->dev, "failed to update muic register\n");
                goto out;
index acf42e96032096cbe828d56fd80f062f6efcbcae..010173a9227457e8251b21b693b03354aff03e79 100644 (file)
@@ -223,7 +223,7 @@ enum max8997_muic_reg {
 #define COMP2SW_SHIFT                  3
 #define COMN1SW_MASK                   (0x7 << COMN1SW_SHIFT)
 #define COMP2SW_MASK                   (0x7 << COMP2SW_SHIFT)
-#define CONTROL1_SW_MASK               (COMP2SW_MASK | COMN1SW_MASK)
+#define COMP_SW_MASK           (COMP2SW_MASK | COMN1SW_MASK)
 
 #define CONTROL1_SW_USB                        ((1 << COMP2SW_SHIFT) \
                                                | (1 << COMN1SW_SHIFT))
@@ -234,6 +234,23 @@ enum max8997_muic_reg {
 #define CONTROL1_SW_OPEN               ((0 << COMP2SW_SHIFT) \
                                                | (0 << COMN1SW_SHIFT))
 
+#define CONTROL2_LOWPWR_SHIFT          (0)
+#define CONTROL2_ADCEN_SHIFT           (1)
+#define CONTROL2_CPEN_SHIFT            (2)
+#define CONTROL2_SFOUTASRT_SHIFT       (3)
+#define CONTROL2_SFOUTORD_SHIFT                (4)
+#define CONTROL2_ACCDET_SHIFT          (5)
+#define CONTROL2_USBCPINT_SHIFT                (6)
+#define CONTROL2_RCPS_SHIFT            (7)
+#define CONTROL2_LOWPWR_MASK           (0x1 << CONTROL2_LOWPWR_SHIFT)
+#define CONTROL2_ADCEN_MASK            (0x1 << CONTROL2_ADCEN_SHIFT)
+#define CONTROL2_CPEN_MASK             (0x1 << CONTROL2_CPEN_SHIFT)
+#define CONTROL2_SFOUTASRT_MASK                (0x1 << CONTROL2_SFOUTASRT_SHIFT)
+#define CONTROL2_SFOUTORD_MASK         (0x1 << CONTROL2_SFOUTORD_SHIFT)
+#define CONTROL2_ACCDET_MASK           (0x1 << CONTROL2_ACCDET_SHIFT)
+#define CONTROL2_USBCPINT_MASK         (0x1 << CONTROL2_USBCPINT_SHIFT)
+#define CONTROL2_RCPS_MASK             (0x1 << CONTROL2_RCPS_SHIFT)
+
 #define        MAX8997_ADC_GROUND              0x00
 #define        MAX8997_ADC_MHL                 0x01
 #define        MAX8997_ADC_JIG_USB_1           0x18