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