diff options
Diffstat (limited to 'drivers/video/fbdev/sh_mobile_lcdcfb.h')
| -rw-r--r-- | drivers/video/fbdev/sh_mobile_lcdcfb.h | 112 | 
1 files changed, 112 insertions, 0 deletions
diff --git a/drivers/video/fbdev/sh_mobile_lcdcfb.h b/drivers/video/fbdev/sh_mobile_lcdcfb.h new file mode 100644 index 00000000000..f839adef1d9 --- /dev/null +++ b/drivers/video/fbdev/sh_mobile_lcdcfb.h @@ -0,0 +1,112 @@ +#ifndef SH_MOBILE_LCDCFB_H +#define SH_MOBILE_LCDCFB_H + +#include <linux/completion.h> +#include <linux/fb.h> +#include <linux/mutex.h> +#include <linux/wait.h> + +/* per-channel registers */ +enum { LDDCKPAT1R, LDDCKPAT2R, LDMT1R, LDMT2R, LDMT3R, LDDFR, LDSM1R, +       LDSM2R, LDSA1R, LDSA2R, LDMLSR, LDHCNR, LDHSYNR, LDVLNR, LDVSYNR, LDPMR, +       LDHAJR, +       NR_CH_REGS }; + +#define PALETTE_NR 16 + +struct backlight_device; +struct fb_info; +struct module; +struct sh_mobile_lcdc_chan; +struct sh_mobile_lcdc_entity; +struct sh_mobile_lcdc_format_info; +struct sh_mobile_lcdc_priv; + +#define SH_MOBILE_LCDC_DISPLAY_DISCONNECTED	0 +#define SH_MOBILE_LCDC_DISPLAY_CONNECTED	1 + +struct sh_mobile_lcdc_entity_ops { +	/* Display */ +	int (*display_on)(struct sh_mobile_lcdc_entity *entity); +	void (*display_off)(struct sh_mobile_lcdc_entity *entity); +}; + +enum sh_mobile_lcdc_entity_event { +	SH_MOBILE_LCDC_EVENT_DISPLAY_CONNECT, +	SH_MOBILE_LCDC_EVENT_DISPLAY_DISCONNECT, +	SH_MOBILE_LCDC_EVENT_DISPLAY_MODE, +}; + +struct sh_mobile_lcdc_entity { +	struct module *owner; +	const struct sh_mobile_lcdc_entity_ops *ops; +	struct sh_mobile_lcdc_chan *lcdc; +	struct fb_videomode def_mode; +}; + +/* + * struct sh_mobile_lcdc_chan - LCDC display channel + * + * @pan_y_offset: Panning linear offset in bytes (luma component) + * @base_addr_y: Frame buffer viewport base address (luma component) + * @base_addr_c: Frame buffer viewport base address (chroma component) + * @pitch: Frame buffer line pitch + */ +struct sh_mobile_lcdc_chan { +	struct sh_mobile_lcdc_priv *lcdc; +	struct sh_mobile_lcdc_entity *tx_dev; +	const struct sh_mobile_lcdc_chan_cfg *cfg; + +	unsigned long *reg_offs; +	unsigned long ldmt1r_value; +	unsigned long enabled; /* ME and SE in LDCNT2R */ +	void *cache; + +	struct mutex open_lock;		/* protects the use counter */ +	int use_count; + +	void *fb_mem; +	unsigned long fb_size; + +	dma_addr_t dma_handle; +	unsigned long pan_y_offset; + +	unsigned long frame_end; +	wait_queue_head_t frame_end_wait; +	struct completion vsync_completion; + +	const struct sh_mobile_lcdc_format_info *format; +	u32 colorspace; +	unsigned int xres; +	unsigned int xres_virtual; +	unsigned int yres; +	unsigned int yres_virtual; +	unsigned int pitch; + +	unsigned long base_addr_y; +	unsigned long base_addr_c; +	unsigned int line_size; + +	int (*notify)(struct sh_mobile_lcdc_chan *ch, +		      enum sh_mobile_lcdc_entity_event event, +		      const struct fb_videomode *mode, +		      const struct fb_monspecs *monspec); + +	/* Backlight */ +	struct backlight_device *bl; +	unsigned int bl_brightness; + +	/* FB */ +	struct fb_info *info; +	u32 pseudo_palette[PALETTE_NR]; +	struct { +		unsigned int width; +		unsigned int height; +		struct fb_videomode mode; +	} display; +	struct fb_deferred_io defio; +	struct scatterlist *sglist; +	int blank_status; +}; + +#endif  | 
