},
};
-static int __init harmony_init_panel(void) {
- int ret;
-
- if (!machine_is_harmony())
- return 0;
-
- ret = platform_device_register(&tegra_fb_device);
- if (ret != 0)
- return ret;
-
- return 0;
+int __init harmony_panel_init(void) {
+ return platform_device_register(&tegra_fb_device);
}
-device_initcall(harmony_init_panel);
-
*/
#include <linux/kernel.h>
+#include <linux/init.h>
#include <mach/pinmux.h>
#include "board-harmony.h"
-static struct tegra_pingroup_config harmony_pinmux[] = {
+static __initdata struct tegra_pingroup_config harmony_pinmux[] = {
{TEGRA_PINGROUP_ATA, TEGRA_MUX_IDE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
{TEGRA_PINGROUP_ATB, TEGRA_MUX_SDIO4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
{TEGRA_PINGROUP_ATC, TEGRA_MUX_NAND, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
{TEGRA_PINGROUP_DAP3, TEGRA_MUX_DAP3, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
{TEGRA_PINGROUP_DAP4, TEGRA_MUX_DAP4, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
{TEGRA_PINGROUP_DDC, TEGRA_MUX_I2C2, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL},
- {TEGRA_PINGROUP_DTA, TEGRA_MUX_SDIO2, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE},
- {TEGRA_PINGROUP_DTB, TEGRA_MUX_RSVD1, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_DTA, TEGRA_MUX_SDIO2, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL},
+ {TEGRA_PINGROUP_DTB, TEGRA_MUX_RSVD1, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
{TEGRA_PINGROUP_DTC, TEGRA_MUX_RSVD1, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
- {TEGRA_PINGROUP_DTD, TEGRA_MUX_SDIO2, TEGRA_PUPD_PULL_UP, TEGRA_TRI_TRISTATE},
+ {TEGRA_PINGROUP_DTD, TEGRA_MUX_SDIO2, TEGRA_PUPD_PULL_UP, TEGRA_TRI_NORMAL},
{TEGRA_PINGROUP_DTE, TEGRA_MUX_RSVD1, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
{TEGRA_PINGROUP_DTF, TEGRA_MUX_I2C3, TEGRA_PUPD_NORMAL, TEGRA_TRI_TRISTATE},
{TEGRA_PINGROUP_GMA, TEGRA_MUX_SDIO4, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
{TEGRA_PINGROUP_XM2D, TEGRA_MUX_NONE, TEGRA_PUPD_NORMAL, TEGRA_TRI_NORMAL},
};
-void harmony_pinmux_init(void)
+void __init harmony_pinmux_init(void)
{
tegra_pinmux_config_table(harmony_pinmux, ARRAY_SIZE(harmony_pinmux));
}
#include "gpio-names.h"
-/*static struct resource sdhci_resource1[] = {
- [0] = {
- .start = INT_SDMMC1,
- .end = INT_SDMMC1,
- .flags = IORESOURCE_IRQ,
- },
- [1] = {
- .start = TEGRA_SDMMC1_BASE,
- .end = TEGRA_SDMMC1_BASE + TEGRA_SDMMC1_SIZE-1,
- .flags = IORESOURCE_MEM,
- },
-};*/
-
static struct resource sdhci_resource2[] = {
[0] = {
.start = INT_SDMMC2,
},
};
-/*static struct resource sdhci_resource3[] = {
- [0] = {
- .start = INT_SDMMC3,
- .end = INT_SDMMC3,
- .flags = IORESOURCE_IRQ,
- },
- [1] = {
- .start = TEGRA_SDMMC3_BASE,
- .end = TEGRA_SDMMC3_BASE + TEGRA_SDMMC3_SIZE-1,
- .flags = IORESOURCE_MEM,
- },
-};*/
-
static struct resource sdhci_resource4[] = {
[0] = {
.start = INT_SDMMC4,
},
};
-/*static struct tegra_sdhci_platform_data tegra_sdhci_platform_data1 = {
- .clk_id = NULL,
- .force_hs = 0,
-};*/
-
static struct tegra_sdhci_platform_data tegra_sdhci_platform_data2 = {
.clk_id = NULL,
.force_hs = 1,
.power_gpio = TEGRA_GPIO_PT3,
};
-/*static struct tegra_sdhci_platform_data tegra_sdhci_platform_data3 = {
- .clk_id = NULL,
- .force_hs = 0,
-};*/
-
static struct tegra_sdhci_platform_data tegra_sdhci_platform_data4 = {
.clk_id = NULL,
.force_hs = 0,
.power_gpio = TEGRA_GPIO_PI6,
};
-/*static struct platform_device tegra_sdhci_device1 = {
- .name = "sdhci-tegra",
- .id = 0,
- .resource = sdhci_resource1,
- .num_resources = ARRAY_SIZE(sdhci_resource1),
- .dev = {
- .platform_data = &tegra_sdhci_platform_data1,
- },
-};*/
-
static struct platform_device tegra_sdhci_device2 = {
.name = "sdhci-tegra",
.id = 1,
},
};
-/*static struct platform_device tegra_sdhci_device3 = {
- .name = "sdhci-tegra",
- .id = 2,
- .resource = sdhci_resource3,
- .num_resources = ARRAY_SIZE(sdhci_resource3),
- .dev = {
- .platform_data = &tegra_sdhci_platform_data3,
- },
-};*/
-
static struct platform_device tegra_sdhci_device4 = {
.name = "sdhci-tegra",
.id = 3,
},
};
-static int __init harmony_init_sdhci(void)
+int __init harmony_sdhci_init(void)
{
- int ret;
-
- if (!machine_is_harmony())
- return 0;
-
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_DTA, TEGRA_TRI_NORMAL);
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_DTB, TEGRA_TRI_NORMAL);
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_DTD, TEGRA_TRI_NORMAL);
-
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_GMA, TEGRA_TRI_NORMAL);
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_GMB, TEGRA_TRI_NORMAL);
- tegra_pinmux_set_tristate(TEGRA_PINGROUP_ATB, TEGRA_TRI_NORMAL);
-
gpio_request(tegra_sdhci_platform_data2.power_gpio, "sdhci2_power");
gpio_request(tegra_sdhci_platform_data2.cd_gpio, "sdhci2_cd");
gpio_request(tegra_sdhci_platform_data2.wp_gpio, "sdhci2_wp");
gpio_direction_output(tegra_sdhci_platform_data2.power_gpio, 1);
gpio_direction_output(tegra_sdhci_platform_data4.power_gpio, 1);
- /*ret = platform_device_register(&tegra_sdhci_device1);*/
- ret = platform_device_register(&tegra_sdhci_device2);
- /*ret = platform_device_register(&tegra_sdhci_device3);*/
- ret = platform_device_register(&tegra_sdhci_device4);
- if (ret != 0)
- return ret;
+ platform_device_register(&tegra_sdhci_device2);
+ platform_device_register(&tegra_sdhci_device4);
return 0;
}
-
-device_initcall(harmony_init_sdhci);
-
#include "board.h"
#include "board-harmony.h"
#include "clock.h"
+#include "devices.h"
/* NVidia bootloader tags */
#define ATAG_NVIDIA 0x41000801
&tegra_nand_device,
&tegra_otg,
&pda_power_device,
+ &tegra_i2c_device1,
+ &tegra_i2c_device2,
+ &tegra_i2c_device3,
+ &tegra_i2c_device4,
+ &tegra_spi_device1,
+ &tegra_spi_device2,
+ &tegra_spi_device3,
+ &tegra_spi_device4,
};
static void __init tegra_harmony_fixup(struct machine_desc *desc,
harmony_pinmux_init();
platform_add_devices(harmony_devices, ARRAY_SIZE(harmony_devices));
+
+ harmony_panel_init();
+ harmony_sdhci_init();
}
MACHINE_START(HARMONY, "harmony")
#define _MACH_TEGRA_BOARD_HARMONY_H
void harmony_pinmux_init(void);
+int harmony_panel_init(void);
+int harmony_sdhci_init(void);
#endif