aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/dss
diff options
context:
space:
mode:
authorMythri P K <mythripk@ti.com>2011-09-08 09:36:18 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2011-09-30 09:16:30 -0400
commit95a8aeb6c56ec80fb847e44328e3b53b9934dcbf (patch)
tree3b17e3f5fb3f3efac1f6ed90abdef0b841752cb1 /drivers/video/omap2/dss
parent8af6ff0107f0720b8fbf4feca7031d3e36c2fa11 (diff)
OMAP4: DSS2: HDMI: HDMI clean up to pass base_address
As the base_address of the HDMI might differ across SoC's, offset of the HDMI logical blocks(PHY, PLL and Core) and base address procured from the platform data are passed dynamically to the functions that modify HDMI IP registers. Signed-off-by: Mythri P K <mythripk@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video/omap2/dss')
-rw-r--r--drivers/video/omap2/dss/hdmi.c501
-rw-r--r--drivers/video/omap2/dss/hdmi.h292
2 files changed, 435 insertions, 358 deletions
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index b8e02e418c6d..bfd113ce3b47 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -43,11 +43,17 @@
43#include "hdmi.h" 43#include "hdmi.h"
44#include "dss_features.h" 44#include "dss_features.h"
45 45
46#define HDMI_WP 0x0
47#define HDMI_CORE_SYS 0x400
48#define HDMI_CORE_AV 0x900
49#define HDMI_PLLCTRL 0x200
50#define HDMI_PHY 0x300
51
46static struct { 52static struct {
47 struct mutex lock; 53 struct mutex lock;
48 struct omap_display_platform_data *pdata; 54 struct omap_display_platform_data *pdata;
49 struct platform_device *pdev; 55 struct platform_device *pdev;
50 void __iomem *base_wp; /* HDMI wrapper */ 56 struct hdmi_ip_data ip_data;
51 int code; 57 int code;
52 int mode; 58 int mode;
53 u8 edid[HDMI_EDID_MAX_LENGTH]; 59 u8 edid[HDMI_EDID_MAX_LENGTH];
@@ -145,21 +151,49 @@ static const int code_vesa[85] = {
145 151
146static const u8 edid_header[8] = {0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0}; 152static const u8 edid_header[8] = {0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0};
147 153
148static inline void hdmi_write_reg(const struct hdmi_reg idx, u32 val) 154static inline void hdmi_write_reg(void __iomem *base_addr,
155 const struct hdmi_reg idx, u32 val)
156{
157 __raw_writel(val, base_addr + idx.idx);
158}
159
160static inline u32 hdmi_read_reg(void __iomem *base_addr,
161 const struct hdmi_reg idx)
162{
163 return __raw_readl(base_addr + idx.idx);
164}
165
166static inline void __iomem *hdmi_wp_base(struct hdmi_ip_data *ip_data)
167{
168 return ip_data->base_wp;
169}
170
171static inline void __iomem *hdmi_phy_base(struct hdmi_ip_data *ip_data)
149{ 172{
150 __raw_writel(val, hdmi.base_wp + idx.idx); 173 return ip_data->base_wp + ip_data->phy_offset;
151} 174}
152 175
153static inline u32 hdmi_read_reg(const struct hdmi_reg idx) 176static inline void __iomem *hdmi_pll_base(struct hdmi_ip_data *ip_data)
154{ 177{
155 return __raw_readl(hdmi.base_wp + idx.idx); 178 return ip_data->base_wp + ip_data->pll_offset;
156} 179}
157 180
158static inline int hdmi_wait_for_bit_change(const struct hdmi_reg idx, 181static inline void __iomem *hdmi_av_base(struct hdmi_ip_data *ip_data)
182{
183 return ip_data->base_wp + ip_data->core_av_offset;
184}
185
186static inline void __iomem *hdmi_core_sys_base(struct hdmi_ip_data *ip_data)
187{
188 return ip_data->base_wp + ip_data->core_sys_offset;
189}
190
191static inline int hdmi_wait_for_bit_change(void __iomem *base_addr,
192 const struct hdmi_reg idx,
159 int b2, int b1, u32 val) 193 int b2, int b1, u32 val)
160{ 194{
161 u32 t = 0; 195 u32 t = 0;
162 while (val != REG_GET(idx, b2, b1)) { 196 while (val != REG_GET(base_addr, idx, b2, b1)) {
163 udelay(1); 197 udelay(1);
164 if (t++ > 10000) 198 if (t++ > 10000)
165 return !val; 199 return !val;
@@ -195,21 +229,23 @@ int hdmi_init_display(struct omap_dss_device *dssdev)
195 return 0; 229 return 0;
196} 230}
197 231
198static int hdmi_pll_init(enum hdmi_clk_refsel refsel, int dcofreq, 232static int hdmi_pll_init(struct hdmi_ip_data *ip_data,
233 enum hdmi_clk_refsel refsel, int dcofreq,
199 struct hdmi_pll_info *fmt, u16 sd) 234 struct hdmi_pll_info *fmt, u16 sd)
200{ 235{
201 u32 r; 236 u32 r;
237 void __iomem *pll_base = hdmi_pll_base(ip_data);
202 238
203 /* PLL start always use manual mode */ 239 /* PLL start always use manual mode */
204 REG_FLD_MOD(PLLCTRL_PLL_CONTROL, 0x0, 0, 0); 240 REG_FLD_MOD(pll_base, PLLCTRL_PLL_CONTROL, 0x0, 0, 0);
205 241
206 r = hdmi_read_reg(PLLCTRL_CFG1); 242 r = hdmi_read_reg(pll_base, PLLCTRL_CFG1);
207 r = FLD_MOD(r, fmt->regm, 20, 9); /* CFG1_PLL_REGM */ 243 r = FLD_MOD(r, fmt->regm, 20, 9); /* CFG1_PLL_REGM */
208 r = FLD_MOD(r, fmt->regn, 8, 1); /* CFG1_PLL_REGN */ 244 r = FLD_MOD(r, fmt->regn, 8, 1); /* CFG1_PLL_REGN */
209 245
210 hdmi_write_reg(PLLCTRL_CFG1, r); 246 hdmi_write_reg(pll_base, PLLCTRL_CFG1, r);
211 247
212 r = hdmi_read_reg(PLLCTRL_CFG2); 248 r = hdmi_read_reg(pll_base, PLLCTRL_CFG2);
213 249
214 r = FLD_MOD(r, 0x0, 12, 12); /* PLL_HIGHFREQ divide by 2 */ 250 r = FLD_MOD(r, 0x0, 12, 12); /* PLL_HIGHFREQ divide by 2 */
215 r = FLD_MOD(r, 0x1, 13, 13); /* PLL_REFEN */ 251 r = FLD_MOD(r, 0x1, 13, 13); /* PLL_REFEN */
@@ -217,38 +253,40 @@ static int hdmi_pll_init(enum hdmi_clk_refsel refsel, int dcofreq,
217 253
218 if (dcofreq) { 254 if (dcofreq) {
219 /* divider programming for frequency beyond 1000Mhz */ 255 /* divider programming for frequency beyond 1000Mhz */
220 REG_FLD_MOD(PLLCTRL_CFG3, sd, 17, 10); 256 REG_FLD_MOD(pll_base, PLLCTRL_CFG3, sd, 17, 10);
221 r = FLD_MOD(r, 0x4, 3, 1); /* 1000MHz and 2000MHz */ 257 r = FLD_MOD(r, 0x4, 3, 1); /* 1000MHz and 2000MHz */
222 } else { 258 } else {
223 r = FLD_MOD(r, 0x2, 3, 1); /* 500MHz and 1000MHz */ 259 r = FLD_MOD(r, 0x2, 3, 1); /* 500MHz and 1000MHz */
224 } 260 }
225 261
226 hdmi_write_reg(PLLCTRL_CFG2, r); 262 hdmi_write_reg(pll_base, PLLCTRL_CFG2, r);
227 263
228 r = hdmi_read_reg(PLLCTRL_CFG4); 264 r = hdmi_read_reg(pll_base, PLLCTRL_CFG4);
229 r = FLD_MOD(r, fmt->regm2, 24, 18); 265 r = FLD_MOD(r, fmt->regm2, 24, 18);
230 r = FLD_MOD(r, fmt->regmf, 17, 0); 266 r = FLD_MOD(r, fmt->regmf, 17, 0);
231 267
232 hdmi_write_reg(PLLCTRL_CFG4, r); 268 hdmi_write_reg(pll_base, PLLCTRL_CFG4, r);
233 269
234 /* go now */ 270 /* go now */
235 REG_FLD_MOD(PLLCTRL_PLL_GO, 0x1, 0, 0); 271 REG_FLD_MOD(pll_base, PLLCTRL_PLL_GO, 0x1, 0, 0);
236 272
237 /* wait for bit change */ 273 /* wait for bit change */
238 if (hdmi_wait_for_bit_change(PLLCTRL_PLL_GO, 0, 0, 1) != 1) { 274 if (hdmi_wait_for_bit_change(pll_base, PLLCTRL_PLL_GO,
275 0, 0, 1) != 1) {
239 DSSERR("PLL GO bit not set\n"); 276 DSSERR("PLL GO bit not set\n");
240 return -ETIMEDOUT; 277 return -ETIMEDOUT;
241 } 278 }
242 279
243 /* Wait till the lock bit is set in PLL status */ 280 /* Wait till the lock bit is set in PLL status */
244 if (hdmi_wait_for_bit_change(PLLCTRL_PLL_STATUS, 1, 1, 1) != 1) { 281 if (hdmi_wait_for_bit_change(pll_base,
282 PLLCTRL_PLL_STATUS, 1, 1, 1) != 1) {
245 DSSWARN("cannot lock PLL\n"); 283 DSSWARN("cannot lock PLL\n");
246 DSSWARN("CFG1 0x%x\n", 284 DSSWARN("CFG1 0x%x\n",
247 hdmi_read_reg(PLLCTRL_CFG1)); 285 hdmi_read_reg(pll_base, PLLCTRL_CFG1));
248 DSSWARN("CFG2 0x%x\n", 286 DSSWARN("CFG2 0x%x\n",
249 hdmi_read_reg(PLLCTRL_CFG2)); 287 hdmi_read_reg(pll_base, PLLCTRL_CFG2));
250 DSSWARN("CFG4 0x%x\n", 288 DSSWARN("CFG4 0x%x\n",
251 hdmi_read_reg(PLLCTRL_CFG4)); 289 hdmi_read_reg(pll_base, PLLCTRL_CFG4));
252 return -ETIMEDOUT; 290 return -ETIMEDOUT;
253 } 291 }
254 292
@@ -258,13 +296,14 @@ static int hdmi_pll_init(enum hdmi_clk_refsel refsel, int dcofreq,
258} 296}
259 297
260/* PHY_PWR_CMD */ 298/* PHY_PWR_CMD */
261static int hdmi_set_phy_pwr(enum hdmi_phy_pwr val) 299static int hdmi_set_phy_pwr(struct hdmi_ip_data *ip_data, enum hdmi_phy_pwr val)
262{ 300{
263 /* Command for power control of HDMI PHY */ 301 /* Command for power control of HDMI PHY */
264 REG_FLD_MOD(HDMI_WP_PWR_CTRL, val, 7, 6); 302 REG_FLD_MOD(hdmi_wp_base(ip_data), HDMI_WP_PWR_CTRL, val, 7, 6);
265 303
266 /* Status of the power control of HDMI PHY */ 304 /* Status of the power control of HDMI PHY */
267 if (hdmi_wait_for_bit_change(HDMI_WP_PWR_CTRL, 5, 4, val) != val) { 305 if (hdmi_wait_for_bit_change(hdmi_wp_base(ip_data),
306 HDMI_WP_PWR_CTRL, 5, 4, val) != val) {
268 DSSERR("Failed to set PHY power mode to %d\n", val); 307 DSSERR("Failed to set PHY power mode to %d\n", val);
269 return -ETIMEDOUT; 308 return -ETIMEDOUT;
270 } 309 }
@@ -273,13 +312,14 @@ static int hdmi_set_phy_pwr(enum hdmi_phy_pwr val)
273} 312}
274 313
275/* PLL_PWR_CMD */ 314/* PLL_PWR_CMD */
276static int hdmi_set_pll_pwr(enum hdmi_pll_pwr val) 315int hdmi_set_pll_pwr(struct hdmi_ip_data *ip_data, enum hdmi_pll_pwr val)
277{ 316{
278 /* Command for power control of HDMI PLL */ 317 /* Command for power control of HDMI PLL */
279 REG_FLD_MOD(HDMI_WP_PWR_CTRL, val, 3, 2); 318 REG_FLD_MOD(hdmi_wp_base(ip_data), HDMI_WP_PWR_CTRL, val, 3, 2);
280 319
281 /* wait till PHY_PWR_STATUS is set */ 320 /* wait till PHY_PWR_STATUS is set */
282 if (hdmi_wait_for_bit_change(HDMI_WP_PWR_CTRL, 1, 0, val) != val) { 321 if (hdmi_wait_for_bit_change(hdmi_wp_base(ip_data), HDMI_WP_PWR_CTRL,
322 1, 0, val) != val) {
283 DSSERR("Failed to set PHY_PWR_STATUS\n"); 323 DSSERR("Failed to set PHY_PWR_STATUS\n");
284 return -ETIMEDOUT; 324 return -ETIMEDOUT;
285 } 325 }
@@ -287,13 +327,14 @@ static int hdmi_set_pll_pwr(enum hdmi_pll_pwr val)
287 return 0; 327 return 0;
288} 328}
289 329
290static int hdmi_pll_reset(void) 330static int hdmi_pll_reset(struct hdmi_ip_data *ip_data)
291{ 331{
292 /* SYSRESET controlled by power FSM */ 332 /* SYSRESET controlled by power FSM */
293 REG_FLD_MOD(PLLCTRL_PLL_CONTROL, 0x0, 3, 3); 333 REG_FLD_MOD(hdmi_pll_base(ip_data), PLLCTRL_PLL_CONTROL, 0x0, 3, 3);
294 334
295 /* READ 0x0 reset is in progress */ 335 /* READ 0x0 reset is in progress */
296 if (hdmi_wait_for_bit_change(PLLCTRL_PLL_STATUS, 0, 0, 1) != 1) { 336 if (hdmi_wait_for_bit_change(hdmi_pll_base(ip_data),
337 PLLCTRL_PLL_STATUS, 0, 0, 1) != 1) {
297 DSSERR("Failed to sysreset PLL\n"); 338 DSSERR("Failed to sysreset PLL\n");
298 return -ETIMEDOUT; 339 return -ETIMEDOUT;
299 } 340 }
@@ -301,15 +342,16 @@ static int hdmi_pll_reset(void)
301 return 0; 342 return 0;
302} 343}
303 344
304static int hdmi_phy_init(void) 345static int hdmi_phy_init(struct hdmi_ip_data *ip_data)
305{ 346{
306 u16 r = 0; 347 u16 r = 0;
348 void __iomem *phy_base = hdmi_phy_base(ip_data);
307 349
308 r = hdmi_set_phy_pwr(HDMI_PHYPWRCMD_LDOON); 350 r = hdmi_set_phy_pwr(ip_data, HDMI_PHYPWRCMD_LDOON);
309 if (r) 351 if (r)
310 return r; 352 return r;
311 353
312 r = hdmi_set_phy_pwr(HDMI_PHYPWRCMD_TXON); 354 r = hdmi_set_phy_pwr(ip_data, HDMI_PHYPWRCMD_TXON);
313 if (r) 355 if (r)
314 return r; 356 return r;
315 357
@@ -317,65 +359,68 @@ static int hdmi_phy_init(void)
317 * Read address 0 in order to get the SCP reset done completed 359 * Read address 0 in order to get the SCP reset done completed
318 * Dummy access performed to make sure reset is done 360 * Dummy access performed to make sure reset is done
319 */ 361 */
320 hdmi_read_reg(HDMI_TXPHY_TX_CTRL); 362 hdmi_read_reg(phy_base, HDMI_TXPHY_TX_CTRL);
321 363
322 /* 364 /*
323 * Write to phy address 0 to configure the clock 365 * Write to phy address 0 to configure the clock
324 * use HFBITCLK write HDMI_TXPHY_TX_CONTROL_FREQOUT field 366 * use HFBITCLK write HDMI_TXPHY_TX_CONTROL_FREQOUT field
325 */ 367 */
326 REG_FLD_MOD(HDMI_TXPHY_TX_CTRL, 0x1, 31, 30); 368 REG_FLD_MOD(phy_base, HDMI_TXPHY_TX_CTRL, 0x1, 31, 30);
327 369
328 /* Write to phy address 1 to start HDMI line (TXVALID and TMDSCLKEN) */ 370 /* Write to phy address 1 to start HDMI line (TXVALID and TMDSCLKEN) */
329 hdmi_write_reg(HDMI_TXPHY_DIGITAL_CTRL, 0xF0000000); 371 hdmi_write_reg(phy_base, HDMI_TXPHY_DIGITAL_CTRL, 0xF0000000);
330 372
331 /* Setup max LDO voltage */ 373 /* Setup max LDO voltage */
332 REG_FLD_MOD(HDMI_TXPHY_POWER_CTRL, 0xB, 3, 0); 374 REG_FLD_MOD(phy_base, HDMI_TXPHY_POWER_CTRL, 0xB, 3, 0);
333 375
334 /* Write to phy address 3 to change the polarity control */ 376 /* Write to phy address 3 to change the polarity control */
335 REG_FLD_MOD(HDMI_TXPHY_PAD_CFG_CTRL, 0x1, 27, 27); 377 REG_FLD_MOD(phy_base, HDMI_TXPHY_PAD_CFG_CTRL, 0x1, 27, 27);
336 378
337 return 0; 379 return 0;
338} 380}
339 381
340static int hdmi_pll_program(struct hdmi_pll_info *fmt) 382static int hdmi_pll_program(struct hdmi_ip_data *ip_data,
383 struct hdmi_pll_info *fmt)
341{ 384{
342 u16 r = 0; 385 u16 r = 0;
343 enum hdmi_clk_refsel refsel; 386 enum hdmi_clk_refsel refsel;
344 387
345 r = hdmi_set_pll_pwr(HDMI_PLLPWRCMD_ALLOFF); 388 r = hdmi_set_pll_pwr(ip_data, HDMI_PLLPWRCMD_ALLOFF);
346 if (r) 389 if (r)
347 return r; 390 return r;
348 391
349 r = hdmi_set_pll_pwr(HDMI_PLLPWRCMD_BOTHON_ALLCLKS); 392 r = hdmi_set_pll_pwr(ip_data, HDMI_PLLPWRCMD_BOTHON_ALLCLKS);
350 if (r) 393 if (r)
351 return r; 394 return r;
352 395
353 r = hdmi_pll_reset(); 396 r = hdmi_pll_reset(ip_data);
354 if (r) 397 if (r)
355 return r; 398 return r;
356 399
357 refsel = HDMI_REFSEL_SYSCLK; 400 refsel = HDMI_REFSEL_SYSCLK;
358 401
359 r = hdmi_pll_init(refsel, fmt->dcofreq, fmt, fmt->regsd); 402 r = hdmi_pll_init(ip_data, refsel, fmt->dcofreq, fmt, fmt->regsd);
360 if (r) 403 if (r)
361 return r; 404 return r;
362 405
363 return 0; 406 return 0;
364} 407}
365 408
366static void hdmi_phy_off(void) 409static void hdmi_phy_off(struct hdmi_ip_data *ip_data)
367{ 410{
368 hdmi_set_phy_pwr(HDMI_PHYPWRCMD_OFF); 411 hdmi_set_phy_pwr(ip_data, HDMI_PHYPWRCMD_OFF);
369} 412}
370 413
371static int hdmi_core_ddc_edid(u8 *pedid, int ext) 414static int hdmi_core_ddc_edid(struct hdmi_ip_data *ip_data,
415 u8 *pedid, int ext)
372{ 416{
373 u32 i, j; 417 u32 i, j;
374 char checksum = 0; 418 char checksum = 0;
375 u32 offset = 0; 419 u32 offset = 0;
420 void __iomem *core_sys_base = hdmi_core_sys_base(ip_data);
376 421
377 /* Turn on CLK for DDC */ 422 /* Turn on CLK for DDC */
378 REG_FLD_MOD(HDMI_CORE_AV_DPD, 0x7, 2, 0); 423 REG_FLD_MOD(hdmi_av_base(ip_data), HDMI_CORE_AV_DPD, 0x7, 2, 0);
379 424
380 /* 425 /*
381 * SW HACK : Without the Delay DDC(i2c bus) reads 0 values / 426 * SW HACK : Without the Delay DDC(i2c bus) reads 0 values /
@@ -386,21 +431,21 @@ static int hdmi_core_ddc_edid(u8 *pedid, int ext)
386 431
387 if (!ext) { 432 if (!ext) {
388 /* Clk SCL Devices */ 433 /* Clk SCL Devices */
389 REG_FLD_MOD(HDMI_CORE_DDC_CMD, 0xA, 3, 0); 434 REG_FLD_MOD(core_sys_base, HDMI_CORE_DDC_CMD, 0xA, 3, 0);
390 435
391 /* HDMI_CORE_DDC_STATUS_IN_PROG */ 436 /* HDMI_CORE_DDC_STATUS_IN_PROG */
392 if (hdmi_wait_for_bit_change(HDMI_CORE_DDC_STATUS, 437 if (hdmi_wait_for_bit_change(core_sys_base,
393 4, 4, 0) != 0) { 438 HDMI_CORE_DDC_STATUS, 4, 4, 0) != 0) {
394 DSSERR("Failed to program DDC\n"); 439 DSSERR("Failed to program DDC\n");
395 return -ETIMEDOUT; 440 return -ETIMEDOUT;
396 } 441 }
397 442
398 /* Clear FIFO */ 443 /* Clear FIFO */
399 REG_FLD_MOD(HDMI_CORE_DDC_CMD, 0x9, 3, 0); 444 REG_FLD_MOD(core_sys_base, HDMI_CORE_DDC_CMD, 0x9, 3, 0);
400 445
401 /* HDMI_CORE_DDC_STATUS_IN_PROG */ 446 /* HDMI_CORE_DDC_STATUS_IN_PROG */
402 if (hdmi_wait_for_bit_change(HDMI_CORE_DDC_STATUS, 447 if (hdmi_wait_for_bit_change(core_sys_base,
403 4, 4, 0) != 0) { 448 HDMI_CORE_DDC_STATUS, 4, 4, 0) != 0) {
404 DSSERR("Failed to program DDC\n"); 449 DSSERR("Failed to program DDC\n");
405 return -ETIMEDOUT; 450 return -ETIMEDOUT;
406 } 451 }
@@ -411,44 +456,45 @@ static int hdmi_core_ddc_edid(u8 *pedid, int ext)
411 } 456 }
412 457
413 /* Load Segment Address Register */ 458 /* Load Segment Address Register */
414 REG_FLD_MOD(HDMI_CORE_DDC_SEGM, ext/2, 7, 0); 459 REG_FLD_MOD(core_sys_base, HDMI_CORE_DDC_SEGM, ext/2, 7, 0);
415 460
416 /* Load Slave Address Register */ 461 /* Load Slave Address Register */
417 REG_FLD_MOD(HDMI_CORE_DDC_ADDR, 0xA0 >> 1, 7, 1); 462 REG_FLD_MOD(core_sys_base, HDMI_CORE_DDC_ADDR, 0xA0 >> 1, 7, 1);
418 463
419 /* Load Offset Address Register */ 464 /* Load Offset Address Register */
420 REG_FLD_MOD(HDMI_CORE_DDC_OFFSET, offset, 7, 0); 465 REG_FLD_MOD(core_sys_base, HDMI_CORE_DDC_OFFSET, offset, 7, 0);
421 466
422 /* Load Byte Count */ 467 /* Load Byte Count */
423 REG_FLD_MOD(HDMI_CORE_DDC_COUNT1, 0x80, 7, 0); 468 REG_FLD_MOD(core_sys_base, HDMI_CORE_DDC_COUNT1, 0x80, 7, 0);
424 REG_FLD_MOD(HDMI_CORE_DDC_COUNT2, 0x0, 1, 0); 469 REG_FLD_MOD(core_sys_base, HDMI_CORE_DDC_COUNT2, 0x0, 1, 0);
425 470
426 /* Set DDC_CMD */ 471 /* Set DDC_CMD */
427 if (ext) 472 if (ext)
428 REG_FLD_MOD(HDMI_CORE_DDC_CMD, 0x4, 3, 0); 473 REG_FLD_MOD(core_sys_base, HDMI_CORE_DDC_CMD, 0x4, 3, 0);
429 else 474 else
430 REG_FLD_MOD(HDMI_CORE_DDC_CMD, 0x2, 3, 0); 475 REG_FLD_MOD(core_sys_base, HDMI_CORE_DDC_CMD, 0x2, 3, 0);
431 476
432 /* HDMI_CORE_DDC_STATUS_BUS_LOW */ 477 /* HDMI_CORE_DDC_STATUS_BUS_LOW */
433 if (REG_GET(HDMI_CORE_DDC_STATUS, 6, 6) == 1) { 478 if (REG_GET(core_sys_base, HDMI_CORE_DDC_STATUS, 6, 6) == 1) {
434 DSSWARN("I2C Bus Low?\n"); 479 DSSWARN("I2C Bus Low?\n");
435 return -EIO; 480 return -EIO;
436 } 481 }
437 /* HDMI_CORE_DDC_STATUS_NO_ACK */ 482 /* HDMI_CORE_DDC_STATUS_NO_ACK */
438 if (REG_GET(HDMI_CORE_DDC_STATUS, 5, 5) == 1) { 483 if (REG_GET(core_sys_base, HDMI_CORE_DDC_STATUS, 5, 5) == 1) {
439 DSSWARN("I2C No Ack\n"); 484 DSSWARN("I2C No Ack\n");
440 return -EIO; 485 return -EIO;
441 } 486 }
442 487
443 i = ext * 128; 488 i = ext * 128;
444 j = 0; 489 j = 0;
445 while (((REG_GET(HDMI_CORE_DDC_STATUS, 4, 4) == 1) || 490 while (((REG_GET(core_sys_base, HDMI_CORE_DDC_STATUS, 4, 4) == 1) ||
446 (REG_GET(HDMI_CORE_DDC_STATUS, 2, 2) == 0)) && 491 (REG_GET(core_sys_base,
447 j < 128) { 492 HDMI_CORE_DDC_STATUS, 2, 2) == 0)) && j < 128) {
448 493
449 if (REG_GET(HDMI_CORE_DDC_STATUS, 2, 2) == 0) { 494 if (REG_GET(core_sys_base, HDMI_CORE_DDC_STATUS, 2, 2) == 0) {
450 /* FIFO not empty */ 495 /* FIFO not empty */
451 pedid[i++] = REG_GET(HDMI_CORE_DDC_DATA, 7, 0); 496 pedid[i++] = REG_GET(core_sys_base,
497 HDMI_CORE_DDC_DATA, 7, 0);
452 j++; 498 j++;
453 } 499 }
454 } 500 }
@@ -464,12 +510,12 @@ static int hdmi_core_ddc_edid(u8 *pedid, int ext)
464 return 0; 510 return 0;
465} 511}
466 512
467static int read_edid(u8 *pedid, u16 max_length) 513static int read_edid(struct hdmi_ip_data *ip_data, u8 *pedid, u16 max_length)
468{ 514{
469 int r = 0, n = 0, i = 0; 515 int r = 0, n = 0, i = 0;
470 int max_ext_blocks = (max_length / 128) - 1; 516 int max_ext_blocks = (max_length / 128) - 1;
471 517
472 r = hdmi_core_ddc_edid(pedid, 0); 518 r = hdmi_core_ddc_edid(ip_data, pedid, 0);
473 if (r) { 519 if (r) {
474 return r; 520 return r;
475 } else { 521 } else {
@@ -485,7 +531,7 @@ static int read_edid(u8 *pedid, u16 max_length)
485 n = max_ext_blocks; 531 n = max_ext_blocks;
486 532
487 for (i = 1; i <= n; i++) { 533 for (i = 1; i <= n; i++) {
488 r = hdmi_core_ddc_edid(pedid, i); 534 r = hdmi_core_ddc_edid(ip_data, pedid, i);
489 if (r) 535 if (r)
490 return r; 536 return r;
491 } 537 }
@@ -655,8 +701,8 @@ static void hdmi_read_edid(struct omap_video_timings *dp)
655 memset(hdmi.edid, 0, HDMI_EDID_MAX_LENGTH); 701 memset(hdmi.edid, 0, HDMI_EDID_MAX_LENGTH);
656 702
657 if (!hdmi.edid_set) 703 if (!hdmi.edid_set)
658 ret = read_edid(hdmi.edid, HDMI_EDID_MAX_LENGTH); 704 ret = read_edid(&hdmi.ip_data, hdmi.edid,
659 705 HDMI_EDID_MAX_LENGTH);
660 if (!ret) { 706 if (!ret) {
661 if (!memcmp(hdmi.edid, edid_header, sizeof(edid_header))) { 707 if (!memcmp(hdmi.edid, edid_header, sizeof(edid_header))) {
662 /* search for timings of default resolution */ 708 /* search for timings of default resolution */
@@ -722,41 +768,44 @@ static void hdmi_core_init(struct hdmi_core_video_config *video_cfg,
722 repeat_cfg->generic_pkt_repeat = 0; 768 repeat_cfg->generic_pkt_repeat = 0;
723} 769}
724 770
725static void hdmi_core_powerdown_disable(void) 771static void hdmi_core_powerdown_disable(struct hdmi_ip_data *ip_data)
726{ 772{
727 DSSDBG("Enter hdmi_core_powerdown_disable\n"); 773 DSSDBG("Enter hdmi_core_powerdown_disable\n");
728 REG_FLD_MOD(HDMI_CORE_CTRL1, 0x0, 0, 0); 774 REG_FLD_MOD(hdmi_core_sys_base(ip_data), HDMI_CORE_CTRL1, 0x0, 0, 0);
729} 775}
730 776
731static void hdmi_core_swreset_release(void) 777static void hdmi_core_swreset_release(struct hdmi_ip_data *ip_data)
732{ 778{
733 DSSDBG("Enter hdmi_core_swreset_release\n"); 779 DSSDBG("Enter hdmi_core_swreset_release\n");
734 REG_FLD_MOD(HDMI_CORE_SYS_SRST, 0x0, 0, 0); 780 REG_FLD_MOD(hdmi_core_sys_base(ip_data), HDMI_CORE_SYS_SRST, 0x0, 0, 0);
735} 781}
736 782
737static void hdmi_core_swreset_assert(void) 783static void hdmi_core_swreset_assert(struct hdmi_ip_data *ip_data)
738{ 784{
739 DSSDBG("Enter hdmi_core_swreset_assert\n"); 785 DSSDBG("Enter hdmi_core_swreset_assert\n");
740 REG_FLD_MOD(HDMI_CORE_SYS_SRST, 0x1, 0, 0); 786 REG_FLD_MOD(hdmi_core_sys_base(ip_data), HDMI_CORE_SYS_SRST, 0x1, 0, 0);
741} 787}
742 788
743/* DSS_HDMI_CORE_VIDEO_CONFIG */ 789/* HDMI_CORE_VIDEO_CONFIG */
744static void hdmi_core_video_config(struct hdmi_core_video_config *cfg) 790static void hdmi_core_video_config(struct hdmi_ip_data *ip_data,
791 struct hdmi_core_video_config *cfg)
745{ 792{
746 u32 r = 0; 793 u32 r = 0;
794 void __iomem *core_sys_base = hdmi_core_sys_base(ip_data);
747 795
748 /* sys_ctrl1 default configuration not tunable */ 796 /* sys_ctrl1 default configuration not tunable */
749 r = hdmi_read_reg(HDMI_CORE_CTRL1); 797 r = hdmi_read_reg(core_sys_base, HDMI_CORE_CTRL1);
750 r = FLD_MOD(r, HDMI_CORE_CTRL1_VEN_FOLLOWVSYNC, 5, 5); 798 r = FLD_MOD(r, HDMI_CORE_CTRL1_VEN_FOLLOWVSYNC, 5, 5);
751 r = FLD_MOD(r, HDMI_CORE_CTRL1_HEN_FOLLOWHSYNC, 4, 4); 799 r = FLD_MOD(r, HDMI_CORE_CTRL1_HEN_FOLLOWHSYNC, 4, 4);
752 r = FLD_MOD(r, HDMI_CORE_CTRL1_BSEL_24BITBUS, 2, 2); 800 r = FLD_MOD(r, HDMI_CORE_CTRL1_BSEL_24BITBUS, 2, 2);
753 r = FLD_MOD(r, HDMI_CORE_CTRL1_EDGE_RISINGEDGE, 1, 1); 801 r = FLD_MOD(r, HDMI_CORE_CTRL1_EDGE_RISINGEDGE, 1, 1);
754 hdmi_write_reg(HDMI_CORE_CTRL1, r); 802 hdmi_write_reg(core_sys_base, HDMI_CORE_CTRL1, r);
755 803
756 REG_FLD_MOD(HDMI_CORE_SYS_VID_ACEN, cfg->ip_bus_width, 7, 6); 804 REG_FLD_MOD(core_sys_base,
805 HDMI_CORE_SYS_VID_ACEN, cfg->ip_bus_width, 7, 6);
757 806
758 /* Vid_Mode */ 807 /* Vid_Mode */
759 r = hdmi_read_reg(HDMI_CORE_SYS_VID_MODE); 808 r = hdmi_read_reg(core_sys_base, HDMI_CORE_SYS_VID_MODE);
760 809
761 /* dither truncation configuration */ 810 /* dither truncation configuration */
762 if (cfg->op_dither_truc > HDMI_OUTPUTTRUNCATION_12BIT) { 811 if (cfg->op_dither_truc > HDMI_OUTPUTTRUNCATION_12BIT) {
@@ -766,106 +815,108 @@ static void hdmi_core_video_config(struct hdmi_core_video_config *cfg)
766 r = FLD_MOD(r, cfg->op_dither_truc, 7, 6); 815 r = FLD_MOD(r, cfg->op_dither_truc, 7, 6);
767 r = FLD_MOD(r, 0, 5, 5); 816 r = FLD_MOD(r, 0, 5, 5);
768 } 817 }
769 hdmi_write_reg(HDMI_CORE_SYS_VID_MODE, r); 818 hdmi_write_reg(core_sys_base, HDMI_CORE_SYS_VID_MODE, r);
770 819
771 /* HDMI_Ctrl */ 820 /* HDMI_Ctrl */
772 r = hdmi_read_reg(HDMI_CORE_AV_HDMI_CTRL); 821 r = hdmi_read_reg(hdmi_av_base(ip_data), HDMI_CORE_AV_HDMI_CTRL);
773 r = FLD_MOD(r, cfg->deep_color_pkt, 6, 6); 822 r = FLD_MOD(r, cfg->deep_color_pkt, 6, 6);
774 r = FLD_MOD(r, cfg->pkt_mode, 5, 3); 823 r = FLD_MOD(r, cfg->pkt_mode, 5, 3);
775 r = FLD_MOD(r, cfg->hdmi_dvi, 0, 0); 824 r = FLD_MOD(r, cfg->hdmi_dvi, 0, 0);
776 hdmi_write_reg(HDMI_CORE_AV_HDMI_CTRL, r); 825 hdmi_write_reg(hdmi_av_base(ip_data), HDMI_CORE_AV_HDMI_CTRL, r);
777 826
778 /* TMDS_CTRL */ 827 /* TMDS_CTRL */
779 REG_FLD_MOD(HDMI_CORE_SYS_TMDS_CTRL, 828 REG_FLD_MOD(core_sys_base,
780 cfg->tclk_sel_clkmult, 6, 5); 829 HDMI_CORE_SYS_TMDS_CTRL, cfg->tclk_sel_clkmult, 6, 5);
781} 830}
782 831
783static void hdmi_core_aux_infoframe_avi_config( 832static void hdmi_core_aux_infoframe_avi_config(struct hdmi_ip_data *ip_data,
784 struct hdmi_core_infoframe_avi info_avi) 833 struct hdmi_core_infoframe_avi info_avi)
785{ 834{
786 u32 val; 835 u32 val;
787 char sum = 0, checksum = 0; 836 char sum = 0, checksum = 0;
837 void __iomem *av_base = hdmi_av_base(ip_data);
788 838
789 sum += 0x82 + 0x002 + 0x00D; 839 sum += 0x82 + 0x002 + 0x00D;
790 hdmi_write_reg(HDMI_CORE_AV_AVI_TYPE, 0x082); 840 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_TYPE, 0x082);
791 hdmi_write_reg(HDMI_CORE_AV_AVI_VERS, 0x002); 841 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_VERS, 0x002);
792 hdmi_write_reg(HDMI_CORE_AV_AVI_LEN, 0x00D); 842 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_LEN, 0x00D);
793 843
794 val = (info_avi.db1_format << 5) | 844 val = (info_avi.db1_format << 5) |
795 (info_avi.db1_active_info << 4) | 845 (info_avi.db1_active_info << 4) |
796 (info_avi.db1_bar_info_dv << 2) | 846 (info_avi.db1_bar_info_dv << 2) |
797 (info_avi.db1_scan_info); 847 (info_avi.db1_scan_info);
798 hdmi_write_reg(HDMI_CORE_AV_AVI_DBYTE(0), val); 848 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(0), val);
799 sum += val; 849 sum += val;
800 850
801 val = (info_avi.db2_colorimetry << 6) | 851 val = (info_avi.db2_colorimetry << 6) |
802 (info_avi.db2_aspect_ratio << 4) | 852 (info_avi.db2_aspect_ratio << 4) |
803 (info_avi.db2_active_fmt_ar); 853 (info_avi.db2_active_fmt_ar);
804 hdmi_write_reg(HDMI_CORE_AV_AVI_DBYTE(1), val); 854 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(1), val);
805 sum += val; 855 sum += val;
806 856
807 val = (info_avi.db3_itc << 7) | 857 val = (info_avi.db3_itc << 7) |
808 (info_avi.db3_ec << 4) | 858 (info_avi.db3_ec << 4) |
809 (info_avi.db3_q_range << 2) | 859 (info_avi.db3_q_range << 2) |
810 (info_avi.db3_nup_scaling); 860 (info_avi.db3_nup_scaling);
811 hdmi_write_reg(HDMI_CORE_AV_AVI_DBYTE(2), val); 861 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(2), val);
812 sum += val; 862 sum += val;
813 863
814 hdmi_write_reg(HDMI_CORE_AV_AVI_DBYTE(3), info_avi.db4_videocode); 864 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(3),
865 info_avi.db4_videocode);
815 sum += info_avi.db4_videocode; 866 sum += info_avi.db4_videocode;
816 867
817 val = info_avi.db5_pixel_repeat; 868 val = info_avi.db5_pixel_repeat;
818 hdmi_write_reg(HDMI_CORE_AV_AVI_DBYTE(4), val); 869 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(4), val);
819 sum += val; 870 sum += val;
820 871
821 val = info_avi.db6_7_line_eoftop & 0x00FF; 872 val = info_avi.db6_7_line_eoftop & 0x00FF;
822 hdmi_write_reg(HDMI_CORE_AV_AVI_DBYTE(5), val); 873 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(5), val);
823 sum += val; 874 sum += val;
824 875
825 val = ((info_avi.db6_7_line_eoftop >> 8) & 0x00FF); 876 val = ((info_avi.db6_7_line_eoftop >> 8) & 0x00FF);
826 hdmi_write_reg(HDMI_CORE_AV_AVI_DBYTE(6), val); 877 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(6), val);
827 sum += val; 878 sum += val;
828 879
829 val = info_avi.db8_9_line_sofbottom & 0x00FF; 880 val = info_avi.db8_9_line_sofbottom & 0x00FF;
830 hdmi_write_reg(HDMI_CORE_AV_AVI_DBYTE(7), val); 881 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(7), val);
831 sum += val; 882 sum += val;
832 883
833 val = ((info_avi.db8_9_line_sofbottom >> 8) & 0x00FF); 884 val = ((info_avi.db8_9_line_sofbottom >> 8) & 0x00FF);
834 hdmi_write_reg(HDMI_CORE_AV_AVI_DBYTE(8), val); 885 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(8), val);
835 sum += val; 886 sum += val;
836 887
837 val = info_avi.db10_11_pixel_eofleft & 0x00FF; 888 val = info_avi.db10_11_pixel_eofleft & 0x00FF;
838 hdmi_write_reg(HDMI_CORE_AV_AVI_DBYTE(9), val); 889 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(9), val);
839 sum += val; 890 sum += val;
840 891
841 val = ((info_avi.db10_11_pixel_eofleft >> 8) & 0x00FF); 892 val = ((info_avi.db10_11_pixel_eofleft >> 8) & 0x00FF);
842 hdmi_write_reg(HDMI_CORE_AV_AVI_DBYTE(10), val); 893 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(10), val);
843 sum += val; 894 sum += val;
844 895
845 val = info_avi.db12_13_pixel_sofright & 0x00FF; 896 val = info_avi.db12_13_pixel_sofright & 0x00FF;
846 hdmi_write_reg(HDMI_CORE_AV_AVI_DBYTE(11), val); 897 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(11), val);
847 sum += val; 898 sum += val;
848 899
849 val = ((info_avi.db12_13_pixel_sofright >> 8) & 0x00FF); 900 val = ((info_avi.db12_13_pixel_sofright >> 8) & 0x00FF);
850 hdmi_write_reg(HDMI_CORE_AV_AVI_DBYTE(12), val); 901 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_DBYTE(12), val);
851 sum += val; 902 sum += val;
852 903
853 checksum = 0x100 - sum; 904 checksum = 0x100 - sum;
854 hdmi_write_reg(HDMI_CORE_AV_AVI_CHSUM, checksum); 905 hdmi_write_reg(av_base, HDMI_CORE_AV_AVI_CHSUM, checksum);
855} 906}
856 907
857static void hdmi_core_av_packet_config( 908static void hdmi_core_av_packet_config(struct hdmi_ip_data *ip_data,
858 struct hdmi_core_packet_enable_repeat repeat_cfg) 909 struct hdmi_core_packet_enable_repeat repeat_cfg)
859{ 910{
860 /* enable/repeat the infoframe */ 911 /* enable/repeat the infoframe */
861 hdmi_write_reg(HDMI_CORE_AV_PB_CTRL1, 912 hdmi_write_reg(hdmi_av_base(ip_data), HDMI_CORE_AV_PB_CTRL1,
862 (repeat_cfg.audio_pkt << 5) | 913 (repeat_cfg.audio_pkt << 5) |
863 (repeat_cfg.audio_pkt_repeat << 4) | 914 (repeat_cfg.audio_pkt_repeat << 4) |
864 (repeat_cfg.avi_infoframe << 1) | 915 (repeat_cfg.avi_infoframe << 1) |
865 (repeat_cfg.avi_infoframe_repeat)); 916 (repeat_cfg.avi_infoframe_repeat));
866 917
867 /* enable/repeat the packet */ 918 /* enable/repeat the packet */
868 hdmi_write_reg(HDMI_CORE_AV_PB_CTRL2, 919 hdmi_write_reg(hdmi_av_base(ip_data), HDMI_CORE_AV_PB_CTRL2,
869 (repeat_cfg.gen_cntrl_pkt << 3) | 920 (repeat_cfg.gen_cntrl_pkt << 3) |
870 (repeat_cfg.gen_cntrl_pkt_repeat << 2) | 921 (repeat_cfg.gen_cntrl_pkt_repeat << 2) |
871 (repeat_cfg.generic_pkt << 1) | 922 (repeat_cfg.generic_pkt << 1) |
@@ -897,9 +948,9 @@ static void hdmi_wp_init(struct omap_video_timings *timings,
897 948
898} 949}
899 950
900static void hdmi_wp_video_start(bool start) 951static void hdmi_wp_video_start(struct hdmi_ip_data *ip_data, bool start)
901{ 952{
902 REG_FLD_MOD(HDMI_WP_VIDEO_CFG, start, 31, 31); 953 REG_FLD_MOD(hdmi_wp_base(ip_data), HDMI_WP_VIDEO_CFG, start, 31, 31);
903} 954}
904 955
905static void hdmi_wp_video_init_format(struct hdmi_video_format *video_fmt, 956static void hdmi_wp_video_init_format(struct hdmi_video_format *video_fmt,
@@ -918,33 +969,34 @@ static void hdmi_wp_video_init_format(struct hdmi_video_format *video_fmt,
918 timings->vsw = param->timings.timings.vsw; 969 timings->vsw = param->timings.timings.vsw;
919} 970}
920 971
921static void hdmi_wp_video_config_format( 972static void hdmi_wp_video_config_format(struct hdmi_ip_data *ip_data,
922 struct hdmi_video_format *video_fmt) 973 struct hdmi_video_format *video_fmt)
923{ 974{
924 u32 l = 0; 975 u32 l = 0;
925 976
926 REG_FLD_MOD(HDMI_WP_VIDEO_CFG, video_fmt->packing_mode, 10, 8); 977 REG_FLD_MOD(hdmi_wp_base(ip_data), HDMI_WP_VIDEO_CFG,
978 video_fmt->packing_mode, 10, 8);
927 979
928 l |= FLD_VAL(video_fmt->y_res, 31, 16); 980 l |= FLD_VAL(video_fmt->y_res, 31, 16);
929 l |= FLD_VAL(video_fmt->x_res, 15, 0); 981 l |= FLD_VAL(video_fmt->x_res, 15, 0);
930 hdmi_write_reg(HDMI_WP_VIDEO_SIZE, l); 982 hdmi_write_reg(hdmi_wp_base(ip_data), HDMI_WP_VIDEO_SIZE, l);
931} 983}
932 984
933static void hdmi_wp_video_config_interface( 985static void hdmi_wp_video_config_interface(struct hdmi_ip_data *ip_data,
934 struct hdmi_video_interface *video_int) 986 struct hdmi_video_interface *video_int)
935{ 987{
936 u32 r; 988 u32 r;
937 DSSDBG("Enter hdmi_wp_video_config_interface\n"); 989 DSSDBG("Enter hdmi_wp_video_config_interface\n");
938 990
939 r = hdmi_read_reg(HDMI_WP_VIDEO_CFG); 991 r = hdmi_read_reg(hdmi_wp_base(ip_data), HDMI_WP_VIDEO_CFG);
940 r = FLD_MOD(r, video_int->vsp, 7, 7); 992 r = FLD_MOD(r, video_int->vsp, 7, 7);
941 r = FLD_MOD(r, video_int->hsp, 6, 6); 993 r = FLD_MOD(r, video_int->hsp, 6, 6);
942 r = FLD_MOD(r, video_int->interlacing, 3, 3); 994 r = FLD_MOD(r, video_int->interlacing, 3, 3);
943 r = FLD_MOD(r, video_int->tm, 1, 0); 995 r = FLD_MOD(r, video_int->tm, 1, 0);
944 hdmi_write_reg(HDMI_WP_VIDEO_CFG, r); 996 hdmi_write_reg(hdmi_wp_base(ip_data), HDMI_WP_VIDEO_CFG, r);
945} 997}
946 998
947static void hdmi_wp_video_config_timing( 999static void hdmi_wp_video_config_timing(struct hdmi_ip_data *ip_data,
948 struct omap_video_timings *timings) 1000 struct omap_video_timings *timings)
949{ 1001{
950 u32 timing_h = 0; 1002 u32 timing_h = 0;
@@ -955,15 +1007,16 @@ static void hdmi_wp_video_config_timing(
955 timing_h |= FLD_VAL(timings->hbp, 31, 20); 1007 timing_h |= FLD_VAL(timings->hbp, 31, 20);
956 timing_h |= FLD_VAL(timings->hfp, 19, 8); 1008 timing_h |= FLD_VAL(timings->hfp, 19, 8);
957 timing_h |= FLD_VAL(timings->hsw, 7, 0); 1009 timing_h |= FLD_VAL(timings->hsw, 7, 0);
958 hdmi_write_reg(HDMI_WP_VIDEO_TIMING_H, timing_h); 1010 hdmi_write_reg(hdmi_wp_base(ip_data), HDMI_WP_VIDEO_TIMING_H, timing_h);
959 1011
960 timing_v |= FLD_VAL(timings->vbp, 31, 20); 1012 timing_v |= FLD_VAL(timings->vbp, 31, 20);
961 timing_v |= FLD_VAL(timings->vfp, 19, 8); 1013 timing_v |= FLD_VAL(timings->vfp, 19, 8);
962 timing_v |= FLD_VAL(timings->vsw, 7, 0); 1014 timing_v |= FLD_VAL(timings->vsw, 7, 0);
963 hdmi_write_reg(HDMI_WP_VIDEO_TIMING_V, timing_v); 1015 hdmi_write_reg(hdmi_wp_base(ip_data), HDMI_WP_VIDEO_TIMING_V, timing_v);
964} 1016}
965 1017
966static void hdmi_basic_configure(struct hdmi_config *cfg) 1018static void hdmi_basic_configure(struct hdmi_ip_data *ip_data,
1019 struct hdmi_config *cfg)
967{ 1020{
968 /* HDMI */ 1021 /* HDMI */
969 struct omap_video_timings video_timing; 1022 struct omap_video_timings video_timing;
@@ -984,36 +1037,36 @@ static void hdmi_basic_configure(struct hdmi_config *cfg)
984 hdmi_wp_video_init_format(&video_format, 1037 hdmi_wp_video_init_format(&video_format,
985 &video_timing, cfg); 1038 &video_timing, cfg);
986 1039
987 hdmi_wp_video_config_timing(&video_timing); 1040 hdmi_wp_video_config_timing(ip_data, &video_timing);
988 1041
989 /* video config */ 1042 /* video config */
990 video_format.packing_mode = HDMI_PACK_24b_RGB_YUV444_YUV422; 1043 video_format.packing_mode = HDMI_PACK_24b_RGB_YUV444_YUV422;
991 1044
992 hdmi_wp_video_config_format(&video_format); 1045 hdmi_wp_video_config_format(ip_data, &video_format);
993 1046
994 video_interface.vsp = cfg->timings.vsync_pol; 1047 video_interface.vsp = cfg->timings.vsync_pol;
995 video_interface.hsp = cfg->timings.hsync_pol; 1048 video_interface.hsp = cfg->timings.hsync_pol;
996 video_interface.interlacing = cfg->interlace; 1049 video_interface.interlacing = cfg->interlace;
997 video_interface.tm = 1 ; /* HDMI_TIMING_MASTER_24BIT */ 1050 video_interface.tm = 1 ; /* HDMI_TIMING_MASTER_24BIT */
998 1051
999 hdmi_wp_video_config_interface(&video_interface); 1052 hdmi_wp_video_config_interface(ip_data, &video_interface);
1000 1053
1001 /* 1054 /*
1002 * configure core video part 1055 * configure core video part
1003 * set software reset in the core 1056 * set software reset in the core
1004 */ 1057 */
1005 hdmi_core_swreset_assert(); 1058 hdmi_core_swreset_assert(ip_data);
1006 1059
1007 /* power down off */ 1060 /* power down off */
1008 hdmi_core_powerdown_disable(); 1061 hdmi_core_powerdown_disable(ip_data);
1009 1062
1010 v_core_cfg.pkt_mode = HDMI_PACKETMODE24BITPERPIXEL; 1063 v_core_cfg.pkt_mode = HDMI_PACKETMODE24BITPERPIXEL;
1011 v_core_cfg.hdmi_dvi = cfg->cm.mode; 1064 v_core_cfg.hdmi_dvi = cfg->cm.mode;
1012 1065
1013 hdmi_core_video_config(&v_core_cfg); 1066 hdmi_core_video_config(ip_data, &v_core_cfg);
1014 1067
1015 /* release software reset in the core */ 1068 /* release software reset in the core */
1016 hdmi_core_swreset_release(); 1069 hdmi_core_swreset_release(ip_data);
1017 1070
1018 /* 1071 /*
1019 * configure packet 1072 * configure packet
@@ -1038,7 +1091,7 @@ static void hdmi_basic_configure(struct hdmi_config *cfg)
1038 avi_cfg.db10_11_pixel_eofleft = 0; 1091 avi_cfg.db10_11_pixel_eofleft = 0;
1039 avi_cfg.db12_13_pixel_sofright = 0; 1092 avi_cfg.db12_13_pixel_sofright = 0;
1040 1093
1041 hdmi_core_aux_infoframe_avi_config(avi_cfg); 1094 hdmi_core_aux_infoframe_avi_config(ip_data, avi_cfg);
1042 1095
1043 /* enable/repeat the infoframe */ 1096 /* enable/repeat the infoframe */
1044 repeat_cfg.avi_infoframe = HDMI_PACKETENABLE; 1097 repeat_cfg.avi_infoframe = HDMI_PACKETENABLE;
@@ -1046,7 +1099,7 @@ static void hdmi_basic_configure(struct hdmi_config *cfg)
1046 /* wakeup */ 1099 /* wakeup */
1047 repeat_cfg.audio_pkt = HDMI_PACKETENABLE; 1100 repeat_cfg.audio_pkt = HDMI_PACKETENABLE;
1048 repeat_cfg.audio_pkt_repeat = HDMI_PACKETREPEATON; 1101 repeat_cfg.audio_pkt_repeat = HDMI_PACKETREPEATON;
1049 hdmi_core_av_packet_config(repeat_cfg); 1102 hdmi_core_av_packet_config(ip_data, repeat_cfg);
1050} 1103}
1051 1104
1052static void update_hdmi_timings(struct hdmi_config *cfg, 1105static void update_hdmi_timings(struct hdmi_config *cfg,
@@ -1136,16 +1189,16 @@ static int hdmi_power_on(struct omap_dss_device *dssdev)
1136 1189
1137 hdmi_compute_pll(dssdev, phy, &pll_data); 1190 hdmi_compute_pll(dssdev, phy, &pll_data);
1138 1191
1139 hdmi_wp_video_start(0); 1192 hdmi_wp_video_start(&hdmi.ip_data, 0);
1140 1193
1141 /* config the PLL and PHY first */ 1194 /* config the PLL and PHY hdmi_set_pll_pwrfirst */
1142 r = hdmi_pll_program(&pll_data); 1195 r = hdmi_pll_program(&hdmi.ip_data, &pll_data);
1143 if (r) { 1196 if (r) {
1144 DSSDBG("Failed to lock PLL\n"); 1197 DSSDBG("Failed to lock PLL\n");
1145 goto err; 1198 goto err;
1146 } 1199 }
1147 1200
1148 r = hdmi_phy_init(); 1201 r = hdmi_phy_init(&hdmi.ip_data);
1149 if (r) { 1202 if (r) {
1150 DSSDBG("Failed to start PHY\n"); 1203 DSSDBG("Failed to start PHY\n");
1151 goto err; 1204 goto err;
@@ -1153,7 +1206,7 @@ static int hdmi_power_on(struct omap_dss_device *dssdev)
1153 1206
1154 hdmi.cfg.cm.mode = hdmi.mode; 1207 hdmi.cfg.cm.mode = hdmi.mode;
1155 hdmi.cfg.cm.code = hdmi.code; 1208 hdmi.cfg.cm.code = hdmi.code;
1156 hdmi_basic_configure(&hdmi.cfg); 1209 hdmi_basic_configure(&hdmi.ip_data, &hdmi.cfg);
1157 1210
1158 /* Make selection of HDMI in DSS */ 1211 /* Make selection of HDMI in DSS */
1159 dss_select_hdmi_venc_clk_source(DSS_HDMI_M_PCLK); 1212 dss_select_hdmi_venc_clk_source(DSS_HDMI_M_PCLK);
@@ -1175,7 +1228,7 @@ static int hdmi_power_on(struct omap_dss_device *dssdev)
1175 1228
1176 dispc_mgr_enable(OMAP_DSS_CHANNEL_DIGIT, 1); 1229 dispc_mgr_enable(OMAP_DSS_CHANNEL_DIGIT, 1);
1177 1230
1178 hdmi_wp_video_start(1); 1231 hdmi_wp_video_start(&hdmi.ip_data, 1);
1179 1232
1180 return 0; 1233 return 0;
1181err: 1234err:
@@ -1187,9 +1240,9 @@ static void hdmi_power_off(struct omap_dss_device *dssdev)
1187{ 1240{
1188 dispc_mgr_enable(OMAP_DSS_CHANNEL_DIGIT, 0); 1241 dispc_mgr_enable(OMAP_DSS_CHANNEL_DIGIT, 0);
1189 1242
1190 hdmi_wp_video_start(0); 1243 hdmi_wp_video_start(&hdmi.ip_data, 0);
1191 hdmi_phy_off(); 1244 hdmi_phy_off(&hdmi.ip_data);
1192 hdmi_set_pll_pwr(HDMI_PLLPWRCMD_ALLOFF); 1245 hdmi_set_pll_pwr(&hdmi.ip_data, HDMI_PLLPWRCMD_ALLOFF);
1193 hdmi_runtime_put(); 1246 hdmi_runtime_put();
1194 1247
1195 hdmi.edid_set = 0; 1248 hdmi.edid_set = 0;
@@ -1287,14 +1340,14 @@ void omapdss_hdmi_display_disable(struct omap_dss_device *dssdev)
1287 1340
1288#if defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) || \ 1341#if defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) || \
1289 defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI_MODULE) 1342 defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI_MODULE)
1290static void hdmi_wp_audio_config_format( 1343static void hdmi_wp_audio_config_format(struct hdmi_ip_data *ip_data,
1291 struct hdmi_audio_format *aud_fmt) 1344 struct hdmi_audio_format *aud_fmt)
1292{ 1345{
1293 u32 r; 1346 u32 r;
1294 1347
1295 DSSDBG("Enter hdmi_wp_audio_config_format\n"); 1348 DSSDBG("Enter hdmi_wp_audio_config_format\n");
1296 1349
1297 r = hdmi_read_reg(HDMI_WP_AUDIO_CFG); 1350 r = hdmi_read_reg(hdmi_wp_base(ip_data), HDMI_WP_AUDIO_CFG);
1298 r = FLD_MOD(r, aud_fmt->stereo_channels, 26, 24); 1351 r = FLD_MOD(r, aud_fmt->stereo_channels, 26, 24);
1299 r = FLD_MOD(r, aud_fmt->active_chnnls_msk, 23, 16); 1352 r = FLD_MOD(r, aud_fmt->active_chnnls_msk, 23, 16);
1300 r = FLD_MOD(r, aud_fmt->en_sig_blk_strt_end, 5, 5); 1353 r = FLD_MOD(r, aud_fmt->en_sig_blk_strt_end, 5, 5);
@@ -1303,68 +1356,76 @@ static void hdmi_wp_audio_config_format(
1303 r = FLD_MOD(r, aud_fmt->sample_order, 2, 2); 1356 r = FLD_MOD(r, aud_fmt->sample_order, 2, 2);
1304 r = FLD_MOD(r, aud_fmt->samples_per_word, 1, 1); 1357 r = FLD_MOD(r, aud_fmt->samples_per_word, 1, 1);
1305 r = FLD_MOD(r, aud_fmt->sample_size, 0, 0); 1358 r = FLD_MOD(r, aud_fmt->sample_size, 0, 0);
1306 hdmi_write_reg(HDMI_WP_AUDIO_CFG, r); 1359 hdmi_write_reg(hdmi_wp_base(ip_data), HDMI_WP_AUDIO_CFG, r);
1307} 1360}
1308 1361
1309static void hdmi_wp_audio_config_dma(struct hdmi_audio_dma *aud_dma) 1362static void hdmi_wp_audio_config_dma(struct hdmi_ip_data *ip_data,
1363 struct hdmi_audio_dma *aud_dma)
1310{ 1364{
1311 u32 r; 1365 u32 r;
1312 1366
1313 DSSDBG("Enter hdmi_wp_audio_config_dma\n"); 1367 DSSDBG("Enter hdmi_wp_audio_config_dma\n");
1314 1368
1315 r = hdmi_read_reg(HDMI_WP_AUDIO_CFG2); 1369 r = hdmi_read_reg(hdmi_wp_base(ip_data), HDMI_WP_AUDIO_CFG2);
1316 r = FLD_MOD(r, aud_dma->transfer_size, 15, 8); 1370 r = FLD_MOD(r, aud_dma->transfer_size, 15, 8);
1317 r = FLD_MOD(r, aud_dma->block_size, 7, 0); 1371 r = FLD_MOD(r, aud_dma->block_size, 7, 0);
1318 hdmi_write_reg(HDMI_WP_AUDIO_CFG2, r); 1372 hdmi_write_reg(hdmi_wp_base(ip_data), HDMI_WP_AUDIO_CFG2, r);
1319 1373
1320 r = hdmi_read_reg(HDMI_WP_AUDIO_CTRL); 1374 r = hdmi_read_reg(hdmi_wp_base(ip_data), HDMI_WP_AUDIO_CTRL);
1321 r = FLD_MOD(r, aud_dma->mode, 9, 9); 1375 r = FLD_MOD(r, aud_dma->mode, 9, 9);
1322 r = FLD_MOD(r, aud_dma->fifo_threshold, 8, 0); 1376 r = FLD_MOD(r, aud_dma->fifo_threshold, 8, 0);
1323 hdmi_write_reg(HDMI_WP_AUDIO_CTRL, r); 1377 hdmi_write_reg(hdmi_wp_base(ip_data), HDMI_WP_AUDIO_CTRL, r);
1324} 1378}
1325 1379
1326static void hdmi_core_audio_config(struct hdmi_core_audio_config *cfg) 1380static void hdmi_core_audio_config(struct hdmi_ip_data *ip_data,
1381 struct hdmi_core_audio_config *cfg)
1327{ 1382{
1328 u32 r; 1383 u32 r;
1384 void __iomem *av_base = hdmi_av_base(ip_data);
1329 1385
1330 /* audio clock recovery parameters */ 1386 /* audio clock recovery parameters */
1331 r = hdmi_read_reg(HDMI_CORE_AV_ACR_CTRL); 1387 r = hdmi_read_reg(av_base, HDMI_CORE_AV_ACR_CTRL);
1332 r = FLD_MOD(r, cfg->use_mclk, 2, 2); 1388 r = FLD_MOD(r, cfg->use_mclk, 2, 2);
1333 r = FLD_MOD(r, cfg->en_acr_pkt, 1, 1); 1389 r = FLD_MOD(r, cfg->en_acr_pkt, 1, 1);
1334 r = FLD_MOD(r, cfg->cts_mode, 0, 0); 1390 r = FLD_MOD(r, cfg->cts_mode, 0, 0);
1335 hdmi_write_reg(HDMI_CORE_AV_ACR_CTRL, r); 1391 hdmi_write_reg(av_base, HDMI_CORE_AV_ACR_CTRL, r);
1336 1392
1337 REG_FLD_MOD(HDMI_CORE_AV_N_SVAL1, cfg->n, 7, 0); 1393 REG_FLD_MOD(av_base, HDMI_CORE_AV_N_SVAL1, cfg->n, 7, 0);
1338 REG_FLD_MOD(HDMI_CORE_AV_N_SVAL2, cfg->n >> 8, 7, 0); 1394 REG_FLD_MOD(av_base, HDMI_CORE_AV_N_SVAL2, cfg->n >> 8, 7, 0);
1339 REG_FLD_MOD(HDMI_CORE_AV_N_SVAL3, cfg->n >> 16, 7, 0); 1395 REG_FLD_MOD(av_base, HDMI_CORE_AV_N_SVAL3, cfg->n >> 16, 7, 0);
1340 1396
1341 if (cfg->cts_mode == HDMI_AUDIO_CTS_MODE_SW) { 1397 if (cfg->cts_mode == HDMI_AUDIO_CTS_MODE_SW) {
1342 REG_FLD_MOD(HDMI_CORE_AV_CTS_SVAL1, cfg->cts, 7, 0); 1398 REG_FLD_MOD(av_base, HDMI_CORE_AV_CTS_SVAL1, cfg->cts, 7, 0);
1343 REG_FLD_MOD(HDMI_CORE_AV_CTS_SVAL2, cfg->cts >> 8, 7, 0); 1399 REG_FLD_MOD(av_base,
1344 REG_FLD_MOD(HDMI_CORE_AV_CTS_SVAL3, cfg->cts >> 16, 7, 0); 1400 HDMI_CORE_AV_CTS_SVAL2, cfg->cts >> 8, 7, 0);
1401 REG_FLD_MOD(av_base,
1402 HDMI_CORE_AV_CTS_SVAL3, cfg->cts >> 16, 7, 0);
1345 } else { 1403 } else {
1346 /* 1404 /*
1347 * HDMI IP uses this configuration to divide the MCLK to 1405 * HDMI IP uses this configuration to divide the MCLK to
1348 * update CTS value. 1406 * update CTS value.
1349 */ 1407 */
1350 REG_FLD_MOD(HDMI_CORE_AV_FREQ_SVAL, cfg->mclk_mode, 2, 0); 1408 REG_FLD_MOD(av_base,
1409 HDMI_CORE_AV_FREQ_SVAL, cfg->mclk_mode, 2, 0);
1351 1410
1352 /* Configure clock for audio packets */ 1411 /* Configure clock for audio packets */
1353 REG_FLD_MOD(HDMI_CORE_AV_AUD_PAR_BUSCLK_1, 1412 REG_FLD_MOD(av_base, HDMI_CORE_AV_AUD_PAR_BUSCLK_1,
1354 cfg->aud_par_busclk, 7, 0); 1413 cfg->aud_par_busclk, 7, 0);
1355 REG_FLD_MOD(HDMI_CORE_AV_AUD_PAR_BUSCLK_2, 1414 REG_FLD_MOD(av_base, HDMI_CORE_AV_AUD_PAR_BUSCLK_2,
1356 (cfg->aud_par_busclk >> 8), 7, 0); 1415 (cfg->aud_par_busclk >> 8), 7, 0);
1357 REG_FLD_MOD(HDMI_CORE_AV_AUD_PAR_BUSCLK_3, 1416 REG_FLD_MOD(av_base, HDMI_CORE_AV_AUD_PAR_BUSCLK_3,
1358 (cfg->aud_par_busclk >> 16), 7, 0); 1417 (cfg->aud_par_busclk >> 16), 7, 0);
1359 } 1418 }
1360 1419
1361 /* Override of SPDIF sample frequency with value in I2S_CHST4 */ 1420 /* Override of SPDIF sample frequency with value in I2S_CHST4 */
1362 REG_FLD_MOD(HDMI_CORE_AV_SPDIF_CTRL, cfg->fs_override, 1, 1); 1421 REG_FLD_MOD(av_base, HDMI_CORE_AV_SPDIF_CTRL,
1422 cfg->fs_override, 1, 1);
1363 1423
1364 /* I2S parameters */ 1424 /* I2S parameters */
1365 REG_FLD_MOD(HDMI_CORE_AV_I2S_CHST4, cfg->freq_sample, 3, 0); 1425 REG_FLD_MOD(av_base, HDMI_CORE_AV_I2S_CHST4,
1426 cfg->freq_sample, 3, 0);
1366 1427
1367 r = hdmi_read_reg(HDMI_CORE_AV_I2S_IN_CTRL); 1428 r = hdmi_read_reg(av_base, HDMI_CORE_AV_I2S_IN_CTRL);
1368 r = FLD_MOD(r, cfg->i2s_cfg.en_high_bitrate_aud, 7, 7); 1429 r = FLD_MOD(r, cfg->i2s_cfg.en_high_bitrate_aud, 7, 7);
1369 r = FLD_MOD(r, cfg->i2s_cfg.sck_edge_mode, 6, 6); 1430 r = FLD_MOD(r, cfg->i2s_cfg.sck_edge_mode, 6, 6);
1370 r = FLD_MOD(r, cfg->i2s_cfg.cbit_order, 5, 5); 1431 r = FLD_MOD(r, cfg->i2s_cfg.cbit_order, 5, 5);
@@ -1373,69 +1434,72 @@ static void hdmi_core_audio_config(struct hdmi_core_audio_config *cfg)
1373 r = FLD_MOD(r, cfg->i2s_cfg.justification, 2, 2); 1434 r = FLD_MOD(r, cfg->i2s_cfg.justification, 2, 2);
1374 r = FLD_MOD(r, cfg->i2s_cfg.direction, 1, 1); 1435 r = FLD_MOD(r, cfg->i2s_cfg.direction, 1, 1);
1375 r = FLD_MOD(r, cfg->i2s_cfg.shift, 0, 0); 1436 r = FLD_MOD(r, cfg->i2s_cfg.shift, 0, 0);
1376 hdmi_write_reg(HDMI_CORE_AV_I2S_IN_CTRL, r); 1437 hdmi_write_reg(av_base, HDMI_CORE_AV_I2S_IN_CTRL, r);
1377 1438
1378 r = hdmi_read_reg(HDMI_CORE_AV_I2S_CHST5); 1439 r = hdmi_read_reg(av_base, HDMI_CORE_AV_I2S_CHST5);
1379 r = FLD_MOD(r, cfg->freq_sample, 7, 4); 1440 r = FLD_MOD(r, cfg->freq_sample, 7, 4);
1380 r = FLD_MOD(r, cfg->i2s_cfg.word_length, 3, 1); 1441 r = FLD_MOD(r, cfg->i2s_cfg.word_length, 3, 1);
1381 r = FLD_MOD(r, cfg->i2s_cfg.word_max_length, 0, 0); 1442 r = FLD_MOD(r, cfg->i2s_cfg.word_max_length, 0, 0);
1382 hdmi_write_reg(HDMI_CORE_AV_I2S_CHST5, r); 1443 hdmi_write_reg(av_base, HDMI_CORE_AV_I2S_CHST5, r);
1383 1444
1384 REG_FLD_MOD(HDMI_CORE_AV_I2S_IN_LEN, cfg->i2s_cfg.in_length_bits, 3, 0); 1445 REG_FLD_MOD(av_base, HDMI_CORE_AV_I2S_IN_LEN,
1446 cfg->i2s_cfg.in_length_bits, 3, 0);
1385 1447
1386 /* Audio channels and mode parameters */ 1448 /* Audio channels and mode parameters */
1387 REG_FLD_MOD(HDMI_CORE_AV_HDMI_CTRL, cfg->layout, 2, 1); 1449 REG_FLD_MOD(av_base, HDMI_CORE_AV_HDMI_CTRL, cfg->layout, 2, 1);
1388 r = hdmi_read_reg(HDMI_CORE_AV_AUD_MODE); 1450 r = hdmi_read_reg(av_base, HDMI_CORE_AV_AUD_MODE);
1389 r = FLD_MOD(r, cfg->i2s_cfg.active_sds, 7, 4); 1451 r = FLD_MOD(r, cfg->i2s_cfg.active_sds, 7, 4);
1390 r = FLD_MOD(r, cfg->en_dsd_audio, 3, 3); 1452 r = FLD_MOD(r, cfg->en_dsd_audio, 3, 3);
1391 r = FLD_MOD(r, cfg->en_parallel_aud_input, 2, 2); 1453 r = FLD_MOD(r, cfg->en_parallel_aud_input, 2, 2);
1392 r = FLD_MOD(r, cfg->en_spdif, 1, 1); 1454 r = FLD_MOD(r, cfg->en_spdif, 1, 1);
1393 hdmi_write_reg(HDMI_CORE_AV_AUD_MODE, r); 1455 hdmi_write_reg(av_base, HDMI_CORE_AV_AUD_MODE, r);
1394} 1456}
1395 1457
1396static void hdmi_core_audio_infoframe_config( 1458static void hdmi_core_audio_infoframe_config(struct hdmi_ip_data *ip_data,
1397 struct hdmi_core_infoframe_audio *info_aud) 1459 struct hdmi_core_infoframe_audio *info_aud)
1398{ 1460{
1399 u8 val; 1461 u8 val;
1400 u8 sum = 0, checksum = 0; 1462 u8 sum = 0, checksum = 0;
1463 void __iomem *av_base = hdmi_av_base(ip_data);
1401 1464
1402 /* 1465 /*
1403 * Set audio info frame type, version and length as 1466 * Set audio info frame type, version and length as
1404 * described in HDMI 1.4a Section 8.2.2 specification. 1467 * described in HDMI 1.4a Section 8.2.2 specification.
1405 * Checksum calculation is defined in Section 5.3.5. 1468 * Checksum calculation is defined in Section 5.3.5.
1406 */ 1469 */
1407 hdmi_write_reg(HDMI_CORE_AV_AUDIO_TYPE, 0x84); 1470 hdmi_write_reg(av_base, HDMI_CORE_AV_AUDIO_TYPE, 0x84);
1408 hdmi_write_reg(HDMI_CORE_AV_AUDIO_VERS, 0x01); 1471 hdmi_write_reg(av_base, HDMI_CORE_AV_AUDIO_VERS, 0x01);
1409 hdmi_write_reg(HDMI_CORE_AV_AUDIO_LEN, 0x0a); 1472 hdmi_write_reg(av_base, HDMI_CORE_AV_AUDIO_LEN, 0x0a);
1410 sum += 0x84 + 0x001 + 0x00a; 1473 sum += 0x84 + 0x001 + 0x00a;
1411 1474
1412 val = (info_aud->db1_coding_type << 4) 1475 val = (info_aud->db1_coding_type << 4)
1413 | (info_aud->db1_channel_count - 1); 1476 | (info_aud->db1_channel_count - 1);
1414 hdmi_write_reg(HDMI_CORE_AV_AUD_DBYTE(0), val); 1477 hdmi_write_reg(av_base, HDMI_CORE_AV_AUD_DBYTE(0), val);
1415 sum += val; 1478 sum += val;
1416 1479
1417 val = (info_aud->db2_sample_freq << 2) | info_aud->db2_sample_size; 1480 val = (info_aud->db2_sample_freq << 2) | info_aud->db2_sample_size;
1418 hdmi_write_reg(HDMI_CORE_AV_AUD_DBYTE(1), val); 1481 hdmi_write_reg(av_base, HDMI_CORE_AV_AUD_DBYTE(1), val);
1419 sum += val; 1482 sum += val;
1420 1483
1421 hdmi_write_reg(HDMI_CORE_AV_AUD_DBYTE(2), 0x00); 1484 hdmi_write_reg(av_base, HDMI_CORE_AV_AUD_DBYTE(2), 0x00);
1422 1485
1423 val = info_aud->db4_channel_alloc; 1486 val = info_aud->db4_channel_alloc;
1424 hdmi_write_reg(HDMI_CORE_AV_AUD_DBYTE(3), val); 1487 hdmi_write_reg(av_base, HDMI_CORE_AV_AUD_DBYTE(3), val);
1425 sum += val; 1488 sum += val;
1426 1489
1427 val = (info_aud->db5_downmix_inh << 7) | (info_aud->db5_lsv << 3); 1490 val = (info_aud->db5_downmix_inh << 7) | (info_aud->db5_lsv << 3);
1428 hdmi_write_reg(HDMI_CORE_AV_AUD_DBYTE(4), val); 1491 hdmi_write_reg(av_base, HDMI_CORE_AV_AUD_DBYTE(4), val);
1429 sum += val; 1492 sum += val;
1430 1493
1431 hdmi_write_reg(HDMI_CORE_AV_AUD_DBYTE(5), 0x00); 1494 hdmi_write_reg(av_base, HDMI_CORE_AV_AUD_DBYTE(5), 0x00);
1432 hdmi_write_reg(HDMI_CORE_AV_AUD_DBYTE(6), 0x00); 1495 hdmi_write_reg(av_base, HDMI_CORE_AV_AUD_DBYTE(6), 0x00);
1433 hdmi_write_reg(HDMI_CORE_AV_AUD_DBYTE(7), 0x00); 1496 hdmi_write_reg(av_base, HDMI_CORE_AV_AUD_DBYTE(7), 0x00);
1434 hdmi_write_reg(HDMI_CORE_AV_AUD_DBYTE(8), 0x00); 1497 hdmi_write_reg(av_base, HDMI_CORE_AV_AUD_DBYTE(8), 0x00);
1435 hdmi_write_reg(HDMI_CORE_AV_AUD_DBYTE(9), 0x00); 1498 hdmi_write_reg(av_base, HDMI_CORE_AV_AUD_DBYTE(9), 0x00);
1436 1499
1437 checksum = 0x100 - sum; 1500 checksum = 0x100 - sum;
1438 hdmi_write_reg(HDMI_CORE_AV_AUDIO_CHSUM, checksum); 1501 hdmi_write_reg(av_base,
1502 HDMI_CORE_AV_AUDIO_CHSUM, checksum);
1439 1503
1440 /* 1504 /*
1441 * TODO: Add MPEG and SPD enable and repeat cfg when EDID parsing 1505 * TODO: Add MPEG and SPD enable and repeat cfg when EDID parsing
@@ -1443,7 +1507,8 @@ static void hdmi_core_audio_infoframe_config(
1443 */ 1507 */
1444} 1508}
1445 1509
1446static int hdmi_config_audio_acr(u32 sample_freq, u32 *n, u32 *cts) 1510static int hdmi_config_audio_acr(struct hdmi_ip_data *ip_data,
1511 u32 sample_freq, u32 *n, u32 *cts)
1447{ 1512{
1448 u32 r; 1513 u32 r;
1449 u32 deep_color = 0; 1514 u32 deep_color = 0;
@@ -1455,7 +1520,7 @@ static int hdmi_config_audio_acr(u32 sample_freq, u32 *n, u32 *cts)
1455 * Obtain current deep color configuration. This needed 1520 * Obtain current deep color configuration. This needed
1456 * to calculate the TMDS clock based on the pixel clock. 1521 * to calculate the TMDS clock based on the pixel clock.
1457 */ 1522 */
1458 r = REG_GET(HDMI_WP_VIDEO_CFG, 1, 0); 1523 r = REG_GET(hdmi_wp_base(ip_data), HDMI_WP_VIDEO_CFG, 1, 0);
1459 switch (r) { 1524 switch (r) {
1460 case 1: /* No deep color selected */ 1525 case 1: /* No deep color selected */
1461 deep_color = 100; 1526 deep_color = 100;
@@ -1499,7 +1564,8 @@ static int hdmi_config_audio_acr(u32 sample_freq, u32 *n, u32 *cts)
1499 return 0; 1564 return 0;
1500} 1565}
1501 1566
1502static int hdmi_audio_hw_params(struct snd_pcm_substream *substream, 1567static int hdmi_audio_hw_params(struct hdmi_ip_data *ip_data,
1568 struct snd_pcm_substream *substream,
1503 struct snd_pcm_hw_params *params, 1569 struct snd_pcm_hw_params *params,
1504 struct snd_soc_dai *dai) 1570 struct snd_soc_dai *dai)
1505{ 1571{
@@ -1553,7 +1619,7 @@ static int hdmi_audio_hw_params(struct snd_pcm_substream *substream,
1553 return -EINVAL; 1619 return -EINVAL;
1554 } 1620 }
1555 1621
1556 err = hdmi_config_audio_acr(params_rate(params), &n, &cts); 1622 err = hdmi_config_audio_acr(ip_data, params_rate(params), &n, &cts);
1557 if (err < 0) 1623 if (err < 0)
1558 return err; 1624 return err;
1559 1625
@@ -1569,8 +1635,8 @@ static int hdmi_audio_hw_params(struct snd_pcm_substream *substream,
1569 audio_dma.mode = HDMI_AUDIO_TRANSF_DMA; 1635 audio_dma.mode = HDMI_AUDIO_TRANSF_DMA;
1570 audio_dma.fifo_threshold = 0x20; /* in number of samples */ 1636 audio_dma.fifo_threshold = 0x20; /* in number of samples */
1571 1637
1572 hdmi_wp_audio_config_dma(&audio_dma); 1638 hdmi_wp_audio_config_dma(ip_data, &audio_dma);
1573 hdmi_wp_audio_config_format(&audio_format); 1639 hdmi_wp_audio_config_format(ip_data, &audio_format);
1574 1640
1575 /* 1641 /*
1576 * I2S config 1642 * I2S config
@@ -1614,7 +1680,7 @@ static int hdmi_audio_hw_params(struct snd_pcm_substream *substream,
1614 /* Use parallel audio interface */ 1680 /* Use parallel audio interface */
1615 core_cfg.en_parallel_aud_input = true; 1681 core_cfg.en_parallel_aud_input = true;
1616 1682
1617 hdmi_core_audio_config(&core_cfg); 1683 hdmi_core_audio_config(ip_data, &core_cfg);
1618 1684
1619 /* 1685 /*
1620 * Configure packet 1686 * Configure packet
@@ -1628,29 +1694,36 @@ static int hdmi_audio_hw_params(struct snd_pcm_substream *substream,
1628 aud_if_cfg.db5_downmix_inh = false; 1694 aud_if_cfg.db5_downmix_inh = false;
1629 aud_if_cfg.db5_lsv = 0; 1695 aud_if_cfg.db5_lsv = 0;
1630 1696
1631 hdmi_core_audio_infoframe_config(&aud_if_cfg); 1697 hdmi_core_audio_infoframe_config(ip_data, &aud_if_cfg);
1632 return 0; 1698 return 0;
1633} 1699}
1634 1700
1635static int hdmi_audio_trigger(struct snd_pcm_substream *substream, int cmd, 1701static int hdmi_audio_trigger(struct hdmi_ip_data *ip_data,
1636 struct snd_soc_dai *dai) 1702 struct snd_pcm_substream *substream, int cmd,
1703 struct snd_soc_dai *dai)
1637{ 1704{
1638 int err = 0; 1705 int err = 0;
1639 switch (cmd) { 1706 switch (cmd) {
1640 case SNDRV_PCM_TRIGGER_START: 1707 case SNDRV_PCM_TRIGGER_START:
1641 case SNDRV_PCM_TRIGGER_RESUME: 1708 case SNDRV_PCM_TRIGGER_RESUME:
1642 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 1709 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1643 REG_FLD_MOD(HDMI_CORE_AV_AUD_MODE, 1, 0, 0); 1710 REG_FLD_MOD(hdmi_av_base(ip_data),
1644 REG_FLD_MOD(HDMI_WP_AUDIO_CTRL, 1, 31, 31); 1711 HDMI_CORE_AV_AUD_MODE, 1, 0, 0);
1645 REG_FLD_MOD(HDMI_WP_AUDIO_CTRL, 1, 30, 30); 1712 REG_FLD_MOD(hdmi_wp_base(ip_data),
1713 HDMI_WP_AUDIO_CTRL, 1, 31, 31);
1714 REG_FLD_MOD(hdmi_wp_base(ip_data),
1715 HDMI_WP_AUDIO_CTRL, 1, 30, 30);
1646 break; 1716 break;
1647 1717
1648 case SNDRV_PCM_TRIGGER_STOP: 1718 case SNDRV_PCM_TRIGGER_STOP:
1649 case SNDRV_PCM_TRIGGER_SUSPEND: 1719 case SNDRV_PCM_TRIGGER_SUSPEND:
1650 case SNDRV_PCM_TRIGGER_PAUSE_PUSH: 1720 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1651 REG_FLD_MOD(HDMI_CORE_AV_AUD_MODE, 0, 0, 0); 1721 REG_FLD_MOD(hdmi_av_base(ip_data),
1652 REG_FLD_MOD(HDMI_WP_AUDIO_CTRL, 0, 30, 30); 1722 HDMI_CORE_AV_AUD_MODE, 0, 0, 0);
1653 REG_FLD_MOD(HDMI_WP_AUDIO_CTRL, 0, 31, 31); 1723 REG_FLD_MOD(hdmi_wp_base(ip_data),
1724 HDMI_WP_AUDIO_CTRL, 0, 30, 30);
1725 REG_FLD_MOD(hdmi_wp_base(ip_data),
1726 HDMI_WP_AUDIO_CTRL, 0, 31, 31);
1654 break; 1727 break;
1655 default: 1728 default:
1656 err = -EINVAL; 1729 err = -EINVAL;
@@ -1730,20 +1803,26 @@ static int omapdss_hdmihw_probe(struct platform_device *pdev)
1730 } 1803 }
1731 1804
1732 /* Base address taken from platform */ 1805 /* Base address taken from platform */
1733 hdmi.base_wp = ioremap(hdmi_mem->start, resource_size(hdmi_mem)); 1806 hdmi.ip_data.base_wp = ioremap(hdmi_mem->start,
1734 if (!hdmi.base_wp) { 1807 resource_size(hdmi_mem));
1808 if (!hdmi.ip_data.base_wp) {
1735 DSSERR("can't ioremap WP\n"); 1809 DSSERR("can't ioremap WP\n");
1736 return -ENOMEM; 1810 return -ENOMEM;
1737 } 1811 }
1738 1812
1739 r = hdmi_get_clocks(pdev); 1813 r = hdmi_get_clocks(pdev);
1740 if (r) { 1814 if (r) {
1741 iounmap(hdmi.base_wp); 1815 iounmap(hdmi.ip_data.base_wp);
1742 return r; 1816 return r;
1743 } 1817 }
1744 1818
1745 pm_runtime_enable(&pdev->dev); 1819 pm_runtime_enable(&pdev->dev);
1746 1820
1821 hdmi.ip_data.core_sys_offset = HDMI_CORE_SYS;
1822 hdmi.ip_data.core_av_offset = HDMI_CORE_AV;
1823 hdmi.ip_data.pll_offset = HDMI_PLLCTRL;
1824 hdmi.ip_data.phy_offset = HDMI_PHY;
1825
1747 hdmi_panel_init(); 1826 hdmi_panel_init();
1748 1827
1749#if defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) || \ 1828#if defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) || \
@@ -1773,7 +1852,7 @@ static int omapdss_hdmihw_remove(struct platform_device *pdev)
1773 1852
1774 hdmi_put_clocks(); 1853 hdmi_put_clocks();
1775 1854
1776 iounmap(hdmi.base_wp); 1855 iounmap(hdmi.ip_data.base_wp);
1777 1856
1778 return 0; 1857 return 0;
1779} 1858}
diff --git a/drivers/video/omap2/dss/hdmi.h b/drivers/video/omap2/dss/hdmi.h
index c885f9cb0659..ee37bd932116 100644
--- a/drivers/video/omap2/dss/hdmi.h
+++ b/drivers/video/omap2/dss/hdmi.h
@@ -24,174 +24,163 @@
24#include <linux/string.h> 24#include <linux/string.h>
25#include <video/omapdss.h> 25#include <video/omapdss.h>
26 26
27#define HDMI_WP 0x0
28#define HDMI_CORE_SYS 0x400
29#define HDMI_CORE_AV 0x900
30#define HDMI_PLLCTRL 0x200
31#define HDMI_PHY 0x300
32
33struct hdmi_reg { u16 idx; }; 27struct hdmi_reg { u16 idx; };
34 28
35#define HDMI_REG(idx) ((const struct hdmi_reg) { idx }) 29#define HDMI_REG(idx) ((const struct hdmi_reg) { idx })
36 30
37/* HDMI Wrapper */ 31/* HDMI Wrapper */
38#define HDMI_WP_REG(idx) HDMI_REG(HDMI_WP + idx) 32
39 33#define HDMI_WP_REVISION HDMI_REG(0x0)
40#define HDMI_WP_REVISION HDMI_WP_REG(0x0) 34#define HDMI_WP_SYSCONFIG HDMI_REG(0x10)
41#define HDMI_WP_SYSCONFIG HDMI_WP_REG(0x10) 35#define HDMI_WP_IRQSTATUS_RAW HDMI_REG(0x24)
42#define HDMI_WP_IRQSTATUS_RAW HDMI_WP_REG(0x24) 36#define HDMI_WP_IRQSTATUS HDMI_REG(0x28)
43#define HDMI_WP_IRQSTATUS HDMI_WP_REG(0x28) 37#define HDMI_WP_PWR_CTRL HDMI_REG(0x40)
44#define HDMI_WP_PWR_CTRL HDMI_WP_REG(0x40) 38#define HDMI_WP_IRQENABLE_SET HDMI_REG(0x2C)
45#define HDMI_WP_IRQENABLE_SET HDMI_WP_REG(0x2C) 39#define HDMI_WP_VIDEO_CFG HDMI_REG(0x50)
46#define HDMI_WP_VIDEO_CFG HDMI_WP_REG(0x50) 40#define HDMI_WP_VIDEO_SIZE HDMI_REG(0x60)
47#define HDMI_WP_VIDEO_SIZE HDMI_WP_REG(0x60) 41#define HDMI_WP_VIDEO_TIMING_H HDMI_REG(0x68)
48#define HDMI_WP_VIDEO_TIMING_H HDMI_WP_REG(0x68) 42#define HDMI_WP_VIDEO_TIMING_V HDMI_REG(0x6C)
49#define HDMI_WP_VIDEO_TIMING_V HDMI_WP_REG(0x6C) 43#define HDMI_WP_WP_CLK HDMI_REG(0x70)
50#define HDMI_WP_WP_CLK HDMI_WP_REG(0x70) 44#define HDMI_WP_AUDIO_CFG HDMI_REG(0x80)
51#define HDMI_WP_AUDIO_CFG HDMI_WP_REG(0x80) 45#define HDMI_WP_AUDIO_CFG2 HDMI_REG(0x84)
52#define HDMI_WP_AUDIO_CFG2 HDMI_WP_REG(0x84) 46#define HDMI_WP_AUDIO_CTRL HDMI_REG(0x88)
53#define HDMI_WP_AUDIO_CTRL HDMI_WP_REG(0x88) 47#define HDMI_WP_AUDIO_DATA HDMI_REG(0x8C)
54#define HDMI_WP_AUDIO_DATA HDMI_WP_REG(0x8C)
55 48
56/* HDMI IP Core System */ 49/* HDMI IP Core System */
57#define HDMI_CORE_SYS_REG(idx) HDMI_REG(HDMI_CORE_SYS + idx) 50
58 51#define HDMI_CORE_SYS_VND_IDL HDMI_REG(0x0)
59#define HDMI_CORE_SYS_VND_IDL HDMI_CORE_SYS_REG(0x0) 52#define HDMI_CORE_SYS_DEV_IDL HDMI_REG(0x8)
60#define HDMI_CORE_SYS_DEV_IDL HDMI_CORE_SYS_REG(0x8) 53#define HDMI_CORE_SYS_DEV_IDH HDMI_REG(0xC)
61#define HDMI_CORE_SYS_DEV_IDH HDMI_CORE_SYS_REG(0xC) 54#define HDMI_CORE_SYS_DEV_REV HDMI_REG(0x10)
62#define HDMI_CORE_SYS_DEV_REV HDMI_CORE_SYS_REG(0x10) 55#define HDMI_CORE_SYS_SRST HDMI_REG(0x14)
63#define HDMI_CORE_SYS_SRST HDMI_CORE_SYS_REG(0x14) 56#define HDMI_CORE_CTRL1 HDMI_REG(0x20)
64#define HDMI_CORE_CTRL1 HDMI_CORE_SYS_REG(0x20) 57#define HDMI_CORE_SYS_SYS_STAT HDMI_REG(0x24)
65#define HDMI_CORE_SYS_SYS_STAT HDMI_CORE_SYS_REG(0x24) 58#define HDMI_CORE_SYS_VID_ACEN HDMI_REG(0x124)
66#define HDMI_CORE_SYS_VID_ACEN HDMI_CORE_SYS_REG(0x124) 59#define HDMI_CORE_SYS_VID_MODE HDMI_REG(0x128)
67#define HDMI_CORE_SYS_VID_MODE HDMI_CORE_SYS_REG(0x128) 60#define HDMI_CORE_SYS_INTR_STATE HDMI_REG(0x1C0)
68#define HDMI_CORE_SYS_INTR_STATE HDMI_CORE_SYS_REG(0x1C0) 61#define HDMI_CORE_SYS_INTR1 HDMI_REG(0x1C4)
69#define HDMI_CORE_SYS_INTR1 HDMI_CORE_SYS_REG(0x1C4) 62#define HDMI_CORE_SYS_INTR2 HDMI_REG(0x1C8)
70#define HDMI_CORE_SYS_INTR2 HDMI_CORE_SYS_REG(0x1C8) 63#define HDMI_CORE_SYS_INTR3 HDMI_REG(0x1CC)
71#define HDMI_CORE_SYS_INTR3 HDMI_CORE_SYS_REG(0x1CC) 64#define HDMI_CORE_SYS_INTR4 HDMI_REG(0x1D0)
72#define HDMI_CORE_SYS_INTR4 HDMI_CORE_SYS_REG(0x1D0) 65#define HDMI_CORE_SYS_UMASK1 HDMI_REG(0x1D4)
73#define HDMI_CORE_SYS_UMASK1 HDMI_CORE_SYS_REG(0x1D4) 66#define HDMI_CORE_SYS_TMDS_CTRL HDMI_REG(0x208)
74#define HDMI_CORE_SYS_TMDS_CTRL HDMI_CORE_SYS_REG(0x208) 67#define HDMI_CORE_SYS_DE_DLY HDMI_REG(0xC8)
75#define HDMI_CORE_SYS_DE_DLY HDMI_CORE_SYS_REG(0xC8) 68#define HDMI_CORE_SYS_DE_CTRL HDMI_REG(0xCC)
76#define HDMI_CORE_SYS_DE_CTRL HDMI_CORE_SYS_REG(0xCC) 69#define HDMI_CORE_SYS_DE_TOP HDMI_REG(0xD0)
77#define HDMI_CORE_SYS_DE_TOP HDMI_CORE_SYS_REG(0xD0) 70#define HDMI_CORE_SYS_DE_CNTL HDMI_REG(0xD8)
78#define HDMI_CORE_SYS_DE_CNTL HDMI_CORE_SYS_REG(0xD8) 71#define HDMI_CORE_SYS_DE_CNTH HDMI_REG(0xDC)
79#define HDMI_CORE_SYS_DE_CNTH HDMI_CORE_SYS_REG(0xDC) 72#define HDMI_CORE_SYS_DE_LINL HDMI_REG(0xE0)
80#define HDMI_CORE_SYS_DE_LINL HDMI_CORE_SYS_REG(0xE0) 73#define HDMI_CORE_SYS_DE_LINH_1 HDMI_REG(0xE4)
81#define HDMI_CORE_SYS_DE_LINH_1 HDMI_CORE_SYS_REG(0xE4)
82#define HDMI_CORE_CTRL1_VEN_FOLLOWVSYNC 0x1 74#define HDMI_CORE_CTRL1_VEN_FOLLOWVSYNC 0x1
83#define HDMI_CORE_CTRL1_HEN_FOLLOWHSYNC 0x1 75#define HDMI_CORE_CTRL1_HEN_FOLLOWHSYNC 0x1
84#define HDMI_CORE_CTRL1_BSEL_24BITBUS 0x1 76#define HDMI_CORE_CTRL1_BSEL_24BITBUS 0x1
85#define HDMI_CORE_CTRL1_EDGE_RISINGEDGE 0x1 77#define HDMI_CORE_CTRL1_EDGE_RISINGEDGE 0x1
86 78
87/* HDMI DDC E-DID */ 79/* HDMI DDC E-DID */
88#define HDMI_CORE_DDC_CMD HDMI_CORE_SYS_REG(0x3CC) 80#define HDMI_CORE_DDC_CMD HDMI_REG(0x3CC)
89#define HDMI_CORE_DDC_STATUS HDMI_CORE_SYS_REG(0x3C8) 81#define HDMI_CORE_DDC_STATUS HDMI_REG(0x3C8)
90#define HDMI_CORE_DDC_ADDR HDMI_CORE_SYS_REG(0x3B4) 82#define HDMI_CORE_DDC_ADDR HDMI_REG(0x3B4)
91#define HDMI_CORE_DDC_OFFSET HDMI_CORE_SYS_REG(0x3BC) 83#define HDMI_CORE_DDC_OFFSET HDMI_REG(0x3BC)
92#define HDMI_CORE_DDC_COUNT1 HDMI_CORE_SYS_REG(0x3C0) 84#define HDMI_CORE_DDC_COUNT1 HDMI_REG(0x3C0)
93#define HDMI_CORE_DDC_COUNT2 HDMI_CORE_SYS_REG(0x3C4) 85#define HDMI_CORE_DDC_COUNT2 HDMI_REG(0x3C4)
94#define HDMI_CORE_DDC_DATA HDMI_CORE_SYS_REG(0x3D0) 86#define HDMI_CORE_DDC_DATA HDMI_REG(0x3D0)
95#define HDMI_CORE_DDC_SEGM HDMI_CORE_SYS_REG(0x3B8) 87#define HDMI_CORE_DDC_SEGM HDMI_REG(0x3B8)
96 88
97/* HDMI IP Core Audio Video */ 89/* HDMI IP Core Audio Video */
98#define HDMI_CORE_AV_REG(idx) HDMI_REG(HDMI_CORE_AV + idx) 90
99 91#define HDMI_CORE_AV_HDMI_CTRL HDMI_REG(0xBC)
100#define HDMI_CORE_AV_HDMI_CTRL HDMI_CORE_AV_REG(0xBC) 92#define HDMI_CORE_AV_DPD HDMI_REG(0xF4)
101#define HDMI_CORE_AV_DPD HDMI_CORE_AV_REG(0xF4) 93#define HDMI_CORE_AV_PB_CTRL1 HDMI_REG(0xF8)
102#define HDMI_CORE_AV_PB_CTRL1 HDMI_CORE_AV_REG(0xF8) 94#define HDMI_CORE_AV_PB_CTRL2 HDMI_REG(0xFC)
103#define HDMI_CORE_AV_PB_CTRL2 HDMI_CORE_AV_REG(0xFC) 95#define HDMI_CORE_AV_AVI_TYPE HDMI_REG(0x100)
104#define HDMI_CORE_AV_AVI_TYPE HDMI_CORE_AV_REG(0x100) 96#define HDMI_CORE_AV_AVI_VERS HDMI_REG(0x104)
105#define HDMI_CORE_AV_AVI_VERS HDMI_CORE_AV_REG(0x104) 97#define HDMI_CORE_AV_AVI_LEN HDMI_REG(0x108)
106#define HDMI_CORE_AV_AVI_LEN HDMI_CORE_AV_REG(0x108) 98#define HDMI_CORE_AV_AVI_CHSUM HDMI_REG(0x10C)
107#define HDMI_CORE_AV_AVI_CHSUM HDMI_CORE_AV_REG(0x10C) 99#define HDMI_CORE_AV_AVI_DBYTE(n) HDMI_REG(n * 4 + 0x110)
108#define HDMI_CORE_AV_AVI_DBYTE(n) HDMI_CORE_AV_REG(n * 4 + 0x110) 100#define HDMI_CORE_AV_AVI_DBYTE_NELEMS HDMI_REG(15)
109#define HDMI_CORE_AV_AVI_DBYTE_NELEMS HDMI_CORE_AV_REG(15) 101#define HDMI_CORE_AV_SPD_DBYTE HDMI_REG(0x190)
110#define HDMI_CORE_AV_SPD_DBYTE HDMI_CORE_AV_REG(0x190) 102#define HDMI_CORE_AV_SPD_DBYTE_NELEMS HDMI_REG(27)
111#define HDMI_CORE_AV_SPD_DBYTE_NELEMS HDMI_CORE_AV_REG(27) 103#define HDMI_CORE_AV_AUD_DBYTE(n) HDMI_REG(n * 4 + 0x210)
112#define HDMI_CORE_AV_AUD_DBYTE(n) HDMI_CORE_AV_REG(n * 4 + 0x210) 104#define HDMI_CORE_AV_AUD_DBYTE_NELEMS HDMI_REG(10)
113#define HDMI_CORE_AV_AUD_DBYTE_NELEMS HDMI_CORE_AV_REG(10) 105#define HDMI_CORE_AV_MPEG_DBYTE HDMI_REG(0x290)
114#define HDMI_CORE_AV_MPEG_DBYTE HDMI_CORE_AV_REG(0x290) 106#define HDMI_CORE_AV_MPEG_DBYTE_NELEMS HDMI_REG(27)
115#define HDMI_CORE_AV_MPEG_DBYTE_NELEMS HDMI_CORE_AV_REG(27) 107#define HDMI_CORE_AV_GEN_DBYTE HDMI_REG(0x300)
116#define HDMI_CORE_AV_GEN_DBYTE HDMI_CORE_AV_REG(0x300) 108#define HDMI_CORE_AV_GEN_DBYTE_NELEMS HDMI_REG(31)
117#define HDMI_CORE_AV_GEN_DBYTE_NELEMS HDMI_CORE_AV_REG(31) 109#define HDMI_CORE_AV_GEN2_DBYTE HDMI_REG(0x380)
118#define HDMI_CORE_AV_GEN2_DBYTE HDMI_CORE_AV_REG(0x380) 110#define HDMI_CORE_AV_GEN2_DBYTE_NELEMS HDMI_REG(31)
119#define HDMI_CORE_AV_GEN2_DBYTE_NELEMS HDMI_CORE_AV_REG(31) 111#define HDMI_CORE_AV_ACR_CTRL HDMI_REG(0x4)
120#define HDMI_CORE_AV_ACR_CTRL HDMI_CORE_AV_REG(0x4) 112#define HDMI_CORE_AV_FREQ_SVAL HDMI_REG(0x8)
121#define HDMI_CORE_AV_FREQ_SVAL HDMI_CORE_AV_REG(0x8) 113#define HDMI_CORE_AV_N_SVAL1 HDMI_REG(0xC)
122#define HDMI_CORE_AV_N_SVAL1 HDMI_CORE_AV_REG(0xC) 114#define HDMI_CORE_AV_N_SVAL2 HDMI_REG(0x10)
123#define HDMI_CORE_AV_N_SVAL2 HDMI_CORE_AV_REG(0x10) 115#define HDMI_CORE_AV_N_SVAL3 HDMI_REG(0x14)
124#define HDMI_CORE_AV_N_SVAL3 HDMI_CORE_AV_REG(0x14) 116#define HDMI_CORE_AV_CTS_SVAL1 HDMI_REG(0x18)
125#define HDMI_CORE_AV_CTS_SVAL1 HDMI_CORE_AV_REG(0x18) 117#define HDMI_CORE_AV_CTS_SVAL2 HDMI_REG(0x1C)
126#define HDMI_CORE_AV_CTS_SVAL2 HDMI_CORE_AV_REG(0x1C) 118#define HDMI_CORE_AV_CTS_SVAL3 HDMI_REG(0x20)
127#define HDMI_CORE_AV_CTS_SVAL3 HDMI_CORE_AV_REG(0x20) 119#define HDMI_CORE_AV_CTS_HVAL1 HDMI_REG(0x24)
128#define HDMI_CORE_AV_CTS_HVAL1 HDMI_CORE_AV_REG(0x24) 120#define HDMI_CORE_AV_CTS_HVAL2 HDMI_REG(0x28)
129#define HDMI_CORE_AV_CTS_HVAL2 HDMI_CORE_AV_REG(0x28) 121#define HDMI_CORE_AV_CTS_HVAL3 HDMI_REG(0x2C)
130#define HDMI_CORE_AV_CTS_HVAL3 HDMI_CORE_AV_REG(0x2C) 122#define HDMI_CORE_AV_AUD_MODE HDMI_REG(0x50)
131#define HDMI_CORE_AV_AUD_MODE HDMI_CORE_AV_REG(0x50) 123#define HDMI_CORE_AV_SPDIF_CTRL HDMI_REG(0x54)
132#define HDMI_CORE_AV_SPDIF_CTRL HDMI_CORE_AV_REG(0x54) 124#define HDMI_CORE_AV_HW_SPDIF_FS HDMI_REG(0x60)
133#define HDMI_CORE_AV_HW_SPDIF_FS HDMI_CORE_AV_REG(0x60) 125#define HDMI_CORE_AV_SWAP_I2S HDMI_REG(0x64)
134#define HDMI_CORE_AV_SWAP_I2S HDMI_CORE_AV_REG(0x64) 126#define HDMI_CORE_AV_SPDIF_ERTH HDMI_REG(0x6C)
135#define HDMI_CORE_AV_SPDIF_ERTH HDMI_CORE_AV_REG(0x6C) 127#define HDMI_CORE_AV_I2S_IN_MAP HDMI_REG(0x70)
136#define HDMI_CORE_AV_I2S_IN_MAP HDMI_CORE_AV_REG(0x70) 128#define HDMI_CORE_AV_I2S_IN_CTRL HDMI_REG(0x74)
137#define HDMI_CORE_AV_I2S_IN_CTRL HDMI_CORE_AV_REG(0x74) 129#define HDMI_CORE_AV_I2S_CHST0 HDMI_REG(0x78)
138#define HDMI_CORE_AV_I2S_CHST0 HDMI_CORE_AV_REG(0x78) 130#define HDMI_CORE_AV_I2S_CHST1 HDMI_REG(0x7C)
139#define HDMI_CORE_AV_I2S_CHST1 HDMI_CORE_AV_REG(0x7C) 131#define HDMI_CORE_AV_I2S_CHST2 HDMI_REG(0x80)
140#define HDMI_CORE_AV_I2S_CHST2 HDMI_CORE_AV_REG(0x80) 132#define HDMI_CORE_AV_I2S_CHST4 HDMI_REG(0x84)
141#define HDMI_CORE_AV_I2S_CHST4 HDMI_CORE_AV_REG(0x84) 133#define HDMI_CORE_AV_I2S_CHST5 HDMI_REG(0x88)
142#define HDMI_CORE_AV_I2S_CHST5 HDMI_CORE_AV_REG(0x88) 134#define HDMI_CORE_AV_ASRC HDMI_REG(0x8C)
143#define HDMI_CORE_AV_ASRC HDMI_CORE_AV_REG(0x8C) 135#define HDMI_CORE_AV_I2S_IN_LEN HDMI_REG(0x90)
144#define HDMI_CORE_AV_I2S_IN_LEN HDMI_CORE_AV_REG(0x90) 136#define HDMI_CORE_AV_HDMI_CTRL HDMI_REG(0xBC)
145#define HDMI_CORE_AV_HDMI_CTRL HDMI_CORE_AV_REG(0xBC) 137#define HDMI_CORE_AV_AUDO_TXSTAT HDMI_REG(0xC0)
146#define HDMI_CORE_AV_AUDO_TXSTAT HDMI_CORE_AV_REG(0xC0) 138#define HDMI_CORE_AV_AUD_PAR_BUSCLK_1 HDMI_REG(0xCC)
147#define HDMI_CORE_AV_AUD_PAR_BUSCLK_1 HDMI_CORE_AV_REG(0xCC) 139#define HDMI_CORE_AV_AUD_PAR_BUSCLK_2 HDMI_REG(0xD0)
148#define HDMI_CORE_AV_AUD_PAR_BUSCLK_2 HDMI_CORE_AV_REG(0xD0) 140#define HDMI_CORE_AV_AUD_PAR_BUSCLK_3 HDMI_REG(0xD4)
149#define HDMI_CORE_AV_AUD_PAR_BUSCLK_3 HDMI_CORE_AV_REG(0xD4) 141#define HDMI_CORE_AV_TEST_TXCTRL HDMI_REG(0xF0)
150#define HDMI_CORE_AV_TEST_TXCTRL HDMI_CORE_AV_REG(0xF0) 142#define HDMI_CORE_AV_DPD HDMI_REG(0xF4)
151#define HDMI_CORE_AV_DPD HDMI_CORE_AV_REG(0xF4) 143#define HDMI_CORE_AV_PB_CTRL1 HDMI_REG(0xF8)
152#define HDMI_CORE_AV_PB_CTRL1 HDMI_CORE_AV_REG(0xF8) 144#define HDMI_CORE_AV_PB_CTRL2 HDMI_REG(0xFC)
153#define HDMI_CORE_AV_PB_CTRL2 HDMI_CORE_AV_REG(0xFC) 145#define HDMI_CORE_AV_AVI_TYPE HDMI_REG(0x100)
154#define HDMI_CORE_AV_AVI_TYPE HDMI_CORE_AV_REG(0x100) 146#define HDMI_CORE_AV_AVI_VERS HDMI_REG(0x104)
155#define HDMI_CORE_AV_AVI_VERS HDMI_CORE_AV_REG(0x104) 147#define HDMI_CORE_AV_AVI_LEN HDMI_REG(0x108)
156#define HDMI_CORE_AV_AVI_LEN HDMI_CORE_AV_REG(0x108) 148#define HDMI_CORE_AV_AVI_CHSUM HDMI_REG(0x10C)
157#define HDMI_CORE_AV_AVI_CHSUM HDMI_CORE_AV_REG(0x10C) 149#define HDMI_CORE_AV_SPD_TYPE HDMI_REG(0x180)
158#define HDMI_CORE_AV_SPD_TYPE HDMI_CORE_AV_REG(0x180) 150#define HDMI_CORE_AV_SPD_VERS HDMI_REG(0x184)
159#define HDMI_CORE_AV_SPD_VERS HDMI_CORE_AV_REG(0x184) 151#define HDMI_CORE_AV_SPD_LEN HDMI_REG(0x188)
160#define HDMI_CORE_AV_SPD_LEN HDMI_CORE_AV_REG(0x188) 152#define HDMI_CORE_AV_SPD_CHSUM HDMI_REG(0x18C)
161#define HDMI_CORE_AV_SPD_CHSUM HDMI_CORE_AV_REG(0x18C) 153#define HDMI_CORE_AV_AUDIO_TYPE HDMI_REG(0x200)
162#define HDMI_CORE_AV_AUDIO_TYPE HDMI_CORE_AV_REG(0x200) 154#define HDMI_CORE_AV_AUDIO_VERS HDMI_REG(0x204)
163#define HDMI_CORE_AV_AUDIO_VERS HDMI_CORE_AV_REG(0x204) 155#define HDMI_CORE_AV_AUDIO_LEN HDMI_REG(0x208)
164#define HDMI_CORE_AV_AUDIO_LEN HDMI_CORE_AV_REG(0x208) 156#define HDMI_CORE_AV_AUDIO_CHSUM HDMI_REG(0x20C)
165#define HDMI_CORE_AV_AUDIO_CHSUM HDMI_CORE_AV_REG(0x20C) 157#define HDMI_CORE_AV_MPEG_TYPE HDMI_REG(0x280)
166#define HDMI_CORE_AV_MPEG_TYPE HDMI_CORE_AV_REG(0x280) 158#define HDMI_CORE_AV_MPEG_VERS HDMI_REG(0x284)
167#define HDMI_CORE_AV_MPEG_VERS HDMI_CORE_AV_REG(0x284) 159#define HDMI_CORE_AV_MPEG_LEN HDMI_REG(0x288)
168#define HDMI_CORE_AV_MPEG_LEN HDMI_CORE_AV_REG(0x288) 160#define HDMI_CORE_AV_MPEG_CHSUM HDMI_REG(0x28C)
169#define HDMI_CORE_AV_MPEG_CHSUM HDMI_CORE_AV_REG(0x28C) 161#define HDMI_CORE_AV_CP_BYTE1 HDMI_REG(0x37C)
170#define HDMI_CORE_AV_CP_BYTE1 HDMI_CORE_AV_REG(0x37C) 162#define HDMI_CORE_AV_CEC_ADDR_ID HDMI_REG(0x3FC)
171#define HDMI_CORE_AV_CEC_ADDR_ID HDMI_CORE_AV_REG(0x3FC)
172#define HDMI_CORE_AV_SPD_DBYTE_ELSIZE 0x4 163#define HDMI_CORE_AV_SPD_DBYTE_ELSIZE 0x4
173#define HDMI_CORE_AV_GEN2_DBYTE_ELSIZE 0x4 164#define HDMI_CORE_AV_GEN2_DBYTE_ELSIZE 0x4
174#define HDMI_CORE_AV_MPEG_DBYTE_ELSIZE 0x4 165#define HDMI_CORE_AV_MPEG_DBYTE_ELSIZE 0x4
175#define HDMI_CORE_AV_GEN_DBYTE_ELSIZE 0x4 166#define HDMI_CORE_AV_GEN_DBYTE_ELSIZE 0x4
176 167
177/* PLL */ 168/* PLL */
178#define HDMI_PLL_REG(idx) HDMI_REG(HDMI_PLLCTRL + idx)
179 169
180#define PLLCTRL_PLL_CONTROL HDMI_PLL_REG(0x0) 170#define PLLCTRL_PLL_CONTROL HDMI_REG(0x0)
181#define PLLCTRL_PLL_STATUS HDMI_PLL_REG(0x4) 171#define PLLCTRL_PLL_STATUS HDMI_REG(0x4)
182#define PLLCTRL_PLL_GO HDMI_PLL_REG(0x8) 172#define PLLCTRL_PLL_GO HDMI_REG(0x8)
183#define PLLCTRL_CFG1 HDMI_PLL_REG(0xC) 173#define PLLCTRL_CFG1 HDMI_REG(0xC)
184#define PLLCTRL_CFG2 HDMI_PLL_REG(0x10) 174#define PLLCTRL_CFG2 HDMI_REG(0x10)
185#define PLLCTRL_CFG3 HDMI_PLL_REG(0x14) 175#define PLLCTRL_CFG3 HDMI_REG(0x14)
186#define PLLCTRL_CFG4 HDMI_PLL_REG(0x20) 176#define PLLCTRL_CFG4 HDMI_REG(0x20)
187 177
188/* HDMI PHY */ 178/* HDMI PHY */
189#define HDMI_PHY_REG(idx) HDMI_REG(HDMI_PHY + idx)
190 179
191#define HDMI_TXPHY_TX_CTRL HDMI_PHY_REG(0x0) 180#define HDMI_TXPHY_TX_CTRL HDMI_REG(0x0)
192#define HDMI_TXPHY_DIGITAL_CTRL HDMI_PHY_REG(0x4) 181#define HDMI_TXPHY_DIGITAL_CTRL HDMI_REG(0x4)
193#define HDMI_TXPHY_POWER_CTRL HDMI_PHY_REG(0x8) 182#define HDMI_TXPHY_POWER_CTRL HDMI_REG(0x8)
194#define HDMI_TXPHY_PAD_CFG_CTRL HDMI_PHY_REG(0xC) 183#define HDMI_TXPHY_PAD_CFG_CTRL HDMI_REG(0xC)
195 184
196/* HDMI EDID Length */ 185/* HDMI EDID Length */
197#define HDMI_EDID_MAX_LENGTH 256 186#define HDMI_EDID_MAX_LENGTH 256
@@ -203,10 +192,11 @@ struct hdmi_reg { u16 idx; };
203 192
204#define OMAP_HDMI_TIMINGS_NB 34 193#define OMAP_HDMI_TIMINGS_NB 34
205 194
206#define REG_FLD_MOD(idx, val, start, end) \ 195#define REG_FLD_MOD(base, idx, val, start, end) \
207 hdmi_write_reg(idx, FLD_MOD(hdmi_read_reg(idx), val, start, end)) 196 hdmi_write_reg(base, idx, FLD_MOD(hdmi_read_reg(base, idx),\
208#define REG_GET(idx, start, end) \ 197 val, start, end))
209 FLD_GET(hdmi_read_reg(idx), start, end) 198#define REG_GET(base, idx, start, end) \
199 FLD_GET(hdmi_read_reg(base, idx), start, end)
210 200
211/* HDMI timing structure */ 201/* HDMI timing structure */
212struct hdmi_timings { 202struct hdmi_timings {
@@ -568,6 +558,14 @@ struct hdmi_video_interface {
568 int tm; /* Timing mode */ 558 int tm; /* Timing mode */
569}; 559};
570 560
561struct hdmi_ip_data {
562 void __iomem *base_wp; /* HDMI wrapper */
563 unsigned long core_sys_offset;
564 unsigned long core_av_offset;
565 unsigned long pll_offset;
566 unsigned long phy_offset;
567};
568
571struct hdmi_cm { 569struct hdmi_cm {
572 int code; 570 int code;
573 int mode; 571 int mode;