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