#ifndef DDK750_CHIP_H__
#define DDK750_CHIP_H__
#define DEFAULT_INPUT_CLOCK 14318181 /* Default reference clock */
#ifndef SM750LE_REVISION_ID
#define SM750LE_REVISION_ID ((unsigned char)0xfe)
#endif

#include <linux/io.h>

/* This is all the chips recognized by this library */
typedef enum _logical_chip_type_t {
	SM_UNKNOWN,
	SM718,
	SM750,
	SM750LE,
}
logical_chip_type_t;

typedef enum _clock_type_t {
	MXCLK_PLL,
	PRIMARY_PLL,
	SECONDARY_PLL,
	VGA0_PLL,
	VGA1_PLL,
}
clock_type_t;

typedef struct _pll_value_t {
	clock_type_t clockType;
	unsigned long inputFreq; /* Input clock frequency to the PLL */

	/* Use this when clockType = PANEL_PLL */
	unsigned long M;
	unsigned long N;
	unsigned long OD;
	unsigned long POD;
}
pll_value_t;

/* input struct to initChipParam() function */
typedef struct _initchip_param_t {
	unsigned short powerMode;    /* Use power mode 0 or 1 */
	unsigned short chipClock;    /**
				      * Speed of main chip clock in MHz unit
				      * 0 = keep the current clock setting
				      * Others = the new main chip clock
				      */
	unsigned short memClock;     /**
				      * Speed of memory clock in MHz unit
				      * 0 = keep the current clock setting
				      * Others = the new memory clock
				      */
	unsigned short masterClock;  /**
				      * Speed of master clock in MHz unit
				      * 0 = keep the current clock setting
				      * Others = the new master clock
				      */
	unsigned short setAllEngOff; /**
				      * 0 = leave all engine state untouched.
				      * 1 = make sure they are off: 2D, Overlay,
				      * video alpha, alpha, hardware cursors
				      */
	unsigned char resetMemory;   /**
				      * 0 = Do not reset the memory controller
				      * 1 = Reset the memory controller
				      */

	/* More initialization parameter can be added if needed */
}
initchip_param_t;

logical_chip_type_t sm750_get_chip_type(void);
unsigned int calcPllValue(unsigned int request, pll_value_t *pll);
unsigned int formatPllReg(pll_value_t *pPLL);
void ddk750_set_mmio(void __iomem *, unsigned short, char);
unsigned int ddk750_getVMSize(void);
int ddk750_initHw(initchip_param_t *);

#endif
