Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
7e2fb365
Commit
7e2fb365
authored
Mar 02, 2003
by
David S. Miller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[FRAMEBUFFER]: Convert P9100 driver to new APIs.
parent
67bf3c24
Changes
6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
413 additions
and
284 deletions
+413
-284
drivers/video/Kconfig
drivers/video/Kconfig
+1
-1
drivers/video/Makefile
drivers/video/Makefile
+2
-1
drivers/video/fbmem.c
drivers/video/fbmem.c
+5
-0
drivers/video/p9100.c
drivers/video/p9100.c
+405
-0
drivers/video/p9100.h
drivers/video/p9100.h
+0
-87
drivers/video/p9100fb.c
drivers/video/p9100fb.c
+0
-195
No files found.
drivers/video/Kconfig
View file @
7e2fb365
...
@@ -832,7 +832,7 @@ config FB_CG14
...
@@ -832,7 +832,7 @@ config FB_CG14
config FB_P9100
config FB_P9100
bool "P9100 (Sparcbook 3 only) support"
bool "P9100 (Sparcbook 3 only) support"
depends on FB_SBUS
&& SPARC32
depends on FB_SBUS
help
help
This is the frame buffer device driver for the P9100 card
This is the frame buffer device driver for the P9100 card
supported on Sparcbook 3 machines.
supported on Sparcbook 3 machines.
...
...
drivers/video/Makefile
View file @
7e2fb365
...
@@ -72,7 +72,6 @@ obj-$(CONFIG_FB_VOODOO1) += sstfb.o cfbfillrect.o cfbcopyarea.o cfbimgb
...
@@ -72,7 +72,6 @@ obj-$(CONFIG_FB_VOODOO1) += sstfb.o cfbfillrect.o cfbcopyarea.o cfbimgb
# One by one these are being converted over to the new APIs
# One by one these are being converted over to the new APIs
#obj-$(CONFIG_FB_TCX) += tcxfb.o sbusfb.o
#obj-$(CONFIG_FB_TCX) += tcxfb.o sbusfb.o
#obj-$(CONFIG_FB_P9100) += p9100fb.o sbusfb.o
#obj-$(CONFIG_FB_LEO) += leofb.o sbusfb.o
#obj-$(CONFIG_FB_LEO) += leofb.o sbusfb.o
obj-$(CONFIG_FB_FFB)
+=
ffb.o sbuslib.o cfbimgblt.o cfbcopyarea.o
obj-$(CONFIG_FB_FFB)
+=
ffb.o sbuslib.o cfbimgblt.o cfbcopyarea.o
...
@@ -83,6 +82,8 @@ obj-$(CONFIG_FB_BW2) += bw2.o sbuslib.o cfbimgblt.o cfbcopyarea.o
...
@@ -83,6 +82,8 @@ obj-$(CONFIG_FB_BW2) += bw2.o sbuslib.o cfbimgblt.o cfbcopyarea.o
cfbfillrect.o
cfbfillrect.o
obj-$(CONFIG_FB_CG14)
+=
cg14.o sbuslib.o cfbimgblt.o cfbcopyarea.o
\
obj-$(CONFIG_FB_CG14)
+=
cg14.o sbuslib.o cfbimgblt.o cfbcopyarea.o
\
cfbfillrect.o
cfbfillrect.o
obj-$(CONFIG_FB_P9100)
+=
p9100.o sbuslib.o cfbimgblt.o cfbcopyarea.o
\
cfbfillrect.o
# Files generated that shall be removed upon make clean
# Files generated that shall be removed upon make clean
clean-files
:=
promcon_tbl.c
clean-files
:=
promcon_tbl.c
...
...
drivers/video/fbmem.c
View file @
7e2fb365
...
@@ -154,6 +154,8 @@ extern int bw2_init(void);
...
@@ -154,6 +154,8 @@ extern int bw2_init(void);
extern
int
bw2_setup
(
char
*
);
extern
int
bw2_setup
(
char
*
);
extern
int
cg14_init
(
void
);
extern
int
cg14_init
(
void
);
extern
int
cg14_setup
(
char
*
);
extern
int
cg14_setup
(
char
*
);
extern
int
p9100_init
(
void
);
extern
int
p9100_setup
(
char
*
);
static
struct
{
static
struct
{
const
char
*
name
;
const
char
*
name
;
...
@@ -260,6 +262,9 @@ static struct {
...
@@ -260,6 +262,9 @@ static struct {
#ifdef CONFIG_FB_CG14
#ifdef CONFIG_FB_CG14
{
"cg14"
,
cg14_init
,
cg14_setup
},
{
"cg14"
,
cg14_init
,
cg14_setup
},
#endif
#endif
#ifdef CONFIG_FB_P9100
{
"p9100"
,
p9100_init
,
p9100_setup
},
#endif
/*
/*
* Generic drivers that are used as fallbacks
* Generic drivers that are used as fallbacks
...
...
drivers/video/p9100.c
0 → 100644
View file @
7e2fb365
This diff is collapsed.
Click to expand it.
drivers/video/p9100.h
deleted
100644 → 0
View file @
67bf3c24
/*
* Register information for the Weitek P9100 as found
* on the Tadpole Sparcbook 3 laptops.
*
* From the technical specification document provided by Tadpole.
*
* Derrick J Brashear (shadow@dementia.org)
*/
#ifndef _P9100_H_
#define _P9100_H_
/* P9100 control registers */
#define P9100_SYSCTL_OFF 0x0UL
#define P9100_VIDEOCTL_OFF 0x100UL
#define P9100_VRAMCTL_OFF 0x180UL
#define P9100_RAMDAC_OFF 0x200UL
#define P9100_VIDEOCOPROC_OFF 0x400UL
/* P9100 command registers */
#define P9100_CMD_OFF 0x0UL
/* P9100 framebuffer memory */
#define P9100_FB_OFF 0x0UL
/* 3 bits: 2=8bpp 3=16bpp 5=32bpp 7=24bpp */
#define SYS_CONFIG_PIXELSIZE_SHIFT 26
#define SCREENPAINT_TIMECTL1_ENABLE_VIDEO 0x20
/* 0 = off, 1 = on */
struct
p9100_ctrl
{
/* Registers for the system control */
__volatile__
__u32
sys_base
;
__volatile__
__u32
sys_config
;
__volatile__
__u32
sys_intr
;
__volatile__
__u32
sys_int_ena
;
__volatile__
__u32
sys_alt_rd
;
__volatile__
__u32
sys_alt_wr
;
__volatile__
__u32
sys_xxx
[
58
];
/* Registers for the video control */
__volatile__
__u32
vid_base
;
__volatile__
__u32
vid_hcnt
;
__volatile__
__u32
vid_htotal
;
__volatile__
__u32
vid_hsync_rise
;
__volatile__
__u32
vid_hblank_rise
;
__volatile__
__u32
vid_hblank_fall
;
__volatile__
__u32
vid_hcnt_preload
;
__volatile__
__u32
vid_vcnt
;
__volatile__
__u32
vid_vlen
;
__volatile__
__u32
vid_vsync_rise
;
__volatile__
__u32
vid_vblank_rise
;
__volatile__
__u32
vid_vblank_fall
;
__volatile__
__u32
vid_vcnt_preload
;
__volatile__
__u32
vid_screenpaint_addr
;
__volatile__
__u32
vid_screenpaint_timectl1
;
__volatile__
__u32
vid_screenpaint_qsfcnt
;
__volatile__
__u32
vid_screenpaint_timectl2
;
__volatile__
__u32
vid_xxx
[
15
];
/* Registers for the video control */
__volatile__
__u32
vram_base
;
__volatile__
__u32
vram_memcfg
;
__volatile__
__u32
vram_refresh_pd
;
__volatile__
__u32
vram_refresh_cnt
;
__volatile__
__u32
vram_raslo_max
;
__volatile__
__u32
vram_raslo_cur
;
__volatile__
__u32
pwrup_cfg
;
__volatile__
__u32
vram_xxx
[
25
];
/* Registers for IBM RGB528 Palette */
__volatile__
__u32
ramdac_cmap_wridx
;
__volatile__
__u32
ramdac_palette_data
;
__volatile__
__u32
ramdac_pixel_mask
;
__volatile__
__u32
ramdac_palette_rdaddr
;
__volatile__
__u32
ramdac_idx_lo
;
__volatile__
__u32
ramdac_idx_hi
;
__volatile__
__u32
ramdac_idx_data
;
__volatile__
__u32
ramdac_idx_ctl
;
__volatile__
__u32
ramdac_xxx
[
1784
];
};
struct
p9100_cmd_parameng
{
__volatile__
__u32
parameng_status
;
__volatile__
__u32
parameng_bltcmd
;
__volatile__
__u32
parameng_quadcmd
;
};
#endif
/* _P9100_H_ */
drivers/video/p9100fb.c
deleted
100644 → 0
View file @
67bf3c24
/* $id: p9100fb.c,v 1.4 1999/08/18 10:55:01 shadow Exp $
* p9100fb.c: P9100 frame buffer driver
*
* Copyright 1999 Derrick J Brashear (shadow@dementia.org)
*/
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/tty.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/fb.h>
#include <linux/init.h>
#include <linux/selection.h>
#include <video/sbusfb.h>
#include <asm/io.h>
#include <video/fbcon-cfb8.h>
#include "p9100.h"
static
struct
sbus_mmap_map
p9100_mmap_map
[]
=
{
#if 0 /* For now, play we're a dumb color fb */
{ P9100_CTL_OFF, 0x38000000, 0x2000 },
{ P9100_CMD_OFF, 0x38002000, 0x2000 },
{ P9100_FB_OFF, 0x38800000, 0x200000 },
{ CG3_MMAP_OFFSET, 0x38800000, SBUS_MMAP_FBSIZE(1) },
#else
{
CG3_MMAP_OFFSET
,
0x0
,
SBUS_MMAP_FBSIZE
(
1
)
},
#endif
{
0
,
0
,
0
}
};
#define _READCTL(member, out) \
{ \
struct p9100_ctrl *actual; \
actual = (struct p9100_ctrl *)fb->s.p9100.ctrl; \
out = sbus_readl(&actual-> ## member ); \
}
#define READCTL(member, out) \
{ \
struct p9100_ctrl *enab, *actual; \
actual = (struct p9100_ctrl *)fb->s.p9100.ctrl; \
enab = (struct p9100_ctrl *)fb->s.p9100.fbmem; \
out = sbus_readl(&enab-> ## member ); \
out = sbus_readl(&actual-> ## member ); \
}
#define WRITECTL(member, val) \
{ \
u32 __writetmp; \
struct p9100_ctrl *enab, *actual; \
actual = (struct p9100_ctrl *)fb->s.p9100.ctrl; \
enab = (struct p9100_ctrl *)fb->s.p9100.fbmem; \
__writetmp = sbus_readl(&enab-> ## member ); \
sbus_writel(val, &actual-> ## member ); \
}
static
void
p9100_loadcmap
(
struct
fb_info_sbusfb
*
fb
,
struct
display
*
p
,
int
index
,
int
count
)
{
unsigned
long
flags
;
u32
tmp
;
int
i
;
spin_lock_irqsave
(
&
fb
->
lock
,
flags
);
_READCTL
(
pwrup_cfg
,
tmp
);
WRITECTL
(
ramdac_cmap_wridx
,
(
index
<<
16
));
for
(
i
=
index
;
count
--
;
i
++
){
_READCTL
(
pwrup_cfg
,
tmp
);
WRITECTL
(
ramdac_palette_data
,
(
fb
->
color_map
CM
(
i
,
0
)
<<
16
));
_READCTL
(
pwrup_cfg
,
tmp
);
WRITECTL
(
ramdac_palette_data
,
(
fb
->
color_map
CM
(
i
,
1
)
<<
16
));
_READCTL
(
pwrup_cfg
,
tmp
);
WRITECTL
(
ramdac_palette_data
,
(
fb
->
color_map
CM
(
i
,
2
)
<<
16
));
}
spin_unlock_irqrestore
(
&
fb
->
lock
,
flags
);
}
static
int
p9100_blank
(
struct
fb_info_sbusfb
*
fb
)
{
unsigned
long
flags
;
u32
val
;
spin_lock_irqsave
(
&
fb
->
lock
,
flags
);
READCTL
(
vid_screenpaint_timectl1
,
val
);
val
&=
~
SCREENPAINT_TIMECTL1_ENABLE_VIDEO
;
WRITECTL
(
vid_screenpaint_timectl1
,
val
);
spin_unlock_irqrestore
(
&
fb
->
lock
,
flags
);
return
0
;
}
static
int
p9100_unblank
(
struct
fb_info_sbusfb
*
fb
)
{
unsigned
long
flags
;
u32
val
;
spin_lock_irqsave
(
&
fb
->
lock
,
flags
);
READCTL
(
vid_screenpaint_timectl1
,
val
);
val
|=
SCREENPAINT_TIMECTL1_ENABLE_VIDEO
;
WRITECTL
(
vid_screenpaint_timectl1
,
val
);
spin_unlock_irqrestore
(
&
fb
->
lock
,
flags
);
return
0
;
}
static
void
p9100_margins
(
struct
fb_info_sbusfb
*
fb
,
struct
display
*
p
,
int
x_margin
,
int
y_margin
)
{
fb
->
info
.
screen_base
+=
(
y_margin
-
fb
->
y_margin
)
*
p
->
line_length
+
(
x_margin
-
fb
->
x_margin
);
}
static
char
idstring
[
60
]
__initdata
=
{
0
};
char
*
__init
p9100fb_init
(
struct
fb_info_sbusfb
*
fb
)
{
struct
fb_fix_screeninfo
*
fix
=
&
fb
->
fix
;
struct
display
*
disp
=
&
fb
->
disp
;
struct
fbtype
*
type
=
&
fb
->
type
;
struct
sbus_dev
*
sdev
=
fb
->
sbdp
;
unsigned
long
phys
=
sdev
->
reg_addrs
[
2
].
phys_addr
;
int
tmp
;
#ifndef FBCON_HAS_CFB8
return
NULL
;
#endif
/* Control regs: fb->sbdp->reg_addrs[0].phys_addr
* Command regs: fb->sbdp->reg_addrs[1].phys_addr
* Frame buffer: fb->sbdp->reg_addrs[2].phys_addr
*/
if
(
!
fb
->
s
.
p9100
.
ctrl
)
{
fb
->
s
.
p9100
.
ctrl
=
(
struct
p9100_ctrl
*
)
sbus_ioremap
(
&
sdev
->
resource
[
0
],
0
,
sdev
->
reg_addrs
[
0
].
reg_size
,
"p9100 ctrl"
);
}
strcpy
(
fb
->
info
.
modename
,
"p9100"
);
strcpy
(
fix
->
id
,
"p9100"
);
fix
->
accel
=
FB_ACCEL_SUN_CGTHREE
;
fix
->
line_length
=
fb
->
var
.
xres_virtual
;
disp
->
scrollmode
=
SCROLL_YREDRAW
;
if
(
!
fb
->
info
.
screen_base
)
fb
->
info
.
screen_base
=
(
char
*
)
sbus_ioremap
(
&
sdev
->
resource
[
2
],
0
,
type
->
fb_size
,
"p9100 ram"
);
fb
->
s
.
p9100
.
fbmem
=
(
volatile
u32
*
)
fb
->
info
.
screen_base
;
fb
->
info
.
screen_base
+=
fix
->
line_length
*
fb
->
y_margin
+
fb
->
x_margin
;
READCTL
(
sys_config
,
tmp
);
switch
((
tmp
>>
SYS_CONFIG_PIXELSIZE_SHIFT
)
&
7
)
{
case
7
:
type
->
fb_depth
=
24
;
break
;
case
5
:
type
->
fb_depth
=
32
;
break
;
case
3
:
type
->
fb_depth
=
16
;
break
;
case
2
:
type
->
fb_depth
=
8
;
break
;
default:
printk
(
"p9100: screen depth unknown: 0x%x"
,
tmp
);
return
NULL
;
}
fb
->
dispsw
=
fbcon_cfb8
;
fb
->
margins
=
p9100_margins
;
fb
->
loadcmap
=
p9100_loadcmap
;
fb
->
blank
=
p9100_blank
;
fb
->
unblank
=
p9100_unblank
;
fb
->
physbase
=
phys
;
fb
->
mmap_map
=
p9100_mmap_map
;
sprintf
(
idstring
,
"%s at 0x%x"
,
"p9100"
,
(
unsigned
int
)
fb
->
info
.
screen_base
);
return
idstring
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment