aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i2c
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2014-01-25 12:14:47 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2014-02-13 14:41:34 -0500
commit2f7f730a4f0fd3376dda9266203f29ceccd0a67f (patch)
treec1dc66d2a7f21872d953777d90686ba2847a78c8 /drivers/gpu/drm/i2c
parentf0b33b282c17337276504d6a700d0f558f1a6891 (diff)
drm/i2c: tda998x: simplify the i2c read/write functions
This patch simplifies the i2c read/write functions and permits them to be easily called in more contexts. Tested-by: Russell King <rmk+kernel@arm.linux.org.uk> Acked-by: Russell King <rmk+kernel@arm.linux.org.uk> Signed-off-by: Jean-Francois Moine <moinejf@free.fr> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/gpu/drm/i2c')
-rw-r--r--drivers/gpu/drm/i2c/tda998x_drv.c322
1 files changed, 162 insertions, 160 deletions
diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c
index e5b764b95866..7df73baf3f9b 100644
--- a/drivers/gpu/drm/i2c/tda998x_drv.c
+++ b/drivers/gpu/drm/i2c/tda998x_drv.c
@@ -31,6 +31,7 @@
31 31
32struct tda998x_priv { 32struct tda998x_priv {
33 struct i2c_client *cec; 33 struct i2c_client *cec;
34 struct i2c_client *hdmi;
34 uint16_t rev; 35 uint16_t rev;
35 uint8_t current_page; 36 uint8_t current_page;
36 int dpms; 37 int dpms;
@@ -329,9 +330,9 @@ struct tda998x_priv {
329#define TDA19988 0x0301 330#define TDA19988 0x0301
330 331
331static void 332static void
332cec_write(struct drm_encoder *encoder, uint16_t addr, uint8_t val) 333cec_write(struct tda998x_priv *priv, uint16_t addr, uint8_t val)
333{ 334{
334 struct i2c_client *client = to_tda998x_priv(encoder)->cec; 335 struct i2c_client *client = priv->cec;
335 uint8_t buf[] = {addr, val}; 336 uint8_t buf[] = {addr, val};
336 int ret; 337 int ret;
337 338
@@ -341,9 +342,9 @@ cec_write(struct drm_encoder *encoder, uint16_t addr, uint8_t val)
341} 342}
342 343
343static uint8_t 344static uint8_t
344cec_read(struct drm_encoder *encoder, uint8_t addr) 345cec_read(struct tda998x_priv *priv, uint8_t addr)
345{ 346{
346 struct i2c_client *client = to_tda998x_priv(encoder)->cec; 347 struct i2c_client *client = priv->cec;
347 uint8_t val; 348 uint8_t val;
348 int ret; 349 int ret;
349 350
@@ -363,12 +364,10 @@ fail:
363} 364}
364 365
365static void 366static void
366set_page(struct drm_encoder *encoder, uint16_t reg) 367set_page(struct tda998x_priv *priv, uint16_t reg)
367{ 368{
368 struct tda998x_priv *priv = to_tda998x_priv(encoder);
369
370 if (REG2PAGE(reg) != priv->current_page) { 369 if (REG2PAGE(reg) != priv->current_page) {
371 struct i2c_client *client = drm_i2c_encoder_get_client(encoder); 370 struct i2c_client *client = priv->hdmi;
372 uint8_t buf[] = { 371 uint8_t buf[] = {
373 REG_CURPAGE, REG2PAGE(reg) 372 REG_CURPAGE, REG2PAGE(reg)
374 }; 373 };
@@ -381,13 +380,13 @@ set_page(struct drm_encoder *encoder, uint16_t reg)
381} 380}
382 381
383static int 382static int
384reg_read_range(struct drm_encoder *encoder, uint16_t reg, char *buf, int cnt) 383reg_read_range(struct tda998x_priv *priv, uint16_t reg, char *buf, int cnt)
385{ 384{
386 struct i2c_client *client = drm_i2c_encoder_get_client(encoder); 385 struct i2c_client *client = priv->hdmi;
387 uint8_t addr = REG2ADDR(reg); 386 uint8_t addr = REG2ADDR(reg);
388 int ret; 387 int ret;
389 388
390 set_page(encoder, reg); 389 set_page(priv, reg);
391 390
392 ret = i2c_master_send(client, &addr, sizeof(addr)); 391 ret = i2c_master_send(client, &addr, sizeof(addr));
393 if (ret < 0) 392 if (ret < 0)
@@ -405,16 +404,16 @@ fail:
405} 404}
406 405
407static void 406static void
408reg_write_range(struct drm_encoder *encoder, uint16_t reg, uint8_t *p, int cnt) 407reg_write_range(struct tda998x_priv *priv, uint16_t reg, uint8_t *p, int cnt)
409{ 408{
410 struct i2c_client *client = drm_i2c_encoder_get_client(encoder); 409 struct i2c_client *client = priv->hdmi;
411 uint8_t buf[cnt+1]; 410 uint8_t buf[cnt+1];
412 int ret; 411 int ret;
413 412
414 buf[0] = REG2ADDR(reg); 413 buf[0] = REG2ADDR(reg);
415 memcpy(&buf[1], p, cnt); 414 memcpy(&buf[1], p, cnt);
416 415
417 set_page(encoder, reg); 416 set_page(priv, reg);
418 417
419 ret = i2c_master_send(client, buf, cnt + 1); 418 ret = i2c_master_send(client, buf, cnt + 1);
420 if (ret < 0) 419 if (ret < 0)
@@ -422,21 +421,21 @@ reg_write_range(struct drm_encoder *encoder, uint16_t reg, uint8_t *p, int cnt)
422} 421}
423 422
424static uint8_t 423static uint8_t
425reg_read(struct drm_encoder *encoder, uint16_t reg) 424reg_read(struct tda998x_priv *priv, uint16_t reg)
426{ 425{
427 uint8_t val = 0; 426 uint8_t val = 0;
428 reg_read_range(encoder, reg, &val, sizeof(val)); 427 reg_read_range(priv, reg, &val, sizeof(val));
429 return val; 428 return val;
430} 429}
431 430
432static void 431static void
433reg_write(struct drm_encoder *encoder, uint16_t reg, uint8_t val) 432reg_write(struct tda998x_priv *priv, uint16_t reg, uint8_t val)
434{ 433{
435 struct i2c_client *client = drm_i2c_encoder_get_client(encoder); 434 struct i2c_client *client = priv->hdmi;
436 uint8_t buf[] = {REG2ADDR(reg), val}; 435 uint8_t buf[] = {REG2ADDR(reg), val};
437 int ret; 436 int ret;
438 437
439 set_page(encoder, reg); 438 set_page(priv, reg);
440 439
441 ret = i2c_master_send(client, buf, ARRAY_SIZE(buf)); 440 ret = i2c_master_send(client, buf, ARRAY_SIZE(buf));
442 if (ret < 0) 441 if (ret < 0)
@@ -444,13 +443,13 @@ reg_write(struct drm_encoder *encoder, uint16_t reg, uint8_t val)
444} 443}
445 444
446static void 445static void
447reg_write16(struct drm_encoder *encoder, uint16_t reg, uint16_t val) 446reg_write16(struct tda998x_priv *priv, uint16_t reg, uint16_t val)
448{ 447{
449 struct i2c_client *client = drm_i2c_encoder_get_client(encoder); 448 struct i2c_client *client = priv->hdmi;
450 uint8_t buf[] = {REG2ADDR(reg), val >> 8, val}; 449 uint8_t buf[] = {REG2ADDR(reg), val >> 8, val};
451 int ret; 450 int ret;
452 451
453 set_page(encoder, reg); 452 set_page(priv, reg);
454 453
455 ret = i2c_master_send(client, buf, ARRAY_SIZE(buf)); 454 ret = i2c_master_send(client, buf, ARRAY_SIZE(buf));
456 if (ret < 0) 455 if (ret < 0)
@@ -458,47 +457,47 @@ reg_write16(struct drm_encoder *encoder, uint16_t reg, uint16_t val)
458} 457}
459 458
460static void 459static void
461reg_set(struct drm_encoder *encoder, uint16_t reg, uint8_t val) 460reg_set(struct tda998x_priv *priv, uint16_t reg, uint8_t val)
462{ 461{
463 reg_write(encoder, reg, reg_read(encoder, reg) | val); 462 reg_write(priv, reg, reg_read(priv, reg) | val);
464} 463}
465 464
466static void 465static void
467reg_clear(struct drm_encoder *encoder, uint16_t reg, uint8_t val) 466reg_clear(struct tda998x_priv *priv, uint16_t reg, uint8_t val)
468{ 467{
469 reg_write(encoder, reg, reg_read(encoder, reg) & ~val); 468 reg_write(priv, reg, reg_read(priv, reg) & ~val);
470} 469}
471 470
472static void 471static void
473tda998x_reset(struct drm_encoder *encoder) 472tda998x_reset(struct tda998x_priv *priv)
474{ 473{
475 /* reset audio and i2c master: */ 474 /* reset audio and i2c master: */
476 reg_set(encoder, REG_SOFTRESET, SOFTRESET_AUDIO | SOFTRESET_I2C_MASTER); 475 reg_set(priv, REG_SOFTRESET, SOFTRESET_AUDIO | SOFTRESET_I2C_MASTER);
477 msleep(50); 476 msleep(50);
478 reg_clear(encoder, REG_SOFTRESET, SOFTRESET_AUDIO | SOFTRESET_I2C_MASTER); 477 reg_clear(priv, REG_SOFTRESET, SOFTRESET_AUDIO | SOFTRESET_I2C_MASTER);
479 msleep(50); 478 msleep(50);
480 479
481 /* reset transmitter: */ 480 /* reset transmitter: */
482 reg_set(encoder, REG_MAIN_CNTRL0, MAIN_CNTRL0_SR); 481 reg_set(priv, REG_MAIN_CNTRL0, MAIN_CNTRL0_SR);
483 reg_clear(encoder, REG_MAIN_CNTRL0, MAIN_CNTRL0_SR); 482 reg_clear(priv, REG_MAIN_CNTRL0, MAIN_CNTRL0_SR);
484 483
485 /* PLL registers common configuration */ 484 /* PLL registers common configuration */
486 reg_write(encoder, REG_PLL_SERIAL_1, 0x00); 485 reg_write(priv, REG_PLL_SERIAL_1, 0x00);
487 reg_write(encoder, REG_PLL_SERIAL_2, PLL_SERIAL_2_SRL_NOSC(1)); 486 reg_write(priv, REG_PLL_SERIAL_2, PLL_SERIAL_2_SRL_NOSC(1));
488 reg_write(encoder, REG_PLL_SERIAL_3, 0x00); 487 reg_write(priv, REG_PLL_SERIAL_3, 0x00);
489 reg_write(encoder, REG_SERIALIZER, 0x00); 488 reg_write(priv, REG_SERIALIZER, 0x00);
490 reg_write(encoder, REG_BUFFER_OUT, 0x00); 489 reg_write(priv, REG_BUFFER_OUT, 0x00);
491 reg_write(encoder, REG_PLL_SCG1, 0x00); 490 reg_write(priv, REG_PLL_SCG1, 0x00);
492 reg_write(encoder, REG_AUDIO_DIV, AUDIO_DIV_SERCLK_8); 491 reg_write(priv, REG_AUDIO_DIV, AUDIO_DIV_SERCLK_8);
493 reg_write(encoder, REG_SEL_CLK, SEL_CLK_SEL_CLK1 | SEL_CLK_ENA_SC_CLK); 492 reg_write(priv, REG_SEL_CLK, SEL_CLK_SEL_CLK1 | SEL_CLK_ENA_SC_CLK);
494 reg_write(encoder, REG_PLL_SCGN1, 0xfa); 493 reg_write(priv, REG_PLL_SCGN1, 0xfa);
495 reg_write(encoder, REG_PLL_SCGN2, 0x00); 494 reg_write(priv, REG_PLL_SCGN2, 0x00);
496 reg_write(encoder, REG_PLL_SCGR1, 0x5b); 495 reg_write(priv, REG_PLL_SCGR1, 0x5b);
497 reg_write(encoder, REG_PLL_SCGR2, 0x00); 496 reg_write(priv, REG_PLL_SCGR2, 0x00);
498 reg_write(encoder, REG_PLL_SCG2, 0x10); 497 reg_write(priv, REG_PLL_SCG2, 0x10);
499 498
500 /* Write the default value MUX register */ 499 /* Write the default value MUX register */
501 reg_write(encoder, REG_MUX_VP_VIP_OUT, 0x24); 500 reg_write(priv, REG_MUX_VP_VIP_OUT, 0x24);
502} 501}
503 502
504static uint8_t tda998x_cksum(uint8_t *buf, size_t bytes) 503static uint8_t tda998x_cksum(uint8_t *buf, size_t bytes)
@@ -514,18 +513,18 @@ static uint8_t tda998x_cksum(uint8_t *buf, size_t bytes)
514#define PB(x) (HB(2) + 1 + (x)) 513#define PB(x) (HB(2) + 1 + (x))
515 514
516static void 515static void
517tda998x_write_if(struct drm_encoder *encoder, uint8_t bit, uint16_t addr, 516tda998x_write_if(struct tda998x_priv *priv, uint8_t bit, uint16_t addr,
518 uint8_t *buf, size_t size) 517 uint8_t *buf, size_t size)
519{ 518{
520 buf[PB(0)] = tda998x_cksum(buf, size); 519 buf[PB(0)] = tda998x_cksum(buf, size);
521 520
522 reg_clear(encoder, REG_DIP_IF_FLAGS, bit); 521 reg_clear(priv, REG_DIP_IF_FLAGS, bit);
523 reg_write_range(encoder, addr, buf, size); 522 reg_write_range(priv, addr, buf, size);
524 reg_set(encoder, REG_DIP_IF_FLAGS, bit); 523 reg_set(priv, REG_DIP_IF_FLAGS, bit);
525} 524}
526 525
527static void 526static void
528tda998x_write_aif(struct drm_encoder *encoder, struct tda998x_encoder_params *p) 527tda998x_write_aif(struct tda998x_priv *priv, struct tda998x_encoder_params *p)
529{ 528{
530 u8 buf[PB(HDMI_AUDIO_INFOFRAME_SIZE) + 1]; 529 u8 buf[PB(HDMI_AUDIO_INFOFRAME_SIZE) + 1];
531 530
@@ -538,12 +537,12 @@ tda998x_write_aif(struct drm_encoder *encoder, struct tda998x_encoder_params *p)
538 buf[PB(4)] = p->audio_frame[4]; 537 buf[PB(4)] = p->audio_frame[4];
539 buf[PB(5)] = p->audio_frame[5] & 0xf8; /* DM_INH + LSV */ 538 buf[PB(5)] = p->audio_frame[5] & 0xf8; /* DM_INH + LSV */
540 539
541 tda998x_write_if(encoder, DIP_IF_FLAGS_IF4, REG_IF4_HB0, buf, 540 tda998x_write_if(priv, DIP_IF_FLAGS_IF4, REG_IF4_HB0, buf,
542 sizeof(buf)); 541 sizeof(buf));
543} 542}
544 543
545static void 544static void
546tda998x_write_avi(struct drm_encoder *encoder, struct drm_display_mode *mode) 545tda998x_write_avi(struct tda998x_priv *priv, struct drm_display_mode *mode)
547{ 546{
548 u8 buf[PB(HDMI_AVI_INFOFRAME_SIZE) + 1]; 547 u8 buf[PB(HDMI_AVI_INFOFRAME_SIZE) + 1];
549 548
@@ -556,36 +555,36 @@ tda998x_write_avi(struct drm_encoder *encoder, struct drm_display_mode *mode)
556 buf[PB(3)] = HDMI_QUANTIZATION_RANGE_FULL << 2; 555 buf[PB(3)] = HDMI_QUANTIZATION_RANGE_FULL << 2;
557 buf[PB(4)] = drm_match_cea_mode(mode); 556 buf[PB(4)] = drm_match_cea_mode(mode);
558 557
559 tda998x_write_if(encoder, DIP_IF_FLAGS_IF2, REG_IF2_HB0, buf, 558 tda998x_write_if(priv, DIP_IF_FLAGS_IF2, REG_IF2_HB0, buf,
560 sizeof(buf)); 559 sizeof(buf));
561} 560}
562 561
563static void tda998x_audio_mute(struct drm_encoder *encoder, bool on) 562static void tda998x_audio_mute(struct tda998x_priv *priv, bool on)
564{ 563{
565 if (on) { 564 if (on) {
566 reg_set(encoder, REG_SOFTRESET, SOFTRESET_AUDIO); 565 reg_set(priv, REG_SOFTRESET, SOFTRESET_AUDIO);
567 reg_clear(encoder, REG_SOFTRESET, SOFTRESET_AUDIO); 566 reg_clear(priv, REG_SOFTRESET, SOFTRESET_AUDIO);
568 reg_set(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO); 567 reg_set(priv, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO);
569 } else { 568 } else {
570 reg_clear(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO); 569 reg_clear(priv, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO);
571 } 570 }
572} 571}
573 572
574static void 573static void
575tda998x_configure_audio(struct drm_encoder *encoder, 574tda998x_configure_audio(struct tda998x_priv *priv,
576 struct drm_display_mode *mode, struct tda998x_encoder_params *p) 575 struct drm_display_mode *mode, struct tda998x_encoder_params *p)
577{ 576{
578 uint8_t buf[6], clksel_aip, clksel_fs, ca_i2s, cts_n, adiv; 577 uint8_t buf[6], clksel_aip, clksel_fs, ca_i2s, cts_n, adiv;
579 uint32_t n; 578 uint32_t n;
580 579
581 /* Enable audio ports */ 580 /* Enable audio ports */
582 reg_write(encoder, REG_ENA_AP, p->audio_cfg); 581 reg_write(priv, REG_ENA_AP, p->audio_cfg);
583 reg_write(encoder, REG_ENA_ACLK, p->audio_clk_cfg); 582 reg_write(priv, REG_ENA_ACLK, p->audio_clk_cfg);
584 583
585 /* Set audio input source */ 584 /* Set audio input source */
586 switch (p->audio_format) { 585 switch (p->audio_format) {
587 case AFMT_SPDIF: 586 case AFMT_SPDIF:
588 reg_write(encoder, REG_MUX_AP, 0x40); 587 reg_write(priv, REG_MUX_AP, 0x40);
589 clksel_aip = AIP_CLKSEL_AIP(0); 588 clksel_aip = AIP_CLKSEL_AIP(0);
590 /* FS64SPDIF */ 589 /* FS64SPDIF */
591 clksel_fs = AIP_CLKSEL_FS(2); 590 clksel_fs = AIP_CLKSEL_FS(2);
@@ -594,7 +593,7 @@ tda998x_configure_audio(struct drm_encoder *encoder,
594 break; 593 break;
595 594
596 case AFMT_I2S: 595 case AFMT_I2S:
597 reg_write(encoder, REG_MUX_AP, 0x64); 596 reg_write(priv, REG_MUX_AP, 0x64);
598 clksel_aip = AIP_CLKSEL_AIP(1); 597 clksel_aip = AIP_CLKSEL_AIP(1);
599 /* ACLK */ 598 /* ACLK */
600 clksel_fs = AIP_CLKSEL_FS(0); 599 clksel_fs = AIP_CLKSEL_FS(0);
@@ -607,12 +606,12 @@ tda998x_configure_audio(struct drm_encoder *encoder,
607 return; 606 return;
608 } 607 }
609 608
610 reg_write(encoder, REG_AIP_CLKSEL, clksel_aip); 609 reg_write(priv, REG_AIP_CLKSEL, clksel_aip);
611 reg_clear(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_LAYOUT); 610 reg_clear(priv, REG_AIP_CNTRL_0, AIP_CNTRL_0_LAYOUT);
612 611
613 /* Enable automatic CTS generation */ 612 /* Enable automatic CTS generation */
614 reg_clear(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_ACR_MAN); 613 reg_clear(priv, REG_AIP_CNTRL_0, AIP_CNTRL_0_ACR_MAN);
615 reg_write(encoder, REG_CTS_N, cts_n); 614 reg_write(priv, REG_CTS_N, cts_n);
616 615
617 /* 616 /*
618 * Audio input somehow depends on HDMI line rate which is 617 * Audio input somehow depends on HDMI line rate which is
@@ -625,7 +624,7 @@ tda998x_configure_audio(struct drm_encoder *encoder,
625 adiv = AUDIO_DIV_SERCLK_16; 624 adiv = AUDIO_DIV_SERCLK_16;
626 else 625 else
627 adiv = AUDIO_DIV_SERCLK_8; 626 adiv = AUDIO_DIV_SERCLK_8;
628 reg_write(encoder, REG_AUDIO_DIV, adiv); 627 reg_write(priv, REG_AUDIO_DIV, adiv);
629 628
630 /* 629 /*
631 * This is the approximate value of N, which happens to be 630 * This is the approximate value of N, which happens to be
@@ -640,14 +639,14 @@ tda998x_configure_audio(struct drm_encoder *encoder,
640 buf[3] = n; 639 buf[3] = n;
641 buf[4] = n >> 8; 640 buf[4] = n >> 8;
642 buf[5] = n >> 16; 641 buf[5] = n >> 16;
643 reg_write_range(encoder, REG_ACR_CTS_0, buf, 6); 642 reg_write_range(priv, REG_ACR_CTS_0, buf, 6);
644 643
645 /* Set CTS clock reference */ 644 /* Set CTS clock reference */
646 reg_write(encoder, REG_AIP_CLKSEL, clksel_aip | clksel_fs); 645 reg_write(priv, REG_AIP_CLKSEL, clksel_aip | clksel_fs);
647 646
648 /* Reset CTS generator */ 647 /* Reset CTS generator */
649 reg_set(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_CTS); 648 reg_set(priv, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_CTS);
650 reg_clear(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_CTS); 649 reg_clear(priv, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_CTS);
651 650
652 /* Write the channel status */ 651 /* Write the channel status */
653 buf[0] = IEC958_AES0_CON_NOT_COPYRIGHT; 652 buf[0] = IEC958_AES0_CON_NOT_COPYRIGHT;
@@ -655,14 +654,14 @@ tda998x_configure_audio(struct drm_encoder *encoder,
655 buf[2] = IEC958_AES3_CON_FS_NOTID; 654 buf[2] = IEC958_AES3_CON_FS_NOTID;
656 buf[3] = IEC958_AES4_CON_ORIGFS_NOTID | 655 buf[3] = IEC958_AES4_CON_ORIGFS_NOTID |
657 IEC958_AES4_CON_MAX_WORDLEN_24; 656 IEC958_AES4_CON_MAX_WORDLEN_24;
658 reg_write_range(encoder, REG_CH_STAT_B(0), buf, 4); 657 reg_write_range(priv, REG_CH_STAT_B(0), buf, 4);
659 658
660 tda998x_audio_mute(encoder, true); 659 tda998x_audio_mute(priv, true);
661 mdelay(20); 660 mdelay(20);
662 tda998x_audio_mute(encoder, false); 661 tda998x_audio_mute(priv, false);
663 662
664 /* Write the audio information packet */ 663 /* Write the audio information packet */
665 tda998x_write_aif(encoder, p); 664 tda998x_write_aif(priv, p);
666} 665}
667 666
668/* DRM encoder functions */ 667/* DRM encoder functions */
@@ -704,19 +703,19 @@ tda998x_encoder_dpms(struct drm_encoder *encoder, int mode)
704 switch (mode) { 703 switch (mode) {
705 case DRM_MODE_DPMS_ON: 704 case DRM_MODE_DPMS_ON:
706 /* enable video ports, audio will be enabled later */ 705 /* enable video ports, audio will be enabled later */
707 reg_write(encoder, REG_ENA_VP_0, 0xff); 706 reg_write(priv, REG_ENA_VP_0, 0xff);
708 reg_write(encoder, REG_ENA_VP_1, 0xff); 707 reg_write(priv, REG_ENA_VP_1, 0xff);
709 reg_write(encoder, REG_ENA_VP_2, 0xff); 708 reg_write(priv, REG_ENA_VP_2, 0xff);
710 /* set muxing after enabling ports: */ 709 /* set muxing after enabling ports: */
711 reg_write(encoder, REG_VIP_CNTRL_0, priv->vip_cntrl_0); 710 reg_write(priv, REG_VIP_CNTRL_0, priv->vip_cntrl_0);
712 reg_write(encoder, REG_VIP_CNTRL_1, priv->vip_cntrl_1); 711 reg_write(priv, REG_VIP_CNTRL_1, priv->vip_cntrl_1);
713 reg_write(encoder, REG_VIP_CNTRL_2, priv->vip_cntrl_2); 712 reg_write(priv, REG_VIP_CNTRL_2, priv->vip_cntrl_2);
714 break; 713 break;
715 case DRM_MODE_DPMS_OFF: 714 case DRM_MODE_DPMS_OFF:
716 /* disable video ports */ 715 /* disable video ports */
717 reg_write(encoder, REG_ENA_VP_0, 0x00); 716 reg_write(priv, REG_ENA_VP_0, 0x00);
718 reg_write(encoder, REG_ENA_VP_1, 0x00); 717 reg_write(priv, REG_ENA_VP_1, 0x00);
719 reg_write(encoder, REG_ENA_VP_2, 0x00); 718 reg_write(priv, REG_ENA_VP_2, 0x00);
720 break; 719 break;
721 } 720 }
722 721
@@ -834,57 +833,57 @@ tda998x_encoder_mode_set(struct drm_encoder *encoder,
834 } 833 }
835 834
836 /* mute the audio FIFO: */ 835 /* mute the audio FIFO: */
837 reg_set(encoder, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO); 836 reg_set(priv, REG_AIP_CNTRL_0, AIP_CNTRL_0_RST_FIFO);
838 837
839 /* set HDMI HDCP mode off: */ 838 /* set HDMI HDCP mode off: */
840 reg_set(encoder, REG_TBG_CNTRL_1, TBG_CNTRL_1_DWIN_DIS); 839 reg_set(priv, REG_TBG_CNTRL_1, TBG_CNTRL_1_DWIN_DIS);
841 reg_clear(encoder, REG_TX33, TX33_HDMI); 840 reg_clear(priv, REG_TX33, TX33_HDMI);
841 reg_write(priv, REG_ENC_CNTRL, ENC_CNTRL_CTL_CODE(0));
842 842
843 reg_write(encoder, REG_ENC_CNTRL, ENC_CNTRL_CTL_CODE(0));
844 /* no pre-filter or interpolator: */ 843 /* no pre-filter or interpolator: */
845 reg_write(encoder, REG_HVF_CNTRL_0, HVF_CNTRL_0_PREFIL(0) | 844 reg_write(priv, REG_HVF_CNTRL_0, HVF_CNTRL_0_PREFIL(0) |
846 HVF_CNTRL_0_INTPOL(0)); 845 HVF_CNTRL_0_INTPOL(0));
847 reg_write(encoder, REG_VIP_CNTRL_5, VIP_CNTRL_5_SP_CNT(0)); 846 reg_write(priv, REG_VIP_CNTRL_5, VIP_CNTRL_5_SP_CNT(0));
848 reg_write(encoder, REG_VIP_CNTRL_4, VIP_CNTRL_4_BLANKIT(0) | 847 reg_write(priv, REG_VIP_CNTRL_4, VIP_CNTRL_4_BLANKIT(0) |
849 VIP_CNTRL_4_BLC(0)); 848 VIP_CNTRL_4_BLC(0));
850 reg_clear(encoder, REG_PLL_SERIAL_3, PLL_SERIAL_3_SRL_CCIR); 849 reg_clear(priv, REG_PLL_SERIAL_3, PLL_SERIAL_3_SRL_CCIR);
851 850
852 reg_clear(encoder, REG_PLL_SERIAL_1, PLL_SERIAL_1_SRL_MAN_IZ); 851 reg_clear(priv, REG_PLL_SERIAL_1, PLL_SERIAL_1_SRL_MAN_IZ);
853 reg_clear(encoder, REG_PLL_SERIAL_3, PLL_SERIAL_3_SRL_DE); 852 reg_clear(priv, REG_PLL_SERIAL_3, PLL_SERIAL_3_SRL_DE);
854 reg_write(encoder, REG_SERIALIZER, 0); 853 reg_write(priv, REG_SERIALIZER, 0);
855 reg_write(encoder, REG_HVF_CNTRL_1, HVF_CNTRL_1_VQR(0)); 854 reg_write(priv, REG_HVF_CNTRL_1, HVF_CNTRL_1_VQR(0));
856 855
857 /* TODO enable pixel repeat for pixel rates less than 25Msamp/s */ 856 /* TODO enable pixel repeat for pixel rates less than 25Msamp/s */
858 rep = 0; 857 rep = 0;
859 reg_write(encoder, REG_RPT_CNTRL, 0); 858 reg_write(priv, REG_RPT_CNTRL, 0);
860 reg_write(encoder, REG_SEL_CLK, SEL_CLK_SEL_VRF_CLK(0) | 859 reg_write(priv, REG_SEL_CLK, SEL_CLK_SEL_VRF_CLK(0) |
861 SEL_CLK_SEL_CLK1 | SEL_CLK_ENA_SC_CLK); 860 SEL_CLK_SEL_CLK1 | SEL_CLK_ENA_SC_CLK);
862 861
863 reg_write(encoder, REG_PLL_SERIAL_2, PLL_SERIAL_2_SRL_NOSC(div) | 862 reg_write(priv, REG_PLL_SERIAL_2, PLL_SERIAL_2_SRL_NOSC(div) |
864 PLL_SERIAL_2_SRL_PR(rep)); 863 PLL_SERIAL_2_SRL_PR(rep));
865 864
866 /* set color matrix bypass flag: */ 865 /* set color matrix bypass flag: */
867 reg_set(encoder, REG_MAT_CONTRL, MAT_CONTRL_MAT_BP); 866 reg_set(priv, REG_MAT_CONTRL, MAT_CONTRL_MAT_BP);
868 867
869 /* set BIAS tmds value: */ 868 /* set BIAS tmds value: */
870 reg_write(encoder, REG_ANA_GENERAL, 0x09); 869 reg_write(priv, REG_ANA_GENERAL, 0x09);
871 870
872 reg_clear(encoder, REG_TBG_CNTRL_0, TBG_CNTRL_0_SYNC_MTHD); 871 reg_clear(priv, REG_TBG_CNTRL_0, TBG_CNTRL_0_SYNC_MTHD);
873 872
874 /* 873 /*
875 * Sync on rising HSYNC/VSYNC 874 * Sync on rising HSYNC/VSYNC
876 */ 875 */
877 reg_write(encoder, REG_VIP_CNTRL_3, 0); 876 reg_write(priv, REG_VIP_CNTRL_3, 0);
878 reg_set(encoder, REG_VIP_CNTRL_3, VIP_CNTRL_3_SYNC_HS); 877 reg_set(priv, REG_VIP_CNTRL_3, VIP_CNTRL_3_SYNC_HS);
879 878
880 /* 879 /*
881 * TDA19988 requires high-active sync at input stage, 880 * TDA19988 requires high-active sync at input stage,
882 * so invert low-active sync provided by master encoder here 881 * so invert low-active sync provided by master encoder here
883 */ 882 */
884 if (mode->flags & DRM_MODE_FLAG_NHSYNC) 883 if (mode->flags & DRM_MODE_FLAG_NHSYNC)
885 reg_set(encoder, REG_VIP_CNTRL_3, VIP_CNTRL_3_H_TGL); 884 reg_set(priv, REG_VIP_CNTRL_3, VIP_CNTRL_3_H_TGL);
886 if (mode->flags & DRM_MODE_FLAG_NVSYNC) 885 if (mode->flags & DRM_MODE_FLAG_NVSYNC)
887 reg_set(encoder, REG_VIP_CNTRL_3, VIP_CNTRL_3_V_TGL); 886 reg_set(priv, REG_VIP_CNTRL_3, VIP_CNTRL_3_V_TGL);
888 887
889 /* 888 /*
890 * Always generate sync polarity relative to input sync and 889 * Always generate sync polarity relative to input sync and
@@ -895,49 +894,49 @@ tda998x_encoder_mode_set(struct drm_encoder *encoder,
895 reg |= TBG_CNTRL_1_H_TGL; 894 reg |= TBG_CNTRL_1_H_TGL;
896 if (mode->flags & DRM_MODE_FLAG_NVSYNC) 895 if (mode->flags & DRM_MODE_FLAG_NVSYNC)
897 reg |= TBG_CNTRL_1_V_TGL; 896 reg |= TBG_CNTRL_1_V_TGL;
898 reg_write(encoder, REG_TBG_CNTRL_1, reg); 897 reg_write(priv, REG_TBG_CNTRL_1, reg);
899 898
900 reg_write(encoder, REG_VIDFORMAT, 0x00); 899 reg_write(priv, REG_VIDFORMAT, 0x00);
901 reg_write16(encoder, REG_REFPIX_MSB, ref_pix); 900 reg_write16(priv, REG_REFPIX_MSB, ref_pix);
902 reg_write16(encoder, REG_REFLINE_MSB, ref_line); 901 reg_write16(priv, REG_REFLINE_MSB, ref_line);
903 reg_write16(encoder, REG_NPIX_MSB, n_pix); 902 reg_write16(priv, REG_NPIX_MSB, n_pix);
904 reg_write16(encoder, REG_NLINE_MSB, n_line); 903 reg_write16(priv, REG_NLINE_MSB, n_line);
905 reg_write16(encoder, REG_VS_LINE_STRT_1_MSB, vs1_line_s); 904 reg_write16(priv, REG_VS_LINE_STRT_1_MSB, vs1_line_s);
906 reg_write16(encoder, REG_VS_PIX_STRT_1_MSB, vs1_pix_s); 905 reg_write16(priv, REG_VS_PIX_STRT_1_MSB, vs1_pix_s);
907 reg_write16(encoder, REG_VS_LINE_END_1_MSB, vs1_line_e); 906 reg_write16(priv, REG_VS_LINE_END_1_MSB, vs1_line_e);
908 reg_write16(encoder, REG_VS_PIX_END_1_MSB, vs1_pix_e); 907 reg_write16(priv, REG_VS_PIX_END_1_MSB, vs1_pix_e);
909 reg_write16(encoder, REG_VS_LINE_STRT_2_MSB, vs2_line_s); 908 reg_write16(priv, REG_VS_LINE_STRT_2_MSB, vs2_line_s);
910 reg_write16(encoder, REG_VS_PIX_STRT_2_MSB, vs2_pix_s); 909 reg_write16(priv, REG_VS_PIX_STRT_2_MSB, vs2_pix_s);
911 reg_write16(encoder, REG_VS_LINE_END_2_MSB, vs2_line_e); 910 reg_write16(priv, REG_VS_LINE_END_2_MSB, vs2_line_e);
912 reg_write16(encoder, REG_VS_PIX_END_2_MSB, vs2_pix_e); 911 reg_write16(priv, REG_VS_PIX_END_2_MSB, vs2_pix_e);
913 reg_write16(encoder, REG_HS_PIX_START_MSB, hs_pix_s); 912 reg_write16(priv, REG_HS_PIX_START_MSB, hs_pix_s);
914 reg_write16(encoder, REG_HS_PIX_STOP_MSB, hs_pix_e); 913 reg_write16(priv, REG_HS_PIX_STOP_MSB, hs_pix_e);
915 reg_write16(encoder, REG_VWIN_START_1_MSB, vwin1_line_s); 914 reg_write16(priv, REG_VWIN_START_1_MSB, vwin1_line_s);
916 reg_write16(encoder, REG_VWIN_END_1_MSB, vwin1_line_e); 915 reg_write16(priv, REG_VWIN_END_1_MSB, vwin1_line_e);
917 reg_write16(encoder, REG_VWIN_START_2_MSB, vwin2_line_s); 916 reg_write16(priv, REG_VWIN_START_2_MSB, vwin2_line_s);
918 reg_write16(encoder, REG_VWIN_END_2_MSB, vwin2_line_e); 917 reg_write16(priv, REG_VWIN_END_2_MSB, vwin2_line_e);
919 reg_write16(encoder, REG_DE_START_MSB, de_pix_s); 918 reg_write16(priv, REG_DE_START_MSB, de_pix_s);
920 reg_write16(encoder, REG_DE_STOP_MSB, de_pix_e); 919 reg_write16(priv, REG_DE_STOP_MSB, de_pix_e);
921 920
922 if (priv->rev == TDA19988) { 921 if (priv->rev == TDA19988) {
923 /* let incoming pixels fill the active space (if any) */ 922 /* let incoming pixels fill the active space (if any) */
924 reg_write(encoder, REG_ENABLE_SPACE, 0x00); 923 reg_write(priv, REG_ENABLE_SPACE, 0x00);
925 } 924 }
926 925
927 /* must be last register set: */ 926 /* must be last register set: */
928 reg_clear(encoder, REG_TBG_CNTRL_0, TBG_CNTRL_0_SYNC_ONCE); 927 reg_clear(priv, REG_TBG_CNTRL_0, TBG_CNTRL_0_SYNC_ONCE);
929 928
930 /* Only setup the info frames if the sink is HDMI */ 929 /* Only setup the info frames if the sink is HDMI */
931 if (priv->is_hdmi_sink) { 930 if (priv->is_hdmi_sink) {
932 /* We need to turn HDMI HDCP stuff on to get audio through */ 931 /* We need to turn HDMI HDCP stuff on to get audio through */
933 reg_clear(encoder, REG_TBG_CNTRL_1, TBG_CNTRL_1_DWIN_DIS); 932 reg_clear(priv, REG_TBG_CNTRL_1, TBG_CNTRL_1_DWIN_DIS);
934 reg_write(encoder, REG_ENC_CNTRL, ENC_CNTRL_CTL_CODE(1)); 933 reg_write(priv, REG_ENC_CNTRL, ENC_CNTRL_CTL_CODE(1));
935 reg_set(encoder, REG_TX33, TX33_HDMI); 934 reg_set(priv, REG_TX33, TX33_HDMI);
936 935
937 tda998x_write_avi(encoder, adjusted_mode); 936 tda998x_write_avi(priv, adjusted_mode);
938 937
939 if (priv->params.audio_cfg) 938 if (priv->params.audio_cfg)
940 tda998x_configure_audio(encoder, adjusted_mode, 939 tda998x_configure_audio(priv, adjusted_mode,
941 &priv->params); 940 &priv->params);
942 } 941 }
943} 942}
@@ -946,7 +945,9 @@ static enum drm_connector_status
946tda998x_encoder_detect(struct drm_encoder *encoder, 945tda998x_encoder_detect(struct drm_encoder *encoder,
947 struct drm_connector *connector) 946 struct drm_connector *connector)
948{ 947{
949 uint8_t val = cec_read(encoder, REG_CEC_RXSHPDLEV); 948 struct tda998x_priv *priv = to_tda998x_priv(encoder);
949 uint8_t val = cec_read(priv, REG_CEC_RXSHPDLEV);
950
950 return (val & CEC_RXSHPDLEV_HPD) ? connector_status_connected : 951 return (val & CEC_RXSHPDLEV_HPD) ? connector_status_connected :
951 connector_status_disconnected; 952 connector_status_disconnected;
952} 953}
@@ -954,29 +955,30 @@ tda998x_encoder_detect(struct drm_encoder *encoder,
954static int 955static int
955read_edid_block(struct drm_encoder *encoder, uint8_t *buf, int blk) 956read_edid_block(struct drm_encoder *encoder, uint8_t *buf, int blk)
956{ 957{
958 struct tda998x_priv *priv = to_tda998x_priv(encoder);
957 uint8_t offset, segptr; 959 uint8_t offset, segptr;
958 int ret, i; 960 int ret, i;
959 961
960 /* enable EDID read irq: */ 962 /* enable EDID read irq: */
961 reg_set(encoder, REG_INT_FLAGS_2, INT_FLAGS_2_EDID_BLK_RD); 963 reg_set(priv, REG_INT_FLAGS_2, INT_FLAGS_2_EDID_BLK_RD);
962 964
963 offset = (blk & 1) ? 128 : 0; 965 offset = (blk & 1) ? 128 : 0;
964 segptr = blk / 2; 966 segptr = blk / 2;
965 967
966 reg_write(encoder, REG_DDC_ADDR, 0xa0); 968 reg_write(priv, REG_DDC_ADDR, 0xa0);
967 reg_write(encoder, REG_DDC_OFFS, offset); 969 reg_write(priv, REG_DDC_OFFS, offset);
968 reg_write(encoder, REG_DDC_SEGM_ADDR, 0x60); 970 reg_write(priv, REG_DDC_SEGM_ADDR, 0x60);
969 reg_write(encoder, REG_DDC_SEGM, segptr); 971 reg_write(priv, REG_DDC_SEGM, segptr);
970 972
971 /* enable reading EDID: */ 973 /* enable reading EDID: */
972 reg_write(encoder, REG_EDID_CTRL, 0x1); 974 reg_write(priv, REG_EDID_CTRL, 0x1);
973 975
974 /* flag must be cleared by sw: */ 976 /* flag must be cleared by sw: */
975 reg_write(encoder, REG_EDID_CTRL, 0x0); 977 reg_write(priv, REG_EDID_CTRL, 0x0);
976 978
977 /* wait for block read to complete: */ 979 /* wait for block read to complete: */
978 for (i = 100; i > 0; i--) { 980 for (i = 100; i > 0; i--) {
979 uint8_t val = reg_read(encoder, REG_INT_FLAGS_2); 981 uint8_t val = reg_read(priv, REG_INT_FLAGS_2);
980 if (val & INT_FLAGS_2_EDID_BLK_RD) 982 if (val & INT_FLAGS_2_EDID_BLK_RD)
981 break; 983 break;
982 msleep(1); 984 msleep(1);
@@ -985,14 +987,14 @@ read_edid_block(struct drm_encoder *encoder, uint8_t *buf, int blk)
985 if (i == 0) 987 if (i == 0)
986 return -ETIMEDOUT; 988 return -ETIMEDOUT;
987 989
988 ret = reg_read_range(encoder, REG_EDID_DATA_0, buf, EDID_LENGTH); 990 ret = reg_read_range(priv, REG_EDID_DATA_0, buf, EDID_LENGTH);
989 if (ret != EDID_LENGTH) { 991 if (ret != EDID_LENGTH) {
990 dev_err(encoder->dev->dev, "failed to read edid block %d: %d", 992 dev_err(encoder->dev->dev, "failed to read edid block %d: %d",
991 blk, ret); 993 blk, ret);
992 return ret; 994 return ret;
993 } 995 }
994 996
995 reg_clear(encoder, REG_INT_FLAGS_2, INT_FLAGS_2_EDID_BLK_RD); 997 reg_clear(priv, REG_INT_FLAGS_2, INT_FLAGS_2_EDID_BLK_RD);
996 998
997 return 0; 999 return 0;
998} 1000}
@@ -1009,7 +1011,7 @@ do_get_edid(struct drm_encoder *encoder)
1009 return NULL; 1011 return NULL;
1010 1012
1011 if (priv->rev == TDA19988) 1013 if (priv->rev == TDA19988)
1012 reg_clear(encoder, REG_TX4, TX4_PD_RAM); 1014 reg_clear(priv, REG_TX4, TX4_PD_RAM);
1013 1015
1014 /* base block fetch */ 1016 /* base block fetch */
1015 if (read_edid_block(encoder, block, 0)) 1017 if (read_edid_block(encoder, block, 0))
@@ -1049,13 +1051,13 @@ do_get_edid(struct drm_encoder *encoder)
1049 1051
1050done: 1052done:
1051 if (priv->rev == TDA19988) 1053 if (priv->rev == TDA19988)
1052 reg_set(encoder, REG_TX4, TX4_PD_RAM); 1054 reg_set(priv, REG_TX4, TX4_PD_RAM);
1053 1055
1054 return block; 1056 return block;
1055 1057
1056fail: 1058fail:
1057 if (priv->rev == TDA19988) 1059 if (priv->rev == TDA19988)
1058 reg_set(encoder, REG_TX4, TX4_PD_RAM); 1060 reg_set(priv, REG_TX4, TX4_PD_RAM);
1059 dev_warn(encoder->dev->dev, "failed to read EDID\n"); 1061 dev_warn(encoder->dev->dev, "failed to read EDID\n");
1060 kfree(block); 1062 kfree(block);
1061 return NULL; 1063 return NULL;
@@ -1141,7 +1143,6 @@ tda998x_encoder_init(struct i2c_client *client,
1141 struct drm_device *dev, 1143 struct drm_device *dev,
1142 struct drm_encoder_slave *encoder_slave) 1144 struct drm_encoder_slave *encoder_slave)
1143{ 1145{
1144 struct drm_encoder *encoder = &encoder_slave->base;
1145 struct tda998x_priv *priv; 1146 struct tda998x_priv *priv;
1146 1147
1147 priv = kzalloc(sizeof(*priv), GFP_KERNEL); 1148 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
@@ -1153,6 +1154,7 @@ tda998x_encoder_init(struct i2c_client *client,
1153 priv->vip_cntrl_2 = VIP_CNTRL_2_SWAP_E(4) | VIP_CNTRL_2_SWAP_F(5); 1154 priv->vip_cntrl_2 = VIP_CNTRL_2_SWAP_E(4) | VIP_CNTRL_2_SWAP_F(5);
1154 1155
1155 priv->current_page = 0xff; 1156 priv->current_page = 0xff;
1157 priv->hdmi = client;
1156 priv->cec = i2c_new_dummy(client->adapter, 0x34); 1158 priv->cec = i2c_new_dummy(client->adapter, 0x34);
1157 if (!priv->cec) { 1159 if (!priv->cec) {
1158 kfree(priv); 1160 kfree(priv);
@@ -1164,14 +1166,14 @@ tda998x_encoder_init(struct i2c_client *client,
1164 encoder_slave->slave_funcs = &tda998x_encoder_funcs; 1166 encoder_slave->slave_funcs = &tda998x_encoder_funcs;
1165 1167
1166 /* wake up the device: */ 1168 /* wake up the device: */
1167 cec_write(encoder, REG_CEC_ENAMODS, 1169 cec_write(priv, REG_CEC_ENAMODS,
1168 CEC_ENAMODS_EN_RXSENS | CEC_ENAMODS_EN_HDMI); 1170 CEC_ENAMODS_EN_RXSENS | CEC_ENAMODS_EN_HDMI);
1169 1171
1170 tda998x_reset(encoder); 1172 tda998x_reset(priv);
1171 1173
1172 /* read version: */ 1174 /* read version: */
1173 priv->rev = reg_read(encoder, REG_VERSION_LSB) | 1175 priv->rev = reg_read(priv, REG_VERSION_LSB) |
1174 reg_read(encoder, REG_VERSION_MSB) << 8; 1176 reg_read(priv, REG_VERSION_MSB) << 8;
1175 1177
1176 /* mask off feature bits: */ 1178 /* mask off feature bits: */
1177 priv->rev &= ~0x30; /* not-hdcp and not-scalar bit */ 1179 priv->rev &= ~0x30; /* not-hdcp and not-scalar bit */
@@ -1187,16 +1189,16 @@ tda998x_encoder_init(struct i2c_client *client,
1187 } 1189 }
1188 1190
1189 /* after reset, enable DDC: */ 1191 /* after reset, enable DDC: */
1190 reg_write(encoder, REG_DDC_DISABLE, 0x00); 1192 reg_write(priv, REG_DDC_DISABLE, 0x00);
1191 1193
1192 /* set clock on DDC channel: */ 1194 /* set clock on DDC channel: */
1193 reg_write(encoder, REG_TX3, 39); 1195 reg_write(priv, REG_TX3, 39);
1194 1196
1195 /* if necessary, disable multi-master: */ 1197 /* if necessary, disable multi-master: */
1196 if (priv->rev == TDA19989) 1198 if (priv->rev == TDA19989)
1197 reg_set(encoder, REG_I2C_MASTER, I2C_MASTER_DIS_MM); 1199 reg_set(priv, REG_I2C_MASTER, I2C_MASTER_DIS_MM);
1198 1200
1199 cec_write(encoder, REG_CEC_FRO_IM_CLK_CTRL, 1201 cec_write(priv, REG_CEC_FRO_IM_CLK_CTRL,
1200 CEC_FRO_IM_CLK_CTRL_GHOST_DIS | CEC_FRO_IM_CLK_CTRL_IMCLK_SEL); 1202 CEC_FRO_IM_CLK_CTRL_GHOST_DIS | CEC_FRO_IM_CLK_CTRL_IMCLK_SEL);
1201 1203
1202 return 0; 1204 return 0;