ronnie
2022-10-14 1504bb53e29d3d46222c0b3ea994fc494b48e153
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
/*
 * Allwinner SoCs tv driver.
 *
 * Copyright (C) 2016 Allwinner.
 *
 * This file is licensed under the terms of the GNU General Public
 * License version 2.  This program is licensed "as is" without any
 * warranty of any kind, whether express or implied.
 */
#ifndef __DE_TVE_H__
#define __DE_TVE_H__
 
#if defined(CONFIG_ARCH_SUN8IW11)
#define TVE_TOP_SUPPORT
#define TVE_DEVICE_NUM 2
#define TVE_TOP_DEVIVE_NUM 1
#define TVE_DAC_NUM 4
#define USE_V40_DRIVER
#elif defined(CONFIG_ARCH_SUN50IW2)
/* #define TVE_TOP_SUPPORT */
#define TVE_DEVICE_NUM 1
#define TVE_TOP_DEVIVE_NUM 1
#define TVE_DAC_NUM 1
#elif defined(CONFIG_ARCH_SUN8IW12) || defined(CONFIG_ARCH_SUN50IW9)
#define TVE_TOP_SUPPORT
#define TVE_DEVICE_NUM 1
#define TVE_TOP_DEVIVE_NUM 1
#define TVE_DAC_NUM 1
#define USE_V40_DRIVER
#elif defined(CONFIG_ARCH_SUN8IW17)
#define TVE_TOP_SUPPORT
#define TVE_DEVICE_NUM          1
#define TVE_TOP_DEVIVE_NUM      1
#define TVE_DAC_NUM             1
#define USE_V40_DRIVER
#else
#define TVE_DEVICE_NUM 1
#define TVE_TOP_DEVIVE_NUM 1
#define TVE_DAC_NUM 1
#endif
 
/* tv encoder registers offset */
#define TVE_000    (0x000)
#define TVE_004    (0x004)
#define TVE_008    (0x008)
#define TVE_00C    (0x00c)
#define TVE_010    (0x010)
#define TVE_014    (0x014)
#define TVE_018    (0x018)
#define TVE_01C    (0x01c)
#define TVE_020    (0x020)
#define TVE_024    (0x024)
#define TVE_030    (0X030)
#define TVE_034    (0x034)
#define TVE_038    (0x038)
#define TVE_03C    (0x03c)
#define TVE_040    (0x040)
#define TVE_044    (0x044)
#define TVE_048    (0x048)
#define TVE_04C    (0x04c)
#define TVE_0F8    (0x0f8)
#define TVE_0FC    (0x0fc)
#define TVE_100    (0x100)
#define TVE_104    (0x104)
#define TVE_108    (0x108)
#define TVE_10C    (0x10c)
#define TVE_110    (0x110)
#define TVE_114    (0x114)
#define TVE_118    (0x118)
#define TVE_11C    (0x11c)
#define TVE_120    (0x120)
#define TVE_124    (0x124)
#define TVE_128    (0x128)
#define TVE_12C    (0x12c)
#define TVE_130    (0x130)
#define TVE_134    (0x134)
#define TVE_138    (0x138)
#define TVE_13C    (0x13C)
#define TVE_300    (0x300)
#define TVE_304    (0x304)
#define TVE_308    (0x308)
#define TVE_30C    (0x30c)
#define TVE_380    (0x380)
#define TVE_3A0    (0x3a0)
 
#define TVE_TOP_020    (0x020)
#define TVE_TOP_024    (0x024)
#define TVE_TOP_028    (0x028)
#define TVE_TOP_02C    (0x02C)
#define TVE_TOP_030    (0x030)
#define TVE_TOP_034    (0x034)
#define TVE_TOP_0F0    (0x0F0)
 
#define TVE_GET_REG_BASE(sel)            (tve_reg_base[sel])
#define TVE_WUINT32(sel, offset, value) \
   (*((u32 *)(TVE_GET_REG_BASE(sel) + (offset))) = (value))
#define TVE_RUINT32(sel, offset) \
   (*((u32 *)(TVE_GET_REG_BASE(sel) + (offset))))
#define TVE_SET_BIT(sel, offset, bit) \
   (*((u32 *)(TVE_GET_REG_BASE(sel) + (offset))) |= (bit))
#define TVE_CLR_BIT(sel, offset, bit) \
   (*((u32 *)(TVE_GET_REG_BASE(sel) + (offset))) &= (~(bit)))
#define TVE_INIT_BIT(sel, offset, c, s) \
   (*((u32 *)(TVE_GET_REG_BASE(sel) + (offset))) = \
(((*(u32 *)(TVE_GET_REG_BASE(sel) + (offset))) & (~(c))) | (s)))
 
#define TVE_TOP_GET_REG_BASE()        (tve_top_reg_base[0])
#define TVE_TOP_WUINT32(offset, value) \
   (*((u32 *)(TVE_TOP_GET_REG_BASE() + (offset))) = (value))
#define TVE_TOP_RUINT32(offset) \
   (*((u32 *)(TVE_TOP_GET_REG_BASE() + (offset))))
#define TVE_TOP_SET_BIT(offset, bit) \
   (*((u32 *)(TVE_TOP_GET_REG_BASE() + (offset))) |= (bit))
#define TVE_TOP_CLR_BIT(offset, bit) \
   (*((u32 *)(TVE_TOP_GET_REG_BASE() + (offset))) &= (~(bit)))
#define TVE_TOP_INIT_BIT(offset, c, s) \
   (*((u32 *)(TVE_TOP_GET_REG_BASE() + (offset))) = \
(((*(u32 *)(TVE_TOP_GET_REG_BASE() + (offset))) & (~(c))) | (s)))
 
s32 tve_low_set_reg_base(u32 sel, void __iomem *address);
s32 tve_low_set_top_reg_base(void __iomem *address);
s32 tve_low_set_sid_base(void __iomem *address);
s32 tve_low_init(u32 sel, u32 *dac_no, u32 *cali, s32 *offset, u32 *dac_type,
           u32 num);
s32 tve_low_open(u32 sel);
s32 tve_low_close(u32 sel);
s32 tve_resync_enable(u32 sel);
s32 tve_resync_disable(u32 sel);
s32 tve_low_set_tv_mode(u32 sel, enum disp_tv_mode mode, u32 *cali);
s32 tve_low_get_dac_status(u32 sel);
s32 tve_low_dac_autocheck_enable(u32 sel);
s32 tve_low_dac_autocheck_disable(u32 sel);
u32 tve_low_get_sid(u32 index);
s32 tve_low_enhance(u32 sel, u32 mode);
s32 tve_low_dac_enable(u32 sel);
 
#ifdef USE_V40_DRIVER
s32 tve_low_sw_init(u32 sel, u32 *dac_no, u32 *dac_type,
           u32 num);
s32 tve_adjust_resync(u32 sel, s32 resync_pixel_num, s32 resync_line_num);
#else
static inline s32 tve_low_sw_init(u32 sel, u32 *dac_no, u32 *dac_type,
           u32 num) { return 0; }
static inline s32 tve_adjust_resync(u32 sel, s32 resync_pixel_num, s32 resync_line_num) { return 0; }
#endif
 
#endif