|
@@ -127,3 +127,171 @@ static void __init igep2_get_revision(void)
|
|
|
/* NAND04GR4E1A ( x2 Flash built-in COMBO POP MEMORY )
|
|
|
* Since the device is equipped with two DataRAMs, and two-plane NAND
|
|
|
* Flash memory array, these two component enables simultaneous program
|
|
|
+ * of 4KiB. Plane1 has only even blocks such as block0, block2, block4
|
|
|
+ * while Plane2 has only odd blocks such as block1, block3, block5.
|
|
|
+ * So MTD regards it as 4KiB page size and 256KiB block size 64*(2*2048)
|
|
|
+ */
|
|
|
+
|
|
|
+static struct mtd_partition igep_flash_partitions[] = {
|
|
|
+ {
|
|
|
+ .name = "X-Loader",
|
|
|
+ .offset = 0,
|
|
|
+ .size = 2 * (64*(2*2048))
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "U-Boot",
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
+ .size = 6 * (64*(2*2048)),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "Environment",
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
+ .size = 2 * (64*(2*2048)),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "Kernel",
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
+ .size = 12 * (64*(2*2048)),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "File System",
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
+ .size = MTDPART_SIZ_FULL,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static inline u32 igep_get_sysboot_value(void)
|
|
|
+{
|
|
|
+ return omap_ctrl_readl(OMAP343X_CONTROL_STATUS) & IGEP_SYSBOOT_MASK;
|
|
|
+}
|
|
|
+
|
|
|
+static void __init igep_flash_init(void)
|
|
|
+{
|
|
|
+ u32 mux;
|
|
|
+ mux = igep_get_sysboot_value();
|
|
|
+
|
|
|
+ if (mux == IGEP_SYSBOOT_NAND) {
|
|
|
+ pr_info("IGEP: initializing NAND memory device\n");
|
|
|
+ board_nand_init(igep_flash_partitions,
|
|
|
+ ARRAY_SIZE(igep_flash_partitions),
|
|
|
+ 0, NAND_BUSWIDTH_16, nand_default_timings);
|
|
|
+ } else if (mux == IGEP_SYSBOOT_ONENAND) {
|
|
|
+ pr_info("IGEP: initializing OneNAND memory device\n");
|
|
|
+ board_onenand_init(igep_flash_partitions,
|
|
|
+ ARRAY_SIZE(igep_flash_partitions), 0);
|
|
|
+ } else {
|
|
|
+ pr_err("IGEP: Flash: unsupported sysboot sequence found\n");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#else
|
|
|
+static void __init igep_flash_init(void) {}
|
|
|
+#endif
|
|
|
+
|
|
|
+#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
|
|
|
+
|
|
|
+#include <linux/smsc911x.h>
|
|
|
+#include "gpmc-smsc911x.h"
|
|
|
+
|
|
|
+static struct omap_smsc911x_platform_data smsc911x_cfg = {
|
|
|
+ .cs = IGEP2_SMSC911X_CS,
|
|
|
+ .gpio_irq = IGEP2_SMSC911X_GPIO,
|
|
|
+ .gpio_reset = -EINVAL,
|
|
|
+ .flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
|
|
|
+};
|
|
|
+
|
|
|
+static inline void __init igep2_init_smsc911x(void)
|
|
|
+{
|
|
|
+ gpmc_smsc911x_init(&smsc911x_cfg);
|
|
|
+}
|
|
|
+
|
|
|
+#else
|
|
|
+static inline void __init igep2_init_smsc911x(void) { }
|
|
|
+#endif
|
|
|
+
|
|
|
+static struct regulator_consumer_supply igep_vmmc1_supply[] = {
|
|
|
+ REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
|
|
|
+};
|
|
|
+
|
|
|
+/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
|
|
|
+static struct regulator_init_data igep_vmmc1 = {
|
|
|
+ .constraints = {
|
|
|
+ .min_uV = 1850000,
|
|
|
+ .max_uV = 3150000,
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
|
|
+ | REGULATOR_CHANGE_MODE
|
|
|
+ | REGULATOR_CHANGE_STATUS,
|
|
|
+ },
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(igep_vmmc1_supply),
|
|
|
+ .consumer_supplies = igep_vmmc1_supply,
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_consumer_supply igep_vio_supply[] = {
|
|
|
+ REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.1"),
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data igep_vio = {
|
|
|
+ .constraints = {
|
|
|
+ .min_uV = 1800000,
|
|
|
+ .max_uV = 1800000,
|
|
|
+ .apply_uV = 1,
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
+ | REGULATOR_MODE_STANDBY,
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
|
|
+ | REGULATOR_CHANGE_MODE
|
|
|
+ | REGULATOR_CHANGE_STATUS,
|
|
|
+ },
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(igep_vio_supply),
|
|
|
+ .consumer_supplies = igep_vio_supply,
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_consumer_supply igep_vmmc2_supply[] = {
|
|
|
+ REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data igep_vmmc2 = {
|
|
|
+ .constraints = {
|
|
|
+ .valid_modes_mask = REGULATOR_MODE_NORMAL,
|
|
|
+ .always_on = 1,
|
|
|
+ },
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(igep_vmmc2_supply),
|
|
|
+ .consumer_supplies = igep_vmmc2_supply,
|
|
|
+};
|
|
|
+
|
|
|
+static struct fixed_voltage_config igep_vwlan = {
|
|
|
+ .supply_name = "vwlan",
|
|
|
+ .microvolts = 3300000,
|
|
|
+ .gpio = -EINVAL,
|
|
|
+ .enabled_at_boot = 1,
|
|
|
+ .init_data = &igep_vmmc2,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device igep_vwlan_device = {
|
|
|
+ .name = "reg-fixed-voltage",
|
|
|
+ .id = 0,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &igep_vwlan,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap2_hsmmc_info mmc[] = {
|
|
|
+ {
|
|
|
+ .mmc = 1,
|
|
|
+ .caps = MMC_CAP_4_BIT_DATA,
|
|
|
+ .gpio_cd = -EINVAL,
|
|
|
+ .gpio_wp = -EINVAL,
|
|
|
+ .deferred = true,
|
|
|
+ },
|
|
|
+#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
|
|
|
+ {
|
|
|
+ .mmc = 2,
|
|
|
+ .caps = MMC_CAP_4_BIT_DATA,
|
|
|
+ .gpio_cd = -EINVAL,
|
|
|
+ .gpio_wp = -EINVAL,
|
|
|
+ },
|
|
|
+#endif
|
|
|
+ {} /* Terminator */
|
|
|
+};
|
|
|
+
|