1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (C) 2012 Avionic Design GmbH 4 * Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved. 5 */ 6 7 #include <linux/clk.h> 8 #include <linux/debugfs.h> 9 #include <linux/delay.h> 10 #include <linux/hdmi.h> 11 #include <linux/math64.h> 12 #include <linux/module.h> 13 #include <linux/of_device.h> 14 #include <linux/pm_opp.h> 15 #include <linux/pm_runtime.h> 16 #include <linux/regulator/consumer.h> 17 #include <linux/reset.h> 18 19 #include <soc/tegra/common.h> 20 #include <sound/hdmi-codec.h> 21 22 #include <drm/drm_atomic_helper.h> 23 #include <drm/drm_crtc.h> 24 #include <drm/drm_debugfs.h> 25 #include <drm/drm_file.h> 26 #include <drm/drm_fourcc.h> 27 #include <drm/drm_probe_helper.h> 28 #include <drm/drm_simple_kms_helper.h> 29 30 #include "hda.h" 31 #include "hdmi.h" 32 #include "drm.h" 33 #include "dc.h" 34 #include "trace.h" 35 36 #define HDMI_ELD_BUFFER_SIZE 96 37 38 struct tmds_config { 39 unsigned int pclk; 40 u32 pll0; 41 u32 pll1; 42 u32 pe_current; 43 u32 drive_current; 44 u32 peak_current; 45 }; 46 47 struct tegra_hdmi_config { 48 const struct tmds_config *tmds; 49 unsigned int num_tmds; 50 51 unsigned long fuse_override_offset; 52 u32 fuse_override_value; 53 54 bool has_sor_io_peak_current; 55 bool has_hda; 56 bool has_hbr; 57 }; 58 59 struct tegra_hdmi { 60 struct host1x_client client; 61 struct tegra_output output; 62 struct device *dev; 63 64 struct regulator *hdmi; 65 struct regulator *pll; 66 struct regulator *vdd; 67 68 void __iomem *regs; 69 unsigned int irq; 70 71 struct clk *clk_parent; 72 struct clk *clk; 73 struct reset_control *rst; 74 75 const struct tegra_hdmi_config *config; 76 77 unsigned int audio_source; 78 struct tegra_hda_format format; 79 80 unsigned int pixel_clock; 81 bool stereo; 82 bool dvi; 83 84 struct drm_info_list *debugfs_files; 85 86 struct platform_device *audio_pdev; 87 struct mutex audio_lock; 88 }; 89 90 static inline struct tegra_hdmi * 91 host1x_client_to_hdmi(struct host1x_client *client) 92 { 93 return container_of(client, struct tegra_hdmi, client); 94 } 95 96 static inline struct tegra_hdmi *to_hdmi(struct tegra_output *output) 97 { 98 return container_of(output, struct tegra_hdmi, output); 99 } 100 101 #define HDMI_AUDIOCLK_FREQ 216000000 102 #define HDMI_REKEY_DEFAULT 56 103 104 enum { 105 AUTO = 0, 106 SPDIF, 107 HDA, 108 }; 109 110 static inline u32 tegra_hdmi_readl(struct tegra_hdmi *hdmi, 111 unsigned int offset) 112 { 113 u32 value = readl(hdmi->regs + (offset << 2)); 114 115 trace_hdmi_readl(hdmi->dev, offset, value); 116 117 return value; 118 } 119 120 static inline void tegra_hdmi_writel(struct tegra_hdmi *hdmi, u32 value, 121 unsigned int offset) 122 { 123 trace_hdmi_writel(hdmi->dev, offset, value); 124 writel(value, hdmi->regs + (offset << 2)); 125 } 126 127 struct tegra_hdmi_audio_config { 128 unsigned int n; 129 unsigned int cts; 130 unsigned int aval; 131 }; 132 133 static const struct tmds_config tegra20_tmds_config[] = { 134 { /* slow pixel clock modes */ 135 .pclk = 27000000, 136 .pll0 = SOR_PLL_BG_V17_S(3) | SOR_PLL_ICHPMP(1) | 137 SOR_PLL_RESISTORSEL | SOR_PLL_VCOCAP(0) | 138 SOR_PLL_TX_REG_LOAD(3), 139 .pll1 = SOR_PLL_TMDS_TERM_ENABLE, 140 .pe_current = PE_CURRENT0(PE_CURRENT_0_0_mA) | 141 PE_CURRENT1(PE_CURRENT_0_0_mA) | 142 PE_CURRENT2(PE_CURRENT_0_0_mA) | 143 PE_CURRENT3(PE_CURRENT_0_0_mA), 144 .drive_current = DRIVE_CURRENT_LANE0(DRIVE_CURRENT_7_125_mA) | 145 DRIVE_CURRENT_LANE1(DRIVE_CURRENT_7_125_mA) | 146 DRIVE_CURRENT_LANE2(DRIVE_CURRENT_7_125_mA) | 147 DRIVE_CURRENT_LANE3(DRIVE_CURRENT_7_125_mA), 148 }, 149 { /* high pixel clock modes */ 150 .pclk = UINT_MAX, 151 .pll0 = SOR_PLL_BG_V17_S(3) | SOR_PLL_ICHPMP(1) | 152 SOR_PLL_RESISTORSEL | SOR_PLL_VCOCAP(1) | 153 SOR_PLL_TX_REG_LOAD(3), 154 .pll1 = SOR_PLL_TMDS_TERM_ENABLE | SOR_PLL_PE_EN, 155 .pe_current = PE_CURRENT0(PE_CURRENT_6_0_mA) | 156 PE_CURRENT1(PE_CURRENT_6_0_mA) | 157 PE_CURRENT2(PE_CURRENT_6_0_mA) | 158 PE_CURRENT3(PE_CURRENT_6_0_mA), 159 .drive_current = DRIVE_CURRENT_LANE0(DRIVE_CURRENT_7_125_mA) | 160 DRIVE_CURRENT_LANE1(DRIVE_CURRENT_7_125_mA) | 161 DRIVE_CURRENT_LANE2(DRIVE_CURRENT_7_125_mA) | 162 DRIVE_CURRENT_LANE3(DRIVE_CURRENT_7_125_mA), 163 }, 164 }; 165 166 static const struct tmds_config tegra30_tmds_config[] = { 167 { /* 480p modes */ 168 .pclk = 27000000, 169 .pll0 = SOR_PLL_BG_V17_S(3) | SOR_PLL_ICHPMP(1) | 170 SOR_PLL_RESISTORSEL | SOR_PLL_VCOCAP(0) | 171 SOR_PLL_TX_REG_LOAD(0), 172 .pll1 = SOR_PLL_TMDS_TERM_ENABLE, 173 .pe_current = PE_CURRENT0(PE_CURRENT_0_0_mA) | 174 PE_CURRENT1(PE_CURRENT_0_0_mA) | 175 PE_CURRENT2(PE_CURRENT_0_0_mA) | 176 PE_CURRENT3(PE_CURRENT_0_0_mA), 177 .drive_current = DRIVE_CURRENT_LANE0(DRIVE_CURRENT_5_250_mA) | 178 DRIVE_CURRENT_LANE1(DRIVE_CURRENT_5_250_mA) | 179 DRIVE_CURRENT_LANE2(DRIVE_CURRENT_5_250_mA) | 180 DRIVE_CURRENT_LANE3(DRIVE_CURRENT_5_250_mA), 181 }, { /* 720p modes */ 182 .pclk = 74250000, 183 .pll0 = SOR_PLL_BG_V17_S(3) | SOR_PLL_ICHPMP(1) | 184 SOR_PLL_RESISTORSEL | SOR_PLL_VCOCAP(1) | 185 SOR_PLL_TX_REG_LOAD(0), 186 .pll1 = SOR_PLL_TMDS_TERM_ENABLE | SOR_PLL_PE_EN, 187 .pe_current = PE_CURRENT0(PE_CURRENT_5_0_mA) | 188 PE_CURRENT1(PE_CURRENT_5_0_mA) | 189 PE_CURRENT2(PE_CURRENT_5_0_mA) | 190 PE_CURRENT3(PE_CURRENT_5_0_mA), 191 .drive_current = DRIVE_CURRENT_LANE0(DRIVE_CURRENT_5_250_mA) | 192 DRIVE_CURRENT_LANE1(DRIVE_CURRENT_5_250_mA) | 193 DRIVE_CURRENT_LANE2(DRIVE_CURRENT_5_250_mA) | 194 DRIVE_CURRENT_LANE3(DRIVE_CURRENT_5_250_mA), 195 }, { /* 1080p modes */ 196 .pclk = UINT_MAX, 197 .pll0 = SOR_PLL_BG_V17_S(3) | SOR_PLL_ICHPMP(1) | 198 SOR_PLL_RESISTORSEL | SOR_PLL_VCOCAP(3) | 199 SOR_PLL_TX_REG_LOAD(0), 200 .pll1 = SOR_PLL_TMDS_TERM_ENABLE | SOR_PLL_PE_EN, 201 .pe_current = PE_CURRENT0(PE_CURRENT_5_0_mA) | 202 PE_CURRENT1(PE_CURRENT_5_0_mA) | 203 PE_CURRENT2(PE_CURRENT_5_0_mA) | 204 PE_CURRENT3(PE_CURRENT_5_0_mA), 205 .drive_current = DRIVE_CURRENT_LANE0(DRIVE_CURRENT_5_250_mA) | 206 DRIVE_CURRENT_LANE1(DRIVE_CURRENT_5_250_mA) | 207 DRIVE_CURRENT_LANE2(DRIVE_CURRENT_5_250_mA) | 208 DRIVE_CURRENT_LANE3(DRIVE_CURRENT_5_250_mA), 209 }, 210 }; 211 212 static const struct tmds_config tegra114_tmds_config[] = { 213 { /* 480p/576p / 25.2MHz/27MHz modes */ 214 .pclk = 27000000, 215 .pll0 = SOR_PLL_ICHPMP(1) | SOR_PLL_BG_V17_S(3) | 216 SOR_PLL_VCOCAP(0) | SOR_PLL_RESISTORSEL, 217 .pll1 = SOR_PLL_LOADADJ(3) | SOR_PLL_TMDS_TERMADJ(0), 218 .pe_current = PE_CURRENT0(PE_CURRENT_0_mA_T114) | 219 PE_CURRENT1(PE_CURRENT_0_mA_T114) | 220 PE_CURRENT2(PE_CURRENT_0_mA_T114) | 221 PE_CURRENT3(PE_CURRENT_0_mA_T114), 222 .drive_current = 223 DRIVE_CURRENT_LANE0_T114(DRIVE_CURRENT_10_400_mA_T114) | 224 DRIVE_CURRENT_LANE1_T114(DRIVE_CURRENT_10_400_mA_T114) | 225 DRIVE_CURRENT_LANE2_T114(DRIVE_CURRENT_10_400_mA_T114) | 226 DRIVE_CURRENT_LANE3_T114(DRIVE_CURRENT_10_400_mA_T114), 227 .peak_current = PEAK_CURRENT_LANE0(PEAK_CURRENT_0_000_mA) | 228 PEAK_CURRENT_LANE1(PEAK_CURRENT_0_000_mA) | 229 PEAK_CURRENT_LANE2(PEAK_CURRENT_0_000_mA) | 230 PEAK_CURRENT_LANE3(PEAK_CURRENT_0_000_mA), 231 }, { /* 720p / 74.25MHz modes */ 232 .pclk = 74250000, 233 .pll0 = SOR_PLL_ICHPMP(1) | SOR_PLL_BG_V17_S(3) | 234 SOR_PLL_VCOCAP(1) | SOR_PLL_RESISTORSEL, 235 .pll1 = SOR_PLL_PE_EN | SOR_PLL_LOADADJ(3) | 236 SOR_PLL_TMDS_TERMADJ(0), 237 .pe_current = PE_CURRENT0(PE_CURRENT_15_mA_T114) | 238 PE_CURRENT1(PE_CURRENT_15_mA_T114) | 239 PE_CURRENT2(PE_CURRENT_15_mA_T114) | 240 PE_CURRENT3(PE_CURRENT_15_mA_T114), 241 .drive_current = 242 DRIVE_CURRENT_LANE0_T114(DRIVE_CURRENT_10_400_mA_T114) | 243 DRIVE_CURRENT_LANE1_T114(DRIVE_CURRENT_10_400_mA_T114) | 244 DRIVE_CURRENT_LANE2_T114(DRIVE_CURRENT_10_400_mA_T114) | 245 DRIVE_CURRENT_LANE3_T114(DRIVE_CURRENT_10_400_mA_T114), 246 .peak_current = PEAK_CURRENT_LANE0(PEAK_CURRENT_0_000_mA) | 247 PEAK_CURRENT_LANE1(PEAK_CURRENT_0_000_mA) | 248 PEAK_CURRENT_LANE2(PEAK_CURRENT_0_000_mA) | 249 PEAK_CURRENT_LANE3(PEAK_CURRENT_0_000_mA), 250 }, { /* 1080p / 148.5MHz modes */ 251 .pclk = 148500000, 252 .pll0 = SOR_PLL_ICHPMP(1) | SOR_PLL_BG_V17_S(3) | 253 SOR_PLL_VCOCAP(3) | SOR_PLL_RESISTORSEL, 254 .pll1 = SOR_PLL_PE_EN | SOR_PLL_LOADADJ(3) | 255 SOR_PLL_TMDS_TERMADJ(0), 256 .pe_current = PE_CURRENT0(PE_CURRENT_10_mA_T114) | 257 PE_CURRENT1(PE_CURRENT_10_mA_T114) | 258 PE_CURRENT2(PE_CURRENT_10_mA_T114) | 259 PE_CURRENT3(PE_CURRENT_10_mA_T114), 260 .drive_current = 261 DRIVE_CURRENT_LANE0_T114(DRIVE_CURRENT_12_400_mA_T114) | 262 DRIVE_CURRENT_LANE1_T114(DRIVE_CURRENT_12_400_mA_T114) | 263 DRIVE_CURRENT_LANE2_T114(DRIVE_CURRENT_12_400_mA_T114) | 264 DRIVE_CURRENT_LANE3_T114(DRIVE_CURRENT_12_400_mA_T114), 265 .peak_current = PEAK_CURRENT_LANE0(PEAK_CURRENT_0_000_mA) | 266 PEAK_CURRENT_LANE1(PEAK_CURRENT_0_000_mA) | 267 PEAK_CURRENT_LANE2(PEAK_CURRENT_0_000_mA) | 268 PEAK_CURRENT_LANE3(PEAK_CURRENT_0_000_mA), 269 }, { /* 225/297MHz modes */ 270 .pclk = UINT_MAX, 271 .pll0 = SOR_PLL_ICHPMP(1) | SOR_PLL_BG_V17_S(3) | 272 SOR_PLL_VCOCAP(0xf) | SOR_PLL_RESISTORSEL, 273 .pll1 = SOR_PLL_LOADADJ(3) | SOR_PLL_TMDS_TERMADJ(7) 274 | SOR_PLL_TMDS_TERM_ENABLE, 275 .pe_current = PE_CURRENT0(PE_CURRENT_0_mA_T114) | 276 PE_CURRENT1(PE_CURRENT_0_mA_T114) | 277 PE_CURRENT2(PE_CURRENT_0_mA_T114) | 278 PE_CURRENT3(PE_CURRENT_0_mA_T114), 279 .drive_current = 280 DRIVE_CURRENT_LANE0_T114(DRIVE_CURRENT_25_200_mA_T114) | 281 DRIVE_CURRENT_LANE1_T114(DRIVE_CURRENT_25_200_mA_T114) | 282 DRIVE_CURRENT_LANE2_T114(DRIVE_CURRENT_25_200_mA_T114) | 283 DRIVE_CURRENT_LANE3_T114(DRIVE_CURRENT_19_200_mA_T114), 284 .peak_current = PEAK_CURRENT_LANE0(PEAK_CURRENT_3_000_mA) | 285 PEAK_CURRENT_LANE1(PEAK_CURRENT_3_000_mA) | 286 PEAK_CURRENT_LANE2(PEAK_CURRENT_3_000_mA) | 287 PEAK_CURRENT_LANE3(PEAK_CURRENT_0_800_mA), 288 }, 289 }; 290 291 static const struct tmds_config tegra124_tmds_config[] = { 292 { /* 480p/576p / 25.2MHz/27MHz modes */ 293 .pclk = 27000000, 294 .pll0 = SOR_PLL_ICHPMP(1) | SOR_PLL_BG_V17_S(3) | 295 SOR_PLL_VCOCAP(0) | SOR_PLL_RESISTORSEL, 296 .pll1 = SOR_PLL_LOADADJ(3) | SOR_PLL_TMDS_TERMADJ(0), 297 .pe_current = PE_CURRENT0(PE_CURRENT_0_mA_T114) | 298 PE_CURRENT1(PE_CURRENT_0_mA_T114) | 299 PE_CURRENT2(PE_CURRENT_0_mA_T114) | 300 PE_CURRENT3(PE_CURRENT_0_mA_T114), 301 .drive_current = 302 DRIVE_CURRENT_LANE0_T114(DRIVE_CURRENT_10_400_mA_T114) | 303 DRIVE_CURRENT_LANE1_T114(DRIVE_CURRENT_10_400_mA_T114) | 304 DRIVE_CURRENT_LANE2_T114(DRIVE_CURRENT_10_400_mA_T114) | 305 DRIVE_CURRENT_LANE3_T114(DRIVE_CURRENT_10_400_mA_T114), 306 .peak_current = PEAK_CURRENT_LANE0(PEAK_CURRENT_0_000_mA) | 307 PEAK_CURRENT_LANE1(PEAK_CURRENT_0_000_mA) | 308 PEAK_CURRENT_LANE2(PEAK_CURRENT_0_000_mA) | 309 PEAK_CURRENT_LANE3(PEAK_CURRENT_0_000_mA), 310 }, { /* 720p / 74.25MHz modes */ 311 .pclk = 74250000, 312 .pll0 = SOR_PLL_ICHPMP(1) | SOR_PLL_BG_V17_S(3) | 313 SOR_PLL_VCOCAP(1) | SOR_PLL_RESISTORSEL, 314 .pll1 = SOR_PLL_PE_EN | SOR_PLL_LOADADJ(3) | 315 SOR_PLL_TMDS_TERMADJ(0), 316 .pe_current = PE_CURRENT0(PE_CURRENT_15_mA_T114) | 317 PE_CURRENT1(PE_CURRENT_15_mA_T114) | 318 PE_CURRENT2(PE_CURRENT_15_mA_T114) | 319 PE_CURRENT3(PE_CURRENT_15_mA_T114), 320 .drive_current = 321 DRIVE_CURRENT_LANE0_T114(DRIVE_CURRENT_10_400_mA_T114) | 322 DRIVE_CURRENT_LANE1_T114(DRIVE_CURRENT_10_400_mA_T114) | 323 DRIVE_CURRENT_LANE2_T114(DRIVE_CURRENT_10_400_mA_T114) | 324 DRIVE_CURRENT_LANE3_T114(DRIVE_CURRENT_10_400_mA_T114), 325 .peak_current = PEAK_CURRENT_LANE0(PEAK_CURRENT_0_000_mA) | 326 PEAK_CURRENT_LANE1(PEAK_CURRENT_0_000_mA) | 327 PEAK_CURRENT_LANE2(PEAK_CURRENT_0_000_mA) | 328 PEAK_CURRENT_LANE3(PEAK_CURRENT_0_000_mA), 329 }, { /* 1080p / 148.5MHz modes */ 330 .pclk = 148500000, 331 .pll0 = SOR_PLL_ICHPMP(1) | SOR_PLL_BG_V17_S(3) | 332 SOR_PLL_VCOCAP(3) | SOR_PLL_RESISTORSEL, 333 .pll1 = SOR_PLL_PE_EN | SOR_PLL_LOADADJ(3) | 334 SOR_PLL_TMDS_TERMADJ(0), 335 .pe_current = PE_CURRENT0(PE_CURRENT_10_mA_T114) | 336 PE_CURRENT1(PE_CURRENT_10_mA_T114) | 337 PE_CURRENT2(PE_CURRENT_10_mA_T114) | 338 PE_CURRENT3(PE_CURRENT_10_mA_T114), 339 .drive_current = 340 DRIVE_CURRENT_LANE0_T114(DRIVE_CURRENT_12_400_mA_T114) | 341 DRIVE_CURRENT_LANE1_T114(DRIVE_CURRENT_12_400_mA_T114) | 342 DRIVE_CURRENT_LANE2_T114(DRIVE_CURRENT_12_400_mA_T114) | 343 DRIVE_CURRENT_LANE3_T114(DRIVE_CURRENT_12_400_mA_T114), 344 .peak_current = PEAK_CURRENT_LANE0(PEAK_CURRENT_0_000_mA) | 345 PEAK_CURRENT_LANE1(PEAK_CURRENT_0_000_mA) | 346 PEAK_CURRENT_LANE2(PEAK_CURRENT_0_000_mA) | 347 PEAK_CURRENT_LANE3(PEAK_CURRENT_0_000_mA), 348 }, { /* 225/297MHz modes */ 349 .pclk = UINT_MAX, 350 .pll0 = SOR_PLL_ICHPMP(1) | SOR_PLL_BG_V17_S(3) | 351 SOR_PLL_VCOCAP(0xf) | SOR_PLL_RESISTORSEL, 352 .pll1 = SOR_PLL_LOADADJ(3) | SOR_PLL_TMDS_TERMADJ(7) 353 | SOR_PLL_TMDS_TERM_ENABLE, 354 .pe_current = PE_CURRENT0(PE_CURRENT_0_mA_T114) | 355 PE_CURRENT1(PE_CURRENT_0_mA_T114) | 356 PE_CURRENT2(PE_CURRENT_0_mA_T114) | 357 PE_CURRENT3(PE_CURRENT_0_mA_T114), 358 .drive_current = 359 DRIVE_CURRENT_LANE0_T114(DRIVE_CURRENT_25_200_mA_T114) | 360 DRIVE_CURRENT_LANE1_T114(DRIVE_CURRENT_25_200_mA_T114) | 361 DRIVE_CURRENT_LANE2_T114(DRIVE_CURRENT_25_200_mA_T114) | 362 DRIVE_CURRENT_LANE3_T114(DRIVE_CURRENT_19_200_mA_T114), 363 .peak_current = PEAK_CURRENT_LANE0(PEAK_CURRENT_3_000_mA) | 364 PEAK_CURRENT_LANE1(PEAK_CURRENT_3_000_mA) | 365 PEAK_CURRENT_LANE2(PEAK_CURRENT_3_000_mA) | 366 PEAK_CURRENT_LANE3(PEAK_CURRENT_0_800_mA), 367 }, 368 }; 369 370 static void tegra_hdmi_audio_lock(struct tegra_hdmi *hdmi) 371 { 372 mutex_lock(&hdmi->audio_lock); 373 disable_irq(hdmi->irq); 374 } 375 376 static void tegra_hdmi_audio_unlock(struct tegra_hdmi *hdmi) 377 { 378 enable_irq(hdmi->irq); 379 mutex_unlock(&hdmi->audio_lock); 380 } 381 382 static int 383 tegra_hdmi_get_audio_config(unsigned int audio_freq, unsigned int pix_clock, 384 struct tegra_hdmi_audio_config *config) 385 { 386 const unsigned int afreq = 128 * audio_freq; 387 const unsigned int min_n = afreq / 1500; 388 const unsigned int max_n = afreq / 300; 389 const unsigned int ideal_n = afreq / 1000; 390 int64_t min_err = (uint64_t)-1 >> 1; 391 unsigned int min_delta = -1; 392 int n; 393 394 memset(config, 0, sizeof(*config)); 395 config->n = -1; 396 397 for (n = min_n; n <= max_n; n++) { 398 uint64_t cts_f, aval_f; 399 unsigned int delta; 400 int64_t cts, err; 401 402 /* compute aval in 48.16 fixed point */ 403 aval_f = ((int64_t)24000000 << 16) * n; 404 do_div(aval_f, afreq); 405 /* It should round without any rest */ 406 if (aval_f & 0xFFFF) 407 continue; 408 409 /* Compute cts in 48.16 fixed point */ 410 cts_f = ((int64_t)pix_clock << 16) * n; 411 do_div(cts_f, afreq); 412 /* Round it to the nearest integer */ 413 cts = (cts_f & ~0xFFFF) + ((cts_f & BIT(15)) << 1); 414 415 delta = abs(n - ideal_n); 416 417 /* Compute the absolute error */ 418 err = abs((int64_t)cts_f - cts); 419 if (err < min_err || (err == min_err && delta < min_delta)) { 420 config->n = n; 421 config->cts = cts >> 16; 422 config->aval = aval_f >> 16; 423 min_delta = delta; 424 min_err = err; 425 } 426 } 427 428 return config->n != -1 ? 0 : -EINVAL; 429 } 430 431 static void tegra_hdmi_setup_audio_fs_tables(struct tegra_hdmi *hdmi) 432 { 433 const unsigned int freqs[] = { 434 32000, 44100, 48000, 88200, 96000, 176400, 192000 435 }; 436 unsigned int i; 437 438 for (i = 0; i < ARRAY_SIZE(freqs); i++) { 439 unsigned int f = freqs[i]; 440 unsigned int eight_half; 441 unsigned int delta; 442 u32 value; 443 444 if (f > 96000) 445 delta = 2; 446 else if (f > 48000) 447 delta = 6; 448 else 449 delta = 9; 450 451 eight_half = (8 * HDMI_AUDIOCLK_FREQ) / (f * 128); 452 value = AUDIO_FS_LOW(eight_half - delta) | 453 AUDIO_FS_HIGH(eight_half + delta); 454 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_AUDIO_FS(i)); 455 } 456 } 457 458 static void tegra_hdmi_write_aval(struct tegra_hdmi *hdmi, u32 value) 459 { 460 static const struct { 461 unsigned int sample_rate; 462 unsigned int offset; 463 } regs[] = { 464 { 32000, HDMI_NV_PDISP_SOR_AUDIO_AVAL_0320 }, 465 { 44100, HDMI_NV_PDISP_SOR_AUDIO_AVAL_0441 }, 466 { 48000, HDMI_NV_PDISP_SOR_AUDIO_AVAL_0480 }, 467 { 88200, HDMI_NV_PDISP_SOR_AUDIO_AVAL_0882 }, 468 { 96000, HDMI_NV_PDISP_SOR_AUDIO_AVAL_0960 }, 469 { 176400, HDMI_NV_PDISP_SOR_AUDIO_AVAL_1764 }, 470 { 192000, HDMI_NV_PDISP_SOR_AUDIO_AVAL_1920 }, 471 }; 472 unsigned int i; 473 474 for (i = 0; i < ARRAY_SIZE(regs); i++) { 475 if (regs[i].sample_rate == hdmi->format.sample_rate) { 476 tegra_hdmi_writel(hdmi, value, regs[i].offset); 477 break; 478 } 479 } 480 } 481 482 static int tegra_hdmi_setup_audio(struct tegra_hdmi *hdmi) 483 { 484 struct tegra_hdmi_audio_config config; 485 u32 source, value; 486 int err; 487 488 switch (hdmi->audio_source) { 489 case HDA: 490 if (hdmi->config->has_hda) 491 source = SOR_AUDIO_CNTRL0_SOURCE_SELECT_HDAL; 492 else 493 return -EINVAL; 494 495 break; 496 497 case SPDIF: 498 if (hdmi->config->has_hda) 499 source = SOR_AUDIO_CNTRL0_SOURCE_SELECT_SPDIF; 500 else 501 source = AUDIO_CNTRL0_SOURCE_SELECT_SPDIF; 502 break; 503 504 default: 505 if (hdmi->config->has_hda) 506 source = SOR_AUDIO_CNTRL0_SOURCE_SELECT_AUTO; 507 else 508 source = AUDIO_CNTRL0_SOURCE_SELECT_AUTO; 509 break; 510 } 511 512 /* 513 * Tegra30 and later use a slightly modified version of the register 514 * layout to accomodate for changes related to supporting HDA as the 515 * audio input source for HDMI. The source select field has moved to 516 * the SOR_AUDIO_CNTRL0 register, but the error tolerance and frames 517 * per block fields remain in the AUDIO_CNTRL0 register. 518 */ 519 if (hdmi->config->has_hda) { 520 /* 521 * Inject null samples into the audio FIFO for every frame in 522 * which the codec did not receive any samples. This applies 523 * to stereo LPCM only. 524 * 525 * XXX: This seems to be a remnant of MCP days when this was 526 * used to work around issues with monitors not being able to 527 * play back system startup sounds early. It is possibly not 528 * needed on Linux at all. 529 */ 530 if (hdmi->format.channels == 2) 531 value = SOR_AUDIO_CNTRL0_INJECT_NULLSMPL; 532 else 533 value = 0; 534 535 value |= source; 536 537 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_AUDIO_CNTRL0); 538 } 539 540 /* 541 * On Tegra20, HDA is not a supported audio source and the source 542 * select field is part of the AUDIO_CNTRL0 register. 543 */ 544 value = AUDIO_CNTRL0_FRAMES_PER_BLOCK(0xc0) | 545 AUDIO_CNTRL0_ERROR_TOLERANCE(6); 546 547 if (!hdmi->config->has_hda) 548 value |= source; 549 550 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_AUDIO_CNTRL0); 551 552 /* 553 * Advertise support for High Bit-Rate on Tegra114 and later. 554 */ 555 if (hdmi->config->has_hbr) { 556 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_SOR_AUDIO_SPARE0); 557 value |= SOR_AUDIO_SPARE0_HBR_ENABLE; 558 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_AUDIO_SPARE0); 559 } 560 561 err = tegra_hdmi_get_audio_config(hdmi->format.sample_rate, 562 hdmi->pixel_clock, &config); 563 if (err < 0) { 564 dev_err(hdmi->dev, 565 "cannot set audio to %u Hz at %u Hz pixel clock\n", 566 hdmi->format.sample_rate, hdmi->pixel_clock); 567 return err; 568 } 569 570 dev_dbg(hdmi->dev, "audio: pixclk=%u, n=%u, cts=%u, aval=%u\n", 571 hdmi->pixel_clock, config.n, config.cts, config.aval); 572 573 tegra_hdmi_writel(hdmi, 0, HDMI_NV_PDISP_HDMI_ACR_CTRL); 574 575 value = AUDIO_N_RESETF | AUDIO_N_GENERATE_ALTERNATE | 576 AUDIO_N_VALUE(config.n - 1); 577 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_AUDIO_N); 578 579 tegra_hdmi_writel(hdmi, ACR_SUBPACK_N(config.n) | ACR_ENABLE, 580 HDMI_NV_PDISP_HDMI_ACR_0441_SUBPACK_HIGH); 581 582 tegra_hdmi_writel(hdmi, ACR_SUBPACK_CTS(config.cts), 583 HDMI_NV_PDISP_HDMI_ACR_0441_SUBPACK_LOW); 584 585 value = SPARE_HW_CTS | SPARE_FORCE_SW_CTS | SPARE_CTS_RESET_VAL(1); 586 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_SPARE); 587 588 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_AUDIO_N); 589 value &= ~AUDIO_N_RESETF; 590 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_AUDIO_N); 591 592 if (hdmi->config->has_hda) 593 tegra_hdmi_write_aval(hdmi, config.aval); 594 595 tegra_hdmi_setup_audio_fs_tables(hdmi); 596 597 return 0; 598 } 599 600 static void tegra_hdmi_disable_audio(struct tegra_hdmi *hdmi) 601 { 602 u32 value; 603 604 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_HDMI_GENERIC_CTRL); 605 value &= ~GENERIC_CTRL_AUDIO; 606 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_GENERIC_CTRL); 607 } 608 609 static void tegra_hdmi_enable_audio(struct tegra_hdmi *hdmi) 610 { 611 u32 value; 612 613 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_HDMI_GENERIC_CTRL); 614 value |= GENERIC_CTRL_AUDIO; 615 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_GENERIC_CTRL); 616 } 617 618 static void tegra_hdmi_write_eld(struct tegra_hdmi *hdmi) 619 { 620 size_t length = drm_eld_size(hdmi->output.connector.eld), i; 621 u32 value; 622 623 for (i = 0; i < length; i++) 624 tegra_hdmi_writel(hdmi, i << 8 | hdmi->output.connector.eld[i], 625 HDMI_NV_PDISP_SOR_AUDIO_HDA_ELD_BUFWR); 626 627 /* 628 * The HDA codec will always report an ELD buffer size of 96 bytes and 629 * the HDA codec driver will check that each byte read from the buffer 630 * is valid. Therefore every byte must be written, even if no 96 bytes 631 * were parsed from EDID. 632 */ 633 for (i = length; i < HDMI_ELD_BUFFER_SIZE; i++) 634 tegra_hdmi_writel(hdmi, i << 8 | 0, 635 HDMI_NV_PDISP_SOR_AUDIO_HDA_ELD_BUFWR); 636 637 value = SOR_AUDIO_HDA_PRESENSE_VALID | SOR_AUDIO_HDA_PRESENSE_PRESENT; 638 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_AUDIO_HDA_PRESENSE); 639 } 640 641 static inline u32 tegra_hdmi_subpack(const u8 *ptr, size_t size) 642 { 643 u32 value = 0; 644 size_t i; 645 646 for (i = size; i > 0; i--) 647 value = (value << 8) | ptr[i - 1]; 648 649 return value; 650 } 651 652 static void tegra_hdmi_write_infopack(struct tegra_hdmi *hdmi, const void *data, 653 size_t size) 654 { 655 const u8 *ptr = data; 656 unsigned long offset; 657 size_t i, j; 658 u32 value; 659 660 switch (ptr[0]) { 661 case HDMI_INFOFRAME_TYPE_AVI: 662 offset = HDMI_NV_PDISP_HDMI_AVI_INFOFRAME_HEADER; 663 break; 664 665 case HDMI_INFOFRAME_TYPE_AUDIO: 666 offset = HDMI_NV_PDISP_HDMI_AUDIO_INFOFRAME_HEADER; 667 break; 668 669 case HDMI_INFOFRAME_TYPE_VENDOR: 670 offset = HDMI_NV_PDISP_HDMI_GENERIC_HEADER; 671 break; 672 673 default: 674 dev_err(hdmi->dev, "unsupported infoframe type: %02x\n", 675 ptr[0]); 676 return; 677 } 678 679 value = INFOFRAME_HEADER_TYPE(ptr[0]) | 680 INFOFRAME_HEADER_VERSION(ptr[1]) | 681 INFOFRAME_HEADER_LEN(ptr[2]); 682 tegra_hdmi_writel(hdmi, value, offset); 683 offset++; 684 685 /* 686 * Each subpack contains 7 bytes, divided into: 687 * - subpack_low: bytes 0 - 3 688 * - subpack_high: bytes 4 - 6 (with byte 7 padded to 0x00) 689 */ 690 for (i = 3, j = 0; i < size; i += 7, j += 8) { 691 size_t rem = size - i, num = min_t(size_t, rem, 4); 692 693 value = tegra_hdmi_subpack(&ptr[i], num); 694 tegra_hdmi_writel(hdmi, value, offset++); 695 696 num = min_t(size_t, rem - num, 3); 697 698 value = tegra_hdmi_subpack(&ptr[i + 4], num); 699 tegra_hdmi_writel(hdmi, value, offset++); 700 } 701 } 702 703 static void tegra_hdmi_setup_avi_infoframe(struct tegra_hdmi *hdmi, 704 struct drm_display_mode *mode) 705 { 706 struct hdmi_avi_infoframe frame; 707 u8 buffer[17]; 708 ssize_t err; 709 710 err = drm_hdmi_avi_infoframe_from_display_mode(&frame, 711 &hdmi->output.connector, mode); 712 if (err < 0) { 713 dev_err(hdmi->dev, "failed to setup AVI infoframe: %zd\n", err); 714 return; 715 } 716 717 err = hdmi_avi_infoframe_pack(&frame, buffer, sizeof(buffer)); 718 if (err < 0) { 719 dev_err(hdmi->dev, "failed to pack AVI infoframe: %zd\n", err); 720 return; 721 } 722 723 tegra_hdmi_write_infopack(hdmi, buffer, err); 724 } 725 726 static void tegra_hdmi_disable_avi_infoframe(struct tegra_hdmi *hdmi) 727 { 728 u32 value; 729 730 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_HDMI_AVI_INFOFRAME_CTRL); 731 value &= ~INFOFRAME_CTRL_ENABLE; 732 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_AVI_INFOFRAME_CTRL); 733 } 734 735 static void tegra_hdmi_enable_avi_infoframe(struct tegra_hdmi *hdmi) 736 { 737 u32 value; 738 739 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_HDMI_AVI_INFOFRAME_CTRL); 740 value |= INFOFRAME_CTRL_ENABLE; 741 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_AVI_INFOFRAME_CTRL); 742 } 743 744 static void tegra_hdmi_setup_audio_infoframe(struct tegra_hdmi *hdmi) 745 { 746 struct hdmi_audio_infoframe frame; 747 u8 buffer[14]; 748 ssize_t err; 749 750 err = hdmi_audio_infoframe_init(&frame); 751 if (err < 0) { 752 dev_err(hdmi->dev, "failed to setup audio infoframe: %zd\n", 753 err); 754 return; 755 } 756 757 frame.channels = hdmi->format.channels; 758 759 err = hdmi_audio_infoframe_pack(&frame, buffer, sizeof(buffer)); 760 if (err < 0) { 761 dev_err(hdmi->dev, "failed to pack audio infoframe: %zd\n", 762 err); 763 return; 764 } 765 766 /* 767 * The audio infoframe has only one set of subpack registers, so the 768 * infoframe needs to be truncated. One set of subpack registers can 769 * contain 7 bytes. Including the 3 byte header only the first 10 770 * bytes can be programmed. 771 */ 772 tegra_hdmi_write_infopack(hdmi, buffer, min_t(size_t, 10, err)); 773 } 774 775 static void tegra_hdmi_disable_audio_infoframe(struct tegra_hdmi *hdmi) 776 { 777 u32 value; 778 779 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_HDMI_AUDIO_INFOFRAME_CTRL); 780 value &= ~INFOFRAME_CTRL_ENABLE; 781 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_AUDIO_INFOFRAME_CTRL); 782 } 783 784 static void tegra_hdmi_enable_audio_infoframe(struct tegra_hdmi *hdmi) 785 { 786 u32 value; 787 788 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_HDMI_AUDIO_INFOFRAME_CTRL); 789 value |= INFOFRAME_CTRL_ENABLE; 790 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_AUDIO_INFOFRAME_CTRL); 791 } 792 793 static void tegra_hdmi_setup_stereo_infoframe(struct tegra_hdmi *hdmi) 794 { 795 struct hdmi_vendor_infoframe frame; 796 u8 buffer[10]; 797 ssize_t err; 798 799 hdmi_vendor_infoframe_init(&frame); 800 frame.s3d_struct = HDMI_3D_STRUCTURE_FRAME_PACKING; 801 802 err = hdmi_vendor_infoframe_pack(&frame, buffer, sizeof(buffer)); 803 if (err < 0) { 804 dev_err(hdmi->dev, "failed to pack vendor infoframe: %zd\n", 805 err); 806 return; 807 } 808 809 tegra_hdmi_write_infopack(hdmi, buffer, err); 810 } 811 812 static void tegra_hdmi_disable_stereo_infoframe(struct tegra_hdmi *hdmi) 813 { 814 u32 value; 815 816 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_HDMI_GENERIC_CTRL); 817 value &= ~GENERIC_CTRL_ENABLE; 818 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_GENERIC_CTRL); 819 } 820 821 static void tegra_hdmi_enable_stereo_infoframe(struct tegra_hdmi *hdmi) 822 { 823 u32 value; 824 825 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_HDMI_GENERIC_CTRL); 826 value |= GENERIC_CTRL_ENABLE; 827 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_GENERIC_CTRL); 828 } 829 830 static void tegra_hdmi_setup_tmds(struct tegra_hdmi *hdmi, 831 const struct tmds_config *tmds) 832 { 833 u32 value; 834 835 tegra_hdmi_writel(hdmi, tmds->pll0, HDMI_NV_PDISP_SOR_PLL0); 836 tegra_hdmi_writel(hdmi, tmds->pll1, HDMI_NV_PDISP_SOR_PLL1); 837 tegra_hdmi_writel(hdmi, tmds->pe_current, HDMI_NV_PDISP_PE_CURRENT); 838 839 tegra_hdmi_writel(hdmi, tmds->drive_current, 840 HDMI_NV_PDISP_SOR_LANE_DRIVE_CURRENT); 841 842 value = tegra_hdmi_readl(hdmi, hdmi->config->fuse_override_offset); 843 value |= hdmi->config->fuse_override_value; 844 tegra_hdmi_writel(hdmi, value, hdmi->config->fuse_override_offset); 845 846 if (hdmi->config->has_sor_io_peak_current) 847 tegra_hdmi_writel(hdmi, tmds->peak_current, 848 HDMI_NV_PDISP_SOR_IO_PEAK_CURRENT); 849 } 850 851 static int tegra_hdmi_reconfigure_audio(struct tegra_hdmi *hdmi) 852 { 853 int err; 854 855 err = tegra_hdmi_setup_audio(hdmi); 856 if (err < 0) { 857 tegra_hdmi_disable_audio_infoframe(hdmi); 858 tegra_hdmi_disable_audio(hdmi); 859 } else { 860 tegra_hdmi_setup_audio_infoframe(hdmi); 861 tegra_hdmi_enable_audio_infoframe(hdmi); 862 tegra_hdmi_enable_audio(hdmi); 863 } 864 865 return err; 866 } 867 868 static bool tegra_output_is_hdmi(struct tegra_output *output) 869 { 870 return output->connector.display_info.is_hdmi; 871 } 872 873 static enum drm_connector_status 874 tegra_hdmi_connector_detect(struct drm_connector *connector, bool force) 875 { 876 struct tegra_output *output = connector_to_output(connector); 877 struct tegra_hdmi *hdmi = to_hdmi(output); 878 enum drm_connector_status status; 879 880 status = tegra_output_connector_detect(connector, force); 881 if (status == connector_status_connected) 882 return status; 883 884 tegra_hdmi_writel(hdmi, 0, HDMI_NV_PDISP_SOR_AUDIO_HDA_PRESENSE); 885 return status; 886 } 887 888 #define DEBUGFS_REG32(_name) { .name = #_name, .offset = _name } 889 890 static const struct debugfs_reg32 tegra_hdmi_regs[] = { 891 DEBUGFS_REG32(HDMI_CTXSW), 892 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_STATE0), 893 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_STATE1), 894 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_STATE2), 895 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_AN_MSB), 896 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_AN_LSB), 897 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_CN_MSB), 898 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_CN_LSB), 899 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_AKSV_MSB), 900 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_AKSV_LSB), 901 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_BKSV_MSB), 902 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_BKSV_LSB), 903 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_CKSV_MSB), 904 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_CKSV_LSB), 905 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_DKSV_MSB), 906 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_DKSV_LSB), 907 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_CTRL), 908 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_CMODE), 909 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_MPRIME_MSB), 910 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_MPRIME_LSB), 911 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_SPRIME_MSB), 912 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_SPRIME_LSB2), 913 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_SPRIME_LSB1), 914 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_RI), 915 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_CS_MSB), 916 DEBUGFS_REG32(HDMI_NV_PDISP_RG_HDCP_CS_LSB), 917 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AUDIO_EMU0), 918 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AUDIO_EMU_RDATA0), 919 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AUDIO_EMU1), 920 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AUDIO_EMU2), 921 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AUDIO_INFOFRAME_CTRL), 922 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AUDIO_INFOFRAME_STATUS), 923 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AUDIO_INFOFRAME_HEADER), 924 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AUDIO_INFOFRAME_SUBPACK0_LOW), 925 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AUDIO_INFOFRAME_SUBPACK0_HIGH), 926 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AVI_INFOFRAME_CTRL), 927 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AVI_INFOFRAME_STATUS), 928 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AVI_INFOFRAME_HEADER), 929 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AVI_INFOFRAME_SUBPACK0_LOW), 930 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AVI_INFOFRAME_SUBPACK0_HIGH), 931 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AVI_INFOFRAME_SUBPACK1_LOW), 932 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_AVI_INFOFRAME_SUBPACK1_HIGH), 933 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GENERIC_CTRL), 934 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GENERIC_STATUS), 935 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GENERIC_HEADER), 936 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GENERIC_SUBPACK0_LOW), 937 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GENERIC_SUBPACK0_HIGH), 938 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GENERIC_SUBPACK1_LOW), 939 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GENERIC_SUBPACK1_HIGH), 940 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GENERIC_SUBPACK2_LOW), 941 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GENERIC_SUBPACK2_HIGH), 942 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GENERIC_SUBPACK3_LOW), 943 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GENERIC_SUBPACK3_HIGH), 944 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_CTRL), 945 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_0320_SUBPACK_LOW), 946 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_0320_SUBPACK_HIGH), 947 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_0441_SUBPACK_LOW), 948 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_0441_SUBPACK_HIGH), 949 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_0882_SUBPACK_LOW), 950 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_0882_SUBPACK_HIGH), 951 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_1764_SUBPACK_LOW), 952 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_1764_SUBPACK_HIGH), 953 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_0480_SUBPACK_LOW), 954 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_0480_SUBPACK_HIGH), 955 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_0960_SUBPACK_LOW), 956 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_0960_SUBPACK_HIGH), 957 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_1920_SUBPACK_LOW), 958 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_ACR_1920_SUBPACK_HIGH), 959 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_CTRL), 960 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_VSYNC_KEEPOUT), 961 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_VSYNC_WINDOW), 962 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GCP_CTRL), 963 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GCP_STATUS), 964 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_GCP_SUBPACK), 965 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_CHANNEL_STATUS1), 966 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_CHANNEL_STATUS2), 967 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_EMU0), 968 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_EMU1), 969 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_EMU1_RDATA), 970 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_SPARE), 971 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_SPDIF_CHN_STATUS1), 972 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_SPDIF_CHN_STATUS2), 973 DEBUGFS_REG32(HDMI_NV_PDISP_HDMI_HDCPRIF_ROM_CTRL), 974 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_CAP), 975 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_PWR), 976 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_TEST), 977 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_PLL0), 978 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_PLL1), 979 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_PLL2), 980 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_CSTM), 981 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_LVDS), 982 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_CRCA), 983 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_CRCB), 984 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_BLANK), 985 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_CTL), 986 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(0)), 987 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(1)), 988 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(2)), 989 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(3)), 990 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(4)), 991 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(5)), 992 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(6)), 993 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(7)), 994 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(8)), 995 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(9)), 996 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(10)), 997 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(11)), 998 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(12)), 999 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(13)), 1000 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(14)), 1001 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_SEQ_INST(15)), 1002 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_VCRCA0), 1003 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_VCRCA1), 1004 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_CCRCA0), 1005 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_CCRCA1), 1006 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_EDATAA0), 1007 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_EDATAA1), 1008 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_COUNTA0), 1009 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_COUNTA1), 1010 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_DEBUGA0), 1011 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_DEBUGA1), 1012 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_TRIG), 1013 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_MSCHECK), 1014 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_LANE_DRIVE_CURRENT), 1015 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_DEBUG0), 1016 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_DEBUG1), 1017 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_DEBUG2), 1018 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_FS(0)), 1019 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_FS(1)), 1020 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_FS(2)), 1021 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_FS(3)), 1022 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_FS(4)), 1023 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_FS(5)), 1024 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_FS(6)), 1025 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_PULSE_WIDTH), 1026 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_THRESHOLD), 1027 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_CNTRL0), 1028 DEBUGFS_REG32(HDMI_NV_PDISP_AUDIO_N), 1029 DEBUGFS_REG32(HDMI_NV_PDISP_HDCPRIF_ROM_TIMING), 1030 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_REFCLK), 1031 DEBUGFS_REG32(HDMI_NV_PDISP_CRC_CONTROL), 1032 DEBUGFS_REG32(HDMI_NV_PDISP_INPUT_CONTROL), 1033 DEBUGFS_REG32(HDMI_NV_PDISP_SCRATCH), 1034 DEBUGFS_REG32(HDMI_NV_PDISP_PE_CURRENT), 1035 DEBUGFS_REG32(HDMI_NV_PDISP_KEY_CTRL), 1036 DEBUGFS_REG32(HDMI_NV_PDISP_KEY_DEBUG0), 1037 DEBUGFS_REG32(HDMI_NV_PDISP_KEY_DEBUG1), 1038 DEBUGFS_REG32(HDMI_NV_PDISP_KEY_DEBUG2), 1039 DEBUGFS_REG32(HDMI_NV_PDISP_KEY_HDCP_KEY_0), 1040 DEBUGFS_REG32(HDMI_NV_PDISP_KEY_HDCP_KEY_1), 1041 DEBUGFS_REG32(HDMI_NV_PDISP_KEY_HDCP_KEY_2), 1042 DEBUGFS_REG32(HDMI_NV_PDISP_KEY_HDCP_KEY_3), 1043 DEBUGFS_REG32(HDMI_NV_PDISP_KEY_HDCP_KEY_TRIG), 1044 DEBUGFS_REG32(HDMI_NV_PDISP_KEY_SKEY_INDEX), 1045 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_AUDIO_CNTRL0), 1046 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_AUDIO_SPARE0), 1047 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_AUDIO_HDA_CODEC_SCRATCH0), 1048 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_AUDIO_HDA_CODEC_SCRATCH1), 1049 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_AUDIO_HDA_ELD_BUFWR), 1050 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_AUDIO_HDA_PRESENSE), 1051 DEBUGFS_REG32(HDMI_NV_PDISP_INT_STATUS), 1052 DEBUGFS_REG32(HDMI_NV_PDISP_INT_MASK), 1053 DEBUGFS_REG32(HDMI_NV_PDISP_INT_ENABLE), 1054 DEBUGFS_REG32(HDMI_NV_PDISP_SOR_IO_PEAK_CURRENT), 1055 }; 1056 1057 static int tegra_hdmi_show_regs(struct seq_file *s, void *data) 1058 { 1059 struct drm_info_node *node = s->private; 1060 struct tegra_hdmi *hdmi = node->info_ent->data; 1061 struct drm_crtc *crtc = hdmi->output.encoder.crtc; 1062 struct drm_device *drm = node->minor->dev; 1063 unsigned int i; 1064 int err = 0; 1065 1066 drm_modeset_lock_all(drm); 1067 1068 if (!crtc || !crtc->state->active) { 1069 err = -EBUSY; 1070 goto unlock; 1071 } 1072 1073 for (i = 0; i < ARRAY_SIZE(tegra_hdmi_regs); i++) { 1074 unsigned int offset = tegra_hdmi_regs[i].offset; 1075 1076 seq_printf(s, "%-56s %#05x %08x\n", tegra_hdmi_regs[i].name, 1077 offset, tegra_hdmi_readl(hdmi, offset)); 1078 } 1079 1080 unlock: 1081 drm_modeset_unlock_all(drm); 1082 return err; 1083 } 1084 1085 static struct drm_info_list debugfs_files[] = { 1086 { "regs", tegra_hdmi_show_regs, 0, NULL }, 1087 }; 1088 1089 static int tegra_hdmi_late_register(struct drm_connector *connector) 1090 { 1091 struct tegra_output *output = connector_to_output(connector); 1092 unsigned int i, count = ARRAY_SIZE(debugfs_files); 1093 struct drm_minor *minor = connector->dev->primary; 1094 struct dentry *root = connector->debugfs_entry; 1095 struct tegra_hdmi *hdmi = to_hdmi(output); 1096 1097 hdmi->debugfs_files = kmemdup(debugfs_files, sizeof(debugfs_files), 1098 GFP_KERNEL); 1099 if (!hdmi->debugfs_files) 1100 return -ENOMEM; 1101 1102 for (i = 0; i < count; i++) 1103 hdmi->debugfs_files[i].data = hdmi; 1104 1105 drm_debugfs_create_files(hdmi->debugfs_files, count, root, minor); 1106 1107 return 0; 1108 } 1109 1110 static void tegra_hdmi_early_unregister(struct drm_connector *connector) 1111 { 1112 struct tegra_output *output = connector_to_output(connector); 1113 struct drm_minor *minor = connector->dev->primary; 1114 unsigned int count = ARRAY_SIZE(debugfs_files); 1115 struct tegra_hdmi *hdmi = to_hdmi(output); 1116 1117 drm_debugfs_remove_files(hdmi->debugfs_files, count, minor); 1118 kfree(hdmi->debugfs_files); 1119 hdmi->debugfs_files = NULL; 1120 } 1121 1122 static const struct drm_connector_funcs tegra_hdmi_connector_funcs = { 1123 .reset = drm_atomic_helper_connector_reset, 1124 .detect = tegra_hdmi_connector_detect, 1125 .fill_modes = drm_helper_probe_single_connector_modes, 1126 .destroy = tegra_output_connector_destroy, 1127 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, 1128 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 1129 .late_register = tegra_hdmi_late_register, 1130 .early_unregister = tegra_hdmi_early_unregister, 1131 }; 1132 1133 static enum drm_mode_status 1134 tegra_hdmi_connector_mode_valid(struct drm_connector *connector, 1135 struct drm_display_mode *mode) 1136 { 1137 struct tegra_output *output = connector_to_output(connector); 1138 struct tegra_hdmi *hdmi = to_hdmi(output); 1139 unsigned long pclk = mode->clock * 1000; 1140 enum drm_mode_status status = MODE_OK; 1141 struct clk *parent; 1142 long err; 1143 1144 parent = clk_get_parent(hdmi->clk_parent); 1145 1146 err = clk_round_rate(parent, pclk * 4); 1147 if (err <= 0) 1148 status = MODE_NOCLOCK; 1149 1150 return status; 1151 } 1152 1153 static const struct drm_connector_helper_funcs 1154 tegra_hdmi_connector_helper_funcs = { 1155 .get_modes = tegra_output_connector_get_modes, 1156 .mode_valid = tegra_hdmi_connector_mode_valid, 1157 }; 1158 1159 static void tegra_hdmi_encoder_disable(struct drm_encoder *encoder) 1160 { 1161 struct tegra_output *output = encoder_to_output(encoder); 1162 struct tegra_dc *dc = to_tegra_dc(encoder->crtc); 1163 struct tegra_hdmi *hdmi = to_hdmi(output); 1164 u32 value; 1165 int err; 1166 1167 tegra_hdmi_audio_lock(hdmi); 1168 1169 /* 1170 * The following accesses registers of the display controller, so make 1171 * sure it's only executed when the output is attached to one. 1172 */ 1173 if (dc) { 1174 value = tegra_dc_readl(dc, DC_DISP_DISP_WIN_OPTIONS); 1175 value &= ~HDMI_ENABLE; 1176 tegra_dc_writel(dc, value, DC_DISP_DISP_WIN_OPTIONS); 1177 1178 tegra_dc_commit(dc); 1179 } 1180 1181 if (!hdmi->dvi) { 1182 if (hdmi->stereo) 1183 tegra_hdmi_disable_stereo_infoframe(hdmi); 1184 1185 tegra_hdmi_disable_audio_infoframe(hdmi); 1186 tegra_hdmi_disable_avi_infoframe(hdmi); 1187 tegra_hdmi_disable_audio(hdmi); 1188 } 1189 1190 tegra_hdmi_writel(hdmi, 0, HDMI_NV_PDISP_INT_ENABLE); 1191 tegra_hdmi_writel(hdmi, 0, HDMI_NV_PDISP_INT_MASK); 1192 1193 hdmi->pixel_clock = 0; 1194 1195 tegra_hdmi_audio_unlock(hdmi); 1196 1197 err = host1x_client_suspend(&hdmi->client); 1198 if (err < 0) 1199 dev_err(hdmi->dev, "failed to suspend: %d\n", err); 1200 } 1201 1202 static void tegra_hdmi_encoder_enable(struct drm_encoder *encoder) 1203 { 1204 struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode; 1205 unsigned int h_sync_width, h_front_porch, h_back_porch, i, rekey; 1206 struct tegra_output *output = encoder_to_output(encoder); 1207 struct tegra_dc *dc = to_tegra_dc(encoder->crtc); 1208 struct tegra_hdmi *hdmi = to_hdmi(output); 1209 unsigned int pulse_start, div82; 1210 int retries = 1000; 1211 u32 value; 1212 int err; 1213 1214 err = host1x_client_resume(&hdmi->client); 1215 if (err < 0) { 1216 dev_err(hdmi->dev, "failed to resume: %d\n", err); 1217 return; 1218 } 1219 1220 tegra_hdmi_audio_lock(hdmi); 1221 1222 /* 1223 * Enable and unmask the HDA codec SCRATCH0 register interrupt. This 1224 * is used for interoperability between the HDA codec driver and the 1225 * HDMI driver. 1226 */ 1227 tegra_hdmi_writel(hdmi, INT_CODEC_SCRATCH0, HDMI_NV_PDISP_INT_ENABLE); 1228 tegra_hdmi_writel(hdmi, INT_CODEC_SCRATCH0, HDMI_NV_PDISP_INT_MASK); 1229 1230 hdmi->pixel_clock = mode->clock * 1000; 1231 h_sync_width = mode->hsync_end - mode->hsync_start; 1232 h_back_porch = mode->htotal - mode->hsync_end; 1233 h_front_porch = mode->hsync_start - mode->hdisplay; 1234 1235 err = dev_pm_opp_set_rate(hdmi->dev, hdmi->pixel_clock); 1236 if (err < 0) { 1237 dev_err(hdmi->dev, "failed to set HDMI clock frequency: %d\n", 1238 err); 1239 } 1240 1241 DRM_DEBUG_KMS("HDMI clock rate: %lu Hz\n", clk_get_rate(hdmi->clk)); 1242 1243 /* power up sequence */ 1244 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_SOR_PLL0); 1245 value &= ~SOR_PLL_PDBG; 1246 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_PLL0); 1247 1248 usleep_range(10, 20); 1249 1250 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_SOR_PLL0); 1251 value &= ~SOR_PLL_PWR; 1252 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_PLL0); 1253 1254 tegra_dc_writel(dc, VSYNC_H_POSITION(1), 1255 DC_DISP_DISP_TIMING_OPTIONS); 1256 tegra_dc_writel(dc, DITHER_CONTROL_DISABLE | BASE_COLOR_SIZE_888, 1257 DC_DISP_DISP_COLOR_CONTROL); 1258 1259 /* video_preamble uses h_pulse2 */ 1260 pulse_start = 1 + h_sync_width + h_back_porch - 10; 1261 1262 tegra_dc_writel(dc, H_PULSE2_ENABLE, DC_DISP_DISP_SIGNAL_OPTIONS0); 1263 1264 value = PULSE_MODE_NORMAL | PULSE_POLARITY_HIGH | PULSE_QUAL_VACTIVE | 1265 PULSE_LAST_END_A; 1266 tegra_dc_writel(dc, value, DC_DISP_H_PULSE2_CONTROL); 1267 1268 value = PULSE_START(pulse_start) | PULSE_END(pulse_start + 8); 1269 tegra_dc_writel(dc, value, DC_DISP_H_PULSE2_POSITION_A); 1270 1271 value = VSYNC_WINDOW_END(0x210) | VSYNC_WINDOW_START(0x200) | 1272 VSYNC_WINDOW_ENABLE; 1273 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_VSYNC_WINDOW); 1274 1275 if (dc->pipe) 1276 value = HDMI_SRC_DISPLAYB; 1277 else 1278 value = HDMI_SRC_DISPLAYA; 1279 1280 if ((mode->hdisplay == 720) && ((mode->vdisplay == 480) || 1281 (mode->vdisplay == 576))) 1282 tegra_hdmi_writel(hdmi, 1283 value | ARM_VIDEO_RANGE_FULL, 1284 HDMI_NV_PDISP_INPUT_CONTROL); 1285 else 1286 tegra_hdmi_writel(hdmi, 1287 value | ARM_VIDEO_RANGE_LIMITED, 1288 HDMI_NV_PDISP_INPUT_CONTROL); 1289 1290 div82 = clk_get_rate(hdmi->clk) / 1000000 * 4; 1291 value = SOR_REFCLK_DIV_INT(div82 >> 2) | SOR_REFCLK_DIV_FRAC(div82); 1292 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_REFCLK); 1293 1294 hdmi->dvi = !tegra_output_is_hdmi(output); 1295 if (!hdmi->dvi) { 1296 /* 1297 * Make sure that the audio format has been configured before 1298 * enabling audio, otherwise we may try to divide by zero. 1299 */ 1300 if (hdmi->format.sample_rate > 0) { 1301 err = tegra_hdmi_setup_audio(hdmi); 1302 if (err < 0) 1303 hdmi->dvi = true; 1304 } 1305 } 1306 1307 if (hdmi->config->has_hda) 1308 tegra_hdmi_write_eld(hdmi); 1309 1310 rekey = HDMI_REKEY_DEFAULT; 1311 value = HDMI_CTRL_REKEY(rekey); 1312 value |= HDMI_CTRL_MAX_AC_PACKET((h_sync_width + h_back_porch + 1313 h_front_porch - rekey - 18) / 32); 1314 1315 if (!hdmi->dvi) 1316 value |= HDMI_CTRL_ENABLE; 1317 1318 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_CTRL); 1319 1320 if (!hdmi->dvi) { 1321 tegra_hdmi_setup_avi_infoframe(hdmi, mode); 1322 tegra_hdmi_setup_audio_infoframe(hdmi); 1323 1324 if (hdmi->stereo) 1325 tegra_hdmi_setup_stereo_infoframe(hdmi); 1326 } 1327 1328 /* TMDS CONFIG */ 1329 for (i = 0; i < hdmi->config->num_tmds; i++) { 1330 if (hdmi->pixel_clock <= hdmi->config->tmds[i].pclk) { 1331 tegra_hdmi_setup_tmds(hdmi, &hdmi->config->tmds[i]); 1332 break; 1333 } 1334 } 1335 1336 tegra_hdmi_writel(hdmi, 1337 SOR_SEQ_PU_PC(0) | 1338 SOR_SEQ_PU_PC_ALT(0) | 1339 SOR_SEQ_PD_PC(8) | 1340 SOR_SEQ_PD_PC_ALT(8), 1341 HDMI_NV_PDISP_SOR_SEQ_CTL); 1342 1343 value = SOR_SEQ_INST_WAIT_TIME(1) | 1344 SOR_SEQ_INST_WAIT_UNITS_VSYNC | 1345 SOR_SEQ_INST_HALT | 1346 SOR_SEQ_INST_PIN_A_LOW | 1347 SOR_SEQ_INST_PIN_B_LOW | 1348 SOR_SEQ_INST_DRIVE_PWM_OUT_LO; 1349 1350 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_SEQ_INST(0)); 1351 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_SEQ_INST(8)); 1352 1353 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_SOR_CSTM); 1354 value &= ~SOR_CSTM_ROTCLK(~0); 1355 value |= SOR_CSTM_ROTCLK(2); 1356 value |= SOR_CSTM_PLLDIV; 1357 value &= ~SOR_CSTM_LVDS_ENABLE; 1358 value &= ~SOR_CSTM_MODE_MASK; 1359 value |= SOR_CSTM_MODE_TMDS; 1360 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_CSTM); 1361 1362 /* start SOR */ 1363 tegra_hdmi_writel(hdmi, 1364 SOR_PWR_NORMAL_STATE_PU | 1365 SOR_PWR_NORMAL_START_NORMAL | 1366 SOR_PWR_SAFE_STATE_PD | 1367 SOR_PWR_SETTING_NEW_TRIGGER, 1368 HDMI_NV_PDISP_SOR_PWR); 1369 tegra_hdmi_writel(hdmi, 1370 SOR_PWR_NORMAL_STATE_PU | 1371 SOR_PWR_NORMAL_START_NORMAL | 1372 SOR_PWR_SAFE_STATE_PD | 1373 SOR_PWR_SETTING_NEW_DONE, 1374 HDMI_NV_PDISP_SOR_PWR); 1375 1376 do { 1377 BUG_ON(--retries < 0); 1378 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_SOR_PWR); 1379 } while (value & SOR_PWR_SETTING_NEW_PENDING); 1380 1381 value = SOR_STATE_ASY_CRCMODE_COMPLETE | 1382 SOR_STATE_ASY_OWNER_HEAD0 | 1383 SOR_STATE_ASY_SUBOWNER_BOTH | 1384 SOR_STATE_ASY_PROTOCOL_SINGLE_TMDS_A | 1385 SOR_STATE_ASY_DEPOL_POS; 1386 1387 /* setup sync polarities */ 1388 if (mode->flags & DRM_MODE_FLAG_PHSYNC) 1389 value |= SOR_STATE_ASY_HSYNCPOL_POS; 1390 1391 if (mode->flags & DRM_MODE_FLAG_NHSYNC) 1392 value |= SOR_STATE_ASY_HSYNCPOL_NEG; 1393 1394 if (mode->flags & DRM_MODE_FLAG_PVSYNC) 1395 value |= SOR_STATE_ASY_VSYNCPOL_POS; 1396 1397 if (mode->flags & DRM_MODE_FLAG_NVSYNC) 1398 value |= SOR_STATE_ASY_VSYNCPOL_NEG; 1399 1400 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_STATE2); 1401 1402 value = SOR_STATE_ASY_HEAD_OPMODE_AWAKE | SOR_STATE_ASY_ORMODE_NORMAL; 1403 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_STATE1); 1404 1405 tegra_hdmi_writel(hdmi, 0, HDMI_NV_PDISP_SOR_STATE0); 1406 tegra_hdmi_writel(hdmi, SOR_STATE_UPDATE, HDMI_NV_PDISP_SOR_STATE0); 1407 tegra_hdmi_writel(hdmi, value | SOR_STATE_ATTACHED, 1408 HDMI_NV_PDISP_SOR_STATE1); 1409 tegra_hdmi_writel(hdmi, 0, HDMI_NV_PDISP_SOR_STATE0); 1410 1411 value = tegra_dc_readl(dc, DC_DISP_DISP_WIN_OPTIONS); 1412 value |= HDMI_ENABLE; 1413 tegra_dc_writel(dc, value, DC_DISP_DISP_WIN_OPTIONS); 1414 1415 tegra_dc_commit(dc); 1416 1417 if (!hdmi->dvi) { 1418 tegra_hdmi_enable_avi_infoframe(hdmi); 1419 tegra_hdmi_enable_audio_infoframe(hdmi); 1420 tegra_hdmi_enable_audio(hdmi); 1421 1422 if (hdmi->stereo) 1423 tegra_hdmi_enable_stereo_infoframe(hdmi); 1424 } 1425 1426 /* TODO: add HDCP support */ 1427 1428 tegra_hdmi_audio_unlock(hdmi); 1429 } 1430 1431 static int 1432 tegra_hdmi_encoder_atomic_check(struct drm_encoder *encoder, 1433 struct drm_crtc_state *crtc_state, 1434 struct drm_connector_state *conn_state) 1435 { 1436 struct tegra_output *output = encoder_to_output(encoder); 1437 struct tegra_dc *dc = to_tegra_dc(conn_state->crtc); 1438 unsigned long pclk = crtc_state->mode.clock * 1000; 1439 struct tegra_hdmi *hdmi = to_hdmi(output); 1440 int err; 1441 1442 err = tegra_dc_state_setup_clock(dc, crtc_state, hdmi->clk_parent, 1443 pclk, 0); 1444 if (err < 0) { 1445 dev_err(output->dev, "failed to setup CRTC state: %d\n", err); 1446 return err; 1447 } 1448 1449 return err; 1450 } 1451 1452 static const struct drm_encoder_helper_funcs tegra_hdmi_encoder_helper_funcs = { 1453 .disable = tegra_hdmi_encoder_disable, 1454 .enable = tegra_hdmi_encoder_enable, 1455 .atomic_check = tegra_hdmi_encoder_atomic_check, 1456 }; 1457 1458 static int tegra_hdmi_hw_params(struct device *dev, void *data, 1459 struct hdmi_codec_daifmt *fmt, 1460 struct hdmi_codec_params *hparms) 1461 { 1462 struct tegra_hdmi *hdmi = data; 1463 int ret = 0; 1464 1465 tegra_hdmi_audio_lock(hdmi); 1466 1467 hdmi->format.sample_rate = hparms->sample_rate; 1468 hdmi->format.channels = hparms->channels; 1469 1470 if (hdmi->pixel_clock && !hdmi->dvi) 1471 ret = tegra_hdmi_reconfigure_audio(hdmi); 1472 1473 tegra_hdmi_audio_unlock(hdmi); 1474 1475 return ret; 1476 } 1477 1478 static int tegra_hdmi_audio_startup(struct device *dev, void *data) 1479 { 1480 struct tegra_hdmi *hdmi = data; 1481 int ret; 1482 1483 ret = host1x_client_resume(&hdmi->client); 1484 if (ret < 0) 1485 dev_err(hdmi->dev, "failed to resume: %d\n", ret); 1486 1487 return ret; 1488 } 1489 1490 static void tegra_hdmi_audio_shutdown(struct device *dev, void *data) 1491 { 1492 struct tegra_hdmi *hdmi = data; 1493 int ret; 1494 1495 tegra_hdmi_audio_lock(hdmi); 1496 1497 hdmi->format.sample_rate = 0; 1498 hdmi->format.channels = 0; 1499 1500 tegra_hdmi_audio_unlock(hdmi); 1501 1502 ret = host1x_client_suspend(&hdmi->client); 1503 if (ret < 0) 1504 dev_err(hdmi->dev, "failed to suspend: %d\n", ret); 1505 } 1506 1507 static const struct hdmi_codec_ops tegra_hdmi_codec_ops = { 1508 .hw_params = tegra_hdmi_hw_params, 1509 .audio_startup = tegra_hdmi_audio_startup, 1510 .audio_shutdown = tegra_hdmi_audio_shutdown, 1511 }; 1512 1513 static int tegra_hdmi_codec_register(struct tegra_hdmi *hdmi) 1514 { 1515 struct hdmi_codec_pdata codec_data = {}; 1516 1517 if (hdmi->config->has_hda) 1518 return 0; 1519 1520 codec_data.ops = &tegra_hdmi_codec_ops; 1521 codec_data.data = hdmi; 1522 codec_data.spdif = 1; 1523 1524 hdmi->audio_pdev = platform_device_register_data(hdmi->dev, 1525 HDMI_CODEC_DRV_NAME, 1526 PLATFORM_DEVID_AUTO, 1527 &codec_data, 1528 sizeof(codec_data)); 1529 if (IS_ERR(hdmi->audio_pdev)) 1530 return PTR_ERR(hdmi->audio_pdev); 1531 1532 hdmi->format.channels = 2; 1533 1534 return 0; 1535 } 1536 1537 static void tegra_hdmi_codec_unregister(struct tegra_hdmi *hdmi) 1538 { 1539 if (hdmi->audio_pdev) 1540 platform_device_unregister(hdmi->audio_pdev); 1541 } 1542 1543 static int tegra_hdmi_init(struct host1x_client *client) 1544 { 1545 struct tegra_hdmi *hdmi = host1x_client_to_hdmi(client); 1546 struct drm_device *drm = dev_get_drvdata(client->host); 1547 int err; 1548 1549 hdmi->output.dev = client->dev; 1550 1551 drm_connector_init_with_ddc(drm, &hdmi->output.connector, 1552 &tegra_hdmi_connector_funcs, 1553 DRM_MODE_CONNECTOR_HDMIA, 1554 hdmi->output.ddc); 1555 drm_connector_helper_add(&hdmi->output.connector, 1556 &tegra_hdmi_connector_helper_funcs); 1557 hdmi->output.connector.dpms = DRM_MODE_DPMS_OFF; 1558 1559 drm_simple_encoder_init(drm, &hdmi->output.encoder, 1560 DRM_MODE_ENCODER_TMDS); 1561 drm_encoder_helper_add(&hdmi->output.encoder, 1562 &tegra_hdmi_encoder_helper_funcs); 1563 1564 drm_connector_attach_encoder(&hdmi->output.connector, 1565 &hdmi->output.encoder); 1566 drm_connector_register(&hdmi->output.connector); 1567 1568 err = tegra_output_init(drm, &hdmi->output); 1569 if (err < 0) { 1570 dev_err(client->dev, "failed to initialize output: %d\n", err); 1571 return err; 1572 } 1573 1574 hdmi->output.encoder.possible_crtcs = 0x3; 1575 1576 err = regulator_enable(hdmi->hdmi); 1577 if (err < 0) { 1578 dev_err(client->dev, "failed to enable HDMI regulator: %d\n", 1579 err); 1580 goto output_exit; 1581 } 1582 1583 err = regulator_enable(hdmi->pll); 1584 if (err < 0) { 1585 dev_err(hdmi->dev, "failed to enable PLL regulator: %d\n", err); 1586 goto disable_hdmi; 1587 } 1588 1589 err = regulator_enable(hdmi->vdd); 1590 if (err < 0) { 1591 dev_err(hdmi->dev, "failed to enable VDD regulator: %d\n", err); 1592 goto disable_pll; 1593 } 1594 1595 err = tegra_hdmi_codec_register(hdmi); 1596 if (err < 0) { 1597 dev_err(hdmi->dev, "failed to register audio codec: %d\n", err); 1598 goto disable_vdd; 1599 } 1600 1601 return 0; 1602 1603 disable_vdd: 1604 regulator_disable(hdmi->vdd); 1605 disable_pll: 1606 regulator_disable(hdmi->pll); 1607 disable_hdmi: 1608 regulator_disable(hdmi->hdmi); 1609 output_exit: 1610 tegra_output_exit(&hdmi->output); 1611 1612 return err; 1613 } 1614 1615 static int tegra_hdmi_exit(struct host1x_client *client) 1616 { 1617 struct tegra_hdmi *hdmi = host1x_client_to_hdmi(client); 1618 1619 tegra_hdmi_codec_unregister(hdmi); 1620 1621 tegra_output_exit(&hdmi->output); 1622 1623 regulator_disable(hdmi->vdd); 1624 regulator_disable(hdmi->pll); 1625 regulator_disable(hdmi->hdmi); 1626 1627 return 0; 1628 } 1629 1630 static int tegra_hdmi_runtime_suspend(struct host1x_client *client) 1631 { 1632 struct tegra_hdmi *hdmi = host1x_client_to_hdmi(client); 1633 struct device *dev = client->dev; 1634 int err; 1635 1636 err = reset_control_assert(hdmi->rst); 1637 if (err < 0) { 1638 dev_err(dev, "failed to assert reset: %d\n", err); 1639 return err; 1640 } 1641 1642 usleep_range(1000, 2000); 1643 1644 clk_disable_unprepare(hdmi->clk); 1645 pm_runtime_put_sync(dev); 1646 1647 return 0; 1648 } 1649 1650 static int tegra_hdmi_runtime_resume(struct host1x_client *client) 1651 { 1652 struct tegra_hdmi *hdmi = host1x_client_to_hdmi(client); 1653 struct device *dev = client->dev; 1654 int err; 1655 1656 err = pm_runtime_resume_and_get(dev); 1657 if (err < 0) { 1658 dev_err(dev, "failed to get runtime PM: %d\n", err); 1659 return err; 1660 } 1661 1662 err = clk_prepare_enable(hdmi->clk); 1663 if (err < 0) { 1664 dev_err(dev, "failed to enable clock: %d\n", err); 1665 goto put_rpm; 1666 } 1667 1668 usleep_range(1000, 2000); 1669 1670 err = reset_control_deassert(hdmi->rst); 1671 if (err < 0) { 1672 dev_err(dev, "failed to deassert reset: %d\n", err); 1673 goto disable_clk; 1674 } 1675 1676 return 0; 1677 1678 disable_clk: 1679 clk_disable_unprepare(hdmi->clk); 1680 put_rpm: 1681 pm_runtime_put_sync(dev); 1682 return err; 1683 } 1684 1685 static const struct host1x_client_ops hdmi_client_ops = { 1686 .init = tegra_hdmi_init, 1687 .exit = tegra_hdmi_exit, 1688 .suspend = tegra_hdmi_runtime_suspend, 1689 .resume = tegra_hdmi_runtime_resume, 1690 }; 1691 1692 static const struct tegra_hdmi_config tegra20_hdmi_config = { 1693 .tmds = tegra20_tmds_config, 1694 .num_tmds = ARRAY_SIZE(tegra20_tmds_config), 1695 .fuse_override_offset = HDMI_NV_PDISP_SOR_LANE_DRIVE_CURRENT, 1696 .fuse_override_value = 1 << 31, 1697 .has_sor_io_peak_current = false, 1698 .has_hda = false, 1699 .has_hbr = false, 1700 }; 1701 1702 static const struct tegra_hdmi_config tegra30_hdmi_config = { 1703 .tmds = tegra30_tmds_config, 1704 .num_tmds = ARRAY_SIZE(tegra30_tmds_config), 1705 .fuse_override_offset = HDMI_NV_PDISP_SOR_LANE_DRIVE_CURRENT, 1706 .fuse_override_value = 1 << 31, 1707 .has_sor_io_peak_current = false, 1708 .has_hda = true, 1709 .has_hbr = false, 1710 }; 1711 1712 static const struct tegra_hdmi_config tegra114_hdmi_config = { 1713 .tmds = tegra114_tmds_config, 1714 .num_tmds = ARRAY_SIZE(tegra114_tmds_config), 1715 .fuse_override_offset = HDMI_NV_PDISP_SOR_PAD_CTLS0, 1716 .fuse_override_value = 1 << 31, 1717 .has_sor_io_peak_current = true, 1718 .has_hda = true, 1719 .has_hbr = true, 1720 }; 1721 1722 static const struct tegra_hdmi_config tegra124_hdmi_config = { 1723 .tmds = tegra124_tmds_config, 1724 .num_tmds = ARRAY_SIZE(tegra124_tmds_config), 1725 .fuse_override_offset = HDMI_NV_PDISP_SOR_PAD_CTLS0, 1726 .fuse_override_value = 1 << 31, 1727 .has_sor_io_peak_current = true, 1728 .has_hda = true, 1729 .has_hbr = true, 1730 }; 1731 1732 static const struct of_device_id tegra_hdmi_of_match[] = { 1733 { .compatible = "nvidia,tegra124-hdmi", .data = &tegra124_hdmi_config }, 1734 { .compatible = "nvidia,tegra114-hdmi", .data = &tegra114_hdmi_config }, 1735 { .compatible = "nvidia,tegra30-hdmi", .data = &tegra30_hdmi_config }, 1736 { .compatible = "nvidia,tegra20-hdmi", .data = &tegra20_hdmi_config }, 1737 { }, 1738 }; 1739 MODULE_DEVICE_TABLE(of, tegra_hdmi_of_match); 1740 1741 static irqreturn_t tegra_hdmi_irq(int irq, void *data) 1742 { 1743 struct tegra_hdmi *hdmi = data; 1744 u32 value; 1745 1746 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_INT_STATUS); 1747 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_INT_STATUS); 1748 1749 if (value & INT_CODEC_SCRATCH0) { 1750 unsigned int format; 1751 u32 value; 1752 1753 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_SOR_AUDIO_HDA_CODEC_SCRATCH0); 1754 1755 if (value & SOR_AUDIO_HDA_CODEC_SCRATCH0_VALID) { 1756 format = value & SOR_AUDIO_HDA_CODEC_SCRATCH0_FMT_MASK; 1757 1758 tegra_hda_parse_format(format, &hdmi->format); 1759 tegra_hdmi_reconfigure_audio(hdmi); 1760 } else { 1761 tegra_hdmi_disable_audio_infoframe(hdmi); 1762 tegra_hdmi_disable_audio(hdmi); 1763 } 1764 } 1765 1766 return IRQ_HANDLED; 1767 } 1768 1769 static int tegra_hdmi_probe(struct platform_device *pdev) 1770 { 1771 struct tegra_hdmi *hdmi; 1772 struct resource *regs; 1773 int err; 1774 1775 hdmi = devm_kzalloc(&pdev->dev, sizeof(*hdmi), GFP_KERNEL); 1776 if (!hdmi) 1777 return -ENOMEM; 1778 1779 hdmi->config = of_device_get_match_data(&pdev->dev); 1780 hdmi->dev = &pdev->dev; 1781 1782 hdmi->audio_source = AUTO; 1783 hdmi->stereo = false; 1784 hdmi->dvi = false; 1785 1786 mutex_init(&hdmi->audio_lock); 1787 1788 hdmi->clk = devm_clk_get(&pdev->dev, NULL); 1789 if (IS_ERR(hdmi->clk)) { 1790 dev_err(&pdev->dev, "failed to get clock\n"); 1791 return PTR_ERR(hdmi->clk); 1792 } 1793 1794 hdmi->rst = devm_reset_control_get(&pdev->dev, "hdmi"); 1795 if (IS_ERR(hdmi->rst)) { 1796 dev_err(&pdev->dev, "failed to get reset\n"); 1797 return PTR_ERR(hdmi->rst); 1798 } 1799 1800 hdmi->clk_parent = devm_clk_get(&pdev->dev, "parent"); 1801 if (IS_ERR(hdmi->clk_parent)) 1802 return PTR_ERR(hdmi->clk_parent); 1803 1804 err = clk_set_parent(hdmi->clk, hdmi->clk_parent); 1805 if (err < 0) { 1806 dev_err(&pdev->dev, "failed to setup clocks: %d\n", err); 1807 return err; 1808 } 1809 1810 hdmi->hdmi = devm_regulator_get(&pdev->dev, "hdmi"); 1811 err = PTR_ERR_OR_ZERO(hdmi->hdmi); 1812 if (err) 1813 return dev_err_probe(&pdev->dev, err, 1814 "failed to get HDMI regulator\n"); 1815 1816 hdmi->pll = devm_regulator_get(&pdev->dev, "pll"); 1817 err = PTR_ERR_OR_ZERO(hdmi->pll); 1818 if (err) 1819 return dev_err_probe(&pdev->dev, err, 1820 "failed to get PLL regulator\n"); 1821 1822 hdmi->vdd = devm_regulator_get(&pdev->dev, "vdd"); 1823 err = PTR_ERR_OR_ZERO(hdmi->vdd); 1824 if (err) 1825 return dev_err_probe(&pdev->dev, err, 1826 "failed to get VDD regulator\n"); 1827 1828 hdmi->output.dev = &pdev->dev; 1829 1830 err = tegra_output_probe(&hdmi->output); 1831 if (err < 0) 1832 return err; 1833 1834 regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1835 hdmi->regs = devm_ioremap_resource(&pdev->dev, regs); 1836 if (IS_ERR(hdmi->regs)) 1837 return PTR_ERR(hdmi->regs); 1838 1839 err = platform_get_irq(pdev, 0); 1840 if (err < 0) 1841 return err; 1842 1843 hdmi->irq = err; 1844 1845 err = devm_request_irq(hdmi->dev, hdmi->irq, tegra_hdmi_irq, 0, 1846 dev_name(hdmi->dev), hdmi); 1847 if (err < 0) { 1848 dev_err(&pdev->dev, "failed to request IRQ#%u: %d\n", 1849 hdmi->irq, err); 1850 return err; 1851 } 1852 1853 platform_set_drvdata(pdev, hdmi); 1854 1855 err = devm_pm_runtime_enable(&pdev->dev); 1856 if (err) 1857 return err; 1858 1859 err = devm_tegra_core_dev_init_opp_table_common(&pdev->dev); 1860 if (err) 1861 return err; 1862 1863 INIT_LIST_HEAD(&hdmi->client.list); 1864 hdmi->client.ops = &hdmi_client_ops; 1865 hdmi->client.dev = &pdev->dev; 1866 1867 err = host1x_client_register(&hdmi->client); 1868 if (err < 0) { 1869 dev_err(&pdev->dev, "failed to register host1x client: %d\n", 1870 err); 1871 return err; 1872 } 1873 1874 return 0; 1875 } 1876 1877 static int tegra_hdmi_remove(struct platform_device *pdev) 1878 { 1879 struct tegra_hdmi *hdmi = platform_get_drvdata(pdev); 1880 int err; 1881 1882 err = host1x_client_unregister(&hdmi->client); 1883 if (err < 0) { 1884 dev_err(&pdev->dev, "failed to unregister host1x client: %d\n", 1885 err); 1886 return err; 1887 } 1888 1889 tegra_output_remove(&hdmi->output); 1890 1891 return 0; 1892 } 1893 1894 struct platform_driver tegra_hdmi_driver = { 1895 .driver = { 1896 .name = "tegra-hdmi", 1897 .of_match_table = tegra_hdmi_of_match, 1898 }, 1899 .probe = tegra_hdmi_probe, 1900 .remove = tegra_hdmi_remove, 1901 }; 1902