]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
Merge tag 'extcon-next-for-4.21' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 11 Dec 2018 13:24:54 +0000 (14:24 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 11 Dec 2018 13:24:54 +0000 (14:24 +0100)
Chanwoo writes:

Update extcon for 4.21

Detailed description for this pull request:
1. Fix minor issue of Maxim MUIC (Micro USB IC) device driver
- Avoid forcing UART path on probe for extcon-max77843/77693/14577/8997.c
- Set USB path in USB device mode for extcon-max8997.c

* tag 'extcon-next-for-4.21' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/extcon:
  extcon: max8997: Fix lack of path setting in USB device mode
  extcon: max8997: Avoid forcing UART path on drive probe
  extcon: max14577: Avoid forcing UART path on drive probe
  extcon: max77693: Avoid forcing UART path on drive probe
  extcon: max77843: Avoid forcing UART path on drive probe

drivers/extcon/extcon-max14577.c
drivers/extcon/extcon-max77693.c
drivers/extcon/extcon-max77843.c
drivers/extcon/extcon-max8997.c

index 22d2feb1f8bcacd4d3509f73eda420bed522f046..32f663436e6e9175ed401ffacb43bcfd94a0c99f 100644 (file)
@@ -657,6 +657,8 @@ static int max14577_muic_probe(struct platform_device *pdev)
        struct max14577 *max14577 = dev_get_drvdata(pdev->dev.parent);
        struct max14577_muic_info *info;
        int delay_jiffies;
+       int cable_type;
+       bool attached;
        int ret;
        int i;
        u8 id;
@@ -725,8 +727,17 @@ static int max14577_muic_probe(struct platform_device *pdev)
        info->path_uart = CTRL1_SW_UART;
        delay_jiffies = msecs_to_jiffies(DELAY_MS_DEFAULT);
 
-       /* Set initial path for UART */
-       max14577_muic_set_path(info, info->path_uart, true);
+       /* Set initial path for UART when JIG is connected to get serial logs */
+       ret = max14577_bulk_read(info->max14577->regmap,
+                       MAX14577_MUIC_REG_STATUS1, info->status, 2);
+       if (ret) {
+               dev_err(info->dev, "Cannot read STATUS registers\n");
+               return ret;
+       }
+       cable_type = max14577_muic_get_cable_type(info, MAX14577_CABLE_GROUP_ADC,
+                                        &attached);
+       if (attached && cable_type == MAX14577_MUIC_ADC_FACTORY_MODE_UART_OFF)
+               max14577_muic_set_path(info, info->path_uart, true);
 
        /* Check revision number of MUIC device*/
        ret = max14577_read_reg(info->max14577->regmap,
index a79537ebb6711b21a7a10015b09385ce694e322d..32fc5a66ffa988db004d13b8c965f8acec832404 100644 (file)
@@ -1072,6 +1072,8 @@ static int max77693_muic_probe(struct platform_device *pdev)
        struct max77693_reg_data *init_data;
        int num_init_data;
        int delay_jiffies;
+       int cable_type;
+       bool attached;
        int ret;
        int i;
        unsigned int id;
@@ -1212,8 +1214,18 @@ static int max77693_muic_probe(struct platform_device *pdev)
                delay_jiffies = msecs_to_jiffies(DELAY_MS_DEFAULT);
        }
 
-       /* Set initial path for UART */
-        max77693_muic_set_path(info, info->path_uart, true);
+       /* Set initial path for UART when JIG is connected to get serial logs */
+       ret = regmap_bulk_read(info->max77693->regmap_muic,
+                       MAX77693_MUIC_REG_STATUS1, info->status, 2);
+       if (ret) {
+               dev_err(info->dev, "failed to read MUIC register\n");
+               return ret;
+       }
+       cable_type = max77693_muic_get_cable_type(info,
+                                          MAX77693_CABLE_GROUP_ADC, &attached);
+       if (attached && (cable_type == MAX77693_MUIC_ADC_FACTORY_MODE_UART_ON ||
+                        cable_type == MAX77693_MUIC_ADC_FACTORY_MODE_UART_OFF))
+               max77693_muic_set_path(info, info->path_uart, true);
 
        /* Check revision number of MUIC device*/
        ret = regmap_read(info->max77693->regmap_muic,
index b98cbd0362f5aa34486329217f64524e23c673c3..a343a6ef35065dc6cce978ac51bb000be464c443 100644 (file)
@@ -812,6 +812,8 @@ static int max77843_muic_probe(struct platform_device *pdev)
        struct max77693_dev *max77843 = dev_get_drvdata(pdev->dev.parent);
        struct max77843_muic_info *info;
        unsigned int id;
+       int cable_type;
+       bool attached;
        int i, ret;
 
        info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
@@ -856,9 +858,19 @@ static int max77843_muic_probe(struct platform_device *pdev)
        /* Set ADC debounce time */
        max77843_muic_set_debounce_time(info, MAX77843_DEBOUNCE_TIME_25MS);
 
-       /* Set initial path for UART */
-       max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_UART, true,
-                              false);
+       /* Set initial path for UART when JIG is connected to get serial logs */
+       ret = regmap_bulk_read(max77843->regmap_muic,
+                       MAX77843_MUIC_REG_STATUS1, info->status,
+                       MAX77843_MUIC_STATUS_NUM);
+       if (ret) {
+               dev_err(info->dev, "Cannot read STATUS registers\n");
+               goto err_muic_irq;
+       }
+       cable_type = max77843_muic_get_cable_type(info, MAX77843_CABLE_GROUP_ADC,
+                                        &attached);
+       if (attached && cable_type == MAX77843_MUIC_ADC_FACTORY_MODE_UART_OFF)
+               max77843_muic_set_path(info, MAX77843_MUIC_CONTROL1_SW_UART,
+                                      true, false);
 
        /* Check revision number of MUIC device */
        ret = regmap_read(max77843->regmap_muic, MAX77843_MUIC_REG_ID, &id);
index bdabb2479e0df547ab60e151e3f55e0b463ed8d3..172e116ac1cedd3f4f5afa9f7fd295716d94b456 100644 (file)
@@ -311,12 +311,10 @@ 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, info->path_usb, attached);
-               if (ret < 0) {
-                       dev_err(info->dev, "failed to update muic register\n");
-                       return ret;
-               }
+       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;
        }
 
        switch (usb_type) {
@@ -632,6 +630,8 @@ static int max8997_muic_probe(struct platform_device *pdev)
        struct max8997_platform_data *pdata = dev_get_platdata(max8997->dev);
        struct max8997_muic_info *info;
        int delay_jiffies;
+       int cable_type;
+       bool attached;
        int ret, i;
 
        info = devm_kzalloc(&pdev->dev, sizeof(struct max8997_muic_info),
@@ -724,8 +724,17 @@ static int max8997_muic_probe(struct platform_device *pdev)
                delay_jiffies = msecs_to_jiffies(DELAY_MS_DEFAULT);
        }
 
-       /* Set initial path for UART */
-        max8997_muic_set_path(info, info->path_uart, true);
+       /* Set initial path for UART when JIG is connected to get serial logs */
+       ret = max8997_bulk_read(info->muic, MAX8997_MUIC_REG_STATUS1,
+                               2, info->status);
+       if (ret) {
+               dev_err(info->dev, "failed to read MUIC register\n");
+               return ret;
+       }
+       cable_type = max8997_muic_get_cable_type(info,
+                                          MAX8997_CABLE_GROUP_ADC, &attached);
+       if (attached && cable_type == MAX8997_MUIC_ADC_FACTORY_MODE_UART_OFF)
+               max8997_muic_set_path(info, info->path_uart, true);
 
        /* Set ADC debounce time */
        max8997_muic_set_debounce_time(info, ADC_DEBOUNCE_TIME_25MS);