uboot/drivers/video/nexell/soc/s5pxx18_soc_dpc.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+
   2 *
   3 * Copyright (C) 2016  Nexell Co., Ltd.
   4 *
   5 * Author: junghyun, kim <jhkim@nexell.co.kr>
   6 */
   7
   8#ifndef _S5PXX18_SOC_DPC_H_
   9#define _S5PXX18_SOC_DPC_H_
  10
  11#include "s5pxx18_soc_disptype.h"
  12
  13#define IRQ_OFFSET      32
  14#define IRQ_DPC_P    (IRQ_OFFSET + 33)
  15#define IRQ_DPC_S   (IRQ_OFFSET + 34)
  16
  17#define NUMBER_OF_DPC_MODULE    2
  18#define PHY_BASEADDR_DPC0       0xC0102800
  19#define PHY_BASEADDR_DPC1       0xC0102C00
  20
  21#define PHY_BASEADDR_DPC_LIST   \
  22                { PHY_BASEADDR_DPC0, PHY_BASEADDR_DPC1 }
  23
  24struct nx_dpc_register_set {
  25        u32 ntsc_stata;
  26        u32 ntsc_ecmda;
  27        u32 ntsc_ecmdb;
  28        u32 ntsc_glk;
  29        u32 ntsc_sch;
  30        u32 ntsc_hue;
  31        u32 ntsc_sat;
  32        u32 ntsc_cont;
  33        u32 ntsc_bright;
  34        u32 ntsc_fsc_adjh;
  35        u32 ntsc_fsc_adjl;
  36        u32 ntsc_ecmdc;
  37        u32 ntsc_csdly;
  38        u32 __ntsc_reserved_0_[3];
  39        u32 ntsc_dacsel10;
  40        u32 ntsc_dacsel32;
  41        u32 ntsc_dacsel54;
  42        u32 ntsc_daclp;
  43        u32 ntsc_dacpd;
  44        u32 __ntsc_reserved_1_[(0x20 - 0x15)];
  45        u32 ntsc_icntl;
  46        u32 ntsc_hvoffst;
  47        u32 ntsc_hoffst;
  48        u32 ntsc_voffset;
  49        u32 ntsc_hsvso;
  50        u32 ntsc_hsob;
  51        u32 ntsc_hsoe;
  52        u32 ntsc_vsob;
  53        u32 ntsc_vsoe;
  54        u32 __reserved[(0xf8 / 4) - 0x29];
  55        u32 dpchtotal;
  56        u32 dpchswidth;
  57        u32 dpchastart;
  58        u32 dpchaend;
  59        u32 dpcvtotal;
  60        u32 dpcvswidth;
  61        u32 dpcvastart;
  62        u32 dpcvaend;
  63        u32 dpcctrl0;
  64        u32 dpcctrl1;
  65        u32 dpcevtotal;
  66        u32 dpcevswidth;
  67        u32 dpcevastart;
  68        u32 dpcevaend;
  69        u32 dpcctrl2;
  70        u32 dpcvseoffset;
  71        u32 dpcvssoffset;
  72        u32 dpcevseoffset;
  73        u32 dpcevssoffset;
  74        u32 dpcdelay0;
  75        u32 dpcupscalecon0;
  76        u32 dpcupscalecon1;
  77        u32 dpcupscalecon2;
  78
  79        u32 dpcrnumgencon0;
  80        u32 dpcrnumgencon1;
  81        u32 dpcrnumgencon2;
  82        u32 dpcrndconformula_l;
  83        u32 dpcrndconformula_h;
  84        u32 dpcfdtaddr;
  85        u32 dpcfrdithervalue;
  86        u32 dpcfgdithervalue;
  87        u32 dpcfbdithervalue;
  88        u32 dpcdelay1;
  89        u32 dpcmputime0;
  90        u32 dpcmputime1;
  91        u32 dpcmpuwrdatal;
  92        u32 dpcmpuindex;
  93        u32 dpcmpustatus;
  94        u32 dpcmpudatah;
  95        u32 dpcmpurdatal;
  96        u32 dpcdummy12;
  97        u32 dpccmdbufferdatal;
  98        u32 dpccmdbufferdatah;
  99        u32 dpcpolctrl;
 100        u32 dpcpadposition[8];
 101        u32 dpcrgbmask[2];
 102        u32 dpcrgbshift;
 103        u32 dpcdataflush;
 104        u32 __reserved06[((0x3c0) - (2 * 0x0ec)) / 4];
 105
 106        u32 dpcclkenb;
 107        u32 dpcclkgen[2][2];
 108};
 109
 110enum {
 111        nx_dpc_int_vsync = 0
 112};
 113
 114enum nx_dpc_format {
 115        nx_dpc_format_rgb555 = 0ul,
 116        nx_dpc_format_rgb565 = 1ul,
 117        nx_dpc_format_rgb666 = 2ul,
 118        nx_dpc_format_rgb666b = 18ul,
 119        nx_dpc_format_rgb888 = 3ul,
 120        nx_dpc_format_mrgb555a = 4ul,
 121        nx_dpc_format_mrgb555b = 5ul,
 122        nx_dpc_format_mrgb565 = 6ul,
 123        nx_dpc_format_mrgb666 = 7ul,
 124        nx_dpc_format_mrgb888a = 8ul,
 125        nx_dpc_format_mrgb888b = 9ul,
 126        nx_dpc_format_ccir656 = 10ul,
 127        nx_dpc_format_ccir601a = 12ul,
 128        nx_dpc_format_ccir601b = 13ul,
 129        nx_dpc_format_srgb888 = 14ul,
 130        nx_dpc_format_srgbd8888 = 15ul,
 131        nx_dpc_format_4096color = 1ul,
 132        nx_dpc_format_16gray = 3ul
 133};
 134
 135enum nx_dpc_ycorder {
 136        nx_dpc_ycorder_cb_ycr_y = 0ul,
 137        nx_dpc_ycorder_cr_ycb_y = 1ul,
 138        nx_dpc_ycorder_ycbycr = 2ul,
 139        nx_dpc_ycorder_ycrycb = 3ul
 140};
 141
 142enum nx_dpc_padclk {
 143        nx_dpc_padclk_vclk = 0ul,
 144        nx_dpc_padclk_vclk2 = 1ul,
 145        nx_dpc_padclk_vclk3 = 2ul
 146};
 147
 148enum nx_dpc_dither {
 149        nx_dpc_dither_bypass = 0ul,
 150        nx_dpc_dither_4bit = 1ul,
 151        nx_dpc_dither_5bit = 2ul,
 152        nx_dpc_dither_6bit = 3ul
 153};
 154
 155enum nx_dpc_vbs {
 156        nx_dpc_vbs_ntsc_m = 0ul,
 157        nx_dpc_vbs_ntsc_n = 1ul,
 158        nx_dpc_vbs_ntsc_443 = 2ul,
 159        nx_dpc_vbs_pal_m = 3ul,
 160        nx_dpc_vbs_pal_n = 4ul,
 161        nx_dpc_vbs_pal_bghi = 5ul,
 162        nx_dpc_vbs_pseudo_pal = 6ul,
 163        nx_dpc_vbs_pseudo_ntsc = 7ul
 164};
 165
 166enum nx_dpc_bandwidth {
 167        nx_dpc_bandwidth_low = 0ul,
 168        nx_dpc_bandwidth_medium = 1ul,
 169        nx_dpc_bandwidth_high = 2ul
 170};
 171
 172int nx_dpc_initialize(void);
 173u32 nx_dpc_get_number_of_module(void);
 174u32 nx_dpc_get_physical_address(u32 module_index);
 175u32 nx_dpc_get_size_of_register_set(void);
 176void nx_dpc_set_base_address(u32 module_index, void *base_address);
 177void *nx_dpc_get_base_address(u32 module_index);
 178int nx_dpc_open_module(u32 module_index);
 179int nx_dpc_close_module(u32 module_index);
 180int nx_dpc_check_busy(u32 module_index);
 181int nx_dpc_can_power_down(u32 module_index);
 182int32_t nx_dpc_get_interrupt_number(u32 module_index);
 183void nx_dpc_set_interrupt_enable(u32 module_index, int32_t int_num,
 184                                 int enable);
 185int nx_dpc_get_interrupt_enable(u32 module_index, int32_t int_num);
 186int nx_dpc_get_interrupt_pending(u32 module_index, int32_t int_num);
 187void nx_dpc_clear_interrupt_pending(u32 module_index, int32_t int_num);
 188void nx_dpc_set_interrupt_enable_all(u32 module_index, int enable);
 189int nx_dpc_get_interrupt_enable_all(u32 module_index);
 190int nx_dpc_get_interrupt_pending_all(u32 module_index);
 191void nx_dpc_clear_interrupt_pending_all(u32 module_index);
 192void nx_dpc_set_interrupt_enable32(u32 module_index, u32 enable_flag);
 193u32 nx_dpc_get_interrupt_enable32(u32 module_index);
 194u32 nx_dpc_get_interrupt_pending32(u32 module_index);
 195void nx_dpc_clear_interrupt_pending32(u32 module_index,
 196                                      u32 pending_flag);
 197int32_t nx_dpc_get_interrupt_pending_number(u32 module_index);
 198void nx_dpc_set_clock_pclk_mode(u32 module_index, enum nx_pclkmode mode);
 199enum nx_pclkmode nx_dpc_get_clock_pclk_mode(u32 module_index);
 200void nx_dpc_set_clock_source(u32 module_index, u32 index, u32 clk_src);
 201u32 nx_dpc_get_clock_source(u32 module_index, u32 index);
 202void nx_dpc_set_clock_divisor(u32 module_index, u32 index, u32 divisor);
 203u32 nx_dpc_get_clock_divisor(u32 module_index, u32 index);
 204void nx_dpc_set_clock_out_inv(u32 module_index, u32 index,
 205                              int out_clk_inv);
 206int nx_dpc_get_clock_out_inv(u32 module_index, u32 index);
 207void nx_dpc_set_clock_out_select(u32 module_index, u32 index,
 208                                 int bbypass);
 209int nx_dpc_get_clock_out_select(u32 module_index, u32 index);
 210void nx_dpc_set_clock_polarity(u32 module_index, int bpolarity);
 211int nx_dpc_get_clock_polarity(u32 module_index);
 212void nx_dpc_set_clock_out_enb(u32 module_index, u32 index,
 213                              int out_clk_enb);
 214int nx_dpc_get_clock_out_enb(u32 module_index, u32 index);
 215void nx_dpc_set_clock_out_delay(u32 module_index, u32 index, u32 delay);
 216u32 nx_dpc_get_clock_out_delay(u32 module_index, u32 index);
 217void nx_dpc_set_clock_divisor_enable(u32 module_index, int enable);
 218int nx_dpc_get_clock_divisor_enable(u32 module_index);
 219
 220void nx_dpc_set_dpc_enable(u32 module_index, int benb);
 221int nx_dpc_get_dpc_enable(u32 module_index);
 222void nx_dpc_set_delay(u32 module_index, u32 delay_rgb_pvd,
 223                      u32 delay_hs_cp1, u32 delay_vs_fram,
 224                      u32 delay_de_cp2);
 225void nx_dpc_get_delay(u32 module_index, u32 *pdelayrgb_pvd,
 226                      u32 *pdelayhs_cp1, u32 *pdelayvs_fram,
 227                      u32 *pdelayde_cp2);
 228void nx_dpc_set_dither(u32 module_index, enum nx_dpc_dither dither_r,
 229                       enum nx_dpc_dither dither_g,
 230                       enum nx_dpc_dither dither_b);
 231void nx_dpc_get_dither(u32 module_index, enum nx_dpc_dither *pditherr,
 232                       enum nx_dpc_dither *pditherg,
 233                       enum nx_dpc_dither *pditherb);
 234void nx_dpc_set_horizontal_up_scaler(u32 module_index, int benb,
 235                                     u32 sourcewidth, u32 destwidth);
 236void nx_dpc_get_horizontal_up_scaler(u32 module_index, int *pbenb,
 237                                     u32 *psourcewidth,
 238                                     u32 *pdestwidth);
 239
 240void nx_dpc_set_mode(u32 module_index, enum nx_dpc_format format,
 241                     int binterlace, int binvertfield, int brgbmode,
 242                     int bswaprb, enum nx_dpc_ycorder ycorder,
 243                     int bclipyc, int bembeddedsync,
 244                     enum nx_dpc_padclk clock, int binvertclock,
 245                     int bdualview);
 246void nx_dpc_get_mode(u32 module_index, enum nx_dpc_format *pformat,
 247                     int *pbinterlace, int *pbinvertfield,
 248                     int *pbrgbmode, int *pbswaprb,
 249                     enum nx_dpc_ycorder *pycorder, int *pbclipyc,
 250                     int *pbembeddedsync, enum nx_dpc_padclk *pclock,
 251                     int *pbinvertclock, int *pbdualview);
 252void nx_dpc_set_hsync(u32 module_index, u32 avwidth, u32 hsw, u32 hfp,
 253                      u32 hbp, int binvhsync);
 254void nx_dpc_get_hsync(u32 module_index, u32 *pavwidth, u32 *phsw,
 255                      u32 *phfp, u32 *phbp, int *pbinvhsync);
 256void nx_dpc_set_vsync(u32 module_index, u32 avheight, u32 vsw, u32 vfp,
 257                      u32 vbp, int binvvsync, u32 eavheight, u32 evsw,
 258                      u32 evfp, u32 evbp);
 259void nx_dpc_get_vsync(u32 module_index, u32 *pavheight, u32 *pvsw,
 260                      u32 *pvfp, u32 *pvbp, int *pbinvvsync,
 261                      u32 *peavheight, u32 *pevsw, u32 *pevfp,
 262                      u32 *pevbp);
 263void nx_dpc_set_vsync_offset(u32 module_index, u32 vssoffset,
 264                             u32 vseoffset, u32 evssoffset,
 265                             u32 evseoffset);
 266void nx_dpc_get_vsync_offset(u32 module_index, u32 *pvssoffset,
 267                             u32 *pvseoffset, u32 *pevssoffset,
 268                             u32 *pevseoffset);
 269
 270u32 nx_dpc_enable_pad_tft(u32 module_index, u32 mode_index);
 271u32 nx_dpc_enable_pad_i80(u32 module_index, u32 mode_index);
 272
 273enum syncgenmode {
 274        progressive = 0,
 275        interlace = 1
 276};
 277
 278enum polarity {
 279        polarity_activehigh = 0,
 280        polarity_activelow = 1
 281};
 282
 283enum outputformat {
 284        outputformat_rgb555 = 0,
 285        outputformat_rgb565 = 1,
 286        outputformat_rgb666 = 2,
 287        outputformat_rgb888 = 3,
 288        outputformat_mrgb555a = 4,
 289        outputformat_mrgb555b = 5,
 290        outputformat_mrgb565 = 6,
 291        outputformat_mrgb666 = 7,
 292        outputformat_mrgb888a = 8,
 293        outputformat_mrgb888b = 9,
 294        outputformat_bgr555 = 10,
 295        outputformat_bgr565 = 11,
 296        outputformat_bgr666 = 12,
 297        outputformat_bgr888 = 13,
 298        outputformat_mbgr555a = 14,
 299        outputformat_mbgr555b = 15,
 300        outputformat_mbgr565 = 16,
 301        outputformat_mbgr666 = 17,
 302        outputformat_mbgr888a = 18,
 303        outputformat_mbgr888b = 19,
 304        outputformat_ccir656 = 20,
 305        outputformat_ccir601_8 = 21,
 306        outputformat_ccir601_16a = 22,
 307        outputformat_ccir601_16b = 23,
 308        outputformat_srgb888 = 24,
 309        outputformat_srgbd8888 = 25
 310};
 311
 312enum outpadclksel {
 313        padvclk = 0,
 314        padvclk2 = 1,
 315        padvclk3 = 2
 316};
 317
 318enum qmode {
 319        qmode_220 = 0,
 320        qmode_256 = 1
 321};
 322
 323void nx_dpc_set_sync(u32 module_index, enum syncgenmode sync_gen_mode,
 324                     u32 avwidth, u32 avheight, u32 hsw, u32 hfp,
 325                     u32 hbp, u32 vsw, u32 vfp, u32 vbp,
 326                     enum polarity field_polarity,
 327                     enum polarity hsyncpolarity,
 328                     enum polarity vsyncpolarity, u32 even_vsw,
 329                     u32 even_vfp, u32 even_vbp, u32 vsetpixel,
 330                     u32 vsclrpixel, u32 evenvsetpixel,
 331                     u32 evenvsclrpixel);
 332void nx_dpc_set_output_format(u32 module_index,
 333                              enum outputformat output_format,
 334                              u8 output_video_config);
 335void nx_dpc_set_quantization_mode(u32 module_index, enum qmode rgb2yc,
 336                                  enum qmode yc2rgb);
 337void nx_dpc_set_enable(u32 module_index, int enable, int rgbmode,
 338                       int use_ntscsync, int use_analog_output,
 339                       int seavenable);
 340void nx_dpc_set_enable_with_interlace(u32 module_index, int enable,
 341                                      int rgbmode, int use_ntscsync,
 342                                      int use_analog_output,
 343                                      int seavenable);
 344void nx_dpc_set_enable_with_interlace(u32 module_index, int enable,
 345                                      int rgbmode, int use_ntscsync,
 346                                      int use_analog_output,
 347                                      int seavenable);
 348void nx_dpc_set_out_video_clk_select(u32 module_index,
 349                                     enum outpadclksel out_pad_vclk_sel);
 350void nx_dpc_set_reg_flush(u32 module_index);
 351void nx_dpc_set_sramon(u32 module_index);
 352void nx_dpc_set_sync_lcdtype(u32 module_index, int stnlcd,
 353                             int dual_view_enb, int bit_widh,
 354                             u8 cpcycle);
 355void nx_dpc_set_up_scale_control(u32 module_index, int up_scale_enb,
 356                                 int filter_enb, u32 hscale,
 357                                 u16 source_width);
 358
 359void nx_dpc_set_mputime(u32 module_index, u8 setup, u8 hold, u8 acc);
 360void nx_dpc_set_index(u32 module_index, u32 index);
 361void nx_dpc_set_data(u32 module_index, u32 data);
 362void nx_dpc_set_cmd_buffer_flush(u32 module_index);
 363void nx_dpc_set_cmd_buffer_clear(u32 module_index);
 364void nx_dpc_set_cmd_buffer_write(u32 module_index, u32 cmd_data);
 365void nx_dpc_set(u32 module_index);
 366u32 nx_dpc_get_data(u32 module_index);
 367u32 nx_dpc_get_status(u32 module_index);
 368void nx_dpc_rgbmask(u32 module_index, u32 rgbmask);
 369void nx_dpc_set_pad_location(u32 module_index, u32 index, u32 regvalue);
 370u32 nx_dpc_get_field_flag(u32 module_index);
 371
 372void nx_dpc_set_sync_v(u32 module_index, u32 avheight, u32 vsw, u32 vfp,
 373                       u32 vbp);
 374
 375int nx_dpc_init_reg_test(u32 module_index);
 376void nx_dpc_set_encoder_control_reg(u32 module_index, u32 param_a,
 377                                    u32 param_b, u32 param_c);
 378void nx_dpc_set_encoder_shcphase_control(u32 module_index,
 379                                         u32 chroma_param);
 380void nx_dpc_set_encoder_timing_config_reg(u32 module_index, u32 inctl);
 381void nx_dpc_set_encoder_dacoutput_select(u32 module_index, u8 dacsel0,
 382                                         u8 dacsel1, u8 dacsel2,
 383                                         u8 dacsel3, u8 dacsel4,
 384                                         u8 dacsel5);
 385void nx_dpc_set_encoder_sync_location(u32 module_index, u16 hsoe,
 386                                      u16 hsob, u16 vsob, u16 vsoe,
 387                                      u8 vsost, int novrst);
 388void nx_dpc_set_encoder_dacpower_enable(u32 module_index, u8 dacpd);
 389void nx_dpc_set_ycorder(u32 module_index, enum nx_dpc_ycorder ycorder);
 390void nx_dpc_set_luma_gain(u32 module_index, u32 luma_gain);
 391
 392void nx_dpc_set_secondary_dpcsync(u32 module_index, int benb);
 393int nx_dpc_get_secondary_dpcsync(u32 module_index);
 394void nx_dpc_set_encenable(u32 module_index, int benb);
 395int nx_dpc_get_encenable(u32 module_index);
 396void nx_dpc_set_video_encoder_power_down(u32 module_index, int benb);
 397int nx_dpc_get_video_encoder_power_down(u32 module_index);
 398void nx_dpc_set_video_encoder_mode(u32 module_index, enum nx_dpc_vbs vbs,
 399                                   int bpedestal);
 400void nx_dpc_set_video_encoder_schlock_control(u32 module_index,
 401                                              int bfreerun);
 402int nx_dpc_get_video_encoder_schlock_control(u32 module_index);
 403void nx_dpc_set_video_encoder_bandwidth(u32 module_index,
 404                                        enum nx_dpc_bandwidth luma,
 405                                        enum nx_dpc_bandwidth chroma);
 406void nx_dpc_get_video_encoder_bandwidth(u32 module_index,
 407                                        enum nx_dpc_bandwidth *pluma,
 408                                        enum nx_dpc_bandwidth *pchroma);
 409void nx_dpc_set_video_encoder_color_control(u32 module_index, s8 sch,
 410                                            s8 hue, s8 sat,
 411                                            s8 crt, s8 brt);
 412void nx_dpc_get_video_encoder_color_control(u32 module_index,
 413                                            s8 *psch, s8 *phue,
 414                                            s8 *psat, s8 *pcrt,
 415                                            s8 *pbrt);
 416void nx_dpc_set_video_encoder_fscadjust(u32 module_index,
 417                                        int16_t adjust);
 418u16 nx_dpc_get_video_encoder_fscadjust(u32 module_index);
 419void nx_dpc_set_video_encoder_timing(u32 module_index, u32 hsos,
 420                                     u32 hsoe, u32 vsos, u32 vsoe);
 421void nx_dpc_get_video_encoder_timing(u32 module_index, u32 *phsos,
 422                                     u32 *phsoe, u32 *pvsos,
 423                                     u32 *pvsoe);
 424void nx_dpc_set_sync_v(u32 module_index, u32 avheight, u32 vsw, u32 vfp,
 425                       u32 vbp);
 426
 427int nx_dpc_init_reg_test(u32 module_index);
 428void nx_dpc_set_encoder_control_reg(u32 module_index, u32 param_a,
 429                                    u32 param_b, u32 param_c);
 430void nx_dpc_set_encoder_shcphase_control(u32 module_index,
 431                                         u32 chroma_param);
 432void nx_dpc_set_encoder_timing_config_reg(u32 module_index, u32 inctl);
 433void nx_dpc_set_encoder_dacoutput_select(u32 module_index, u8 dacsel0,
 434                                         u8 dacsel1, u8 dacsel2,
 435                                         u8 dacsel3, u8 dacsel4,
 436                                         u8 dacsel5);
 437void nx_dpc_set_encoder_sync_location(u32 module_index, u16 hsoe,
 438                                      u16 hsob, u16 vsob, u16 vsoe,
 439                                      u8 vsost, int novrst);
 440void nx_dpc_set_encoder_dacpower_enable(u32 module_index, u8 dacpd);
 441void nx_dpc_set_ycorder(u32 module_index, enum nx_dpc_ycorder ycorder);
 442void nx_dpc_set_luma_gain(u32 module_index, u32 luma_gain);
 443
 444#endif
 445