| 
									
										
										
										
											2010-09-03 07:20:23 +00:00
										 |  |  | #ifndef SH_MOBILE_LCDCFB_H
 | 
					
						
							|  |  |  | #define SH_MOBILE_LCDCFB_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/completion.h>
 | 
					
						
							|  |  |  | #include <linux/fb.h>
 | 
					
						
							| 
									
										
										
										
											2010-09-14 14:48:54 +00:00
										 |  |  | #include <linux/mutex.h>
 | 
					
						
							| 
									
										
										
										
											2010-09-03 07:20:23 +00:00
										 |  |  | #include <linux/wait.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* per-channel registers */ | 
					
						
							|  |  |  | enum { LDDCKPAT1R, LDDCKPAT2R, LDMT1R, LDMT2R, LDMT3R, LDDFR, LDSM1R, | 
					
						
							| 
									
										
										
										
											2011-02-24 05:47:13 +00:00
										 |  |  |        LDSM2R, LDSA1R, LDSA2R, LDMLSR, LDHCNR, LDHSYNR, LDVLNR, LDVSYNR, LDPMR, | 
					
						
							| 
									
										
										
										
											2010-09-03 07:20:23 +00:00
										 |  |  |        LDHAJR, | 
					
						
							|  |  |  |        NR_CH_REGS }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define PALETTE_NR 16
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-16 03:49:01 +00:00
										 |  |  | struct backlight_device; | 
					
						
							| 
									
										
										
										
											2011-09-11 18:15:36 +02:00
										 |  |  | struct fb_info; | 
					
						
							|  |  |  | struct module; | 
					
						
							| 
									
										
										
										
											2011-11-29 16:05:36 +01:00
										 |  |  | struct sh_mobile_lcdc_chan; | 
					
						
							| 
									
										
										
										
											2011-09-11 18:15:36 +02:00
										 |  |  | struct sh_mobile_lcdc_entity; | 
					
						
							| 
									
										
										
										
											2011-11-29 16:05:36 +01:00
										 |  |  | struct sh_mobile_lcdc_format_info; | 
					
						
							| 
									
										
										
										
											2011-09-11 18:15:36 +02:00
										 |  |  | struct sh_mobile_lcdc_priv; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-28 23:19:59 +01:00
										 |  |  | #define SH_MOBILE_LCDC_DISPLAY_DISCONNECTED	0
 | 
					
						
							|  |  |  | #define SH_MOBILE_LCDC_DISPLAY_CONNECTED	1
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-11 18:15:36 +02:00
										 |  |  | struct sh_mobile_lcdc_entity_ops { | 
					
						
							|  |  |  | 	/* Display */ | 
					
						
							| 
									
										
										
										
											2011-09-18 12:26:50 +02:00
										 |  |  | 	int (*display_on)(struct sh_mobile_lcdc_entity *entity); | 
					
						
							| 
									
										
										
										
											2011-09-11 18:15:36 +02:00
										 |  |  | 	void (*display_off)(struct sh_mobile_lcdc_entity *entity); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-18 14:14:46 +02:00
										 |  |  | enum sh_mobile_lcdc_entity_event { | 
					
						
							|  |  |  | 	SH_MOBILE_LCDC_EVENT_DISPLAY_CONNECT, | 
					
						
							|  |  |  | 	SH_MOBILE_LCDC_EVENT_DISPLAY_DISCONNECT, | 
					
						
							|  |  |  | 	SH_MOBILE_LCDC_EVENT_DISPLAY_MODE, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-11 18:15:36 +02:00
										 |  |  | struct sh_mobile_lcdc_entity { | 
					
						
							|  |  |  | 	struct module *owner; | 
					
						
							|  |  |  | 	const struct sh_mobile_lcdc_entity_ops *ops; | 
					
						
							| 
									
										
										
										
											2011-09-18 12:21:17 +02:00
										 |  |  | 	struct sh_mobile_lcdc_chan *lcdc; | 
					
						
							| 
									
										
										
										
											2011-11-29 01:46:12 +01:00
										 |  |  | 	struct fb_videomode def_mode; | 
					
						
							| 
									
										
										
										
											2011-09-11 18:15:36 +02:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2010-09-03 07:20:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-13 12:13:47 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * struct sh_mobile_lcdc_chan - LCDC display channel | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2012-03-15 18:15:37 +01:00
										 |  |  |  * @pan_y_offset: Panning linear offset in bytes (luma component) | 
					
						
							| 
									
										
										
										
											2011-07-13 12:13:47 +02:00
										 |  |  |  * @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 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2010-09-03 07:20:23 +00:00
										 |  |  | struct sh_mobile_lcdc_chan { | 
					
						
							|  |  |  | 	struct sh_mobile_lcdc_priv *lcdc; | 
					
						
							| 
									
										
										
										
											2011-09-11 22:59:04 +02:00
										 |  |  | 	struct sh_mobile_lcdc_entity *tx_dev; | 
					
						
							| 
									
										
										
										
											2011-11-22 00:56:58 +01:00
										 |  |  | 	const struct sh_mobile_lcdc_chan_cfg *cfg; | 
					
						
							| 
									
										
										
										
											2011-09-11 22:59:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-03 07:20:23 +00:00
										 |  |  | 	unsigned long *reg_offs; | 
					
						
							|  |  |  | 	unsigned long ldmt1r_value; | 
					
						
							|  |  |  | 	unsigned long enabled; /* ME and SE in LDCNT2R */ | 
					
						
							| 
									
										
										
										
											2012-03-15 12:40:47 +01:00
										 |  |  | 	void *cache; | 
					
						
							| 
									
										
										
										
											2011-11-29 14:03:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	struct mutex open_lock;		/* protects the use counter */ | 
					
						
							|  |  |  | 	int use_count; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-29 14:37:35 +01:00
										 |  |  | 	void *fb_mem; | 
					
						
							|  |  |  | 	unsigned long fb_size; | 
					
						
							| 
									
										
										
										
											2011-11-22 00:56:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-03 07:20:23 +00:00
										 |  |  | 	dma_addr_t dma_handle; | 
					
						
							| 
									
										
										
										
											2012-03-15 18:15:37 +01:00
										 |  |  | 	unsigned long pan_y_offset; | 
					
						
							| 
									
										
										
										
											2011-11-29 14:03:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	unsigned long frame_end; | 
					
						
							| 
									
										
										
										
											2010-09-03 07:20:23 +00:00
										 |  |  | 	wait_queue_head_t frame_end_wait; | 
					
						
							|  |  |  | 	struct completion vsync_completion; | 
					
						
							| 
									
										
										
										
											2011-07-13 12:13:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-29 16:05:36 +01:00
										 |  |  | 	const struct sh_mobile_lcdc_format_info *format; | 
					
						
							| 
									
										
										
										
											2011-11-30 23:07:30 +01:00
										 |  |  | 	u32 colorspace; | 
					
						
							|  |  |  | 	unsigned int xres; | 
					
						
							|  |  |  | 	unsigned int xres_virtual; | 
					
						
							|  |  |  | 	unsigned int yres; | 
					
						
							|  |  |  | 	unsigned int yres_virtual; | 
					
						
							|  |  |  | 	unsigned int pitch; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-13 12:13:47 +02:00
										 |  |  | 	unsigned long base_addr_y; | 
					
						
							|  |  |  | 	unsigned long base_addr_c; | 
					
						
							| 
									
										
										
										
											2012-05-18 10:58:26 +02:00
										 |  |  | 	unsigned int line_size; | 
					
						
							| 
									
										
										
										
											2011-09-18 14:14:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	int (*notify)(struct sh_mobile_lcdc_chan *ch, | 
					
						
							|  |  |  | 		      enum sh_mobile_lcdc_entity_event event, | 
					
						
							| 
									
										
										
										
											2011-11-29 01:05:47 +01:00
										 |  |  | 		      const struct fb_videomode *mode, | 
					
						
							|  |  |  | 		      const struct fb_monspecs *monspec); | 
					
						
							| 
									
										
										
										
											2011-11-29 14:03:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* Backlight */ | 
					
						
							|  |  |  | 	struct backlight_device *bl; | 
					
						
							| 
									
										
										
										
											2012-08-15 18:10:03 +02:00
										 |  |  | 	unsigned int bl_brightness; | 
					
						
							| 
									
										
										
										
											2011-11-29 14:03:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* 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; | 
					
						
							| 
									
										
										
										
											2010-09-03 07:20:23 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |