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