Console Resolution Support Request - 1024x480

From: ttye0
Date: Tue Aug 23 2005 - 12:43:52 EST


Hey,
After seeing many many posts and no solutions anywhere regarding having a full screen console on a Sony Vaio Picturebook with an ATI Rage Mobility video chip on a kernel anywhere near the current version....~inhale~....I finally made an attempt with a kernel-2.4.17 diff patch to manually change the nessecery source code in order to make 1024x480 supported. If there is any info that you might need I might be able to get it for you but my experience is limited unfortunately. My attempt to fix this manually was a failure. I managed to find all the code and made all of the proper adjustments, but when I made the adjustments to ../drivers/video/aty/mach64_ct.c there were problems with pll and mpostdiv being undefined. I attempted anxiouslly to work around this by leaving the code as it was originally or even replacing the nessecery code to make it similar (by theory), but there was no success. It did compile, however after booting into the kernel with vga=0x301 the screen was terribly unreadable, missized (large), and flashing. I wish I could manage this on my own, but I'm not capable and have made no progress. I'm surprised that no one has taken the older patch and implemented it into the kernel so this would not have been an issue except in 2.4.17 and earlier. I do know that if I use Windows XP ont his machine, in order to get fullscreen usage I needed to use NeoMagic drivers (if you need these, contact me for the exact drivers that made mine work) when my video card is in fact an ATI Rage Mobility chip. Please, even if you can't help with this, give me some information that may lead to a positive outcome for any/all picturebook users. Thank you in advance!

Note: I attempted this fix on linux-2.4.28-r9 kernel.

If you would like to see my attempted patch I will show you that as well, it works fantastic on terms of patching but the code however does not work.
Here is the patch for the 2.4.17 kernel:


Code:

diff -Nur linux-2.4.17/drivers/video/Config.in linux/drivers/video/Config.in
--- linux-2.4.17/drivers/video/Config.in Thu Nov 15 10:16:31 2001
+++ linux/drivers/video/Config.in Fri Jan 11 16:13:37 2002
@@ -135,6 +135,9 @@
if [ "$CONFIG_FB_ATY" != "n" ]; then
bool ' Mach64 GX support (EXPERIMENTAL)' CONFIG_FB_ATY_GX
bool ' Mach64 CT/VT/GT/LT (incl. 3D RAGE) support' CONFIG_FB_ATY_CT
+ if [ "$CONFIG_FB_ATY_CT" = "y" ]; then
+ bool ' Sony Vaio C1VE 1024x480 LCD support' CONFIG_FB_ATY_CT_VAIO_LCD
+ fi
fi
tristate ' ATI Radeon display support (EXPERIMENTAL)' CONFIG_FB_RADEON
tristate ' ATI Rage128 display support (EXPERIMENTAL)' CONFIG_FB_ATY128
diff -Nur linux-2.4.17/drivers/video/aty/atyfb_base.c linux/drivers/video/aty/atyfb_base.c
--- linux-2.4.17/drivers/video/aty/atyfb_base.c Fri Dec 21 21:37:11 2001
+++ linux/drivers/video/aty/atyfb_base.c Sat Dec 22 02:39:12 2001
@@ -353,6 +353,7 @@

/* 3D RAGE Mobility */
{ 0x4c4d, 0x4c4d, 0x00, 0x00, m64n_mob_p, 230, 50, M64F_GT | M64F_INTEGRATED | M64F_RESET_3D | M64F_GTB_DSP | M64F_MOBIL_BUS },
+ { 0x4c52, 0x4c52, 0x00, 0x00, m64n_mob_p, 230, 40, M64F_GT | M64F_INTEGRATED | M64F_RESET_3D | M64F_GTB_DSP | M64F_MOBIL_BUS | M64F_MAGIC_POSTDIV | M64F_SDRAM_MAGIC_PLL | M64F_XL_DLL },
{ 0x4c4e, 0x4c4e, 0x00, 0x00, m64n_mob_a, 230, 50, M64F_GT | M64F_INTEGRATED | M64F_RESET_3D | M64F_GTB_DSP | M64F_MOBIL_BUS },
#endif /* CONFIG_FB_ATY_CT */
};
@@ -423,7 +424,7 @@

#endif /* defined(CONFIG_PPC) */

-#if defined(CONFIG_PMAC_PBOOK) || defined(CONFIG_PMAC_BACKLIGHT)
+#if defined(CONFIG_PMAC_PBOOK) || defined(CONFIG_PMAC_BACKLIGHT) || defined(CONFIG_FB_ATY_CT_VAIO_LCD)
static void aty_st_lcd(int index, u32 val, const struct fb_info_aty *info)
{
unsigned long temp;
@@ -445,7 +446,7 @@
/* read the register value */
return aty_ld_le32(LCD_DATA, info);
}
-#endif /* CONFIG_PMAC_PBOOK || CONFIG_PMAC_BACKLIGHT */
+#endif /* CONFIG_PMAC_PBOOK || CONFIG_PMAC_BACKLIGHT || CONFIG_FB_ATY_CT_VAIO_LCD */

/* ------------------------------------------------------------------------- */

@@ -1744,6 +1745,9 @@
#if defined(CONFIG_PPC)
int sense;
#endif
+#if defined(CONFIG_FB_ATY_CT_VAIO_LCD)
+ u32 pm, hs;
+#endif
u8 pll_ref_div;

info->aty_cmap_regs = (struct aty_cmap_regs *)(info->ati_regbase+0xc0);
@@ -2068,6 +2072,35 @@
var = default_var;
#endif /* !__sparc__ */
#endif /* !CONFIG_PPC */
+#if defined(CONFIG_FB_ATY_CT_VAIO_LCD)
+ /* Power Management */
+ pm=aty_ld_lcd(POWER_MANAGEMENT, info);
+ pm=(pm & ~PWR_MGT_MODE_MASK) | PWR_MGT_MODE_PCI;
+ pm|=PWR_MGT_ON;
+ aty_st_lcd(POWER_MANAGEMENT, pm, info);
+ udelay(10);
+
+ /* OVR_WID_LEFT_RIGHT */
+ hs=aty_ld_le32(OVR_WID_LEFT_RIGHT,info);
+ hs &= ~0x003F003F;
+ aty_st_le32(OVR_WID_LEFT_RIGHT, hs, info);
+ udelay(10);
+
+ /* CONFIG_PANEL */
+ hs=aty_ld_lcd(CONFIG_PANEL,info);
+ hs|=DONT_SHADOW_HEND ;
+ aty_st_lcd(CONFIG_PANEL, hs, info);
+ udelay(10);
+
+#if defined(DEBUG)
+ printk("LCD_INDEX CONFIG_PANEL LCD_GEN_CTRL POWER_MANAGEMENT\n"
+ "%08x %08x %08x %08x\n",
+ aty_ld_le32(LCD_INDEX, info),
+ aty_ld_lcd(CONFIG_PANEL, info),
+ aty_ld_lcd(LCD_GEN_CTRL, info),
+ aty_ld_lcd(POWER_MANAGEMENT, info),
+#endif /* DEBUG */
+#endif /* CONFIG_FB_ATY_CT_VAIO_LCD */
#endif /* !MODULE */
if (noaccel)
var.accel_flags &= ~FB_ACCELF_TEXT;
@@ -2676,6 +2709,23 @@
/*
* Blank the display.
*/
+#if defined(CONFIG_FB_ATY_CT_VAIO_LCD)
+static int set_backlight_enable(int on, struct fb_info_aty *info)
+{
+ unsigned int reg = aty_ld_lcd(POWER_MANAGEMENT, info);
+ if(on) {
+ reg=(reg & ~SUSPEND_NOW) | PWR_BLON;
+ } else {
+ reg=(reg & ~PWR_BLON) | SUSPEND_NOW;
+ }
+ aty_st_lcd(POWER_MANAGEMENT, reg, info);
+ udelay(10);
+#ifdef DEBUG
+ printk(KERN_INFO "set_backlight_enable(%i): %08x\n", on, aty_ld_lcd(POWER_MANAGEMENT, info) );
+#endif
+ return 0;
+}
+#endif /* CONFIG_FB_ATY_CT_VAIO_LCD */

static void atyfbcon_blank(int blank, struct fb_info *fb)
{
@@ -2687,6 +2737,9 @@
set_backlight_enable(0);
#endif /* CONFIG_PMAC_BACKLIGHT */

+#if defined(CONFIG_FB_ATY_CT_VAIO_LCD)
+ set_backlight_enable(!blank, info);
+#endif /* CONFIG_FB_ATY_CT_VAIO_LCD */
gen_cntl = aty_ld_8(CRTC_GEN_CNTL, info);
if (blank > 0)
switch (blank-1) {
diff -Nur linux-2.4.17/drivers/video/aty/mach64.h linux/drivers/video/aty/mach64.h
--- linux-2.4.17/drivers/video/aty/mach64.h Tue Jul 31 23:43:29 2001
+++ linux/drivers/video/aty/mach64.h Sat Dec 22 00:24:16 2001
@@ -1148,6 +1148,8 @@
#define APC_LUT_MN 0x39
#define APC_LUT_OP 0x3A

+/* Values in CONFIG_PANEL */
+#define DONT_SHADOW_HEND 0x00004000

/* Values in LCD_MISC_CNTL */
#define BIAS_MOD_LEVEL_MASK 0x0000ff00
diff -Nur linux-2.4.17/drivers/video/aty/mach64_ct.c linux/drivers/video/aty/mach64_ct.c
--- linux-2.4.17/drivers/video/aty/mach64_ct.c Wed Aug 1 07:43:29 2001
+++ linux/drivers/video/aty/mach64_ct.c Fri Jan 11 16:13:37 2002
@@ -178,10 +178,16 @@
}
pll->pll_gen_cntl |= mpostdiv<<4; /* mclk */

- if (M64_HAS(MAGIC_POSTDIV))
- pll->pll_ext_cntl = 0;
- else
+#if defined(CONFIG_FB_ATY_CT_VAIO_LCD)
pll->pll_ext_cntl = mpostdiv; /* xclk == mclk */
+#else
+ if ( M64_HAS(MAGIC_POSTDIV) )
+ pll->pll_ext_cntl = 0;
+ else
+ pll->pll_ext_cntl = mpostdiv; /* xclk == mclk */
+#endif
+
+

switch (pll->vclk_post_div_real) {
case 2:
diff -Nur linux-2.4.17/drivers/video/modedb.c linux/drivers/video/modedb.c
--- linux-2.4.17/drivers/video/modedb.c Sat Dec 22 04:41:55 2001
+++ linux/drivers/video/modedb.c Fri Jan 11 16:13:37 2002
@@ -42,6 +42,13 @@
#define DEFAULT_MODEDB_INDEX 0

static struct fb_videomode modedb[] __initdata = {
+#if defined(CONFIG_FB_ATY_CT_VAIO_LCD)
+ {
+ /* 1024x480 @ 65 Hz */
+ NULL, 65, 1024, 480, 25203, 24, 24, 1, 17, 144, 4,
+ 0, FB_VMODE_NONINTERLACED
+ },
+#endif /* CONFIG_FB_ATY_CT_VAIO_LCD */
{
/* 640x400 @ 70 Hz, 31.5 kHz hsync */
NULL, 70, 640, 400, 39721, 40, 24, 39, 9, 96, 2,


-Paul / ttye0

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/