summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaoran.Wang <elven.wang@nxp.com>2017-06-19 17:14:32 +0800
committerVictor Chang <vfcc@google.com>2017-09-05 10:26:04 -0700
commit11c709d2e7a576b070a9c20459e9370d14e3273f (patch)
tree258b02bd5ac3fce8aec9dee4600e2a6ff3273b44
parentc68684954c8908a476357c12a68d767fccf4ebee (diff)
downloadimx-v4.1-11c709d2e7a576b070a9c20459e9370d14e3273f.tar.gz
chipidea: imx: add usb vbus power polarity setting
Cherry-picked from 8cc3298159f6330f1e843644b119f16e5059d15f. If the vbus is controlled by ehci port power bit, we need set power polarity of vbus enable signal according to the vbus power supply chip on board. Change-Id: I63ee496f6bd14470a2607876a09ba4a7e8b97b20 Signed-off-by: Haoran.Wang <elven.wang@nxp.com>
-rw-r--r--arch/arm/boot/dts/imx6ul-nxpu-iopb.dts2
-rw-r--r--drivers/usb/chipidea/ci_hdrc_imx.c3
-rw-r--r--drivers/usb/chipidea/ci_hdrc_imx.h1
-rw-r--r--drivers/usb/chipidea/usbmisc_imx.c7
4 files changed, 13 insertions, 0 deletions
diff --git a/arch/arm/boot/dts/imx6ul-nxpu-iopb.dts b/arch/arm/boot/dts/imx6ul-nxpu-iopb.dts
index 0fef6acedd2a..49009eeb7432 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 d3b1e77cb4ec..07f2bd2f3b31 100644
--- a/drivers/usb/chipidea/ci_hdrc_imx.c
+++ b/drivers/usb/chipidea/ci_hdrc_imx.c
@@ -196,6 +196,9 @@ static struct imx_usbmisc_data *usbmisc_get_init_data(struct device *dev)
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 bdcf1b724abe..f4e29f14adff 100644
--- a/drivers/usb/chipidea/ci_hdrc_imx.h
+++ b/drivers/usb/chipidea/ci_hdrc_imx.h
@@ -45,6 +45,7 @@ struct imx_usbmisc_data {
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 840a10805af4..ae8bad3e89de 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 @@ static int usbmisc_imx6q_init(struct imx_usbmisc_data *data)
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);