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, <k.debski@samsung.com>
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