162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * arch/arm/mach-orion5x/net2big-setup.c 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * LaCie 2Big Network NAS setup 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Copyright (C) 2009 Simon Guinot <sguinot@lacie.com> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <linux/kernel.h> 1162306a36Sopenharmony_ci#include <linux/init.h> 1262306a36Sopenharmony_ci#include <linux/platform_device.h> 1362306a36Sopenharmony_ci#include <linux/mtd/physmap.h> 1462306a36Sopenharmony_ci#include <linux/mv643xx_eth.h> 1562306a36Sopenharmony_ci#include <linux/leds.h> 1662306a36Sopenharmony_ci#include <linux/gpio_keys.h> 1762306a36Sopenharmony_ci#include <linux/input.h> 1862306a36Sopenharmony_ci#include <linux/i2c.h> 1962306a36Sopenharmony_ci#include <linux/ata_platform.h> 2062306a36Sopenharmony_ci#include <linux/gpio.h> 2162306a36Sopenharmony_ci#include <linux/delay.h> 2262306a36Sopenharmony_ci#include <asm/mach-types.h> 2362306a36Sopenharmony_ci#include <asm/mach/arch.h> 2462306a36Sopenharmony_ci#include <plat/orion-gpio.h> 2562306a36Sopenharmony_ci#include "common.h" 2662306a36Sopenharmony_ci#include "mpp.h" 2762306a36Sopenharmony_ci#include "orion5x.h" 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci/***************************************************************************** 3062306a36Sopenharmony_ci * LaCie 2Big Network Info 3162306a36Sopenharmony_ci ****************************************************************************/ 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci/* 3462306a36Sopenharmony_ci * 512KB NOR flash Device bus boot chip select 3562306a36Sopenharmony_ci */ 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci#define NET2BIG_NOR_BOOT_BASE 0xfff80000 3862306a36Sopenharmony_ci#define NET2BIG_NOR_BOOT_SIZE SZ_512K 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci/***************************************************************************** 4162306a36Sopenharmony_ci * 512KB NOR Flash on Boot Device 4262306a36Sopenharmony_ci ****************************************************************************/ 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci/* 4562306a36Sopenharmony_ci * TODO: Check write support on flash MX29LV400CBTC-70G 4662306a36Sopenharmony_ci */ 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_cistatic struct mtd_partition net2big_partitions[] = { 4962306a36Sopenharmony_ci { 5062306a36Sopenharmony_ci .name = "Full512kb", 5162306a36Sopenharmony_ci .size = MTDPART_SIZ_FULL, 5262306a36Sopenharmony_ci .offset = 0x00000000, 5362306a36Sopenharmony_ci .mask_flags = MTD_WRITEABLE, 5462306a36Sopenharmony_ci }, 5562306a36Sopenharmony_ci}; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_cistatic struct physmap_flash_data net2big_nor_flash_data = { 5862306a36Sopenharmony_ci .width = 1, 5962306a36Sopenharmony_ci .parts = net2big_partitions, 6062306a36Sopenharmony_ci .nr_parts = ARRAY_SIZE(net2big_partitions), 6162306a36Sopenharmony_ci}; 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_cistatic struct resource net2big_nor_flash_resource = { 6462306a36Sopenharmony_ci .flags = IORESOURCE_MEM, 6562306a36Sopenharmony_ci .start = NET2BIG_NOR_BOOT_BASE, 6662306a36Sopenharmony_ci .end = NET2BIG_NOR_BOOT_BASE 6762306a36Sopenharmony_ci + NET2BIG_NOR_BOOT_SIZE - 1, 6862306a36Sopenharmony_ci}; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_cistatic struct platform_device net2big_nor_flash = { 7162306a36Sopenharmony_ci .name = "physmap-flash", 7262306a36Sopenharmony_ci .id = 0, 7362306a36Sopenharmony_ci .dev = { 7462306a36Sopenharmony_ci .platform_data = &net2big_nor_flash_data, 7562306a36Sopenharmony_ci }, 7662306a36Sopenharmony_ci .num_resources = 1, 7762306a36Sopenharmony_ci .resource = &net2big_nor_flash_resource, 7862306a36Sopenharmony_ci}; 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci/***************************************************************************** 8162306a36Sopenharmony_ci * Ethernet 8262306a36Sopenharmony_ci ****************************************************************************/ 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_cistatic struct mv643xx_eth_platform_data net2big_eth_data = { 8562306a36Sopenharmony_ci .phy_addr = MV643XX_ETH_PHY_ADDR(8), 8662306a36Sopenharmony_ci}; 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci/***************************************************************************** 8962306a36Sopenharmony_ci * I2C devices 9062306a36Sopenharmony_ci ****************************************************************************/ 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci/* 9362306a36Sopenharmony_ci * i2c addr | chip | description 9462306a36Sopenharmony_ci * 0x32 | Ricoh 5C372b | RTC 9562306a36Sopenharmony_ci * 0x50 | HT24LC08 | eeprom (1kB) 9662306a36Sopenharmony_ci */ 9762306a36Sopenharmony_cistatic struct i2c_board_info __initdata net2big_i2c_devices[] = { 9862306a36Sopenharmony_ci { 9962306a36Sopenharmony_ci I2C_BOARD_INFO("rs5c372b", 0x32), 10062306a36Sopenharmony_ci }, { 10162306a36Sopenharmony_ci I2C_BOARD_INFO("24c08", 0x50), 10262306a36Sopenharmony_ci }, 10362306a36Sopenharmony_ci}; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci/***************************************************************************** 10662306a36Sopenharmony_ci * SATA 10762306a36Sopenharmony_ci ****************************************************************************/ 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_cistatic struct mv_sata_platform_data net2big_sata_data = { 11062306a36Sopenharmony_ci .n_ports = 2, 11162306a36Sopenharmony_ci}; 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci#define NET2BIG_GPIO_SATA_POWER_REQ 19 11462306a36Sopenharmony_ci#define NET2BIG_GPIO_SATA0_POWER 23 11562306a36Sopenharmony_ci#define NET2BIG_GPIO_SATA1_POWER 25 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_cistatic void __init net2big_sata_power_init(void) 11862306a36Sopenharmony_ci{ 11962306a36Sopenharmony_ci int err; 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci /* Configure GPIOs over MPP max number. */ 12262306a36Sopenharmony_ci orion_gpio_set_valid(NET2BIG_GPIO_SATA0_POWER, 1); 12362306a36Sopenharmony_ci orion_gpio_set_valid(NET2BIG_GPIO_SATA1_POWER, 1); 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci err = gpio_request(NET2BIG_GPIO_SATA0_POWER, "SATA0 power status"); 12662306a36Sopenharmony_ci if (err == 0) { 12762306a36Sopenharmony_ci err = gpio_direction_input(NET2BIG_GPIO_SATA0_POWER); 12862306a36Sopenharmony_ci if (err) 12962306a36Sopenharmony_ci gpio_free(NET2BIG_GPIO_SATA0_POWER); 13062306a36Sopenharmony_ci } 13162306a36Sopenharmony_ci if (err) { 13262306a36Sopenharmony_ci pr_err("net2big: failed to setup SATA0 power GPIO\n"); 13362306a36Sopenharmony_ci return; 13462306a36Sopenharmony_ci } 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci err = gpio_request(NET2BIG_GPIO_SATA1_POWER, "SATA1 power status"); 13762306a36Sopenharmony_ci if (err == 0) { 13862306a36Sopenharmony_ci err = gpio_direction_input(NET2BIG_GPIO_SATA1_POWER); 13962306a36Sopenharmony_ci if (err) 14062306a36Sopenharmony_ci gpio_free(NET2BIG_GPIO_SATA1_POWER); 14162306a36Sopenharmony_ci } 14262306a36Sopenharmony_ci if (err) { 14362306a36Sopenharmony_ci pr_err("net2big: failed to setup SATA1 power GPIO\n"); 14462306a36Sopenharmony_ci goto err_free_1; 14562306a36Sopenharmony_ci } 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci err = gpio_request(NET2BIG_GPIO_SATA_POWER_REQ, "SATA power request"); 14862306a36Sopenharmony_ci if (err == 0) { 14962306a36Sopenharmony_ci err = gpio_direction_output(NET2BIG_GPIO_SATA_POWER_REQ, 0); 15062306a36Sopenharmony_ci if (err) 15162306a36Sopenharmony_ci gpio_free(NET2BIG_GPIO_SATA_POWER_REQ); 15262306a36Sopenharmony_ci } 15362306a36Sopenharmony_ci if (err) { 15462306a36Sopenharmony_ci pr_err("net2big: failed to setup SATA power request GPIO\n"); 15562306a36Sopenharmony_ci goto err_free_2; 15662306a36Sopenharmony_ci } 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci if (gpio_get_value(NET2BIG_GPIO_SATA0_POWER) && 15962306a36Sopenharmony_ci gpio_get_value(NET2BIG_GPIO_SATA1_POWER)) { 16062306a36Sopenharmony_ci return; 16162306a36Sopenharmony_ci } 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_ci /* 16462306a36Sopenharmony_ci * SATA power up on both disk is done by pulling high the CPLD power 16562306a36Sopenharmony_ci * request line. The 300ms delay is related to the CPLD clock and is 16662306a36Sopenharmony_ci * needed to be sure that the CPLD has take into account the low line 16762306a36Sopenharmony_ci * status. 16862306a36Sopenharmony_ci */ 16962306a36Sopenharmony_ci msleep(300); 17062306a36Sopenharmony_ci gpio_set_value(NET2BIG_GPIO_SATA_POWER_REQ, 1); 17162306a36Sopenharmony_ci pr_info("net2big: power up SATA hard disks\n"); 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci return; 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_cierr_free_2: 17662306a36Sopenharmony_ci gpio_free(NET2BIG_GPIO_SATA1_POWER); 17762306a36Sopenharmony_cierr_free_1: 17862306a36Sopenharmony_ci gpio_free(NET2BIG_GPIO_SATA0_POWER); 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ci return; 18162306a36Sopenharmony_ci} 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci/***************************************************************************** 18462306a36Sopenharmony_ci * GPIO LEDs 18562306a36Sopenharmony_ci ****************************************************************************/ 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci/* 18862306a36Sopenharmony_ci * The power front LEDs (blue and red) and SATA red LEDs are controlled via a 18962306a36Sopenharmony_ci * single GPIO line and are compatible with the leds-gpio driver. 19062306a36Sopenharmony_ci * 19162306a36Sopenharmony_ci * The SATA blue LEDs have some hardware blink capabilities which are detailed 19262306a36Sopenharmony_ci * in the following array: 19362306a36Sopenharmony_ci * 19462306a36Sopenharmony_ci * SATAx blue LED | SATAx activity | LED state 19562306a36Sopenharmony_ci * | | 19662306a36Sopenharmony_ci * 0 | 0 | blink (rate 300ms) 19762306a36Sopenharmony_ci * 1 | 0 | off 19862306a36Sopenharmony_ci * ? | 1 | on 19962306a36Sopenharmony_ci * 20062306a36Sopenharmony_ci * Notes: The blue and the red front LED's can't be on at the same time. 20162306a36Sopenharmony_ci * Blue LED have priority. 20262306a36Sopenharmony_ci */ 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_ci#define NET2BIG_GPIO_PWR_RED_LED 6 20562306a36Sopenharmony_ci#define NET2BIG_GPIO_PWR_BLUE_LED 16 20662306a36Sopenharmony_ci#define NET2BIG_GPIO_PWR_LED_BLINK_STOP 7 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci#define NET2BIG_GPIO_SATA0_RED_LED 11 20962306a36Sopenharmony_ci#define NET2BIG_GPIO_SATA1_RED_LED 10 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ci#define NET2BIG_GPIO_SATA0_BLUE_LED 17 21262306a36Sopenharmony_ci#define NET2BIG_GPIO_SATA1_BLUE_LED 13 21362306a36Sopenharmony_ci 21462306a36Sopenharmony_cistatic struct gpio_led net2big_leds[] = { 21562306a36Sopenharmony_ci { 21662306a36Sopenharmony_ci .name = "net2big:red:power", 21762306a36Sopenharmony_ci .gpio = NET2BIG_GPIO_PWR_RED_LED, 21862306a36Sopenharmony_ci }, 21962306a36Sopenharmony_ci { 22062306a36Sopenharmony_ci .name = "net2big:blue:power", 22162306a36Sopenharmony_ci .gpio = NET2BIG_GPIO_PWR_BLUE_LED, 22262306a36Sopenharmony_ci }, 22362306a36Sopenharmony_ci { 22462306a36Sopenharmony_ci .name = "net2big:red:sata0", 22562306a36Sopenharmony_ci .gpio = NET2BIG_GPIO_SATA0_RED_LED, 22662306a36Sopenharmony_ci }, 22762306a36Sopenharmony_ci { 22862306a36Sopenharmony_ci .name = "net2big:red:sata1", 22962306a36Sopenharmony_ci .gpio = NET2BIG_GPIO_SATA1_RED_LED, 23062306a36Sopenharmony_ci }, 23162306a36Sopenharmony_ci}; 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_cistatic struct gpio_led_platform_data net2big_led_data = { 23462306a36Sopenharmony_ci .num_leds = ARRAY_SIZE(net2big_leds), 23562306a36Sopenharmony_ci .leds = net2big_leds, 23662306a36Sopenharmony_ci}; 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_cistatic struct platform_device net2big_gpio_leds = { 23962306a36Sopenharmony_ci .name = "leds-gpio", 24062306a36Sopenharmony_ci .id = -1, 24162306a36Sopenharmony_ci .dev = { 24262306a36Sopenharmony_ci .platform_data = &net2big_led_data, 24362306a36Sopenharmony_ci }, 24462306a36Sopenharmony_ci}; 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_cistatic void __init net2big_gpio_leds_init(void) 24762306a36Sopenharmony_ci{ 24862306a36Sopenharmony_ci int err; 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ci /* Stop initial CPLD slow red/blue blinking on power LED. */ 25162306a36Sopenharmony_ci err = gpio_request(NET2BIG_GPIO_PWR_LED_BLINK_STOP, 25262306a36Sopenharmony_ci "Power LED blink stop"); 25362306a36Sopenharmony_ci if (err == 0) { 25462306a36Sopenharmony_ci err = gpio_direction_output(NET2BIG_GPIO_PWR_LED_BLINK_STOP, 1); 25562306a36Sopenharmony_ci if (err) 25662306a36Sopenharmony_ci gpio_free(NET2BIG_GPIO_PWR_LED_BLINK_STOP); 25762306a36Sopenharmony_ci } 25862306a36Sopenharmony_ci if (err) 25962306a36Sopenharmony_ci pr_err("net2big: failed to setup power LED blink GPIO\n"); 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci /* 26262306a36Sopenharmony_ci * Configure SATA0 and SATA1 blue LEDs to blink in relation with the 26362306a36Sopenharmony_ci * hard disk activity. 26462306a36Sopenharmony_ci */ 26562306a36Sopenharmony_ci err = gpio_request(NET2BIG_GPIO_SATA0_BLUE_LED, 26662306a36Sopenharmony_ci "SATA0 blue LED control"); 26762306a36Sopenharmony_ci if (err == 0) { 26862306a36Sopenharmony_ci err = gpio_direction_output(NET2BIG_GPIO_SATA0_BLUE_LED, 1); 26962306a36Sopenharmony_ci if (err) 27062306a36Sopenharmony_ci gpio_free(NET2BIG_GPIO_SATA0_BLUE_LED); 27162306a36Sopenharmony_ci } 27262306a36Sopenharmony_ci if (err) 27362306a36Sopenharmony_ci pr_err("net2big: failed to setup SATA0 blue LED GPIO\n"); 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci err = gpio_request(NET2BIG_GPIO_SATA1_BLUE_LED, 27662306a36Sopenharmony_ci "SATA1 blue LED control"); 27762306a36Sopenharmony_ci if (err == 0) { 27862306a36Sopenharmony_ci err = gpio_direction_output(NET2BIG_GPIO_SATA1_BLUE_LED, 1); 27962306a36Sopenharmony_ci if (err) 28062306a36Sopenharmony_ci gpio_free(NET2BIG_GPIO_SATA1_BLUE_LED); 28162306a36Sopenharmony_ci } 28262306a36Sopenharmony_ci if (err) 28362306a36Sopenharmony_ci pr_err("net2big: failed to setup SATA1 blue LED GPIO\n"); 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_ci platform_device_register(&net2big_gpio_leds); 28662306a36Sopenharmony_ci} 28762306a36Sopenharmony_ci 28862306a36Sopenharmony_ci/**************************************************************************** 28962306a36Sopenharmony_ci * GPIO keys 29062306a36Sopenharmony_ci ****************************************************************************/ 29162306a36Sopenharmony_ci 29262306a36Sopenharmony_ci#define NET2BIG_GPIO_PUSH_BUTTON 18 29362306a36Sopenharmony_ci#define NET2BIG_GPIO_POWER_SWITCH_ON 8 29462306a36Sopenharmony_ci#define NET2BIG_GPIO_POWER_SWITCH_OFF 9 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci#define NET2BIG_SWITCH_POWER_ON 0x1 29762306a36Sopenharmony_ci#define NET2BIG_SWITCH_POWER_OFF 0x2 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_cistatic struct gpio_keys_button net2big_buttons[] = { 30062306a36Sopenharmony_ci { 30162306a36Sopenharmony_ci .type = EV_SW, 30262306a36Sopenharmony_ci .code = NET2BIG_SWITCH_POWER_OFF, 30362306a36Sopenharmony_ci .gpio = NET2BIG_GPIO_POWER_SWITCH_OFF, 30462306a36Sopenharmony_ci .desc = "Power rocker switch (auto|off)", 30562306a36Sopenharmony_ci .active_low = 0, 30662306a36Sopenharmony_ci }, 30762306a36Sopenharmony_ci { 30862306a36Sopenharmony_ci .type = EV_SW, 30962306a36Sopenharmony_ci .code = NET2BIG_SWITCH_POWER_ON, 31062306a36Sopenharmony_ci .gpio = NET2BIG_GPIO_POWER_SWITCH_ON, 31162306a36Sopenharmony_ci .desc = "Power rocker switch (on|auto)", 31262306a36Sopenharmony_ci .active_low = 0, 31362306a36Sopenharmony_ci }, 31462306a36Sopenharmony_ci { 31562306a36Sopenharmony_ci .type = EV_KEY, 31662306a36Sopenharmony_ci .code = KEY_POWER, 31762306a36Sopenharmony_ci .gpio = NET2BIG_GPIO_PUSH_BUTTON, 31862306a36Sopenharmony_ci .desc = "Front Push Button", 31962306a36Sopenharmony_ci .active_low = 0, 32062306a36Sopenharmony_ci }, 32162306a36Sopenharmony_ci}; 32262306a36Sopenharmony_ci 32362306a36Sopenharmony_cistatic struct gpio_keys_platform_data net2big_button_data = { 32462306a36Sopenharmony_ci .buttons = net2big_buttons, 32562306a36Sopenharmony_ci .nbuttons = ARRAY_SIZE(net2big_buttons), 32662306a36Sopenharmony_ci}; 32762306a36Sopenharmony_ci 32862306a36Sopenharmony_cistatic struct platform_device net2big_gpio_buttons = { 32962306a36Sopenharmony_ci .name = "gpio-keys", 33062306a36Sopenharmony_ci .id = -1, 33162306a36Sopenharmony_ci .dev = { 33262306a36Sopenharmony_ci .platform_data = &net2big_button_data, 33362306a36Sopenharmony_ci }, 33462306a36Sopenharmony_ci}; 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci/***************************************************************************** 33762306a36Sopenharmony_ci * General Setup 33862306a36Sopenharmony_ci ****************************************************************************/ 33962306a36Sopenharmony_ci 34062306a36Sopenharmony_cistatic unsigned int net2big_mpp_modes[] __initdata = { 34162306a36Sopenharmony_ci MPP0_GPIO, /* Raid mode (bit 0) */ 34262306a36Sopenharmony_ci MPP1_GPIO, /* USB port 2 fuse (0 = Fail, 1 = Ok) */ 34362306a36Sopenharmony_ci MPP2_GPIO, /* Raid mode (bit 1) */ 34462306a36Sopenharmony_ci MPP3_GPIO, /* Board ID (bit 0) */ 34562306a36Sopenharmony_ci MPP4_GPIO, /* Fan activity (0 = Off, 1 = On) */ 34662306a36Sopenharmony_ci MPP5_GPIO, /* Fan fail detection */ 34762306a36Sopenharmony_ci MPP6_GPIO, /* Red front LED (0 = Off, 1 = On) */ 34862306a36Sopenharmony_ci MPP7_GPIO, /* Disable initial blinking on front LED */ 34962306a36Sopenharmony_ci MPP8_GPIO, /* Rear power switch (on|auto) */ 35062306a36Sopenharmony_ci MPP9_GPIO, /* Rear power switch (auto|off) */ 35162306a36Sopenharmony_ci MPP10_GPIO, /* SATA 1 red LED (0 = Off, 1 = On) */ 35262306a36Sopenharmony_ci MPP11_GPIO, /* SATA 0 red LED (0 = Off, 1 = On) */ 35362306a36Sopenharmony_ci MPP12_GPIO, /* Board ID (bit 1) */ 35462306a36Sopenharmony_ci MPP13_GPIO, /* SATA 1 blue LED blink control */ 35562306a36Sopenharmony_ci MPP14_SATA_LED, 35662306a36Sopenharmony_ci MPP15_SATA_LED, 35762306a36Sopenharmony_ci MPP16_GPIO, /* Blue front LED control */ 35862306a36Sopenharmony_ci MPP17_GPIO, /* SATA 0 blue LED blink control */ 35962306a36Sopenharmony_ci MPP18_GPIO, /* Front button (0 = Released, 1 = Pushed ) */ 36062306a36Sopenharmony_ci MPP19_GPIO, /* SATA{0,1} power On/Off request */ 36162306a36Sopenharmony_ci 0, 36262306a36Sopenharmony_ci /* 22: USB port 1 fuse (0 = Fail, 1 = Ok) */ 36362306a36Sopenharmony_ci /* 23: SATA 0 power status */ 36462306a36Sopenharmony_ci /* 24: Board power off */ 36562306a36Sopenharmony_ci /* 25: SATA 1 power status */ 36662306a36Sopenharmony_ci}; 36762306a36Sopenharmony_ci 36862306a36Sopenharmony_ci#define NET2BIG_GPIO_POWER_OFF 24 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_cistatic void net2big_power_off(void) 37162306a36Sopenharmony_ci{ 37262306a36Sopenharmony_ci gpio_set_value(NET2BIG_GPIO_POWER_OFF, 1); 37362306a36Sopenharmony_ci} 37462306a36Sopenharmony_ci 37562306a36Sopenharmony_cistatic void __init net2big_init(void) 37662306a36Sopenharmony_ci{ 37762306a36Sopenharmony_ci /* 37862306a36Sopenharmony_ci * Setup basic Orion functions. Need to be called early. 37962306a36Sopenharmony_ci */ 38062306a36Sopenharmony_ci orion5x_init(); 38162306a36Sopenharmony_ci 38262306a36Sopenharmony_ci orion5x_mpp_conf(net2big_mpp_modes); 38362306a36Sopenharmony_ci 38462306a36Sopenharmony_ci /* 38562306a36Sopenharmony_ci * Configure peripherals. 38662306a36Sopenharmony_ci */ 38762306a36Sopenharmony_ci orion5x_ehci0_init(); 38862306a36Sopenharmony_ci orion5x_ehci1_init(); 38962306a36Sopenharmony_ci orion5x_eth_init(&net2big_eth_data); 39062306a36Sopenharmony_ci orion5x_i2c_init(); 39162306a36Sopenharmony_ci orion5x_uart0_init(); 39262306a36Sopenharmony_ci orion5x_xor_init(); 39362306a36Sopenharmony_ci 39462306a36Sopenharmony_ci net2big_sata_power_init(); 39562306a36Sopenharmony_ci orion5x_sata_init(&net2big_sata_data); 39662306a36Sopenharmony_ci 39762306a36Sopenharmony_ci mvebu_mbus_add_window_by_id(ORION_MBUS_DEVBUS_BOOT_TARGET, 39862306a36Sopenharmony_ci ORION_MBUS_DEVBUS_BOOT_ATTR, 39962306a36Sopenharmony_ci NET2BIG_NOR_BOOT_BASE, 40062306a36Sopenharmony_ci NET2BIG_NOR_BOOT_SIZE); 40162306a36Sopenharmony_ci platform_device_register(&net2big_nor_flash); 40262306a36Sopenharmony_ci 40362306a36Sopenharmony_ci platform_device_register(&net2big_gpio_buttons); 40462306a36Sopenharmony_ci net2big_gpio_leds_init(); 40562306a36Sopenharmony_ci 40662306a36Sopenharmony_ci i2c_register_board_info(0, net2big_i2c_devices, 40762306a36Sopenharmony_ci ARRAY_SIZE(net2big_i2c_devices)); 40862306a36Sopenharmony_ci 40962306a36Sopenharmony_ci orion_gpio_set_valid(NET2BIG_GPIO_POWER_OFF, 1); 41062306a36Sopenharmony_ci 41162306a36Sopenharmony_ci if (gpio_request(NET2BIG_GPIO_POWER_OFF, "power-off") == 0 && 41262306a36Sopenharmony_ci gpio_direction_output(NET2BIG_GPIO_POWER_OFF, 0) == 0) 41362306a36Sopenharmony_ci pm_power_off = net2big_power_off; 41462306a36Sopenharmony_ci else 41562306a36Sopenharmony_ci pr_err("net2big: failed to configure power-off GPIO\n"); 41662306a36Sopenharmony_ci 41762306a36Sopenharmony_ci pr_notice("net2big: Flash writing is not yet supported.\n"); 41862306a36Sopenharmony_ci} 41962306a36Sopenharmony_ci 42062306a36Sopenharmony_ci/* Warning: LaCie use a wrong mach-type (0x20e=526) in their bootloader. */ 42162306a36Sopenharmony_ciMACHINE_START(NET2BIG, "LaCie 2Big Network") 42262306a36Sopenharmony_ci .atag_offset = 0x100, 42362306a36Sopenharmony_ci .nr_irqs = ORION5X_NR_IRQS, 42462306a36Sopenharmony_ci .init_machine = net2big_init, 42562306a36Sopenharmony_ci .map_io = orion5x_map_io, 42662306a36Sopenharmony_ci .init_early = orion5x_init_early, 42762306a36Sopenharmony_ci .init_irq = orion5x_init_irq, 42862306a36Sopenharmony_ci .init_time = orion5x_timer_init, 42962306a36Sopenharmony_ci .fixup = tag_fixup_mem32, 43062306a36Sopenharmony_ci .restart = orion5x_restart, 43162306a36Sopenharmony_ciMACHINE_END 432