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
Kirill Smelkov
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