/*
 * stmark2.c -- Support for Sysam AMCORE open board
 *
 * (C) Copyright 2017, Angelo Dureghello <angelo@sysam.it>
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file COPYING in the main directory of this archive
 * for more details.
 */

#include <linux/platform_device.h>
#include <linux/mtd/partitions.h>
#include <linux/spi/spi.h>
#include <linux/spi/spi-fsl-dspi.h>
#include <linux/spi/flash.h>
#include <linux/dma-mapping.h>
#include <asm/mcfsim.h>

/*
 * Partitioning of parallel NOR flash (39VF3201B)
 */
static struct mtd_partition stmark2_partitions[] = {
	{
		.name = "U-Boot (1024K)",
		.size = 0x100000,
		.offset = 0x0
	}, {
		.name = "Kernel+initramfs (7168K)",
		.size = 0x700000,
		.offset = MTDPART_OFS_APPEND
	}, {
		.name = "Flash Free Space (8192K)",
		.size = MTDPART_SIZ_FULL,
		.offset = MTDPART_OFS_APPEND
	}
};

static struct flash_platform_data stmark2_spi_flash_data = {
	.name = "is25lp128",
	.parts = stmark2_partitions,
	.nr_parts = ARRAY_SIZE(stmark2_partitions),
	.type = "is25lp128",
};

static struct spi_board_info stmark2_board_info[] __initdata = {
	{
		.modalias = "m25p80",
		.max_speed_hz = 5000000,
		.bus_num = 0,
		.chip_select = 1,
		.platform_data = &stmark2_spi_flash_data,
		.mode = SPI_MODE_3,
	}
};

/* SPI controller data, SPI (0) */
static struct fsl_dspi_platform_data dspi_spi0_info = {
	.cs_num = 4,
	.bus_num = 0,
	.sck_cs_delay = 100,
	.cs_sck_delay = 100,
};

static struct resource dspi_spi0_resource[] = {
	[0] = {
		.start = MCFDSPI_BASE0,
		.end   = MCFDSPI_BASE0 + 0xFF,
		.flags = IORESOURCE_MEM,
		},
	[1] = {
		.start = 12,
		.end   = 13,
		.flags = IORESOURCE_DMA,
	},
	[2] = {
		.start = MCF_IRQ_DSPI0,
		.end   = MCF_IRQ_DSPI0,
		.flags = IORESOURCE_IRQ,
	},
};

static u64 stmark2_dspi_mask = DMA_BIT_MASK(32);

/* SPI controller, id = bus number */
static struct platform_device dspi_spi0_device = {
	.name = "fsl-dspi",
	.id = 0,
	.num_resources = ARRAY_SIZE(dspi_spi0_resource),
	.resource = dspi_spi0_resource,
	.dev = {
		.platform_data = &dspi_spi0_info,
		.dma_mask = &stmark2_dspi_mask,
		.coherent_dma_mask = DMA_BIT_MASK(32),
	},
};

static struct platform_device *stmark2_devices[] __initdata = {
	&dspi_spi0_device,
};

/*
 * Note: proper pin-mux setup is mandatory for proper SPI functionality.
 */
static int __init init_stmark2(void)
{
	/* DSPI0, all pins as DSPI, and using CS1 */
	__raw_writeb(0x80, MCFGPIO_PAR_DSPIOWL);
	__raw_writeb(0xfc, MCFGPIO_PAR_DSPIOWH);

	/* Board gpio setup */
	__raw_writeb(0x00, MCFGPIO_PAR_BE);
	__raw_writeb(0x00, MCFGPIO_PAR_FBCTL);
	__raw_writeb(0x00, MCFGPIO_PAR_CS);

	/* CAN pads */
	__raw_writeb(0x50, MCFGPIO_PAR_CANI2C);

	platform_add_devices(stmark2_devices, ARRAY_SIZE(stmark2_devices));

	spi_register_board_info(stmark2_board_info,
				ARRAY_SIZE(stmark2_board_info));

	return 0;
}

device_initcall(init_stmark2);
