hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
/* SPDX-License-Identifier: GPL-2.0-only */
/* drivers/gpu/drm/exynos/regs-scaler.h
 *
 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
 *        http://www.samsung.com/
 * Author: Andrzej Pietrasiewicz <andrzejtp2010@gmail.com>
 *
 * Register definition file for Samsung scaler driver
 */
 
#ifndef EXYNOS_REGS_SCALER_H
#define EXYNOS_REGS_SCALER_H
 
/* Register part */
 
/* Global setting */
#define SCALER_STATUS            0x0    /* no shadow */
#define SCALER_CFG            0x4
 
/* Interrupt */
#define SCALER_INT_EN            0x8    /* no shadow */
#define SCALER_INT_STATUS        0xc    /* no shadow */
 
/* SRC */
#define SCALER_SRC_CFG            0x10
#define SCALER_SRC_Y_BASE        0x14
#define SCALER_SRC_CB_BASE        0x18
#define SCALER_SRC_CR_BASE        0x294
#define SCALER_SRC_SPAN            0x1c
#define SCALER_SRC_Y_POS        0x20
#define SCALER_SRC_WH            0x24
#define SCALER_SRC_C_POS        0x28
 
/* DST */
#define SCALER_DST_CFG            0x30
#define SCALER_DST_Y_BASE        0x34
#define SCALER_DST_CB_BASE        0x38
#define SCALER_DST_CR_BASE        0x298
#define SCALER_DST_SPAN            0x3c
#define SCALER_DST_WH            0x40
#define SCALER_DST_POS            0x44
 
/* Ratio */
#define SCALER_H_RATIO            0x50
#define SCALER_V_RATIO            0x54
 
/* Rotation */
#define SCALER_ROT_CFG            0x58
 
/* Coefficient */
/*
 * YHCOEF_{x}{A|B|C|D}            CHCOEF_{x}{A|B|C|D}
 *
 *    A    B    C    D    A    B    C    D
 * 0    60    64    68    6c    140    144    148    14c
 * 1    70    74    78    7c    150    154    158    15c
 * 2    80    84    88    8c    160    164    168    16c
 * 3    90    94    98    9c    170    174    178    17c
 * 4    a0    a4    a8    ac    180    184    188    18c
 * 5    b0    b4    b8    bc    190    194    198    19c
 * 6    c0    c4    c8    cc    1a0    1a4    1a8    1ac
 * 7    d0    d4    d8    dc    1b0    1b4    1b8    1bc
 * 8    e0    e4    e8    ec    1c0    1c4    1c8    1cc
 *
 *
 * YVCOEF_{x}{A|B}            CVCOEF_{x}{A|B}
 *
 *    A    B            A    B
 * 0    f0    f4            1d0    1d4
 * 1    f8    fc            1d8    1dc
 * 2    100    104            1e0    1e4
 * 3    108    10c            1e8    1ec
 * 4    110    114            1f0    1f4
 * 5    118    11c            1f8    1fc
 * 6    120    124            200    204
 * 7    128    12c            208    20c
 * 8    130    134            210    214
 */
#define _SCALER_HCOEF_DELTA(r, c)    ((r) * 0x10 + (c) * 0x4)
#define _SCALER_VCOEF_DELTA(r, c)    ((r) * 0x8 + (c) * 0x4)
 
#define SCALER_YHCOEF(r, c)        (0x60 + _SCALER_HCOEF_DELTA((r), (c)))
#define SCALER_YVCOEF(r, c)        (0xf0 + _SCALER_VCOEF_DELTA((r), (c)))
#define SCALER_CHCOEF(r, c)        (0x140 + _SCALER_HCOEF_DELTA((r), (c)))
#define SCALER_CVCOEF(r, c)        (0x1d0 + _SCALER_VCOEF_DELTA((r), (c)))
 
 
/* Color Space Conversion */
#define SCALER_CSC_COEF(x, y)        (0x220 + (y) * 0xc + (x) * 0x4)
 
/* Dithering */
#define SCALER_DITH_CFG            0x250
 
/* Version Number */
#define SCALER_VER            0x260    /* no shadow */
 
/* Cycle count and Timeout */
#define SCALER_CYCLE_COUNT        0x278    /* no shadow */
#define SCALER_TIMEOUT_CTRL        0x2c0    /* no shadow */
#define SCALER_TIMEOUT_CNT        0x2c4    /* no shadow */
 
/* Blending */
#define SCALER_SRC_BLEND_COLOR        0x280
#define SCALER_SRC_BLEND_ALPHA        0x284
#define SCALER_DST_BLEND_COLOR        0x288
#define SCALER_DST_BLEND_ALPHA        0x28c
 
/* Color Fill */
#define SCALER_FILL_COLOR        0x290
 
/* Multiple Command Queue */
#define SCALER_ADDR_Q_CONFIG        0x2a0    /* no shadow */
#define SCALER_SRC_ADDR_Q_STATUS    0x2a4    /* no shadow */
#define SCALER_SRC_ADDR_Q        0x2a8    /* no shadow */
 
/* CRC */
#define SCALER_CRC_COLOR00_10        0x2b0    /* no shadow */
#define SCALER_CRC_COLOR20_30        0x2b4    /* no shadow */
#define SCALER_CRC_COLOR01_11        0x2b8    /* no shadow */
#define SCALER_CRC_COLOR21_31        0x2bc    /* no shadow */
 
/* Shadow Registers */
#define SCALER_SHADOW_OFFSET        0x1000
 
 
/* Bit definition part */
#define SCALER_MASK(hi_b, lo_b)        ((1 << ((hi_b) - (lo_b) + 1)) - 1)
#define SCALER_GET(reg, hi_b, lo_b)    \
   (((reg) >> (lo_b)) & SCALER_MASK(hi_b, lo_b))
#define SCALER_SET(val, hi_b, lo_b) \
   (((val) & SCALER_MASK(hi_b, lo_b)) << lo_b)
 
/* SCALER_STATUS */
#define SCALER_STATUS_SCALER_RUNNING        (1 << 1)
#define SCALER_STATUS_SCALER_READY_CLK_DOWN    (1 << 0)
 
/* SCALER_CFG */
#define SCALER_CFG_FILL_EN            (1 << 24)
#define SCALER_CFG_BLEND_COLOR_DIVIDE_ALPHA_EN    (1 << 17)
#define SCALER_CFG_BLEND_EN            (1 << 16)
#define SCALER_CFG_CSC_Y_OFFSET_SRC_EN        (1 << 10)
#define SCALER_CFG_CSC_Y_OFFSET_DST_EN        (1 << 9)
#define SCALER_CFG_16_BURST_MODE        (1 << 8)
#define SCALER_CFG_SOFT_RESET            (1 << 1)
#define SCALER_CFG_START_CMD            (1 << 0)
 
/* SCALER_INT_EN */
#define SCALER_INT_EN_TIMEOUT            (1 << 31)
#define SCALER_INT_EN_ILLEGAL_BLEND        (1 << 24)
#define SCALER_INT_EN_ILLEGAL_RATIO        (1 << 23)
#define SCALER_INT_EN_ILLEGAL_DST_HEIGHT    (1 << 22)
#define SCALER_INT_EN_ILLEGAL_DST_WIDTH        (1 << 21)
#define SCALER_INT_EN_ILLEGAL_DST_V_POS        (1 << 20)
#define SCALER_INT_EN_ILLEGAL_DST_H_POS        (1 << 19)
#define SCALER_INT_EN_ILLEGAL_DST_C_SPAN    (1 << 18)
#define SCALER_INT_EN_ILLEGAL_DST_Y_SPAN    (1 << 17)
#define SCALER_INT_EN_ILLEGAL_DST_CR_BASE    (1 << 16)
#define SCALER_INT_EN_ILLEGAL_DST_CB_BASE    (1 << 15)
#define SCALER_INT_EN_ILLEGAL_DST_Y_BASE    (1 << 14)
#define SCALER_INT_EN_ILLEGAL_DST_COLOR        (1 << 13)
#define SCALER_INT_EN_ILLEGAL_SRC_HEIGHT    (1 << 12)
#define SCALER_INT_EN_ILLEGAL_SRC_WIDTH        (1 << 11)
#define SCALER_INT_EN_ILLEGAL_SRC_CV_POS    (1 << 10)
#define SCALER_INT_EN_ILLEGAL_SRC_CH_POS    (1 << 9)
#define SCALER_INT_EN_ILLEGAL_SRC_YV_POS    (1 << 8)
#define SCALER_INT_EN_ILLEGAL_SRC_YH_POS    (1 << 7)
#define SCALER_INT_EN_ILLEGAL_DST_SPAN        (1 << 6)
#define SCALER_INT_EN_ILLEGAL_SRC_Y_SPAN    (1 << 5)
#define SCALER_INT_EN_ILLEGAL_SRC_CR_BASE    (1 << 4)
#define SCALER_INT_EN_ILLEGAL_SRC_CB_BASE    (1 << 3)
#define SCALER_INT_EN_ILLEGAL_SRC_Y_BASE    (1 << 2)
#define SCALER_INT_EN_ILLEGAL_SRC_COLOR        (1 << 1)
#define SCALER_INT_EN_FRAME_END            (1 << 0)
 
/* SCALER_INT_STATUS */
#define SCALER_INT_STATUS_TIMEOUT        (1 << 31)
#define SCALER_INT_STATUS_ILLEGAL_BLEND        (1 << 24)
#define SCALER_INT_STATUS_ILLEGAL_RATIO        (1 << 23)
#define SCALER_INT_STATUS_ILLEGAL_DST_HEIGHT    (1 << 22)
#define SCALER_INT_STATUS_ILLEGAL_DST_WIDTH    (1 << 21)
#define SCALER_INT_STATUS_ILLEGAL_DST_V_POS    (1 << 20)
#define SCALER_INT_STATUS_ILLEGAL_DST_H_POS    (1 << 19)
#define SCALER_INT_STATUS_ILLEGAL_DST_C_SPAN    (1 << 18)
#define SCALER_INT_STATUS_ILLEGAL_DST_Y_SPAN    (1 << 17)
#define SCALER_INT_STATUS_ILLEGAL_DST_CR_BASE    (1 << 16)
#define SCALER_INT_STATUS_ILLEGAL_DST_CB_BASE    (1 << 15)
#define SCALER_INT_STATUS_ILLEGAL_DST_Y_BASE    (1 << 14)
#define SCALER_INT_STATUS_ILLEGAL_DST_COLOR    (1 << 13)
#define SCALER_INT_STATUS_ILLEGAL_SRC_HEIGHT    (1 << 12)
#define SCALER_INT_STATUS_ILLEGAL_SRC_WIDTH    (1 << 11)
#define SCALER_INT_STATUS_ILLEGAL_SRC_CV_POS    (1 << 10)
#define SCALER_INT_STATUS_ILLEGAL_SRC_CH_POS    (1 << 9)
#define SCALER_INT_STATUS_ILLEGAL_SRC_YV_POS    (1 << 8)
#define SCALER_INT_STATUS_ILLEGAL_SRC_YH_POS    (1 << 7)
#define SCALER_INT_STATUS_ILLEGAL_DST_SPAN    (1 << 6)
#define SCALER_INT_STATUS_ILLEGAL_SRC_Y_SPAN    (1 << 5)
#define SCALER_INT_STATUS_ILLEGAL_SRC_CR_BASE    (1 << 4)
#define SCALER_INT_STATUS_ILLEGAL_SRC_CB_BASE    (1 << 3)
#define SCALER_INT_STATUS_ILLEGAL_SRC_Y_BASE    (1 << 2)
#define SCALER_INT_STATUS_ILLEGAL_SRC_COLOR    (1 << 1)
#define SCALER_INT_STATUS_FRAME_END        (1 << 0)
 
/* SCALER_SRC_CFG */
#define SCALER_SRC_CFG_TILE_EN            (1 << 10)
#define SCALER_SRC_CFG_GET_BYTE_SWAP(r)        SCALER_GET(r, 6, 5)
#define SCALER_SRC_CFG_SET_BYTE_SWAP(v)        SCALER_SET(v, 6, 5)
#define SCALER_SRC_CFG_GET_COLOR_FORMAT(r)    SCALER_GET(r, 4, 0)
#define SCALER_SRC_CFG_SET_COLOR_FORMAT(v)    SCALER_SET(v, 4, 0)
#define SCALER_YUV420_2P_UV            0
#define SCALER_YUV422_2P_UV            2
#define SCALER_YUV444_2P_UV            3
#define SCALER_RGB_565                4
#define SCALER_ARGB1555                5
#define SCALER_ARGB8888                6
#define SCALER_ARGB8888_PRE            7
#define SCALER_YUV422_1P_YVYU            9
#define SCALER_YUV422_1P_YUYV            10
#define SCALER_YUV422_1P_UYVY            11
#define SCALER_ARGB4444                12
#define SCALER_L8A8                13
#define SCALER_RGBA8888                14
#define SCALER_L8                15
#define SCALER_YUV420_2P_VU            16
#define SCALER_YUV422_2P_VU            18
#define SCALER_YUV444_2P_VU            19
#define SCALER_YUV420_3P            20
#define SCALER_YUV422_3P            22
#define SCALER_YUV444_3P            23
 
/* SCALER_SRC_SPAN */
#define SCALER_SRC_SPAN_GET_C_SPAN(r)        SCALER_GET(r, 29, 16)
#define SCALER_SRC_SPAN_SET_C_SPAN(v)        SCALER_SET(v, 29, 16)
#define SCALER_SRC_SPAN_GET_Y_SPAN(r)        SCALER_GET(r, 13, 0)
#define SCALER_SRC_SPAN_SET_Y_SPAN(v)        SCALER_SET(v, 13, 0)
 
/* SCALER_SRC_Y_POS */
#define SCALER_SRC_Y_POS_GET_YH_POS(r)        SCALER_GET(r, 31, 16)
#define SCALER_SRC_Y_POS_SET_YH_POS(v)        SCALER_SET(v, 31, 16)
#define SCALER_SRC_Y_POS_GET_YV_POS(r)        SCALER_GET(r, 15, 0)
#define SCALER_SRC_Y_POS_SET_YV_POS(v)        SCALER_SET(v, 15, 0)
 
/* SCALER_SRC_WH */
#define SCALER_SRC_WH_GET_WIDTH(r)        SCALER_GET(r, 29, 16)
#define SCALER_SRC_WH_SET_WIDTH(v)        SCALER_SET(v, 29, 16)
#define SCALER_SRC_WH_GET_HEIGHT(r)        SCALER_GET(r, 13, 0)
#define SCALER_SRC_WH_SET_HEIGHT(v)        SCALER_SET(v, 13, 0)
 
/* SCALER_SRC_C_POS */
#define SCALER_SRC_C_POS_GET_CH_POS(r)        SCALER_GET(r, 31, 16)
#define SCALER_SRC_C_POS_SET_CH_POS(v)        SCALER_SET(v, 31, 16)
#define SCALER_SRC_C_POS_GET_CV_POS(r)        SCALER_GET(r, 15, 0)
#define SCALER_SRC_C_POS_SET_CV_POS(v)        SCALER_SET(v, 15, 0)
 
/* SCALER_DST_CFG */
#define SCALER_DST_CFG_GET_BYTE_SWAP(r)        SCALER_GET(r, 6, 5)
#define SCALER_DST_CFG_SET_BYTE_SWAP(v)        SCALER_SET(v, 6, 5)
#define SCALER_DST_CFG_GET_COLOR_FORMAT(r)    SCALER_GET(r, 4, 0)
#define SCALER_DST_CFG_SET_COLOR_FORMAT(v)    SCALER_SET(v, 4, 0)
 
/* SCALER_DST_SPAN */
#define SCALER_DST_SPAN_GET_C_SPAN(r)        SCALER_GET(r, 29, 16)
#define SCALER_DST_SPAN_SET_C_SPAN(v)        SCALER_SET(v, 29, 16)
#define SCALER_DST_SPAN_GET_Y_SPAN(r)        SCALER_GET(r, 13, 0)
#define SCALER_DST_SPAN_SET_Y_SPAN(v)        SCALER_SET(v, 13, 0)
 
/* SCALER_DST_WH */
#define SCALER_DST_WH_GET_WIDTH(r)        SCALER_GET(r, 29, 16)
#define SCALER_DST_WH_SET_WIDTH(v)        SCALER_SET(v, 29, 16)
#define SCALER_DST_WH_GET_HEIGHT(r)        SCALER_GET(r, 13, 0)
#define SCALER_DST_WH_SET_HEIGHT(v)        SCALER_SET(v, 13, 0)
 
/* SCALER_DST_POS */
#define SCALER_DST_POS_GET_H_POS(r)        SCALER_GET(r, 29, 16)
#define SCALER_DST_POS_SET_H_POS(v)        SCALER_SET(v, 29, 16)
#define SCALER_DST_POS_GET_V_POS(r)        SCALER_GET(r, 13, 0)
#define SCALER_DST_POS_SET_V_POS(v)        SCALER_SET(v, 13, 0)
 
/* SCALER_H_RATIO */
#define SCALER_H_RATIO_GET(r)            SCALER_GET(r, 18, 0)
#define SCALER_H_RATIO_SET(v)            SCALER_SET(v, 18, 0)
 
/* SCALER_V_RATIO */
#define SCALER_V_RATIO_GET(r)            SCALER_GET(r, 18, 0)
#define SCALER_V_RATIO_SET(v)            SCALER_SET(v, 18, 0)
 
/* SCALER_ROT_CFG */
#define SCALER_ROT_CFG_FLIP_X_EN        (1 << 3)
#define SCALER_ROT_CFG_FLIP_Y_EN        (1 << 2)
#define SCALER_ROT_CFG_GET_ROTMODE(r)        SCALER_GET(r, 1, 0)
#define SCALER_ROT_CFG_SET_ROTMODE(v)        SCALER_SET(v, 1, 0)
#define SCALER_ROT_MODE_90            1
#define SCALER_ROT_MODE_180            2
#define SCALER_ROT_MODE_270            3
 
/* SCALER_HCOEF, SCALER_VCOEF */
#define SCALER_COEF_SHIFT(i)            (16 * (1 - (i) % 2))
#define SCALER_COEF_GET(r, i)            \
               (((r) >> SCALER_COEF_SHIFT(i)) & 0x1ff)
#define SCALER_COEF_SET(v, i)            \
               (((v) & 0x1ff) << SCALER_COEF_SHIFT(i))
 
/* SCALER_CSC_COEFxy */
#define SCALER_CSC_COEF_GET(r)            SCALER_GET(r, 11, 0)
#define SCALER_CSC_COEF_SET(v)            SCALER_SET(v, 11, 0)
 
/* SCALER_DITH_CFG */
#define SCALER_DITH_CFG_GET_R_TYPE(r)        SCALER_GET(r, 8, 6)
#define SCALER_DITH_CFG_SET_R_TYPE(v)        SCALER_SET(v, 8, 6)
#define SCALER_DITH_CFG_GET_G_TYPE(r)        SCALER_GET(r, 5, 3)
#define SCALER_DITH_CFG_SET_G_TYPE(v)        SCALER_SET(v, 5, 3)
#define SCALER_DITH_CFG_GET_B_TYPE(r)        SCALER_GET(r, 2, 0)
#define SCALER_DITH_CFG_SET_B_TYPE(v)        SCALER_SET(v, 2, 0)
 
/* SCALER_TIMEOUT_CTRL */
#define SCALER_TIMEOUT_CTRL_GET_TIMER_VALUE(r)    SCALER_GET(r, 31, 16)
#define SCALER_TIMEOUT_CTRL_SET_TIMER_VALUE(v)    SCALER_SET(v, 31, 16)
#define SCALER_TIMEOUT_CTRL_GET_TIMER_DIV(r)    SCALER_GET(r, 7, 4)
#define SCALER_TIMEOUT_CTRL_SET_TIMER_DIV(v)    SCALER_SET(v, 7, 4)
#define SCALER_TIMEOUT_CTRL_TIMER_ENABLE    (1 << 0)
 
/* SCALER_TIMEOUT_CNT */
#define SCALER_TIMEOUT_CTRL_GET_TIMER_COUNT(r)    SCALER_GET(r, 31, 16)
 
/* SCALER_SRC_BLEND_COLOR */
#define SCALER_SRC_BLEND_COLOR_SEL_INV        (1 << 31)
#define SCALER_SRC_BLEND_COLOR_GET_SEL(r)    SCALER_GET(r, 30, 29)
#define SCALER_SRC_BLEND_COLOR_SET_SEL(v)    SCALER_SET(v, 30, 29)
#define SCALER_SRC_BLEND_COLOR_OP_SEL_INV    (1 << 28)
#define SCALER_SRC_BLEND_COLOR_GET_OP_SEL(r)    SCALER_GET(r, 27, 24)
#define SCALER_SRC_BLEND_COLOR_SET_OP_SEL(v)    SCALER_SET(v, 27, 24)
#define SCALER_SRC_BLEND_COLOR_GET_COLOR0(r)    SCALER_GET(r, 23, 16)
#define SCALER_SRC_BLEND_COLOR_SET_COLOR0(v)    SCALER_SET(v, 23, 16)
#define SCALER_SRC_BLEND_COLOR_GET_COLOR1(r)    SCALER_GET(r, 15, 8)
#define SCALER_SRC_BLEND_COLOR_SET_COLOR1(v)    SCALER_SET(v, 15, 8)
#define SCALER_SRC_BLEND_COLOR_GET_COLOR2(r)    SCALER_GET(r, 7, 0)
#define SCALER_SRC_BLEND_COLOR_SET_COLOR2(v)    SCALER_SET(v, 7, 0)
 
/* SCALER_SRC_BLEND_ALPHA */
#define SCALER_SRC_BLEND_ALPHA_SEL_INV        (1 << 31)
#define SCALER_SRC_BLEND_ALPHA_GET_SEL(r)    SCALER_GET(r, 30, 29)
#define SCALER_SRC_BLEND_ALPHA_SET_SEL(v)    SCALER_SET(v, 30, 29)
#define SCALER_SRC_BLEND_ALPHA_OP_SEL_INV    (1 << 28)
#define SCALER_SRC_BLEND_ALPHA_GET_OP_SEL(r)    SCALER_GET(r, 27, 24)
#define SCALER_SRC_BLEND_ALPHA_SET_OP_SEL(v)    SCALER_SET(v, 27, 24)
#define SCALER_SRC_BLEND_ALPHA_GET_ALPHA(r)    SCALER_GET(r, 7, 0)
#define SCALER_SRC_BLEND_ALPHA_SET_ALPHA(v)    SCALER_SET(v, 7, 0)
 
/* SCALER_DST_BLEND_COLOR */
#define SCALER_DST_BLEND_COLOR_SEL_INV        (1 << 31)
#define SCALER_DST_BLEND_COLOR_GET_SEL(r)    SCALER_GET(r, 30, 29)
#define SCALER_DST_BLEND_COLOR_SET_SEL(v)    SCALER_SET(v, 30, 29)
#define SCALER_DST_BLEND_COLOR_OP_SEL_INV    (1 << 28)
#define SCALER_DST_BLEND_COLOR_GET_OP_SEL(r)    SCALER_GET(r, 27, 24)
#define SCALER_DST_BLEND_COLOR_SET_OP_SEL(v)    SCALER_SET(v, 27, 24)
#define SCALER_DST_BLEND_COLOR_GET_COLOR0(r)    SCALER_GET(r, 23, 16)
#define SCALER_DST_BLEND_COLOR_SET_COLOR0(v)    SCALER_SET(v, 23, 16)
#define SCALER_DST_BLEND_COLOR_GET_COLOR1(r)    SCALER_GET(r, 15, 8)
#define SCALER_DST_BLEND_COLOR_SET_COLOR1(v)    SCALER_SET(v, 15, 8)
#define SCALER_DST_BLEND_COLOR_GET_COLOR2(r)    SCALER_GET(r, 7, 0)
#define SCALER_DST_BLEND_COLOR_SET_COLOR2(v)    SCALER_SET(v, 7, 0)
 
/* SCALER_DST_BLEND_ALPHA */
#define SCALER_DST_BLEND_ALPHA_SEL_INV        (1 << 31)
#define SCALER_DST_BLEND_ALPHA_GET_SEL(r)    SCALER_GET(r, 30, 29)
#define SCALER_DST_BLEND_ALPHA_SET_SEL(v)    SCALER_SET(v, 30, 29)
#define SCALER_DST_BLEND_ALPHA_OP_SEL_INV    (1 << 28)
#define SCALER_DST_BLEND_ALPHA_GET_OP_SEL(r)    SCALER_GET(r, 27, 24)
#define SCALER_DST_BLEND_ALPHA_SET_OP_SEL(v)    SCALER_SET(v, 27, 24)
#define SCALER_DST_BLEND_ALPHA_GET_ALPHA(r)    SCALER_GET(r, 7, 0)
#define SCALER_DST_BLEND_ALPHA_SET_ALPHA(v)    SCALER_SET(v, 7, 0)
 
/* SCALER_FILL_COLOR */
#define SCALER_FILL_COLOR_GET_ALPHA(r)        SCALER_GET(r, 31, 24)
#define SCALER_FILL_COLOR_SET_ALPHA(v)        SCALER_SET(v, 31, 24)
#define SCALER_FILL_COLOR_GET_FILL_COLOR0(r)    SCALER_GET(r, 23, 16)
#define SCALER_FILL_COLOR_SET_FILL_COLOR0(v)    SCALER_SET(v, 23, 16)
#define SCALER_FILL_COLOR_GET_FILL_COLOR1(r)    SCALER_GET(r, 15, 8)
#define SCALER_FILL_COLOR_SET_FILL_COLOR1(v)    SCALER_SET(v, 15, 8)
#define SCALER_FILL_COLOR_GET_FILL_COLOR2(r)    SCALER_GET(r, 7, 0)
#define SCALER_FILL_COLOR_SET_FILL_COLOR2(v)    SCALER_SET(v, 7, 0)
 
/* SCALER_ADDR_Q_CONFIG */
#define SCALER_ADDR_Q_CONFIG_RST        (1 << 0)
 
/* SCALER_SRC_ADDR_Q_STATUS */
#define SCALER_SRC_ADDR_Q_STATUS_Y_FULL        (1 << 23)
#define SCALER_SRC_ADDR_Q_STATUS_Y_EMPTY    (1 << 22)
#define SCALER_SRC_ADDR_Q_STATUS_GET_Y_WR_IDX(r)    SCALER_GET(r, 21, 16)
#define SCALER_SRC_ADDR_Q_STATUS_CB_FULL    (1 << 15)
#define SCALER_SRC_ADDR_Q_STATUS_CB_EMPTY    (1 << 14)
#define SCALER_SRC_ADDR_Q_STATUS_GET_CB_WR_IDX(r)    SCALER_GET(r, 13, 8)
#define SCALER_SRC_ADDR_Q_STATUS_CR_FULL    (1 << 7)
#define SCALER_SRC_ADDR_Q_STATUS_CR_EMPTY    (1 << 6)
#define SCALER_SRC_ADDR_Q_STATUS_GET_CR_WR_IDX(r)    SCALER_GET(r, 5, 0)
 
/* SCALER_DST_ADDR_Q_STATUS */
#define SCALER_DST_ADDR_Q_STATUS_Y_FULL        (1 << 23)
#define SCALER_DST_ADDR_Q_STATUS_Y_EMPTY    (1 << 22)
#define SCALER_DST_ADDR_Q_STATUS_GET_Y_WR_IDX(r)    SCALER_GET(r, 21, 16)
#define SCALER_DST_ADDR_Q_STATUS_CB_FULL    (1 << 15)
#define SCALER_DST_ADDR_Q_STATUS_CB_EMPTY    (1 << 14)
#define SCALER_DST_ADDR_Q_STATUS_GET_CB_WR_IDX(r)    SCALER_GET(r, 13, 8)
#define SCALER_DST_ADDR_Q_STATUS_CR_FULL    (1 << 7)
#define SCALER_DST_ADDR_Q_STATUS_CR_EMPTY    (1 << 6)
#define SCALER_DST_ADDR_Q_STATUS_GET_CR_WR_IDX(r)    SCALER_GET(r, 5, 0)
 
/* SCALER_CRC_COLOR00_10 */
#define SCALER_CRC_COLOR00_10_GET_00(r)        SCALER_GET(r, 31, 16)
#define SCALER_CRC_COLOR00_10_GET_10(r)        SCALER_GET(r, 15, 0)
 
/* SCALER_CRC_COLOR20_30 */
#define SCALER_CRC_COLOR20_30_GET_20(r)        SCALER_GET(r, 31, 16)
#define SCALER_CRC_COLOR20_30_GET_30(r)        SCALER_GET(r, 15, 0)
 
/* SCALER_CRC_COLOR01_11 */
#define SCALER_CRC_COLOR01_11_GET_01(r)        SCALER_GET(r, 31, 16)
#define SCALER_CRC_COLOR01_11_GET_11(r)        SCALER_GET(r, 15, 0)
 
/* SCALER_CRC_COLOR21_31 */
#define SCALER_CRC_COLOR21_31_GET_21(r)        SCALER_GET(r, 31, 16)
#define SCALER_CRC_COLOR21_31_GET_31(r)        SCALER_GET(r, 15, 0)
 
#endif /* EXYNOS_REGS_SCALER_H */