chipidea: imx: add usb vbus power polarity setting am: 11c709d2e7
am: 4a31977524

Change-Id: I1b65bf7932e8569e1d4e1182021b08e2e10c54c4
diff --git a/arch/arm/boot/dts/imx6ul-nxpu-iopb.dts b/arch/arm/boot/dts/imx6ul-nxpu-iopb.dts
index 0fef6ac..49009ee 100644
--- a/arch/arm/boot/dts/imx6ul-nxpu-iopb.dts
+++ b/arch/arm/boot/dts/imx6ul-nxpu-iopb.dts
@@ -230,6 +230,7 @@
 	imx6ul-nxpu-iopb {
 		pinctrl_hog_1: hoggrp-1 {
 				   fsl,pins = <
+					MX6UL_PAD_ENET2_TX_DATA1__USB_OTG2_PWR  0x80000000
 					MX6UL_PAD_CSI_DATA01__SAI1_MCLK		0x17088
 					   >;
 			   };
@@ -461,6 +462,7 @@
 &usbotg2 {
 	dr_mode = "host";
 	disable-over-current;
+	power-polarity-active-high;
 	status = "okay";
 };
 
diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c
index d3b1e77..07f2bd2 100644
--- a/drivers/usb/chipidea/ci_hdrc_imx.c
+++ b/drivers/usb/chipidea/ci_hdrc_imx.c
@@ -196,6 +196,9 @@
 	if (of_find_property(np, "disable-over-current", NULL))
 		data->disable_oc = 1;
 
+	if (of_find_property(np, "power-polarity-active-high", NULL))
+	            data->pwr_polarity = 1;
+
 	if (of_find_property(np, "external-vbus-divider", NULL))
 		data->evdo = 1;
 
diff --git a/drivers/usb/chipidea/ci_hdrc_imx.h b/drivers/usb/chipidea/ci_hdrc_imx.h
index bdcf1b7..f4e29f1 100644
--- a/drivers/usb/chipidea/ci_hdrc_imx.h
+++ b/drivers/usb/chipidea/ci_hdrc_imx.h
@@ -45,6 +45,7 @@
 	struct usb_charger *charger;
 
 	unsigned int disable_oc:1; /* over current detect disabled */
+	unsigned int pwr_polarity:1; /* polarity of enable vbus from pmic */
 	unsigned int evdo:1; /* set external vbus divider option */
 	/*
 	 * Specifies the delay between powering up the xtal 24MHz clock
diff --git a/drivers/usb/chipidea/usbmisc_imx.c b/drivers/usb/chipidea/usbmisc_imx.c
index 840a108..ae8bad3 100644
--- a/drivers/usb/chipidea/usbmisc_imx.c
+++ b/drivers/usb/chipidea/usbmisc_imx.c
@@ -58,6 +58,7 @@
 
 #define MX6_BM_NON_BURST_SETTING	BIT(1)
 #define MX6_BM_OVER_CUR_DIS		BIT(7)
+#define MX6_BM_PRW_POLARITY		BIT(9)
 #define MX6_BM_WAKEUP_ENABLE		BIT(10)
 #define MX6_BM_UTMI_ON_CLOCK		BIT(13)
 #define MX6_BM_ID_WAKEUP		BIT(16)
@@ -399,6 +400,12 @@
 	writel(reg | MX6_BM_NON_BURST_SETTING,
 			usbmisc->base + data->index * 4);
 
+	if (data->pwr_polarity) {
+		reg = readl(usbmisc->base + data->index * 4);
+		reg |= MX6_BM_PRW_POLARITY;
+		writel(reg, usbmisc->base + data->index * 4);
+	}
+
 	/* For HSIC controller */
 	if (data->index == 2 || data->index == 3) {
 		val = readl(usbmisc->base + data->index * 4);