static void __init netxbig_v2_init(void) { kirkwood_init(); if (machine_is_net2big_v2()) kirkwood_mpp_conf(net2big_v2_mpp_config); else kirkwood_mpp_conf(net5big_v2_mpp_config); if (machine_is_net2big_v2()) lacie_v2_hdd_power_init(2); else lacie_v2_hdd_power_init(5); kirkwood_ehci_init(); kirkwood_ge00_init(&netxbig_v2_ge00_data); if (machine_is_net5big_v2()) kirkwood_ge01_init(&netxbig_v2_ge01_data); kirkwood_sata_init(&netxbig_v2_sata_data); kirkwood_uart0_init(); lacie_v2_register_flash(); lacie_v2_register_i2c_devices(); if (machine_is_net5big_v2()) netxbig_v2_leds.dev.platform_data = &net5big_v2_leds_data; platform_device_register(&netxbig_v2_leds); platform_device_register(&netxbig_v2_gpio_buttons); if (gpio_request(NETXBIG_V2_GPIO_POWER_OFF, "power-off") == 0 && gpio_direction_output(NETXBIG_V2_GPIO_POWER_OFF, 0) == 0) pm_power_off = netxbig_v2_power_off; else pr_err("netxbig_v2: failed to configure power-off GPIO\n"); }
int do_spi_toggle(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { u32 tmp; if (argc < 2) return cmd_usage(cmdtp); if ((strcmp(argv[1], "off") == 0)) { printf("SPI FLASH disabled, NAND enabled\n"); /* Multi-Purpose Pins Functionality configuration */ kwmpp_config[0] = MPP0_NF_IO2; kwmpp_config[1] = MPP1_NF_IO3; kwmpp_config[2] = MPP2_NF_IO4; kwmpp_config[3] = MPP3_NF_IO5; kirkwood_mpp_conf(kwmpp_config); tmp = readl(KW_GPIO0_BASE); writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE); } else if ((strcmp(argv[1], "on") == 0)) { printf("SPI FLASH enabled, NAND disabled\n"); /* Multi-Purpose Pins Functionality configuration */ kwmpp_config[0] = MPP0_SPI_SCn; kwmpp_config[1] = MPP1_SPI_MOSI; kwmpp_config[2] = MPP2_SPI_SCK; kwmpp_config[3] = MPP3_SPI_MISO; kirkwood_mpp_conf(kwmpp_config); tmp = readl(KW_GPIO0_BASE); writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE); } else { return cmd_usage(cmdtp); } return 0; }
static void __init sheevaplug_init(void) { /* * Basic setup. Needs to be called early. */ kirkwood_init(); /* setup gpio pin select */ if (machine_is_esata_sheevaplug()) kirkwood_mpp_conf(sheeva_esata_mpp_config); else kirkwood_mpp_conf(sheevaplug_mpp_config); kirkwood_uart0_init(); kirkwood_nand_init(ARRAY_AND_SIZE(sheevaplug_nand_parts), 25); if (gpio_request(29, "USB Power Enable") != 0 || gpio_direction_output(29, 1) != 0) printk(KERN_ERR "can't set up GPIO 29 (USB Power Enable)\n"); kirkwood_ehci_init(); kirkwood_ge00_init(&sheevaplug_ge00_data); /* honor lower power consumption for plugs with out eSATA */ if (machine_is_esata_sheevaplug()) kirkwood_sata_init(&sheeva_esata_sata_data); /* enable sd wp and sd cd on plugs with esata */ if (machine_is_esata_sheevaplug()) kirkwood_sdio_init(&sheeva_esata_mvsdio_data); else kirkwood_sdio_init(&sheevaplug_mvsdio_data); platform_device_register(&sheevaplug_leds); }
static void __init qnap_ts219_init(void) { u32 dev, rev; /* * Basic setup. Needs to be called early. */ kirkwood_init(); kirkwood_mpp_conf(qnap_ts219_mpp_config); kirkwood_uart0_init(); kirkwood_uart1_init(); /* A PIC controller is connected here. */ qnap_tsx1x_register_flash(); kirkwood_i2c_init(); i2c_register_board_info(0, &qnap_ts219_i2c_rtc, 1); kirkwood_pcie_id(&dev, &rev); if (dev == MV88F6282_DEV_ID) { qnap_ts219_buttons[0].gpio = 43; /* USB Copy button */ qnap_ts219_buttons[1].gpio = 37; /* Reset button */ qnap_ts219_ge00_data.phy_addr = MV643XX_ETH_PHY_ADDR(0); } kirkwood_ge00_init(&qnap_ts219_ge00_data); kirkwood_sata_init(&qnap_ts219_sata_data); kirkwood_ehci_init(); platform_device_register(&qnap_ts219_button_device); pm_power_off = qnap_tsx1x_power_off; }
static void __init rd88f6281_init(void) { u32 dev, rev; kirkwood_init(); kirkwood_mpp_conf(rd88f6281_mpp_config); kirkwood_nand_init(ARRAY_AND_SIZE(rd88f6281_nand_parts), 25); kirkwood_ehci_init(); kirkwood_ge00_init(&rd88f6281_ge00_data); kirkwood_pcie_id(&dev, &rev); if (rev == MV88F6281_REV_A0) { rd88f6281_switch_chip_data.sw_addr = 10; kirkwood_ge01_init(&rd88f6281_ge01_data); } else { rd88f6281_switch_chip_data.port_names[4] = "wan"; } kirkwood_ge00_switch_init(&rd88f6281_switch_plat_data, NO_IRQ); kirkwood_sata_init(&rd88f6281_sata_data); kirkwood_sdio_init(&rd88f6281_mvsdio_data); kirkwood_uart0_init(); }
void __init iconnect_init(void) { kirkwood_mpp_conf(iconnect_mpp_config); kirkwood_ehci_init(); kirkwood_ge00_init(&iconnect_ge00_data); }
int spi_claim_bus(struct spi_slave *slave) { #if defined(CONFIG_SYS_KW_SPI_MPP) u32 config; u32 spi_mpp_config[4]; config = CONFIG_SYS_KW_SPI_MPP; if (config & MOSI_MPP6) spi_mpp_config[0] = MPP6_SPI_MOSI; else spi_mpp_config[0] = MPP1_SPI_MOSI; if (config & SCK_MPP10) spi_mpp_config[1] = MPP10_SPI_SCK; else spi_mpp_config[1] = MPP2_SPI_SCK; if (config & MISO_MPP11) spi_mpp_config[2] = MPP11_SPI_MISO; else spi_mpp_config[2] = MPP3_SPI_MISO; spi_mpp_config[3] = 0; spi_mpp_backup[3] = 0; /* set new spi mpp and save current mpp config */ kirkwood_mpp_conf(spi_mpp_config, spi_mpp_backup); #endif return board_spi_claim_bus(slave); }
static void __init rd88f6281_init(void) { u32 dev, rev; /* * Basic setup. Needs to be called early. */ kirkwood_init(); kirkwood_mpp_conf(rd88f6281_mpp_config); kirkwood_nand_init(ARRAY_AND_SIZE(rd88f6281_nand_parts), 25); kirkwood_ehci_init(); kirkwood_ge00_init(&rd88f6281_ge00_data); kirkwood_pcie_id(&dev, &rev); if (rev == MV88F6281_REV_A0) { rd88f6281_switch_chip_data.sw_addr = 10; kirkwood_ge01_init(&rd88f6281_ge01_data); } else { rd88f6281_switch_chip_data.port_names[4] = "wan"; } kirkwood_ge00_switch_init(&rd88f6281_switch_plat_data, NO_IRQ); kirkwood_sata_init(&rd88f6281_sata_data); kirkwood_sdio_init(&rd88f6281_mvsdio_data); kirkwood_uart0_init(); kirkwood_uart1_init(); kirkwood_i2c_init(); i2c_register_board_info(0, &i2c_a2d, 1); kirkwood_i2s_init(); }
static void __init netspace_v2_init(void) { /* * Basic setup. Needs to be called early. */ kirkwood_init(); kirkwood_mpp_conf(netspace_v2_mpp_config); if (machine_is_netspace_max_v2()) lacie_v2_hdd_power_init(2); else lacie_v2_hdd_power_init(1); kirkwood_ehci_init(); kirkwood_ge00_init(&netspace_v2_ge00_data); kirkwood_sata_init(&netspace_v2_sata_data); kirkwood_uart0_init(); lacie_v2_register_flash(); lacie_v2_register_i2c_devices(); platform_device_register(&netspace_v2_leds); platform_device_register(&netspace_v2_gpio_leds); platform_device_register(&netspace_v2_gpio_buttons); if (machine_is_netspace_max_v2()) platform_device_register(&netspace_max_v2_gpio_fan); if (gpio_request(NETSPACE_V2_GPIO_POWER_OFF, "power-off") == 0 && gpio_direction_output(NETSPACE_V2_GPIO_POWER_OFF, 0) == 0) pm_power_off = netspace_v2_power_off; else pr_err("netspace_v2: failed to configure power-off GPIO\n"); }
static void __init netspace_v2_init(void) { /* * Basic setup. Needs to be called early. */ kirkwood_init(); kirkwood_mpp_conf(netspace_v2_mpp_config); netspace_v2_sata_power_init(); kirkwood_ehci_init(); kirkwood_ge00_init(&netspace_v2_ge00_data); kirkwood_sata_init(&netspace_v2_sata_data); kirkwood_uart0_init(); spi_register_board_info(netspace_v2_spi_slave_info, ARRAY_SIZE(netspace_v2_spi_slave_info)); kirkwood_spi_init(); kirkwood_i2c_init(); i2c_register_board_info(0, netspace_v2_i2c_info, ARRAY_SIZE(netspace_v2_i2c_info)); netspace_v2_gpio_leds_init(); platform_device_register(&netspace_v2_gpio_buttons); if (gpio_request(NETSPACE_V2_GPIO_POWER_OFF, "power-off") == 0 && gpio_direction_output(NETSPACE_V2_GPIO_POWER_OFF, 0) == 0) pm_power_off = netspace_v2_power_off; else pr_err("netspace_v2: failed to configure power-off GPIO\n"); }
static void __init hp_t5325_init(void) { /* * Basic setup. Needs to be called early. */ kirkwood_init(); kirkwood_mpp_conf(hp_t5325_mpp_config); kirkwood_uart0_init(); spi_register_board_info(hp_t5325_spi_slave_info, ARRAY_SIZE(hp_t5325_spi_slave_info)); kirkwood_spi_init(); kirkwood_i2c_init(); kirkwood_ge00_init(&hp_t5325_ge00_data); kirkwood_sata_init(&hp_t5325_sata_data); kirkwood_ehci_init(); platform_device_register(&hp_t5325_button_device); i2c_register_board_info(0, i2c_board_info, ARRAY_SIZE(i2c_board_info)); kirkwood_audio_init(); if (gpio_request(HP_T5325_GPIO_POWER_OFF, "power-off") == 0 && gpio_direction_output(HP_T5325_GPIO_POWER_OFF, 0) == 0) pm_power_off = hp_t5325_power_off; else pr_err("t5325: failed to configure power-off GPIO\n"); }
static void __init qnap_ts41x_init(void) { u32 dev, rev; /* * Basic setup. Needs to be called early. */ kirkwood_init(); kirkwood_mpp_conf(qnap_ts41x_mpp_config); kirkwood_uart0_init(); kirkwood_uart1_init(); /* A PIC controller is connected here. */ qnap_tsx1x_register_flash(); kirkwood_i2c_init(); i2c_register_board_info(0, &qnap_ts41x_i2c_rtc, 1); kirkwood_pcie_id(&dev, &rev); if (dev == MV88F6282_DEV_ID) { qnap_ts41x_ge00_data.phy_addr = MV643XX_ETH_PHY_ADDR(0); qnap_ts41x_ge01_data.phy_addr = MV643XX_ETH_PHY_ADDR(1); } kirkwood_ge00_init(&qnap_ts41x_ge00_data); kirkwood_ge01_init(&qnap_ts41x_ge01_data); kirkwood_sata_init(&qnap_ts41x_sata_data); kirkwood_ehci_init(); platform_device_register(&qnap_ts41x_button_device); pm_power_off = qnap_tsx1x_power_off; if (gpio_request(QNAP_TS41X_JUMPER_JP1, "JP1") == 0) gpio_export(QNAP_TS41X_JUMPER_JP1, 0); }
static void __init nsa320_init(void) { /* * Basic setup. Needs to be called early. */ kirkwood_init(); kirkwood_mpp_conf(nsa320_mpp_config); kirkwood_uart0_init(); kirkwood_nand_init(ARRAY_AND_SIZE(nsa320_nand_parts), 40); kirkwood_i2c_init(); i2c_register_board_info(0, &nsa320_i2c_rtc, 1); if (gpio_request(NSA320_GPIO_USB_POWER, "USB Power Enable") || gpio_direction_output(NSA320_GPIO_USB_POWER, usb_power)) pr_err("nsa320: failed to configure USB power enable GPIO)\n"); gpio_free(NSA320_GPIO_USB_POWER); kirkwood_ehci_init(); kirkwood_ge00_init(&nsa320_ge00_data); kirkwood_sata_init(&nsa320_sata_data); platform_device_register(&nsa320_leds); platform_device_register(&nsa320_buttons); platform_device_register(&nsa320_hwmon); if (gpio_request(NSA320_GPIO_POWER_OFF, "power-off") || gpio_direction_output(NSA320_GPIO_POWER_OFF, 0)) pr_err("nsa320: failed to configure power-off GPIO\n"); else pm_power_off = nsa320_power_off; }
int board_early_init_f(void) { u32 tmp; kirkwood_mpp_conf(kwmpp_config); /* * The FLASH_GPIO_PIN switches between using a * NAND or a SPI FLASH. Set this pin on start * to NAND mode. */ tmp = readl(KW_GPIO0_BASE); writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE); tmp = readl(KW_GPIO0_BASE + 4); writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE + 4); #if defined(CONFIG_SOFT_I2C) /* init the GPIO for I2C Bitbang driver */ kw_gpio_set_valid(KM_KIRKWOOD_SDA_PIN, 1); kw_gpio_set_valid(KM_KIRKWOOD_SCL_PIN, 1); kw_gpio_direction_output(KM_KIRKWOOD_SDA_PIN, 0); kw_gpio_direction_output(KM_KIRKWOOD_SCL_PIN, 0); #endif #if defined(CONFIG_SYS_EEPROM_WREN) kw_gpio_set_valid(KM_KIRKWOOD_ENV_WP, 38); kw_gpio_direction_output(KM_KIRKWOOD_ENV_WP, 1); #endif return 0; }
static void __init d2net_v2_init(void) { /* * Basic setup. Needs to be called early. */ kirkwood_init(); kirkwood_mpp_conf(d2net_v2_mpp_config); lacie_v2_hdd_power_init(1); kirkwood_ehci_init(); kirkwood_ge00_init(&d2net_v2_ge00_data); kirkwood_sata_init(&d2net_v2_sata_data); kirkwood_uart0_init(); lacie_v2_register_flash(); lacie_v2_register_i2c_devices(); platform_device_register(&d2net_v2_leds); platform_device_register(&d2net_v2_gpio_leds); platform_device_register(&d2net_v2_gpio_buttons); if (gpio_request(D2NET_V2_GPIO_POWER_OFF, "power-off") == 0 && gpio_direction_output(D2NET_V2_GPIO_POWER_OFF, 0) == 0) pm_power_off = d2net_v2_power_off; else pr_err("d2net_v2: failed to configure power-off GPIO\n"); }
static void __init iconnect_init(void) { u32 dev, rev; /* * Basic setup. Needs to be called early. */ kirkwood_init(); kirkwood_mpp_conf(iconnect_mpp_config); kirkwood_nand_init(ARRAY_AND_SIZE(iconnect_nand_parts), 25); kirkwood_ehci_init(); kirkwood_ge00_init(&iconnect_ge00_data); kirkwood_pcie_id(&dev, &rev); kirkwood_uart0_init(); platform_device_register(&iconnect_leds); platform_device_register(&iconnect_button_device); kirkwood_i2c_init(); i2c_register_board_info(0, &iconnect_i2c_rtc, 1); }
void spi_free_slave(struct spi_slave *slave) { #ifdef CONFIG_KIRKWOOD kirkwood_mpp_conf(cs_spi_mpp_back, NULL); #endif free(slave); }
static int __init uart1_mpp_config(void) { kirkwood_mpp_conf(openrd_uart1_mpp_config); if (gpio_request(34, "SD_UART1_SEL")) { printk(KERN_ERR "GPIO request failed for SD/UART1 selection" ", gpio: 34\n"); return -EIO; } if (gpio_request(28, "RS232_RS485_SEL")) { printk(KERN_ERR "GPIO request failed for RS232/RS485 selection" ", gpio# 28\n"); gpio_free(34); return -EIO; } /* Select UART1 * Pin # 34: 0 => UART1, 1 => SD */ gpio_direction_output(34, 0); /* Select RS232 OR RS485 * Pin # 28: 0 => RS232, 1 => RS485 */ if (uart1 == 232) gpio_direction_output(28, 0); else gpio_direction_output(28, 1); gpio_free(34); gpio_free(28); return 0; }
void __init openblocks_a6_init(void) { /* * Basic setup. Needs to be called early. */ kirkwood_mpp_conf(openblocks_a6_mpp_config); kirkwood_ge00_init(&openblocks_ge00_data); }
void spi_release_bus(struct spi_slave *slave) { #if defined(CONFIG_SYS_KW_SPI_MPP) kirkwood_mpp_conf(spi_mpp_backup, NULL); #endif board_spi_release_bus(slave); }
static void __init openrd_init(void) { /* * Basic setup. Needs to be called early. */ kirkwood_init(); kirkwood_mpp_conf(openrd_mpp_config); kirkwood_uart0_init(); kirkwood_nand_init(ARRAY_AND_SIZE(openrd_nand_parts), 25); kirkwood_ehci_init(); if (machine_is_openrd_ultimate()) { openrd_ge00_data.phy_addr = MV643XX_ETH_PHY_ADDR(0); openrd_ge01_data.phy_addr = MV643XX_ETH_PHY_ADDR(1); } kirkwood_ge00_init(&openrd_ge00_data); if (!machine_is_openrd_base()) kirkwood_ge01_init(&openrd_ge01_data); kirkwood_sata_init(&openrd_sata_data); kirkwood_i2c_init(); if (machine_is_openrd_client() || machine_is_openrd_ultimate()) { platform_device_register(&openrd_client_audio_device); i2c_register_board_info(0, i2c_board_info, ARRAY_SIZE(i2c_board_info)); kirkwood_audio_init(); } if (uart1 <= 0) { if (uart1 < 0) printk(KERN_ERR "Invalid kernel parameter to select " "UART1. Defaulting to SD. ERROR CODE: %d\n", uart1); /* Select SD * Pin # 34: 0 => UART1, 1 => SD */ if (gpio_request(34, "SD_UART1_SEL")) { printk(KERN_ERR "GPIO request failed for SD/UART1 " "selection, gpio: 34\n"); } else { gpio_direction_output(34, 1); gpio_free(34); kirkwood_sdio_init(&openrd_mvsdio_data); } } else { if (!uart1_mpp_config()) kirkwood_uart1_init(); } }
void __init mplcec4_init(void) { /* * Basic setup. Needs to be called early. */ kirkwood_mpp_conf(mplcec4_mpp_config); kirkwood_ehci_init(); kirkwood_ge00_init(&mplcec4_ge00_data); kirkwood_ge01_init(&mplcec4_ge01_data); kirkwood_sdio_init(&mplcec4_mvsdio_data); kirkwood_pcie_init(KW_PCIE0); }
void __init dreamplug_init(void) { /* * Basic setup. Needs to be called early. */ kirkwood_mpp_conf(dreamplug_mpp_config); kirkwood_ehci_init(); kirkwood_ge00_init(&dreamplug_ge00_data); kirkwood_ge01_init(&dreamplug_ge01_data); kirkwood_sdio_init(&dreamplug_mvsdio_data); }
static void __init nsa310_init(void) { u32 dev, rev; kirkwood_init(); kirkwood_mpp_conf(nsa310_mpp_config); kirkwood_nand_init(ARRAY_AND_SIZE(nsa310_nand_parts), 40); kirkwood_pcie_id(&dev, &rev); kirkwood_sata_init(&nsa310_sata_data); kirkwood_uart0_init(); kirkwood_i2c_init(); platform_device_register(&nsa310_leds); platform_device_register(&nsa310_buttons); kirkwood_ehci_init(); // USB Power delay for 20 sec timer.function = nsa310_timerfunc; timer.data = 0; timer.expires = jiffies + msecs_to_jiffies(20000); add_timer(&timer); /* Power resume control */ gpio_request(49, "Power-clk"); gpio_direction_output(49, 1); gpio_request(47, "Power-data"); // Clear power resume // gpio_direction_output(47, 0); // Set power resume gpio_direction_output(47, 1); udelay(1000); // gpio_direction_output(49, 0); gpio_set_value(49, 0); // release GPIO? //test gpio_free(47); gpio_free(49); printk(KERN_INFO "NSA310: Power resume enabled\n"); // Activate Power-off GPIO if (gpio_request(48, "Power-off") == 0 && gpio_direction_output(48, 0) == 0) { // gpio_free(48); pm_power_off = nsa310_power_off; printk(KERN_INFO "NSA310: Power-off GPIO enabled\n"); } else printk(KERN_ERR "NSA310: Failed to configure Power-off GPIO\n"); };
int board_early_init_f(void) { /* * default gpio configuration */ mvebu_config_gpio(NAS220_GE_OE_VAL_LOW, NAS220_GE_OE_VAL_HIGH, NAS220_GE_OE_LOW, NAS220_GE_OE_HIGH); /* Multi-Purpose Pins Functionality configuration */ static const u32 kwmpp_config[] = { MPP0_NF_IO2, MPP1_NF_IO3, MPP2_NF_IO4, MPP3_NF_IO5, MPP4_NF_IO6, MPP5_NF_IO7, MPP6_SYSRST_OUTn, MPP7_SPI_SCn, MPP8_TW_SDA, MPP9_TW_SCK, MPP10_UART0_TXD, MPP11_UART0_RXD, MPP12_GPO, MPP13_GPIO, MPP14_GPIO, MPP15_SATA0_ACTn, MPP16_SATA1_ACTn, MPP17_SATA0_PRESENTn, MPP18_NF_IO0, MPP19_NF_IO1, MPP20_GPIO, MPP21_GPIO, MPP22_GPIO, MPP23_GPIO, MPP24_GPIO, MPP25_GPIO, MPP26_GPIO, MPP27_GPIO, MPP28_GPIO, MPP29_GPIO, MPP30_GPIO, MPP31_GPIO, MPP32_GPIO, MPP33_GPIO, MPP34_GPIO, MPP35_GPIO, 0 }; kirkwood_mpp_conf(kwmpp_config, NULL); return 0; }
int board_early_init_f(void) { #if defined(CONFIG_SOFT_I2C) u32 tmp; /* set the 2 bitbang i2c pins as output gpios */ tmp = readl(KW_GPIO0_BASE + 4); writel(tmp & (~KM_KIRKWOOD_SOFT_I2C_GPIOS) , KW_GPIO0_BASE + 4); #endif /* adjust SDRAM size for bank 0 */ kw_sdram_size_adjust(0); kirkwood_mpp_conf(kwmpp_config, NULL); return 0; }
void __init dockstar_dt_init(void) { /* * Basic setup. Needs to be called early. */ kirkwood_mpp_conf(dockstar_mpp_config); if (gpio_request(29, "USB Power Enable") != 0 || gpio_direction_output(29, 1) != 0) pr_err("can't setup GPIO 29 (USB Power Enable)\n"); kirkwood_ehci_init(); kirkwood_ge00_init(&dockstar_ge00_data); }
void __init qnap_dt_ts219_init(void) { u32 dev, rev; kirkwood_mpp_conf(qnap_ts219_mpp_config); kirkwood_pcie_id(&dev, &rev); if (dev == MV88F6282_DEV_ID) qnap_ts219_ge00_data.phy_addr = MV643XX_ETH_PHY_ADDR(0); kirkwood_ge00_init(&qnap_ts219_ge00_data); kirkwood_ehci_init(); pm_power_off = qnap_tsx1x_power_off; }
static void __init db88f6281_init(void) { /* * Basic setup. Needs to be called early. */ kirkwood_init(); kirkwood_mpp_conf(db88f6281_mpp_config); kirkwood_nand_init(ARRAY_AND_SIZE(db88f6281_nand_parts), 25); kirkwood_ehci_init(); kirkwood_ge00_init(&db88f6281_ge00_data); kirkwood_sata_init(&db88f6281_sata_data); kirkwood_uart0_init(); kirkwood_sdio_init(&db88f6281_mvsdio_data); }
void kw_nand_select_chip(struct mtd_info *mtd, int chip) { u32 data; static const u32 nand_config[] = { MPP0_NF_IO2, MPP1_NF_IO3, MPP2_NF_IO4, MPP3_NF_IO5, MPP4_NF_IO6, MPP5_NF_IO7, MPP18_NF_IO0, MPP19_NF_IO1, 0 }; if (chip >= 0) kirkwood_mpp_conf(nand_config, nand_mpp_backup); else kirkwood_mpp_conf(nand_mpp_backup, NULL); data = readl(&nf_reg->ctrl); data |= NAND_ACTCEBOOT_BIT; writel(data, &nf_reg->ctrl); }