[1/2] extcon: max88743: Add OTG power control to the MUIC driver

Message ID 20171018092802.25390-2-m.szyprowski@samsung.com
State New
Headers show
Series
  • [1/2] extcon: max88743: Add OTG power control to the MUIC driver
Related show

Commit Message

Marek Szyprowski Oct. 18, 2017, 9:28 a.m.
Enabling power on VBUS micro-usb pin is required only when passive OTG
cable is connected. Initially OTG VBUS power control was planned to be
done in charger driver. However such information is not really available
from the extcon notifications, so VBUS power control has to be done
directly in MUIC driver, which has all information about the attached
accessory.

For example SmartDock is externally powered accessory, provides OTG
(USB HOST) functionality and use VBUS pin for charging a device battery,
so the VBUS charging pump should be disabled in such case.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>

---
 drivers/extcon/extcon-max77843.c     | 16 ++++++++++++++++
 include/linux/mfd/max77843-private.h |  3 +++
 2 files changed, 19 insertions(+)

-- 
2.14.2

--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Chanwoo Choi Oct. 18, 2017, 9:44 a.m. | #1
Hi Marek,

Looks good to me. But, the patch subject is wrong as following:
- max88743 -> max77843

If you fix the subject, feel free to add my acked-tag.
Acked-by: Chanwoo Choi <cw00.choi@samsung.com>


Regards,
Chanwoo Choi

On 2017년 10월 18일 18:28, Marek Szyprowski wrote:
> Enabling power on VBUS micro-usb pin is required only when passive OTG

> cable is connected. Initially OTG VBUS power control was planned to be

> done in charger driver. However such information is not really available

> from the extcon notifications, so VBUS power control has to be done

> directly in MUIC driver, which has all information about the attached

> accessory.

> 

> For example SmartDock is externally powered accessory, provides OTG

> (USB HOST) functionality and use VBUS pin for charging a device battery,

> so the VBUS charging pump should be disabled in such case.

> 

> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>

> ---

>  drivers/extcon/extcon-max77843.c     | 16 ++++++++++++++++

>  include/linux/mfd/max77843-private.h |  3 +++

>  2 files changed, 19 insertions(+)

> 

> diff --git a/drivers/extcon/extcon-max77843.c b/drivers/extcon/extcon-max77843.c

> index 6e722d552cf1..217c743405f8 100644

> --- a/drivers/extcon/extcon-max77843.c

> +++ b/drivers/extcon/extcon-max77843.c

> @@ -240,6 +240,21 @@ static int max77843_muic_set_path(struct max77843_muic_info *info,

>  	return 0;

>  }

>  

> +static void max77843_charger_set_otg_vbus(struct max77843_muic_info *info,

> +		 bool on)

> +{

> +	struct max77693_dev *max77843 = info->max77843;

> +	unsigned int cnfg00;

> +

> +	if (on)

> +		cnfg00 = MAX77843_CHG_OTG_MASK | MAX77843_CHG_BOOST_MASK;

> +	else

> +		cnfg00 = MAX77843_CHG_ENABLE | MAX77843_CHG_BUCK_MASK;

> +

> +	regmap_update_bits(max77843->regmap_chg, MAX77843_CHG_REG_CHG_CNFG_00,

> +			   MAX77843_CHG_MODE_MASK, cnfg00);

> +}

> +

>  static int max77843_muic_get_cable_type(struct max77843_muic_info *info,

>  		enum max77843_muic_cable_group group, bool *attached)

>  {

> @@ -355,6 +370,7 @@ static int max77843_muic_adc_gnd_handler(struct max77843_muic_info *info)

>  			return ret;

>  

>  		extcon_set_state_sync(info->edev, EXTCON_USB_HOST, attached);

> +		max77843_charger_set_otg_vbus(info, attached);

>  		break;

>  	case MAX77843_MUIC_GND_MHL_VB:

>  	case MAX77843_MUIC_GND_MHL:

> diff --git a/include/linux/mfd/max77843-private.h b/include/linux/mfd/max77843-private.h

> index c19303b0ccfd..0223cd5941c8 100644

> --- a/include/linux/mfd/max77843-private.h

> +++ b/include/linux/mfd/max77843-private.h

> @@ -245,10 +245,13 @@ enum max77843_irq_muic {

>  #define MAX77843_CHG_OVER_CURRENT_BAT		(0x06 << 4)

>  

>  /* MAX77843 CHG_CNFG_00 register */

> +#define MAX77843_CHG_MODE_MASK			0x0f

>  #define MAX77843_CHG_DISABLE			0x00

>  #define MAX77843_CHG_ENABLE			0x05

>  #define MAX77843_CHG_MASK			0x01

> +#define MAX77843_CHG_OTG_MASK			0x02

>  #define MAX77843_CHG_BUCK_MASK			0x04

> +#define MAX77843_CHG_BOOST_MASK			0x08

>  

>  /* MAX77843 CHG_CNFG_01 register */

>  #define MAX77843_CHG_RESTART_THRESHOLD_100	0x00

> 




--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/extcon/extcon-max77843.c b/drivers/extcon/extcon-max77843.c
index 6e722d552cf1..217c743405f8 100644
--- a/drivers/extcon/extcon-max77843.c
+++ b/drivers/extcon/extcon-max77843.c
@@ -240,6 +240,21 @@  static int max77843_muic_set_path(struct max77843_muic_info *info,
 	return 0;
 }
 
+static void max77843_charger_set_otg_vbus(struct max77843_muic_info *info,
+		 bool on)
+{
+	struct max77693_dev *max77843 = info->max77843;
+	unsigned int cnfg00;
+
+	if (on)
+		cnfg00 = MAX77843_CHG_OTG_MASK | MAX77843_CHG_BOOST_MASK;
+	else
+		cnfg00 = MAX77843_CHG_ENABLE | MAX77843_CHG_BUCK_MASK;
+
+	regmap_update_bits(max77843->regmap_chg, MAX77843_CHG_REG_CHG_CNFG_00,
+			   MAX77843_CHG_MODE_MASK, cnfg00);
+}
+
 static int max77843_muic_get_cable_type(struct max77843_muic_info *info,
 		enum max77843_muic_cable_group group, bool *attached)
 {
@@ -355,6 +370,7 @@  static int max77843_muic_adc_gnd_handler(struct max77843_muic_info *info)
 			return ret;
 
 		extcon_set_state_sync(info->edev, EXTCON_USB_HOST, attached);
+		max77843_charger_set_otg_vbus(info, attached);
 		break;
 	case MAX77843_MUIC_GND_MHL_VB:
 	case MAX77843_MUIC_GND_MHL:
diff --git a/include/linux/mfd/max77843-private.h b/include/linux/mfd/max77843-private.h
index c19303b0ccfd..0223cd5941c8 100644
--- a/include/linux/mfd/max77843-private.h
+++ b/include/linux/mfd/max77843-private.h
@@ -245,10 +245,13 @@  enum max77843_irq_muic {
 #define MAX77843_CHG_OVER_CURRENT_BAT		(0x06 << 4)
 
 /* MAX77843 CHG_CNFG_00 register */
+#define MAX77843_CHG_MODE_MASK			0x0f
 #define MAX77843_CHG_DISABLE			0x00
 #define MAX77843_CHG_ENABLE			0x05
 #define MAX77843_CHG_MASK			0x01
+#define MAX77843_CHG_OTG_MASK			0x02
 #define MAX77843_CHG_BUCK_MASK			0x04
+#define MAX77843_CHG_BOOST_MASK			0x08
 
 /* MAX77843 CHG_CNFG_01 register */
 #define MAX77843_CHG_RESTART_THRESHOLD_100	0x00