1 #ifndef SH_MOBILE_LCDCFB_H 2 #define SH_MOBILE_LCDCFB_H 3 4 #include <linux/completion.h> 5 #include <linux/fb.h> 6 #include <linux/mutex.h> 7 #include <linux/wait.h> 8 9 /* per-channel registers */ 10 enum { LDDCKPAT1R, LDDCKPAT2R, LDMT1R, LDMT2R, LDMT3R, LDDFR, LDSM1R, 11 LDSM2R, LDSA1R, LDSA2R, LDMLSR, LDHCNR, LDHSYNR, LDVLNR, LDVSYNR, LDPMR, 12 LDHAJR, 13 NR_CH_REGS }; 14 15 #define PALETTE_NR 16 16 17 struct backlight_device; 18 struct fb_info; 19 struct module; 20 struct sh_mobile_lcdc_chan; 21 struct sh_mobile_lcdc_entity; 22 struct sh_mobile_lcdc_format_info; 23 struct sh_mobile_lcdc_priv; 24 25 #define SH_MOBILE_LCDC_DISPLAY_DISCONNECTED 0 26 #define SH_MOBILE_LCDC_DISPLAY_CONNECTED 1 27 28 struct sh_mobile_lcdc_entity_ops { 29 /* Display */ 30 int (*display_on)(struct sh_mobile_lcdc_entity *entity); 31 void (*display_off)(struct sh_mobile_lcdc_entity *entity); 32 }; 33 34 enum sh_mobile_lcdc_entity_event { 35 SH_MOBILE_LCDC_EVENT_DISPLAY_CONNECT, 36 SH_MOBILE_LCDC_EVENT_DISPLAY_DISCONNECT, 37 SH_MOBILE_LCDC_EVENT_DISPLAY_MODE, 38 }; 39 40 struct sh_mobile_lcdc_entity { 41 struct module *owner; 42 const struct sh_mobile_lcdc_entity_ops *ops; 43 struct sh_mobile_lcdc_chan *lcdc; 44 struct fb_videomode def_mode; 45 }; 46 47 /* 48 * struct sh_mobile_lcdc_chan - LCDC display channel 49 * 50 * @pan_y_offset: Panning linear offset in bytes (luma component) 51 * @base_addr_y: Frame buffer viewport base address (luma component) 52 * @base_addr_c: Frame buffer viewport base address (chroma component) 53 * @pitch: Frame buffer line pitch 54 */ 55 struct sh_mobile_lcdc_chan { 56 struct sh_mobile_lcdc_priv *lcdc; 57 struct sh_mobile_lcdc_entity *tx_dev; 58 const struct sh_mobile_lcdc_chan_cfg *cfg; 59 60 unsigned long *reg_offs; 61 unsigned long ldmt1r_value; 62 unsigned long enabled; /* ME and SE in LDCNT2R */ 63 void *cache; 64 65 struct mutex open_lock; /* protects the use counter */ 66 int use_count; 67 68 void *fb_mem; 69 unsigned long fb_size; 70 71 dma_addr_t dma_handle; 72 unsigned long pan_y_offset; 73 74 unsigned long frame_end; 75 wait_queue_head_t frame_end_wait; 76 struct completion vsync_completion; 77 78 const struct sh_mobile_lcdc_format_info *format; 79 u32 colorspace; 80 unsigned int xres; 81 unsigned int xres_virtual; 82 unsigned int yres; 83 unsigned int yres_virtual; 84 unsigned int pitch; 85 86 unsigned long base_addr_y; 87 unsigned long base_addr_c; 88 unsigned int line_size; 89 90 int (*notify)(struct sh_mobile_lcdc_chan *ch, 91 enum sh_mobile_lcdc_entity_event event, 92 const struct fb_videomode *mode, 93 const struct fb_monspecs *monspec); 94 95 /* Backlight */ 96 struct backlight_device *bl; 97 unsigned int bl_brightness; 98 99 /* FB */ 100 struct fb_info *info; 101 u32 pseudo_palette[PALETTE_NR]; 102 struct { 103 unsigned int width; 104 unsigned int height; 105 struct fb_videomode mode; 106 } display; 107 struct fb_deferred_io defio; 108 struct scatterlist *sglist; 109 int blank_status; 110 }; 111 112 #endif 113