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
4c5b1fb8
Commit
4c5b1fb8
authored
Jul 25, 2012
by
Florian Tobias Schandinat
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-next' of
git://linuxtv.org/pinchartl/fbdev
into fbdev-next
parents
a2c81bc1
a4aa25f6
Changes
4
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
293 additions
and
227 deletions
+293
-227
drivers/video/sh_mobile_lcdcfb.c
drivers/video/sh_mobile_lcdcfb.c
+107
-102
drivers/video/sh_mobile_lcdcfb.h
drivers/video/sh_mobile_lcdcfb.h
+3
-2
drivers/video/sh_mobile_meram.c
drivers/video/sh_mobile_meram.c
+132
-103
include/video/sh_mobile_meram.h
include/video/sh_mobile_meram.h
+51
-20
No files found.
drivers/video/sh_mobile_lcdcfb.c
View file @
4c5b1fb8
This diff is collapsed.
Click to expand it.
drivers/video/sh_mobile_lcdcfb.h
View file @
4c5b1fb8
...
@@ -47,6 +47,7 @@ struct sh_mobile_lcdc_entity {
...
@@ -47,6 +47,7 @@ struct sh_mobile_lcdc_entity {
/*
/*
* struct sh_mobile_lcdc_chan - LCDC display channel
* struct sh_mobile_lcdc_chan - LCDC display channel
*
*
* @pan_y_offset: Panning linear offset in bytes (luma component)
* @base_addr_y: Frame buffer viewport base address (luma component)
* @base_addr_y: Frame buffer viewport base address (luma component)
* @base_addr_c: Frame buffer viewport base address (chroma component)
* @base_addr_c: Frame buffer viewport base address (chroma component)
* @pitch: Frame buffer line pitch
* @pitch: Frame buffer line pitch
...
@@ -59,7 +60,7 @@ struct sh_mobile_lcdc_chan {
...
@@ -59,7 +60,7 @@ struct sh_mobile_lcdc_chan {
unsigned
long
*
reg_offs
;
unsigned
long
*
reg_offs
;
unsigned
long
ldmt1r_value
;
unsigned
long
ldmt1r_value
;
unsigned
long
enabled
;
/* ME and SE in LDCNT2R */
unsigned
long
enabled
;
/* ME and SE in LDCNT2R */
void
*
meram
;
void
*
cache
;
struct
mutex
open_lock
;
/* protects the use counter */
struct
mutex
open_lock
;
/* protects the use counter */
int
use_count
;
int
use_count
;
...
@@ -68,7 +69,7 @@ struct sh_mobile_lcdc_chan {
...
@@ -68,7 +69,7 @@ struct sh_mobile_lcdc_chan {
unsigned
long
fb_size
;
unsigned
long
fb_size
;
dma_addr_t
dma_handle
;
dma_addr_t
dma_handle
;
unsigned
long
pan_offset
;
unsigned
long
pan_
y_
offset
;
unsigned
long
frame_end
;
unsigned
long
frame_end
;
wait_queue_head_t
frame_end_wait
;
wait_queue_head_t
frame_end_wait
;
...
...
drivers/video/sh_mobile_meram.c
View file @
4c5b1fb8
...
@@ -11,6 +11,7 @@
...
@@ -11,6 +11,7 @@
#include <linux/device.h>
#include <linux/device.h>
#include <linux/err.h>
#include <linux/err.h>
#include <linux/export.h>
#include <linux/genalloc.h>
#include <linux/genalloc.h>
#include <linux/io.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/kernel.h>
...
@@ -194,11 +195,26 @@ static inline unsigned long meram_read_reg(void __iomem *base, unsigned int off)
...
@@ -194,11 +195,26 @@ static inline unsigned long meram_read_reg(void __iomem *base, unsigned int off)
}
}
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
* Allocation
* MERAM allocation and free
*/
static
unsigned
long
meram_alloc
(
struct
sh_mobile_meram_priv
*
priv
,
size_t
size
)
{
return
gen_pool_alloc
(
priv
->
pool
,
size
);
}
static
void
meram_free
(
struct
sh_mobile_meram_priv
*
priv
,
unsigned
long
mem
,
size_t
size
)
{
gen_pool_free
(
priv
->
pool
,
mem
,
size
);
}
/* -----------------------------------------------------------------------------
* LCDC cache planes allocation, init, cleanup and free
*/
*/
/* Allocate ICBs and MERAM for a plane. */
/* Allocate ICBs and MERAM for a plane. */
static
int
__meram
_alloc
(
struct
sh_mobile_meram_priv
*
priv
,
static
int
meram_plane
_alloc
(
struct
sh_mobile_meram_priv
*
priv
,
struct
sh_mobile_meram_fb_plane
*
plane
,
struct
sh_mobile_meram_fb_plane
*
plane
,
size_t
size
)
size_t
size
)
{
{
...
@@ -215,7 +231,7 @@ static int __meram_alloc(struct sh_mobile_meram_priv *priv,
...
@@ -215,7 +231,7 @@ static int __meram_alloc(struct sh_mobile_meram_priv *priv,
return
-
ENOMEM
;
return
-
ENOMEM
;
plane
->
marker
=
&
priv
->
icbs
[
idx
];
plane
->
marker
=
&
priv
->
icbs
[
idx
];
mem
=
gen_pool_alloc
(
priv
->
pool
,
size
*
1024
);
mem
=
meram_alloc
(
priv
,
size
*
1024
);
if
(
mem
==
0
)
if
(
mem
==
0
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -229,10 +245,10 @@ static int __meram_alloc(struct sh_mobile_meram_priv *priv,
...
@@ -229,10 +245,10 @@ static int __meram_alloc(struct sh_mobile_meram_priv *priv,
}
}
/* Free ICBs and MERAM for a plane. */
/* Free ICBs and MERAM for a plane. */
static
void
__meram
_free
(
struct
sh_mobile_meram_priv
*
priv
,
static
void
meram_plane
_free
(
struct
sh_mobile_meram_priv
*
priv
,
struct
sh_mobile_meram_fb_plane
*
plane
)
struct
sh_mobile_meram_fb_plane
*
plane
)
{
{
gen_pool_free
(
priv
->
pool
,
priv
->
meram
+
plane
->
marker
->
offset
,
meram_free
(
priv
,
priv
->
meram
+
plane
->
marker
->
offset
,
plane
->
marker
->
size
*
1024
);
plane
->
marker
->
size
*
1024
);
__clear_bit
(
plane
->
marker
->
index
,
&
priv
->
used_icb
);
__clear_bit
(
plane
->
marker
->
index
,
&
priv
->
used_icb
);
...
@@ -248,62 +264,6 @@ static int is_nvcolor(int cspace)
...
@@ -248,62 +264,6 @@ static int is_nvcolor(int cspace)
return
0
;
return
0
;
}
}
/* Allocate memory for the ICBs and mark them as used. */
static
struct
sh_mobile_meram_fb_cache
*
meram_alloc
(
struct
sh_mobile_meram_priv
*
priv
,
const
struct
sh_mobile_meram_cfg
*
cfg
,
int
pixelformat
)
{
struct
sh_mobile_meram_fb_cache
*
cache
;
unsigned
int
nplanes
=
is_nvcolor
(
pixelformat
)
?
2
:
1
;
int
ret
;
if
(
cfg
->
icb
[
0
].
meram_size
==
0
)
return
ERR_PTR
(
-
EINVAL
);
if
(
nplanes
==
2
&&
cfg
->
icb
[
1
].
meram_size
==
0
)
return
ERR_PTR
(
-
EINVAL
);
cache
=
kzalloc
(
sizeof
(
*
cache
),
GFP_KERNEL
);
if
(
cache
==
NULL
)
return
ERR_PTR
(
-
ENOMEM
);
cache
->
nplanes
=
nplanes
;
ret
=
__meram_alloc
(
priv
,
&
cache
->
planes
[
0
],
cfg
->
icb
[
0
].
meram_size
);
if
(
ret
<
0
)
goto
error
;
cache
->
planes
[
0
].
marker
->
current_reg
=
1
;
cache
->
planes
[
0
].
marker
->
pixelformat
=
pixelformat
;
if
(
cache
->
nplanes
==
1
)
return
cache
;
ret
=
__meram_alloc
(
priv
,
&
cache
->
planes
[
1
],
cfg
->
icb
[
1
].
meram_size
);
if
(
ret
<
0
)
{
__meram_free
(
priv
,
&
cache
->
planes
[
0
]);
goto
error
;
}
return
cache
;
error:
kfree
(
cache
);
return
ERR_PTR
(
-
ENOMEM
);
}
/* Unmark the specified ICB as used. */
static
void
meram_free
(
struct
sh_mobile_meram_priv
*
priv
,
struct
sh_mobile_meram_fb_cache
*
cache
)
{
__meram_free
(
priv
,
&
cache
->
planes
[
0
]);
if
(
cache
->
nplanes
==
2
)
__meram_free
(
priv
,
&
cache
->
planes
[
1
]);
kfree
(
cache
);
}
/* Set the next address to fetch. */
/* Set the next address to fetch. */
static
void
meram_set_next_addr
(
struct
sh_mobile_meram_priv
*
priv
,
static
void
meram_set_next_addr
(
struct
sh_mobile_meram_priv
*
priv
,
struct
sh_mobile_meram_fb_cache
*
cache
,
struct
sh_mobile_meram_fb_cache
*
cache
,
...
@@ -355,7 +315,7 @@ meram_get_next_icb_addr(struct sh_mobile_meram_info *pdata,
...
@@ -355,7 +315,7 @@ meram_get_next_icb_addr(struct sh_mobile_meram_info *pdata,
(((x) * (y) + (MERAM_LINE_WIDTH - 1)) & ~(MERAM_LINE_WIDTH - 1))
(((x) * (y) + (MERAM_LINE_WIDTH - 1)) & ~(MERAM_LINE_WIDTH - 1))
/* Initialize MERAM. */
/* Initialize MERAM. */
static
int
meram_init
(
struct
sh_mobile_meram_priv
*
priv
,
static
int
meram_
plane_
init
(
struct
sh_mobile_meram_priv
*
priv
,
struct
sh_mobile_meram_fb_plane
*
plane
,
struct
sh_mobile_meram_fb_plane
*
plane
,
unsigned
int
xres
,
unsigned
int
yres
,
unsigned
int
xres
,
unsigned
int
yres
,
unsigned
int
*
out_pitch
)
unsigned
int
*
out_pitch
)
...
@@ -427,7 +387,7 @@ static int meram_init(struct sh_mobile_meram_priv *priv,
...
@@ -427,7 +387,7 @@ static int meram_init(struct sh_mobile_meram_priv *priv,
return
0
;
return
0
;
}
}
static
void
meram_
deinit
(
struct
sh_mobile_meram_priv
*
priv
,
static
void
meram_
plane_cleanup
(
struct
sh_mobile_meram_priv
*
priv
,
struct
sh_mobile_meram_fb_plane
*
plane
)
struct
sh_mobile_meram_fb_plane
*
plane
)
{
{
/* disable ICB */
/* disable ICB */
...
@@ -441,20 +401,82 @@ static void meram_deinit(struct sh_mobile_meram_priv *priv,
...
@@ -441,20 +401,82 @@ static void meram_deinit(struct sh_mobile_meram_priv *priv,
}
}
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
*
Registration/unregistration
*
MERAM operations
*/
*/
static
void
*
sh_mobile_meram_register
(
struct
sh_mobile_meram_info
*
pdata
,
unsigned
long
sh_mobile_meram_alloc
(
struct
sh_mobile_meram_info
*
pdata
,
size_t
size
)
{
struct
sh_mobile_meram_priv
*
priv
=
pdata
->
priv
;
return
meram_alloc
(
priv
,
size
);
}
EXPORT_SYMBOL_GPL
(
sh_mobile_meram_alloc
);
void
sh_mobile_meram_free
(
struct
sh_mobile_meram_info
*
pdata
,
unsigned
long
mem
,
size_t
size
)
{
struct
sh_mobile_meram_priv
*
priv
=
pdata
->
priv
;
meram_free
(
priv
,
mem
,
size
);
}
EXPORT_SYMBOL_GPL
(
sh_mobile_meram_free
);
/* Allocate memory for the ICBs and mark them as used. */
static
struct
sh_mobile_meram_fb_cache
*
meram_cache_alloc
(
struct
sh_mobile_meram_priv
*
priv
,
const
struct
sh_mobile_meram_cfg
*
cfg
,
int
pixelformat
)
{
unsigned
int
nplanes
=
is_nvcolor
(
pixelformat
)
?
2
:
1
;
struct
sh_mobile_meram_fb_cache
*
cache
;
int
ret
;
cache
=
kzalloc
(
sizeof
(
*
cache
),
GFP_KERNEL
);
if
(
cache
==
NULL
)
return
ERR_PTR
(
-
ENOMEM
);
cache
->
nplanes
=
nplanes
;
ret
=
meram_plane_alloc
(
priv
,
&
cache
->
planes
[
0
],
cfg
->
icb
[
0
].
meram_size
);
if
(
ret
<
0
)
goto
error
;
cache
->
planes
[
0
].
marker
->
current_reg
=
1
;
cache
->
planes
[
0
].
marker
->
pixelformat
=
pixelformat
;
if
(
cache
->
nplanes
==
1
)
return
cache
;
ret
=
meram_plane_alloc
(
priv
,
&
cache
->
planes
[
1
],
cfg
->
icb
[
1
].
meram_size
);
if
(
ret
<
0
)
{
meram_plane_free
(
priv
,
&
cache
->
planes
[
0
]);
goto
error
;
}
return
cache
;
error:
kfree
(
cache
);
return
ERR_PTR
(
-
ENOMEM
);
}
void
*
sh_mobile_meram_cache_alloc
(
struct
sh_mobile_meram_info
*
pdata
,
const
struct
sh_mobile_meram_cfg
*
cfg
,
const
struct
sh_mobile_meram_cfg
*
cfg
,
unsigned
int
xres
,
unsigned
int
yres
,
unsigned
int
xres
,
unsigned
int
yres
,
unsigned
int
pixelformat
,
unsigned
int
pixelformat
,
unsigned
int
*
pitch
)
unsigned
int
*
pitch
)
{
{
struct
sh_mobile_meram_fb_cache
*
cache
;
struct
sh_mobile_meram_fb_cache
*
cache
;
struct
sh_mobile_meram_priv
*
priv
=
pdata
->
priv
;
struct
sh_mobile_meram_priv
*
priv
=
pdata
->
priv
;
struct
platform_device
*
pdev
=
pdata
->
pdev
;
struct
platform_device
*
pdev
=
pdata
->
pdev
;
unsigned
int
nplanes
=
is_nvcolor
(
pixelformat
)
?
2
:
1
;
unsigned
int
out_pitch
;
unsigned
int
out_pitch
;
if
(
priv
==
NULL
)
return
ERR_PTR
(
-
ENODEV
);
if
(
pixelformat
!=
SH_MOBILE_MERAM_PF_NV
&&
if
(
pixelformat
!=
SH_MOBILE_MERAM_PF_NV
&&
pixelformat
!=
SH_MOBILE_MERAM_PF_NV24
&&
pixelformat
!=
SH_MOBILE_MERAM_PF_NV24
&&
pixelformat
!=
SH_MOBILE_MERAM_PF_RGB
)
pixelformat
!=
SH_MOBILE_MERAM_PF_RGB
)
...
@@ -469,10 +491,16 @@ static void *sh_mobile_meram_register(struct sh_mobile_meram_info *pdata,
...
@@ -469,10 +491,16 @@ static void *sh_mobile_meram_register(struct sh_mobile_meram_info *pdata,
return
ERR_PTR
(
-
EINVAL
);
return
ERR_PTR
(
-
EINVAL
);
}
}
if
(
cfg
->
icb
[
0
].
meram_size
==
0
)
return
ERR_PTR
(
-
EINVAL
);
if
(
nplanes
==
2
&&
cfg
->
icb
[
1
].
meram_size
==
0
)
return
ERR_PTR
(
-
EINVAL
);
mutex_lock
(
&
priv
->
lock
);
mutex_lock
(
&
priv
->
lock
);
/* We now register the ICBs and allocate the MERAM regions. */
/* We now register the ICBs and allocate the MERAM regions. */
cache
=
meram_alloc
(
priv
,
cfg
,
pixelformat
);
cache
=
meram_
cache_
alloc
(
priv
,
cfg
,
pixelformat
);
if
(
IS_ERR
(
cache
))
{
if
(
IS_ERR
(
cache
))
{
dev_err
(
&
pdev
->
dev
,
"MERAM allocation failed (%ld)."
,
dev_err
(
&
pdev
->
dev
,
"MERAM allocation failed (%ld)."
,
PTR_ERR
(
cache
));
PTR_ERR
(
cache
));
...
@@ -480,42 +508,50 @@ static void *sh_mobile_meram_register(struct sh_mobile_meram_info *pdata,
...
@@ -480,42 +508,50 @@ static void *sh_mobile_meram_register(struct sh_mobile_meram_info *pdata,
}
}
/* initialize MERAM */
/* initialize MERAM */
meram_init
(
priv
,
&
cache
->
planes
[
0
],
xres
,
yres
,
&
out_pitch
);
meram_
plane_
init
(
priv
,
&
cache
->
planes
[
0
],
xres
,
yres
,
&
out_pitch
);
*
pitch
=
out_pitch
;
*
pitch
=
out_pitch
;
if
(
pixelformat
==
SH_MOBILE_MERAM_PF_NV
)
if
(
pixelformat
==
SH_MOBILE_MERAM_PF_NV
)
meram_
init
(
priv
,
&
cache
->
planes
[
1
],
xres
,
(
yres
+
1
)
/
2
,
meram_
plane_init
(
priv
,
&
cache
->
planes
[
1
]
,
&
out_pitch
);
xres
,
(
yres
+
1
)
/
2
,
&
out_pitch
);
else
if
(
pixelformat
==
SH_MOBILE_MERAM_PF_NV24
)
else
if
(
pixelformat
==
SH_MOBILE_MERAM_PF_NV24
)
meram_
init
(
priv
,
&
cache
->
planes
[
1
],
2
*
xres
,
(
yres
+
1
)
/
2
,
meram_
plane_init
(
priv
,
&
cache
->
planes
[
1
]
,
&
out_pitch
);
2
*
xres
,
(
yres
+
1
)
/
2
,
&
out_pitch
);
err:
err:
mutex_unlock
(
&
priv
->
lock
);
mutex_unlock
(
&
priv
->
lock
);
return
cache
;
return
cache
;
}
}
EXPORT_SYMBOL_GPL
(
sh_mobile_meram_cache_alloc
);
static
void
void
sh_mobile_meram_
unregister
(
struct
sh_mobile_meram_info
*
pdata
,
void
*
data
)
sh_mobile_meram_
cache_free
(
struct
sh_mobile_meram_info
*
pdata
,
void
*
data
)
{
{
struct
sh_mobile_meram_fb_cache
*
cache
=
data
;
struct
sh_mobile_meram_fb_cache
*
cache
=
data
;
struct
sh_mobile_meram_priv
*
priv
=
pdata
->
priv
;
struct
sh_mobile_meram_priv
*
priv
=
pdata
->
priv
;
mutex_lock
(
&
priv
->
lock
);
mutex_lock
(
&
priv
->
lock
);
/* deinit & free */
/* Cleanup and free. */
meram_deinit
(
priv
,
&
cache
->
planes
[
0
]);
meram_plane_cleanup
(
priv
,
&
cache
->
planes
[
0
]);
if
(
cache
->
nplanes
==
2
)
meram_plane_free
(
priv
,
&
cache
->
planes
[
0
]);
meram_deinit
(
priv
,
&
cache
->
planes
[
1
]);
meram_free
(
priv
,
cache
);
if
(
cache
->
nplanes
==
2
)
{
meram_plane_cleanup
(
priv
,
&
cache
->
planes
[
1
]);
meram_plane_free
(
priv
,
&
cache
->
planes
[
1
]);
}
kfree
(
cache
);
mutex_unlock
(
&
priv
->
lock
);
mutex_unlock
(
&
priv
->
lock
);
}
}
EXPORT_SYMBOL_GPL
(
sh_mobile_meram_cache_free
);
static
void
void
sh_mobile_meram_update
(
struct
sh_mobile_meram_info
*
pdata
,
void
*
data
,
sh_mobile_meram_cache_update
(
struct
sh_mobile_meram_info
*
pdata
,
void
*
data
,
unsigned
long
base_addr_y
,
unsigned
long
base_addr_c
,
unsigned
long
base_addr_y
,
unsigned
long
*
icb_addr_y
,
unsigned
long
*
icb_addr_c
)
unsigned
long
base_addr_c
,
unsigned
long
*
icb_addr_y
,
unsigned
long
*
icb_addr_c
)
{
{
struct
sh_mobile_meram_fb_cache
*
cache
=
data
;
struct
sh_mobile_meram_fb_cache
*
cache
=
data
;
struct
sh_mobile_meram_priv
*
priv
=
pdata
->
priv
;
struct
sh_mobile_meram_priv
*
priv
=
pdata
->
priv
;
...
@@ -527,13 +563,7 @@ sh_mobile_meram_update(struct sh_mobile_meram_info *pdata, void *data,
...
@@ -527,13 +563,7 @@ sh_mobile_meram_update(struct sh_mobile_meram_info *pdata, void *data,
mutex_unlock
(
&
priv
->
lock
);
mutex_unlock
(
&
priv
->
lock
);
}
}
EXPORT_SYMBOL_GPL
(
sh_mobile_meram_cache_update
);
static
struct
sh_mobile_meram_ops
sh_mobile_meram_ops
=
{
.
module
=
THIS_MODULE
,
.
meram_register
=
sh_mobile_meram_register
,
.
meram_unregister
=
sh_mobile_meram_unregister
,
.
meram_update
=
sh_mobile_meram_update
,
};
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
* Power management
* Power management
...
@@ -624,7 +654,6 @@ static int __devinit sh_mobile_meram_probe(struct platform_device *pdev)
...
@@ -624,7 +654,6 @@ static int __devinit sh_mobile_meram_probe(struct platform_device *pdev)
for
(
i
=
0
;
i
<
MERAM_ICB_NUM
;
++
i
)
for
(
i
=
0
;
i
<
MERAM_ICB_NUM
;
++
i
)
priv
->
icbs
[
i
].
index
=
i
;
priv
->
icbs
[
i
].
index
=
i
;
pdata
->
ops
=
&
sh_mobile_meram_ops
;
pdata
->
priv
=
priv
;
pdata
->
priv
=
priv
;
pdata
->
pdev
=
pdev
;
pdata
->
pdev
=
pdev
;
...
...
include/video/sh_mobile_meram.h
View file @
4c5b1fb8
...
@@ -15,7 +15,6 @@ enum {
...
@@ -15,7 +15,6 @@ enum {
struct
sh_mobile_meram_priv
;
struct
sh_mobile_meram_priv
;
struct
sh_mobile_meram_ops
;
/*
/*
* struct sh_mobile_meram_info - MERAM platform data
* struct sh_mobile_meram_info - MERAM platform data
...
@@ -24,7 +23,6 @@ struct sh_mobile_meram_ops;
...
@@ -24,7 +23,6 @@ struct sh_mobile_meram_ops;
struct
sh_mobile_meram_info
{
struct
sh_mobile_meram_info
{
int
addr_mode
;
int
addr_mode
;
u32
reserved_icbs
;
u32
reserved_icbs
;
struct
sh_mobile_meram_ops
*
ops
;
struct
sh_mobile_meram_priv
*
priv
;
struct
sh_mobile_meram_priv
*
priv
;
struct
platform_device
*
pdev
;
struct
platform_device
*
pdev
;
};
};
...
@@ -38,26 +36,59 @@ struct sh_mobile_meram_cfg {
...
@@ -38,26 +36,59 @@ struct sh_mobile_meram_cfg {
struct
sh_mobile_meram_icb_cfg
icb
[
2
];
struct
sh_mobile_meram_icb_cfg
icb
[
2
];
};
};
struct
module
;
#if defined(CONFIG_FB_SH_MOBILE_MERAM) || \
struct
sh_mobile_meram_ops
{
defined(CONFIG_FB_SH_MOBILE_MERAM_MODULE)
struct
module
*
module
;
unsigned
long
sh_mobile_meram_alloc
(
struct
sh_mobile_meram_info
*
meram_dev
,
/* register usage of meram */
size_t
size
);
void
*
(
*
meram_register
)(
struct
sh_mobile_meram_info
*
meram_dev
,
void
sh_mobile_meram_free
(
struct
sh_mobile_meram_info
*
meram_dev
,
unsigned
long
mem
,
size_t
size
);
void
*
sh_mobile_meram_cache_alloc
(
struct
sh_mobile_meram_info
*
dev
,
const
struct
sh_mobile_meram_cfg
*
cfg
,
const
struct
sh_mobile_meram_cfg
*
cfg
,
unsigned
int
xres
,
unsigned
int
yres
,
unsigned
int
xres
,
unsigned
int
yres
,
unsigned
int
pixelformat
,
unsigned
int
pixelformat
,
unsigned
int
*
pitch
);
unsigned
int
*
pitch
);
void
sh_mobile_meram_cache_free
(
struct
sh_mobile_meram_info
*
dev
,
void
*
data
);
void
sh_mobile_meram_cache_update
(
struct
sh_mobile_meram_info
*
dev
,
void
*
data
,
unsigned
long
base_addr_y
,
unsigned
long
base_addr_c
,
unsigned
long
*
icb_addr_y
,
unsigned
long
*
icb_addr_c
);
#else
static
inline
unsigned
long
sh_mobile_meram_alloc
(
struct
sh_mobile_meram_info
*
meram_dev
,
size_t
size
)
{
return
0
;
}
/* unregister usage of meram */
static
inline
void
void
(
*
meram_unregister
)(
struct
sh_mobile_meram_info
*
meram_dev
,
sh_mobile_meram_free
(
struct
sh_mobile_meram_info
*
meram_dev
,
void
*
data
);
unsigned
long
mem
,
size_t
size
)
{
}
/* update meram settings */
static
inline
void
*
void
(
*
meram_update
)(
struct
sh_mobile_meram_info
*
meram_dev
,
void
*
data
,
sh_mobile_meram_cache_alloc
(
struct
sh_mobile_meram_info
*
dev
,
const
struct
sh_mobile_meram_cfg
*
cfg
,
unsigned
int
xres
,
unsigned
int
yres
,
unsigned
int
pixelformat
,
unsigned
int
*
pitch
)
{
return
ERR_PTR
(
-
ENODEV
);
}
static
inline
void
sh_mobile_meram_cache_free
(
struct
sh_mobile_meram_info
*
dev
,
void
*
data
)
{
}
static
inline
void
sh_mobile_meram_cache_update
(
struct
sh_mobile_meram_info
*
dev
,
void
*
data
,
unsigned
long
base_addr_y
,
unsigned
long
base_addr_y
,
unsigned
long
base_addr_c
,
unsigned
long
base_addr_c
,
unsigned
long
*
icb_addr_y
,
unsigned
long
*
icb_addr_y
,
unsigned
long
*
icb_addr_c
);
unsigned
long
*
icb_addr_c
)
};
{
}
#endif
#endif
/* __VIDEO_SH_MOBILE_MERAM_H__ */
#endif
/* __VIDEO_SH_MOBILE_MERAM_H__ */
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