static void __init kurobox_pro_init(void) { orion5x_init(); orion5x_mpp_conf(kurobox_pro_mpp_modes); orion5x_ehci0_init(); orion5x_ehci1_init(); orion5x_eth_init(&kurobox_pro_eth_data); orion5x_i2c_init(); orion5x_sata_init(&kurobox_pro_sata_data); orion5x_uart0_init(); orion5x_uart1_init(); orion5x_xor_init(); orion5x_setup_dev_boot_win(KUROBOX_PRO_NOR_BOOT_BASE, KUROBOX_PRO_NOR_BOOT_SIZE); platform_device_register(&kurobox_pro_nor_flash); if (machine_is_kurobox_pro()) { orion5x_setup_dev0_win(KUROBOX_PRO_NAND_BASE, KUROBOX_PRO_NAND_SIZE); platform_device_register(&kurobox_pro_nand_flash); } i2c_register_board_info(0, &kurobox_pro_i2c_rtc, 1); pm_power_off = kurobox_pro_power_off; }
static void __init wrt350n_v2_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(wrt350n_v2_mpp_modes); /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_eth_init(&wrt350n_v2_eth_data); orion5x_eth_switch_init(&wrt350n_v2_switch_plat_data); orion5x_uart0_init(); mvebu_mbus_add_window_by_id(ORION_MBUS_DEVBUS_BOOT_TARGET, ORION_MBUS_DEVBUS_BOOT_ATTR, WRT350N_V2_NOR_BOOT_BASE, WRT350N_V2_NOR_BOOT_SIZE); platform_device_register(&wrt350n_v2_nor_flash); platform_device_register(&wrt350n_v2_leds); platform_device_register(&wrt350n_v2_button_device); }
static void __init dt2_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(dt2_mpp_modes); /* * Configure peripherals. */ orion5x_uart0_init(); orion5x_ehci0_init(); orion5x_ehci1_init(); orion5x_i2c_init(); orion5x_sata_init(&dt2_sata_data); orion5x_xor_init(); printk(KERN_INFO "U-Boot parameters:\n"); printk(KERN_INFO "Sys Clk = %d, Tclk = %d, BoardID = 0x%02x\n", mvSysclk, mvTclk, gBoardId); printk(KERN_INFO "Serial: %s\n", dt2_eeprom.fc.dt2_serial_number); printk(KERN_INFO "Revision: %016x\n", dt2_eeprom.fc.dt2_revision); printk(KERN_INFO "DT2: Using MAC address %pM for port 0\n", dt2_eeprom.gw.mac_addr[0]); printk(KERN_INFO "DT2: Using MAC address %pM for port 1\n", dt2_eeprom.gw.mac_addr[1]); orion5x_eth_init(&dt2_eth_data); memcpy(dt2_eth_data.mac_addr, dt2_eeprom.gw.mac_addr[0], 6); orion5x_eth_switch_init(&dt2_switch_plat_data, NO_IRQ); i2c_register_board_info(0, &dt2_i2c_rtc, 1); mvebu_mbus_add_window("devbus-boot", DT2_NOR_BOOT_BASE, DT2_NOR_BOOT_SIZE); platform_device_register(&dt2_nor_flash); mvebu_mbus_add_window("devbus-cs0", DT2_LEDS_BASE, DT2_LEDS_SIZE); platform_device_register(&dt2_leds); if (request_irq(gpio_to_irq(DT2_PIN_GPIO_RESET), &dt2_reset_handler, IRQF_DISABLED | IRQF_TRIGGER_LOW, "DT2: Reset button", NULL) < 0) { printk("DT2: Reset Button IRQ %d not available\n", gpio_to_irq(DT2_PIN_GPIO_RESET)); } if (request_irq(gpio_to_irq(DT2_PIN_GPIO_POWER), &dt2_power_handler, IRQF_DISABLED | IRQF_TRIGGER_LOW, "DT2: Power button", NULL) < 0) { printk(KERN_DEBUG "DT2: Power Button IRQ %d not available\n", gpio_to_irq(DT2_PIN_GPIO_POWER)); } }
static void __init rd88f5181l_ge_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(rd88f5181l_ge_mpp_modes); /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_eth_init(&rd88f5181l_ge_eth_data); orion5x_eth_switch_init(&rd88f5181l_ge_switch_plat_data); orion5x_i2c_init(); orion5x_uart0_init(); mvebu_mbus_add_window_by_id(ORION_MBUS_DEVBUS_BOOT_TARGET, ORION_MBUS_DEVBUS_BOOT_ATTR, RD88F5181L_GE_NOR_BOOT_BASE, RD88F5181L_GE_NOR_BOOT_SIZE); platform_device_register(&rd88f5181l_ge_nor_boot_flash); i2c_register_board_info(0, &rd88f5181l_ge_i2c_rtc, 1); }
static void __init db88f5281_init(void) { orion5x_init(); orion5x_mpp_conf(db88f5281_mpp_modes); writel(0, MPP_DEV_CTRL); orion5x_ehci0_init(); orion5x_eth_init(&db88f5281_eth_data); orion5x_i2c_init(); orion5x_uart0_init(); orion5x_uart1_init(); orion5x_setup_dev_boot_win(DB88F5281_NOR_BOOT_BASE, DB88F5281_NOR_BOOT_SIZE); platform_device_register(&db88f5281_boot_flash); orion5x_setup_dev0_win(DB88F5281_7SEG_BASE, DB88F5281_7SEG_SIZE); orion5x_setup_dev1_win(DB88F5281_NOR_BASE, DB88F5281_NOR_SIZE); platform_device_register(&db88f5281_nor_flash); orion5x_setup_dev2_win(DB88F5281_NAND_BASE, DB88F5281_NAND_SIZE); platform_device_register(&db88f5281_nand_flash); i2c_register_board_info(0, &db88f5281_i2c_rtc, 1); }
static void __init rd88f5181l_ge_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(rd88f5181l_ge_mpp_modes); /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_eth_init(&rd88f5181l_ge_eth_data); orion5x_eth_switch_init(&rd88f5181l_ge_switch_plat_data, gpio_to_irq(8)); orion5x_i2c_init(); orion5x_uart0_init(); orion5x_setup_dev_boot_win(RD88F5181L_GE_NOR_BOOT_BASE, RD88F5181L_GE_NOR_BOOT_SIZE); platform_device_register(&rd88f5181l_ge_nor_boot_flash); i2c_register_board_info(0, &rd88f5181l_ge_i2c_rtc, 1); }
static void __init d2net_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(d2net_mpp_modes); /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_eth_init(&d2net_eth_data); orion5x_i2c_init(); orion5x_uart0_init(); d2net_sata_power_init(); orion5x_sata_init(&d2net_sata_data); orion5x_setup_dev_boot_win(D2NET_NOR_BOOT_BASE, D2NET_NOR_BOOT_SIZE); platform_device_register(&d2net_nor_flash); platform_device_register(&d2net_gpio_buttons); d2net_gpio_leds_init(); pr_notice("d2net: Flash write are not yet supported.\n"); i2c_register_board_info(0, d2net_i2c_devices, ARRAY_SIZE(d2net_i2c_devices)); orion_gpio_set_valid(D2NET_GPIO_INHIBIT_POWER_OFF, 1); }
static void __init db88f5281_init(void) { /* * Basic Orion setup. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(db88f5281_mpp_modes); writel(0, MPP_DEV_CTRL); /* DEV_D[31:16] */ /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_eth_init(&db88f5281_eth_data); orion5x_i2c_init(); orion5x_uart0_init(); orion5x_uart1_init(); orion5x_setup_dev_boot_win(DB88F5281_NOR_BOOT_BASE, DB88F5281_NOR_BOOT_SIZE); platform_device_register(&db88f5281_boot_flash); orion5x_setup_dev0_win(DB88F5281_7SEG_BASE, DB88F5281_7SEG_SIZE); orion5x_setup_dev1_win(DB88F5281_NOR_BASE, DB88F5281_NOR_SIZE); platform_device_register(&db88f5281_nor_flash); orion5x_setup_dev2_win(DB88F5281_NAND_BASE, DB88F5281_NAND_SIZE); platform_device_register(&db88f5281_nand_flash); i2c_register_board_info(0, &db88f5281_i2c_rtc, 1); }
static void __init dns323_init(void) { /* Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(dns323_mpp_modes); writel(0, MPP_DEV_CTRL); /* DEV_D[31:16] */ /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_eth_init(&dns323_eth_data); orion5x_i2c_init(); orion5x_uart0_init(); /* setup flash mapping * CS3 holds a 8 MB Spansion S29GL064M90TFIR4 */ orion5x_setup_dev_boot_win(DNS323_NOR_BOOT_BASE, DNS323_NOR_BOOT_SIZE); platform_device_register(&dns323_nor_flash); platform_device_register(&dns323_gpio_leds); platform_device_register(&dns323_button_device); i2c_register_board_info(0, dns323_i2c_devices, ARRAY_SIZE(dns323_i2c_devices)); /* register dns323 specific power-off method */ if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 || gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0) pr_err("DNS323: failed to setup power-off GPIO\n"); pm_power_off = dns323_power_off; }
static void __init qnap_ts209_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(ts209_mpp_modes); /* * MPP[20] PCI clock 0 * MPP[21] PCI clock 1 * MPP[22] USB 0 over current * MPP[23-25] Reserved */ /* * Configure peripherals. */ mvebu_mbus_add_window_by_id(ORION_MBUS_DEVBUS_BOOT_TARGET, ORION_MBUS_DEVBUS_BOOT_ATTR, QNAP_TS209_NOR_BOOT_BASE, QNAP_TS209_NOR_BOOT_SIZE); platform_device_register(&qnap_ts209_nor_flash); orion5x_ehci0_init(); orion5x_ehci1_init(); qnap_tsx09_find_mac_addr(QNAP_TS209_NOR_BOOT_BASE + qnap_ts209_partitions[5].offset, qnap_ts209_partitions[5].size); orion5x_eth_init(&qnap_tsx09_eth_data); orion5x_i2c_init(); orion5x_sata_init(&qnap_ts209_sata_data); orion5x_uart0_init(); orion5x_uart1_init(); orion5x_xor_init(); platform_device_register(&qnap_ts209_button_device); /* Get RTC IRQ and register the chip */ if (gpio_request(TS209_RTC_GPIO, "rtc") == 0) { if (gpio_direction_input(TS209_RTC_GPIO) == 0) qnap_ts209_i2c_rtc.irq = gpio_to_irq(TS209_RTC_GPIO); else gpio_free(TS209_RTC_GPIO); } if (qnap_ts209_i2c_rtc.irq == 0) pr_warning("qnap_ts209_init: failed to get RTC IRQ\n"); i2c_register_board_info(0, &qnap_ts209_i2c_rtc, 1); /* register tsx09 specific power-off method */ pm_power_off = qnap_tsx09_power_off; }
static void __init rd88f5181l_fxo_init(void) { orion5x_init(); orion5x_mpp_conf(rd88f5181l_fxo_mpp_modes); orion5x_ehci0_init(); orion5x_eth_init(&rd88f5181l_fxo_eth_data); orion5x_eth_switch_init(&rd88f5181l_fxo_switch_plat_data, NO_IRQ); orion5x_uart0_init(); orion5x_setup_dev_boot_win(RD88F5181L_FXO_NOR_BOOT_BASE, RD88F5181L_FXO_NOR_BOOT_SIZE); platform_device_register(&rd88f5181l_fxo_nor_boot_flash); }
static void __init rd88f6183ap_ge_init(void) { orion5x_init(); orion5x_ehci0_init(); orion5x_eth_init(&rd88f6183ap_ge_eth_data); orion5x_eth_switch_init(&rd88f6183ap_ge_switch_plat_data, gpio_to_irq(3)); spi_register_board_info(rd88f6183ap_ge_spi_slave_info, ARRAY_SIZE(rd88f6183ap_ge_spi_slave_info)); orion5x_spi_init(); orion5x_uart0_init(); }
static void __init wrt350n_v2_init(void) { orion5x_init(); orion5x_mpp_conf(wrt350n_v2_mpp_modes); orion5x_ehci0_init(); orion5x_eth_init(&wrt350n_v2_eth_data); orion5x_eth_switch_init(&wrt350n_v2_switch_plat_data, NO_IRQ); orion5x_uart0_init(); orion5x_setup_dev_boot_win(WRT350N_V2_NOR_BOOT_BASE, WRT350N_V2_NOR_BOOT_SIZE); platform_device_register(&wrt350n_v2_nor_flash); }
static void __init mss2_init(void) { /* Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(mss2_mpp_modes); /* * MPP[20] Unused * MPP[21] PCI clock * MPP[22] USB 0 over current * MPP[23] USB 1 over current */ /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_ehci1_init(); orion5x_eth_init(&mss2_eth_data); orion5x_i2c_init(); orion5x_sata_init(&mss2_sata_data); orion5x_uart0_init(); orion5x_xor_init(); mvebu_mbus_add_window_by_id(ORION_MBUS_DEVBUS_BOOT_TARGET, ORION_MBUS_DEVBUS_BOOT_ATTR, MSS2_NOR_BOOT_BASE, MSS2_NOR_BOOT_SIZE); platform_device_register(&mss2_nor_flash); platform_device_register(&mss2_button_device); if (gpio_request(MSS2_GPIO_RTC_IRQ, "rtc") == 0) { if (gpio_direction_input(MSS2_GPIO_RTC_IRQ) == 0) mss2_i2c_rtc.irq = gpio_to_irq(MSS2_GPIO_RTC_IRQ); else gpio_free(MSS2_GPIO_RTC_IRQ); } i2c_register_board_info(0, &mss2_i2c_rtc, 1); /* register mss2 specific power-off method */ pm_power_off = mss2_power_off; }
static void __init rd88f5181l_ge_init(void) { orion5x_init(); orion5x_mpp_conf(rd88f5181l_ge_mpp_modes); orion5x_ehci0_init(); orion5x_eth_init(&rd88f5181l_ge_eth_data); orion5x_eth_switch_init(&rd88f5181l_ge_switch_plat_data, gpio_to_irq(8)); orion5x_i2c_init(); orion5x_uart0_init(); orion5x_setup_dev_boot_win(RD88F5181L_GE_NOR_BOOT_BASE, RD88F5181L_GE_NOR_BOOT_SIZE); platform_device_register(&rd88f5181l_ge_nor_boot_flash); i2c_register_board_info(0, &rd88f5181l_ge_i2c_rtc, 1); }
static void __init rd88f6183ap_ge_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_eth_init(&rd88f6183ap_ge_eth_data); orion5x_eth_switch_init(&rd88f6183ap_ge_switch_plat_data, gpio_to_irq(3)); spi_register_board_info(rd88f6183ap_ge_spi_slave_info, ARRAY_SIZE(rd88f6183ap_ge_spi_slave_info)); orion5x_spi_init(); orion5x_uart0_init(); }
static void __init qnap_ts409_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(ts409_mpp_modes); /* * Configure peripherals. */ orion5x_setup_dev_boot_win(QNAP_TS409_NOR_BOOT_BASE, QNAP_TS409_NOR_BOOT_SIZE); platform_device_register(&qnap_ts409_nor_flash); orion5x_ehci0_init(); qnap_tsx09_find_mac_addr(QNAP_TS409_NOR_BOOT_BASE + qnap_ts409_partitions[5].offset, qnap_ts409_partitions[5].size); orion5x_eth_init(&qnap_tsx09_eth_data); orion5x_i2c_init(); orion5x_uart0_init(); orion5x_uart1_init(); platform_device_register(&qnap_ts409_button_device); /* Get RTC IRQ and register the chip */ if (gpio_request(TS409_RTC_GPIO, "rtc") == 0) { if (gpio_direction_input(TS409_RTC_GPIO) == 0) qnap_ts409_i2c_rtc.irq = gpio_to_irq(TS409_RTC_GPIO); else gpio_free(TS409_RTC_GPIO); } if (qnap_ts409_i2c_rtc.irq == 0) pr_warning("qnap_ts409_init: failed to get RTC IRQ\n"); i2c_register_board_info(0, &qnap_ts409_i2c_rtc, 1); platform_device_register(&ts409_leds); /* register tsx09 specific power-off method */ pm_power_off = qnap_tsx09_power_off; }
static void __init net2big_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(net2big_mpp_modes); /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_ehci1_init(); orion5x_eth_init(&net2big_eth_data); orion5x_i2c_init(); orion5x_uart0_init(); orion5x_xor_init(); net2big_sata_power_init(); orion5x_sata_init(&net2big_sata_data); orion5x_setup_dev_boot_win(NET2BIG_NOR_BOOT_BASE, NET2BIG_NOR_BOOT_SIZE); platform_device_register(&net2big_nor_flash); platform_device_register(&net2big_gpio_buttons); net2big_gpio_leds_init(); i2c_register_board_info(0, net2big_i2c_devices, ARRAY_SIZE(net2big_i2c_devices)); orion_gpio_set_valid(NET2BIG_GPIO_POWER_OFF, 1); if (gpio_request(NET2BIG_GPIO_POWER_OFF, "power-off") == 0 && gpio_direction_output(NET2BIG_GPIO_POWER_OFF, 0) == 0) pm_power_off = net2big_power_off; else pr_err("net2big: failed to configure power-off GPIO\n"); pr_notice("net2big: Flash writing is not yet supported.\n"); }
static void __init rd88f5182_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(rd88f5182_mpp_modes); /* * MPP[20] PCI Clock to MV88F5182 * MPP[21] PCI Clock to mini PCI CON11 * MPP[22] USB 0 over current indication * MPP[23] USB 1 over current indication * MPP[24] USB 1 over current enable * MPP[25] USB 0 over current enable */ /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_ehci1_init(); orion5x_eth_init(&rd88f5182_eth_data); orion5x_i2c_init(); orion5x_sata_init(&rd88f5182_sata_data); orion5x_uart0_init(); orion5x_xor_init(); mvebu_mbus_add_window_by_id(ORION_MBUS_DEVBUS_BOOT_TARGET, ORION_MBUS_DEVBUS_BOOT_ATTR, RD88F5182_NOR_BOOT_BASE, RD88F5182_NOR_BOOT_SIZE); mvebu_mbus_add_window_by_id(ORION_MBUS_DEVBUS_TARGET(1), ORION_MBUS_DEVBUS_ATTR(1), RD88F5182_NOR_BASE, RD88F5182_NOR_SIZE); platform_device_register(&rd88f5182_nor_flash); platform_device_register(&rd88f5182_gpio_leds); i2c_register_board_info(0, &rd88f5182_i2c_rtc, 1); }
static void __init wrt350n_v2_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(wrt350n_v2_mpp_modes); /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_eth_init(&wrt350n_v2_eth_data); orion5x_uart0_init(); orion5x_setup_dev_boot_win(WRT350N_V2_NOR_BOOT_BASE, WRT350N_V2_NOR_BOOT_SIZE); platform_device_register(&wrt350n_v2_nor_flash); }
static void __init rd88f5181l_fxo_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(rd88f5181l_fxo_mpp_modes); /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_eth_init(&rd88f5181l_fxo_eth_data); orion5x_uart0_init(); orion5x_setup_dev_boot_win(RD88F5181L_FXO_NOR_BOOT_BASE, RD88F5181L_FXO_NOR_BOOT_SIZE); platform_device_register(&rd88f5181l_fxo_nor_boot_flash); }
static void __init lsmini_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(lsmini_mpp_modes); /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_ehci1_init(); orion5x_eth_init(&lsmini_eth_data); orion5x_i2c_init(); orion5x_sata_init(&lsmini_sata_data); orion5x_uart0_init(); orion5x_xor_init(); mvebu_mbus_add_window_by_id(ORION_MBUS_DEVBUS_BOOT_TARGET, ORION_MBUS_DEVBUS_BOOT_ATTR, LSMINI_NOR_BOOT_BASE, LSMINI_NOR_BOOT_SIZE); platform_device_register(&lsmini_nor_flash); platform_device_register(&lsmini_button_device); platform_device_register(&lsmini_leds); i2c_register_board_info(0, &lsmini_i2c_rtc, 1); /* enable USB power */ gpio_set_value(LSMINI_GPIO_USB_POWER, 1); /* register power-off method */ pm_power_off = lsmini_power_off; pr_info("%s: finished\n", __func__); }
static void __init lschl_init(void) { /* * Setup basic Orion functions. Needs to be called early. */ orion5x_init(); orion5x_mpp_conf(lschl_mpp_modes); /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_ehci1_init(); orion5x_eth_init(&lschl_eth_data); orion5x_i2c_init(); orion5x_sata_init(&lschl_sata_data); orion5x_uart0_init(); orion5x_xor_init(); orion5x_setup_dev_boot_win(LSCHL_NOR_BOOT_BASE, LSCHL_NOR_BOOT_SIZE); platform_device_register(&lschl_nor_flash); platform_device_register(&lschl_leds); platform_device_register(&lschl_button_device); platform_device_register(&lschl_fan_device); i2c_register_board_info(0, &lschl_i2c_rtc, 1); /* usb power on */ gpio_set_value(LSCHL_GPIO_USB_POWER, 1); /* register power-off method */ pm_power_off = lschl_power_off; pr_info("%s: finished\n", __func__); }
static void __init edmini_v2_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(edminiv2_mpp_modes); /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_eth_init(&edmini_v2_eth_data); orion5x_i2c_init(); orion5x_sata_init(&edmini_v2_sata_data); orion5x_uart0_init(); orion5x_setup_dev_boot_win(EDMINI_V2_NOR_BOOT_BASE, EDMINI_V2_NOR_BOOT_SIZE); platform_device_register(&edmini_v2_nor_flash); platform_device_register(&edmini_v2_gpio_leds); platform_device_register(&edmini_v2_gpio_buttons); pr_notice("edmini_v2: USB device port, flash write and power-off " "are not yet supported.\n"); /* Get RTC IRQ and register the chip */ if (gpio_request(EDMINIV2_RTC_GPIO, "rtc") == 0) { if (gpio_direction_input(EDMINIV2_RTC_GPIO) == 0) edmini_v2_i2c_rtc.irq = gpio_to_irq(EDMINIV2_RTC_GPIO); else gpio_free(EDMINIV2_RTC_GPIO); } if (edmini_v2_i2c_rtc.irq == 0) pr_warning("edmini_v2: failed to get RTC IRQ\n"); i2c_register_board_info(0, &edmini_v2_i2c_rtc, 1); }
static void __init mv2120_init(void) { /* Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(mv2120_mpp_modes); /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_ehci1_init(); orion5x_eth_init(&mv2120_eth_data); orion5x_i2c_init(); orion5x_sata_init(&mv2120_sata_data); orion5x_uart0_init(); orion5x_xor_init(); orion5x_setup_dev_boot_win(MV2120_NOR_BOOT_BASE, MV2120_NOR_BOOT_SIZE); platform_device_register(&mv2120_nor_flash); platform_device_register(&mv2120_button_device); if (gpio_request(MV2120_GPIO_RTC_IRQ, "rtc") == 0) { if (gpio_direction_input(MV2120_GPIO_RTC_IRQ) == 0) mv2120_i2c_rtc.irq = gpio_to_irq(MV2120_GPIO_RTC_IRQ); else gpio_free(MV2120_GPIO_RTC_IRQ); } i2c_register_board_info(0, &mv2120_i2c_rtc, 1); platform_device_register(&mv2120_leds); /* register mv2120 specific power-off method */ if (gpio_request(MV2120_GPIO_POWER_OFF, "POWEROFF") != 0 || gpio_direction_output(MV2120_GPIO_POWER_OFF, 1) != 0) pr_err("mv2120: failed to setup power-off GPIO\n"); pm_power_off = mv2120_power_off; }
static void __init rd88f5182_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(rd88f5182_mpp_modes); /* * MPP[20] PCI Clock to MV88F5182 * MPP[21] PCI Clock to mini PCI CON11 * MPP[22] USB 0 over current indication * MPP[23] USB 1 over current indication * MPP[24] USB 1 over current enable * MPP[25] USB 0 over current enable */ /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_ehci1_init(); orion5x_eth_init(&rd88f5182_eth_data); orion5x_i2c_init(); orion5x_sata_init(&rd88f5182_sata_data); orion5x_uart0_init(); orion5x_xor_init(); orion5x_setup_dev_boot_win(RD88F5182_NOR_BOOT_BASE, RD88F5182_NOR_BOOT_SIZE); orion5x_setup_dev1_win(RD88F5182_NOR_BASE, RD88F5182_NOR_SIZE); platform_device_register(&rd88f5182_nor_flash); i2c_register_board_info(0, &rd88f5182_i2c_rtc, 1); }
static void __init tsp2_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(tsp2_mpp_modes); /* * Configure peripherals. */ orion5x_setup_dev_boot_win(TSP2_NOR_BOOT_BASE, TSP2_NOR_BOOT_SIZE); platform_device_register(&tsp2_nor_flash); orion5x_ehci0_init(); orion5x_eth_init(&tsp2_eth_data); orion5x_i2c_init(); orion5x_uart0_init(); orion5x_uart1_init(); /* Get RTC IRQ and register the chip */ if (gpio_request(TSP2_RTC_GPIO, "rtc") == 0) { if (gpio_direction_input(TSP2_RTC_GPIO) == 0) tsp2_i2c_rtc.irq = gpio_to_irq(TSP2_RTC_GPIO); else gpio_free(TSP2_RTC_GPIO); } if (tsp2_i2c_rtc.irq == 0) pr_warning("tsp2_init: failed to get RTC IRQ\n"); i2c_register_board_info(0, &tsp2_i2c_rtc, 1); /* register Terastation Pro II specific power-off method */ pm_power_off = tsp2_power_off; }
static void __init kurobox_pro_init(void) { /* * Setup basic Orion functions. Need to be called early. */ orion5x_init(); orion5x_mpp_conf(kurobox_pro_mpp_modes); /* * Configure peripherals. */ orion5x_ehci0_init(); orion5x_ehci1_init(); orion5x_eth_init(&kurobox_pro_eth_data); orion5x_i2c_init(); orion5x_sata_init(&kurobox_pro_sata_data); orion5x_uart0_init(); orion5x_uart1_init(); orion5x_xor_init(); orion5x_setup_dev_boot_win(KUROBOX_PRO_NOR_BOOT_BASE, KUROBOX_PRO_NOR_BOOT_SIZE); platform_device_register(&kurobox_pro_nor_flash); if (machine_is_kurobox_pro()) { orion5x_setup_dev0_win(KUROBOX_PRO_NAND_BASE, KUROBOX_PRO_NAND_SIZE); platform_device_register(&kurobox_pro_nand_flash); } i2c_register_board_info(0, &kurobox_pro_i2c_rtc, 1); /* register Kurobox Pro specific power-off method */ pm_power_off = kurobox_pro_power_off; }
static void __init dns323_init(void) { /* Setup basic Orion functions. Need to be called early. */ orion5x_init(); /* Identify revision */ system_rev = dns323_identify_rev(); pr_info("DNS-323: Identified HW revision %c1\n", 'A' + system_rev); /* Just to be tricky, the 5182 has a completely different * set of MPP modes to the 5181. */ switch(system_rev) { case DNS323_REV_A1: orion5x_mpp_conf(dns323a_mpp_modes); writel(0, MPP_DEV_CTRL); /* DEV_D[31:16] */ break; case DNS323_REV_B1: orion5x_mpp_conf(dns323b_mpp_modes); break; case DNS323_REV_C1: orion5x_mpp_conf(dns323c_mpp_modes); break; } /* setup flash mapping * CS3 holds a 8 MB Spansion S29GL064M90TFIR4 */ orion5x_setup_dev_boot_win(DNS323_NOR_BOOT_BASE, DNS323_NOR_BOOT_SIZE); platform_device_register(&dns323_nor_flash); /* Sort out LEDs, Buttons and i2c devices */ switch(system_rev) { case DNS323_REV_A1: /* The 5181 power LED is active low and requires * DNS323_GPIO_LED_POWER1 to also be low. */ dns323ab_leds[0].active_low = 1; gpio_request(DNS323_GPIO_LED_POWER1, "Power Led Enable"); gpio_direction_output(DNS323_GPIO_LED_POWER1, 0); /* Fall through */ case DNS323_REV_B1: i2c_register_board_info(0, dns323ab_i2c_devices, ARRAY_SIZE(dns323ab_i2c_devices)); break; case DNS323_REV_C1: /* Hookup LEDs & Buttons */ dns323_gpio_leds.dev.platform_data = &dns323c_led_data; dns323_button_device.dev.platform_data = &dns323c_button_data; /* Hookup i2c devices and fan driver */ i2c_register_board_info(0, dns323c_i2c_devices, ARRAY_SIZE(dns323c_i2c_devices)); platform_device_register_simple("dns323c-fan", 0, NULL, 0); /* Register fixup for the PHY LEDs */ phy_register_fixup_for_uid(MARVELL_PHY_ID_88E1118, MARVELL_PHY_ID_MASK, dns323c_phy_fixup); } platform_device_register(&dns323_gpio_leds); platform_device_register(&dns323_button_device); /* * Configure peripherals. */ if (dns323_read_mac_addr() < 0) printk("DNS-323: Failed to read MAC address\n"); orion5x_ehci0_init(); orion5x_eth_init(&dns323_eth_data); orion5x_i2c_init(); orion5x_uart0_init(); /* Remaining GPIOs */ switch(system_rev) { case DNS323_REV_A1: /* Poweroff GPIO */ if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 || gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0) pr_err("DNS-323: failed to setup power-off GPIO\n"); pm_power_off = dns323a_power_off; break; case DNS323_REV_B1: /* 5182 built-in SATA init */ orion5x_sata_init(&dns323_sata_data); /* The DNS323 rev B1 has flag to indicate the system is up. * Without this flag set, power LED will flash and cannot be * controlled via leds-gpio. */ if (gpio_request(DNS323_GPIO_SYSTEM_UP, "SYS_READY") == 0) gpio_direction_output(DNS323_GPIO_SYSTEM_UP, 1); /* Poweroff GPIO */ if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 || gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0) pr_err("DNS-323: failed to setup power-off GPIO\n"); pm_power_off = dns323b_power_off; break; case DNS323_REV_C1: /* 5182 built-in SATA init */ orion5x_sata_init(&dns323_sata_data); /* Poweroff GPIO */ if (gpio_request(DNS323C_GPIO_POWER_OFF, "POWEROFF") != 0 || gpio_direction_output(DNS323C_GPIO_POWER_OFF, 0) != 0) pr_err("DNS-323: failed to setup power-off GPIO\n"); pm_power_off = dns323c_power_off; /* Now, -this- should theorically be done by the sata_mv driver * once I figure out what's going on there. Maybe the behaviour * of the LEDs should be somewhat passed via the platform_data. * for now, just whack the register and make the LEDs happy * * Note: AFAIK, rev B1 needs the same treatement but I'll let * somebody else test it. */ writel(0x5, ORION5X_SATA_VIRT_BASE | 0x2c); break; } }