arm: tegra: kai nfc support
Rakesh Goyal [Wed, 7 Mar 2012 10:51:45 +0000 (15:51 +0530)]
1) configure pinmux
2) create pn544_i2c_platform_data
3) register i2c device info using i2c_register_board_info

Bug 949128

Change-Id: I62c82d338724c4f012ac98d7ec61ec9aae1afae5
Signed-off-by: Rakesh Goyal <rgoyal@nvidia.com>
Reviewed-on: http://git-master/r/88288
Reviewed-by: Simone Willett <swillett@nvidia.com>
Tested-by: Simone Willett <swillett@nvidia.com>

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

index 713ecf9..1bc64bd 100644 (file)
@@ -354,7 +354,7 @@ static __initdata struct tegra_pingroup_config kai_pinmux_common[] = {
        DEFAULT_PINMUX(GMI_CS3_N,       RSVD1,           NORMAL,    NORMAL,     INPUT),
 
        /* OTHERS */
-       DEFAULT_PINMUX(KB_ROW3,         KBC,             NORMAL,    TRISTATE,   OUTPUT),
+       DEFAULT_PINMUX(KB_ROW3,         KBC,             NORMAL,    NORMAL,     OUTPUT),
        DEFAULT_PINMUX(GMI_DQS,         RSVD1,           NORMAL,    NORMAL,     INPUT),
 
        DEFAULT_PINMUX(GMI_AD15,        RSVD1,           PULL_UP,   NORMAL,     OUTPUT),
index f078cc3..10281c8 100644 (file)
@@ -35,6 +35,7 @@
 #include <linux/tegra_uart.h>
 #include <linux/memblock.h>
 #include <linux/spi-tegra.h>
+#include <linux/nfc/pn544.h>
 #include <linux/skbuff.h>
 #include <linux/ti_wilink_st.h>
 #include <linux/regulator/consumer.h>
@@ -203,6 +204,20 @@ static __initdata struct tegra_clk_init_table kai_clk_init_table[] = {
        { NULL,         NULL,           0,              0},
 };
 
+static struct pn544_i2c_platform_data nfc_pdata = {
+       .irq_gpio = TEGRA_GPIO_PX0,
+       .ven_gpio = TEGRA_GPIO_PS7,
+       .firm_gpio = TEGRA_GPIO_PR3,
+};
+
+static struct i2c_board_info __initdata kai_nfc_board_info[] = {
+       {
+               I2C_BOARD_INFO("pn544", 0x28),
+               .platform_data = &nfc_pdata,
+               .irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_PX0),
+       },
+};
+
 static struct tegra_i2c_platform_data kai_i2c1_platform_data = {
        .adapter_nr     = 0,
        .bus_count      = 1,
@@ -331,6 +346,8 @@ static void kai_i2c_init(void)
 
        i2c_register_board_info(4, kai_i2c4_max17048_board_info,
                ARRAY_SIZE(kai_i2c4_max17048_board_info));
+
+       i2c_register_board_info(0, kai_nfc_board_info, 1);
 }
 
 static struct platform_device *kai_uart_devices[] __initdata = {
@@ -776,6 +793,13 @@ static void kai_audio_init(void)
        }
 }
 
+static void kai_nfc_init(void)
+{
+       tegra_gpio_enable(TEGRA_GPIO_PX0);
+       tegra_gpio_enable(TEGRA_GPIO_PP3);
+       tegra_gpio_enable(TEGRA_GPIO_PO7);
+}
+
 static void __init tegra_kai_init(void)
 {
        tegra_thermal_init(&thermal_data);
@@ -799,6 +823,7 @@ static void __init tegra_kai_init(void)
        kai_keys_init();
        kai_panel_init();
        kai_bt_st();
+       kai_nfc_init();
        kai_sensors_init();
        kai_pins_state_init();
        tegra_release_bootloader_fb();