diff options
| author | Seung-Woo Kim <sw0312.kim@samsung.com> | 2012-03-16 05:47:16 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2012-03-20 05:41:46 -0400 |
| commit | 3e148baf464e5b5690ba68f3c310b06024bb862b (patch) | |
| tree | cf25742d54a38b13054c420e13f03ab11d47e8ad | |
| parent | ba3849d56bd7adc8cd1254a261e75550a1d91c8a (diff) | |
drm/exynos: enable hdmi audio feature
This patch adds hdmi audio feature for exynos drm.
With this patch, i2s channel feeds audio data in hdmi when hdmi is connected.
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
| -rw-r--r-- | drivers/gpu/drm/exynos/exynos_hdmi.c | 167 | ||||
| -rw-r--r-- | drivers/gpu/drm/exynos/regs-hdmi.h | 182 |
2 files changed, 349 insertions, 0 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c index 3583a7bdac24..575a8cbd3533 100644 --- a/drivers/gpu/drm/exynos/exynos_hdmi.c +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c | |||
| @@ -1319,6 +1319,169 @@ static struct exynos_hdmi_display_ops display_ops = { | |||
| 1319 | .power_on = hdmi_display_power_on, | 1319 | .power_on = hdmi_display_power_on, |
| 1320 | }; | 1320 | }; |
| 1321 | 1321 | ||
| 1322 | static void hdmi_set_acr(u32 freq, u8 *acr) | ||
| 1323 | { | ||
| 1324 | u32 n, cts; | ||
| 1325 | |||
| 1326 | switch (freq) { | ||
| 1327 | case 32000: | ||
| 1328 | n = 4096; | ||
| 1329 | cts = 27000; | ||
| 1330 | break; | ||
| 1331 | case 44100: | ||
| 1332 | n = 6272; | ||
| 1333 | cts = 30000; | ||
| 1334 | break; | ||
| 1335 | case 88200: | ||
| 1336 | n = 12544; | ||
| 1337 | cts = 30000; | ||
| 1338 | break; | ||
| 1339 | case 176400: | ||
| 1340 | n = 25088; | ||
| 1341 | cts = 30000; | ||
| 1342 | break; | ||
| 1343 | case 48000: | ||
| 1344 | n = 6144; | ||
| 1345 | cts = 27000; | ||
| 1346 | break; | ||
| 1347 | case 96000: | ||
| 1348 | n = 12288; | ||
| 1349 | cts = 27000; | ||
| 1350 | break; | ||
| 1351 | case 192000: | ||
| 1352 | n = 24576; | ||
| 1353 | cts = 27000; | ||
| 1354 | break; | ||
| 1355 | default: | ||
| 1356 | n = 0; | ||
| 1357 | cts = 0; | ||
| 1358 | break; | ||
| 1359 | } | ||
| 1360 | |||
| 1361 | acr[1] = cts >> 16; | ||
| 1362 | acr[2] = cts >> 8 & 0xff; | ||
| 1363 | acr[3] = cts & 0xff; | ||
| 1364 | |||
| 1365 | acr[4] = n >> 16; | ||
| 1366 | acr[5] = n >> 8 & 0xff; | ||
| 1367 | acr[6] = n & 0xff; | ||
| 1368 | } | ||
| 1369 | |||
| 1370 | static void hdmi_reg_acr(struct hdmi_context *hdata, u8 *acr) | ||
| 1371 | { | ||
| 1372 | hdmi_reg_writeb(hdata, HDMI_ACR_N0, acr[6]); | ||
| 1373 | hdmi_reg_writeb(hdata, HDMI_ACR_N1, acr[5]); | ||
| 1374 | hdmi_reg_writeb(hdata, HDMI_ACR_N2, acr[4]); | ||
| 1375 | hdmi_reg_writeb(hdata, HDMI_ACR_MCTS0, acr[3]); | ||
| 1376 | hdmi_reg_writeb(hdata, HDMI_ACR_MCTS1, acr[2]); | ||
| 1377 | hdmi_reg_writeb(hdata, HDMI_ACR_MCTS2, acr[1]); | ||
| 1378 | hdmi_reg_writeb(hdata, HDMI_ACR_CTS0, acr[3]); | ||
| 1379 | hdmi_reg_writeb(hdata, HDMI_ACR_CTS1, acr[2]); | ||
| 1380 | hdmi_reg_writeb(hdata, HDMI_ACR_CTS2, acr[1]); | ||
| 1381 | |||
| 1382 | if (hdata->is_v13) | ||
| 1383 | hdmi_reg_writeb(hdata, HDMI_V13_ACR_CON, 4); | ||
| 1384 | else | ||
| 1385 | hdmi_reg_writeb(hdata, HDMI_ACR_CON, 4); | ||
| 1386 | } | ||
| 1387 | |||
| 1388 | static void hdmi_audio_init(struct hdmi_context *hdata) | ||
| 1389 | { | ||
| 1390 | u32 sample_rate, bits_per_sample, frame_size_code; | ||
| 1391 | u32 data_num, bit_ch, sample_frq; | ||
| 1392 | u32 val; | ||
| 1393 | u8 acr[7]; | ||
| 1394 | |||
| 1395 | sample_rate = 44100; | ||
| 1396 | bits_per_sample = 16; | ||
| 1397 | frame_size_code = 0; | ||
| 1398 | |||
| 1399 | switch (bits_per_sample) { | ||
| 1400 | case 20: | ||
| 1401 | data_num = 2; | ||
| 1402 | bit_ch = 1; | ||
| 1403 | break; | ||
| 1404 | case 24: | ||
| 1405 | data_num = 3; | ||
| 1406 | bit_ch = 1; | ||
| 1407 | break; | ||
| 1408 | default: | ||
| 1409 | data_num = 1; | ||
| 1410 | bit_ch = 0; | ||
| 1411 | break; | ||
| 1412 | } | ||
| 1413 | |||
| 1414 | hdmi_set_acr(sample_rate, acr); | ||
| 1415 | hdmi_reg_acr(hdata, acr); | ||
| 1416 | |||
| 1417 | hdmi_reg_writeb(hdata, HDMI_I2S_MUX_CON, HDMI_I2S_IN_DISABLE | ||
| 1418 | | HDMI_I2S_AUD_I2S | HDMI_I2S_CUV_I2S_ENABLE | ||
| 1419 | | HDMI_I2S_MUX_ENABLE); | ||
| 1420 | |||
| 1421 | hdmi_reg_writeb(hdata, HDMI_I2S_MUX_CH, HDMI_I2S_CH0_EN | ||
| 1422 | | HDMI_I2S_CH1_EN | HDMI_I2S_CH2_EN); | ||
| 1423 | |||
| 1424 | hdmi_reg_writeb(hdata, HDMI_I2S_MUX_CUV, HDMI_I2S_CUV_RL_EN); | ||
| 1425 | |||
| 1426 | sample_frq = (sample_rate == 44100) ? 0 : | ||
| 1427 | (sample_rate == 48000) ? 2 : | ||
| 1428 | (sample_rate == 32000) ? 3 : | ||
| 1429 | (sample_rate == 96000) ? 0xa : 0x0; | ||
| 1430 | |||
| 1431 | hdmi_reg_writeb(hdata, HDMI_I2S_CLK_CON, HDMI_I2S_CLK_DIS); | ||
| 1432 | hdmi_reg_writeb(hdata, HDMI_I2S_CLK_CON, HDMI_I2S_CLK_EN); | ||
| 1433 | |||
| 1434 | val = hdmi_reg_read(hdata, HDMI_I2S_DSD_CON) | 0x01; | ||
| 1435 | hdmi_reg_writeb(hdata, HDMI_I2S_DSD_CON, val); | ||
| 1436 | |||
| 1437 | /* Configuration I2S input ports. Configure I2S_PIN_SEL_0~4 */ | ||
| 1438 | hdmi_reg_writeb(hdata, HDMI_I2S_PIN_SEL_0, HDMI_I2S_SEL_SCLK(5) | ||
| 1439 | | HDMI_I2S_SEL_LRCK(6)); | ||
| 1440 | hdmi_reg_writeb(hdata, HDMI_I2S_PIN_SEL_1, HDMI_I2S_SEL_SDATA1(1) | ||
| 1441 | | HDMI_I2S_SEL_SDATA2(4)); | ||
| 1442 | hdmi_reg_writeb(hdata, HDMI_I2S_PIN_SEL_2, HDMI_I2S_SEL_SDATA3(1) | ||
| 1443 | | HDMI_I2S_SEL_SDATA2(2)); | ||
| 1444 | hdmi_reg_writeb(hdata, HDMI_I2S_PIN_SEL_3, HDMI_I2S_SEL_DSD(0)); | ||
| 1445 | |||
| 1446 | /* I2S_CON_1 & 2 */ | ||
| 1447 | hdmi_reg_writeb(hdata, HDMI_I2S_CON_1, HDMI_I2S_SCLK_FALLING_EDGE | ||
| 1448 | | HDMI_I2S_L_CH_LOW_POL); | ||
| 1449 | hdmi_reg_writeb(hdata, HDMI_I2S_CON_2, HDMI_I2S_MSB_FIRST_MODE | ||
| 1450 | | HDMI_I2S_SET_BIT_CH(bit_ch) | ||
| 1451 | | HDMI_I2S_SET_SDATA_BIT(data_num) | ||
| 1452 | | HDMI_I2S_BASIC_FORMAT); | ||
| 1453 | |||
| 1454 | /* Configure register related to CUV information */ | ||
| 1455 | hdmi_reg_writeb(hdata, HDMI_I2S_CH_ST_0, HDMI_I2S_CH_STATUS_MODE_0 | ||
| 1456 | | HDMI_I2S_2AUD_CH_WITHOUT_PREEMPH | ||
| 1457 | | HDMI_I2S_COPYRIGHT | ||
| 1458 | | HDMI_I2S_LINEAR_PCM | ||
| 1459 | | HDMI_I2S_CONSUMER_FORMAT); | ||
| 1460 | hdmi_reg_writeb(hdata, HDMI_I2S_CH_ST_1, HDMI_I2S_CD_PLAYER); | ||
| 1461 | hdmi_reg_writeb(hdata, HDMI_I2S_CH_ST_2, HDMI_I2S_SET_SOURCE_NUM(0)); | ||
| 1462 | hdmi_reg_writeb(hdata, HDMI_I2S_CH_ST_3, HDMI_I2S_CLK_ACCUR_LEVEL_2 | ||
| 1463 | | HDMI_I2S_SET_SMP_FREQ(sample_frq)); | ||
| 1464 | hdmi_reg_writeb(hdata, HDMI_I2S_CH_ST_4, | ||
| 1465 | HDMI_I2S_ORG_SMP_FREQ_44_1 | ||
| 1466 | | HDMI_I2S_WORD_LEN_MAX24_24BITS | ||
| 1467 | | HDMI_I2S_WORD_LEN_MAX_24BITS); | ||
| 1468 | |||
| 1469 | hdmi_reg_writeb(hdata, HDMI_I2S_CH_ST_CON, HDMI_I2S_CH_STATUS_RELOAD); | ||
| 1470 | } | ||
| 1471 | |||
| 1472 | static void hdmi_audio_control(struct hdmi_context *hdata, bool onoff) | ||
| 1473 | { | ||
| 1474 | u32 mod; | ||
| 1475 | |||
| 1476 | mod = hdmi_reg_read(hdata, HDMI_MODE_SEL); | ||
| 1477 | if (mod & HDMI_DVI_MODE_EN) | ||
| 1478 | return; | ||
| 1479 | |||
| 1480 | hdmi_reg_writeb(hdata, HDMI_AUI_CON, onoff ? 2 : 0); | ||
| 1481 | hdmi_reg_writemask(hdata, HDMI_CON_0, onoff ? | ||
| 1482 | HDMI_ASP_EN : HDMI_ASP_DIS, HDMI_ASP_MASK); | ||
| 1483 | } | ||
| 1484 | |||
| 1322 | static void hdmi_conf_reset(struct hdmi_context *hdata) | 1485 | static void hdmi_conf_reset(struct hdmi_context *hdata) |
| 1323 | { | 1486 | { |
| 1324 | u32 reg; | 1487 | u32 reg; |
| @@ -1737,9 +1900,11 @@ static void hdmi_conf_apply(struct hdmi_context *hdata) | |||
| 1737 | 1900 | ||
| 1738 | hdmi_conf_reset(hdata); | 1901 | hdmi_conf_reset(hdata); |
| 1739 | hdmi_conf_init(hdata); | 1902 | hdmi_conf_init(hdata); |
| 1903 | hdmi_audio_init(hdata); | ||
| 1740 | 1904 | ||
| 1741 | /* setting core registers */ | 1905 | /* setting core registers */ |
| 1742 | hdmi_timing_apply(hdata); | 1906 | hdmi_timing_apply(hdata); |
| 1907 | hdmi_audio_control(hdata, true); | ||
| 1743 | 1908 | ||
| 1744 | hdmi_regs_dump(hdata, "start"); | 1909 | hdmi_regs_dump(hdata, "start"); |
| 1745 | } | 1910 | } |
| @@ -1825,6 +1990,7 @@ static void hdmi_disable(void *ctx) | |||
| 1825 | DRM_DEBUG_KMS("[%d] %s\n", __LINE__, __func__); | 1990 | DRM_DEBUG_KMS("[%d] %s\n", __LINE__, __func__); |
| 1826 | 1991 | ||
| 1827 | if (hdata->enabled) { | 1992 | if (hdata->enabled) { |
| 1993 | hdmi_audio_control(hdata, false); | ||
| 1828 | hdmiphy_conf_reset(hdata); | 1994 | hdmiphy_conf_reset(hdata); |
| 1829 | hdmi_conf_reset(hdata); | 1995 | hdmi_conf_reset(hdata); |
| 1830 | } | 1996 | } |
| @@ -1983,6 +2149,7 @@ static void hdmi_resource_poweron(struct hdmi_context *hdata) | |||
| 1983 | hdmiphy_conf_reset(hdata); | 2149 | hdmiphy_conf_reset(hdata); |
| 1984 | hdmi_conf_reset(hdata); | 2150 | hdmi_conf_reset(hdata); |
| 1985 | hdmi_conf_init(hdata); | 2151 | hdmi_conf_init(hdata); |
| 2152 | hdmi_audio_init(hdata); | ||
| 1986 | } | 2153 | } |
| 1987 | 2154 | ||
| 1988 | static void hdmi_resource_poweroff(struct hdmi_context *hdata) | 2155 | static void hdmi_resource_poweroff(struct hdmi_context *hdata) |
diff --git a/drivers/gpu/drm/exynos/regs-hdmi.h b/drivers/gpu/drm/exynos/regs-hdmi.h index 6b287158f76e..3c04bea842ce 100644 --- a/drivers/gpu/drm/exynos/regs-hdmi.h +++ b/drivers/gpu/drm/exynos/regs-hdmi.h | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | /* HDMI Version 1.3 & Common */ | 22 | /* HDMI Version 1.3 & Common */ |
| 23 | #define HDMI_CTRL_BASE(x) ((x) + 0x00000000) | 23 | #define HDMI_CTRL_BASE(x) ((x) + 0x00000000) |
| 24 | #define HDMI_CORE_BASE(x) ((x) + 0x00010000) | 24 | #define HDMI_CORE_BASE(x) ((x) + 0x00010000) |
| 25 | #define HDMI_I2S_BASE(x) ((x) + 0x00040000) | ||
| 25 | #define HDMI_TG_BASE(x) ((x) + 0x00050000) | 26 | #define HDMI_TG_BASE(x) ((x) + 0x00050000) |
| 26 | 27 | ||
| 27 | /* Control registers */ | 28 | /* Control registers */ |
| @@ -132,6 +133,9 @@ | |||
| 132 | 133 | ||
| 133 | /* HDMI_CON_0 */ | 134 | /* HDMI_CON_0 */ |
| 134 | #define HDMI_BLUE_SCR_EN (1 << 5) | 135 | #define HDMI_BLUE_SCR_EN (1 << 5) |
| 136 | #define HDMI_ASP_EN (1 << 2) | ||
| 137 | #define HDMI_ASP_DIS (0 << 2) | ||
| 138 | #define HDMI_ASP_MASK (1 << 2) | ||
| 135 | #define HDMI_EN (1 << 0) | 139 | #define HDMI_EN (1 << 0) |
| 136 | 140 | ||
| 137 | /* HDMI_PHY_STATUS */ | 141 | /* HDMI_PHY_STATUS */ |
| @@ -140,6 +144,8 @@ | |||
| 140 | /* HDMI_MODE_SEL */ | 144 | /* HDMI_MODE_SEL */ |
| 141 | #define HDMI_MODE_HDMI_EN (1 << 1) | 145 | #define HDMI_MODE_HDMI_EN (1 << 1) |
| 142 | #define HDMI_MODE_DVI_EN (1 << 0) | 146 | #define HDMI_MODE_DVI_EN (1 << 0) |
| 147 | #define HDMI_DVI_MODE_EN (1) | ||
| 148 | #define HDMI_DVI_MODE_DIS (0) | ||
| 143 | #define HDMI_MODE_MASK (3 << 0) | 149 | #define HDMI_MODE_MASK (3 << 0) |
| 144 | 150 | ||
| 145 | /* HDMI_TG_CMD */ | 151 | /* HDMI_TG_CMD */ |
| @@ -268,6 +274,9 @@ | |||
| 268 | #define HDMI_ACR_MCTS0 HDMI_CORE_BASE(0x0410) | 274 | #define HDMI_ACR_MCTS0 HDMI_CORE_BASE(0x0410) |
| 269 | #define HDMI_ACR_MCTS1 HDMI_CORE_BASE(0x0414) | 275 | #define HDMI_ACR_MCTS1 HDMI_CORE_BASE(0x0414) |
| 270 | #define HDMI_ACR_MCTS2 HDMI_CORE_BASE(0x0418) | 276 | #define HDMI_ACR_MCTS2 HDMI_CORE_BASE(0x0418) |
| 277 | #define HDMI_ACR_CTS0 HDMI_CORE_BASE(0x0420) | ||
| 278 | #define HDMI_ACR_CTS1 HDMI_CORE_BASE(0x0424) | ||
| 279 | #define HDMI_ACR_CTS2 HDMI_CORE_BASE(0x0428) | ||
| 271 | #define HDMI_ACR_N0 HDMI_CORE_BASE(0x0430) | 280 | #define HDMI_ACR_N0 HDMI_CORE_BASE(0x0430) |
| 272 | #define HDMI_ACR_N1 HDMI_CORE_BASE(0x0434) | 281 | #define HDMI_ACR_N1 HDMI_CORE_BASE(0x0434) |
| 273 | #define HDMI_ACR_N2 HDMI_CORE_BASE(0x0438) | 282 | #define HDMI_ACR_N2 HDMI_CORE_BASE(0x0438) |
| @@ -368,6 +377,179 @@ | |||
| 368 | #define HDMI_BLUE_SCREEN_R_0 HDMI_CORE_BASE(0xD530) | 377 | #define HDMI_BLUE_SCREEN_R_0 HDMI_CORE_BASE(0xD530) |
| 369 | #define HDMI_BLUE_SCREEN_R_1 HDMI_CORE_BASE(0xD534) | 378 | #define HDMI_BLUE_SCREEN_R_1 HDMI_CORE_BASE(0xD534) |
| 370 | 379 | ||
| 380 | /* HDMI I2S register */ | ||
| 381 | #define HDMI_I2S_CLK_CON HDMI_I2S_BASE(0x000) | ||
| 382 | #define HDMI_I2S_CON_1 HDMI_I2S_BASE(0x004) | ||
| 383 | #define HDMI_I2S_CON_2 HDMI_I2S_BASE(0x008) | ||
| 384 | #define HDMI_I2S_PIN_SEL_0 HDMI_I2S_BASE(0x00c) | ||
| 385 | #define HDMI_I2S_PIN_SEL_1 HDMI_I2S_BASE(0x010) | ||
| 386 | #define HDMI_I2S_PIN_SEL_2 HDMI_I2S_BASE(0x014) | ||
| 387 | #define HDMI_I2S_PIN_SEL_3 HDMI_I2S_BASE(0x018) | ||
| 388 | #define HDMI_I2S_DSD_CON HDMI_I2S_BASE(0x01c) | ||
| 389 | #define HDMI_I2S_MUX_CON HDMI_I2S_BASE(0x020) | ||
| 390 | #define HDMI_I2S_CH_ST_CON HDMI_I2S_BASE(0x024) | ||
| 391 | #define HDMI_I2S_CH_ST_0 HDMI_I2S_BASE(0x028) | ||
| 392 | #define HDMI_I2S_CH_ST_1 HDMI_I2S_BASE(0x02c) | ||
| 393 | #define HDMI_I2S_CH_ST_2 HDMI_I2S_BASE(0x030) | ||
| 394 | #define HDMI_I2S_CH_ST_3 HDMI_I2S_BASE(0x034) | ||
| 395 | #define HDMI_I2S_CH_ST_4 HDMI_I2S_BASE(0x038) | ||
| 396 | #define HDMI_I2S_CH_ST_SH_0 HDMI_I2S_BASE(0x03c) | ||
| 397 | #define HDMI_I2S_CH_ST_SH_1 HDMI_I2S_BASE(0x040) | ||
| 398 | #define HDMI_I2S_CH_ST_SH_2 HDMI_I2S_BASE(0x044) | ||
| 399 | #define HDMI_I2S_CH_ST_SH_3 HDMI_I2S_BASE(0x048) | ||
| 400 | #define HDMI_I2S_CH_ST_SH_4 HDMI_I2S_BASE(0x04c) | ||
| 401 | #define HDMI_I2S_MUX_CH HDMI_I2S_BASE(0x054) | ||
| 402 | #define HDMI_I2S_MUX_CUV HDMI_I2S_BASE(0x058) | ||
| 403 | |||
| 404 | /* I2S bit definition */ | ||
| 405 | |||
| 406 | /* I2S_CLK_CON */ | ||
| 407 | #define HDMI_I2S_CLK_DIS (0) | ||
| 408 | #define HDMI_I2S_CLK_EN (1) | ||
| 409 | |||
| 410 | /* I2S_CON_1 */ | ||
| 411 | #define HDMI_I2S_SCLK_FALLING_EDGE (0 << 1) | ||
| 412 | #define HDMI_I2S_SCLK_RISING_EDGE (1 << 1) | ||
| 413 | #define HDMI_I2S_L_CH_LOW_POL (0) | ||
| 414 | #define HDMI_I2S_L_CH_HIGH_POL (1) | ||
| 415 | |||
| 416 | /* I2S_CON_2 */ | ||
| 417 | #define HDMI_I2S_MSB_FIRST_MODE (0 << 6) | ||
| 418 | #define HDMI_I2S_LSB_FIRST_MODE (1 << 6) | ||
| 419 | #define HDMI_I2S_BIT_CH_32FS (0 << 4) | ||
| 420 | #define HDMI_I2S_BIT_CH_48FS (1 << 4) | ||
| 421 | #define HDMI_I2S_BIT_CH_RESERVED (2 << 4) | ||
| 422 | #define HDMI_I2S_SDATA_16BIT (1 << 2) | ||
| 423 | #define HDMI_I2S_SDATA_20BIT (2 << 2) | ||
| 424 | #define HDMI_I2S_SDATA_24BIT (3 << 2) | ||
| 425 | #define HDMI_I2S_BASIC_FORMAT (0) | ||
| 426 | #define HDMI_I2S_L_JUST_FORMAT (2) | ||
| 427 | #define HDMI_I2S_R_JUST_FORMAT (3) | ||
| 428 | #define HDMI_I2S_CON_2_CLR (~(0xFF)) | ||
| 429 | #define HDMI_I2S_SET_BIT_CH(x) (((x) & 0x7) << 4) | ||
| 430 | #define HDMI_I2S_SET_SDATA_BIT(x) (((x) & 0x7) << 2) | ||
| 431 | |||
| 432 | /* I2S_PIN_SEL_0 */ | ||
| 433 | #define HDMI_I2S_SEL_SCLK(x) (((x) & 0x7) << 4) | ||
| 434 | #define HDMI_I2S_SEL_LRCK(x) ((x) & 0x7) | ||
| 435 | |||
| 436 | /* I2S_PIN_SEL_1 */ | ||
| 437 | #define HDMI_I2S_SEL_SDATA1(x) (((x) & 0x7) << 4) | ||
| 438 | #define HDMI_I2S_SEL_SDATA2(x) ((x) & 0x7) | ||
| 439 | |||
| 440 | /* I2S_PIN_SEL_2 */ | ||
| 441 | #define HDMI_I2S_SEL_SDATA3(x) (((x) & 0x7) << 4) | ||
| 442 | #define HDMI_I2S_SEL_SDATA2(x) ((x) & 0x7) | ||
| 443 | |||
| 444 | /* I2S_PIN_SEL_3 */ | ||
| 445 | #define HDMI_I2S_SEL_DSD(x) ((x) & 0x7) | ||
| 446 | |||
| 447 | /* I2S_DSD_CON */ | ||
| 448 | #define HDMI_I2S_DSD_CLK_RI_EDGE (1 << 1) | ||
| 449 | #define HDMI_I2S_DSD_CLK_FA_EDGE (0 << 1) | ||
| 450 | #define HDMI_I2S_DSD_ENABLE (1) | ||
| 451 | #define HDMI_I2S_DSD_DISABLE (0) | ||
| 452 | |||
| 453 | /* I2S_MUX_CON */ | ||
| 454 | #define HDMI_I2S_NOISE_FILTER_ZERO (0 << 5) | ||
| 455 | #define HDMI_I2S_NOISE_FILTER_2_STAGE (1 << 5) | ||
| 456 | #define HDMI_I2S_NOISE_FILTER_3_STAGE (2 << 5) | ||
| 457 | #define HDMI_I2S_NOISE_FILTER_4_STAGE (3 << 5) | ||
| 458 | #define HDMI_I2S_NOISE_FILTER_5_STAGE (4 << 5) | ||
| 459 | #define HDMI_I2S_IN_DISABLE (1 << 4) | ||
| 460 | #define HDMI_I2S_IN_ENABLE (0 << 4) | ||
| 461 | #define HDMI_I2S_AUD_SPDIF (0 << 2) | ||
| 462 | #define HDMI_I2S_AUD_I2S (1 << 2) | ||
| 463 | #define HDMI_I2S_AUD_DSD (2 << 2) | ||
| 464 | #define HDMI_I2S_CUV_SPDIF_ENABLE (0 << 1) | ||
| 465 | #define HDMI_I2S_CUV_I2S_ENABLE (1 << 1) | ||
| 466 | #define HDMI_I2S_MUX_DISABLE (0) | ||
| 467 | #define HDMI_I2S_MUX_ENABLE (1) | ||
| 468 | #define HDMI_I2S_MUX_CON_CLR (~(0xFF)) | ||
| 469 | |||
| 470 | /* I2S_CH_ST_CON */ | ||
| 471 | #define HDMI_I2S_CH_STATUS_RELOAD (1) | ||
| 472 | #define HDMI_I2S_CH_ST_CON_CLR (~(1)) | ||
| 473 | |||
| 474 | /* I2S_CH_ST_0 / I2S_CH_ST_SH_0 */ | ||
| 475 | #define HDMI_I2S_CH_STATUS_MODE_0 (0 << 6) | ||
| 476 | #define HDMI_I2S_2AUD_CH_WITHOUT_PREEMPH (0 << 3) | ||
| 477 | #define HDMI_I2S_2AUD_CH_WITH_PREEMPH (1 << 3) | ||
| 478 | #define HDMI_I2S_DEFAULT_EMPHASIS (0 << 3) | ||
| 479 | #define HDMI_I2S_COPYRIGHT (0 << 2) | ||
| 480 | #define HDMI_I2S_NO_COPYRIGHT (1 << 2) | ||
| 481 | #define HDMI_I2S_LINEAR_PCM (0 << 1) | ||
| 482 | #define HDMI_I2S_NO_LINEAR_PCM (1 << 1) | ||
| 483 | #define HDMI_I2S_CONSUMER_FORMAT (0) | ||
| 484 | #define HDMI_I2S_PROF_FORMAT (1) | ||
| 485 | #define HDMI_I2S_CH_ST_0_CLR (~(0xFF)) | ||
| 486 | |||
| 487 | /* I2S_CH_ST_1 / I2S_CH_ST_SH_1 */ | ||
| 488 | #define HDMI_I2S_CD_PLAYER (0x00) | ||
| 489 | #define HDMI_I2S_DAT_PLAYER (0x03) | ||
| 490 | #define HDMI_I2S_DCC_PLAYER (0x43) | ||
| 491 | #define HDMI_I2S_MINI_DISC_PLAYER (0x49) | ||
| 492 | |||
| 493 | /* I2S_CH_ST_2 / I2S_CH_ST_SH_2 */ | ||
| 494 | #define HDMI_I2S_CHANNEL_NUM_MASK (0xF << 4) | ||
| 495 | #define HDMI_I2S_SOURCE_NUM_MASK (0xF) | ||
| 496 | #define HDMI_I2S_SET_CHANNEL_NUM(x) (((x) & (0xF)) << 4) | ||
| 497 | #define HDMI_I2S_SET_SOURCE_NUM(x) ((x) & (0xF)) | ||
| 498 | |||
| 499 | /* I2S_CH_ST_3 / I2S_CH_ST_SH_3 */ | ||
| 500 | #define HDMI_I2S_CLK_ACCUR_LEVEL_1 (1 << 4) | ||
| 501 | #define HDMI_I2S_CLK_ACCUR_LEVEL_2 (0 << 4) | ||
| 502 | #define HDMI_I2S_CLK_ACCUR_LEVEL_3 (2 << 4) | ||
| 503 | #define HDMI_I2S_SMP_FREQ_44_1 (0x0) | ||
| 504 | #define HDMI_I2S_SMP_FREQ_48 (0x2) | ||
| 505 | #define HDMI_I2S_SMP_FREQ_32 (0x3) | ||
| 506 | #define HDMI_I2S_SMP_FREQ_96 (0xA) | ||
| 507 | #define HDMI_I2S_SET_SMP_FREQ(x) ((x) & (0xF)) | ||
| 508 | |||
| 509 | /* I2S_CH_ST_4 / I2S_CH_ST_SH_4 */ | ||
| 510 | #define HDMI_I2S_ORG_SMP_FREQ_44_1 (0xF << 4) | ||
| 511 | #define HDMI_I2S_ORG_SMP_FREQ_88_2 (0x7 << 4) | ||
| 512 | #define HDMI_I2S_ORG_SMP_FREQ_22_05 (0xB << 4) | ||
| 513 | #define HDMI_I2S_ORG_SMP_FREQ_176_4 (0x3 << 4) | ||
| 514 | #define HDMI_I2S_WORD_LEN_NOT_DEFINE (0x0 << 1) | ||
| 515 | #define HDMI_I2S_WORD_LEN_MAX24_20BITS (0x1 << 1) | ||
| 516 | #define HDMI_I2S_WORD_LEN_MAX24_22BITS (0x2 << 1) | ||
| 517 | #define HDMI_I2S_WORD_LEN_MAX24_23BITS (0x4 << 1) | ||
| 518 | #define HDMI_I2S_WORD_LEN_MAX24_24BITS (0x5 << 1) | ||
| 519 | #define HDMI_I2S_WORD_LEN_MAX24_21BITS (0x6 << 1) | ||
| 520 | #define HDMI_I2S_WORD_LEN_MAX20_16BITS (0x1 << 1) | ||
| 521 | #define HDMI_I2S_WORD_LEN_MAX20_18BITS (0x2 << 1) | ||
| 522 | #define HDMI_I2S_WORD_LEN_MAX20_19BITS (0x4 << 1) | ||
| 523 | #define HDMI_I2S_WORD_LEN_MAX20_20BITS (0x5 << 1) | ||
| 524 | #define HDMI_I2S_WORD_LEN_MAX20_17BITS (0x6 << 1) | ||
| 525 | #define HDMI_I2S_WORD_LEN_MAX_24BITS (1) | ||
| 526 | #define HDMI_I2S_WORD_LEN_MAX_20BITS (0) | ||
| 527 | |||
| 528 | /* I2S_MUX_CH */ | ||
| 529 | #define HDMI_I2S_CH3_R_EN (1 << 7) | ||
| 530 | #define HDMI_I2S_CH3_L_EN (1 << 6) | ||
| 531 | #define HDMI_I2S_CH3_EN (3 << 6) | ||
| 532 | #define HDMI_I2S_CH2_R_EN (1 << 5) | ||
| 533 | #define HDMI_I2S_CH2_L_EN (1 << 4) | ||
| 534 | #define HDMI_I2S_CH2_EN (3 << 4) | ||
| 535 | #define HDMI_I2S_CH1_R_EN (1 << 3) | ||
| 536 | #define HDMI_I2S_CH1_L_EN (1 << 2) | ||
| 537 | #define HDMI_I2S_CH1_EN (3 << 2) | ||
| 538 | #define HDMI_I2S_CH0_R_EN (1 << 1) | ||
| 539 | #define HDMI_I2S_CH0_L_EN (1) | ||
| 540 | #define HDMI_I2S_CH0_EN (3) | ||
| 541 | #define HDMI_I2S_CH_ALL_EN (0xFF) | ||
| 542 | #define HDMI_I2S_MUX_CH_CLR (~HDMI_I2S_CH_ALL_EN) | ||
| 543 | |||
| 544 | /* I2S_MUX_CUV */ | ||
| 545 | #define HDMI_I2S_CUV_R_EN (1 << 1) | ||
| 546 | #define HDMI_I2S_CUV_L_EN (1) | ||
| 547 | #define HDMI_I2S_CUV_RL_EN (0x03) | ||
| 548 | |||
| 549 | /* I2S_CUV_L_R */ | ||
| 550 | #define HDMI_I2S_CUV_R_DATA_MASK (0x7 << 4) | ||
| 551 | #define HDMI_I2S_CUV_L_DATA_MASK (0x7) | ||
| 552 | |||
| 371 | /* Timing generator registers */ | 553 | /* Timing generator registers */ |
| 372 | /* TG configure/status registers */ | 554 | /* TG configure/status registers */ |
| 373 | #define HDMI_TG_VACT_ST3_L HDMI_TG_BASE(0x0068) | 555 | #define HDMI_TG_VACT_ST3_L HDMI_TG_BASE(0x0068) |
