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
13ffe142
Commit
13ffe142
authored
Feb 05, 2004
by
James Simmons
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[FBDEV] Add syfs support.
parent
d619064c
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
141 additions
and
17 deletions
+141
-17
drivers/video/Makefile
drivers/video/Makefile
+1
-1
drivers/video/fbmem.c
drivers/video/fbmem.c
+6
-0
drivers/video/fbsysfs.c
drivers/video/fbsysfs.c
+110
-0
include/linux/fb.h
include/linux/fb.h
+24
-16
No files found.
drivers/video/Makefile
View file @
13ffe142
...
...
@@ -7,7 +7,7 @@
obj-$(CONFIG_VT)
+=
console/
obj-$(CONFIG_LOGO)
+=
logo/
obj-$(CONFIG_FB)
+=
fbmem.o fbmon.o fbcmap.o modedb.o softcursor.o
obj-$(CONFIG_FB)
+=
fbmem.o fbmon.o fbcmap.o
fbsysfs.o
modedb.o softcursor.o
# Only include macmodes.o if we have FB support and are PPC
ifeq
($(CONFIG_FB),y)
obj-$(CONFIG_PPC)
+=
macmodes.o
...
...
drivers/video/fbmem.c
View file @
13ffe142
...
...
@@ -1228,6 +1228,9 @@ register_framebuffer(struct fb_info *fb_info)
break
;
fb_info
->
node
=
i
;
if
(
fb_add_class_device
(
fb_info
))
return
-
EINVAL
;
if
(
fb_info
->
pixmap
.
addr
==
NULL
)
{
fb_info
->
pixmap
.
addr
=
kmalloc
(
FBPIXMAPSIZE
,
GFP_KERNEL
);
if
(
fb_info
->
pixmap
.
addr
)
{
...
...
@@ -1276,6 +1279,7 @@ unregister_framebuffer(struct fb_info *fb_info)
kfree
(
fb_info
->
pixmap
.
addr
);
registered_fb
[
i
]
=
NULL
;
num_registered_fb
--
;
class_device_del
(
&
fb_info
->
class_dev
);
return
0
;
}
...
...
@@ -1300,6 +1304,8 @@ fbmem_init(void)
if
(
register_chrdev
(
FB_MAJOR
,
"fb"
,
&
fb_fops
))
printk
(
"unable to get major %d for fb devs
\n
"
,
FB_MAJOR
);
class_register
(
&
fb_class
);
#ifdef CONFIG_FB_OF
if
(
ofonly
)
{
offb_init
();
...
...
drivers/video/fbsysfs.c
0 → 100644
View file @
13ffe142
/*
* fbsysfs.c - framebuffer device class and attributes
*
* Copyright (c) 2004 James Simmons <jsimmons@infradead.org>
*
* This program is free software you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/fb.h>
#define to_fb_info(class) container_of(class, struct fb_info, class_dev)
static
void
release_fb_info
(
struct
class_device
*
class_dev
)
{
struct
fb_info
*
info
=
to_fb_info
(
class_dev
);
/* This doesn't harm */
fb_dealloc_cmap
(
&
info
->
cmap
);
kfree
(
info
);
}
struct
class
fb_class
=
{
.
name
=
"graphics"
,
.
release
=
&
release_fb_info
,
};
static
ssize_t
show_dev
(
struct
class_device
*
class_dev
,
char
*
buf
)
{
struct
fb_info
*
info
=
to_fb_info
(
class_dev
);
return
sprintf
(
buf
,
"%u:%u
\n
"
,
FB_MAJOR
,
info
->
node
);
}
static
CLASS_DEVICE_ATTR
(
dev
,
S_IRUGO
,
show_dev
,
NULL
);
int
fb_add_class_device
(
struct
fb_info
*
info
)
{
int
retval
;
info
->
class_dev
.
class
=
&
fb_class
;
snprintf
(
info
->
class_dev
.
class_id
,
BUS_ID_SIZE
,
"fb%d"
,
info
->
node
);
retval
=
class_device_register
(
&
info
->
class_dev
);
if
(
retval
)
return
retval
;
return
class_device_create_file
(
&
info
->
class_dev
,
&
class_device_attr_dev
);
}
/**
* framebuffer_alloc - creates a new frame buffer info structure
*
* @size: size of driver private data, can be zero
* @dev: pointer to the device for this fb, this can be NULL
*
* Creates a new frame buffer info structure. Also reserves @size bytes
* for driver private data (info->par). info->par (if any) will be
* aligned to sizeof(long).
*
* Returns the new structure, or NULL if an error occured.
*
*/
struct
fb_info
*
framebuffer_alloc
(
size_t
size
,
struct
device
*
dev
)
{
#define BYTES_PER_LONG (BITS_PER_LONG/8)
#define PADDING (BYTES_PER_LONG - (sizeof(struct fb_info) % BYTES_PER_LONG))
int
fb_info_size
=
sizeof
(
struct
fb_info
);
struct
fb_info
*
info
;
char
*
p
;
if
(
size
)
fb_info_size
+=
PADDING
;
p
=
kmalloc
(
fb_info_size
+
size
,
GFP_KERNEL
);
if
(
!
p
)
return
NULL
;
memset
(
p
,
0
,
fb_info_size
+
size
);
info
=
(
struct
fb_info
*
)
p
;
info
->
class_dev
.
dev
=
dev
;
if
(
size
)
info
->
par
=
p
+
fb_info_size
;
return
info
;
#undef PADDING
#undef BYTES_PER_LONG
}
/**
* framebuffer_release - marks the structure available for freeing
*
* @info: frame buffer info structure
*
* Drop the reference count of the class_device embedded in the
* framebuffer info structure.
*
*/
void
framebuffer_release
(
struct
fb_info
*
info
)
{
class_device_put
(
&
info
->
class_dev
);
}
EXPORT_SYMBOL
(
framebuffer_release
);
EXPORT_SYMBOL
(
framebuffer_alloc
);
include/linux/fb.h
View file @
13ffe142
...
...
@@ -433,24 +433,25 @@ struct fb_ops {
};
struct
fb_info
{
int
node
;
int
flags
;
int
open
;
/* Has this been open already ? */
int
node
;
int
flags
;
int
open
;
/* Has this been open already ? */
#define FBINFO_FLAG_MODULE 1
/* Low-level driver is a module */
struct
fb_var_screeninfo
var
;
/* Current var */
struct
fb_fix_screeninfo
fix
;
/* Current fix */
struct
fb_monspecs
monspecs
;
/* Current Monitor specs */
struct
fb_cursor
cursor
;
/* Current cursor */
struct
work_struct
queue
;
/* Framebuffer event queue */
struct
fb_var_screeninfo
var
;
/* Current var */
struct
fb_fix_screeninfo
fix
;
/* Current fix */
struct
fb_monspecs
monspecs
;
/* Current Monitor specs */
struct
fb_cursor
cursor
;
/* Current cursor */
struct
work_struct
queue
;
/* Framebuffer event queue */
struct
fb_pixmap
pixmap
;
/* Image Hardware Mapper */
struct
fb_cmap
cmap
;
/* Current cmap */
struct
fb_ops
*
fbops
;
char
*
screen_base
;
/* Virtual address */
struct
vc_data
*
display_fg
;
/* Console visible on this display */
int
currcon
;
/* Current VC. */
void
*
pseudo_palette
;
/* Fake palette of 16 colors */
/* From here on everything is device dependent */
void
*
par
;
struct
fb_cmap
cmap
;
/* Current cmap */
struct
fb_ops
*
fbops
;
char
*
screen_base
;
/* Virtual address */
struct
vc_data
*
display_fg
;
/* Console visible on this display */
int
currcon
;
/* Current VC. */
struct
class_device
class_dev
;
/* Sysfs data */
void
*
pseudo_palette
;
/* Fake palette of 16 colors */
/* From here on everything is device dependent */
void
*
par
;
};
#ifdef MODULE
...
...
@@ -528,6 +529,13 @@ extern void move_buf_aligned(struct fb_info *info, u8 * dst, u8 * src,
extern
struct
fb_info
*
registered_fb
[
FB_MAX
];
extern
int
num_registered_fb
;
/* drivers/video/fbsysfs.c */
extern
struct
fb_info
*
framebuffer_alloc
(
size_t
size
,
struct
device
*
dev
);
extern
void
framebuffer_release
(
struct
fb_info
*
info
);
extern
int
fb_add_class_device
(
struct
fb_info
*
info
);
extern
struct
class
fb_class
;
/* drivers/video/fbmon.c */
#define FB_MAXTIMINGS 0
#define FB_VSYNCTIMINGS 1
...
...
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