1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include <core/os.h>
26#include <core/class.h>
27
28#include "nv50.h"
29
30int
31nva3_hdmi_ctrl(struct nv50_disp_priv *priv, int head, int or, u32 data)
32{
33 const u32 soff = (or * 0x800);
34
35 if (!(data & NV84_DISP_SOR_HDMI_PWR_STATE_ON)) {
36 nv_mask(priv, 0x61c5a4 + soff, 0x40000000, 0x00000000);
37 nv_mask(priv, 0x61c520 + soff, 0x00000001, 0x00000000);
38 nv_mask(priv, 0x61c500 + soff, 0x00000001, 0x00000000);
39 return 0;
40 }
41
42
43 nv_mask(priv, 0x61c520 + soff, 0x00000001, 0x00000000);
44 nv_wr32(priv, 0x61c528 + soff, 0x000d0282);
45 nv_wr32(priv, 0x61c52c + soff, 0x0000006f);
46 nv_wr32(priv, 0x61c530 + soff, 0x00000000);
47 nv_wr32(priv, 0x61c534 + soff, 0x00000000);
48 nv_wr32(priv, 0x61c538 + soff, 0x00000000);
49 nv_mask(priv, 0x61c520 + soff, 0x00000001, 0x00000001);
50
51
52 nv_mask(priv, 0x61c500 + soff, 0x00000001, 0x00000000);
53 nv_wr32(priv, 0x61c508 + soff, 0x000a0184);
54 nv_wr32(priv, 0x61c50c + soff, 0x00000071);
55 nv_wr32(priv, 0x61c510 + soff, 0x00000000);
56 nv_mask(priv, 0x61c500 + soff, 0x00000001, 0x00000001);
57
58
59 nv_mask(priv, 0x61733c, 0x00100000, 0x00100000);
60 nv_mask(priv, 0x61733c, 0x10000000, 0x10000000);
61 nv_mask(priv, 0x61733c, 0x00100000, 0x00000000);
62
63
64 nv_mask(priv, 0x61c5a4 + soff, 0x5f1f007f, data | 0x1f000000 );
65 return 0;
66}
67