
#include <fb.h>
#include <video/atmel_lcdc.h>

struct atmel_lcdfb_info;

struct atmel_lcdfb_devdata {
	void (*start)(struct atmel_lcdfb_info *sinfo);
	void (*stop)(struct atmel_lcdfb_info *sinfo, u32 flags);
	void (*update_dma)(struct fb_info *info);
	void (*setup_core)(struct fb_info *info);
	void (*init_contrast)(struct atmel_lcdfb_info *sinfo);
	void (*limit_screeninfo)(struct fb_videomode *mode);
	int dma_desc_size;
};

struct atmel_lcdfb_info {
	struct fb_info		info;
	void __iomem		*mmio;
	struct device_d		*device;

	unsigned int		guard_time;
	unsigned int		smem_len;
	struct clk		*bus_clk;
	struct clk		*lcdc_clk;

	struct atmel_lcdfb_platform_data *pdata;
	struct atmel_lcdfb_devdata *dev_data;
	void			*dma_desc;
};

#define lcdc_readl(sinfo, reg)		__raw_readl((sinfo)->mmio+(reg))
#define lcdc_writel(sinfo, reg, val)	__raw_writel((val), (sinfo)->mmio+(reg))

#define ATMEL_LCDC_STOP_NOWAIT (1 << 0)

int atmel_lcdc_register(struct device_d *dev, struct atmel_lcdfb_devdata *data);
