0001
0002 #ifndef __ASM_SH_MOBILE_LCDC_H__
0003 #define __ASM_SH_MOBILE_LCDC_H__
0004
0005 #include <linux/fb.h>
0006
0007
0008 #define _LDDCKR 0x410
0009 #define LDDCKR_ICKSEL_BUS (0 << 16)
0010 #define LDDCKR_ICKSEL_MIPI (1 << 16)
0011 #define LDDCKR_ICKSEL_HDMI (2 << 16)
0012 #define LDDCKR_ICKSEL_EXT (3 << 16)
0013 #define LDDCKR_ICKSEL_MASK (7 << 16)
0014 #define LDDCKR_MOSEL (1 << 6)
0015 #define _LDDCKSTPR 0x414
0016 #define _LDINTR 0x468
0017 #define LDINTR_FE (1 << 10)
0018 #define LDINTR_VSE (1 << 9)
0019 #define LDINTR_VEE (1 << 8)
0020 #define LDINTR_FS (1 << 2)
0021 #define LDINTR_VSS (1 << 1)
0022 #define LDINTR_VES (1 << 0)
0023 #define LDINTR_STATUS_MASK (0xff << 0)
0024 #define _LDSR 0x46c
0025 #define LDSR_MSS (1 << 10)
0026 #define LDSR_MRS (1 << 8)
0027 #define LDSR_AS (1 << 1)
0028 #define _LDCNT1R 0x470
0029 #define LDCNT1R_DE (1 << 0)
0030 #define _LDCNT2R 0x474
0031 #define LDCNT2R_BR (1 << 8)
0032 #define LDCNT2R_MD (1 << 3)
0033 #define LDCNT2R_SE (1 << 2)
0034 #define LDCNT2R_ME (1 << 1)
0035 #define LDCNT2R_DO (1 << 0)
0036 #define _LDRCNTR 0x478
0037 #define LDRCNTR_SRS (1 << 17)
0038 #define LDRCNTR_SRC (1 << 16)
0039 #define LDRCNTR_MRS (1 << 1)
0040 #define LDRCNTR_MRC (1 << 0)
0041 #define _LDDDSR 0x47c
0042 #define LDDDSR_LS (1 << 2)
0043 #define LDDDSR_WS (1 << 1)
0044 #define LDDDSR_BS (1 << 0)
0045
0046 #define LDMT1R_VPOL (1 << 28)
0047 #define LDMT1R_HPOL (1 << 27)
0048 #define LDMT1R_DWPOL (1 << 26)
0049 #define LDMT1R_DIPOL (1 << 25)
0050 #define LDMT1R_DAPOL (1 << 24)
0051 #define LDMT1R_HSCNT (1 << 17)
0052 #define LDMT1R_DWCNT (1 << 16)
0053 #define LDMT1R_IFM (1 << 12)
0054 #define LDMT1R_MIFTYP_RGB8 (0x0 << 0)
0055 #define LDMT1R_MIFTYP_RGB9 (0x4 << 0)
0056 #define LDMT1R_MIFTYP_RGB12A (0x5 << 0)
0057 #define LDMT1R_MIFTYP_RGB12B (0x6 << 0)
0058 #define LDMT1R_MIFTYP_RGB16 (0x7 << 0)
0059 #define LDMT1R_MIFTYP_RGB18 (0xa << 0)
0060 #define LDMT1R_MIFTYP_RGB24 (0xb << 0)
0061 #define LDMT1R_MIFTYP_YCBCR (0xf << 0)
0062 #define LDMT1R_MIFTYP_SYS8A (0x0 << 0)
0063 #define LDMT1R_MIFTYP_SYS8B (0x1 << 0)
0064 #define LDMT1R_MIFTYP_SYS8C (0x2 << 0)
0065 #define LDMT1R_MIFTYP_SYS8D (0x3 << 0)
0066 #define LDMT1R_MIFTYP_SYS9 (0x4 << 0)
0067 #define LDMT1R_MIFTYP_SYS12 (0x5 << 0)
0068 #define LDMT1R_MIFTYP_SYS16A (0x7 << 0)
0069 #define LDMT1R_MIFTYP_SYS16B (0x8 << 0)
0070 #define LDMT1R_MIFTYP_SYS16C (0x9 << 0)
0071 #define LDMT1R_MIFTYP_SYS18 (0xa << 0)
0072 #define LDMT1R_MIFTYP_SYS24 (0xb << 0)
0073 #define LDMT1R_MIFTYP_MASK (0xf << 0)
0074
0075 #define LDDFR_CF1 (1 << 18)
0076 #define LDDFR_CF0 (1 << 17)
0077 #define LDDFR_CC (1 << 16)
0078 #define LDDFR_YF_420 (0 << 8)
0079 #define LDDFR_YF_422 (1 << 8)
0080 #define LDDFR_YF_444 (2 << 8)
0081 #define LDDFR_YF_MASK (3 << 8)
0082 #define LDDFR_PKF_ARGB32 (0x00 << 0)
0083 #define LDDFR_PKF_RGB16 (0x03 << 0)
0084 #define LDDFR_PKF_RGB24 (0x0b << 0)
0085 #define LDDFR_PKF_MASK (0x1f << 0)
0086
0087 #define LDSM1R_OS (1 << 0)
0088
0089 #define LDSM2R_OSTRG (1 << 0)
0090
0091 #define LDPMR_LPS (3 << 0)
0092
0093 #define _LDDWD0R 0x800
0094 #define LDDWDxR_WDACT (1 << 28)
0095 #define LDDWDxR_RSW (1 << 24)
0096 #define _LDDRDR 0x840
0097 #define LDDRDR_RSR (1 << 24)
0098 #define LDDRDR_DRD_MASK (0x3ffff << 0)
0099 #define _LDDWAR 0x900
0100 #define LDDWAR_WA (1 << 0)
0101 #define _LDDRAR 0x904
0102 #define LDDRAR_RA (1 << 0)
0103
0104 enum {
0105 RGB8 = LDMT1R_MIFTYP_RGB8,
0106 RGB9 = LDMT1R_MIFTYP_RGB9,
0107 RGB12A = LDMT1R_MIFTYP_RGB12A,
0108 RGB12B = LDMT1R_MIFTYP_RGB12B,
0109 RGB16 = LDMT1R_MIFTYP_RGB16,
0110 RGB18 = LDMT1R_MIFTYP_RGB18,
0111 RGB24 = LDMT1R_MIFTYP_RGB24,
0112 YUV422 = LDMT1R_MIFTYP_YCBCR,
0113 SYS8A = LDMT1R_IFM | LDMT1R_MIFTYP_SYS8A,
0114 SYS8B = LDMT1R_IFM | LDMT1R_MIFTYP_SYS8B,
0115 SYS8C = LDMT1R_IFM | LDMT1R_MIFTYP_SYS8C,
0116 SYS8D = LDMT1R_IFM | LDMT1R_MIFTYP_SYS8D,
0117 SYS9 = LDMT1R_IFM | LDMT1R_MIFTYP_SYS9,
0118 SYS12 = LDMT1R_IFM | LDMT1R_MIFTYP_SYS12,
0119 SYS16A = LDMT1R_IFM | LDMT1R_MIFTYP_SYS16A,
0120 SYS16B = LDMT1R_IFM | LDMT1R_MIFTYP_SYS16B,
0121 SYS16C = LDMT1R_IFM | LDMT1R_MIFTYP_SYS16C,
0122 SYS18 = LDMT1R_IFM | LDMT1R_MIFTYP_SYS18,
0123 SYS24 = LDMT1R_IFM | LDMT1R_MIFTYP_SYS24,
0124 };
0125
0126 enum { LCDC_CHAN_DISABLED = 0,
0127 LCDC_CHAN_MAINLCD,
0128 LCDC_CHAN_SUBLCD };
0129
0130 enum { LCDC_CLK_BUS, LCDC_CLK_PERIPHERAL, LCDC_CLK_EXTERNAL };
0131
0132 #define LCDC_FLAGS_DWPOL (1 << 0)
0133 #define LCDC_FLAGS_DIPOL (1 << 1)
0134 #define LCDC_FLAGS_DAPOL (1 << 2)
0135 #define LCDC_FLAGS_HSCNT (1 << 3)
0136 #define LCDC_FLAGS_DWCNT (1 << 4)
0137
0138 struct sh_mobile_lcdc_sys_bus_cfg {
0139 unsigned long ldmt2r;
0140 unsigned long ldmt3r;
0141 unsigned long deferred_io_msec;
0142 };
0143
0144 struct sh_mobile_lcdc_sys_bus_ops {
0145 void (*write_index)(void *handle, unsigned long data);
0146 void (*write_data)(void *handle, unsigned long data);
0147 unsigned long (*read_data)(void *handle);
0148 };
0149
0150 struct sh_mobile_lcdc_panel_cfg {
0151 unsigned long width;
0152 unsigned long height;
0153 int (*setup_sys)(void *sys_ops_handle,
0154 struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
0155 void (*start_transfer)(void *sys_ops_handle,
0156 struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
0157 void (*display_on)(void);
0158 void (*display_off)(void);
0159 };
0160
0161
0162 struct sh_mobile_lcdc_bl_info {
0163 const char *name;
0164 int max_brightness;
0165 int (*set_brightness)(int brightness);
0166 };
0167
0168 struct sh_mobile_lcdc_overlay_cfg {
0169 int fourcc;
0170 unsigned int max_xres;
0171 unsigned int max_yres;
0172 };
0173
0174 struct sh_mobile_lcdc_chan_cfg {
0175 int chan;
0176 int fourcc;
0177 int colorspace;
0178 int interface_type;
0179 int clock_divider;
0180 unsigned long flags;
0181 const struct fb_videomode *lcd_modes;
0182 int num_modes;
0183 struct sh_mobile_lcdc_panel_cfg panel_cfg;
0184 struct sh_mobile_lcdc_bl_info bl_info;
0185 struct sh_mobile_lcdc_sys_bus_cfg sys_bus_cfg;
0186
0187 struct platform_device *tx_dev;
0188 };
0189
0190 struct sh_mobile_lcdc_info {
0191 int clock_source;
0192 struct sh_mobile_lcdc_chan_cfg ch[2];
0193 struct sh_mobile_lcdc_overlay_cfg overlays[4];
0194 };
0195
0196 #endif