|
@@ -1,5 +1,5 @@
|
|
/*
|
|
/*
|
|
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
|
|
|
|
|
|
+ * Copyright 1998-2009 VIA Technologies, Inc. All Rights Reserved.
|
|
* Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
|
|
* Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
|
|
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
* This program is free software; you can redistribute it and/or
|
|
@@ -23,8 +23,9 @@
|
|
#include <linux/seq_file.h>
|
|
#include <linux/seq_file.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/stat.h>
|
|
#include <linux/stat.h>
|
|
-#define _MASTER_FILE
|
|
|
|
|
|
+#include <linux/via-core.h>
|
|
|
|
|
|
|
|
+#define _MASTER_FILE
|
|
#include "global.h"
|
|
#include "global.h"
|
|
|
|
|
|
static char *viafb_name = "Via";
|
|
static char *viafb_name = "Via";
|
|
@@ -221,7 +222,7 @@ static int viafb_check_var(struct fb_var_screeninfo *var,
|
|
/* Adjust var according to our driver's own table */
|
|
/* Adjust var according to our driver's own table */
|
|
viafb_fill_var_timing_info(var, viafb_refresh, vmode_entry);
|
|
viafb_fill_var_timing_info(var, viafb_refresh, vmode_entry);
|
|
if (info->var.accel_flags & FB_ACCELF_TEXT &&
|
|
if (info->var.accel_flags & FB_ACCELF_TEXT &&
|
|
- !ppar->shared->engine_mmio)
|
|
|
|
|
|
+ !ppar->shared->vdev->engine_mmio)
|
|
info->var.accel_flags = 0;
|
|
info->var.accel_flags = 0;
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
@@ -317,12 +318,12 @@ static int viafb_pan_display(struct fb_var_screeninfo *var,
|
|
|
|
|
|
DEBUG_MSG(KERN_DEBUG "viafb_pan_display, address = %d\n", vram_addr);
|
|
DEBUG_MSG(KERN_DEBUG "viafb_pan_display, address = %d\n", vram_addr);
|
|
if (!viafb_dual_fb) {
|
|
if (!viafb_dual_fb) {
|
|
- viafb_set_primary_address(vram_addr);
|
|
|
|
- viafb_set_secondary_address(vram_addr);
|
|
|
|
|
|
+ via_set_primary_address(vram_addr);
|
|
|
|
+ via_set_secondary_address(vram_addr);
|
|
} else if (viapar->iga_path == IGA1)
|
|
} else if (viapar->iga_path == IGA1)
|
|
- viafb_set_primary_address(vram_addr);
|
|
|
|
|
|
+ via_set_primary_address(vram_addr);
|
|
else
|
|
else
|
|
- viafb_set_secondary_address(vram_addr);
|
|
|
|
|
|
+ via_set_secondary_address(vram_addr);
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -696,7 +697,7 @@ static void viafb_fillrect(struct fb_info *info,
|
|
rop = 0xF0;
|
|
rop = 0xF0;
|
|
|
|
|
|
DEBUG_MSG(KERN_DEBUG "viafb 2D engine: fillrect\n");
|
|
DEBUG_MSG(KERN_DEBUG "viafb 2D engine: fillrect\n");
|
|
- if (shared->hw_bitblt(shared->engine_mmio, VIA_BITBLT_FILL,
|
|
|
|
|
|
+ if (shared->hw_bitblt(shared->vdev->engine_mmio, VIA_BITBLT_FILL,
|
|
rect->width, rect->height, info->var.bits_per_pixel,
|
|
rect->width, rect->height, info->var.bits_per_pixel,
|
|
viapar->vram_addr, info->fix.line_length, rect->dx, rect->dy,
|
|
viapar->vram_addr, info->fix.line_length, rect->dx, rect->dy,
|
|
NULL, 0, 0, 0, 0, fg_color, 0, rop))
|
|
NULL, 0, 0, 0, 0, fg_color, 0, rop))
|
|
@@ -718,7 +719,7 @@ static void viafb_copyarea(struct fb_info *info,
|
|
return;
|
|
return;
|
|
|
|
|
|
DEBUG_MSG(KERN_DEBUG "viafb 2D engine: copyarea\n");
|
|
DEBUG_MSG(KERN_DEBUG "viafb 2D engine: copyarea\n");
|
|
- if (shared->hw_bitblt(shared->engine_mmio, VIA_BITBLT_COLOR,
|
|
|
|
|
|
+ if (shared->hw_bitblt(shared->vdev->engine_mmio, VIA_BITBLT_COLOR,
|
|
area->width, area->height, info->var.bits_per_pixel,
|
|
area->width, area->height, info->var.bits_per_pixel,
|
|
viapar->vram_addr, info->fix.line_length, area->dx, area->dy,
|
|
viapar->vram_addr, info->fix.line_length, area->dx, area->dy,
|
|
NULL, viapar->vram_addr, info->fix.line_length,
|
|
NULL, viapar->vram_addr, info->fix.line_length,
|
|
@@ -755,7 +756,7 @@ static void viafb_imageblit(struct fb_info *info,
|
|
op = VIA_BITBLT_COLOR;
|
|
op = VIA_BITBLT_COLOR;
|
|
|
|
|
|
DEBUG_MSG(KERN_DEBUG "viafb 2D engine: imageblit\n");
|
|
DEBUG_MSG(KERN_DEBUG "viafb 2D engine: imageblit\n");
|
|
- if (shared->hw_bitblt(shared->engine_mmio, op,
|
|
|
|
|
|
+ if (shared->hw_bitblt(shared->vdev->engine_mmio, op,
|
|
image->width, image->height, info->var.bits_per_pixel,
|
|
image->width, image->height, info->var.bits_per_pixel,
|
|
viapar->vram_addr, info->fix.line_length, image->dx, image->dy,
|
|
viapar->vram_addr, info->fix.line_length, image->dx, image->dy,
|
|
(u32 *)image->data, 0, 0, 0, 0, fg_color, bg_color, 0))
|
|
(u32 *)image->data, 0, 0, 0, 0, fg_color, bg_color, 0))
|
|
@@ -765,7 +766,7 @@ static void viafb_imageblit(struct fb_info *info,
|
|
static int viafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
|
|
static int viafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
|
|
{
|
|
{
|
|
struct viafb_par *viapar = info->par;
|
|
struct viafb_par *viapar = info->par;
|
|
- void __iomem *engine = viapar->shared->engine_mmio;
|
|
|
|
|
|
+ void __iomem *engine = viapar->shared->vdev->engine_mmio;
|
|
u32 temp, xx, yy, bg_color = 0, fg_color = 0,
|
|
u32 temp, xx, yy, bg_color = 0, fg_color = 0,
|
|
chip_name = viapar->shared->chip_info.gfx_chip_name;
|
|
chip_name = viapar->shared->chip_info.gfx_chip_name;
|
|
int i, j = 0, cur_size = 64;
|
|
int i, j = 0, cur_size = 64;
|
|
@@ -1018,8 +1019,8 @@ static void viafb_set_device(struct device_t active_dev)
|
|
viafb_SAMM_ON = active_dev.samm;
|
|
viafb_SAMM_ON = active_dev.samm;
|
|
viafb_primary_dev = active_dev.primary_dev;
|
|
viafb_primary_dev = active_dev.primary_dev;
|
|
|
|
|
|
- viafb_set_primary_address(0);
|
|
|
|
- viafb_set_secondary_address(viafb_SAMM_ON ? viafb_second_offset : 0);
|
|
|
|
|
|
+ via_set_primary_address(0);
|
|
|
|
+ via_set_secondary_address(viafb_SAMM_ON ? viafb_second_offset : 0);
|
|
viafb_set_iga_path();
|
|
viafb_set_iga_path();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1165,8 +1166,9 @@ static int apply_device_setting(struct viafb_ioctl_setting setting_info,
|
|
if (viafb_SAMM_ON)
|
|
if (viafb_SAMM_ON)
|
|
viafb_primary_dev = setting_info.primary_device;
|
|
viafb_primary_dev = setting_info.primary_device;
|
|
|
|
|
|
- viafb_set_primary_address(0);
|
|
|
|
- viafb_set_secondary_address(viafb_SAMM_ON ? viafb_second_offset : 0);
|
|
|
|
|
|
+ via_set_primary_address(0);
|
|
|
|
+ via_set_secondary_address(viafb_SAMM_ON ?
|
|
|
|
+ viafb_second_offset : 0);
|
|
viafb_set_iga_path();
|
|
viafb_set_iga_path();
|
|
}
|
|
}
|
|
need_set_mode = 1;
|
|
need_set_mode = 1;
|
|
@@ -1325,6 +1327,8 @@ static void parse_dvi_port(void)
|
|
output_interface);
|
|
output_interface);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#ifdef CONFIG_FB_VIA_DIRECT_PROCFS
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* The proc filesystem read/write function, a simple proc implement to
|
|
* The proc filesystem read/write function, a simple proc implement to
|
|
* get/set the value of DPA DVP0, DVP0DataDriving, DVP0ClockDriving, DVP1,
|
|
* get/set the value of DPA DVP0, DVP0DataDriving, DVP0ClockDriving, DVP1,
|
|
@@ -1701,16 +1705,21 @@ static void viafb_init_proc(struct proc_dir_entry **viafb_entry)
|
|
}
|
|
}
|
|
static void viafb_remove_proc(struct proc_dir_entry *viafb_entry)
|
|
static void viafb_remove_proc(struct proc_dir_entry *viafb_entry)
|
|
{
|
|
{
|
|
- /* no problem if it was not registered */
|
|
|
|
|
|
+ struct chip_information *chip_info = &viaparinfo->shared->chip_info;
|
|
|
|
+
|
|
remove_proc_entry("dvp0", viafb_entry);/* parent dir */
|
|
remove_proc_entry("dvp0", viafb_entry);/* parent dir */
|
|
remove_proc_entry("dvp1", viafb_entry);
|
|
remove_proc_entry("dvp1", viafb_entry);
|
|
remove_proc_entry("dfph", viafb_entry);
|
|
remove_proc_entry("dfph", viafb_entry);
|
|
remove_proc_entry("dfpl", viafb_entry);
|
|
remove_proc_entry("dfpl", viafb_entry);
|
|
- remove_proc_entry("vt1636", viafb_entry);
|
|
|
|
- remove_proc_entry("vt1625", viafb_entry);
|
|
|
|
|
|
+ if (chip_info->lvds_chip_info.lvds_chip_name == VT1636_LVDS
|
|
|
|
+ || chip_info->lvds_chip_info2.lvds_chip_name == VT1636_LVDS)
|
|
|
|
+ remove_proc_entry("vt1636", viafb_entry);
|
|
|
|
+
|
|
remove_proc_entry("viafb", NULL);
|
|
remove_proc_entry("viafb", NULL);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#endif /* CONFIG_FB_VIA_DIRECT_PROCFS */
|
|
|
|
+
|
|
static int parse_mode(const char *str, u32 *xres, u32 *yres)
|
|
static int parse_mode(const char *str, u32 *xres, u32 *yres)
|
|
{
|
|
{
|
|
char *ptr;
|
|
char *ptr;
|
|
@@ -1732,12 +1741,13 @@ static int parse_mode(const char *str, u32 *xres, u32 *yres)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-static int __devinit via_pci_probe(struct pci_dev *pdev,
|
|
|
|
- const struct pci_device_id *ent)
|
|
|
|
|
|
+
|
|
|
|
+int __devinit via_fb_pci_probe(struct viafb_dev *vdev)
|
|
{
|
|
{
|
|
u32 default_xres, default_yres;
|
|
u32 default_xres, default_yres;
|
|
struct VideoModeTable *vmode_entry;
|
|
struct VideoModeTable *vmode_entry;
|
|
struct fb_var_screeninfo default_var;
|
|
struct fb_var_screeninfo default_var;
|
|
|
|
+ int rc;
|
|
u32 viafb_par_length;
|
|
u32 viafb_par_length;
|
|
|
|
|
|
DEBUG_MSG(KERN_INFO "VIAFB PCI Probe!!\n");
|
|
DEBUG_MSG(KERN_INFO "VIAFB PCI Probe!!\n");
|
|
@@ -1749,14 +1759,15 @@ static int __devinit via_pci_probe(struct pci_dev *pdev,
|
|
*/
|
|
*/
|
|
viafbinfo = framebuffer_alloc(viafb_par_length +
|
|
viafbinfo = framebuffer_alloc(viafb_par_length +
|
|
ALIGN(sizeof(struct viafb_shared), BITS_PER_LONG/8),
|
|
ALIGN(sizeof(struct viafb_shared), BITS_PER_LONG/8),
|
|
- &pdev->dev);
|
|
|
|
|
|
+ &vdev->pdev->dev);
|
|
if (!viafbinfo) {
|
|
if (!viafbinfo) {
|
|
printk(KERN_ERR"Could not allocate memory for viafb_info.\n");
|
|
printk(KERN_ERR"Could not allocate memory for viafb_info.\n");
|
|
- return -ENODEV;
|
|
|
|
|
|
+ return -ENOMEM;
|
|
}
|
|
}
|
|
|
|
|
|
viaparinfo = (struct viafb_par *)viafbinfo->par;
|
|
viaparinfo = (struct viafb_par *)viafbinfo->par;
|
|
viaparinfo->shared = viafbinfo->par + viafb_par_length;
|
|
viaparinfo->shared = viafbinfo->par + viafb_par_length;
|
|
|
|
+ viaparinfo->shared->vdev = vdev;
|
|
viaparinfo->vram_addr = 0;
|
|
viaparinfo->vram_addr = 0;
|
|
viaparinfo->tmds_setting_info = &viaparinfo->shared->tmds_setting_info;
|
|
viaparinfo->tmds_setting_info = &viaparinfo->shared->tmds_setting_info;
|
|
viaparinfo->lvds_setting_info = &viaparinfo->shared->lvds_setting_info;
|
|
viaparinfo->lvds_setting_info = &viaparinfo->shared->lvds_setting_info;
|
|
@@ -1774,23 +1785,20 @@ static int __devinit via_pci_probe(struct pci_dev *pdev,
|
|
if (!viafb_SAMM_ON)
|
|
if (!viafb_SAMM_ON)
|
|
viafb_dual_fb = 0;
|
|
viafb_dual_fb = 0;
|
|
|
|
|
|
- /* Set up I2C bus stuff */
|
|
|
|
- viafb_create_i2c_bus(viaparinfo);
|
|
|
|
-
|
|
|
|
- viafb_init_chip_info(pdev, ent);
|
|
|
|
- viaparinfo->fbmem = pci_resource_start(pdev, 0);
|
|
|
|
- viaparinfo->memsize = viafb_get_fb_size_from_pci();
|
|
|
|
|
|
+ viafb_init_chip_info(vdev->chip_type);
|
|
|
|
+ /*
|
|
|
|
+ * The framebuffer will have been successfully mapped by
|
|
|
|
+ * the core (or we'd not be here), but we still need to
|
|
|
|
+ * set up our own accounting.
|
|
|
|
+ */
|
|
|
|
+ viaparinfo->fbmem = vdev->fbmem_start;
|
|
|
|
+ viaparinfo->memsize = vdev->fbmem_len;
|
|
viaparinfo->fbmem_free = viaparinfo->memsize;
|
|
viaparinfo->fbmem_free = viaparinfo->memsize;
|
|
viaparinfo->fbmem_used = 0;
|
|
viaparinfo->fbmem_used = 0;
|
|
- viafbinfo->screen_base = ioremap_nocache(viaparinfo->fbmem,
|
|
|
|
- viaparinfo->memsize);
|
|
|
|
- if (!viafbinfo->screen_base) {
|
|
|
|
- printk(KERN_INFO "ioremap failed\n");
|
|
|
|
- return -ENOMEM;
|
|
|
|
- }
|
|
|
|
|
|
+ viafbinfo->screen_base = vdev->fbmem;
|
|
|
|
|
|
- viafbinfo->fix.mmio_start = pci_resource_start(pdev, 1);
|
|
|
|
- viafbinfo->fix.mmio_len = pci_resource_len(pdev, 1);
|
|
|
|
|
|
+ viafbinfo->fix.mmio_start = vdev->engine_start;
|
|
|
|
+ viafbinfo->fix.mmio_len = vdev->engine_len;
|
|
viafbinfo->node = 0;
|
|
viafbinfo->node = 0;
|
|
viafbinfo->fbops = &viafb_ops;
|
|
viafbinfo->fbops = &viafb_ops;
|
|
viafbinfo->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN;
|
|
viafbinfo->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN;
|
|
@@ -1858,12 +1866,13 @@ static int __devinit via_pci_probe(struct pci_dev *pdev,
|
|
viafbinfo->var = default_var;
|
|
viafbinfo->var = default_var;
|
|
|
|
|
|
if (viafb_dual_fb) {
|
|
if (viafb_dual_fb) {
|
|
- viafbinfo1 = framebuffer_alloc(viafb_par_length, &pdev->dev);
|
|
|
|
|
|
+ viafbinfo1 = framebuffer_alloc(viafb_par_length,
|
|
|
|
+ &vdev->pdev->dev);
|
|
if (!viafbinfo1) {
|
|
if (!viafbinfo1) {
|
|
printk(KERN_ERR
|
|
printk(KERN_ERR
|
|
"allocate the second framebuffer struct error\n");
|
|
"allocate the second framebuffer struct error\n");
|
|
- framebuffer_release(viafbinfo);
|
|
|
|
- return -ENOMEM;
|
|
|
|
|
|
+ rc = -ENOMEM;
|
|
|
|
+ goto out_fb_release;
|
|
}
|
|
}
|
|
viaparinfo1 = viafbinfo1->par;
|
|
viaparinfo1 = viafbinfo1->par;
|
|
memcpy(viaparinfo1, viaparinfo, viafb_par_length);
|
|
memcpy(viaparinfo1, viaparinfo, viafb_par_length);
|
|
@@ -1914,48 +1923,66 @@ static int __devinit via_pci_probe(struct pci_dev *pdev,
|
|
viaparinfo->depth = fb_get_color_depth(&viafbinfo->var,
|
|
viaparinfo->depth = fb_get_color_depth(&viafbinfo->var,
|
|
&viafbinfo->fix);
|
|
&viafbinfo->fix);
|
|
default_var.activate = FB_ACTIVATE_NOW;
|
|
default_var.activate = FB_ACTIVATE_NOW;
|
|
- fb_alloc_cmap(&viafbinfo->cmap, 256, 0);
|
|
|
|
|
|
+ rc = fb_alloc_cmap(&viafbinfo->cmap, 256, 0);
|
|
|
|
+ if (rc)
|
|
|
|
+ goto out_fb1_release;
|
|
|
|
|
|
if (viafb_dual_fb && (viafb_primary_dev == LCD_Device)
|
|
if (viafb_dual_fb && (viafb_primary_dev == LCD_Device)
|
|
&& (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266)) {
|
|
&& (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266)) {
|
|
- if (register_framebuffer(viafbinfo1) < 0)
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
+ rc = register_framebuffer(viafbinfo1);
|
|
|
|
+ if (rc)
|
|
|
|
+ goto out_dealloc_cmap;
|
|
}
|
|
}
|
|
- if (register_framebuffer(viafbinfo) < 0)
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
+ rc = register_framebuffer(viafbinfo);
|
|
|
|
+ if (rc)
|
|
|
|
+ goto out_fb1_unreg_lcd_cle266;
|
|
|
|
|
|
if (viafb_dual_fb && ((viafb_primary_dev != LCD_Device)
|
|
if (viafb_dual_fb && ((viafb_primary_dev != LCD_Device)
|
|
|| (viaparinfo->chip_info->gfx_chip_name !=
|
|
|| (viaparinfo->chip_info->gfx_chip_name !=
|
|
UNICHROME_CLE266))) {
|
|
UNICHROME_CLE266))) {
|
|
- if (register_framebuffer(viafbinfo1) < 0)
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
+ rc = register_framebuffer(viafbinfo1);
|
|
|
|
+ if (rc)
|
|
|
|
+ goto out_fb_unreg;
|
|
}
|
|
}
|
|
DEBUG_MSG(KERN_INFO "fb%d: %s frame buffer device %dx%d-%dbpp\n",
|
|
DEBUG_MSG(KERN_INFO "fb%d: %s frame buffer device %dx%d-%dbpp\n",
|
|
viafbinfo->node, viafbinfo->fix.id, default_var.xres,
|
|
viafbinfo->node, viafbinfo->fix.id, default_var.xres,
|
|
default_var.yres, default_var.bits_per_pixel);
|
|
default_var.yres, default_var.bits_per_pixel);
|
|
|
|
|
|
|
|
+#ifdef CONFIG_FB_VIA_DIRECT_PROCFS
|
|
viafb_init_proc(&viaparinfo->shared->proc_entry);
|
|
viafb_init_proc(&viaparinfo->shared->proc_entry);
|
|
|
|
+#endif
|
|
viafb_init_dac(IGA2);
|
|
viafb_init_dac(IGA2);
|
|
return 0;
|
|
return 0;
|
|
|
|
+
|
|
|
|
+out_fb_unreg:
|
|
|
|
+ unregister_framebuffer(viafbinfo);
|
|
|
|
+out_fb1_unreg_lcd_cle266:
|
|
|
|
+ if (viafb_dual_fb && (viafb_primary_dev == LCD_Device)
|
|
|
|
+ && (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266))
|
|
|
|
+ unregister_framebuffer(viafbinfo1);
|
|
|
|
+out_dealloc_cmap:
|
|
|
|
+ fb_dealloc_cmap(&viafbinfo->cmap);
|
|
|
|
+out_fb1_release:
|
|
|
|
+ if (viafbinfo1)
|
|
|
|
+ framebuffer_release(viafbinfo1);
|
|
|
|
+out_fb_release:
|
|
|
|
+ framebuffer_release(viafbinfo);
|
|
|
|
+ return rc;
|
|
}
|
|
}
|
|
|
|
|
|
-static void __devexit via_pci_remove(struct pci_dev *pdev)
|
|
|
|
|
|
+void __devexit via_fb_pci_remove(struct pci_dev *pdev)
|
|
{
|
|
{
|
|
DEBUG_MSG(KERN_INFO "via_pci_remove!\n");
|
|
DEBUG_MSG(KERN_INFO "via_pci_remove!\n");
|
|
fb_dealloc_cmap(&viafbinfo->cmap);
|
|
fb_dealloc_cmap(&viafbinfo->cmap);
|
|
unregister_framebuffer(viafbinfo);
|
|
unregister_framebuffer(viafbinfo);
|
|
if (viafb_dual_fb)
|
|
if (viafb_dual_fb)
|
|
unregister_framebuffer(viafbinfo1);
|
|
unregister_framebuffer(viafbinfo1);
|
|
- iounmap((void *)viafbinfo->screen_base);
|
|
|
|
- iounmap(viaparinfo->shared->engine_mmio);
|
|
|
|
-
|
|
|
|
- viafb_delete_i2c_buss(viaparinfo);
|
|
|
|
-
|
|
|
|
|
|
+#ifdef CONFIG_FB_VIA_DIRECT_PROCFS
|
|
|
|
+ viafb_remove_proc(viaparinfo->shared->proc_entry);
|
|
|
|
+#endif
|
|
framebuffer_release(viafbinfo);
|
|
framebuffer_release(viafbinfo);
|
|
if (viafb_dual_fb)
|
|
if (viafb_dual_fb)
|
|
framebuffer_release(viafbinfo1);
|
|
framebuffer_release(viafbinfo1);
|
|
-
|
|
|
|
- viafb_remove_proc(viaparinfo->shared->proc_entry);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
#ifndef MODULE
|
|
#ifndef MODULE
|
|
@@ -2031,41 +2058,10 @@ static int __init viafb_setup(char *options)
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-static struct pci_device_id viafb_pci_table[] __devinitdata = {
|
|
|
|
- { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_CLE266_DID),
|
|
|
|
- .driver_data = UNICHROME_CLE266 },
|
|
|
|
- { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_PM800_DID),
|
|
|
|
- .driver_data = UNICHROME_PM800 },
|
|
|
|
- { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_K400_DID),
|
|
|
|
- .driver_data = UNICHROME_K400 },
|
|
|
|
- { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_K800_DID),
|
|
|
|
- .driver_data = UNICHROME_K800 },
|
|
|
|
- { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_P4M890_DID),
|
|
|
|
- .driver_data = UNICHROME_CN700 },
|
|
|
|
- { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_K8M890_DID),
|
|
|
|
- .driver_data = UNICHROME_K8M890 },
|
|
|
|
- { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_CX700_DID),
|
|
|
|
- .driver_data = UNICHROME_CX700 },
|
|
|
|
- { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_P4M900_DID),
|
|
|
|
- .driver_data = UNICHROME_P4M900 },
|
|
|
|
- { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_CN750_DID),
|
|
|
|
- .driver_data = UNICHROME_CN750 },
|
|
|
|
- { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_VX800_DID),
|
|
|
|
- .driver_data = UNICHROME_VX800 },
|
|
|
|
- { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_VX855_DID),
|
|
|
|
- .driver_data = UNICHROME_VX855 },
|
|
|
|
- { }
|
|
|
|
-};
|
|
|
|
-MODULE_DEVICE_TABLE(pci, viafb_pci_table);
|
|
|
|
-
|
|
|
|
-static struct pci_driver viafb_driver = {
|
|
|
|
- .name = "viafb",
|
|
|
|
- .id_table = viafb_pci_table,
|
|
|
|
- .probe = via_pci_probe,
|
|
|
|
- .remove = __devexit_p(via_pci_remove),
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-static int __init viafb_init(void)
|
|
|
|
|
|
+/*
|
|
|
|
+ * These are called out of via-core for now.
|
|
|
|
+ */
|
|
|
|
+int __init viafb_init(void)
|
|
{
|
|
{
|
|
u32 dummy;
|
|
u32 dummy;
|
|
#ifndef MODULE
|
|
#ifndef MODULE
|
|
@@ -2084,13 +2080,12 @@ static int __init viafb_init(void)
|
|
printk(KERN_INFO
|
|
printk(KERN_INFO
|
|
"VIA Graphics Intergration Chipset framebuffer %d.%d initializing\n",
|
|
"VIA Graphics Intergration Chipset framebuffer %d.%d initializing\n",
|
|
VERSION_MAJOR, VERSION_MINOR);
|
|
VERSION_MAJOR, VERSION_MINOR);
|
|
- return pci_register_driver(&viafb_driver);
|
|
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-static void __exit viafb_exit(void)
|
|
|
|
|
|
+void __exit viafb_exit(void)
|
|
{
|
|
{
|
|
DEBUG_MSG(KERN_INFO "viafb_exit!\n");
|
|
DEBUG_MSG(KERN_INFO "viafb_exit!\n");
|
|
- pci_unregister_driver(&viafb_driver);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static struct fb_ops viafb_ops = {
|
|
static struct fb_ops viafb_ops = {
|
|
@@ -2110,8 +2105,6 @@ static struct fb_ops viafb_ops = {
|
|
.fb_sync = viafb_sync,
|
|
.fb_sync = viafb_sync,
|
|
};
|
|
};
|
|
|
|
|
|
-module_init(viafb_init);
|
|
|
|
-module_exit(viafb_exit);
|
|
|
|
|
|
|
|
#ifdef MODULE
|
|
#ifdef MODULE
|
|
module_param(viafb_mode, charp, S_IRUSR);
|
|
module_param(viafb_mode, charp, S_IRUSR);
|