/*
 * Copyright (C) 2011-2012 Freescale Semiconductor, Inc. All Rights Reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

#ifndef __MACH_MXS_GPMI_NAND_H__
#define __MACH_MXS_GPMI_NAND_H__

/* The size of the resources is fixed. */
#define GPMI_NAND_RES_SIZE	6

/* Resource names for the GPMI NAND driver. */
#define GPMI_NAND_GPMI_REGS_ADDR_RES_NAME  "GPMI NAND GPMI Registers"
#define GPMI_NAND_GPMI_INTERRUPT_RES_NAME  "GPMI NAND GPMI Interrupt"
#define GPMI_NAND_BCH_REGS_ADDR_RES_NAME   "GPMI NAND BCH Registers"
#define GPMI_NAND_BCH_INTERRUPT_RES_NAME   "GPMI NAND BCH Interrupt"
#define GPMI_NAND_DMA_CHANNELS_RES_NAME    "GPMI NAND DMA Channels"
#define GPMI_NAND_DMA_INTERRUPT_RES_NAME   "GPMI NAND DMA Interrupt"

/**
 * struct gpmi_nand_platform_data - GPMI NAND driver platform data.
 *
 * This structure communicates platform-specific information to the GPMI NAND
 * driver that can't be expressed as resources.
 *
 * @platform_init:           A pointer to a function the driver will call to
 *                           initialize the platform (e.g., set up the pin mux).
 * @min_prop_delay_in_ns:    Minimum propagation delay of GPMI signals to and
 *                           from the NAND Flash device, in nanoseconds.
 * @max_prop_delay_in_ns:    Maximum propagation delay of GPMI signals to and
 *                           from the NAND Flash device, in nanoseconds.
 * @max_chip_count:          The maximum number of chips for which the driver
 *                           should configure the hardware. This value most
 *                           likely reflects the number of pins that are
 *                           connected to a NAND Flash device. If this is
 *                           greater than the SoC hardware can support, the
 *                           driver will print a message and fail to initialize.
 * @partitions:              An optional pointer to an array of partition
 *                           descriptions.
 * @partition_count:         The number of elements in the partitions array.
 * @enable_bbt:              Enable the BBT or not.
 */
struct gpmi_nand_platform_data {
	/* SoC hardware information. */
	int		(*platform_init)(void);

	/* NAND Flash information. */
	unsigned int	min_prop_delay_in_ns;
	unsigned int	max_prop_delay_in_ns;
	unsigned int	max_chip_count;

	/* Medium information. */
	struct		mtd_partition *partitions;
	unsigned	partition_count;
	unsigned int	enable_bbt:1;
	unsigned int	enable_ddr:1;
};
#endif
