typedef struct tagCS5530PLLENTRY
{
long frequency;
unsigned long pll_value;
}
CS5530PLLENTRY;
CS5530PLLENTRY CS5530_PLLtable[] = {
{0x00192CCC, 0x31C45801,},
{0x001C526E, 0x20E36802,},
{0x001F8000, 0x33915801,},
{0x00240000, 0x31EC4801,},
{0x00258000, 0x21E22801,},
{0x00280000, 0x33088801,},
{0x002CE666, 0x33E22801,},
{0x00318000, 0x336C4801,},
{0x00320000, 0x23088801,},
{0x00325999, 0x23088801,},
{0x00360000, 0x3708A801,},
{0x00384000, 0x23E36802,},
{0x0038643F, 0x23E36802,},
{0x0038A4DD, 0x23E36802,},
{0x003B0000, 0x37C45801,},
{0x003F0000, 0x23EC4801,},
{0x00410000, 0x37911801,},
{0x00438000, 0x37963803,},
{0x0046CCCC, 0x37058803,},
{0x00480000, 0x3710C805,},
{0x004B0000, 0x37E22801,},
{0x004EC000, 0x27915801,},
{0x00500000, 0x37D8D802,},
{0x0059CCCC, 0x27588802,},
{0x005E8000, 0x27EC4802,},
{0x00630000, 0x27AC6803,},
{0x00640000, 0x27088801,},
{0x006C0000, 0x2710C805,},
{0x00708000, 0x27E36802,},
{0x00820000, 0x27C58803,},
{0x00870000, 0x27316803,},
{0x009D8000, 0x2F915801,},
{0x00A20000, 0x2F08A801,},
{0x00AF0000, 0x2FB11802,},
{0x00BD0000, 0x2FEC4802,},
{0x00CA0000, 0x2F963803,},
{0x00E80000, 0x2FB1B802,},
};
#define NUM_CS5530_FREQUENCIES sizeof(CS5530_PLLtable)/sizeof(CS5530PLLENTRY)
int cs5530_set_video_enable(int enable);
int cs5530_set_video_format(unsigned long format);
int cs5530_set_video_size(unsigned short width, unsigned short height);
int cs5530_set_video_yuv_pitch(unsigned long ypitch, unsigned long uvpitch);
int cs5530_set_video_offset(unsigned long offset);
int cs5530_set_video_yuv_offsets(unsigned long yoffset, unsigned long uoffset,
unsigned long voffset);
int cs5530_set_video_window(short x, short y, unsigned short w,
unsigned short h);
int cs5530_set_video_left_crop(unsigned short x);
int cs5530_set_video_upscale(unsigned short srcw, unsigned short srch,
unsigned short dstw, unsigned short dsth);
int cs5530_set_video_scale(unsigned short srcw, unsigned short srch,
unsigned short dstw, unsigned short dsth);
int cs5530_set_video_vertical_downscale(unsigned short srch,
unsigned short dsth);
void cs5530_set_video_vertical_downscale_enable(int enable);
int cs5530_set_video_downscale_config(unsigned short type, unsigned short m);
int cs5530_set_video_color_key(unsigned long key, unsigned long mask,
int bluescreen);
int cs5530_set_video_filter(int xfilter, int yfilter);
int cs5530_set_video_palette(unsigned long *palette);
int cs5530_set_video_palette_entry(unsigned long index, unsigned long color);
int cs5530_set_video_downscale_coefficients(unsigned short coef1,
unsigned short coef2,
unsigned short coef3,
unsigned short coef4);
int cs5530_set_video_downscale_enable(int enable);
int cs5530_set_video_source(VideoSourceType source);
int cs5530_set_vbi_source(VbiSourceType source);
int cs5530_set_vbi_lines(unsigned long even, unsigned long odd);
int cs5530_set_vbi_total(unsigned long even, unsigned long odd);
int cs5530_set_video_interlaced(int enable);
int cs5530_set_color_space_YUV(int enable);
int cs5530_set_vertical_scaler_offset(char offset);
int cs5530_set_top_line_in_odd(int enable);
int cs5530_set_genlock_delay(unsigned long delay);
int cs5530_set_genlock_enable(int flags);
int cs5530_set_video_cursor(unsigned long key, unsigned long mask,
unsigned short select_color2,
unsigned long color1, unsigned long color2);
int cs5530_set_video_cursor_enable(int enable);
int cs5530_set_video_request(short x, short y);
int cs5530_select_alpha_region(int region);
int cs5530_set_alpha_enable(int enable);
int cs5530_set_alpha_window(short x, short y,
unsigned short width, unsigned short height);
int cs5530_set_alpha_value(unsigned char alpha, char delta);
int cs5530_set_alpha_priority(int priority);
int cs5530_set_alpha_color(unsigned long color);
int cs5530_set_alpha_color_enable(int enable);
int cs5530_set_no_ck_outside_alpha(int enable);
int cs5530_disable_softvga(void);
int cs5530_enable_softvga(void);
int cs5530_set_macrovision_enable(int enable);
int cs5530_set_crt_enable(int enable);
void cs5530_reset_video(void);
int cs5530_set_display_control(int sync_polarities);
void cs5530_set_clock_frequency(unsigned long frequency);
int cs5530_get_video_enable(void);
int cs5530_get_video_format(void);
unsigned long cs5530_get_video_src_size(void);
unsigned long cs5530_get_video_line_size(void);
unsigned long cs5530_get_video_xclip(void);
unsigned long cs5530_get_video_offset(void);
void cs5530_get_video_yuv_offsets(unsigned long *yoffset,
unsigned long *uoffset,
unsigned long *voffset);
void cs5530_get_video_yuv_pitch(unsigned long *ypitch,
unsigned long *uvpitch);
unsigned long cs5530_get_video_upscale(void);
unsigned long cs5530_get_video_scale(void);
unsigned long cs5530_get_video_downscale_delta(void);
int cs5530_get_video_vertical_downscale_enable(void);
int cs5530_get_video_downscale_config(unsigned short *type,
unsigned short *m);
void cs5530_get_video_downscale_coefficients(unsigned short *coef1,
unsigned short *coef2,
unsigned short *coef3,
unsigned short *coef4);
void cs5530_get_video_downscale_enable(int *enable);
unsigned long cs5530_get_video_dst_size(void);
unsigned long cs5530_get_video_position(void);
unsigned long cs5530_get_video_color_key(void);
unsigned long cs5530_get_video_color_key_mask(void);
int cs5530_get_video_palette_entry(unsigned long index,
unsigned long *palette);
int cs5530_get_video_color_key_src(void);
int cs5530_get_video_filter(void);
int cs5530_get_video_request(short *x, short *y);
int cs5530_get_video_source(VideoSourceType * source);
int cs5530_get_vbi_source(VbiSourceType * source);
unsigned long cs5530_get_vbi_lines(int odd);
unsigned long cs5530_get_vbi_total(int odd);
int cs5530_get_video_interlaced(void);
int cs5530_get_color_space_YUV(void);
int cs5530_get_vertical_scaler_offset(char *offset);
unsigned long cs5530_get_genlock_delay(void);
int cs5530_get_genlock_enable(void);
int cs5530_get_video_cursor(unsigned long *key, unsigned long *mask,
unsigned short *select_color2,
unsigned long *color1, unsigned short *color2);
unsigned long cs5530_read_crc(void);
unsigned long cs5530_read_crc32(void);
unsigned long cs5530_read_window_crc(int source, unsigned short x,
unsigned short y, unsigned short width,
unsigned short height, int crc32);
int cs5530_get_macrovision_enable(void);
void cs5530_get_alpha_enable(int *enable);
void cs5530_get_alpha_size(unsigned short *x, unsigned short *y,
unsigned short *width, unsigned short *height);
void cs5530_get_alpha_value(unsigned char *alpha, char *delta);
void cs5530_get_alpha_priority(int *priority);
void cs5530_get_alpha_color(unsigned long *color);
unsigned long cs5530_get_clock_frequency(void);
int cs5530_get_vsa2_softvga_enable(void);
int cs5530_get_sync_polarities(void);
#if GFX_VIDEO_DYNAMIC
int
cs5530_set_crt_enable(int enable)
#else
int
gfx_set_crt_enable(int enable)
#endif
{
unsigned long config;
config = READ_VID32(CS5530_DISPLAY_CONFIG);
switch (enable) {
case CRT_DISABLE:
WRITE_VID32(CS5530_DISPLAY_CONFIG,
config & ~(CS5530_DCFG_DIS_EN | CS5530_DCFG_HSYNC_EN |
CS5530_DCFG_VSYNC_EN | CS5530_DCFG_DAC_BL_EN |
CS5530_DCFG_DAC_PWDNX));
break;
case CRT_ENABLE:
WRITE_VID32(CS5530_DISPLAY_CONFIG,
config | CS5530_DCFG_DIS_EN | CS5530_DCFG_HSYNC_EN |
CS5530_DCFG_VSYNC_EN | CS5530_DCFG_DAC_BL_EN |
CS5530_DCFG_DAC_PWDNX);
break;
case CRT_STANDBY:
WRITE_VID32(CS5530_DISPLAY_CONFIG,
(config &
~(CS5530_DCFG_DIS_EN | CS5530_DCFG_HSYNC_EN |
CS5530_DCFG_DAC_BL_EN | CS5530_DCFG_DAC_PWDNX))
| CS5530_DCFG_VSYNC_EN);
break;
case CRT_SUSPEND:
WRITE_VID32(CS5530_DISPLAY_CONFIG,
(config &
~(CS5530_DCFG_DIS_EN | CS5530_DCFG_VSYNC_EN |
CS5530_DCFG_DAC_BL_EN | CS5530_DCFG_DAC_PWDNX))
| CS5530_DCFG_HSYNC_EN);
break;
default:
return (GFX_STATUS_BAD_PARAMETER);
}
return (GFX_STATUS_OK);
}
#if GFX_VIDEO_DYNAMIC
void
cs5530_reset_video(void)
#else
void
gfx_reset_video(void)
#endif
{
gfx_set_video_enable(0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_set_display_control(int sync_polarities)
#else
int
gfx_set_display_control(int sync_polarities)
#endif
{
unsigned long dcfg;
dcfg = READ_VID32(CS5530_DISPLAY_CONFIG);
dcfg &= ~(CS5530_DCFG_CRT_SYNC_SKW_MASK | CS5530_DCFG_PWR_SEQ_DLY_MASK |
CS5530_DCFG_CRT_HSYNC_POL | CS5530_DCFG_CRT_VSYNC_POL |
CS5530_DCFG_FP_PWR_EN | CS5530_DCFG_FP_DATA_EN);
dcfg |= (CS5530_DCFG_CRT_SYNC_SKW_INIT |
CS5530_DCFG_PWR_SEQ_DLY_INIT | CS5530_DCFG_GV_PAL_BYP);
if (PanelEnable) {
dcfg |= CS5530_DCFG_FP_PWR_EN;
dcfg |= CS5530_DCFG_FP_DATA_EN;
}
if (sync_polarities & 1)
dcfg |= CS5530_DCFG_CRT_HSYNC_POL;
if (sync_polarities & 2)
dcfg |= CS5530_DCFG_CRT_VSYNC_POL;
WRITE_VID32(CS5530_DISPLAY_CONFIG, dcfg);
return (0);
}
#if GFX_VIDEO_DYNAMIC
void
cs5530_set_clock_frequency(unsigned long frequency)
#else
void
gfx_set_clock_frequency(unsigned long frequency)
#endif
{
unsigned int index;
unsigned long value;
long min, diff;
value = CS5530_PLLtable[0].pll_value;
min = (long)CS5530_PLLtable[0].frequency - frequency;
if (min < 0L)
min = -min;
for (index = 1; index < NUM_CS5530_FREQUENCIES; index++) {
diff = (long)CS5530_PLLtable[index].frequency - frequency;
if (diff < 0L)
diff = -diff;
if (diff < min) {
min = diff;
value = CS5530_PLLtable[index].pll_value;
}
}
WRITE_VID32(CS5530_DOT_CLK_CONFIG, value);
WRITE_VID32(CS5530_DOT_CLK_CONFIG, value | 0x80000100);
gfx_delay_milliseconds(1);
WRITE_VID32(CS5530_DOT_CLK_CONFIG, value & 0x7FFFFFFF);
WRITE_VID32(CS5530_DOT_CLK_CONFIG, value & 0x7FFFFEFF);
return;
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_set_video_enable(int enable)
#else
int
gfx_set_video_enable(int enable)
#endif
{
unsigned long vcfg;
if (gfx_test_timing_active()) {
if (!gfx_test_vertical_active()) {
while (!gfx_test_vertical_active()) ;
}
while (gfx_test_vertical_active()) ;
}
vcfg = READ_VID32(CS5530_VIDEO_CONFIG);
if (enable) {
gfx_set_display_video_enable(1);
vcfg |= CS5530_VCFG_HIGH_SPD_INT;
vcfg &= ~(CS5530_VCFG_EARLY_VID_RDY | CS5530_VCFG_16_BIT_EN);
vcfg |= CS5530_VCFG_VID_EN;
WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg);
} else {
vcfg &= ~CS5530_VCFG_VID_EN;
WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg);
gfx_set_display_video_enable(0);
}
return (0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_set_video_format(unsigned long format)
#else
int
gfx_set_video_format(unsigned long format)
#endif
{
unsigned long vcfg = 0;
vcfg = READ_VID32(CS5530_VIDEO_CONFIG);
vcfg &= ~(CS5530_VCFG_VID_INP_FORMAT | CS5530_VCFG_4_2_0_MODE);
vcfg &= ~(CS5530_VCFG_CSC_BYPASS);
vcfg &= ~(CS5530_VCFG_GV_SEL);
if (format < 4)
vcfg |= (format << 2);
else {
if (format == VIDEO_FORMAT_Y0Y1Y2Y3) {
vcfg |= CS5530_VCFG_4_2_0_MODE;
vcfg |= 1 << 2;
}
if (format == VIDEO_FORMAT_RGB) {
vcfg |= CS5530_VCFG_CSC_BYPASS;
vcfg |= CS5530_VCFG_GV_SEL;
}
}
WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg);
return (0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_set_video_size(unsigned short width, unsigned short height)
#else
int
gfx_set_video_size(unsigned short width, unsigned short height)
#endif
{
unsigned long size, vcfg;
vcfg = READ_VID32(CS5530_VIDEO_CONFIG);
vcfg &= ~(CS5530_VCFG_LINE_SIZE_LOWER_MASK | CS5530_VCFG_LINE_SIZE_UPPER);
size = (width >> 1);
vcfg |= (size & 0x00FF) << 8;
if (size & 0x0100)
vcfg |= CS5530_VCFG_LINE_SIZE_UPPER;
WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg);
gfx_set_display_video_size(width, height);
return (0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_set_video_offset(unsigned long offset)
#else
int
gfx_set_video_offset(unsigned long offset)
#endif
{
gfx_vid_offset = offset;
gfx_set_display_video_offset(offset);
return (0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_set_video_scale(unsigned short srcw, unsigned short srch,
unsigned short dstw, unsigned short dsth)
#else
int
gfx_set_video_scale(unsigned short srcw, unsigned short srch,
unsigned short dstw, unsigned short dsth)
#endif
{
unsigned long xscale, yscale;
gfx_vid_srcw = srcw;
gfx_vid_srch = srch;
gfx_vid_dstw = dstw;
gfx_vid_dsth = dsth;
if (dstw <= srcw)
xscale = 0x1FFF;
else if (dstw == 1 || srcw == 1)
return GFX_STATUS_BAD_PARAMETER;
else
xscale = (0x2000l * (srcw - 1l)) / (dstw - 1l);
if (dsth <= srch)
yscale = 0x1FFF;
else if (dsth == 1 || srch == 1)
return GFX_STATUS_BAD_PARAMETER;
else
yscale = (0x2000l * (srch - 1l)) / (dsth - 1l);
WRITE_VID32(CS5530_VIDEO_SCALE, (yscale << 16) | xscale);
gfx_set_video_window(gfx_vid_xpos, gfx_vid_ypos, gfx_vid_width,
gfx_vid_height);
return (0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_set_video_window(short x, short y, unsigned short w, unsigned short h)
#else
int
gfx_set_video_window(short x, short y, unsigned short w, unsigned short h)
#endif
{
unsigned long vcfg = 0;
unsigned long hadjust, vadjust;
unsigned long xstart, ystart, xend, yend;
gfx_vid_xpos = x;
gfx_vid_ypos = y;
gfx_vid_width = w;
gfx_vid_height = h;
hadjust = gfx_get_htotal() - gfx_get_hsync_end() - 13l;
vadjust = gfx_get_vtotal() - gfx_get_vsync_end() + 1l;
xstart = (unsigned long)x + hadjust;
if ((x + w) < gfx_get_hactive())
xend = (unsigned long)x + (unsigned long)w + hadjust;
else
xend = (unsigned long)gfx_get_hactive() + hadjust;
ystart = (unsigned long)y + vadjust;
if ((y + h) < gfx_get_vactive())
yend = (unsigned long)y + (unsigned long)h + vadjust;
else
yend = (unsigned long)gfx_get_vactive() + vadjust;
vcfg = READ_VID32(CS5530_VIDEO_CONFIG);
vcfg &= ~CS5530_VCFG_VID_REG_UPDATE;
WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg);
WRITE_VID32(CS5530_VIDEO_X_POS, (xend << 16) | xstart);
WRITE_VID32(CS5530_VIDEO_Y_POS, (yend << 16) | ystart);
vcfg |= CS5530_VCFG_VID_REG_UPDATE;
WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg);
return (0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_set_video_left_crop(unsigned short x)
#else
int
gfx_set_video_left_crop(unsigned short x)
#endif
{
unsigned long vcfg, initread;
if (gfx_vid_dstw)
initread = (unsigned long)x *gfx_vid_srcw / gfx_vid_dstw;
else
initread = 0;
vcfg = READ_VID32(CS5530_VIDEO_CONFIG);
vcfg &= ~CS5530_VCFG_INIT_READ_MASK;
vcfg |= (initread << 15) & CS5530_VCFG_INIT_READ_MASK;
vcfg |= CS5530_VCFG_VID_REG_UPDATE;
WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg);
return (0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_set_video_color_key(unsigned long key, unsigned long mask,
int graphics)
#else
int
gfx_set_video_color_key(unsigned long key, unsigned long mask, int graphics)
#endif
{
unsigned long dcfg = 0;
WRITE_VID32(CS5530_VIDEO_COLOR_KEY, key);
WRITE_VID32(CS5530_VIDEO_COLOR_MASK, mask);
dcfg = READ_VID32(CS5530_DISPLAY_CONFIG);
if (graphics & 0x01)
dcfg &= ~CS5530_DCFG_VG_CK;
else
dcfg |= CS5530_DCFG_VG_CK;
WRITE_VID32(CS5530_DISPLAY_CONFIG, dcfg);
return (0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_set_video_filter(int xfilter, int yfilter)
#else
int
gfx_set_video_filter(int xfilter, int yfilter)
#endif
{
unsigned long vcfg = 0;
vcfg = READ_VID32(CS5530_VIDEO_CONFIG);
vcfg &= ~(CS5530_VCFG_X_FILTER_EN | CS5530_VCFG_Y_FILTER_EN);
if (xfilter)
vcfg |= CS5530_VCFG_X_FILTER_EN;
if (yfilter)
vcfg |= CS5530_VCFG_Y_FILTER_EN;
WRITE_VID32(CS5530_VIDEO_CONFIG, vcfg);
return (0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_set_video_palette(unsigned long *palette)
#else
int
gfx_set_video_palette(unsigned long *palette)
#endif
{
unsigned long i, entry;
WRITE_VID32(CS5530_PALETTE_ADDRESS, 0);
for (i = 0; i < 256; i++) {
if (palette)
entry = palette[i];
else
entry = i | (i << 8) | (i << 16);
WRITE_VID32(CS5530_PALETTE_DATA, entry);
}
return (0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_set_video_palette_entry(unsigned long index, unsigned long palette)
#else
int
gfx_set_video_palette_entry(unsigned long index, unsigned long palette)
#endif
{
if (index > 0xFF)
return GFX_STATUS_BAD_PARAMETER;
WRITE_VID32(CS5530_PALETTE_ADDRESS, index);
WRITE_VID32(CS5530_PALETTE_DATA, palette);
return (0);
}
#define CX55xx_VIDEO_PCI_44 0x80009444
#if GFX_VIDEO_DYNAMIC
int
cs5530_disable_softvga(void)
#else
int
gfx_disable_softvga(void)
#endif
{
unsigned long reg_val;
reg_val = gfx_pci_config_read(CX55xx_VIDEO_PCI_44);
reg_val |= 0x1;
gfx_pci_config_write(CX55xx_VIDEO_PCI_44, reg_val);
reg_val = gfx_pci_config_read(CX55xx_VIDEO_PCI_44);
if ((reg_val & 0x1) == 0x1)
return (1);
else
return (0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_enable_softvga(void)
#else
int
gfx_enable_softvga(void)
#endif
{
unsigned long reg_val;
reg_val = gfx_pci_config_read(CX55xx_VIDEO_PCI_44);
gfx_pci_config_write(CX55xx_VIDEO_PCI_44, reg_val & 0xfffffffe);
reg_val = gfx_pci_config_read(CX55xx_VIDEO_PCI_44);
if ((reg_val & 0x1) == 0)
return (1);
else
return (0);
}
#if GFX_VIDEO_DYNAMIC
unsigned long
cs5530_get_clock_frequency(void)
#else
unsigned long
gfx_get_clock_frequency(void)
#endif
{
unsigned int index;
unsigned long value, mask;
mask = 0x7FFFFEDC;
value = READ_VID32(CS5530_DOT_CLK_CONFIG) & mask;
for (index = 0; index < NUM_CS5530_FREQUENCIES; index++) {
if ((CS5530_PLLtable[index].pll_value & mask) == value)
return (CS5530_PLLtable[index].frequency);
}
return (0);
}
#if GFX_READ_ROUTINES
#if GFX_VIDEO_DYNAMIC
int
cs5530_get_vsa2_softvga_enable(void)
#else
int
gfx_get_vsa2_softvga_enable(void)
#endif
{
unsigned long reg_val;
reg_val = gfx_pci_config_read(CX55xx_VIDEO_PCI_44);
if ((reg_val & 0x1) == 0)
return (1);
else
return (0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_get_sync_polarities(void)
#else
int
gfx_get_sync_polarities(void)
#endif
{
int polarities = 0;
if (READ_VID32(CS5530_DISPLAY_CONFIG) & 0x00000100)
polarities |= 1;
if (READ_VID32(CS5530_DISPLAY_CONFIG) & 0x00000200)
polarities |= 2;
return (polarities);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_get_video_palette_entry(unsigned long index, unsigned long *palette)
#else
int
gfx_get_video_palette_entry(unsigned long index, unsigned long *palette)
#endif
{
if (index > 0xFF)
return GFX_STATUS_BAD_PARAMETER;
WRITE_VID32(CS5530_PALETTE_ADDRESS, index);
*palette = READ_VID32(CS5530_PALETTE_DATA);
return (GFX_STATUS_OK);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_get_video_enable(void)
#else
int
gfx_get_video_enable(void)
#endif
{
if (READ_VID32(CS5530_VIDEO_CONFIG) & CS5530_VCFG_VID_EN)
return (1);
return (0);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_get_video_format(void)
#else
int
gfx_get_video_format(void)
#endif
{
unsigned long vcfg;
vcfg = READ_VID32(CS5530_VIDEO_CONFIG);
if (vcfg & CS5530_VCFG_CSC_BYPASS)
return (VIDEO_FORMAT_RGB);
if (vcfg & CS5530_VCFG_4_2_0_MODE)
return (VIDEO_FORMAT_Y0Y1Y2Y3);
return ((int)((vcfg >> 2) & 3));
}
#if GFX_VIDEO_DYNAMIC
unsigned long
cs5530_get_video_src_size(void)
#else
unsigned long
gfx_get_video_src_size(void)
#endif
{
unsigned long width = 0, height = 0;
width = (READ_VID32(CS5530_VIDEO_CONFIG) >> 7) & 0x000001FE;
if (READ_VID32(CS5530_VIDEO_CONFIG) & CS5530_VCFG_LINE_SIZE_UPPER)
width += 512l;
if (width) {
height = gfx_get_display_video_size() / (width << 1);
}
return ((height << 16) | width);
}
#if GFX_VIDEO_DYNAMIC
unsigned long
cs5530_get_video_line_size(void)
#else
unsigned long
gfx_get_video_line_size(void)
#endif
{
unsigned long width = 0;
width = (READ_VID32(CS5530_VIDEO_CONFIG) >> 7) & 0x000001FE;
if (READ_VID32(CS5530_VIDEO_CONFIG) & CS5530_VCFG_LINE_SIZE_UPPER)
width += 512l;
return (width);
}
#if GFX_VIDEO_DYNAMIC
unsigned long
cs5530_get_video_xclip(void)
#else
unsigned long
gfx_get_video_xclip(void)
#endif
{
unsigned long clip = 0;
clip = (READ_VID32(CS5530_VIDEO_CONFIG) >> 14) & 0x000007FC;
return (clip);
}
#if GFX_VIDEO_DYNAMIC
unsigned long
cs5530_get_video_offset(void)
#else
unsigned long
gfx_get_video_offset(void)
#endif
{
return (gfx_get_display_video_offset());
}
#if GFX_VIDEO_DYNAMIC
unsigned long
cs5530_get_video_scale(void)
#else
unsigned long
gfx_get_video_scale(void)
#endif
{
return (READ_VID32(CS5530_VIDEO_SCALE));
}
#if GFX_VIDEO_DYNAMIC
unsigned long
cs5530_get_video_dst_size(void)
#else
unsigned long
gfx_get_video_dst_size(void)
#endif
{
unsigned long xsize, ysize;
xsize = READ_VID32(CS5530_VIDEO_X_POS);
xsize = ((xsize >> 16) & 0x7FF) - (xsize & 0x07FF);
ysize = READ_VID32(CS5530_VIDEO_Y_POS);
ysize = ((ysize >> 16) & 0x7FF) - (ysize & 0x07FF);
return ((ysize << 16) | xsize);
}
#if GFX_VIDEO_DYNAMIC
unsigned long
cs5530_get_video_position(void)
#else
unsigned long
gfx_get_video_position(void)
#endif
{
unsigned long hadjust, vadjust;
unsigned long xpos, ypos;
xpos = READ_VID32(CS5530_VIDEO_X_POS) & 0x000007FF;
ypos = READ_VID32(CS5530_VIDEO_Y_POS) & 0x000007FF;
hadjust = gfx_get_htotal() - gfx_get_hsync_end() - 13l;
vadjust = gfx_get_vtotal() - gfx_get_vsync_end() + 1l;
xpos -= hadjust;
ypos -= vadjust;
return ((ypos << 16) | (xpos & 0x0000FFFF));
}
#if GFX_VIDEO_DYNAMIC
unsigned long
cs5530_get_video_color_key(void)
#else
unsigned long
gfx_get_video_color_key(void)
#endif
{
return (READ_VID32(CS5530_VIDEO_COLOR_KEY));
}
#if GFX_VIDEO_DYNAMIC
unsigned long
cs5530_get_video_color_key_mask(void)
#else
unsigned long
gfx_get_video_color_key_mask(void)
#endif
{
return (READ_VID32(CS5530_VIDEO_COLOR_MASK));
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_get_video_color_key_src(void)
#else
int
gfx_get_video_color_key_src(void)
#endif
{
if (READ_VID32(CS5530_DISPLAY_CONFIG) & CS5530_DCFG_VG_CK)
return (0);
return (1);
}
#if GFX_VIDEO_DYNAMIC
int
cs5530_get_video_filter(void)
#else
int
gfx_get_video_filter(void)
#endif
{
int retval = 0;
if (READ_VID32(CS5530_VIDEO_CONFIG) & CS5530_VCFG_X_FILTER_EN)
retval |= 1;
if (READ_VID32(CS5530_VIDEO_CONFIG) & CS5530_VCFG_Y_FILTER_EN)
retval |= 2;
return (retval);
}
#if GFX_VIDEO_DYNAMIC
unsigned long
cs5530_read_crc(void)
#else
unsigned long
gfx_read_crc(void)
#endif
{
unsigned long crc = 0xFFFFFFFF;
if (gfx_test_timing_active()) {
while (!gfx_test_vertical_active()) ;
WRITE_VID32(CS5530_CRCSIG_TFT_TV, 0);
WRITE_VID32(CS5530_CRCSIG_TFT_TV, 1);
while (gfx_test_vertical_active()) ;
while (!gfx_test_vertical_active()) ;
while (gfx_test_vertical_active()) ;
while (!gfx_test_vertical_active()) ;
crc = READ_VID32(CS5530_CRCSIG_TFT_TV) >> 8;
}
return (crc);
}
#endif