Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

nvidiafb: access CRT registers safely

Use Read/WriteCrtc() to access CRTC registers in nv_i2c.c. These are safer
because it uses the correct CRTC base (0x3bx or 0x3dx).

Signed-off-by: Antonino Daplas <adaplas@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Antonino A. Daplas and committed by
Linus Torvalds
e296927b b9b2696d

+6 -12
+6 -12
drivers/video/nvidia/nv_i2c.c
··· 30 30 struct nvidia_par *par = chan->par; 31 31 u32 val; 32 32 33 - VGA_WR08(par->PCIO, 0x3d4, chan->ddc_base + 1); 34 - val = VGA_RD08(par->PCIO, 0x3d5) & 0xf0; 33 + val = NVReadCrtc(par, chan->ddc_base + 1) & 0xf0; 35 34 36 35 if (state) 37 36 val |= 0x20; 38 37 else 39 38 val &= ~0x20; 40 39 41 - VGA_WR08(par->PCIO, 0x3d4, chan->ddc_base + 1); 42 - VGA_WR08(par->PCIO, 0x3d5, val | 0x1); 40 + NVWriteCrtc(par, chan->ddc_base + 1, val | 0x01); 43 41 } 44 42 45 43 static void nvidia_gpio_setsda(void *data, int state) ··· 46 48 struct nvidia_par *par = chan->par; 47 49 u32 val; 48 50 49 - VGA_WR08(par->PCIO, 0x3d4, chan->ddc_base + 1); 50 - val = VGA_RD08(par->PCIO, 0x3d5) & 0xf0; 51 + val = NVReadCrtc(par, chan->ddc_base + 1) & 0xf0; 51 52 52 53 if (state) 53 54 val |= 0x10; 54 55 else 55 56 val &= ~0x10; 56 57 57 - VGA_WR08(par->PCIO, 0x3d4, chan->ddc_base + 1); 58 - VGA_WR08(par->PCIO, 0x3d5, val | 0x1); 58 + NVWriteCrtc(par, chan->ddc_base + 1, val | 0x01); 59 59 } 60 60 61 61 static int nvidia_gpio_getscl(void *data) ··· 62 66 struct nvidia_par *par = chan->par; 63 67 u32 val = 0; 64 68 65 - VGA_WR08(par->PCIO, 0x3d4, chan->ddc_base); 66 - if (VGA_RD08(par->PCIO, 0x3d5) & 0x04) 69 + if (NVReadCrtc(par, chan->ddc_base) & 0x04) 67 70 val = 1; 68 71 69 72 return val; ··· 74 79 struct nvidia_par *par = chan->par; 75 80 u32 val = 0; 76 81 77 - VGA_WR08(par->PCIO, 0x3d4, chan->ddc_base); 78 - if (VGA_RD08(par->PCIO, 0x3d5) & 0x08) 82 + if (NVReadCrtc(par, chan->ddc_base) & 0x08) 79 83 val = 1; 80 84 81 85 return val;