Hi all! Sorry for my poor english :-) I have an iBook 2002 (dual usb+fw+aty128) which have the problem, just discussed on the list, on the external CRT (solved with http://stampflee.com/kernel/aty128fb-m3fixes.diff). I tested 2.6 benh kernel (test11), and i tried to modify the patch to solve the same problem on this kernel. The patch is at http://www.gulp.linux.it/Members/Arcimboldo/ibook/aty128fb-m3fixes-2_5benh_diff and it works for me. ciao .a. -- Il mattino ha l'oro in bocca. Il MATTino ha l'OrO In bOcca. i lma tt ino ha l'o roin bocc a.ilmattinohal'oroinbocca. il ma tt in oh al' or oi nb oc ca. il matti noha l'oroinbocca. IL MATtiNO Ha l'ORO InBOCCa. I l m a t t i n o h a l' o r o i n b o c c a . ilmattinohal'oroin BoCcA. iLmAtTiNoHaL'oRoInBoCcA.
--- src-2.5-benh.old/include/video/aty128.h 2003-12-07 22:23:50.000000000 +0100
+++ src-2.5-benh.new/include/video/aty128.h 2003-12-05 02:35:50.000000000 +0100
@@ -258,7 +258,7 @@
#define PLL_TEST_CNTL 0x0013
#define P2PLL_CNTL 0x002a
#define P2PLL_REF_DIV 0x002b
-#define P2PLL_DIV_0 0x002c
+#define P2PLL_DIV_0 0x002b
#define POWER_MANAGEMENT 0x002f
#define PPLL_RESET 0x01
--- src-2.5-benh.old/drivers/video/aty/aty128fb.c 2003-12-07 22:31:34.000000000 +0100
+++ src-2.5-benh.new/drivers/video/aty/aty128fb.c 2003-12-07 22:48:52.000000000 +0100
@@ -748,17 +748,15 @@
}
#ifdef CONFIG_PMAC_PBOOK
- static void
- aty128_set_crtc2(const struct aty128_crtc *crtc,
- const struct fb_info_aty128 *info)
+static void
+aty128_set_crtc2(const struct aty128_crtc *crtc,
+ const struct aty128fb_par *par)
{
- aty_st_le32(CRTC2_GEN_CNTL, crtc->gen_cntl);
-
+ aty_st_le32(CRTC2_GEN_CNTL, crtc->gen_cntl);
/* FIXME - Hardcoded */
aty_st_le32(CRTC2_H_TOTAL_DISP, crtc->h_total & ~0xf | 0xa);
- aty_st_le32(CRTC2_H_SYNC_STRT_WID, crtc->h_sync_strt_wid & ~0xff | 0x10 );
-
+ aty_st_le32(CRTC2_H_SYNC_STRT_WID, crtc->h_sync_strt_wid & ~0xff | 0x10 );
aty_st_le32(CRTC2_V_TOTAL_DISP, crtc->v_total);
aty_st_le32(CRTC2_V_SYNC_STRT_WID, crtc->v_sync_strt_wid);
aty_st_le32(CRTC2_PITCH, crtc->pitch);
@@ -1102,7 +1100,7 @@
#ifdef CONFIG_PMAC_PBOOK
static void
- aty128_set_pll2(struct aty128_pll *pll, const struct fb_info_aty128 *info)
+ aty128_set_pll2(struct aty128_pll *pll, const struct aty128fb_par *par)
{
u32 div;
@@ -1114,9 +1112,9 @@
aty_ld_pll(P2PLL_CNTL) | PPLL_RESET | PPLL_ATOMIC_UPDATE_EN);
/* write the reference divider */
- aty_pll_wait_readupdate(info);
- aty_st_pll(P2PLL_REF_DIV, info->constants.ref_divider & 0x3ff);
- aty_pll_writeupdate(info);
+ aty_pll_wait_readupdate(par);
+ aty_st_pll(P2PLL_REF_DIV, par->constants.ref_divider & 0x3ff);
+ aty_pll_writeupdate(par);
div = aty_ld_pll(P2PLL_DIV_0);
div &= ~XPLL_FB_DIV_MASK;
@@ -1125,13 +1123,13 @@
div |= 0x00040000; /* magic value */
/* write feedback and post dividers */
- aty_pll_wait_readupdate(info);
+ aty_pll_wait_readupdate(par);
aty_st_pll(P2PLL_DIV_0, div);
- aty_pll_writeupdate(info);
+ aty_pll_writeupdate(par);
- aty_pll_wait_readupdate(info);
+ aty_pll_wait_readupdate(par);
aty_st_pll(HTOTAL_CNTL, 0); /* no horiz crtc adjustment */
- aty_pll_writeupdate(info);
+ aty_pll_writeupdate(par);
/* clear the reset, just in case */
@@ -1204,7 +1202,7 @@
#ifdef CONFIG_PMAC_PBOOK
static void
aty128_set_fifo2(const struct aty128_ddafifo *dsp,
- const struct fb_info_aty128 *info)
+ const struct aty128fb_par *par)
{
/* FIXME - Hardcoded */
aty_st_le32(DDA2_CONFIG, 0x010502aa);
@@ -1309,10 +1307,10 @@
aty128_set_fifo(&par->fifo_reg, par);
#ifdef CONFIG_PMAC_PBOOK
- if(info->chip_gen == rage_M3) {
- aty128_set_crtc2(&par->crtc2, info);
- aty128_set_pll2(&par->pll2, info);
- aty128_set_fifo2(&par->fifo_reg2, info);
+ if(par->chip_gen == rage_M3) {
+ aty128_set_crtc2(&par->crtc2, par);
+ aty128_set_pll2(&par->pll2, par);
+ aty128_set_fifo2(&par->fifo_reg2, par);
}
#endif
@@ -1376,13 +1374,13 @@
#ifdef CONFIG_PMAC_PBOOK
- if ((err = aty128_var_to_crtc(var, &par->crtc2, info)))
+ if ((err = aty128_var_to_crtc(var, &par->crtc2, par)))
return err;
- if ((err = aty128_var_to_pll(var->pixclock, &par->pll2, info)))
+ if ((err = aty128_var_to_pll(var->pixclock, &par->pll2, par)))
return err;
- if ((err = aty128_ddafifo(&par->fifo_reg2, &par->pll2, par->crtc2.depth, info)))
+ if ((err = aty128_ddafifo(&par->fifo_reg2, &par->pll2, par->crtc2.depth, par)))
return err;
#endif
@@ -2244,7 +2242,7 @@
static inline void
aty128_rectcopy(int srcx, int srcy, int dstx, int dsty,
u_int width, u_int height,
- struct fb_info_aty128 *par)
+ struct aty128fb_par *par)
{
u32 save_dp_datatype, save_dp_cntl, dstval;
@@ -2298,7 +2296,7 @@
height *= fontheight(p);
aty128_rectcopy(sx, sy, dx, dy, width, height,
- (struct fb_info_aty128 *)p->fb_info);
+ (struct aty128fb_par *)p->fb_info);
}
#endif /* 0 */
Attachment:
pgpABtjm24Lcb.pgp
Description: PGP signature