Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 218751
b: refs/heads/master
c: bc68488
h: refs/heads/master
i:
  218749: 22f5e75
  218747: f018aa7
  218743: 3280341
  218735: ed383e5
  218719: 34226c9
  218687: c37007c
  218623: b377a33
v: v3
  • Loading branch information
Florian Tobias Schandinat authored and Florian Tobias Schandinat committed Sep 24, 2010
1 parent ebc2c7c commit 24e7af6
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 64 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 18d9dc08b22145adb248d16dd2cefb2ccf9f7665
refs/heads/master: bc6848875152f3df860d0f54a2323cc7615527d9
101 changes: 38 additions & 63 deletions trunk/drivers/video/via/hw.c
Original file line number Diff line number Diff line change
Expand Up @@ -718,7 +718,6 @@ static struct rgbLUT palLUT_table[] = {
0x00}
};

static void set_crt_output_path(int set_iga);
static void dvi_patch_skew_dvp0(void);
static void dvi_patch_skew_dvp_low(void);
static void set_dvi_output_path(int set_iga, int output_interface);
Expand All @@ -733,6 +732,7 @@ static void set_display_channel(void);
static void device_off(void);
static void device_on(void);
static void enable_second_display_channel(void);
static void disable_second_display_channel(void);

void viafb_lock_crt(void)
{
Expand Down Expand Up @@ -948,7 +948,7 @@ void viafb_set_output_path(int device, int set_iga, int output_interface)
{
switch (device) {
case DEVICE_CRT:
set_crt_output_path(set_iga);
viafb_write_reg_mask(CR36, VIACR, 0x00, BIT4 + BIT5);
break;
case DEVICE_DVI:
set_dvi_output_path(set_iga, output_interface);
Expand All @@ -957,9 +957,6 @@ void viafb_set_output_path(int device, int set_iga, int output_interface)
set_lcd_output_path(set_iga, output_interface);
break;
}

if (set_iga == IGA2)
enable_second_display_channel();
}

static void set_source_common(u8 index, u8 offset, u8 iga)
Expand Down Expand Up @@ -1030,10 +1027,22 @@ static inline void set_lvds2_source(u8 iga)
set_source_common(0x97, 4, iga);
}

static void set_crt_output_path(int set_iga)
void via_set_source(u32 devices, u8 iga)
{
viafb_write_reg_mask(CR36, VIACR, 0x00, BIT4 + BIT5);
set_crt_source(set_iga);
if (devices & VIA_6C)
set_6C_source(iga);
if (devices & VIA_93)
set_93_source(iga);
if (devices & VIA_96)
set_96_source(iga);
if (devices & VIA_CRT)
set_crt_source(iga);
if (devices & VIA_DVP1)
set_dvp1_source(iga);
if (devices & VIA_LVDS1)
set_lvds1_source(iga);
if (devices & VIA_LVDS2)
set_lvds2_source(iga);
}

static void dvi_patch_skew_dvp0(void)
Expand Down Expand Up @@ -1106,46 +1115,31 @@ static void set_dvi_output_path(int set_iga, int output_interface)
{
switch (output_interface) {
case INTERFACE_DVP0:
set_96_source(set_iga);
set_6C_source(set_iga);
viafb_write_reg_mask(CR6B, VIACR, 0x01, BIT0);
viafb_write_reg_mask(CR6C, VIACR, 0x21, BIT0 + BIT5);
viafb_write_reg_mask(SR1E, VIASR, 0xC0, BIT7 + BIT6);
dvi_patch_skew_dvp0();
break;

case INTERFACE_DVP1:
if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266) {
set_93_source(set_iga);
if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266)
viafb_write_reg_mask(CR93, VIACR, 0x21, BIT0 + BIT5);
} else {
set_dvp1_source(set_iga);
}

viafb_write_reg_mask(SR1E, VIASR, 0x30, BIT4 + BIT5);
break;
case INTERFACE_DFP_HIGH:
if (viaparinfo->chip_info->gfx_chip_name != UNICHROME_CLE266) {
if (viaparinfo->chip_info->gfx_chip_name != UNICHROME_CLE266)
via_write_reg_mask(VIACR, CR97, 0x03, 0x03);
set_lvds2_source(set_iga);
set_96_source(set_iga);
}

viafb_write_reg_mask(SR2A, VIASR, 0x0C, BIT2 + BIT3);
break;

case INTERFACE_DFP_LOW:
if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266)
break;
set_dvp1_source(set_iga);
set_lvds1_source(set_iga);
viafb_write_reg_mask(SR2A, VIASR, 0x03, BIT0 + BIT1);
dvi_patch_skew_dvp_low();
break;

case INTERFACE_TMDS:
set_lvds1_source(set_iga);
break;
}

if (set_iga == IGA2) {
Expand All @@ -1163,53 +1157,19 @@ static void set_lcd_output_path(int set_iga, int output_interface)
viafb_write_reg_mask(CR6B, VIACR, 0x00, BIT3);
viafb_write_reg_mask(CR6A, VIACR, 0x08, BIT3);
switch (output_interface) {
case INTERFACE_DVP0:
set_96_source(set_iga);
if (set_iga == IGA2)
viafb_write_reg(CR91, VIACR, 0x00);
break;

case INTERFACE_DVP1:
set_dvp1_source(set_iga);
if (set_iga == IGA2)
viafb_write_reg(CR91, VIACR, 0x00);
break;

case INTERFACE_DFP_HIGH:
set_lvds2_source(set_iga);
set_96_source(set_iga);
if (set_iga == IGA2)
viafb_write_reg(CR91, VIACR, 0x00);
break;

case INTERFACE_DFP_LOW:
set_lvds1_source(set_iga);
set_dvp1_source(set_iga);
if (set_iga == IGA2)
viafb_write_reg(CR91, VIACR, 0x00);
break;

case INTERFACE_DFP:
if ((UNICHROME_K8M890 == viaparinfo->chip_info->gfx_chip_name)
|| (UNICHROME_P4M890 ==
viaparinfo->chip_info->gfx_chip_name))
viafb_write_reg_mask(CR97, VIACR, 0x84,
BIT7 + BIT2 + BIT1 + BIT0);

set_lvds1_source(set_iga);
set_lvds2_source(set_iga);
case INTERFACE_DVP0:
case INTERFACE_DVP1:
case INTERFACE_DFP_HIGH:
case INTERFACE_DFP_LOW:
if (set_iga == IGA2)
viafb_write_reg(CR91, VIACR, 0x00);
break;

case INTERFACE_LVDS0:
case INTERFACE_LVDS0LVDS1:
set_lvds1_source(set_iga);
break;

case INTERFACE_LVDS1:
set_lvds2_source(set_iga);
break;
}
}

Expand Down Expand Up @@ -2454,6 +2414,13 @@ int viafb_setmode(struct VideoModeTable *vmode_tbl, int video_bpp,
via_set_primary_color_depth(viaparinfo->depth);
via_set_secondary_color_depth(viafb_dual_fb ? viaparinfo1->depth
: viaparinfo->depth);
via_set_source(viaparinfo->shared->iga1_devices, IGA1);
via_set_source(viaparinfo->shared->iga2_devices, IGA2);
if (viaparinfo->shared->iga2_devices)
enable_second_display_channel();
else
disable_second_display_channel();

/* Update Refresh Rate Setting */

/* Clear On Screen */
Expand Down Expand Up @@ -2647,6 +2614,14 @@ static void enable_second_display_channel(void)
viafb_write_reg_mask(CR6A, VIACR, BIT6, BIT6);
}

static void disable_second_display_channel(void)
{
/* to disable second display channel. */
viafb_write_reg_mask(CR6A, VIACR, 0x00, BIT6);
viafb_write_reg_mask(CR6A, VIACR, 0x00, BIT7);
viafb_write_reg_mask(CR6A, VIACR, BIT6, BIT6);
}

void viafb_set_dpa_gfx(int output_interface, struct GFX_DPA_SETTING\
*p_gfx_dpa_setting)
{
Expand Down

0 comments on commit 24e7af6

Please sign in to comment.