msm8930: Add support for GSBI9 for Primary IPC
This change adds GSBI9 UARTDM device and required resource
(its GPIOs and clocks) with their configurations for 8930
SGLTE Primary IPC functionality.
CRs-Fixed: 459320
Change-Id: Ief186e0dcb64bc2ef38f5c3a33e4942134d87e4e
Signed-off-by: Saket Saurabh <ssaurabh@codeaurora.org>
diff --git a/arch/arm/mach-msm/board-8930.c b/arch/arm/mach-msm/board-8930.c
index d4ea596..69e5288 100644
--- a/arch/arm/mach-msm/board-8930.c
+++ b/arch/arm/mach-msm/board-8930.c
@@ -74,6 +74,7 @@
#include <mach/msm_bus_board.h>
#include <mach/msm_memtypes.h>
#include <mach/dma.h>
+#include <mach/msm_serial_hs.h>
#include <mach/msm_xo.h>
#include <mach/restart.h>
@@ -2850,6 +2851,39 @@
}
}
+#ifdef CONFIG_SERIAL_MSM_HS
+static int configure_uart_gpios(int on)
+{
+ int ret = 0, i;
+ int uart_gpios[] = {93, 94, 95, 96};
+
+ for (i = 0; i < ARRAY_SIZE(uart_gpios); i++) {
+ if (on) {
+ ret = gpio_request(uart_gpios[i], NULL);
+ if (ret) {
+ pr_err("%s: unable to request uart gpio[%d]\n",
+ __func__, uart_gpios[i]);
+ break;
+ }
+ } else {
+ gpio_free(uart_gpios[i]);
+ }
+ }
+
+ if (ret && on && i)
+ for (; i >= 0; i--)
+ gpio_free(uart_gpios[i]);
+ return ret;
+}
+
+static struct msm_serial_hs_platform_data msm_uart_dm9_pdata = {
+ .gpio_config = configure_uart_gpios,
+};
+#else
+static struct msm_serial_hs_platform_data msm_uart_dm9_pdata;
+#endif
+
+
static void __init msm8930_cdp_init(void)
{
if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917)
@@ -2897,6 +2931,15 @@
PM8038_USB_ID_IN_IRQ(PM8038_IRQ_BASE);
}
+ if (socinfo_get_platform_subtype() == PLATFORM_SUBTYPE_SGLTE &&
+ machine_is_msm8930_evt()) {
+#ifdef CONFIG_SERIAL_MSM_HS
+ msm_uart_dm9_pdata.wakeup_irq = gpio_to_irq(94); /* GSBI9(2) */
+ msm_device_uart_dm9.dev.platform_data = &msm_uart_dm9_pdata;
+#endif
+ platform_device_register(&msm_device_uart_dm9);
+ }
+
msm_otg_pdata.phy_init_seq = hsusb_phy_init_seq;
msm8960_device_otg.dev.platform_data = &msm_otg_pdata;
android_usb_pdata.swfi_latency =
diff --git a/arch/arm/mach-msm/clock-8960.c b/arch/arm/mach-msm/clock-8960.c
index 0b4e5d9..7375f99 100755
--- a/arch/arm/mach-msm/clock-8960.c
+++ b/arch/arm/mach-msm/clock-8960.c
@@ -6042,7 +6042,8 @@
CLK_LOOKUP("core_clk", gsbi6_uart_clk.c, "msm_serial_hs.0"),
CLK_LOOKUP("core_clk", gsbi7_uart_clk.c, ""),
CLK_LOOKUP("core_clk", gsbi8_uart_clk.c, ""),
- CLK_LOOKUP("core_clk", gsbi9_uart_clk.c, ""),
+ /* used on 8930 SGLTE for Primary IPC */
+ CLK_LOOKUP("core_clk", gsbi9_uart_clk.c, "msm_serial_hs.1"),
CLK_LOOKUP("core_clk", gsbi10_uart_clk.c, ""),
CLK_LOOKUP("core_clk", gsbi11_uart_clk.c, ""),
CLK_LOOKUP("core_clk", gsbi12_uart_clk.c, ""),
@@ -6094,6 +6095,8 @@
CLK_LOOKUP("iface_clk", gsbi6_p_clk.c, "msm_serial_hs.0"),
CLK_LOOKUP("iface_clk", gsbi7_p_clk.c, ""),
CLK_LOOKUP("iface_clk", gsbi8_p_clk.c, ""),
+ /* used on 8930 SGLTE for Primary IPC */
+ CLK_LOOKUP("iface_clk", gsbi9_p_clk.c, "msm_serial_hs.1"),
CLK_LOOKUP("iface_clk", gsbi9_p_clk.c, "qup_i2c.0"),
CLK_LOOKUP("iface_clk", gsbi10_p_clk.c, "qup_i2c.10"),
CLK_LOOKUP("iface_clk", gsbi11_p_clk.c, ""),