arm: tegra: enterprise: enabling active lowpower for bt
Rakesh Goyal [Thu, 23 Jun 2011 05:26:52 +0000 (10:26 +0530)]
Configuring correct pinmux. platform_device_add for bluesleep.
this feature will be enabled with CONFIG_BT_BLUESLEEP.

bug 841489

Original-Change-Id: Ib2e86b4090e0e0b1b8256a32b049f6741d8d2648
Reviewed-on: http://git-master/r/38015
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>

Rebase-Id: Rb8ccadc62fbba8e27c9c1a121a3f1d95220b9c7a

arch/arm/mach-tegra/board-enterprise-pinmux.c
arch/arm/mach-tegra/board-enterprise.c

index a38552a..a9a8e1a 100644 (file)
@@ -210,7 +210,7 @@ static __initdata struct tegra_pingroup_config enterprise_pinmux[] = {
        DEFAULT_PINMUX(LCD_D4,          DISPLAYA,        NORMAL,    NORMAL,     INPUT),
        DEFAULT_PINMUX(LCD_D5,          DISPLAYA,        NORMAL,    NORMAL,     INPUT),
        DEFAULT_PINMUX(LCD_D6,          RSVD1,           NORMAL,    NORMAL,     INPUT),
-       DEFAULT_PINMUX(LCD_D7,          DISPLAYA,        NORMAL,    NORMAL,     INPUT),
+       DEFAULT_PINMUX(LCD_D7,          RSVD1,           NORMAL,    NORMAL,     OUTPUT),
        DEFAULT_PINMUX(LCD_D8,          DISPLAYA,        NORMAL,    NORMAL,     INPUT),
        DEFAULT_PINMUX(LCD_D9,          DISPLAYA,        NORMAL,    NORMAL,     INPUT),
        DEFAULT_PINMUX(LCD_D10,         DISPLAYA,        NORMAL,    NORMAL,     INPUT),
@@ -286,6 +286,7 @@ static __initdata struct tegra_pingroup_config enterprise_pinmux[] = {
        DEFAULT_PINMUX(KB_ROW1,         KBC,             PULL_UP,   NORMAL,     INPUT),
        DEFAULT_PINMUX(KB_ROW2,         KBC,             PULL_UP,   NORMAL,     INPUT),
        DEFAULT_PINMUX(KB_ROW3,         KBC,             PULL_UP,   NORMAL,     INPUT),
+       DEFAULT_PINMUX(KB_ROW10,        RSVD1,           NORMAL,    NORMAL,     INPUT),
        DEFAULT_PINMUX(KB_COL0,         KBC,             PULL_UP,   NORMAL,     INPUT),
        DEFAULT_PINMUX(KB_COL1,         KBC,             PULL_UP,   NORMAL,     INPUT),
        DEFAULT_PINMUX(KB_COL2,         KBC,             PULL_UP,   NORMAL,     INPUT),
index 23a13a9..09ddc2c 100644 (file)
@@ -111,6 +111,59 @@ static noinline void __init enterprise_bt_rfkill(void)
 static inline void enterprise_bt_rfkill(void) { }
 #endif
 
+static void __init enterprise_setup_bluesleep(void)
+{
+       struct platform_device *pdev = NULL;
+       struct resource *res;
+
+       pdev = platform_device_alloc("bluesleep", 0);
+       if (!pdev) {
+               pr_err("unable to allocate platform device for bluesleep");
+               return;
+       }
+
+       res = kzalloc(sizeof(struct resource) * 3, GFP_KERNEL);
+       if (!res) {
+               pr_err("unable to allocate resource for bluesleep\n");
+               goto err_free_dev;
+       }
+
+       res[0].name   = "gpio_host_wake";
+       res[0].start  = TEGRA_GPIO_PS2;
+       res[0].end    = TEGRA_GPIO_PS2;
+       res[0].flags  = IORESOURCE_IO;
+
+       res[1].name   = "gpio_ext_wake";
+       res[1].start  = TEGRA_GPIO_PE7;
+       res[1].end    = TEGRA_GPIO_PE7;
+       res[1].flags  = IORESOURCE_IO;
+
+       res[2].name   = "host_wake";
+       res[2].start  = gpio_to_irq(TEGRA_GPIO_PS2);
+       res[2].end    = gpio_to_irq(TEGRA_GPIO_PS2);
+       res[2].flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE ;
+
+       if (platform_device_add_resources(pdev, res, 3)) {
+               pr_err("unable to add resources to bluesleep device\n");
+               goto err_free_res;
+       }
+
+       if (platform_device_add(pdev)) {
+               pr_err("unable to add bluesleep device\n");
+               goto err_free_res;
+       }
+       tegra_gpio_enable(TEGRA_GPIO_PS2);
+       tegra_gpio_enable(TEGRA_GPIO_PE7);
+
+       return;
+
+err_free_res:
+       kfree(res);
+err_free_dev:
+       platform_device_put(pdev);
+       return;
+}
+
 static __initdata struct tegra_clk_init_table enterprise_clk_init_table[] = {
        /* name         parent          rate            enabled */
        { "pll_m",      NULL,           0,              true},
@@ -419,6 +472,7 @@ static void __init tegra_enterprise_init(void)
        enterprise_baseband_init();
        enterprise_panel_init();
        enterprise_bt_rfkill();
+       enterprise_setup_bluesleep();
        enterprise_emc_init();
        enterprise_sensors_init();
        enterprise_suspend_init();