Message ID | 1440445048-24694-2-git-send-email-linux@rainbow-software.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 24/08/15 22:37, Ondrej Zary wrote: > According to X.Org driver, chips older than TGUI9660 have only 1 width bit > in AddColReg. Touching the 2nd one causes I2C/DDC to fail on TGUI9440. > > Set only 1 bit of width in AddColReg on TGUI9440 and CYBER9320. > > Signed-off-by: Ondrej Zary <linux@rainbow-software.org> > --- > drivers/video/fbdev/tridentfb.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/video/fbdev/tridentfb.c b/drivers/video/fbdev/tridentfb.c > index 7429713..01b43e9 100644 > --- a/drivers/video/fbdev/tridentfb.c > +++ b/drivers/video/fbdev/tridentfb.c > @@ -673,8 +673,14 @@ static int get_nativex(struct tridentfb_par *par) > static inline void set_lwidth(struct tridentfb_par *par, int width) > { > write3X4(par, VGA_CRTC_OFFSET, width & 0xFF); > - write3X4(par, AddColReg, > - (read3X4(par, AddColReg) & 0xCF) | ((width & 0x300) >> 4)); > + /* chips older than TGUI9660 have only 1 width bit in AddColReg */ > + /* touching the other one breaks I2C/DDC */ > + if (par->chip_id == TGUI9440 || par->chip_id == CYBER9320) > + write3X4(par, AddColReg, > + (read3X4(par, AddColReg) & 0xEF) | ((width & 0x100) >> 4)); > + else > + write3X4(par, AddColReg, > + (read3X4(par, AddColReg) & 0xCF) | ((width & 0x300) >> 4)); > } > > /* For resolutions smaller than FP resolution stretch */ > Thanks, queued for 4.3 fixes. Tomi
diff --git a/drivers/video/fbdev/tridentfb.c b/drivers/video/fbdev/tridentfb.c index 7429713..01b43e9 100644 --- a/drivers/video/fbdev/tridentfb.c +++ b/drivers/video/fbdev/tridentfb.c @@ -673,8 +673,14 @@ static int get_nativex(struct tridentfb_par *par) static inline void set_lwidth(struct tridentfb_par *par, int width) { write3X4(par, VGA_CRTC_OFFSET, width & 0xFF); - write3X4(par, AddColReg, - (read3X4(par, AddColReg) & 0xCF) | ((width & 0x300) >> 4)); + /* chips older than TGUI9660 have only 1 width bit in AddColReg */ + /* touching the other one breaks I2C/DDC */ + if (par->chip_id == TGUI9440 || par->chip_id == CYBER9320) + write3X4(par, AddColReg, + (read3X4(par, AddColReg) & 0xEF) | ((width & 0x100) >> 4)); + else + write3X4(par, AddColReg, + (read3X4(par, AddColReg) & 0xCF) | ((width & 0x300) >> 4)); } /* For resolutions smaller than FP resolution stretch */
According to X.Org driver, chips older than TGUI9660 have only 1 width bit in AddColReg. Touching the 2nd one causes I2C/DDC to fail on TGUI9440. Set only 1 bit of width in AddColReg on TGUI9440 and CYBER9320. Signed-off-by: Ondrej Zary <linux@rainbow-software.org> --- drivers/video/fbdev/tridentfb.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)