Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
media
platform
s5p-g2d
g2d-hw.c
Go to the documentation of this file.
1
/*
2
* Samsung S5P G2D - 2D Graphics Accelerator Driver
3
*
4
* Copyright (c) 2011 Samsung Electronics Co., Ltd.
5
* Kamil Debski, <
[email protected]
>
6
*
7
* This program is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by the
9
* Free Software Foundation; either version 2 of the
10
* License, or (at your option) any later version
11
*/
12
13
#include <
linux/io.h
>
14
15
#include "
g2d.h
"
16
#include "
g2d-regs.h
"
17
18
#define w(x, a) writel((x), d->regs + (a))
19
#define r(a) readl(d->regs + (a))
20
21
/* g2d_reset clears all g2d registers */
22
void
g2d_reset
(
struct
g2d_dev
*
d
)
23
{
24
w
(1,
SOFT_RESET_REG
);
25
}
26
27
void
g2d_set_src_size
(
struct
g2d_dev
*
d
,
struct
g2d_frame
*
f
)
28
{
29
u32
n
;
30
31
w
(f->
stride
& 0xFFFF,
SRC_STRIDE_REG
);
32
33
n = f->
o_height
& 0xFFF;
34
n <<= 16;
35
n |= f->
o_width
& 0xFFF;
36
w
(n,
SRC_LEFT_TOP_REG
);
37
38
n = f->
bottom
& 0xFFF;
39
n <<= 16;
40
n |= f->
right
& 0xFFF;
41
w
(n,
SRC_RIGHT_BOTTOM_REG
);
42
43
w
(f->
fmt
->hw,
SRC_COLOR_MODE_REG
);
44
}
45
46
void
g2d_set_src_addr
(
struct
g2d_dev
*
d
,
dma_addr_t
a
)
47
{
48
w
(a,
SRC_BASE_ADDR_REG
);
49
}
50
51
void
g2d_set_dst_size
(
struct
g2d_dev
*
d
,
struct
g2d_frame
*
f
)
52
{
53
u32
n
;
54
55
w
(f->
stride
& 0xFFFF,
DST_STRIDE_REG
);
56
57
n = f->
o_height
& 0xFFF;
58
n <<= 16;
59
n |= f->
o_width
& 0xFFF;
60
w
(n,
DST_LEFT_TOP_REG
);
61
62
n = f->
bottom
& 0xFFF;
63
n <<= 16;
64
n |= f->
right
& 0xFFF;
65
w
(n,
DST_RIGHT_BOTTOM_REG
);
66
67
w
(f->
fmt
->hw,
DST_COLOR_MODE_REG
);
68
}
69
70
void
g2d_set_dst_addr
(
struct
g2d_dev
*
d
,
dma_addr_t
a
)
71
{
72
w
(a,
DST_BASE_ADDR_REG
);
73
}
74
75
void
g2d_set_rop4
(
struct
g2d_dev
*
d
,
u32
r
)
76
{
77
w
(r,
ROP4_REG
);
78
}
79
80
void
g2d_set_flip
(
struct
g2d_dev
*
d
,
u32
r
)
81
{
82
w
(r,
SRC_MSK_DIRECT_REG
);
83
}
84
85
u32
g2d_cmd_stretch
(
u32
e
)
86
{
87
e &= 1;
88
return
e << 4;
89
}
90
91
void
g2d_set_cmd
(
struct
g2d_dev
*
d
,
u32
c
)
92
{
93
w
(c,
BITBLT_COMMAND_REG
);
94
}
95
96
void
g2d_start
(
struct
g2d_dev
*
d
)
97
{
98
/* Clear cache */
99
w
(0x7,
CACHECTL_REG
);
100
/* Enable interrupt */
101
w
(1,
INTEN_REG
);
102
/* Start G2D engine */
103
w
(1,
BITBLT_START_REG
);
104
}
105
106
void
g2d_clear_int
(
struct
g2d_dev
*
d
)
107
{
108
w
(1,
INTC_PEND_REG
);
109
}
Generated on Thu Jan 10 2013 13:49:40 for Linux Kernel by
1.8.2