diff mbox

OMAP: omap4-panda: add WiLink shared transport power functions

Message ID 1358368495-10499-1-git-send-email-coelho@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

Luciano Coelho Jan. 16, 2013, 8:34 p.m. UTC
The code to enable and disable the WiLink shared transport has been
removed from the TI-ST driver, so it must be implemented in the board
files instead.  Add the relevant operations to Panda's board file.

Additionally, add the UART2 muxing data, so it's properly configured.

Signed-off-by: Luciano Coelho <coelho@ti.com>
---
 arch/arm/mach-omap2/board-omap4panda.c |   57 +++++++++++++++++++++++++++++---
 1 file changed, 53 insertions(+), 4 deletions(-)

Comments

Fabio Estevam Jan. 16, 2013, 9:10 p.m. UTC | #1
On Wed, Jan 16, 2013 at 6:34 PM, Luciano Coelho <coelho@ti.com> wrote:

> +static int wilink_st_init(void)
> +{
> +       int status;
> +
> +       status = gpio_request(GPIO_BT_EN, "kim");
> +       if (status) {
> +               pr_err("%s: failed to request gpio %d\n", __func__,
> +                      GPIO_BT_EN);
> +               return status;
> +       }
> +
> +       status = gpio_direction_output(GPIO_BT_EN, 0);
> +       if (status)
> +               pr_err("%s: unable to configure gpio %d", __func__,
> +                      GPIO_BT_EN);
> +

You could use gpio_request_one() instead.
Luciano Coelho Jan. 16, 2013, 9:31 p.m. UTC | #2
On Wed, 2013-01-16 at 19:10 -0200, Fabio Estevam wrote:
> On Wed, Jan 16, 2013 at 6:34 PM, Luciano Coelho <coelho@ti.com> wrote:
> 
> > +static int wilink_st_init(void)
> > +{
> > +       int status;
> > +
> > +       status = gpio_request(GPIO_BT_EN, "kim");
> > +       if (status) {
> > +               pr_err("%s: failed to request gpio %d\n", __func__,
> > +                      GPIO_BT_EN);
> > +               return status;
> > +       }
> > +
> > +       status = gpio_direction_output(GPIO_BT_EN, 0);
> > +       if (status)
> > +               pr_err("%s: unable to configure gpio %d", __func__,
> > +                      GPIO_BT_EN);
> > +
> 
> You could use gpio_request_one() instead.

Good point.  I'll send v2 using this instead:

gpio_request_one(GPIO_BT_EN, GPIOF_OUT_INIT_LOW, "kim")

--
Luca.
diff mbox

Patch

diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
index 5c8e9ce..97a274b 100644
--- a/arch/arm/mach-omap2/board-omap4panda.c
+++ b/arch/arm/mach-omap2/board-omap4panda.c
@@ -51,18 +51,57 @@ 
 #define GPIO_HUB_NRESET		62
 #define GPIO_WIFI_PMENA		43
 #define GPIO_WIFI_IRQ		53
+#define GPIO_BT_EN		46
 
 /* wl127x BT, FM, GPS connectivity chip */
+static int plat_kim_chip_enable(struct kim_data_s *kim_data)
+{
+	gpio_set_value(GPIO_BT_EN, GPIO_LOW);
+	mdelay(5);
+	gpio_set_value(GPIO_BT_EN, GPIO_HIGH);
+	mdelay(100);
+
+	return 0;
+}
+
+static int plat_kim_chip_disable(struct kim_data_s *kim_data)
+{
+	gpio_set_value(GPIO_BT_EN, GPIO_LOW);
+	mdelay(1);
+	gpio_set_value(GPIO_BT_EN, GPIO_HIGH);
+	mdelay(1);
+	gpio_set_value(GPIO_BT_EN, GPIO_LOW);
+
+	return 0;
+}
+
 static struct ti_st_plat_data wilink_platform_data = {
-	.nshutdown_gpio	= 46,
 	.dev_name	= "/dev/ttyO1",
 	.flow_cntrl	= 1,
 	.baud_rate	= 3000000,
-	.chip_enable	= NULL,
-	.suspend	= NULL,
-	.resume		= NULL,
+	.chip_enable	= plat_kim_chip_enable,
+	.chip_disable	= plat_kim_chip_disable,
 };
 
+static int wilink_st_init(void)
+{
+	int status;
+
+	status = gpio_request(GPIO_BT_EN, "kim");
+	if (status) {
+		pr_err("%s: failed to request gpio %d\n", __func__,
+		       GPIO_BT_EN);
+		return status;
+	}
+
+	status = gpio_direction_output(GPIO_BT_EN, 0);
+	if (status)
+		pr_err("%s: unable to configure gpio %d", __func__,
+		       GPIO_BT_EN);
+
+	return status;
+}
+
 static struct platform_device wl1271_device = {
 	.name	= "kim",
 	.id	= -1,
@@ -397,6 +436,12 @@  static struct omap_board_mux board_mux[] __initdata = {
 		  OMAP_PULL_ENA),
 	OMAP4_MUX(ABE_MCBSP1_FSX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
 
+	/* UART2 - BT/FM/GPS shared transport */
+	OMAP4_MUX(UART2_CTS,	OMAP_PIN_INPUT	| OMAP_MUX_MODE0),
+	OMAP4_MUX(UART2_RTS,	OMAP_PIN_OUTPUT	| OMAP_MUX_MODE0),
+	OMAP4_MUX(UART2_RX,	OMAP_PIN_INPUT	| OMAP_MUX_MODE0),
+	OMAP4_MUX(UART2_TX,	OMAP_PIN_OUTPUT	| OMAP_MUX_MODE0),
+
 	{ .reg_offset = OMAP_MUX_TERMINATOR },
 };
 
@@ -433,6 +478,10 @@  static void __init omap4_panda_init(void)
 	if (ret)
 		pr_err("error setting wl12xx data: %d\n", ret);
 
+	ret = wilink_st_init();
+	if (ret)
+		pr_err("WiLink shared transport init failed: %d\n", ret);
+
 	omap4_panda_init_rev();
 	omap4_panda_i2c_init();
 	platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));