Commit 0e170c72 authored by Maik Broemme's avatar Maik Broemme Committed by Linus Torvalds

fbdev: intelfb: add support for the Intel Integrated Graphics Controller 965G/965GM

Add support for the 965G and 965GM graphic chipsets to the intelfb driver.  I
have a notebook with an Intel Mobile GM965/GL960 Integrated Graphics
Controller and with the attached patch the framebuffer comes up.  I have
tested it a bit with DirectFB to make sure it is working stable.

I also have an Intel Mobile GM945 and I compared the results, the programming
interface of the 9xx series from Intel is mostly the same, so I think the
patch should add all the functionality which the 945GM has.
Signed-off-by: default avatarMaik Broemme <mbroemme@plusserver.de>
Cc: Dave Airlie <airlied@linux.ie>
Cc: Antonino Daplas <adaplas@pol.net>
Cc: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Cc: Krzysztof Halasa <khc@pm.waw.pl>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 0aa16341
...@@ -14,6 +14,8 @@ graphics devices. These would include: ...@@ -14,6 +14,8 @@ graphics devices. These would include:
Intel 915GM Intel 915GM
Intel 945G Intel 945G
Intel 945GM Intel 945GM
Intel 965G
Intel 965GM
B. List of available options B. List of available options
......
...@@ -1119,7 +1119,7 @@ config FB_CARILLO_RANCH ...@@ -1119,7 +1119,7 @@ config FB_CARILLO_RANCH
This driver supports the LE80578 (Carillo Ranch) board This driver supports the LE80578 (Carillo Ranch) board
config FB_INTEL config FB_INTEL
tristate "Intel 830M/845G/852GM/855GM/865G/915G/945G support (EXPERIMENTAL)" tristate "Intel 830M/845G/852GM/855GM/865G/915G/945G/945GM/965G/965GM support (EXPERIMENTAL)"
depends on FB && EXPERIMENTAL && PCI && X86 depends on FB && EXPERIMENTAL && PCI && X86
select AGP select AGP
select AGP_INTEL select AGP_INTEL
...@@ -1129,7 +1129,7 @@ config FB_INTEL ...@@ -1129,7 +1129,7 @@ config FB_INTEL
select FB_CFB_IMAGEBLIT select FB_CFB_IMAGEBLIT
help help
This driver supports the on-board graphics built in to the Intel This driver supports the on-board graphics built in to the Intel
830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM chipsets. 830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM/965G/965GM chipsets.
Say Y if you have and plan to use such a board. Say Y if you have and plan to use such a board.
If you say Y here and want DDC/I2C support you must first say Y to If you say Y here and want DDC/I2C support you must first say Y to
......
...@@ -12,9 +12,9 @@ ...@@ -12,9 +12,9 @@
#endif #endif
/*** Version/name ***/ /*** Version/name ***/
#define INTELFB_VERSION "0.9.4" #define INTELFB_VERSION "0.9.5"
#define INTELFB_MODULE_NAME "intelfb" #define INTELFB_MODULE_NAME "intelfb"
#define SUPPORTED_CHIPSETS "830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM" #define SUPPORTED_CHIPSETS "830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM/965G/965GM"
/*** Debug/feature defines ***/ /*** Debug/feature defines ***/
...@@ -58,6 +58,8 @@ ...@@ -58,6 +58,8 @@
#define PCI_DEVICE_ID_INTEL_915GM 0x2592 #define PCI_DEVICE_ID_INTEL_915GM 0x2592
#define PCI_DEVICE_ID_INTEL_945G 0x2772 #define PCI_DEVICE_ID_INTEL_945G 0x2772
#define PCI_DEVICE_ID_INTEL_945GM 0x27A2 #define PCI_DEVICE_ID_INTEL_945GM 0x27A2
#define PCI_DEVICE_ID_INTEL_965G 0x29A2
#define PCI_DEVICE_ID_INTEL_965GM 0x2A02
/* Size of MMIO region */ /* Size of MMIO region */
#define INTEL_REG_SIZE 0x80000 #define INTEL_REG_SIZE 0x80000
...@@ -158,6 +160,8 @@ enum intel_chips { ...@@ -158,6 +160,8 @@ enum intel_chips {
INTEL_915GM, INTEL_915GM,
INTEL_945G, INTEL_945G,
INTEL_945GM, INTEL_945GM,
INTEL_965G,
INTEL_965GM,
}; };
struct intelfb_hwstate { struct intelfb_hwstate {
...@@ -358,7 +362,9 @@ struct intelfb_info { ...@@ -358,7 +362,9 @@ struct intelfb_info {
#define IS_I9XX(dinfo) (((dinfo)->chipset == INTEL_915G) || \ #define IS_I9XX(dinfo) (((dinfo)->chipset == INTEL_915G) || \
((dinfo)->chipset == INTEL_915GM) || \ ((dinfo)->chipset == INTEL_915GM) || \
((dinfo)->chipset == INTEL_945G) || \ ((dinfo)->chipset == INTEL_945G) || \
((dinfo)->chipset==INTEL_945GM)) ((dinfo)->chipset == INTEL_945GM) || \
((dinfo)->chipset == INTEL_965G) || \
((dinfo)->chipset == INTEL_965GM))
#ifndef FBIO_WAITFORVSYNC #ifndef FBIO_WAITFORVSYNC
#define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32) #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32)
......
...@@ -169,6 +169,8 @@ void intelfb_create_i2c_busses(struct intelfb_info *dinfo) ...@@ -169,6 +169,8 @@ void intelfb_create_i2c_busses(struct intelfb_info *dinfo)
/* has some LVDS + tv-out */ /* has some LVDS + tv-out */
case INTEL_945G: case INTEL_945G:
case INTEL_945GM: case INTEL_945GM:
case INTEL_965G:
case INTEL_965GM:
/* SDVO ports have a single control bus - 2 devices */ /* SDVO ports have a single control bus - 2 devices */
dinfo->output[i].type = INTELFB_OUTPUT_SDVO; dinfo->output[i].type = INTELFB_OUTPUT_SDVO;
intelfb_setup_i2c_bus(dinfo, &dinfo->output[i].i2c_bus, intelfb_setup_i2c_bus(dinfo, &dinfo->output[i].i2c_bus,
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* intelfb * intelfb
* *
* Linux framebuffer driver for Intel(R) 830M/845G/852GM/855GM/865G/915G/915GM/ * Linux framebuffer driver for Intel(R) 830M/845G/852GM/855GM/865G/915G/915GM/
* 945G/945GM integrated graphics chips. * 945G/945GM/965G/965GM integrated graphics chips.
* *
* Copyright © 2002, 2003 David Dawes <dawes@xfree86.org> * Copyright © 2002, 2003 David Dawes <dawes@xfree86.org>
* 2004 Sylvain Meyer * 2004 Sylvain Meyer
...@@ -99,6 +99,9 @@ ...@@ -99,6 +99,9 @@
* Add vram option to reserve more memory than stolen by BIOS * Add vram option to reserve more memory than stolen by BIOS
* Fix intelfbhw_pan_display typo * Fix intelfbhw_pan_display typo
* Add __initdata annotations * Add __initdata annotations
*
* 04/2008 - Version 0.9.5
* Add support for 965G/965GM. (Maik Broemme <mbroemme@plusserver.de>)
*/ */
#include <linux/module.h> #include <linux/module.h>
...@@ -180,6 +183,8 @@ static struct pci_device_id intelfb_pci_table[] __devinitdata = { ...@@ -180,6 +183,8 @@ static struct pci_device_id intelfb_pci_table[] __devinitdata = {
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915GM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915GM }, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915GM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915GM },
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_945G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_945G }, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_945G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_945G },
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_945GM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_945GM }, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_945GM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_945GM },
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_965G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_965G },
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_965GM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_965GM },
{ 0, } { 0, }
}; };
...@@ -549,7 +554,10 @@ static int __devinit intelfb_pci_register(struct pci_dev *pdev, ...@@ -549,7 +554,10 @@ static int __devinit intelfb_pci_register(struct pci_dev *pdev,
if ((ent->device == PCI_DEVICE_ID_INTEL_915G) || if ((ent->device == PCI_DEVICE_ID_INTEL_915G) ||
(ent->device == PCI_DEVICE_ID_INTEL_915GM) || (ent->device == PCI_DEVICE_ID_INTEL_915GM) ||
(ent->device == PCI_DEVICE_ID_INTEL_945G) || (ent->device == PCI_DEVICE_ID_INTEL_945G) ||
(ent->device == PCI_DEVICE_ID_INTEL_945GM)) { (ent->device == PCI_DEVICE_ID_INTEL_945GM) ||
(ent->device == PCI_DEVICE_ID_INTEL_965G) ||
(ent->device == PCI_DEVICE_ID_INTEL_965GM)) {
aperture_bar = 2; aperture_bar = 2;
mmio_bar = 0; mmio_bar = 0;
} }
......
...@@ -143,6 +143,18 @@ int intelfbhw_get_chipset(struct pci_dev *pdev, struct intelfb_info *dinfo) ...@@ -143,6 +143,18 @@ int intelfbhw_get_chipset(struct pci_dev *pdev, struct intelfb_info *dinfo)
dinfo->mobile = 1; dinfo->mobile = 1;
dinfo->pll_index = PLLS_I9xx; dinfo->pll_index = PLLS_I9xx;
return 0; return 0;
case PCI_DEVICE_ID_INTEL_965G:
dinfo->name = "Intel(R) 965G";
dinfo->chipset = INTEL_965G;
dinfo->mobile = 0;
dinfo->pll_index = PLLS_I9xx;
return 0;
case PCI_DEVICE_ID_INTEL_965GM:
dinfo->name = "Intel(R) 965GM";
dinfo->chipset = INTEL_965GM;
dinfo->mobile = 1;
dinfo->pll_index = PLLS_I9xx;
return 0;
default: default:
return 1; return 1;
} }
...@@ -174,7 +186,9 @@ int intelfbhw_get_memory(struct pci_dev *pdev, int *aperture_size, ...@@ -174,7 +186,9 @@ int intelfbhw_get_memory(struct pci_dev *pdev, int *aperture_size,
case PCI_DEVICE_ID_INTEL_915GM: case PCI_DEVICE_ID_INTEL_915GM:
case PCI_DEVICE_ID_INTEL_945G: case PCI_DEVICE_ID_INTEL_945G:
case PCI_DEVICE_ID_INTEL_945GM: case PCI_DEVICE_ID_INTEL_945GM:
/* 915 and 945 chipsets support a 256MB aperture. case PCI_DEVICE_ID_INTEL_965G:
case PCI_DEVICE_ID_INTEL_965GM:
/* 915, 945 and 965 chipsets support a 256MB aperture.
Aperture size is determined by inspected the Aperture size is determined by inspected the
base address of the aperture. */ base address of the aperture. */
if (pci_resource_start(pdev, 2) & 0x08000000) if (pci_resource_start(pdev, 2) & 0x08000000)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment