ARM: tegra: integration of slave mode support.
[linux-2.6.git] / arch / arm / mach-tegra / board-ventana.c
index 779ffdb..4e01850 100644 (file)
@@ -1,7 +1,8 @@
 /*
  * arch/arm/mach-tegra/board-ventana.c
  *
- * Copyright (c) 2010-2011, NVIDIA Corporation.
+ * Copyright (c) 2010-2011 NVIDIA Corporation.
+ * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -38,6 +39,7 @@
 #include <linux/memblock.h>
 #include <linux/i2c/atmel_mxt_ts.h>
 #include <linux/tegra_uart.h>
+#include <linux/rfkill-gpio.h>
 
 #include <sound/wm8903.h>
 
@@ -48,7 +50,7 @@
 #include <mach/iomap.h>
 #include <mach/io.h>
 #include <mach/i2s.h>
-#include <mach/tegra_wm8903_pdata.h>
+#include <mach/tegra_asoc_pdata.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 #include "pm.h"
 
 
-static struct resource ventana_bcm4329_rfkill_resources[] = {
+static struct rfkill_gpio_platform_data ventana_bt_rfkill_pdata[] = {
        {
-               .name   = "bcm4329_nshutdown_gpio",
-               .start  = TEGRA_GPIO_PU0,
-               .end    = TEGRA_GPIO_PU0,
-               .flags  = IORESOURCE_IO,
+               .name           = "bt_rfkill",
+               .shutdown_gpio  = TEGRA_GPIO_PU0,
+               .reset_gpio     = TEGRA_GPIO_INVALID,
+               .type           = RFKILL_TYPE_BLUETOOTH,
        },
 };
 
-static struct platform_device ventana_bcm4329_rfkill_device = {
-       .name = "bcm4329_rfkill",
+static struct platform_device ventana_bt_rfkill_device = {
+       .name = "rfkill_gpio",
        .id             = -1,
-       .num_resources  = ARRAY_SIZE(ventana_bcm4329_rfkill_resources),
-       .resource       = ventana_bcm4329_rfkill_resources,
+       .dev = {
+               .platform_data  = ventana_bt_rfkill_pdata,
+       },
 };
 
 static void __init ventana_bt_rfkill(void)
 {
        /*Add Clock Resource*/
-       clk_add_alias("bcm4329_32k_clk", ventana_bcm4329_rfkill_device.name, \
+       clk_add_alias("bcm4329_32k_clk", ventana_bt_rfkill_device.name, \
                                "blink", NULL);
        return;
 }
@@ -119,8 +122,6 @@ static struct platform_device ventana_bluesleep_device = {
 static void __init ventana_setup_bluesleep(void)
 {
        platform_device_register(&ventana_bluesleep_device);
-       tegra_gpio_enable(TEGRA_GPIO_PU6);
-       tegra_gpio_enable(TEGRA_GPIO_PU1);
        return;
 }
 
@@ -326,7 +327,8 @@ static int ventana_wakeup_key(void)
        unsigned long status =
                readl(IO_ADDRESS(TEGRA_PMC_BASE) + PMC_WAKE_STATUS);
 
-       return status & TEGRA_WAKE_GPIO_PV2 ? KEY_POWER : KEY_RESERVED;
+       return (status & (1 << TEGRA_WAKE_GPIO_PV2)) ?
+               KEY_POWER : KEY_RESERVED;
 }
 
 static struct gpio_keys_platform_data ventana_keys_platform_data = {
@@ -342,14 +344,6 @@ static struct platform_device ventana_keys_device = {
                .platform_data  = &ventana_keys_platform_data,
        },
 };
-
-static void ventana_keys_init(void)
-{
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(ventana_keys); i++)
-               tegra_gpio_enable(ventana_keys[i].gpio);
-}
 #endif
 
 static struct platform_device tegra_camera = {
@@ -357,12 +351,25 @@ static struct platform_device tegra_camera = {
        .id = -1,
 };
 
-static struct tegra_wm8903_platform_data ventana_audio_pdata = {
+static struct tegra_asoc_platform_data ventana_audio_pdata = {
        .gpio_spkr_en           = TEGRA_GPIO_SPKR_EN,
        .gpio_hp_det            = TEGRA_GPIO_HP_DET,
        .gpio_hp_mute           = -1,
        .gpio_int_mic_en        = TEGRA_GPIO_INT_MIC_EN,
        .gpio_ext_mic_en        = TEGRA_GPIO_EXT_MIC_EN,
+       .i2s_param[HIFI_CODEC]  = {
+               .audio_port_id  = 0,
+               .is_i2s_master  = 1,
+               .i2s_mode       = TEGRA_DAIFMT_I2S,
+       },
+       .i2s_param[BASEBAND]    = {
+               .audio_port_id  = -1,
+       },
+       .i2s_param[BT_SCO]      = {
+               .audio_port_id  = 3,
+               .is_i2s_master  = 1,
+               .i2s_mode       = TEGRA_DAIFMT_DSP_A,
+       },
 };
 
 static struct platform_device ventana_audio_device = {
@@ -389,7 +396,7 @@ static struct platform_device *ventana_devices[] __initdata = {
        &tegra_das_device,
        &spdif_dit_device,
        &bluetooth_dit_device,
-       &ventana_bcm4329_rfkill_device,
+       &ventana_bt_rfkill_device,
        &tegra_pcm_device,
        &ventana_audio_device,
 };
@@ -625,10 +632,6 @@ static void __init tegra_ventana_init(void)
                ventana_touch_init_panjit();
        }
 
-#ifdef CONFIG_KEYBOARD_GPIO
-       ventana_keys_init();
-#endif
-
        ventana_usb_init();
        ventana_gps_init();
        ventana_panel_init();