/*
 * arch/arm/mach-kirkwood/lacie_v2-common.c
 *
 * This file is licensed under the terms of the GNU General Public
 * License version 2.  This program is licensed "as is" without any
 * warranty of any kind, whether express or implied.
 */

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/mtd/physmap.h>
#include <linux/spi/flash.h>
#include <linux/spi/spi.h>
#include <linux/i2c.h>
#include <linux/i2c/at24.h>
#include <linux/gpio.h>
#include <asm/mach/time.h>
#include <mach/kirkwood.h>
#include <mach/irqs.h>
#include <plat/time.h>
#include "common.h"

/*****************************************************************************
 * 512KB SPI Flash on Boot Device (MACRONIX MX25L4005)
 ****************************************************************************/

static struct mtd_partition lacie_v2_flash_parts[] = {
	{
		.name = "u-boot",
		.size = MTDPART_SIZ_FULL,
		.offset = 0,
		.mask_flags = MTD_WRITEABLE, /* force read-only */
	},
};

static const struct flash_platform_data lacie_v2_flash = {
	.type		= "mx25l4005a",
	.name		= "spi_flash",
	.parts		= lacie_v2_flash_parts,
	.nr_parts	= ARRAY_SIZE(lacie_v2_flash_parts),
};

static struct spi_board_info __initdata lacie_v2_spi_slave_info[] = {
	{
		.modalias	= "m25p80",
		.platform_data	= &lacie_v2_flash,
		.irq		= -1,
		.max_speed_hz	= 20000000,
		.bus_num	= 0,
		.chip_select	= 0,
	},
};

void __init lacie_v2_register_flash(void)
{
	spi_register_board_info(lacie_v2_spi_slave_info,
				ARRAY_SIZE(lacie_v2_spi_slave_info));
	kirkwood_spi_init();
}

/*****************************************************************************
 * I2C devices
 ****************************************************************************/

static struct at24_platform_data at24c04 = {
	.byte_len	= SZ_4K / 8,
	.page_size	= 16,
};

/*
 * i2c addr | chip         | description
 * 0x50     | HT24LC04     | eeprom (512B)
 */

static struct i2c_board_info __initdata lacie_v2_i2c_info[] = {
	{
		I2C_BOARD_INFO("24c04", 0x50),
		.platform_data  = &at24c04,
	}
};

void __init lacie_v2_register_i2c_devices(void)
{
	kirkwood_i2c_init();
	i2c_register_board_info(0, lacie_v2_i2c_info,
				ARRAY_SIZE(lacie_v2_i2c_info));
}

/*****************************************************************************
 * Hard Disk power
 ****************************************************************************/

static int __initdata lacie_v2_gpio_hdd_power[] = { 16, 17, 41, 42, 43 };

void __init lacie_v2_hdd_power_init(int hdd_num)
{
	int i;
	int err;

	/* Power up all hard disks. */
	for (i = 0; i < hdd_num; i++) {
		err = gpio_request(lacie_v2_gpio_hdd_power[i], NULL);
		if (err == 0) {
			err = gpio_direction_output(
					lacie_v2_gpio_hdd_power[i], 1);
			/* Free the HDD power GPIOs. This allow user-space to
			 * configure them via the gpiolib sysfs interface. */
			gpio_free(lacie_v2_gpio_hdd_power[i]);
		}
		if (err)
			pr_err("Failed to power up HDD%d\n", i + 1);
	}
}
