Merge "target: msm8996: Add USB secondary port support for SBC8096"
diff --git a/include/target.h b/include/target.h
index e0a0264..d0d830d 100644
--- a/include/target.h
+++ b/include/target.h
@@ -70,6 +70,7 @@
const char * target_usb_controller();
void target_usb_phy_reset(void);
+void target_usb_phy_sec_reset(void);
void target_usb_phy_mux_configure(void);
target_usb_iface_t * target_usb30_init();
bool target_is_cdp_qvga();
diff --git a/platform/msm8996/include/platform/irqs.h b/platform/msm8996/include/platform/irqs.h
index 61d267b..e5cc23d 100644
--- a/platform/msm8996/include/platform/irqs.h
+++ b/platform/msm8996/include/platform/irqs.h
@@ -45,7 +45,13 @@
#define INT_QTMR_FRM_0_PHYSICAL_TIMER_EXP (GIC_SPI_START + 31)
-#define USB30_EE1_IRQ (GIC_SPI_START + 131)
+/* to support secondary port usage, secondary port Interrupt*/
+int usb_irq();
+
+#define USB30_EE1_IRQ (usb_irq())
+
+#define USB30_IRQ (GIC_SPI_START + 131)
+#define USB20_IRQ (GIC_SPI_START + 138)
#define GLINK_IPC_IRQ (GIC_SPI_START + 168)
diff --git a/platform/msm8996/platform.c b/platform/msm8996/platform.c
index 1234eda..a3c2d3e 100644
--- a/platform/msm8996/platform.c
+++ b/platform/msm8996/platform.c
@@ -217,3 +217,10 @@
return GCC_QUSB2_PRIM_PHY_BCR;
}
+int usb_irq()
+{
+ if (board_hardware_id() == HW_PLATFORM_SBC)
+ return USB20_IRQ;
+ else
+ return USB30_IRQ;
+}
diff --git a/target/msm8996/init.c b/target/msm8996/init.c
index 25c1b14..51051c9 100644
--- a/target/msm8996/init.c
+++ b/target/msm8996/init.c
@@ -500,6 +500,11 @@
qusb2_phy_reset();
}
+void target_usb_phy_sec_reset()
+{
+ qusb2_phy_reset();
+}
+
target_usb_iface_t* target_usb30_init()
{
target_usb_iface_t *t_usb_iface;
@@ -507,9 +512,20 @@
t_usb_iface = calloc(1, sizeof(target_usb_iface_t));
ASSERT(t_usb_iface);
- t_usb_iface->phy_init = usb30_qmp_phy_init;
- t_usb_iface->phy_reset = target_usb_phy_reset;
- t_usb_iface->clock_init = clock_usb30_init;
+
+ /* for SBC we use secondary port */
+ if (board_hardware_id() == HW_PLATFORM_SBC)
+ {
+ /* secondary port have no QMP phy,use only QUSB2 phy that have only reset */
+ t_usb_iface->phy_init = NULL;
+ t_usb_iface->phy_reset = target_usb_phy_sec_reset;
+ t_usb_iface->clock_init = clock_usb20_init;
+ } else {
+ t_usb_iface->phy_init = usb30_qmp_phy_init;
+ t_usb_iface->phy_reset = target_usb_phy_reset;
+ t_usb_iface->clock_init = clock_usb30_init;
+ }
+
t_usb_iface->vbus_override = 1;
return t_usb_iface;