extcon: max8997: Set default UART/USB path on probe
authorChanwoo Choi <cw00.choi@samsung.com>
Wed, 13 Feb 2013 06:04:15 +0000 (15:04 +0900)
committerChanwoo Choi <cw00.choi@samsung.com>
Wed, 13 Feb 2013 22:54:36 +0000 (07:54 +0900)
This patch set default H/W line path according to platfomr data.
The MAX8997 MUIC device can possibly set UART/USB or UART_AUX
/USB_AUX to internal H/W line path of MUIC device. Namely, only
one H/W line is used for two operation.

For example,
if H/W line path of MAX8997 device set UART/USB, micro usb cable
is connected to AP(Application Processor) and if H/W line path
set UART_AUX/USB_AUX, micro usb cable is connected to CP(Coprocessor).

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.h

index 35338a090c06092d88c28966e237c2805a4848d8..349f65f6a4a451f1b272cb2dce2ae9925159435d 100644 (file)
@@ -127,6 +127,13 @@ struct max8997_muic_info {
 
        struct max8997_muic_platform_data *muic_pdata;
        enum max8997_muic_charger_type pre_charger_type;
+
+       /*
+        * Default usb/uart path whether UART/USB or AUX_UART/AUX_USB
+        * h/w path of COMP2/COMN1 on CONTROL1 register.
+        */
+       int path_usb;
+       int path_uart;
 };
 
 enum {
@@ -322,7 +329,7 @@ static int max8997_muic_handle_usb(struct max8997_muic_info *info,
        int ret = 0;
 
        if (usb_type == MAX8997_USB_HOST) {
-               ret = max8997_muic_set_path(info, CONTROL1_SW_USB, attached);
+               ret = max8997_muic_set_path(info, info->path_usb, attached);
                if (ret < 0) {
                        dev_err(info->dev, "failed to update muic register\n");
                        return ret;
@@ -378,7 +385,7 @@ static int max8997_muic_handle_jig_uart(struct max8997_muic_info *info,
        int ret = 0;
 
        /* switch to UART */
-       ret = max8997_muic_set_path(info, CONTROL1_SW_UART, attached);
+       ret = max8997_muic_set_path(info, info->path_uart, attached);
        if (ret) {
                dev_err(info->dev, "failed to update muic register\n");
                return -EINVAL;
@@ -694,6 +701,23 @@ static int max8997_muic_probe(struct platform_device *pdev)
                }
        }
 
+       /*
+        * Default usb/uart path whether UART/USB or AUX_UART/AUX_USB
+        * h/w path of COMP2/COMN1 on CONTROL1 register.
+        */
+       if (pdata->muic_pdata->path_uart)
+               info->path_uart = pdata->muic_pdata->path_uart;
+       else
+               info->path_uart = CONTROL1_SW_UART;
+
+       if (pdata->muic_pdata->path_usb)
+               info->path_usb = pdata->muic_pdata->path_usb;
+       else
+               info->path_usb = CONTROL1_SW_USB;
+
+       /* Set initial path for UART */
+        max8997_muic_set_path(info, info->path_uart, true);
+
        /* Set ADC debounce time */
        max8997_muic_set_debounce_time(info, ADC_DEBOUNCE_TIME_25MS);
 
index 65f8d6a3a60881edd2d97c6844fabdb22010e3c9..2d2d67b6a3932d3eefafb650cb7d0688980074fa 100644 (file)
@@ -92,6 +92,13 @@ struct max8997_muic_reg_data {
 struct max8997_muic_platform_data {
        struct max8997_muic_reg_data *init_data;
        int num_init_data;
+
+       /*
+        * Default usb/uart path whether UART/USB or AUX_UART/AUX_USB
+        * h/w path of COMP2/COMN1 on CONTROL1 register.
+        */
+       int path_usb;
+       int path_uart;
 };
 
 enum max8997_haptic_motor_type {