1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (C) 2016 Nexell Co., Ltd.
5 * Author: junghyun, kim <jhkim@nexell.co.kr>
8 #include <linux/types.h>
11 #include "s5pxx18_soc_disptop.h"
12 #include "s5pxx18_soc_lvds.h"
15 static inline unsigned int pow(int a, int b)
20 return a * pow(a, b - 1);
24 static struct nx_lvds_register_set *__g_pregister[NUMBER_OF_LVDS_MODULE];
26 int nx_lvds_initialize(void)
32 for (i = 0; i < NUMBER_OF_LVDS_MODULE; i++)
33 __g_pregister[i] = NULL;
40 u32 nx_lvds_get_number_of_module(void)
42 return NUMBER_OF_LVDS_MODULE;
45 u32 nx_lvds_get_size_of_register_set(void)
47 return sizeof(struct nx_lvds_register_set);
50 void nx_lvds_set_base_address(u32 module_index, void *base_address)
52 __g_pregister[module_index] =
53 (struct nx_lvds_register_set *)base_address;
56 void *nx_lvds_get_base_address(u32 module_index)
58 return (void *)__g_pregister[module_index];
61 u32 nx_lvds_get_physical_address(u32 module_index)
63 const u32 physical_addr[] = PHY_BASEADDR_LVDS_LIST;
65 return physical_addr[module_index];
68 int nx_lvds_open_module(u32 module_index)
73 int nx_lvds_close_module(u32 module_index)
78 int nx_lvds_check_busy(u32 module_index)
83 void nx_lvds_set_lvdsctrl0(u32 module_index, u32 regvalue)
85 register struct nx_lvds_register_set *pregister;
87 pregister = __g_pregister[module_index];
88 writel(regvalue, &pregister->lvdsctrl0);
91 void nx_lvds_set_lvdsctrl1(u32 module_index, u32 regvalue)
93 register struct nx_lvds_register_set *pregister;
95 pregister = __g_pregister[module_index];
96 writel(regvalue, &pregister->lvdsctrl1);
99 void nx_lvds_set_lvdsctrl2(u32 module_index, u32 regvalue)
101 register struct nx_lvds_register_set *pregister;
103 pregister = __g_pregister[module_index];
104 writel(regvalue, &pregister->lvdsctrl2);
107 void nx_lvds_set_lvdsctrl3(u32 module_index, u32 regvalue)
109 register struct nx_lvds_register_set *pregister;
111 pregister = __g_pregister[module_index];
112 writel(regvalue, &pregister->lvdsctrl3);
115 void nx_lvds_set_lvdsctrl4(u32 module_index, u32 regvalue)
117 register struct nx_lvds_register_set *pregister;
119 pregister = __g_pregister[module_index];
120 writel(regvalue, &pregister->lvdsctrl4);
123 void nx_lvds_set_lvdstmode0(u32 module_index, u32 regvalue)
125 register struct nx_lvds_register_set *pregister;
127 pregister = __g_pregister[module_index];
128 writel(regvalue, &pregister->lvdstmode0);
131 void nx_lvds_set_lvdsloc0(u32 module_index, u32 regvalue)
133 register struct nx_lvds_register_set *pregister;
135 pregister = __g_pregister[module_index];
136 writel(regvalue, &pregister->lvdsloc0);
139 void nx_lvds_set_lvdsloc1(u32 module_index, u32 regvalue)
141 register struct nx_lvds_register_set *pregister;
143 pregister = __g_pregister[module_index];
144 writel(regvalue, &pregister->lvdsloc1);
147 void nx_lvds_set_lvdsloc2(u32 module_index, u32 regvalue)
149 register struct nx_lvds_register_set *pregister;
151 pregister = __g_pregister[module_index];
152 writel(regvalue, &pregister->lvdsloc2);
155 void nx_lvds_set_lvdsloc3(u32 module_index, u32 regvalue)
157 register struct nx_lvds_register_set *pregister;
159 pregister = __g_pregister[module_index];
160 writel(regvalue, &pregister->lvdsloc3);
163 void nx_lvds_set_lvdsloc4(u32 module_index, u32 regvalue)
165 register struct nx_lvds_register_set *pregister;
167 pregister = __g_pregister[module_index];
168 writel(regvalue, &pregister->lvdsloc4);
171 void nx_lvds_set_lvdsloc5(u32 module_index, u32 regvalue)
173 register struct nx_lvds_register_set *pregister;
175 pregister = __g_pregister[module_index];
176 writel(regvalue, &pregister->lvdsloc5);
179 void nx_lvds_set_lvdsloc6(u32 module_index, u32 regvalue)
181 register struct nx_lvds_register_set *pregister;
183 pregister = __g_pregister[module_index];
184 writel(regvalue, &pregister->lvdsloc6);
187 void nx_lvds_set_lvdslocmask0(u32 module_index, u32 regvalue)
189 register struct nx_lvds_register_set *pregister;
191 pregister = __g_pregister[module_index];
192 writel(regvalue, &pregister->lvdslocmask0);
195 void nx_lvds_set_lvdslocmask1(u32 module_index, u32 regvalue)
197 register struct nx_lvds_register_set *pregister;
199 pregister = __g_pregister[module_index];
200 writel(regvalue, &pregister->lvdslocmask1);
203 void nx_lvds_set_lvdslocpol0(u32 module_index, u32 regvalue)
205 register struct nx_lvds_register_set *pregister;
207 pregister = __g_pregister[module_index];
208 writel(regvalue, &pregister->lvdslocpol0);
211 void nx_lvds_set_lvdslocpol1(u32 module_index, u32 regvalue)
213 register struct nx_lvds_register_set *pregister;
215 pregister = __g_pregister[module_index];
216 writel(regvalue, &pregister->lvdslocpol1);
219 void nx_lvds_set_lvdsdummy(u32 module_index, u32 regvalue)
221 register struct nx_lvds_register_set *pregister;
224 pregister = __g_pregister[module_index];
225 oldvalue = readl(&pregister->lvdsctrl1) & 0x00ffffff;
226 writel(oldvalue | ((regvalue & 0xff) << 24), &pregister->lvdsctrl1);
229 u32 nx_lvds_get_lvdsdummy(u32 module_index)
231 register struct nx_lvds_register_set *pregister;
234 pregister = __g_pregister[module_index];
235 oldvalue = readl(&pregister->lvdsctrl1);
236 oldvalue = oldvalue >> 24;
240 u32 nx_lvds_get_lvdsctrl0(u32 module_index)
242 register struct nx_lvds_register_set *pregister;
244 pregister = __g_pregister[module_index];
245 return (u32)readl(&pregister->lvdsctrl0);
248 u32 nx_lvds_get_lvdsctrl1(u32 module_index)
250 register struct nx_lvds_register_set *pregister;
252 pregister = __g_pregister[module_index];
253 return (u32)readl(&pregister->lvdsctrl1);
256 u32 nx_lvds_get_lvdsctrl2(u32 module_index)
258 register struct nx_lvds_register_set *pregister;
260 pregister = __g_pregister[module_index];
261 return (u32)readl(&pregister->lvdsctrl2);
264 u32 nx_lvds_get_lvdsctrl3(u32 module_index)
266 register struct nx_lvds_register_set *pregister;
268 pregister = __g_pregister[module_index];
269 return (u32)readl(&pregister->lvdsctrl3);
272 u32 nx_lvds_get_lvdsctrl4(u32 module_index)
274 register struct nx_lvds_register_set *pregister;
276 pregister = __g_pregister[module_index];
277 return (u32)readl(&pregister->lvdsctrl4);