Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 67b0d250 authored by Mayank Rana's avatar Mayank Rana Committed by Stephen Boyd
Browse files

msm: Add configuration required to use GSBI8 into UARTDM Mode



Add GSBI8 device and its related interfaces with their configuration
i.e. clock, ADM, GPIO. GSBI8 UARTDM interface can be used for external
Bluetooth SoC.

CRs-Fixed: 375285
Change-Id: I15819862072c92d8ff6f397fdf081f1b619ec235
Signed-off-by: default avatarMayank Rana <mrana@codeaurora.org>
parent ccc05c24
Loading
Loading
Loading
Loading
+47 −0
Original line number Original line Diff line number Diff line
@@ -76,6 +76,18 @@ static struct gpiomux_setting gsbi_uart = {
	.pull = GPIOMUX_PULL_NONE,
	.pull = GPIOMUX_PULL_NONE,
};
};


static struct gpiomux_setting gsbi8_uartdm_active_cfg = {
	.func = GPIOMUX_FUNC_1,
	.drv = GPIOMUX_DRV_8MA,
	.pull = GPIOMUX_PULL_NONE,
};

static struct gpiomux_setting gsbi8_uartdm_suspended_cfg = {
	.func = GPIOMUX_FUNC_GPIO,
	.drv = GPIOMUX_DRV_2MA,
	.pull = GPIOMUX_PULL_DOWN,
};

static struct gpiomux_setting gsbi9_active_cfg = {
static struct gpiomux_setting gsbi9_active_cfg = {
	.func = GPIOMUX_FUNC_2,
	.func = GPIOMUX_FUNC_2,
	.drv = GPIOMUX_DRV_8MA,
	.drv = GPIOMUX_DRV_8MA,
@@ -310,6 +322,37 @@ static struct msm_gpiomux_config msm8960_ethernet_configs[] = {
	},
	},
};
};
#endif
#endif
/* GSBI8 UART GPIOs for Atheros Bluetooth */
static struct msm_gpiomux_config msm8960_gsbi8_uartdm_configs[] = {
	{
		.gpio = 34,
		.settings = {
			[GPIOMUX_SUSPENDED] = &gsbi8_uartdm_suspended_cfg,
			[GPIOMUX_ACTIVE] = &gsbi8_uartdm_active_cfg,
		}
	},
	{
		.gpio = 35,
		.settings = {
			[GPIOMUX_SUSPENDED] = &gsbi8_uartdm_suspended_cfg,
			[GPIOMUX_ACTIVE] = &gsbi8_uartdm_active_cfg,
		}
	},
	{
		.gpio = 36,
		.settings = {
			[GPIOMUX_SUSPENDED] = &gsbi8_uartdm_suspended_cfg,
			[GPIOMUX_ACTIVE] = &gsbi8_uartdm_active_cfg,
		}
	},
	{
		.gpio = 37,
		.settings = {
			[GPIOMUX_SUSPENDED] = &gsbi8_uartdm_suspended_cfg,
			[GPIOMUX_ACTIVE] = &gsbi8_uartdm_active_cfg,
		}
	},
};


static struct msm_gpiomux_config msm8960_fusion_gsbi_configs[] = {
static struct msm_gpiomux_config msm8960_fusion_gsbi_configs[] = {
	{
	{
@@ -988,6 +1031,10 @@ int __init msm8960_init_gpiomux(void)
	msm_gpiomux_install(msm8960_mdp_vsync_configs,
	msm_gpiomux_install(msm8960_mdp_vsync_configs,
			ARRAY_SIZE(msm8960_mdp_vsync_configs));
			ARRAY_SIZE(msm8960_mdp_vsync_configs));


	if (socinfo_get_platform_subtype() != PLATFORM_SUBTYPE_SGLTE)
		msm_gpiomux_install(msm8960_gsbi8_uartdm_configs,
			ARRAY_SIZE(msm8960_gsbi8_uartdm_configs));

	if (socinfo_get_platform_subtype() == PLATFORM_SUBTYPE_SGLTE)
	if (socinfo_get_platform_subtype() == PLATFORM_SUBTYPE_SGLTE)
		msm_gpiomux_install(msm8960_gsbi8_uart_configs,
		msm_gpiomux_install(msm8960_gsbi8_uart_configs,
			ARRAY_SIZE(msm8960_gsbi8_uart_configs));
			ARRAY_SIZE(msm8960_gsbi8_uart_configs));
+34 −0
Original line number Original line Diff line number Diff line
@@ -2462,7 +2462,36 @@ static int configure_uart_gpios(int on)
static struct msm_serial_hs_platform_data msm_uart_dm9_pdata = {
static struct msm_serial_hs_platform_data msm_uart_dm9_pdata = {
	.gpio_config	= configure_uart_gpios,
	.gpio_config	= configure_uart_gpios,
};
};

static int configure_gsbi8_uart_gpios(int on)
{
	int ret = 0, i;
	int uart_gpios[] = {34, 35, 36, 37};

	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_dm8_pdata = {
	.gpio_config	= configure_gsbi8_uart_gpios,
};
#else
#else
static struct msm_serial_hs_platform_data msm_uart_dm8_pdata;
static struct msm_serial_hs_platform_data msm_uart_dm9_pdata;
static struct msm_serial_hs_platform_data msm_uart_dm9_pdata;
#endif
#endif


@@ -3143,6 +3172,11 @@ static void __init msm8960_cdp_init(void)
		platform_device_register(&msm_device_uart_dm9);
		platform_device_register(&msm_device_uart_dm9);
	}
	}


	/* For 8960 Standalone External Bluetooth Interface */
	if (socinfo_get_platform_subtype() != PLATFORM_SUBTYPE_SGLTE) {
		msm_device_uart_dm8.dev.platform_data = &msm_uart_dm8_pdata;
		platform_device_register(&msm_device_uart_dm8);
	}
	platform_add_devices(common_devices, ARRAY_SIZE(common_devices));
	platform_add_devices(common_devices, ARRAY_SIZE(common_devices));
	msm8960_pm8921_gpio_mpp_init();
	msm8960_pm8921_gpio_mpp_init();
	platform_add_devices(cdp_devices, ARRAY_SIZE(cdp_devices));
	platform_add_devices(cdp_devices, ARRAY_SIZE(cdp_devices));
+6 −0
Original line number Original line Diff line number Diff line
@@ -5508,7 +5508,10 @@ static struct clk_lookup msm_clocks_8960_common[] __initdata = {
	CLK_LOOKUP("core_clk",		gsbi5_uart_clk.c, "msm_serial_hsl.0"),
	CLK_LOOKUP("core_clk",		gsbi5_uart_clk.c, "msm_serial_hsl.0"),
	CLK_LOOKUP("core_clk",		gsbi6_uart_clk.c, "msm_serial_hs.0"),
	CLK_LOOKUP("core_clk",		gsbi6_uart_clk.c, "msm_serial_hs.0"),
	CLK_LOOKUP("core_clk",		gsbi7_uart_clk.c,	""),
	CLK_LOOKUP("core_clk",		gsbi7_uart_clk.c,	""),
	/* used on 8960 SGLTE for console */
	CLK_LOOKUP("core_clk",		gsbi8_uart_clk.c, "msm_serial_hsl.1"),
	CLK_LOOKUP("core_clk",		gsbi8_uart_clk.c, "msm_serial_hsl.1"),
	/* used on 8960 standalone with Atheros Bluetooth */
	CLK_LOOKUP("core_clk",		gsbi8_uart_clk.c, "msm_serial_hs.2"),
	CLK_LOOKUP("core_clk",		gsbi9_uart_clk.c, "msm_serial_hs.1"),
	CLK_LOOKUP("core_clk",		gsbi9_uart_clk.c, "msm_serial_hs.1"),
	CLK_LOOKUP("core_clk",		gsbi10_uart_clk.c,	""),
	CLK_LOOKUP("core_clk",		gsbi10_uart_clk.c,	""),
	CLK_LOOKUP("core_clk",		gsbi11_uart_clk.c,	""),
	CLK_LOOKUP("core_clk",		gsbi11_uart_clk.c,	""),
@@ -5560,7 +5563,10 @@ static struct clk_lookup msm_clocks_8960_common[] __initdata = {
	CLK_LOOKUP("iface_clk",		gsbi5_p_clk.c,	"msm_serial_hsl.0"),
	CLK_LOOKUP("iface_clk",		gsbi5_p_clk.c,	"msm_serial_hsl.0"),
	CLK_LOOKUP("iface_clk",		gsbi6_p_clk.c,  "msm_serial_hs.0"),
	CLK_LOOKUP("iface_clk",		gsbi6_p_clk.c,  "msm_serial_hs.0"),
	CLK_LOOKUP("iface_clk",		gsbi7_p_clk.c,		""),
	CLK_LOOKUP("iface_clk",		gsbi7_p_clk.c,		""),
	/* used on 8960 SGLTE for serial console */
	CLK_LOOKUP("iface_clk",		gsbi8_p_clk.c,	"msm_serial_hsl.1"),
	CLK_LOOKUP("iface_clk",		gsbi8_p_clk.c,	"msm_serial_hsl.1"),
	/* used on 8960 standalone with Atheros Bluetooth */
	CLK_LOOKUP("iface_clk",		gsbi8_p_clk.c,	"msm_serial_hs.2"),
	CLK_LOOKUP("iface_clk",		gsbi9_p_clk.c,  "msm_serial_hs.1"),
	CLK_LOOKUP("iface_clk",		gsbi9_p_clk.c,  "msm_serial_hs.1"),
	CLK_LOOKUP("iface_clk",		gsbi10_p_clk.c,		"qup_i2c.10"),
	CLK_LOOKUP("iface_clk",		gsbi10_p_clk.c,		"qup_i2c.10"),
	CLK_LOOKUP("iface_clk",		gsbi11_p_clk.c,		""),
	CLK_LOOKUP("iface_clk",		gsbi11_p_clk.c,		""),
+46 −0
Original line number Original line Diff line number Diff line
@@ -292,6 +292,52 @@ struct platform_device msm_device_uart_dm6 = {
		.coherent_dma_mask	= DMA_BIT_MASK(32),
		.coherent_dma_mask	= DMA_BIT_MASK(32),
	},
	},
};
};

/* GSBI 8 used into UARTDM Mode */
static struct resource msm_uart_dm8_resources[] = {
	{
		.start	= MSM_UART8DM_PHYS,
		.end	= MSM_UART8DM_PHYS + PAGE_SIZE - 1,
		.name	= "uartdm_resource",
		.flags	= IORESOURCE_MEM,
	},
	{
		.start	= GSBI8_UARTDM_IRQ,
		.end	= GSBI8_UARTDM_IRQ,
		.flags	= IORESOURCE_IRQ,
	},
	{
		.start	= MSM_GSBI8_PHYS,
		.end	= MSM_GSBI8_PHYS + 4 - 1,
		.name	= "gsbi_resource",
		.flags	= IORESOURCE_MEM,
	},
	{
		.start	= DMOV_HSUART_GSBI8_TX_CHAN,
		.end	= DMOV_HSUART_GSBI8_RX_CHAN,
		.name	= "uartdm_channels",
		.flags	= IORESOURCE_DMA,
	},
	{
		.start	= DMOV_HSUART_GSBI8_TX_CRCI,
		.end	= DMOV_HSUART_GSBI8_RX_CRCI,
		.name	= "uartdm_crci",
		.flags	= IORESOURCE_DMA,
	},
};

static u64 msm_uart_dm8_dma_mask = DMA_BIT_MASK(32);
struct platform_device msm_device_uart_dm8 = {
	.name	= "msm_serial_hs",
	.id	= 2,
	.num_resources	= ARRAY_SIZE(msm_uart_dm8_resources),
	.resource	= msm_uart_dm8_resources,
	.dev	= {
		.dma_mask		= &msm_uart_dm8_dma_mask,
		.coherent_dma_mask	= DMA_BIT_MASK(32),
	},
};

/*
/*
 * GSBI 9 used into UARTDM Mode
 * GSBI 9 used into UARTDM Mode
 * For 8960 Fusion 2.2 Primary IPC
 * For 8960 Fusion 2.2 Primary IPC
+1 −0
Original line number Original line Diff line number Diff line
@@ -53,6 +53,7 @@ extern struct platform_device msm_device_uart_dm3;
extern struct platform_device msm_device_uart_dm12;
extern struct platform_device msm_device_uart_dm12;
extern struct platform_device *msm_device_uart_gsbi9;
extern struct platform_device *msm_device_uart_gsbi9;
extern struct platform_device msm_device_uart_dm6;
extern struct platform_device msm_device_uart_dm6;
extern struct platform_device msm_device_uart_dm8;
extern struct platform_device msm_device_uart_dm9;
extern struct platform_device msm_device_uart_dm9;


extern struct platform_device msm8960_device_uart_gsbi2;
extern struct platform_device msm8960_device_uart_gsbi2;
Loading