Commit 83f7182b authored by James Simmons's avatar James Simmons

Grabbed the PPC drivers and in the process of porting to the latest api. Can...

Grabbed the PPC drivers and in the process of porting to the latest api. Can now use driver specific read and write functions   
parent 9cec4024
......@@ -26,7 +26,7 @@ obj-$(CONFIG_FB_PM3) += pm3fb.o
obj-$(CONFIG_FB_APOLLO) += dnfb.o cfbfillrect.o cfbimgblt.o
obj-$(CONFIG_FB_Q40) += q40fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_ATARI) += atafb.o
obj-$(CONFIG_FB_ATY128) += aty128fb.o
obj-$(CONFIG_FB_ATY128) += aty128fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_RADEON) += radeonfb.o
obj-$(CONFIG_FB_NEOMAGIC) += neofb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_IGA) += igafb.o
......
......@@ -21,6 +21,9 @@
* - Convert to new framebuffer API,
* fix colormap setting at 16 bits/pixel (565)
*
* Paul Mundt
* - PCI hotplug
*
* Based off of Geert's atyfb.c and vfb.c.
*
* TODO:
......@@ -81,12 +84,6 @@
#include <asm/btext.h>
#endif /* CONFIG_BOOTX_TEXT */
#include <video/fbcon.h>
#include <video/fbcon-cfb8.h>
#include <video/fbcon-cfb16.h>
#include <video/fbcon-cfb24.h>
#include <video/fbcon-cfb32.h>
#ifdef CONFIG_MTRR
#include <asm/mtrr.h>
#endif
......@@ -326,7 +323,6 @@ struct aty128fb_par {
struct fb_info_aty128 {
struct fb_info fb_info;
struct display disp;
struct aty128fb_par par;
u32 pseudo_palette[17];
struct fb_info_aty128 *next;
......@@ -354,11 +350,11 @@ static int aty128fb_check_var(struct fb_var_screeninfo *var,
static int aty128fb_set_par(struct fb_info *info);
static int aty128fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
u_int transp, struct fb_info *info);
static int aty128fb_pan_display(struct fb_var_screeninfo *var, int con,
static int aty128fb_pan_display(struct fb_var_screeninfo *var,
struct fb_info *fb);
static int aty128fb_blank(int blank, struct fb_info *fb);
static int aty128fb_ioctl(struct inode *inode, struct file *file, u_int cmd,
u_long arg, int con, struct fb_info *info);
u_long arg, struct fb_info *info);
static int aty128fb_sync(struct fb_info *info);
/*
......@@ -393,7 +389,6 @@ static u32 depth_to_dst(u32 depth);
static struct fb_ops aty128fb_ops = {
.owner = THIS_MODULE,
.fb_set_var = gen_set_var,
.fb_check_var = aty128fb_check_var,
.fb_set_par = aty128fb_set_par,
.fb_setcolreg = aty128fb_setcolreg,
......@@ -1337,8 +1332,7 @@ aty128fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
* Pan or Wrap the Display
*/
static int
aty128fb_pan_display(struct fb_var_screeninfo *var, int con,
struct fb_info *fb)
aty128fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *fb)
{
struct aty128fb_par *par = fb->par;
u32 xoffset, yoffset;
......@@ -1680,7 +1674,6 @@ aty128_pci_register(struct pci_dev *pdev,
par = &lump->par;
info->par = par;
info->disp = &lump->disp;
info->fix = aty128fb_fix;
info->pseudo_palette = lump->pseudo_palette;
......@@ -1715,13 +1708,13 @@ aty128_pci_register(struct pci_dev *pdev,
}
#if !defined(CONFIG_PPC) && !defined(__sparc__)
if (!(bios_seg = aty128find_ROM(info)))
if (!(bios_seg = aty128find_ROM()))
printk(KERN_INFO "aty128fb: Rage128 BIOS not located. "
"Guessing...\n");
else {
printk(KERN_INFO "aty128fb: Rage128 BIOS located at "
"segment %4.4X\n", (unsigned int)bios_seg);
aty128_get_pllinfo(info, bios_seg);
aty128_get_pllinfo(par, bios_seg);
}
#endif
aty128_timings(par);
......@@ -1734,9 +1727,9 @@ aty128_pci_register(struct pci_dev *pdev,
#ifdef CONFIG_MTRR
if (mtrr) {
info->mtrr.vram = mtrr_add(info->fix.smem_start,
info->vram_size, MTRR_TYPE_WRCOMB, 1);
info->mtrr.vram_valid = 1;
par->mtrr.vram = mtrr_add(info->fix.smem_start,
par->vram_size, MTRR_TYPE_WRCOMB, 1);
par->mtrr.vram_valid = 1;
/* let there be speed */
printk(KERN_INFO "aty128fb: Rage128 MTRR set to ON\n");
}
......@@ -1813,10 +1806,8 @@ static char * __init aty128find_ROM(void)
iounmap(rom_base);
continue;
}
return rom_base;
}
return NULL;
}
......@@ -2036,7 +2027,7 @@ aty128fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
#define FBIO_ATY128_SET_MIRROR _IOW('@', 2, sizeof(__u32*))
static int aty128fb_ioctl(struct inode *inode, struct file *file, u_int cmd,
u_long arg, int con, struct fb_info *info)
u_long arg, struct fb_info *info)
{
#ifdef CONFIG_PMAC_PBOOK
struct aty128fb_par *par = info->par;
......
......@@ -121,8 +121,8 @@ config FBCON_ADVANCED
config FBCON_ACCEL
tristate "Hardware acceleration support" if FBCON_ADVANCED
depends on FRAMEBUFFER_CONSOLE
default m if !FBCON_ADVANCED && FB_NEOMAGIC!=y && !FB_VESA && !FB_FM2 && FB_HIT!=y && !FB_HP300 && !FB_Q40 && !FB_ANAKIN && !FB_G364 && FB_VIRTUAL!=y && !FB_CLPS711X && !FB_PMAG_BA && !FB_PMAGB_B && FB_3DFX!=y && !FB_TX3912 && !FB_MAXINE && !FB_APOLLO && FB_ATY!=y && !FB_MAC && FB_RIVA!=y && FB_HGA!=y && !FB_OF && FB_SGIVW!=y && FB_VGA16!=y && (FB_NEOMAGIC=m || FB_HIT=m || FB_VIRTUAL=m || FB_3DFX=m || FB_RIVA=m || FB_SGIVW=m || FB_HGA=m)
default y if !FBCON_ADVANCED && (FB_NEOMAGIC=y || FB_VESA || FB_FM2 || FB_HIT=y || FB_HP300 || FB_Q40 || FB_ANAKIN || FB_G364 || FB_VIRTUAL=y || FB_CLPS711X || FB_PMAG_BA || FB_PMAGB_B || FB_3DFX=y || FB_TX3912 || FB_MAXINE || FB_APOLLO || FB_ATY=y || FB_MAC || FB_RIVA=y || FB_OF || FB_SGIVW=y || FB_HGA=y || FB_VGA16)
default m if !FBCON_ADVANCED && FB_NEOMAGIC!=y && !FB_VESA && !FB_FM2 && FB_HIT!=y && !FB_HP300 && !FB_Q40 && !FB_ANAKIN && !FB_G364 && FB_VIRTUAL!=y && !FB_CLPS711X && !FB_PMAG_BA && !FB_PMAGB_B && FB_3DFX!=y && !FB_TX3912 && !FB_MAXINE && !FB_APOLLO && FB_ATY!=y && FB_ATY128!=y && !FB_MAC && FB_RIVA!=y && FB_HGA!=y && !FB_OF && FB_SGIVW!=y && FB_VGA16!=y && (FB_NEOMAGIC=m || FB_HIT=m || FB_VIRTUAL=m || FB_3DFX=m || FB_RIVA=m || FB_SGIVW=m || FB_HGA=m || FB_ATY128=m)
default y if !FBCON_ADVANCED && (FB_NEOMAGIC=y || FB_VESA || FB_FM2 || FB_HIT=y || FB_HP300 || FB_Q40 || FB_ANAKIN || FB_G364 || FB_VIRTUAL=y || FB_CLPS711X || FB_PMAG_BA || FB_PMAGB_B || FB_3DFX=y || FB_TX3912 || FB_MAXINE || FB_APOLLO || FB_ATY=y || FB_ATY128=y || FB_MAC || FB_RIVA=y || FB_OF || FB_SGIVW=y || FB_HGA=y || FB_VGA16)
config FBCON_AFB
tristate "Amiga bitplanes support" if FBCON_ADVANCED
......
This diff is collapsed.
......@@ -402,6 +402,9 @@ fb_read(struct file *file, char *buf, size_t count, loff_t *ppos)
if (!info || ! info->screen_base)
return -ENODEV;
if (info->fbops->fb_read)
return info->fbops->fb_read(file, buf, count, ppos);
if (p >= info->fix.smem_len)
return 0;
if (count >= info->fix.smem_len)
......@@ -432,6 +435,9 @@ fb_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
if (!info || !info->screen_base)
return -ENODEV;
if (info->fbops->fb_write)
return info->fbops->fb_write(file, buf, count, ppos);
if (p > info->fix.smem_len)
return -ENOSPC;
if (count >= info->fix.smem_len)
......
......@@ -772,7 +772,7 @@ set_imstt_regvals (struct fb_info_imstt *p, u_int bpp)
static inline void
set_offset (struct display *disp, struct fb_info_imstt *p)
{
__u32 off = disp->var.yoffset * (disp->line_length >> 3)
__u32 off = disp->var.yoffset * (p->info.fix.line_length >> 3)
+ ((disp->var.xoffset * (disp->var.bits_per_pixel >> 3)) >> 3);
out_le32(&p->dc_regs[SSR], off);
}
......@@ -1020,7 +1020,7 @@ imsttfbcon_bmove (struct display *disp, int sy, int sx, int dy, int dx, int heig
width *= Bpp;
width--;
line_pitch = disp->line_length;
line_pitch = p->info.fix.line_length;
bltctl = 0x05;
sp = line_pitch << 16;
cnt = height << 16;
......@@ -1068,7 +1068,7 @@ imsttfbcon_clear (struct vc_data *conp, struct display *disp,
bgc |= (bgc << 16);
Bpp = disp->var.bits_per_pixel >> 3,
line_pitch = disp->line_length;
line_pitch = p->info.fix.line_length;
sy *= fontheight(disp);
sy *= line_pitch;
......@@ -1099,7 +1099,7 @@ imsttfbcon_revc (struct display *disp, int sx, int sy)
__u32 Bpp, line_pitch, height, width;
Bpp = disp->var.bits_per_pixel >> 3,
line_pitch = disp->line_length;
line_pitch = p->info.fix.line_length;
height = fontheight(disp);
width = fontwidth(disp) * Bpp;
......@@ -1246,28 +1246,6 @@ imsttfb_setcolreg (u_int regno, u_int red, u_int green, u_int blue,
return 0;
}
static int
imsttfb_get_fix (struct fb_fix_screeninfo *fix, int con, struct fb_info *info)
{
struct fb_info_imstt *p = (struct fb_info_imstt *)info;
struct fb_var_screeninfo *var = &fb_display[con].var;
*fix = p->fix;
fix->visual = var->bits_per_pixel == 8 ? FB_VISUAL_PSEUDOCOLOR
: FB_VISUAL_DIRECTCOLOR;
fix->line_length = var->xres * (var->bits_per_pixel >> 3);
return 0;
}
static int
imsttfb_get_var (struct fb_var_screeninfo *var, int con, struct fb_info *info)
{
*var = fb_display[con].var;
return 0;
}
static void
set_dispsw (struct display *disp, struct fb_info_imstt *p)
{
......@@ -1354,16 +1332,7 @@ set_disp (struct display *disp, struct fb_info_imstt *p)
set_dispsw(disp, p);
disp->visual = disp->var.bits_per_pixel == 8 ? FB_VISUAL_PSEUDOCOLOR
: FB_VISUAL_DIRECTCOLOR;
disp->visual = p->fix.visual;
disp->type = p->fix.type;
disp->type_aux = p->fix.type_aux;
disp->line_length = disp->var.xres * (disp->var.bits_per_pixel >> 3);
disp->can_soft_blank = 1;
disp->inverse = inverse;
disp->ypanstep = 1;
disp->ywrapstep = 0;
if (accel) {
disp->scrollmode = SCROLL_YNOMOVE;
if (disp->var.yres == disp->var.yres_virtual) {
......@@ -1625,8 +1594,6 @@ static struct pci_driver imsttfb_pci_driver = {
static struct fb_ops imsttfb_ops = {
.owner = THIS_MODULE,
.fb_get_fix = imsttfb_get_fix,
.fb_get_var = imsttfb_get_var,
.fb_set_var = imsttfb_set_var,
.fb_get_cmap = imsttfb_get_cmap,
.fb_set_cmap = gen_set_cmap,
......@@ -1814,9 +1781,10 @@ init_imstt(struct fb_info_imstt *p)
return;
}
i = GET_FB_IDX(p->info.node);
tmp = (in_le32(&p->dc_regs[SSTATUS]) & 0x0f00) >> 8;
printk("fb%u: %s frame buffer; %uMB vram; chip version %u\n",
minor(p->info.node), p->fix.id, p->total_vram >> 20, tmp);
i, p->fix.id, p->total_vram >> 20, tmp);
}
static int __devinit
......
This diff is collapsed.
This diff is collapsed.
......@@ -127,10 +127,6 @@ struct fb_info_valkyrie {
int valkyriefb_init(void);
int valkyriefb_setup(char*);
static int valkyrie_get_fix(struct fb_fix_screeninfo *fix, int con,
struct fb_info *info);
static int valkyrie_get_var(struct fb_var_screeninfo *var, int con,
struct fb_info *info);
static int valkyrie_set_var(struct fb_var_screeninfo *var, int con,
struct fb_info *info);
static int valkyrie_get_cmap(struct fb_cmap *cmap, int kspc, int con,
......@@ -157,8 +153,6 @@ static void valkyrie_init_fix(struct fb_fix_screeninfo *fix, struct fb_info_valk
static struct fb_ops valkyriefb_ops = {
.owner = THIS_MODULE,
.fb_get_fix = valkyrie_get_fix,
.fb_get_var = valkyrie_get_var,
.fb_set_var = valkyrie_set_var,
.fb_get_cmap = valkyrie_get_cmap,
.fb_set_cmap = gen_set_cmap,
......@@ -169,24 +163,6 @@ static struct fb_ops valkyriefb_ops = {
static int valkyriefb_getcolreg(u_int regno, u_int *red, u_int *green,
u_int *blue, u_int *transp, struct fb_info *info);
static int valkyrie_get_fix(struct fb_fix_screeninfo *fix, int con,
struct fb_info *info)
{
struct fb_info_valkyrie *cp = (struct fb_info_valkyrie *) info;
*fix = cp->fix;
return 0;
}
static int valkyrie_get_var(struct fb_var_screeninfo *var, int con,
struct fb_info *info)
{
struct fb_info_valkyrie *cp = (struct fb_info_valkyrie *) info;
*var = cp->var;
return 0;
}
/* Sets everything according to var */
static int valkyrie_set_var(struct fb_var_screeninfo *var, int con,
struct fb_info *info)
......@@ -471,7 +447,7 @@ static void __init init_valkyrie(struct fb_info_valkyrie *p)
return;
}
printk(KERN_INFO "fb%d: valkyrie frame buffer device\n", minor(p->info.node));
printk(KERN_INFO "fb%d: valkyrie frame buffer device\n", GET_FB_IDX(p->info.node));
}
static void valkyrie_set_par(const struct fb_par_valkyrie *par,
......@@ -705,7 +681,6 @@ static void valkyrie_par_to_fix(struct fb_par_valkyrie *par,
static void valkyrie_init_display(struct display *disp)
{
memset(disp, 0, sizeof(*disp));
disp->type = /* fix->type */ FB_TYPE_PACKED_PIXELS;
disp->can_soft_blank = can_soft_blank;
disp->scrollmode = SCROLL_YREDRAW;
}
......@@ -714,8 +689,6 @@ static void valkyrie_par_to_display(struct fb_par_valkyrie *par,
struct display *disp, struct fb_fix_screeninfo *fix, struct fb_info_valkyrie *p)
{
disp->var = p->var;
disp->visual = fix->visual;
disp->line_length = fix->line_length;
if(disp->scrollmode != SCROLL_YREDRAW) {
printk(KERN_ERR "Scroll mode not YREDRAW in valkyrie_par_to_display\n");
......
......@@ -301,12 +301,12 @@ struct fbcursor {
#define ROP_XOR 1
struct fb_copyarea {
__u32 sx; /* screen-relative */
__u32 sy;
__u32 dx;
__u32 dy;
__u32 width;
__u32 height;
__u32 sx;
__u32 sy;
};
struct fb_fillrect {
......
#ifndef __LINUX_RADEONFB_H__
#define __LINUX_RADEONFB_H__
#include <asm/ioctl.h>
#include <asm/types.h>
#define ATY_RADEON_LCD_ON 0x00000001
#define ATY_RADEON_CRT_ON 0x00000002
#define FBIO_RADEON_GET_MIRROR _IOR('@', 3, sizeof(__u32*))
#define FBIO_RADEON_SET_MIRROR _IOW('@', 4, sizeof(__u32*))
#endif
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