1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef SH_MOBILE_LCDCFB_H 3 #define SH_MOBILE_LCDCFB_H 4 5 #include <linux/completion.h> 6 #include <linux/fb.h> 7 #include <linux/mutex.h> 8 #include <linux/wait.h> 9 10 /* per-channel registers */ 11 enum { LDDCKPAT1R, LDDCKPAT2R, LDMT1R, LDMT2R, LDMT3R, LDDFR, LDSM1R, 12 LDSM2R, LDSA1R, LDSA2R, LDMLSR, LDHCNR, LDHSYNR, LDVLNR, LDVSYNR, LDPMR, 13 LDHAJR, 14 NR_CH_REGS }; 15 16 #define PALETTE_NR 16 17 18 struct backlight_device; 19 struct fb_info; 20 struct module; 21 struct sh_mobile_lcdc_chan; 22 struct sh_mobile_lcdc_entity; 23 struct sh_mobile_lcdc_format_info; 24 struct sh_mobile_lcdc_priv; 25 26 #define SH_MOBILE_LCDC_DISPLAY_DISCONNECTED 0 27 #define SH_MOBILE_LCDC_DISPLAY_CONNECTED 1 28 29 struct sh_mobile_lcdc_entity_ops { 30 /* Display */ 31 int (*display_on)(struct sh_mobile_lcdc_entity *entity); 32 void (*display_off)(struct sh_mobile_lcdc_entity *entity); 33 }; 34 35 enum sh_mobile_lcdc_entity_event { 36 SH_MOBILE_LCDC_EVENT_DISPLAY_CONNECT, 37 SH_MOBILE_LCDC_EVENT_DISPLAY_DISCONNECT, 38 SH_MOBILE_LCDC_EVENT_DISPLAY_MODE, 39 }; 40 41 struct sh_mobile_lcdc_entity { 42 struct module *owner; 43 const struct sh_mobile_lcdc_entity_ops *ops; 44 struct sh_mobile_lcdc_chan *lcdc; 45 struct fb_videomode def_mode; 46 }; 47 48 /* 49 * struct sh_mobile_lcdc_chan - LCDC display channel 50 * 51 * @pan_y_offset: Panning linear offset in bytes (luma component) 52 * @base_addr_y: Frame buffer viewport base address (luma component) 53 * @base_addr_c: Frame buffer viewport base address (chroma component) 54 * @pitch: Frame buffer line pitch 55 */ 56 struct sh_mobile_lcdc_chan { 57 struct sh_mobile_lcdc_priv *lcdc; 58 struct sh_mobile_lcdc_entity *tx_dev; 59 const struct sh_mobile_lcdc_chan_cfg *cfg; 60 61 unsigned long *reg_offs; 62 unsigned long ldmt1r_value; 63 unsigned long enabled; /* ME and SE in LDCNT2R */ 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