"Das U-Boot" Source Tree

Merge branch 'staging' of https://source.denx.de/u-boot/custodians/u-boot-tegra into next

- More Tegra video improvements

+4703 -473
+1
arch/arm/dts/Makefile
··· 113 113 tegra30-lg-p880.dtb \ 114 114 tegra30-lg-p895.dtb \ 115 115 tegra30-microsoft-surface-rt.dtb \ 116 + tegra30-ouya.dtb \ 116 117 tegra30-tec-ng.dtb \ 117 118 tegra30-wexler-qc750.dtb \ 118 119 tegra114-dalmore.dtb \
+7 -7
arch/arm/dts/tegra124-xiaomi-mocha.dts
··· 215 215 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 216 216 nvidia,tristate = <TEGRA_PIN_DISABLE>; 217 217 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 218 - nvidia,lock = <1>; 219 - nvidia,open-drain = <1>; 218 + nvidia,lock = <TEGRA_PIN_DISABLE>; 219 + nvidia,open-drain = <TEGRA_PIN_DISABLE>; 220 220 }; 221 221 gen2-i2c { 222 222 nvidia,pins = "gen2_i2c_scl_pt5", ··· 225 225 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 226 226 nvidia,tristate = <TEGRA_PIN_DISABLE>; 227 227 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 228 - nvidia,lock = <1>; 229 - nvidia,open-drain = <1>; 228 + nvidia,lock = <TEGRA_PIN_DISABLE>; 229 + nvidia,open-drain = <TEGRA_PIN_DISABLE>; 230 230 }; 231 231 cam-i2c { 232 232 nvidia,pins = "cam_i2c_scl_pbb1", ··· 235 235 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 236 236 nvidia,tristate = <TEGRA_PIN_DISABLE>; 237 237 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 238 - nvidia,lock = <1>; 239 - nvidia,open-drain = <1>; 238 + nvidia,lock = <TEGRA_PIN_DISABLE>; 239 + nvidia,open-drain = <TEGRA_PIN_DISABLE>; 240 240 }; 241 241 ddc-i2c { 242 242 nvidia,pins = "ddc_scl_pv4", ··· 253 253 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 254 254 nvidia,tristate = <TEGRA_PIN_DISABLE>; 255 255 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 256 - nvidia,open-drain = <1>; 256 + nvidia,open-drain = <TEGRA_PIN_DISABLE>; 257 257 }; 258 258 259 259 dsi-b {
+15 -25
arch/arm/dts/tegra30-asus-p1801-t.dts
··· 34 34 35 35 host1x@50000000 { 36 36 dc@54200000 { 37 - clocks = <&tegra_car TEGRA30_CLK_DISP1>, 38 - <&tegra_car TEGRA30_CLK_PLL_D_OUT0>; 39 - 40 - rgb { 41 - status = "okay"; 42 - 43 - nvidia,panel = <&hdmi>; 44 - }; 37 + status = "disabled"; 45 38 }; 46 39 47 40 hdmi: hdmi@54280000 { 48 - clocks = <&tegra_car TEGRA30_CLK_HDMI>, 49 - <&tegra_car TEGRA30_CLK_PLL_D_OUT0>; 50 - 51 41 status = "okay"; 52 42 53 43 hdmi-supply = <&hdmi_5v0_sys>; ··· 118 108 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 119 109 nvidia,tristate = <TEGRA_PIN_DISABLE>; 120 110 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 121 - nvidia,lock = <1>; 122 - nvidia,io-reset = <1>; 111 + nvidia,lock = <TEGRA_PIN_DISABLE>; 112 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 123 113 }; 124 114 125 115 /* SDMMC3 pinmux */ ··· 203 193 nvidia,tristate = <TEGRA_PIN_DISABLE>; 204 194 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 205 195 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 206 - nvidia,lock = <1>; 196 + nvidia,lock = <TEGRA_PIN_DISABLE>; 207 197 }; 208 198 gen2_i2c { 209 199 nvidia,pins = "gen2_i2c_scl_pt5", ··· 213 203 nvidia,tristate = <TEGRA_PIN_DISABLE>; 214 204 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 215 205 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 216 - nvidia,lock = <1>; 206 + nvidia,lock = <TEGRA_PIN_DISABLE>; 217 207 }; 218 208 cam_i2c { 219 209 nvidia,pins = "cam_i2c_scl_pbb1", ··· 223 213 nvidia,tristate = <TEGRA_PIN_DISABLE>; 224 214 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 225 215 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 226 - nvidia,lock = <1>; 216 + nvidia,lock = <TEGRA_PIN_DISABLE>; 227 217 }; 228 218 ddc_i2c { 229 219 nvidia,pins = "ddc_scl_pv4", ··· 232 222 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 233 223 nvidia,tristate = <TEGRA_PIN_DISABLE>; 234 224 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 235 - nvidia,lock = <1>; 225 + nvidia,lock = <TEGRA_PIN_DISABLE>; 236 226 }; 237 227 pwr_i2c { 238 228 nvidia,pins = "pwr_i2c_scl_pz6", ··· 242 232 nvidia,tristate = <TEGRA_PIN_DISABLE>; 243 233 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 244 234 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 245 - nvidia,lock = <1>; 235 + nvidia,lock = <TEGRA_PIN_DISABLE>; 246 236 }; 247 237 hotplug_i2c { 248 238 nvidia,pins = "pu4"; ··· 260 250 nvidia,tristate = <TEGRA_PIN_DISABLE>; 261 251 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 262 252 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 263 - nvidia,lock = <1>; 253 + nvidia,lock = <TEGRA_PIN_DISABLE>; 264 254 }; 265 255 hdmi_hpd { 266 256 nvidia,pins = "hdmi_int_pn7"; ··· 632 622 nvidia,pull = <TEGRA_PIN_PULL_UP>; 633 623 nvidia,tristate = <TEGRA_PIN_ENABLE>; 634 624 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 635 - nvidia,lock = <1>; 636 - nvidia,io-reset = <1>; 625 + nvidia,lock = <TEGRA_PIN_DISABLE>; 626 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 637 627 }; 638 628 639 629 /* GPIO keys pinmux */ ··· 718 708 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 719 709 nvidia,tristate = <TEGRA_PIN_DISABLE>; 720 710 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 721 - nvidia,lock = <1>; 722 - nvidia,io-reset = <1>; 711 + nvidia,lock = <TEGRA_PIN_DISABLE>; 712 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 723 713 }; 724 714 vi_d10_pt2 { 725 715 nvidia,pins = "vi_d10_pt2", ··· 838 828 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 839 829 nvidia,tristate = <TEGRA_PIN_DISABLE>; 840 830 nvidia,enable-input = <TEGRA_PIN_DISABLE>; 841 - nvidia,lock = <1>; 842 - nvidia,io-reset = <1>; 831 + nvidia,lock = <TEGRA_PIN_DISABLE>; 832 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 843 833 }; 844 834 vi_mclk_pt1 { 845 835 nvidia,pins = "vi_mclk_pt1";
+22 -22
arch/arm/dts/tegra30-asus-tf600t.dts
··· 90 90 nvidia,pull = <TEGRA_PIN_PULL_UP>; 91 91 nvidia,tristate = <TEGRA_PIN_DISABLE>; 92 92 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 93 - nvidia,lock = <1>; 94 - nvidia,io-reset = <1>; 93 + nvidia,lock = <TEGRA_PIN_DISABLE>; 94 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 95 95 }; 96 96 97 97 /* SDMMC2 pinmux */ ··· 107 107 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 108 108 nvidia,tristate = <TEGRA_PIN_DISABLE>; 109 109 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 110 - nvidia,lock = <1>; 111 - nvidia,io-reset = <1>; 110 + nvidia,lock = <TEGRA_PIN_DISABLE>; 111 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 112 112 }; 113 113 114 114 /* SDMMC3 pinmux */ ··· 142 142 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 143 143 nvidia,tristate = <TEGRA_PIN_DISABLE>; 144 144 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 145 - nvidia,lock = <1>; 146 - nvidia,io-reset = <1>; 145 + nvidia,lock = <TEGRA_PIN_DISABLE>; 146 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 147 147 }; 148 148 sdmmc4_cmd { 149 149 nvidia,pins = "sdmmc4_cmd_pt7", ··· 159 159 nvidia,pull = <TEGRA_PIN_PULL_UP>; 160 160 nvidia,tristate = <TEGRA_PIN_DISABLE>; 161 161 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 162 - nvidia,lock = <1>; 163 - nvidia,io-reset = <1>; 162 + nvidia,lock = <TEGRA_PIN_DISABLE>; 163 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 164 164 }; 165 165 sdmmc4_rst_n { 166 166 nvidia,pins = "sdmmc4_rst_n_pcc3"; ··· 186 186 nvidia,tristate = <TEGRA_PIN_DISABLE>; 187 187 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 188 188 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 189 - nvidia,lock = <0>; 189 + nvidia,lock = <TEGRA_PIN_DISABLE>; 190 190 }; 191 191 gen2_i2c { 192 192 nvidia,pins = "gen2_i2c_scl_pt5", ··· 196 196 nvidia,tristate = <TEGRA_PIN_DISABLE>; 197 197 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 198 198 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 199 - nvidia,lock = <0>; 199 + nvidia,lock = <TEGRA_PIN_DISABLE>; 200 200 }; 201 201 cam_i2c { 202 202 nvidia,pins = "cam_i2c_scl_pbb1", ··· 206 206 nvidia,tristate = <TEGRA_PIN_DISABLE>; 207 207 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 208 208 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 209 - nvidia,lock = <0>; 209 + nvidia,lock = <TEGRA_PIN_DISABLE>; 210 210 }; 211 211 ddc_i2c { 212 212 nvidia,pins = "ddc_scl_pv4", ··· 215 215 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 216 216 nvidia,tristate = <TEGRA_PIN_DISABLE>; 217 217 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 218 - nvidia,lock = <0>; 218 + nvidia,lock = <TEGRA_PIN_DISABLE>; 219 219 }; 220 220 pwr_i2c { 221 221 nvidia,pins = "pwr_i2c_scl_pz6", ··· 225 225 nvidia,tristate = <TEGRA_PIN_DISABLE>; 226 226 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 227 227 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 228 - nvidia,lock = <0>; 228 + nvidia,lock = <TEGRA_PIN_DISABLE>; 229 229 }; 230 230 hotplug_i2c { 231 231 nvidia,pins = "pu4"; ··· 243 243 nvidia,tristate = <TEGRA_PIN_DISABLE>; 244 244 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 245 245 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 246 - nvidia,lock = <0>; 246 + nvidia,lock = <TEGRA_PIN_DISABLE>; 247 247 }; 248 248 hdmi_hpd { 249 249 nvidia,pins = "hdmi_int_pn7"; ··· 613 613 nvidia,pull = <TEGRA_PIN_PULL_UP>; 614 614 nvidia,tristate = <TEGRA_PIN_ENABLE>; 615 615 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 616 - nvidia,lock = <1>; 617 - nvidia,io-reset = <1>; 616 + nvidia,lock = <TEGRA_PIN_DISABLE>; 617 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 618 618 }; 619 619 620 620 /* GPIO keys pinmux */ ··· 701 701 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 702 702 nvidia,tristate = <TEGRA_PIN_DISABLE>; 703 703 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 704 - nvidia,lock = <1>; 705 - nvidia,io-reset = <1>; 704 + nvidia,lock = <TEGRA_PIN_DISABLE>; 705 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 706 706 }; 707 707 pbb0 { 708 708 nvidia,pins = "pbb0"; ··· 827 827 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 828 828 nvidia,tristate = <TEGRA_PIN_DISABLE>; 829 829 nvidia,enable-input = <TEGRA_PIN_DISABLE>; 830 - nvidia,lock = <1>; 831 - nvidia,io-reset = <1>; 830 + nvidia,lock = <TEGRA_PIN_DISABLE>; 831 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 832 832 }; 833 833 vi_mclk_pt1 { 834 834 nvidia,pins = "vi_mclk_pt1"; ··· 836 836 nvidia,pull = <TEGRA_PIN_PULL_UP>; 837 837 nvidia,tristate = <TEGRA_PIN_DISABLE>; 838 838 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 839 - nvidia,lock = <1>; 840 - nvidia,io-reset = <1>; 839 + nvidia,lock = <TEGRA_PIN_DISABLE>; 840 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 841 841 }; 842 842 843 843 jtag {
+62 -24
arch/arm/dts/tegra30-asus-tf700t.dts
··· 15 15 rgb { 16 16 status = "okay"; 17 17 18 - nvidia,panel = <&tc358768>; 18 + /delete-property/ nvidia,panel; 19 + 20 + port { 21 + dpi_output: endpoint { 22 + remote-endpoint = <&bridge_input>; 23 + bus-width = <24>; 24 + }; 25 + }; 19 26 }; 20 27 }; 21 28 }; ··· 118 125 vddio-supply = <&vdd_1v8_vio>; 119 126 vddmipi-supply = <&vdd_1v2_mipi>; 120 127 121 - panel = <&panel>; 122 - }; 123 - }; 124 - }; 128 + /* 129 + * Panasonic VVX10F004B00 or HYDIS HV101WU1-1E1 130 + * LCD SuperIPS+ Full HD panel. 131 + */ 132 + panel@1 { 133 + compatible = "panasonic,vvx10f004b00"; 134 + reg = <1>; 135 + 136 + power-supply = <&vdd_pnl_reg>; 137 + backlight = <&backlight>; 138 + 139 + display-timings { 140 + timing@0 { 141 + /* 1920x1200@60Hz */ 142 + clock-frequency = <154000000>; 143 + 144 + hactive = <1920>; 145 + hfront-porch = <48>; 146 + hback-porch = <80>; 147 + hsync-len = <32>; 148 + hsync-active = <1>; 149 + 150 + vactive = <1200>; 151 + vfront-porch = <3>; 152 + vback-porch = <26>; 153 + vsync-len = <6>; 154 + vsync-active = <1>; 155 + }; 156 + }; 125 157 126 - panel: panel { 127 - compatible = "panasonic,vvx10f004b00"; 158 + port { 159 + panel_input: endpoint { 160 + remote-endpoint = <&bridge_output>; 161 + }; 162 + }; 163 + }; 128 164 129 - power-supply = <&vdd_pnl_reg>; 130 - backlight = <&backlight>; 165 + ports { 166 + #address-cells = <1>; 167 + #size-cells = <0>; 131 168 132 - /delete-property/ enable-gpios; 169 + port@0 { 170 + reg = <0>; 133 171 134 - display-timings { 135 - timing@0 { 136 - /* 1920x1200@60Hz */ 137 - clock-frequency = <154000000>; 172 + bridge_input: endpoint { 173 + remote-endpoint = <&dpi_output>; 174 + bus-width = <24>; 175 + }; 176 + }; 138 177 139 - hactive = <1920>; 140 - hfront-porch = <48>; 141 - hback-porch = <80>; 142 - hsync-len = <32>; 143 - hsync-active = <1>; 178 + port@1 { 179 + reg = <1>; 144 180 145 - vactive = <1200>; 146 - vfront-porch = <3>; 147 - vback-porch = <26>; 148 - vsync-len = <6>; 149 - vsync-active = <1>; 181 + bridge_output: endpoint { 182 + remote-endpoint = <&panel_input>; 183 + }; 184 + }; 185 + }; 150 186 }; 151 187 }; 152 188 }; 189 + 190 + /delete-node/ panel; 153 191 154 192 vdd_1v2_mipi: regulator-mipi { 155 193 compatible = "regulator-fixed";
+13 -13
arch/arm/dts/tegra30-asus-transformer.dtsi
··· 99 99 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 100 100 nvidia,tristate = <TEGRA_PIN_DISABLE>; 101 101 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 102 - nvidia,lock = <1>; 103 - nvidia,io-reset = <1>; 102 + nvidia,lock = <TEGRA_PIN_DISABLE>; 103 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 104 104 }; 105 105 106 106 /* SDMMC3 pinmux */ ··· 189 189 nvidia,tristate = <TEGRA_PIN_DISABLE>; 190 190 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 191 191 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 192 - nvidia,lock = <1>; 192 + nvidia,lock = <TEGRA_PIN_DISABLE>; 193 193 }; 194 194 195 195 gen2_i2c { ··· 200 200 nvidia,tristate = <TEGRA_PIN_DISABLE>; 201 201 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 202 202 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 203 - nvidia,lock = <1>; 203 + nvidia,lock = <TEGRA_PIN_DISABLE>; 204 204 }; 205 205 206 206 cam_i2c { ··· 211 211 nvidia,tristate = <TEGRA_PIN_DISABLE>; 212 212 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 213 213 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 214 - nvidia,lock = <1>; 214 + nvidia,lock = <TEGRA_PIN_DISABLE>; 215 215 }; 216 216 217 217 ddc_i2c { ··· 221 221 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 222 222 nvidia,tristate = <TEGRA_PIN_DISABLE>; 223 223 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 224 - nvidia,lock = <1>; 224 + nvidia,lock = <TEGRA_PIN_DISABLE>; 225 225 }; 226 226 227 227 pwr_i2c { ··· 232 232 nvidia,tristate = <TEGRA_PIN_DISABLE>; 233 233 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 234 234 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 235 - nvidia,lock = <1>; 235 + nvidia,lock = <TEGRA_PIN_DISABLE>; 236 236 }; 237 237 238 238 hotplug_i2c { ··· 647 647 nvidia,pull = <TEGRA_PIN_PULL_UP>; 648 648 nvidia,tristate = <TEGRA_PIN_ENABLE>; 649 649 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 650 - nvidia,lock = <1>; 651 - nvidia,io-reset = <1>; 650 + nvidia,lock = <TEGRA_PIN_DISABLE>; 651 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 652 652 }; 653 653 654 654 /* GPIO keys pinmux */ ··· 741 741 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 742 742 nvidia,tristate = <TEGRA_PIN_DISABLE>; 743 743 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 744 - nvidia,lock = <1>; 745 - nvidia,io-reset = <1>; 744 + nvidia,lock = <TEGRA_PIN_DISABLE>; 745 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 746 746 }; 747 747 748 748 vi_d10_pt2 { ··· 879 879 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 880 880 nvidia,tristate = <TEGRA_PIN_DISABLE>; 881 881 nvidia,enable-input = <TEGRA_PIN_DISABLE>; 882 - nvidia,lock = <1>; 883 - nvidia,io-reset = <1>; 882 + nvidia,lock = <TEGRA_PIN_DISABLE>; 883 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 884 884 }; 885 885 886 886 vi_mclk_pt1 {
+4 -13
arch/arm/dts/tegra30-htc-endeavoru.dts
··· 33 33 34 34 host1x@50000000 { 35 35 dc@54200000 { 36 - clocks = <&tegra_car TEGRA30_CLK_DISP1>, 37 - <&tegra_car TEGRA30_CLK_PLL_D_OUT0>; 38 - 39 - rgb { 40 - status = "okay"; 36 + backlight: backlight { 37 + compatible = "nvidia,tegra-pwm-backlight"; 41 38 42 - nvidia,panel = <&dsia>; 39 + nvidia,pwm-source = <1>; 40 + nvidia,default-brightness = <0x8E>; 43 41 }; 44 42 }; 45 43 ··· 1263 1261 nvidia,hssync-start-delay = <0>; 1264 1262 nvidia,xcvr-lsfslew = <2>; 1265 1263 nvidia,xcvr-lsrslew = <2>; 1266 - }; 1267 - 1268 - backlight: backlight { 1269 - compatible = "nvidia,tegra-pwm-backlight"; 1270 - 1271 - nvidia,pwm-source = <1>; 1272 - nvidia,default-brightness = <0x8E>; 1273 1264 }; 1274 1265 1275 1266 /* PMIC has a built-in 32KHz oscillator which is used by PMC */
+23 -23
arch/arm/dts/tegra30-lenovo-ideapad-yoga-11.dts
··· 109 109 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 110 110 nvidia,tristate = <TEGRA_PIN_DISABLE>; 111 111 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 112 - nvidia,lock = <1>; 113 - nvidia,io-reset = <1>; 112 + nvidia,lock = <TEGRA_PIN_DISABLE>; 113 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 114 114 }; 115 115 sdmmc4-cmd { 116 116 nvidia,pins = "sdmmc4_cmd_pt7", ··· 127 127 nvidia,pull = <TEGRA_PIN_PULL_UP>; 128 128 nvidia,tristate = <TEGRA_PIN_DISABLE>; 129 129 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 130 - nvidia,lock = <1>; 131 - nvidia,io-reset = <1>; 130 + nvidia,lock = <TEGRA_PIN_DISABLE>; 131 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 132 132 }; 133 133 cam-mclk { 134 134 nvidia,pins = "cam_mclk_pcc0"; ··· 147 147 nvidia,tristate = <TEGRA_PIN_DISABLE>; 148 148 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 149 149 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 150 - nvidia,lock = <1>; 150 + nvidia,lock = <TEGRA_PIN_DISABLE>; 151 151 }; 152 152 gen2-i2c { 153 153 nvidia,pins = "gen2_i2c_scl_pt5", ··· 157 157 nvidia,tristate = <TEGRA_PIN_DISABLE>; 158 158 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 159 159 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 160 - nvidia,lock = <1>; 160 + nvidia,lock = <TEGRA_PIN_DISABLE>; 161 161 }; 162 162 cam-i2c { 163 163 nvidia,pins = "cam_i2c_scl_pbb1", ··· 167 167 nvidia,tristate = <TEGRA_PIN_DISABLE>; 168 168 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 169 169 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 170 - nvidia,lock = <1>; 170 + nvidia,lock = <TEGRA_PIN_DISABLE>; 171 171 }; 172 172 ddc-i2c { 173 173 nvidia,pins = "ddc_scl_pv4", ··· 176 176 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 177 177 nvidia,tristate = <TEGRA_PIN_DISABLE>; 178 178 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 179 - nvidia,lock = <1>; 179 + nvidia,lock = <TEGRA_PIN_DISABLE>; 180 180 }; 181 181 pwr-i2c { 182 182 nvidia,pins = "pwr_i2c_scl_pz6", ··· 186 186 nvidia,tristate = <TEGRA_PIN_DISABLE>; 187 187 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 188 188 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 189 - nvidia,lock = <1>; 189 + nvidia,lock = <TEGRA_PIN_DISABLE>; 190 190 }; 191 191 192 192 /* HDMI pinmux */ ··· 724 724 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 725 725 nvidia,tristate = <TEGRA_PIN_ENABLE>; 726 726 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 727 - nvidia,lock = <1>; 728 - nvidia,io-reset = <1>; 727 + nvidia,lock = <TEGRA_PIN_DISABLE>; 728 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 729 729 }; 730 730 vi-vsync-pd6 { 731 731 nvidia,pins = "vi_vsync_pd6", ··· 736 736 nvidia,pull = <TEGRA_PIN_PULL_DOWN>; 737 737 nvidia,tristate = <TEGRA_PIN_ENABLE>; 738 738 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 739 - nvidia,lock = <1>; 740 - nvidia,io-reset = <2>; 739 + nvidia,lock = <TEGRA_PIN_DISABLE>; 740 + nvidia,io-reset = <TEGRA_PIN_ENABLE>; 741 741 }; 742 742 vi-hsync-pd7 { 743 743 nvidia,pins = "vi_hsync_pd7", ··· 749 749 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 750 750 nvidia,tristate = <TEGRA_PIN_DISABLE>; 751 751 nvidia,enable-input = <TEGRA_PIN_DISABLE>; 752 - nvidia,lock = <1>; 753 - nvidia,io-reset = <1>; 752 + nvidia,lock = <TEGRA_PIN_DISABLE>; 753 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 754 754 }; 755 755 vi-d2-pl0 { 756 756 nvidia,pins = "vi_d2_pl0", ··· 760 760 nvidia,pull = <TEGRA_PIN_PULL_UP>; 761 761 nvidia,tristate = <TEGRA_PIN_DISABLE>; 762 762 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 763 - nvidia,lock = <1>; 764 - nvidia,io-reset = <1>; 763 + nvidia,lock = <TEGRA_PIN_DISABLE>; 764 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 765 765 }; 766 766 vi-mclk-pt1 { 767 767 nvidia,pins = "vi_mclk_pt1"; ··· 769 769 nvidia,pull = <TEGRA_PIN_PULL_DOWN>; 770 770 nvidia,tristate = <TEGRA_PIN_ENABLE>; 771 771 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 772 - nvidia,lock = <1>; 773 - nvidia,io-reset = <2>; 772 + nvidia,lock = <TEGRA_PIN_DISABLE>; 773 + nvidia,io-reset = <TEGRA_PIN_ENABLE>; 774 774 }; 775 775 vi-d11-pt3 { 776 776 nvidia,pins = "vi_d11_pt3"; ··· 778 778 nvidia,pull = <TEGRA_PIN_PULL_UP>; 779 779 nvidia,tristate = <TEGRA_PIN_ENABLE>; 780 780 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 781 - nvidia,lock = <1>; 782 - nvidia,io-reset = <1>; 781 + nvidia,lock = <TEGRA_PIN_DISABLE>; 782 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 783 783 }; 784 784 vi-d5-pl3 { 785 785 nvidia,pins = "vi_d5_pl3"; ··· 787 787 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 788 788 nvidia,tristate = <TEGRA_PIN_DISABLE>; 789 789 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 790 - nvidia,lock = <1>; 791 - nvidia,io-reset = <1>; 790 + nvidia,lock = <TEGRA_PIN_DISABLE>; 791 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 792 792 }; 793 793 794 794 /* PORT U */
+25 -9
arch/arm/dts/tegra30-lg-p880.dts
··· 101 101 }; 102 102 }; 103 103 104 + spi@7000dc00 { 105 + bridge-spi@2 { 106 + /* 107 + * JDI 4.57" 720x1280 DX12D100VM0EAA MIPI DSI panel 108 + */ 109 + panel@0 { 110 + compatible = "jdi,dx12d100vm0eaa"; 111 + reg = <0>; 112 + 113 + reset-gpios = <&gpio TEGRA_GPIO(W, 0) GPIO_ACTIVE_LOW>; 114 + 115 + vdd-supply = <&vcc_3v0_lcd>; 116 + vddio-supply = <&iovcc_1v8_lcd>; 117 + 118 + backlight = <&backlight>; 119 + 120 + port { 121 + panel_input: endpoint { 122 + remote-endpoint = <&bridge_output>; 123 + }; 124 + }; 125 + }; 126 + }; 127 + }; 128 + 104 129 sdmmc3: sdhci@78000400 { 105 130 status = "okay"; 106 131 bus-width = <4>; ··· 117 142 gpios = <&gpio TEGRA_GPIO(O, 7) GPIO_ACTIVE_LOW>; 118 143 linux,code = <KEY_UP>; 119 144 }; 120 - }; 121 - 122 - panel: panel { 123 - compatible = "jdi,dx12d100vm0eaa"; 124 - 125 - enable-gpios = <&gpio TEGRA_GPIO(Y, 0) GPIO_ACTIVE_HIGH>; 126 - reset-gpios = <&gpio TEGRA_GPIO(W, 0) GPIO_ACTIVE_HIGH>; 127 - 128 - backlight = <&backlight>; 129 145 }; 130 146 };
+24 -23
arch/arm/dts/tegra30-lg-p895.dts
··· 108 108 }; 109 109 }; 110 110 111 - panel: panel { 112 - compatible = "hitachi,tx13d100vm0eaa"; 111 + spi@7000dc00 { 112 + bridge-spi@2 { 113 + /* 114 + * HITACHI/KOE 5" 768x1024 TX13D100VM0EAA MIPI DSI panel 115 + */ 116 + panel@0 { 117 + compatible = "koe,tx13d100vm0eaa"; 118 + reg = <0>; 113 119 114 - reset-gpios = <&gpio TEGRA_GPIO(W, 0) GPIO_ACTIVE_HIGH>; 120 + reset-gpios = <&gpio TEGRA_GPIO(W, 0) GPIO_ACTIVE_LOW>; 115 121 116 - renesas,gamma = <3>; 117 - renesas,inversion; 118 - renesas,contrast; 122 + renesas,gamma = <3>; 123 + renesas,inversion; 124 + renesas,contrast; 119 125 120 - vcc-supply = <&vcc_3v0_lcd>; 121 - iovcc-supply = <&iovcc_1v8_lcd>; 126 + vcc-supply = <&vcc_3v0_lcd>; 127 + iovcc-supply = <&iovcc_1v8_lcd>; 128 + 129 + backlight = <&backlight>; 122 130 123 - backlight = <&backlight>; 131 + port { 132 + panel_input: endpoint { 133 + remote-endpoint = <&bridge_output>; 134 + }; 135 + }; 136 + }; 137 + }; 124 138 }; 125 139 126 - vcc_3v0_lcd: regulator-lcd { 127 - compatible = "regulator-fixed"; 128 - regulator-name = "vcc_3v0_lcd"; 129 - regulator-min-microvolt = <3000000>; 130 - regulator-max-microvolt = <3000000>; 140 + regulator-lcd3v { 131 141 gpio = <&gpio TEGRA_GPIO(BB, 0) GPIO_ACTIVE_HIGH>; 132 - enable-active-high; 133 - }; 134 - 135 - iovcc_1v8_lcd: regulator-lcdvio { 136 - compatible = "regulator-fixed"; 137 - regulator-name = "iovcc_1v8_lcd"; 138 - regulator-min-microvolt = <1800000>; 139 - regulator-max-microvolt = <1800000>; 140 - gpio = <&gpio TEGRA_GPIO(Y, 0) GPIO_ACTIVE_HIGH>; 141 142 enable-active-high; 142 143 }; 143 144 };
+75 -7
arch/arm/dts/tegra30-lg-x3.dtsi
··· 32 32 rgb { 33 33 status = "okay"; 34 34 35 - nvidia,panel = <&bridge>; 35 + port { 36 + dpi_output: endpoint { 37 + remote-endpoint = <&bridge_input>; 38 + bus-width = <24>; 39 + }; 40 + }; 36 41 }; 37 42 }; 38 43 }; ··· 890 895 status = "okay"; 891 896 clock-frequency = <400000>; 892 897 893 - backlight: lm3533@36 { 898 + backlight: led-controller@36 { 894 899 compatible = "ti,lm3533"; 895 900 reg = <0x36>; 896 901 897 902 enable-gpios = <&gpio TEGRA_GPIO(N, 6) GPIO_ACTIVE_HIGH>; 898 - default-brightness-level = <128>; 903 + 904 + ti,boost-ovp-microvolt = <24000000>; 905 + ti,boost-freq-hz = <500000>; 906 + 907 + backlight-0 { 908 + compatible = "ti,lm3533-backlight"; 909 + 910 + ti,max-current-microamp = <23400>; 911 + ti,linear-mapping-mode; 912 + ti,hardware-controlled; 913 + }; 899 914 }; 900 915 901 916 muic@44 { ··· 969 984 compatible = "solomon,ssd2825"; 970 985 reg = <2>; 971 986 987 + #address-cells = <1>; 988 + #size-cells = <0>; 989 + 972 990 spi-cpol; 973 991 spi-cpha; 974 992 975 993 spi-max-frequency = <1000000>; 976 994 977 - power-gpios = <&gpio TEGRA_GPIO(B, 1) GPIO_ACTIVE_HIGH>; 978 - reset-gpios = <&gpio TEGRA_GPIO(O, 2) GPIO_ACTIVE_HIGH>; 995 + reset-gpios = <&gpio TEGRA_GPIO(O, 2) GPIO_ACTIVE_LOW>; 996 + 997 + dvdd-supply = <&vdd_1v2_rgb>; 998 + avdd-supply = <&vdd_1v2_rgb>; 999 + vddio-supply = <&vdd_1v8_vio>; 1000 + 1001 + solomon,hs-zero-delay-ns = <300>; 1002 + solomon,hs-prep-delay-ns = <65>; 979 1003 980 1004 clocks = <&ssd2825_refclk>; 981 - clock-names = "tx_clk"; 1005 + 1006 + ports { 1007 + #address-cells = <1>; 1008 + #size-cells = <0>; 1009 + 1010 + port@0 { 1011 + reg = <0>; 1012 + 1013 + bridge_input: endpoint { 1014 + remote-endpoint = <&dpi_output>; 1015 + bus-width = <24>; 1016 + }; 1017 + }; 982 1018 983 - panel = <&panel>; 1019 + port@1 { 1020 + reg = <1>; 1021 + 1022 + bridge_output: endpoint { 1023 + remote-endpoint = <&panel_input>; 1024 + }; 1025 + }; 1026 + }; 984 1027 }; 985 1028 }; 986 1029 ··· 1035 1078 gpios = <&gpio TEGRA_GPIO(O, 4) GPIO_ACTIVE_LOW>; 1036 1079 linux,code = <KEY_DOWN>; 1037 1080 }; 1081 + }; 1082 + 1083 + vdd_1v2_rgb: regulator-rgb1v2 { 1084 + compatible = "regulator-fixed"; 1085 + regulator-name = "vdd_1v2_rgb"; 1086 + regulator-min-microvolt = <1200000>; 1087 + regulator-max-microvolt = <1200000>; 1088 + gpio = <&gpio TEGRA_GPIO(B, 1) GPIO_ACTIVE_HIGH>; 1089 + enable-active-high; 1090 + }; 1091 + 1092 + vcc_3v0_lcd: regulator-lcd3v { 1093 + compatible = "regulator-fixed"; 1094 + regulator-name = "vcc_3v0_lcd"; 1095 + regulator-min-microvolt = <3000000>; 1096 + regulator-max-microvolt = <3000000>; 1097 + }; 1098 + 1099 + iovcc_1v8_lcd: regulator-lcd1v8 { 1100 + compatible = "regulator-fixed"; 1101 + regulator-name = "iovcc_1v8_lcd"; 1102 + regulator-min-microvolt = <1800000>; 1103 + regulator-max-microvolt = <1800000>; 1104 + gpio = <&gpio TEGRA_GPIO(Y, 0) GPIO_ACTIVE_HIGH>; 1105 + enable-active-high; 1038 1106 }; 1039 1107 };
+19 -19
arch/arm/dts/tegra30-microsoft-surface-rt.dts
··· 103 103 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 104 104 nvidia,tristate = <TEGRA_PIN_DISABLE>; 105 105 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 106 - nvidia,lock = <1>; 107 - nvidia,io-reset = <1>; 106 + nvidia,lock = <TEGRA_PIN_DISABLE>; 107 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 108 108 }; 109 109 sdmmc4-cmd { 110 110 nvidia,pins = "sdmmc4_cmd_pt7", ··· 121 121 nvidia,pull = <TEGRA_PIN_PULL_UP>; 122 122 nvidia,tristate = <TEGRA_PIN_DISABLE>; 123 123 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 124 - nvidia,lock = <1>; 125 - nvidia,io-reset = <1>; 124 + nvidia,lock = <TEGRA_PIN_DISABLE>; 125 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 126 126 }; 127 127 cam-mclk { 128 128 nvidia,pins = "cam_mclk_pcc0"; ··· 141 141 nvidia,tristate = <TEGRA_PIN_DISABLE>; 142 142 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 143 143 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 144 - nvidia,lock = <0>; 144 + nvidia,lock = <TEGRA_PIN_DISABLE>; 145 145 }; 146 146 gen2-i2c { 147 147 nvidia,pins = "gen2_i2c_scl_pt5", ··· 151 151 nvidia,tristate = <TEGRA_PIN_DISABLE>; 152 152 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 153 153 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 154 - nvidia,lock = <0>; 154 + nvidia,lock = <TEGRA_PIN_DISABLE>; 155 155 }; 156 156 cam-i2c { 157 157 nvidia,pins = "cam_i2c_scl_pbb1", ··· 161 161 nvidia,tristate = <TEGRA_PIN_DISABLE>; 162 162 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 163 163 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 164 - nvidia,lock = <0>; 164 + nvidia,lock = <TEGRA_PIN_DISABLE>; 165 165 }; 166 166 ddc-i2c { 167 167 nvidia,pins = "ddc_scl_pv4", ··· 170 170 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 171 171 nvidia,tristate = <TEGRA_PIN_DISABLE>; 172 172 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 173 - nvidia,lock = <0>; 173 + nvidia,lock = <TEGRA_PIN_DISABLE>; 174 174 }; 175 175 pwr-i2c { 176 176 nvidia,pins = "pwr_i2c_scl_pz6", ··· 180 180 nvidia,tristate = <TEGRA_PIN_DISABLE>; 181 181 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 182 182 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 183 - nvidia,lock = <0>; 183 + nvidia,lock = <TEGRA_PIN_DISABLE>; 184 184 }; 185 185 186 186 /* HDMI pinmux */ ··· 703 703 nvidia,pull = <TEGRA_PIN_PULL_DOWN>; 704 704 nvidia,tristate = <TEGRA_PIN_ENABLE>; 705 705 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 706 - nvidia,lock = <1>; 707 - nvidia,io-reset = <1>; 706 + nvidia,lock = <TEGRA_PIN_DISABLE>; 707 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 708 708 }; 709 709 vi-d3-pl1 { 710 710 nvidia,pins = "vi_d3_pl1"; ··· 712 712 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 713 713 nvidia,tristate = <TEGRA_PIN_ENABLE>; 714 714 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 715 - nvidia,lock = <1>; 716 - nvidia,io-reset = <1>; 715 + nvidia,lock = <TEGRA_PIN_DISABLE>; 716 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 717 717 }; 718 718 vi-hsync-pd7 { 719 719 nvidia,pins = "vi_hsync_pd7", ··· 724 724 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 725 725 nvidia,tristate = <TEGRA_PIN_DISABLE>; 726 726 nvidia,enable-input = <TEGRA_PIN_DISABLE>; 727 - nvidia,lock = <1>; 728 - nvidia,io-reset = <1>; 727 + nvidia,lock = <TEGRA_PIN_DISABLE>; 728 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 729 729 }; 730 730 vi-mclk-pt1 { 731 731 nvidia,pins = "vi_mclk_pt1"; ··· 733 733 nvidia,pull = <TEGRA_PIN_PULL_DOWN>; 734 734 nvidia,tristate = <TEGRA_PIN_ENABLE>; 735 735 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 736 - nvidia,lock = <1>; 737 - nvidia,io-reset = <1>; 736 + nvidia,lock = <TEGRA_PIN_DISABLE>; 737 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 738 738 }; 739 739 vi-d11-pt3 { 740 740 nvidia,pins = "vi_d11_pt3"; ··· 742 742 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 743 743 nvidia,tristate = <TEGRA_PIN_DISABLE>; 744 744 nvidia,enable-input = <TEGRA_PIN_DISABLE>; 745 - nvidia,lock = <1>; 746 - nvidia,io-reset = <1>; 745 + nvidia,lock = <TEGRA_PIN_DISABLE>; 746 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 747 747 }; 748 748 749 749 /* PORT U */
+2063
arch/arm/dts/tegra30-ouya.dts
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /dts-v1/; 3 + 4 + #include <dt-bindings/input/input.h> 5 + #include "tegra30.dtsi" 6 + 7 + / { 8 + model = "Ouya Game Console"; 9 + compatible = "ouya,ouya", "nvidia,tegra30"; 10 + 11 + chosen { 12 + stdout-path = &uartd; 13 + }; 14 + 15 + aliases { 16 + i2c0 = &pwr_i2c; 17 + i2c1 = &hdmi_ddc; 18 + 19 + mmc0 = &sdmmc4; 20 + 21 + rtc0 = &pmic; 22 + rtc1 = "/rtc@7000e000"; 23 + 24 + usb0 = &micro_usb; 25 + usb1 = &ethernet_usb; 26 + usb2 = &fullsize_usb; 27 + }; 28 + 29 + memory { 30 + device_type = "memory"; 31 + reg = <0x80000000 0x40000000>; 32 + }; 33 + 34 + host1x@50000000 { 35 + dc@54200000 { 36 + status = "disabled"; 37 + }; 38 + 39 + hdmi: hdmi@54280000 { 40 + status = "okay"; 41 + 42 + hdmi-supply = <&sys_3v3_reg>; 43 + pll-supply = <&ldo7_reg>; 44 + vdd-supply = <&vdd_vid_reg>; 45 + 46 + nvidia,hpd-gpio = <&gpio TEGRA_GPIO(N, 7) GPIO_ACTIVE_HIGH>; 47 + nvidia,ddc-i2c-bus = <&hdmi_ddc>; 48 + }; 49 + }; 50 + 51 + gpio@6000d000 { 52 + fan-en-hog { 53 + gpio-hog; 54 + gpios = <TEGRA_GPIO(J, 2) GPIO_ACTIVE_HIGH>; 55 + output-high; 56 + }; 57 + }; 58 + 59 + pinmux@70000868 { 60 + pinctrl-names = "default"; 61 + pinctrl-0 = <&state_default>; 62 + 63 + state_default: pinmux { 64 + clk_32k_out_pa0 { 65 + nvidia,pins = "clk_32k_out_pa0"; 66 + nvidia,function = "blink"; 67 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 68 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 69 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 70 + }; 71 + 72 + uart3_cts_n_pa1 { 73 + nvidia,pins = "uart3_cts_n_pa1"; 74 + nvidia,function = "uartc"; 75 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 76 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 77 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 78 + }; 79 + 80 + dap2_fs_pa2 { 81 + nvidia,pins = "dap2_fs_pa2"; 82 + nvidia,function = "i2s1"; 83 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 84 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 85 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 86 + }; 87 + 88 + dap2_sclk_pa3 { 89 + nvidia,pins = "dap2_sclk_pa3"; 90 + nvidia,function = "i2s1"; 91 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 92 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 93 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 94 + }; 95 + 96 + dap2_din_pa4 { 97 + nvidia,pins = "dap2_din_pa4"; 98 + nvidia,function = "i2s1"; 99 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 100 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 101 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 102 + }; 103 + 104 + dap2_dout_pa5 { 105 + nvidia,pins = "dap2_dout_pa5"; 106 + nvidia,function = "i2s1"; 107 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 108 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 109 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 110 + }; 111 + 112 + sdmmc3_clk_pa6 { 113 + nvidia,pins = "sdmmc3_clk_pa6"; 114 + nvidia,function = "sdmmc3"; 115 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 116 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 117 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 118 + }; 119 + 120 + sdmmc3_cmd_pa7 { 121 + nvidia,pins = "sdmmc3_cmd_pa7"; 122 + nvidia,function = "sdmmc3"; 123 + nvidia,pull = <TEGRA_PIN_PULL_UP>; 124 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 125 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 126 + }; 127 + 128 + gmi_a17_pb0 { 129 + nvidia,pins = "gmi_a17_pb0"; 130 + nvidia,function = "spi4"; 131 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 132 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 133 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 134 + }; 135 + 136 + gmi_a18_pb1 { 137 + nvidia,pins = "gmi_a18_pb1"; 138 + nvidia,function = "spi4"; 139 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 140 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 141 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 142 + }; 143 + 144 + lcd_pwr0_pb2 { 145 + nvidia,pins = "lcd_pwr0_pb2"; 146 + nvidia,function = "displaya"; 147 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 148 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 149 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 150 + }; 151 + 152 + lcd_pclk_pb3 { 153 + nvidia,pins = "lcd_pclk_pb3"; 154 + nvidia,function = "displaya"; 155 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 156 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 157 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 158 + }; 159 + 160 + sdmmc3_dat3_pb4 { 161 + nvidia,pins = "sdmmc3_dat3_pb4"; 162 + nvidia,function = "sdmmc3"; 163 + nvidia,pull = <TEGRA_PIN_PULL_UP>; 164 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 165 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 166 + }; 167 + 168 + sdmmc3_dat2_pb5 { 169 + nvidia,pins = "sdmmc3_dat2_pb5"; 170 + nvidia,function = "sdmmc3"; 171 + nvidia,pull = <TEGRA_PIN_PULL_UP>; 172 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 173 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 174 + }; 175 + 176 + sdmmc3_dat1_pb6 { 177 + nvidia,pins = "sdmmc3_dat1_pb6"; 178 + nvidia,function = "sdmmc3"; 179 + nvidia,pull = <TEGRA_PIN_PULL_UP>; 180 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 181 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 182 + }; 183 + 184 + sdmmc3_dat0_pb7 { 185 + nvidia,pins = "sdmmc3_dat0_pb7"; 186 + nvidia,function = "sdmmc3"; 187 + nvidia,pull = <TEGRA_PIN_PULL_UP>; 188 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 189 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 190 + }; 191 + 192 + uart3_rts_n_pc0 { 193 + nvidia,pins = "uart3_rts_n_pc0"; 194 + nvidia,function = "uartc"; 195 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 196 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 197 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 198 + }; 199 + 200 + lcd_pwr1_pc1 { 201 + nvidia,pins = "lcd_pwr1_pc1"; 202 + nvidia,function = "displaya"; 203 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 204 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 205 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 206 + }; 207 + 208 + uart2_txd_pc2 { 209 + nvidia,pins = "uart2_txd_pc2"; 210 + nvidia,function = "uartb"; 211 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 212 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 213 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 214 + }; 215 + 216 + uart2_rxd_pc3 { 217 + nvidia,pins = "uart2_rxd_pc3"; 218 + nvidia,function = "uartb"; 219 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 220 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 221 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 222 + }; 223 + 224 + gen1_i2c_scl_pc4 { 225 + nvidia,pins = "gen1_i2c_scl_pc4"; 226 + nvidia,function = "i2c1"; 227 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 228 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 229 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 230 + nvidia,open-drain = <TEGRA_PIN_DISABLE>; 231 + }; 232 + 233 + gen1_i2c_sda_pc5 { 234 + nvidia,pins = "gen1_i2c_sda_pc5"; 235 + nvidia,function = "i2c1"; 236 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 237 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 238 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 239 + nvidia,open-drain = <TEGRA_PIN_DISABLE>; 240 + }; 241 + 242 + lcd_pwr2_pc6 { 243 + nvidia,pins = "lcd_pwr2_pc6"; 244 + nvidia,function = "displaya"; 245 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 246 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 247 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 248 + }; 249 + 250 + gmi_wp_n_pc7 { 251 + nvidia,pins = "gmi_wp_n_pc7"; 252 + nvidia,function = "gmi"; 253 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 254 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 255 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 256 + }; 257 + 258 + sdmmc3_dat5_pd0 { 259 + nvidia,pins = "sdmmc3_dat5_pd0"; 260 + nvidia,function = "sdmmc3"; 261 + nvidia,pull = <TEGRA_PIN_PULL_UP>; 262 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 263 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 264 + }; 265 + 266 + sdmmc3_dat4_pd1 { 267 + nvidia,pins = "sdmmc3_dat4_pd1"; 268 + nvidia,function = "sdmmc3"; 269 + nvidia,pull = <TEGRA_PIN_PULL_UP>; 270 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 271 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 272 + }; 273 + 274 + lcd_dc1_pd2 { 275 + nvidia,pins = "lcd_dc1_pd2"; 276 + nvidia,function = "displaya"; 277 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 278 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 279 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 280 + }; 281 + 282 + sdmmc3_dat6_pd3 { 283 + nvidia,pins = "sdmmc3_dat6_pd3"; 284 + nvidia,function = "spi4"; 285 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 286 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 287 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 288 + }; 289 + 290 + sdmmc3_dat7_pd4 { 291 + nvidia,pins = "sdmmc3_dat7_pd4"; 292 + nvidia,function = "spi4"; 293 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 294 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 295 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 296 + }; 297 + 298 + vi_d1_pd5 { 299 + nvidia,pins = "vi_d1_pd5"; 300 + nvidia,function = "sdmmc2"; 301 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 302 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 303 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 304 + }; 305 + 306 + vi_vsync_pd6 { 307 + nvidia,pins = "vi_vsync_pd6"; 308 + nvidia,function = "ddr"; 309 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 310 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 311 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 312 + }; 313 + 314 + vi_hsync_pd7 { 315 + nvidia,pins = "vi_hsync_pd7"; 316 + nvidia,function = "ddr"; 317 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 318 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 319 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 320 + }; 321 + 322 + lcd_d0_pe0 { 323 + nvidia,pins = "lcd_d0_pe0"; 324 + nvidia,function = "displaya"; 325 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 326 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 327 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 328 + }; 329 + 330 + lcd_d1_pe1 { 331 + nvidia,pins = "lcd_d1_pe1"; 332 + nvidia,function = "displaya"; 333 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 334 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 335 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 336 + }; 337 + 338 + lcd_d2_pe2 { 339 + nvidia,pins = "lcd_d2_pe2"; 340 + nvidia,function = "displaya"; 341 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 342 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 343 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 344 + }; 345 + 346 + lcd_d3_pe3 { 347 + nvidia,pins = "lcd_d3_pe3"; 348 + nvidia,function = "displaya"; 349 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 350 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 351 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 352 + }; 353 + 354 + lcd_d4_pe4 { 355 + nvidia,pins = "lcd_d4_pe4"; 356 + nvidia,function = "displaya"; 357 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 358 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 359 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 360 + }; 361 + 362 + lcd_d5_pe5 { 363 + nvidia,pins = "lcd_d5_pe5"; 364 + nvidia,function = "displaya"; 365 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 366 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 367 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 368 + }; 369 + 370 + lcd_d6_pe6 { 371 + nvidia,pins = "lcd_d6_pe6"; 372 + nvidia,function = "displaya"; 373 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 374 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 375 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 376 + }; 377 + 378 + lcd_d7_pe7 { 379 + nvidia,pins = "lcd_d7_pe7"; 380 + nvidia,function = "displaya"; 381 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 382 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 383 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 384 + }; 385 + 386 + lcd_d8_pf0 { 387 + nvidia,pins = "lcd_d8_pf0"; 388 + nvidia,function = "displaya"; 389 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 390 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 391 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 392 + }; 393 + 394 + lcd_d9_pf1 { 395 + nvidia,pins = "lcd_d9_pf1"; 396 + nvidia,function = "displaya"; 397 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 398 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 399 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 400 + }; 401 + 402 + lcd_d10_pf2 { 403 + nvidia,pins = "lcd_d10_pf2"; 404 + nvidia,function = "displaya"; 405 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 406 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 407 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 408 + }; 409 + 410 + lcd_d11_pf3 { 411 + nvidia,pins = "lcd_d11_pf3"; 412 + nvidia,function = "displaya"; 413 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 414 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 415 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 416 + }; 417 + 418 + lcd_d12_pf4 { 419 + nvidia,pins = "lcd_d12_pf4"; 420 + nvidia,function = "displaya"; 421 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 422 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 423 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 424 + }; 425 + 426 + lcd_d13_pf5 { 427 + nvidia,pins = "lcd_d13_pf5"; 428 + nvidia,function = "displaya"; 429 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 430 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 431 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 432 + }; 433 + 434 + lcd_d14_pf6 { 435 + nvidia,pins = "lcd_d14_pf6"; 436 + nvidia,function = "displaya"; 437 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 438 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 439 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 440 + }; 441 + 442 + lcd_d15_pf7 { 443 + nvidia,pins = "lcd_d15_pf7"; 444 + nvidia,function = "displaya"; 445 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 446 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 447 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 448 + }; 449 + 450 + gmi_ad0_pg0 { 451 + nvidia,pins = "gmi_ad0_pg0"; 452 + nvidia,function = "nand"; 453 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 454 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 455 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 456 + }; 457 + 458 + gmi_ad1_pg1 { 459 + nvidia,pins = "gmi_ad1_pg1"; 460 + nvidia,function = "nand"; 461 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 462 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 463 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 464 + }; 465 + 466 + gmi_ad2_pg2 { 467 + nvidia,pins = "gmi_ad2_pg2"; 468 + nvidia,function = "nand"; 469 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 470 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 471 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 472 + }; 473 + 474 + gmi_ad3_pg3 { 475 + nvidia,pins = "gmi_ad3_pg3"; 476 + nvidia,function = "nand"; 477 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 478 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 479 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 480 + }; 481 + 482 + gmi_ad4_pg4 { 483 + nvidia,pins = "gmi_ad4_pg4"; 484 + nvidia,function = "nand"; 485 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 486 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 487 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 488 + }; 489 + 490 + gmi_ad5_pg5 { 491 + nvidia,pins = "gmi_ad5_pg5"; 492 + nvidia,function = "nand"; 493 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 494 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 495 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 496 + }; 497 + 498 + gmi_ad6_pg6 { 499 + nvidia,pins = "gmi_ad6_pg6"; 500 + nvidia,function = "nand"; 501 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 502 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 503 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 504 + }; 505 + 506 + gmi_ad7_pg7 { 507 + nvidia,pins = "gmi_ad7_pg7"; 508 + nvidia,function = "nand"; 509 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 510 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 511 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 512 + }; 513 + 514 + gmi_ad8_ph0 { 515 + nvidia,pins = "gmi_ad8_ph0"; 516 + nvidia,function = "pwm0"; 517 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 518 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 519 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 520 + }; 521 + 522 + gmi_ad9_ph1 { 523 + nvidia,pins = "gmi_ad9_ph1"; 524 + nvidia,function = "pwm1"; 525 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 526 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 527 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 528 + }; 529 + 530 + gmi_ad10_ph2 { 531 + nvidia,pins = "gmi_ad10_ph2"; 532 + nvidia,function = "pwm2"; 533 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 534 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 535 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 536 + }; 537 + 538 + gmi_ad11_ph3 { 539 + nvidia,pins = "gmi_ad11_ph3"; 540 + nvidia,function = "nand"; 541 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 542 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 543 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 544 + }; 545 + 546 + gmi_ad12_ph4 { 547 + nvidia,pins = "gmi_ad12_ph4"; 548 + nvidia,function = "nand"; 549 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 550 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 551 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 552 + }; 553 + 554 + gmi_ad13_ph5 { 555 + nvidia,pins = "gmi_ad13_ph5"; 556 + nvidia,function = "nand"; 557 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 558 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 559 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 560 + }; 561 + 562 + gmi_ad14_ph6 { 563 + nvidia,pins = "gmi_ad14_ph6"; 564 + nvidia,function = "nand"; 565 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 566 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 567 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 568 + }; 569 + 570 + gmi_wr_n_pi0 { 571 + nvidia,pins = "gmi_wr_n_pi0"; 572 + nvidia,function = "nand"; 573 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 574 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 575 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 576 + }; 577 + 578 + gmi_oe_n_pi1 { 579 + nvidia,pins = "gmi_oe_n_pi1"; 580 + nvidia,function = "nand"; 581 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 582 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 583 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 584 + }; 585 + 586 + gmi_dqs_pi2 { 587 + nvidia,pins = "gmi_dqs_pi2"; 588 + nvidia,function = "nand"; 589 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 590 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 591 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 592 + }; 593 + 594 + gmi_iordy_pi5 { 595 + nvidia,pins = "gmi_iordy_pi5"; 596 + nvidia,function = "rsvd1"; 597 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 598 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 599 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 600 + }; 601 + 602 + gmi_cs7_n_pi6 { 603 + nvidia,pins = "gmi_cs7_n_pi6"; 604 + nvidia,function = "nand"; 605 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 606 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 607 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 608 + }; 609 + 610 + gmi_wait_pi7 { 611 + nvidia,pins = "gmi_wait_pi7"; 612 + nvidia,function = "nand"; 613 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 614 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 615 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 616 + }; 617 + 618 + lcd_de_pj1 { 619 + nvidia,pins = "lcd_de_pj1"; 620 + nvidia,function = "displaya"; 621 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 622 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 623 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 624 + }; 625 + 626 + gmi_cs1_n_pj2 { 627 + nvidia,pins = "gmi_cs1_n_pj2"; 628 + nvidia,function = "rsvd1"; 629 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 630 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 631 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 632 + }; 633 + 634 + lcd_hsync_pj3 { 635 + nvidia,pins = "lcd_hsync_pj3"; 636 + nvidia,function = "displaya"; 637 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 638 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 639 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 640 + }; 641 + 642 + lcd_vsync_pj4 { 643 + nvidia,pins = "lcd_vsync_pj4"; 644 + nvidia,function = "displaya"; 645 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 646 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 647 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 648 + }; 649 + 650 + uart2_cts_n_pj5 { 651 + nvidia,pins = "uart2_cts_n_pj5"; 652 + nvidia,function = "uartb"; 653 + nvidia,pull = <TEGRA_PIN_PULL_DOWN>; 654 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 655 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 656 + }; 657 + 658 + uart2_rts_n_pj6 { 659 + nvidia,pins = "uart2_rts_n_pj6"; 660 + nvidia,function = "uartb"; 661 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 662 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 663 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 664 + }; 665 + 666 + gmi_a16_pj7 { 667 + nvidia,pins = "gmi_a16_pj7"; 668 + nvidia,function = "spi4"; 669 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 670 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 671 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 672 + }; 673 + 674 + gmi_adv_n_pk0 { 675 + nvidia,pins = "gmi_adv_n_pk0"; 676 + nvidia,function = "nand"; 677 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 678 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 679 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 680 + }; 681 + 682 + gmi_clk_pk1 { 683 + nvidia,pins = "gmi_clk_pk1"; 684 + nvidia,function = "nand"; 685 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 686 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 687 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 688 + }; 689 + 690 + gmi_cs2_n_pk3 { 691 + nvidia,pins = "gmi_cs2_n_pk3"; 692 + nvidia,function = "rsvd1"; 693 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 694 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 695 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 696 + }; 697 + 698 + gmi_cs3_n_pk4 { 699 + nvidia,pins = "gmi_cs3_n_pk4"; 700 + nvidia,function = "nand"; 701 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 702 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 703 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 704 + }; 705 + 706 + spdif_out_pk5 { 707 + nvidia,pins = "spdif_out_pk5"; 708 + nvidia,function = "spdif"; 709 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 710 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 711 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 712 + }; 713 + 714 + spdif_in_pk6 { 715 + nvidia,pins = "spdif_in_pk6"; 716 + nvidia,function = "spdif"; 717 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 718 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 719 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 720 + }; 721 + 722 + gmi_a19_pk7 { 723 + nvidia,pins = "gmi_a19_pk7"; 724 + nvidia,function = "spi4"; 725 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 726 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 727 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 728 + }; 729 + 730 + vi_d2_pl0 { 731 + nvidia,pins = "vi_d2_pl0"; 732 + nvidia,function = "sdmmc2"; 733 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 734 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 735 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 736 + }; 737 + 738 + vi_d3_pl1 { 739 + nvidia,pins = "vi_d3_pl1"; 740 + nvidia,function = "sdmmc2"; 741 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 742 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 743 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 744 + }; 745 + 746 + vi_d4_pl2 { 747 + nvidia,pins = "vi_d4_pl2"; 748 + nvidia,function = "vi"; 749 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 750 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 751 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 752 + }; 753 + 754 + vi_d5_pl3 { 755 + nvidia,pins = "vi_d5_pl3"; 756 + nvidia,function = "sdmmc2"; 757 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 758 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 759 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 760 + }; 761 + 762 + vi_d6_pl4 { 763 + nvidia,pins = "vi_d6_pl4"; 764 + nvidia,function = "vi"; 765 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 766 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 767 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 768 + }; 769 + 770 + vi_d7_pl5 { 771 + nvidia,pins = "vi_d7_pl5"; 772 + nvidia,function = "sdmmc2"; 773 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 774 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 775 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 776 + }; 777 + 778 + vi_d8_pl6 { 779 + nvidia,pins = "vi_d8_pl6"; 780 + nvidia,function = "sdmmc2"; 781 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 782 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 783 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 784 + }; 785 + 786 + vi_d9_pl7 { 787 + nvidia,pins = "vi_d9_pl7"; 788 + nvidia,function = "sdmmc2"; 789 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 790 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 791 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 792 + }; 793 + 794 + lcd_d16_pm0 { 795 + nvidia,pins = "lcd_d16_pm0"; 796 + nvidia,function = "displaya"; 797 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 798 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 799 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 800 + }; 801 + 802 + lcd_d17_pm1 { 803 + nvidia,pins = "lcd_d17_pm1"; 804 + nvidia,function = "displaya"; 805 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 806 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 807 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 808 + }; 809 + 810 + lcd_d18_pm2 { 811 + nvidia,pins = "lcd_d18_pm2"; 812 + nvidia,function = "displaya"; 813 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 814 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 815 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 816 + }; 817 + 818 + lcd_d19_pm3 { 819 + nvidia,pins = "lcd_d19_pm3"; 820 + nvidia,function = "displaya"; 821 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 822 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 823 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 824 + }; 825 + 826 + lcd_d20_pm4 { 827 + nvidia,pins = "lcd_d20_pm4"; 828 + nvidia,function = "displaya"; 829 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 830 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 831 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 832 + }; 833 + 834 + lcd_d21_pm5 { 835 + nvidia,pins = "lcd_d21_pm5"; 836 + nvidia,function = "displaya"; 837 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 838 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 839 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 840 + }; 841 + 842 + lcd_d22_pm6 { 843 + nvidia,pins = "lcd_d22_pm6"; 844 + nvidia,function = "displaya"; 845 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 846 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 847 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 848 + }; 849 + 850 + lcd_d23_pm7 { 851 + nvidia,pins = "lcd_d23_pm7"; 852 + nvidia,function = "displaya"; 853 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 854 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 855 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 856 + }; 857 + 858 + dap1_fs_pn0 { 859 + nvidia,pins = "dap1_fs_pn0"; 860 + nvidia,function = "i2s0"; 861 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 862 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 863 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 864 + }; 865 + 866 + dap1_din_pn1 { 867 + nvidia,pins = "dap1_din_pn1"; 868 + nvidia,function = "i2s0"; 869 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 870 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 871 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 872 + }; 873 + 874 + dap1_dout_pn2 { 875 + nvidia,pins = "dap1_dout_pn2"; 876 + nvidia,function = "i2s0"; 877 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 878 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 879 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 880 + }; 881 + 882 + dap1_sclk_pn3 { 883 + nvidia,pins = "dap1_sclk_pn3"; 884 + nvidia,function = "i2s0"; 885 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 886 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 887 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 888 + }; 889 + 890 + lcd_cs0_n_pn4 { 891 + nvidia,pins = "lcd_cs0_n_pn4"; 892 + nvidia,function = "displaya"; 893 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 894 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 895 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 896 + }; 897 + 898 + lcd_sdout_pn5 { 899 + nvidia,pins = "lcd_sdout_pn5"; 900 + nvidia,function = "displaya"; 901 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 902 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 903 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 904 + }; 905 + 906 + lcd_dc0_pn6 { 907 + nvidia,pins = "lcd_dc0_pn6"; 908 + nvidia,function = "displaya"; 909 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 910 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 911 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 912 + }; 913 + 914 + hdmi_int_pn7 { 915 + nvidia,pins = "hdmi_int_pn7"; 916 + nvidia,function = "hdmi"; 917 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 918 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 919 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 920 + }; 921 + 922 + ulpi_data7_po0 { 923 + nvidia,pins = "ulpi_data7_po0"; 924 + nvidia,function = "uarta"; 925 + nvidia,pull = <TEGRA_PIN_PULL_DOWN>; 926 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 927 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 928 + }; 929 + 930 + ulpi_data0_po1 { 931 + nvidia,pins = "ulpi_data0_po1"; 932 + nvidia,function = "uarta"; 933 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 934 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 935 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 936 + }; 937 + 938 + ulpi_data1_po2 { 939 + nvidia,pins = "ulpi_data1_po2"; 940 + nvidia,function = "uarta"; 941 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 942 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 943 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 944 + }; 945 + 946 + ulpi_data2_po3 { 947 + nvidia,pins = "ulpi_data2_po3"; 948 + nvidia,function = "uarta"; 949 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 950 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 951 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 952 + }; 953 + 954 + ulpi_data3_po4 { 955 + nvidia,pins = "ulpi_data3_po4"; 956 + nvidia,function = "uarta"; 957 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 958 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 959 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 960 + }; 961 + 962 + ulpi_data4_po5 { 963 + nvidia,pins = "ulpi_data4_po5"; 964 + nvidia,function = "uarta"; 965 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 966 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 967 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 968 + }; 969 + 970 + ulpi_data5_po6 { 971 + nvidia,pins = "ulpi_data5_po6"; 972 + nvidia,function = "uarta"; 973 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 974 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 975 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 976 + }; 977 + 978 + ulpi_data6_po7 { 979 + nvidia,pins = "ulpi_data6_po7"; 980 + nvidia,function = "uarta"; 981 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 982 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 983 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 984 + }; 985 + 986 + dap3_fs_pp0 { 987 + nvidia,pins = "dap3_fs_pp0"; 988 + nvidia,function = "i2s2"; 989 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 990 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 991 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 992 + }; 993 + 994 + dap3_din_pp1 { 995 + nvidia,pins = "dap3_din_pp1"; 996 + nvidia,function = "i2s2"; 997 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 998 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 999 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1000 + }; 1001 + 1002 + dap3_dout_pp2 { 1003 + nvidia,pins = "dap3_dout_pp2"; 1004 + nvidia,function = "i2s2"; 1005 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1006 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1007 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1008 + }; 1009 + 1010 + dap3_sclk_pp3 { 1011 + nvidia,pins = "dap3_sclk_pp3"; 1012 + nvidia,function = "i2s2"; 1013 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1014 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1015 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1016 + }; 1017 + 1018 + dap4_fs_pp4 { 1019 + nvidia,pins = "dap4_fs_pp4"; 1020 + nvidia,function = "i2s3"; 1021 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1022 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1023 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1024 + }; 1025 + 1026 + dap4_din_pp5 { 1027 + nvidia,pins = "dap4_din_pp5"; 1028 + nvidia,function = "i2s3"; 1029 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1030 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1031 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1032 + }; 1033 + 1034 + dap4_dout_pp6 { 1035 + nvidia,pins = "dap4_dout_pp6"; 1036 + nvidia,function = "i2s3"; 1037 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1038 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1039 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1040 + }; 1041 + 1042 + dap4_sclk_pp7 { 1043 + nvidia,pins = "dap4_sclk_pp7"; 1044 + nvidia,function = "i2s3"; 1045 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1046 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1047 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1048 + }; 1049 + 1050 + kb_col0_pq0 { 1051 + nvidia,pins = "kb_col0_pq0"; 1052 + nvidia,function = "kbc"; 1053 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1054 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1055 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1056 + }; 1057 + 1058 + kb_col1_pq1 { 1059 + nvidia,pins = "kb_col1_pq1"; 1060 + nvidia,function = "kbc"; 1061 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1062 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1063 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1064 + }; 1065 + 1066 + kb_col2_pq2 { 1067 + nvidia,pins = "kb_col2_pq2"; 1068 + nvidia,function = "kbc"; 1069 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1070 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1071 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1072 + }; 1073 + 1074 + kb_col3_pq3 { 1075 + nvidia,pins = "kb_col3_pq3"; 1076 + nvidia,function = "kbc"; 1077 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1078 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1079 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1080 + }; 1081 + 1082 + kb_col4_pq4 { 1083 + nvidia,pins = "kb_col4_pq4"; 1084 + nvidia,function = "kbc"; 1085 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1086 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1087 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1088 + }; 1089 + 1090 + kb_col5_pq5 { 1091 + nvidia,pins = "kb_col5_pq5"; 1092 + nvidia,function = "kbc"; 1093 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1094 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1095 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1096 + }; 1097 + 1098 + kb_col6_pq6 { 1099 + nvidia,pins = "kb_col6_pq6"; 1100 + nvidia,function = "kbc"; 1101 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1102 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1103 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1104 + }; 1105 + 1106 + kb_col7_pq7 { 1107 + nvidia,pins = "kb_col7_pq7"; 1108 + nvidia,function = "kbc"; 1109 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1110 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1111 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1112 + }; 1113 + 1114 + kb_row0_pr0 { 1115 + nvidia,pins = "kb_row0_pr0"; 1116 + nvidia,function = "kbc"; 1117 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1118 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1119 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1120 + }; 1121 + 1122 + kb_row1_pr1 { 1123 + nvidia,pins = "kb_row1_pr1"; 1124 + nvidia,function = "kbc"; 1125 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1126 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1127 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1128 + }; 1129 + 1130 + kb_row2_pr2 { 1131 + nvidia,pins = "kb_row2_pr2"; 1132 + nvidia,function = "kbc"; 1133 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1134 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1135 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1136 + }; 1137 + 1138 + kb_row3_pr3 { 1139 + nvidia,pins = "kb_row3_pr3"; 1140 + nvidia,function = "kbc"; 1141 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1142 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1143 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1144 + }; 1145 + 1146 + kb_row4_pr4 { 1147 + nvidia,pins = "kb_row4_pr4"; 1148 + nvidia,function = "kbc"; 1149 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1150 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1151 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1152 + }; 1153 + 1154 + kb_row5_pr5 { 1155 + nvidia,pins = "kb_row5_pr5"; 1156 + nvidia,function = "kbc"; 1157 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1158 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1159 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1160 + }; 1161 + 1162 + kb_row6_pr6 { 1163 + nvidia,pins = "kb_row6_pr6"; 1164 + nvidia,function = "kbc"; 1165 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1166 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1167 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1168 + }; 1169 + 1170 + kb_row7_pr7 { 1171 + nvidia,pins = "kb_row7_pr7"; 1172 + nvidia,function = "kbc"; 1173 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1174 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1175 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1176 + }; 1177 + 1178 + kb_row8_ps0 { 1179 + nvidia,pins = "kb_row8_ps0"; 1180 + nvidia,function = "kbc"; 1181 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1182 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1183 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1184 + }; 1185 + 1186 + kb_row9_ps1 { 1187 + nvidia,pins = "kb_row9_ps1"; 1188 + nvidia,function = "kbc"; 1189 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1190 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1191 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1192 + }; 1193 + 1194 + kb_row10_ps2 { 1195 + nvidia,pins = "kb_row10_ps2"; 1196 + nvidia,function = "kbc"; 1197 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1198 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1199 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1200 + }; 1201 + 1202 + kb_row11_ps3 { 1203 + nvidia,pins = "kb_row11_ps3"; 1204 + nvidia,function = "kbc"; 1205 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1206 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1207 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1208 + }; 1209 + 1210 + kb_row12_ps4 { 1211 + nvidia,pins = "kb_row12_ps4"; 1212 + nvidia,function = "kbc"; 1213 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1214 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1215 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1216 + }; 1217 + 1218 + kb_row13_ps5 { 1219 + nvidia,pins = "kb_row13_ps5"; 1220 + nvidia,function = "kbc"; 1221 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1222 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1223 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1224 + }; 1225 + 1226 + kb_row14_ps6 { 1227 + nvidia,pins = "kb_row14_ps6"; 1228 + nvidia,function = "kbc"; 1229 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1230 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1231 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1232 + }; 1233 + 1234 + kb_row15_ps7 { 1235 + nvidia,pins = "kb_row15_ps7"; 1236 + nvidia,function = "kbc"; 1237 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1238 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1239 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1240 + }; 1241 + 1242 + vi_pclk_pt0 { 1243 + nvidia,pins = "vi_pclk_pt0"; 1244 + nvidia,function = "rsvd1"; 1245 + nvidia,pull = <TEGRA_PIN_PULL_UP>; 1246 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1247 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1248 + }; 1249 + 1250 + vi_mclk_pt1 { 1251 + nvidia,pins = "vi_mclk_pt1"; 1252 + nvidia,function = "vi"; 1253 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1254 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1255 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1256 + }; 1257 + 1258 + vi_d10_pt2 { 1259 + nvidia,pins = "vi_d10_pt2"; 1260 + nvidia,function = "ddr"; 1261 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1262 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1263 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1264 + }; 1265 + 1266 + vi_d11_pt3 { 1267 + nvidia,pins = "vi_d11_pt3"; 1268 + nvidia,function = "ddr"; 1269 + nvidia,pull = <TEGRA_PIN_PULL_UP>; 1270 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1271 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1272 + }; 1273 + 1274 + vi_d0_pt4 { 1275 + nvidia,pins = "vi_d0_pt4"; 1276 + nvidia,function = "ddr"; 1277 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1278 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1279 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1280 + }; 1281 + 1282 + gen2_i2c_scl_pt5 { 1283 + nvidia,pins = "gen2_i2c_scl_pt5"; 1284 + nvidia,function = "i2c2"; 1285 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1286 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1287 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1288 + nvidia,open-drain = <TEGRA_PIN_DISABLE>; 1289 + }; 1290 + 1291 + gen2_i2c_sda_pt6 { 1292 + nvidia,pins = "gen2_i2c_sda_pt6"; 1293 + nvidia,function = "i2c2"; 1294 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1295 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1296 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1297 + nvidia,open-drain = <TEGRA_PIN_DISABLE>; 1298 + }; 1299 + 1300 + pu0 { 1301 + nvidia,pins = "pu0"; 1302 + nvidia,function = "owr"; 1303 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1304 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1305 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1306 + }; 1307 + 1308 + pu1 { 1309 + nvidia,pins = "pu1"; 1310 + nvidia,function = "rsvd1"; 1311 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1312 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1313 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1314 + }; 1315 + 1316 + pu2 { 1317 + nvidia,pins = "pu2"; 1318 + nvidia,function = "rsvd1"; 1319 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1320 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1321 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1322 + }; 1323 + 1324 + pu3 { 1325 + nvidia,pins = "pu3"; 1326 + nvidia,function = "pwm0"; 1327 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1328 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1329 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1330 + }; 1331 + 1332 + pu4 { 1333 + nvidia,pins = "pu4"; 1334 + nvidia,function = "pwm1"; 1335 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1336 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1337 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1338 + }; 1339 + 1340 + pu5 { 1341 + nvidia,pins = "pu5"; 1342 + nvidia,function = "rsvd4"; 1343 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1344 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1345 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1346 + }; 1347 + 1348 + pu6 { 1349 + nvidia,pins = "pu6"; 1350 + nvidia,function = "pwm3"; 1351 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1352 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1353 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1354 + }; 1355 + 1356 + jtag_rtck_pu7 { 1357 + nvidia,pins = "jtag_rtck_pu7"; 1358 + nvidia,function = "rtck"; 1359 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1360 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1361 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1362 + }; 1363 + 1364 + pv0 { 1365 + nvidia,pins = "pv0"; 1366 + nvidia,function = "rsvd1"; 1367 + nvidia,pull = <TEGRA_PIN_PULL_UP>; 1368 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1369 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1370 + }; 1371 + 1372 + pv1 { 1373 + nvidia,pins = "pv1"; 1374 + nvidia,function = "rsvd1"; 1375 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1376 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1377 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1378 + }; 1379 + 1380 + pv2 { 1381 + nvidia,pins = "pv2"; 1382 + nvidia,function = "owr"; 1383 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1384 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1385 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1386 + }; 1387 + 1388 + pv3 { 1389 + nvidia,pins = "pv3"; 1390 + nvidia,function = "clk_12m_out"; 1391 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1392 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1393 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1394 + }; 1395 + 1396 + ddc_scl_pv4 { 1397 + nvidia,pins = "ddc_scl_pv4"; 1398 + nvidia,function = "i2c4"; 1399 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1400 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1401 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1402 + }; 1403 + 1404 + ddc_sda_pv5 { 1405 + nvidia,pins = "ddc_sda_pv5"; 1406 + nvidia,function = "i2c4"; 1407 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1408 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1409 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1410 + }; 1411 + 1412 + crt_hsync_pv6 { 1413 + nvidia,pins = "crt_hsync_pv6"; 1414 + nvidia,function = "crt"; 1415 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1416 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1417 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1418 + }; 1419 + 1420 + crt_vsync_pv7 { 1421 + nvidia,pins = "crt_vsync_pv7"; 1422 + nvidia,function = "crt"; 1423 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1424 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1425 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1426 + }; 1427 + 1428 + lcd_cs1_n_pw0 { 1429 + nvidia,pins = "lcd_cs1_n_pw0"; 1430 + nvidia,function = "displaya"; 1431 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1432 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1433 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1434 + }; 1435 + 1436 + lcd_m1_pw1 { 1437 + nvidia,pins = "lcd_m1_pw1"; 1438 + nvidia,function = "displaya"; 1439 + nvidia,pull = <TEGRA_PIN_PULL_DOWN>; 1440 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1441 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1442 + }; 1443 + 1444 + spi2_cs1_n_pw2 { 1445 + nvidia,pins = "spi2_cs1_n_pw2"; 1446 + nvidia,function = "spi2"; 1447 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1448 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1449 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1450 + }; 1451 + 1452 + clk1_out_pw4 { 1453 + nvidia,pins = "clk1_out_pw4"; 1454 + nvidia,function = "extperiph1"; 1455 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1456 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1457 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1458 + }; 1459 + 1460 + clk2_out_pw5 { 1461 + nvidia,pins = "clk2_out_pw5"; 1462 + nvidia,function = "extperiph2"; 1463 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1464 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1465 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1466 + }; 1467 + 1468 + uart3_txd_pw6 { 1469 + nvidia,pins = "uart3_txd_pw6"; 1470 + nvidia,function = "uartc"; 1471 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1472 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1473 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1474 + }; 1475 + 1476 + uart3_rxd_pw7 { 1477 + nvidia,pins = "uart3_rxd_pw7"; 1478 + nvidia,function = "uartc"; 1479 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1480 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1481 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1482 + }; 1483 + 1484 + spi2_sck_px2 { 1485 + nvidia,pins = "spi2_sck_px2"; 1486 + nvidia,function = "gmi"; 1487 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1488 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1489 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1490 + }; 1491 + 1492 + spi1_mosi_px4 { 1493 + nvidia,pins = "spi1_mosi_px4"; 1494 + nvidia,function = "spi1"; 1495 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1496 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1497 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1498 + }; 1499 + 1500 + spi1_sck_px5 { 1501 + nvidia,pins = "spi1_sck_px5"; 1502 + nvidia,function = "spi1"; 1503 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1504 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1505 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1506 + }; 1507 + 1508 + spi1_cs0_n_px6 { 1509 + nvidia,pins = "spi1_cs0_n_px6"; 1510 + nvidia,function = "spi1"; 1511 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1512 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1513 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1514 + }; 1515 + 1516 + spi1_miso_px7 { 1517 + nvidia,pins = "spi1_miso_px7"; 1518 + nvidia,function = "spi1"; 1519 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1520 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1521 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1522 + }; 1523 + 1524 + ulpi_clk_py0 { 1525 + nvidia,pins = "ulpi_clk_py0"; 1526 + nvidia,function = "uartd"; 1527 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1528 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1529 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1530 + }; 1531 + 1532 + ulpi_dir_py1 { 1533 + nvidia,pins = "ulpi_dir_py1"; 1534 + nvidia,function = "uartd"; 1535 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1536 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1537 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1538 + }; 1539 + 1540 + ulpi_nxt_py2 { 1541 + nvidia,pins = "ulpi_nxt_py2"; 1542 + nvidia,function = "uartd"; 1543 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1544 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1545 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1546 + }; 1547 + 1548 + ulpi_stp_py3 { 1549 + nvidia,pins = "ulpi_stp_py3"; 1550 + nvidia,function = "uartd"; 1551 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1552 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1553 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1554 + }; 1555 + 1556 + sdmmc1_dat3_py4 { 1557 + nvidia,pins = "sdmmc1_dat3_py4"; 1558 + nvidia,function = "sdmmc1"; 1559 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1560 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1561 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1562 + }; 1563 + 1564 + sdmmc1_dat2_py5 { 1565 + nvidia,pins = "sdmmc1_dat2_py5"; 1566 + nvidia,function = "sdmmc1"; 1567 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1568 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1569 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1570 + }; 1571 + 1572 + sdmmc1_dat1_py6 { 1573 + nvidia,pins = "sdmmc1_dat1_py6"; 1574 + nvidia,function = "sdmmc1"; 1575 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1576 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1577 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1578 + }; 1579 + 1580 + sdmmc1_dat0_py7 { 1581 + nvidia,pins = "sdmmc1_dat0_py7"; 1582 + nvidia,function = "sdmmc1"; 1583 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1584 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1585 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1586 + }; 1587 + 1588 + sdmmc1_clk_pz0 { 1589 + nvidia,pins = "sdmmc1_clk_pz0"; 1590 + nvidia,function = "sdmmc1"; 1591 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1592 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1593 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1594 + }; 1595 + 1596 + sdmmc1_cmd_pz1 { 1597 + nvidia,pins = "sdmmc1_cmd_pz1"; 1598 + nvidia,function = "sdmmc1"; 1599 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1600 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1601 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1602 + }; 1603 + 1604 + lcd_sdin_pz2 { 1605 + nvidia,pins = "lcd_sdin_pz2"; 1606 + nvidia,function = "displaya"; 1607 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1608 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1609 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1610 + }; 1611 + 1612 + lcd_wr_n_pz3 { 1613 + nvidia,pins = "lcd_wr_n_pz3"; 1614 + nvidia,function = "displaya"; 1615 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1616 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1617 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1618 + }; 1619 + 1620 + lcd_sck_pz4 { 1621 + nvidia,pins = "lcd_sck_pz4"; 1622 + nvidia,function = "displaya"; 1623 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1624 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1625 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1626 + }; 1627 + 1628 + sys_clk_req_pz5 { 1629 + nvidia,pins = "sys_clk_req_pz5"; 1630 + nvidia,function = "sysclk"; 1631 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1632 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1633 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1634 + }; 1635 + 1636 + pwr_i2c_scl_pz6 { 1637 + nvidia,pins = "pwr_i2c_scl_pz6"; 1638 + nvidia,function = "i2cpwr"; 1639 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1640 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1641 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1642 + nvidia,open-drain = <TEGRA_PIN_ENABLE>; 1643 + }; 1644 + 1645 + pwr_i2c_sda_pz7 { 1646 + nvidia,pins = "pwr_i2c_sda_pz7"; 1647 + nvidia,function = "i2cpwr"; 1648 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1649 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1650 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1651 + nvidia,open-drain = <TEGRA_PIN_ENABLE>; 1652 + }; 1653 + 1654 + pbb0 { 1655 + nvidia,pins = "pbb0"; 1656 + nvidia,function = "i2s4"; 1657 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1658 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1659 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1660 + }; 1661 + 1662 + cam_i2c_scl_pbb1 { 1663 + nvidia,pins = "cam_i2c_scl_pbb1"; 1664 + nvidia,function = "i2c3"; 1665 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1666 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1667 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1668 + nvidia,open-drain = <TEGRA_PIN_DISABLE>; 1669 + }; 1670 + 1671 + cam_i2c_sda_pbb2 { 1672 + nvidia,pins = "cam_i2c_sda_pbb2"; 1673 + nvidia,function = "i2c3"; 1674 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1675 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1676 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1677 + nvidia,open-drain = <TEGRA_PIN_DISABLE>; 1678 + }; 1679 + 1680 + pbb3 { 1681 + nvidia,pins = "pbb3"; 1682 + nvidia,function = "vgp3"; 1683 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1684 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1685 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1686 + }; 1687 + 1688 + pbb4 { 1689 + nvidia,pins = "pbb4"; 1690 + nvidia,function = "vgp4"; 1691 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1692 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1693 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1694 + }; 1695 + 1696 + pbb5 { 1697 + nvidia,pins = "pbb5"; 1698 + nvidia,function = "vgp5"; 1699 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1700 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1701 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1702 + }; 1703 + 1704 + pbb6 { 1705 + nvidia,pins = "pbb6"; 1706 + nvidia,function = "vgp6"; 1707 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1708 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1709 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1710 + }; 1711 + 1712 + pbb7 { 1713 + nvidia,pins = "pbb7"; 1714 + nvidia,function = "i2s4"; 1715 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1716 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1717 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1718 + }; 1719 + 1720 + pcc1 { 1721 + nvidia,pins = "pcc1"; 1722 + nvidia,function = "i2s4"; 1723 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1724 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1725 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1726 + }; 1727 + 1728 + pcc2 { 1729 + nvidia,pins = "pcc2"; 1730 + nvidia,function = "i2s4"; 1731 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1732 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1733 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1734 + }; 1735 + 1736 + clk2_req_pcc5 { 1737 + nvidia,pins = "clk2_req_pcc5"; 1738 + nvidia,function = "dap"; 1739 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1740 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1741 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1742 + }; 1743 + 1744 + pex_l2_rst_n_pcc6 { 1745 + nvidia,pins = "pex_l2_rst_n_pcc6"; 1746 + nvidia,function = "pcie"; 1747 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1748 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1749 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1750 + }; 1751 + 1752 + pex_l2_clkreq_n_pcc7 { 1753 + nvidia,pins = "pex_l2_clkreq_n_pcc7"; 1754 + nvidia,function = "pcie"; 1755 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1756 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1757 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1758 + }; 1759 + 1760 + pex_l0_prsnt_n_pdd0 { 1761 + nvidia,pins = "pex_l0_prsnt_n_pdd0"; 1762 + nvidia,function = "pcie"; 1763 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1764 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1765 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1766 + }; 1767 + 1768 + pex_l0_rst_n_pdd1 { 1769 + nvidia,pins = "pex_l0_rst_n_pdd1"; 1770 + nvidia,function = "pcie"; 1771 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1772 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1773 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1774 + }; 1775 + 1776 + pex_l0_clkreq_n_pdd2 { 1777 + nvidia,pins = "pex_l0_clkreq_n_pdd2"; 1778 + nvidia,function = "pcie"; 1779 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1780 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1781 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1782 + }; 1783 + 1784 + pex_wake_n_pdd3 { 1785 + nvidia,pins = "pex_wake_n_pdd3"; 1786 + nvidia,function = "pcie"; 1787 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1788 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1789 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1790 + }; 1791 + 1792 + pex_l1_prsnt_n_pdd4 { 1793 + nvidia,pins = "pex_l1_prsnt_n_pdd4"; 1794 + nvidia,function = "pcie"; 1795 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1796 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1797 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1798 + }; 1799 + 1800 + pex_l1_rst_n_pdd5 { 1801 + nvidia,pins = "pex_l1_rst_n_pdd5"; 1802 + nvidia,function = "pcie"; 1803 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1804 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1805 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1806 + }; 1807 + 1808 + pex_l1_clkreq_n_pdd6 { 1809 + nvidia,pins = "pex_l1_clkreq_n_pdd6"; 1810 + nvidia,function = "pcie"; 1811 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1812 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1813 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1814 + }; 1815 + 1816 + pex_l2_prsnt_n_pdd7 { 1817 + nvidia,pins = "pex_l2_prsnt_n_pdd7"; 1818 + nvidia,function = "pcie"; 1819 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1820 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1821 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1822 + }; 1823 + 1824 + clk3_out_pee0 { 1825 + nvidia,pins = "clk3_out_pee0"; 1826 + nvidia,function = "extperiph3"; 1827 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1828 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1829 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1830 + }; 1831 + 1832 + clk3_req_pee1 { 1833 + nvidia,pins = "clk3_req_pee1"; 1834 + nvidia,function = "dev3"; 1835 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1836 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1837 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1838 + }; 1839 + 1840 + clk1_req_pee2 { 1841 + nvidia,pins = "clk1_req_pee2"; 1842 + nvidia,function = "dap"; 1843 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1844 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1845 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1846 + }; 1847 + 1848 + hdmi_cec_pee3 { 1849 + nvidia,pins = "hdmi_cec_pee3"; 1850 + nvidia,function = "cec"; 1851 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1852 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1853 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1854 + nvidia,open-drain = <TEGRA_PIN_DISABLE>; 1855 + }; 1856 + 1857 + owr { 1858 + nvidia,pins = "owr"; 1859 + nvidia,function = "owr"; 1860 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1861 + nvidia,tristate = <TEGRA_PIN_ENABLE>; 1862 + nvidia,enable-input = <TEGRA_PIN_DISABLE>; 1863 + }; 1864 + 1865 + /* SDMMC4 pinmux */ 1866 + sdmmc4_clk { 1867 + nvidia,pins = "sdmmc4_clk_pcc4"; 1868 + nvidia,function = "sdmmc4"; 1869 + nvidia,pull = <TEGRA_PIN_PULL_NONE>; 1870 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1871 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1872 + nvidia,lock = <TEGRA_PIN_DISABLE>; 1873 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 1874 + }; 1875 + sdmmc4_cmd { 1876 + nvidia,pins = "sdmmc4_cmd_pt7", 1877 + "sdmmc4_dat0_paa0", 1878 + "sdmmc4_dat1_paa1", 1879 + "sdmmc4_dat2_paa2", 1880 + "sdmmc4_dat3_paa3", 1881 + "sdmmc4_dat4_paa4", 1882 + "sdmmc4_dat5_paa5", 1883 + "sdmmc4_dat6_paa6", 1884 + "sdmmc4_dat7_paa7"; 1885 + nvidia,function = "sdmmc4"; 1886 + nvidia,pull = <TEGRA_PIN_PULL_UP>; 1887 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1888 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1889 + nvidia,lock = <TEGRA_PIN_DISABLE>; 1890 + nvidia,io-reset = <TEGRA_PIN_DISABLE>; 1891 + }; 1892 + sdmmc4_rst_n { 1893 + nvidia,pins = "sdmmc4_rst_n_pcc3"; 1894 + nvidia,function = "rsvd2"; 1895 + nvidia,pull = <TEGRA_PIN_PULL_DOWN>; 1896 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1897 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1898 + }; 1899 + cam_mclk { 1900 + nvidia,pins = "cam_mclk_pcc0"; 1901 + nvidia,function = "vi_alt3"; 1902 + nvidia,pull = <TEGRA_PIN_PULL_UP>; 1903 + nvidia,tristate = <TEGRA_PIN_DISABLE>; 1904 + nvidia,enable-input = <TEGRA_PIN_ENABLE>; 1905 + }; 1906 + 1907 + drive_groups { 1908 + nvidia,pins = "drive_gma", 1909 + "drive_gmb", 1910 + "drive_gmc", 1911 + "drive_gmd"; 1912 + nvidia,pull-down-strength = <9>; 1913 + nvidia,pull-up-strength = <9>; 1914 + nvidia,slew-rate-rising = <TEGRA_PIN_SLEW_RATE_SLOWEST>; 1915 + nvidia,slew-rate-falling = <TEGRA_PIN_SLEW_RATE_SLOWEST>; 1916 + }; 1917 + }; 1918 + }; 1919 + 1920 + uartd: serial@70006300 { 1921 + status = "okay"; 1922 + }; 1923 + 1924 + hdmi_ddc: i2c@7000c700 { 1925 + status = "okay"; 1926 + clock-frequency = <100000>; 1927 + }; 1928 + 1929 + pwr_i2c: i2c@7000d000 { 1930 + status = "okay"; 1931 + clock-frequency = <400000>; 1932 + 1933 + pmic: pmic@2d { 1934 + compatible = "ti,tps65911"; 1935 + reg = <0x2d>; 1936 + 1937 + interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>; 1938 + #interrupt-cells = <2>; 1939 + interrupt-controller; 1940 + wakeup-source; 1941 + 1942 + ti,en-gpio-sleep = <0 1 1 1 1 1 0 0 1>; 1943 + ti,system-power-controller; 1944 + ti,sleep-keep-ck32k; 1945 + ti,sleep-enable; 1946 + 1947 + #gpio-cells = <2>; 1948 + gpio-controller; 1949 + 1950 + regulators { 1951 + vdd_1v8: vddio { 1952 + regulator-name = "vdd_1v8_gen"; 1953 + regulator-min-microvolt = <1800000>; 1954 + regulator-max-microvolt = <1800000>; 1955 + regulator-always-on; 1956 + regulator-boot-on; 1957 + }; 1958 + 1959 + ldo7_reg: ldo7 { 1960 + regulator-name = "vdd_pllm,x,u,a_p_c_s"; 1961 + regulator-min-microvolt = <1200000>; 1962 + regulator-max-microvolt = <1200000>; 1963 + regulator-boot-on; 1964 + }; 1965 + }; 1966 + }; 1967 + }; 1968 + 1969 + sdmmc4: sdhci@78000600 { 1970 + status = "okay"; 1971 + bus-width = <8>; 1972 + non-removable; 1973 + 1974 + vmmc-supply = <&sys_3v3_reg>; 1975 + vqmmc-supply = <&vdd_1v8>; 1976 + }; 1977 + 1978 + micro_usb: usb@7d000000 { 1979 + status = "okay"; 1980 + dr_mode = "otg"; 1981 + }; 1982 + 1983 + usb-phy@7d000000 { 1984 + status = "okay"; 1985 + }; 1986 + 1987 + ethernet_usb: usb@7d004000 { 1988 + status = "okay"; 1989 + nvidia,vbus-gpio = <&gpio TEGRA_GPIO(DD, 5) GPIO_ACTIVE_HIGH>; 1990 + 1991 + #address-cells = <1>; 1992 + #size-cells = <0>; 1993 + 1994 + /* SMSC 10/100T Ethernet Controller */ 1995 + ethernet@2 { 1996 + compatible = "usb424,9e00"; 1997 + reg = <2>; 1998 + local-mac-address = [00 11 22 33 44 55]; 1999 + }; 2000 + }; 2001 + 2002 + usb-phy@7d004000 { 2003 + status = "okay"; 2004 + }; 2005 + 2006 + fullsize_usb: usb@7d008000 { 2007 + status = "okay"; 2008 + nvidia,vbus-gpio = <&gpio TEGRA_GPIO(DD, 4) GPIO_ACTIVE_HIGH>; 2009 + }; 2010 + 2011 + usb-phy@7d008000 { 2012 + status = "okay"; 2013 + }; 2014 + 2015 + /* PMIC has a built-in 32KHz oscillator which is used by PMC */ 2016 + clk32k_in: clock { 2017 + compatible = "fixed-clock"; 2018 + #clock-cells = <0>; 2019 + clock-frequency = <32768>; 2020 + clock-output-names = "pmic-oscillator"; 2021 + }; 2022 + 2023 + gpio-keys { 2024 + compatible = "gpio-keys"; 2025 + 2026 + key-power { 2027 + label = "Power"; 2028 + gpios = <&gpio TEGRA_GPIO(V, 0) GPIO_ACTIVE_LOW>; 2029 + linux,code = <KEY_POWER>; 2030 + }; 2031 + }; 2032 + 2033 + leds { 2034 + compatible = "gpio-leds"; 2035 + 2036 + led-power { 2037 + label = "power-led"; 2038 + gpios = <&gpio TEGRA_GPIO(H, 2) GPIO_ACTIVE_HIGH>; 2039 + default-state = "on"; 2040 + linux,default-trigger = "heartbeat"; 2041 + retain-state-suspended; 2042 + }; 2043 + }; 2044 + 2045 + sys_3v3_reg: regulator-sys-3v3 { 2046 + compatible = "regulator-fixed"; 2047 + regulator-name = "sys_3v3"; 2048 + regulator-min-microvolt = <3300000>; 2049 + regulator-max-microvolt = <3300000>; 2050 + regulator-always-on; 2051 + regulator-boot-on; 2052 + }; 2053 + 2054 + vdd_vid_reg: regulator-vdd-vid { 2055 + compatible = "regulator-fixed"; 2056 + regulator-name = "vddio_vid"; 2057 + regulator-min-microvolt = <5000000>; 2058 + regulator-max-microvolt = <5000000>; 2059 + regulator-boot-on; 2060 + gpio = <&gpio TEGRA_GPIO(T, 0) GPIO_ACTIVE_HIGH>; 2061 + enable-active-high; 2062 + }; 2063 + };
+5 -5
arch/arm/dts/tegra30-wexler-qc750.dts
··· 157 157 nvidia,tristate = <TEGRA_PIN_DISABLE>; 158 158 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 159 159 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 160 - nvidia,lock = <0>; 160 + nvidia,lock = <TEGRA_PIN_DISABLE>; 161 161 }; 162 162 gen2-i2c { 163 163 nvidia,pins = "gen2_i2c_scl_pt5", ··· 167 167 nvidia,tristate = <TEGRA_PIN_DISABLE>; 168 168 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 169 169 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 170 - nvidia,lock = <0>; 170 + nvidia,lock = <TEGRA_PIN_DISABLE>; 171 171 }; 172 172 cam-i2c { 173 173 nvidia,pins = "cam_i2c_scl_pbb1", ··· 177 177 nvidia,tristate = <TEGRA_PIN_DISABLE>; 178 178 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 179 179 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 180 - nvidia,lock = <0>; 180 + nvidia,lock = <TEGRA_PIN_DISABLE>; 181 181 }; 182 182 ddc-i2c { 183 183 nvidia,pins = "ddc_scl_pv4", ··· 186 186 nvidia,pull = <TEGRA_PIN_PULL_NONE>; 187 187 nvidia,tristate = <TEGRA_PIN_DISABLE>; 188 188 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 189 - nvidia,lock = <0>; 189 + nvidia,lock = <TEGRA_PIN_DISABLE>; 190 190 }; 191 191 pwr-i2c { 192 192 nvidia,pins = "pwr_i2c_scl_pz6", ··· 196 196 nvidia,tristate = <TEGRA_PIN_DISABLE>; 197 197 nvidia,enable-input = <TEGRA_PIN_ENABLE>; 198 198 nvidia,open-drain = <TEGRA_PIN_ENABLE>; 199 - nvidia,lock = <0>; 199 + nvidia,lock = <TEGRA_PIN_DISABLE>; 200 200 }; 201 201 202 202 /* HDMI pinmux */
+43 -3
arch/arm/include/asm/arch-tegra/dc.h
··· 448 448 #define LVS_OUTPUT_POLARITY_LOW BIT(28) 449 449 #define LSC0_OUTPUT_POLARITY_LOW BIT(24) 450 450 451 + /* DC_DISP_DISP_SIGNAL_OPTIONS0 0x400 */ 452 + #define H_PULSE0_ENABLE BIT(8) 453 + #define H_PULSE1_ENABLE BIT(10) 454 + #define H_PULSE2_ENABLE BIT(12) 455 + 451 456 /* DC_DISP_DISP_WIN_OPTIONS 0x402 */ 452 457 #define CURSOR_ENABLE BIT(16) 453 458 #define SOR_ENABLE BIT(25) ··· 504 509 DATA_ORDER_BLUE_RED, 505 510 }; 506 511 512 + /* DC_DISP_DISP_COLOR_CONTROL 0x430 */ 513 + #define DITHER_CONTROL_DISABLE (0 << 8) 514 + #define DITHER_CONTROL_ORDERED (2 << 8) 515 + #define DITHER_CONTROL_ERRDIFF (3 << 8) 516 + enum { 517 + BASE_COLOR_SIZE_666, 518 + BASE_COLOR_SIZE_111, 519 + BASE_COLOR_SIZE_222, 520 + BASE_COLOR_SIZE_333, 521 + BASE_COLOR_SIZE_444, 522 + BASE_COLOR_SIZE_555, 523 + BASE_COLOR_SIZE_565, 524 + BASE_COLOR_SIZE_332, 525 + BASE_COLOR_SIZE_888, 526 + }; 527 + 507 528 /* DC_DISP_DATA_ENABLE_OPTIONS 0x432 */ 508 529 #define DE_SELECT_SHIFT 0 509 530 #define DE_SELECT_MASK (0x3 << DE_SELECT_SHIFT) ··· 570 591 #define V_DDA_INC_SHIFT 16 571 592 #define V_DDA_INC_MASK (0xFFFF << V_DDA_INC_SHIFT) 572 593 573 - #define DC_POLL_TIMEOUT_MS 50 574 - #define DC_N_WINDOWS 5 575 - #define DC_REG_SAVE_SPACE (DC_N_WINDOWS + 5) 594 + #define DC_POLL_TIMEOUT_MS 50 595 + #define DC_N_WINDOWS 5 596 + #define DC_REG_SAVE_SPACE (DC_N_WINDOWS + 5) 597 + 598 + #define PULSE_MODE_NORMAL (0 << 3) 599 + #define PULSE_MODE_ONE_CLOCK (1 << 3) 600 + #define PULSE_POLARITY_HIGH (0 << 4) 601 + #define PULSE_POLARITY_LOW (1 << 4) 602 + #define PULSE_QUAL_ALWAYS (0 << 6) 603 + #define PULSE_QUAL_VACTIVE (2 << 6) 604 + #define PULSE_QUAL_VACTIVE1 (3 << 6) 605 + #define PULSE_LAST_START_A (0 << 8) 606 + #define PULSE_LAST_END_A (1 << 8) 607 + #define PULSE_LAST_START_B (2 << 8) 608 + #define PULSE_LAST_END_B (3 << 8) 609 + #define PULSE_LAST_START_C (4 << 8) 610 + #define PULSE_LAST_END_C (5 << 8) 611 + #define PULSE_LAST_START_D (6 << 8) 612 + #define PULSE_LAST_END_D (7 << 8) 613 + 614 + #define PULSE_START(x) (((x) & 0xfff) << 0) 615 + #define PULSE_END(x) (((x) & 0xfff) << 16) 576 616 577 617 #endif /* __ASM_ARCH_TEGRA_DC_H */
+10 -10
arch/arm/include/asm/arch-tegra/pinmux.h
··· 34 34 35 35 #ifdef TEGRA_PMX_PINS_HAVE_LOCK 36 36 enum pmux_pin_lock { 37 - PMUX_PIN_LOCK_DEFAULT = 0, 38 - PMUX_PIN_LOCK_DISABLE, 37 + PMUX_PIN_LOCK_DISABLE = 0, 39 38 PMUX_PIN_LOCK_ENABLE, 39 + PMUX_PIN_LOCK_DEFAULT, 40 40 }; 41 41 #endif 42 42 43 43 #ifdef TEGRA_PMX_PINS_HAVE_OD 44 44 enum pmux_pin_od { 45 - PMUX_PIN_OD_DEFAULT = 0, 46 - PMUX_PIN_OD_DISABLE, 45 + PMUX_PIN_OD_DISABLE = 0, 47 46 PMUX_PIN_OD_ENABLE, 47 + PMUX_PIN_OD_DEFAULT, 48 48 }; 49 49 #endif 50 50 51 51 #ifdef TEGRA_PMX_PINS_HAVE_IO_RESET 52 52 enum pmux_pin_ioreset { 53 - PMUX_PIN_IO_RESET_DEFAULT = 0, 54 - PMUX_PIN_IO_RESET_DISABLE, 53 + PMUX_PIN_IO_RESET_DISABLE = 0, 55 54 PMUX_PIN_IO_RESET_ENABLE, 55 + PMUX_PIN_IO_RESET_DEFAULT, 56 56 }; 57 57 #endif 58 58 59 59 #ifdef TEGRA_PMX_PINS_HAVE_RCV_SEL 60 60 enum pmux_pin_rcv_sel { 61 - PMUX_PIN_RCV_SEL_DEFAULT = 0, 62 - PMUX_PIN_RCV_SEL_NORMAL, 61 + PMUX_PIN_RCV_SEL_NORMAL = 0, 63 62 PMUX_PIN_RCV_SEL_HIGH, 63 + PMUX_PIN_RCV_SEL_DEFAULT, 64 64 }; 65 65 #endif 66 66 67 67 #ifdef TEGRA_PMX_PINS_HAVE_E_IO_HV 68 68 enum pmux_pin_e_io_hv { 69 - PMUX_PIN_E_IO_HV_DEFAULT = 0, 70 - PMUX_PIN_E_IO_HV_NORMAL, 69 + PMUX_PIN_E_IO_HV_NORMAL = 0, 71 70 PMUX_PIN_E_IO_HV_HIGH, 71 + PMUX_PIN_E_IO_HV_DEFAULT, 72 72 }; 73 73 #endif 74 74
+3 -3
arch/arm/include/asm/arch-tegra20/pinmux.h
··· 467 467 [PMUX_FUNC_DAP3] = "dap3", 468 468 [PMUX_FUNC_DAP4] = "dap4", 469 469 [PMUX_FUNC_DAP5] = "dap5", 470 - [PMUX_FUNC_DISPA] = "dispa", 471 - [PMUX_FUNC_DISPB] = "dispb", 470 + [PMUX_FUNC_DISPA] = "displaya", 471 + [PMUX_FUNC_DISPB] = "displayb", 472 472 [PMUX_FUNC_EMC_TEST0_DLL] = "emc_test0_dll", 473 473 [PMUX_FUNC_EMC_TEST1_DLL] = "emc_test1_dll", 474 474 [PMUX_FUNC_GMI] = "gmi", 475 475 [PMUX_FUNC_GMI_INT] = "gmi_int", 476 476 [PMUX_FUNC_HDMI] = "hdmi", 477 - [PMUX_FUNC_I2C] = "i2c", 477 + [PMUX_FUNC_I2C] = "i2c1", 478 478 [PMUX_FUNC_I2C2] = "i2c2", 479 479 [PMUX_FUNC_I2C3] = "i2c3", 480 480 [PMUX_FUNC_IDE] = "ide",
+5
arch/arm/mach-tegra/tegra30/Kconfig
··· 32 32 bool "Lenovo Ideapad Yoga 11 board" 33 33 select BOARD_LATE_INIT 34 34 35 + config TARGET_OUYA 36 + bool "Ouya Game Console board" 37 + select BOARD_LATE_INIT 38 + 35 39 config TARGET_QC750 36 40 bool "Wexler QC750 board" 37 41 select BOARD_LATE_INIT ··· 64 68 source "board/htc/endeavoru/Kconfig" 65 69 source "board/asus/grouper/Kconfig" 66 70 source "board/lenovo/ideapad-yoga-11/Kconfig" 71 + source "board/ouya/ouya/Kconfig" 67 72 source "board/wexler/qc750/Kconfig" 68 73 source "board/microsoft/surface-rt/Kconfig" 69 74 source "board/avionic-design/tec-ng/Kconfig"
+12
board/ouya/ouya/Kconfig
··· 1 + if TARGET_OUYA 2 + 3 + config SYS_BOARD 4 + default "ouya" 5 + 6 + config SYS_VENDOR 7 + default "ouya" 8 + 9 + config SYS_CONFIG_NAME 10 + default "ouya" 11 + 12 + endif
+8
board/ouya/ouya/MAINTAINERS
··· 1 + OUYA BOARD 2 + M: Svyatoslav Ryhel <clamor95@gmail.com> 3 + M: Peter Geis <pgwipeout@gmail.com> 4 + S: Maintained 5 + F: board/ouya/ouya/ 6 + F: configs/ouya_defconfig 7 + F: doc/board/ouya/ouya.rst 8 + F: include/configs/ouya.h
+11
board/ouya/ouya/Makefile
··· 1 + # SPDX-License-Identifier: GPL-2.0+ 2 + # 3 + # (C) Copyright 2010-2012 4 + # NVIDIA Corporation <www.nvidia.com> 5 + # 6 + # (C) Copyright 2021 7 + # Svyatoslav Ryhel <clamor95@gmail.com> 8 + 9 + obj-$(CONFIG_XPL_BUILD) += ouya-spl.o 10 + 11 + obj-y += ouya.o
+41
board/ouya/ouya/ouya-spl.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + /* 3 + * T30 Ouya SPL stage configuration 4 + * 5 + * (C) Copyright 2010-2013 6 + * NVIDIA Corporation <www.nvidia.com> 7 + * 8 + * (C) Copyright 2025 9 + * Svyatoslav Ryhel <clamor95@gmail.com> 10 + */ 11 + 12 + #include <asm/arch/tegra.h> 13 + #include <asm/arch-tegra/tegra_i2c.h> 14 + #include <linux/delay.h> 15 + 16 + #define TPS65911_I2C_ADDR (0x2D << 1) 17 + #define TPS65911_VDDCTRL_OP_REG 0x28 18 + #define TPS65911_VDDCTRL_SR_REG 0x27 19 + #define TPS65911_VDDCTRL_OP_DATA (0x2400 | TPS65911_VDDCTRL_OP_REG) 20 + #define TPS65911_VDDCTRL_SR_DATA (0x0100 | TPS65911_VDDCTRL_SR_REG) 21 + 22 + #define TPS62361B_I2C_ADDR (0x60 << 1) 23 + #define TPS62361B_SET3_REG 0x03 24 + #define TPS62361B_SET3_DATA (0x4600 | TPS62361B_SET3_REG) 25 + 26 + void pmic_enable_cpu_vdd(void) 27 + { 28 + /* Set VDD_CORE to 1.200V. */ 29 + tegra_i2c_ll_write(TPS62361B_I2C_ADDR, TPS62361B_SET3_DATA); 30 + 31 + udelay(1000); 32 + 33 + /* 34 + * Bring up CPU VDD via the TPS65911x PMIC on the DVC I2C bus. 35 + * First set VDD to 1.0125V, then enable the VDD regulator. 36 + */ 37 + tegra_i2c_ll_write(TPS65911_I2C_ADDR, TPS65911_VDDCTRL_OP_DATA); 38 + udelay(1000); 39 + tegra_i2c_ll_write(TPS65911_I2C_ADDR, TPS65911_VDDCTRL_SR_DATA); 40 + udelay(10 * 1000); 41 + }
+21
board/ouya/ouya/ouya.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + /* 3 + * (C) Copyright 2010-2013 4 + * NVIDIA Corporation <www.nvidia.com> 5 + * 6 + * (C) Copyright 2025 7 + * Svyatoslav Ryhel <clamor95@gmail.com> 8 + */ 9 + 10 + #include <fdt_support.h> 11 + 12 + #if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) 13 + int ft_board_setup(void *blob, struct bd_info *bd) 14 + { 15 + /* Remove TrustZone nodes */ 16 + fdt_del_node_and_alias(blob, "/firmware"); 17 + fdt_del_node_and_alias(blob, "/reserved-memory/trustzone@bfe00000"); 18 + 19 + return 0; 20 + } 21 + #endif
+12
board/ouya/ouya/ouya.env
··· 1 + #include <env/nvidia/prod_upd.env> 2 + 3 + partitions=name=emmc,start=0,size=-,uuid=${uuid_gpt_rootfs} 4 + boot_interface=usb 5 + 6 + bootmenu_0=mount internal storage=usb start && ums 0 mmc 0; bootmenu 7 + bootmenu_1=fastboot=echo Starting Fastboot protocol ...; fastboot usb 0; bootmenu 8 + bootmenu_2=update bootloader=run flash_uboot 9 + bootmenu_3=reboot RCM=enterrcm 10 + bootmenu_4=reboot=reset 11 + bootmenu_5=power off=poweroff 12 + bootmenu_delay=-1
+6
common/edid.c
··· 16 16 #include <linux/ctype.h> 17 17 #include <linux/string.h> 18 18 19 + #if CONFIG_IS_ENABLED(I2C_EDID_STANDARD) 19 20 #define TIMING(c, ha, hfp, hbp, hsl, va, vfp, vbp, vsl, f) \ 20 21 .pixelclock = { (c), (c), (c) }, \ 21 22 .hactive = { (ha), (ha), (ha) }, \ ··· 206 207 { TIMING(556188000, 4096, 8, 32, 40, 2160, 48, 8, 6, 207 208 DISPLAY_FLAGS_HSYNC_HIGH | DISPLAY_FLAGS_VSYNC_LOW) }, 208 209 }; 210 + #endif 209 211 210 212 int edid_check_info(struct edid1_info *edid_info) 211 213 { ··· 417 419 return false; 418 420 } 419 421 422 + #if CONFIG_IS_ENABLED(I2C_EDID_STANDARD) 420 423 static bool edid_find_valid_standard_timing(struct edid1_info *buf, 421 424 struct display_timing *timing, 422 425 bool (*mode_valid)(void *priv, ··· 446 449 447 450 return found; 448 451 } 452 + #endif 449 453 450 454 int edid_get_timing_validate(u8 *buf, int buf_size, 451 455 struct display_timing *timing, ··· 493 497 } 494 498 } 495 499 500 + #if CONFIG_IS_ENABLED(I2C_EDID_STANDARD) 496 501 /* Look for timing in Standard Timings */ 497 502 if (!found) 498 503 found = edid_find_valid_standard_timing(edid, timing, mode_valid, 499 504 mode_valid_priv); 505 + #endif 500 506 501 507 if (!found) 502 508 return -EINVAL;
+1
configs/endeavoru_defconfig
··· 80 80 CONFIG_USB_GADGET_PRODUCT_NUM=0x0c02 81 81 CONFIG_CI_UDC=y 82 82 CONFIG_VIDEO=y 83 + CONFIG_VIDEO_BRIDGE=y 83 84 # CONFIG_VIDEO_LOGO is not set 84 85 CONFIG_VIDEO_LCD_ENDEAVORU=y 85 86 CONFIG_VIDEO_DSI_TEGRA30=y
+86
configs/ouya_defconfig
··· 1 + CONFIG_ARM=y 2 + CONFIG_ARCH_TEGRA=y 3 + CONFIG_SUPPORT_PASSING_ATAGS=y 4 + CONFIG_CMDLINE_TAG=y 5 + CONFIG_INITRD_TAG=y 6 + CONFIG_TEXT_BASE=0x80110000 7 + CONFIG_NR_DRAM_BANKS=2 8 + CONFIG_ENV_SOURCE_FILE="ouya" 9 + CONFIG_ENV_SIZE=0x3000 10 + CONFIG_ENV_OFFSET=0xFFFFD000 11 + CONFIG_DEFAULT_DEVICE_TREE="tegra30-ouya" 12 + CONFIG_SPL_STACK=0x800ffffc 13 + CONFIG_SPL_TEXT_BASE=0x80108000 14 + CONFIG_SYS_LOAD_ADDR=0x82000000 15 + CONFIG_TEGRA30=y 16 + CONFIG_TARGET_OUYA=y 17 + CONFIG_TEGRA_ENABLE_UARTD=y 18 + CONFIG_CMD_EBTUPDATE=y 19 + CONFIG_BUTTON_CMD=y 20 + CONFIG_BOOTDELAY=3 21 + CONFIG_OF_BOARD_SETUP=y 22 + CONFIG_OF_SYSTEM_SETUP=y 23 + CONFIG_BOOTCOMMAND="bootflow scan; echo 'Boot configuration not found... Power off in 3 sec'; sleep 3; poweroff" 24 + CONFIG_USE_PREBOOT=y 25 + CONFIG_SYS_PBSIZE=2084 26 + CONFIG_SPL_FOOTPRINT_LIMIT=y 27 + CONFIG_SPL_MAX_FOOTPRINT=0x8000 28 + # CONFIG_SPL_SHARES_INIT_SP_ADDR is not set 29 + CONFIG_SPL_SYS_MALLOC=y 30 + CONFIG_SPL_HAS_CUSTOM_MALLOC_START=y 31 + CONFIG_SPL_CUSTOM_SYS_MALLOC_ADDR=0x80090000 32 + CONFIG_SPL_SYS_MALLOC_SIZE=0x10000 33 + CONFIG_SYS_PROMPT="Tegra30 (Ouya) # " 34 + # CONFIG_CMD_BOOTEFI_BOOTMGR is not set 35 + CONFIG_CMD_BOOTMENU=y 36 + # CONFIG_CMD_IMI is not set 37 + CONFIG_CMD_GPIO=y 38 + CONFIG_CMD_GPT=y 39 + CONFIG_CMD_GPT_RENAME=y 40 + CONFIG_CMD_I2C=y 41 + CONFIG_CMD_MMC=y 42 + CONFIG_CMD_POWEROFF=y 43 + CONFIG_CMD_USB=y 44 + CONFIG_CMD_USB_MASS_STORAGE=y 45 + CONFIG_CMD_UMS_ABORT_KEYED=y 46 + # CONFIG_CMD_SETEXPR is not set 47 + CONFIG_CMD_PAUSE=y 48 + CONFIG_CMD_REGULATOR=y 49 + CONFIG_CMD_EXT4_WRITE=y 50 + # CONFIG_SPL_DOS_PARTITION is not set 51 + # CONFIG_SPL_EFI_PARTITION is not set 52 + CONFIG_ENV_OVERWRITE=y 53 + CONFIG_SYS_RELOC_GD_ENV_ADDR=y 54 + CONFIG_SYS_MMC_ENV_PART=2 55 + CONFIG_BUTTON=y 56 + CONFIG_USB_FUNCTION_FASTBOOT=y 57 + CONFIG_FASTBOOT_BUF_ADDR=0x91000000 58 + CONFIG_FASTBOOT_BUF_SIZE=0x10000000 59 + CONFIG_FASTBOOT_FLASH=y 60 + CONFIG_FASTBOOT_FLASH_MMC_DEV=0 61 + CONFIG_FASTBOOT_CMD_OEM_FORMAT=y 62 + CONFIG_GPIO_HOG=y 63 + CONFIG_SYS_I2C_TEGRA=y 64 + CONFIG_BUTTON_KEYBOARD=y 65 + CONFIG_LED=y 66 + CONFIG_LED_BLINK=y 67 + CONFIG_LED_GPIO=y 68 + CONFIG_DM_PMIC=y 69 + CONFIG_DM_PMIC_TPS65910=y 70 + CONFIG_DM_REGULATOR=y 71 + CONFIG_DM_REGULATOR_FIXED=y 72 + CONFIG_DM_REGULATOR_TPS65911=y 73 + CONFIG_PWM_TEGRA=y 74 + CONFIG_SYS_NS16550=y 75 + CONFIG_SYSRESET_TPS65910=y 76 + CONFIG_USB=y 77 + CONFIG_USB_EHCI_HCD=y 78 + CONFIG_USB_EHCI_TEGRA=y 79 + CONFIG_USB_KEYBOARD=y 80 + CONFIG_USB_GADGET=y 81 + CONFIG_CI_UDC=y 82 + CONFIG_VIDEO=y 83 + # CONFIG_VIDEO_LOGO is not set 84 + CONFIG_I2C_EDID_STANDARD=y 85 + CONFIG_VIDEO_BRIDGE=y 86 + CONFIG_VIDEO_HDMI_TEGRA=y
+2
configs/transformer_t30_defconfig
··· 90 90 CONFIG_USB_GADGET_PRODUCT_NUM=0x4daf 91 91 CONFIG_CI_UDC=y 92 92 CONFIG_VIDEO=y 93 + CONFIG_VIDEO_BRIDGE=y 93 94 # CONFIG_VIDEO_LOGO is not set 94 95 CONFIG_VIDEO_BRIDGE_TOSHIBA_TC358768=y 95 96 CONFIG_VIDEO_TEGRA20=y 97 + CONFIG_VIDEO_HDMI_TEGRA=y
+1
configs/x3_t30_defconfig
··· 83 83 CONFIG_USB_GADGET_PRODUCT_NUM=0x7100 84 84 CONFIG_CI_UDC=y 85 85 CONFIG_VIDEO=y 86 + CONFIG_VIDEO_BRIDGE=y 86 87 # CONFIG_VIDEO_LOGO is not set 87 88 CONFIG_BACKLIGHT_LM3533=y 88 89 CONFIG_VIDEO_BRIDGE_SOLOMON_SSD2825=y
+1
doc/board/index.rst
··· 43 43 microsoft/index 44 44 nxp/index 45 45 openpiton/index 46 + ouya/index 46 47 phytec/index 47 48 purism/index 48 49 qualcomm/index
+9
doc/board/ouya/index.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0+ 2 + 3 + OUYA 4 + ==== 5 + 6 + .. toctree:: 7 + :maxdepth: 2 8 + 9 + ouya
+124
doc/board/ouya/ouya.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0+ 2 + 3 + U-Boot for the Ouya Game Console (ouya) 4 + ======================================= 5 + 6 + ``DISCLAMER!`` Moving your Ouya to use U-Boot assumes replacement of the 7 + vendor bootloader. Vendor android firmwares will no longer be able to run on the 8 + device. This replacement IS reversible. 9 + 10 + Quick Start 11 + ----------- 12 + 13 + - Build U-Boot 14 + - Process U-Boot 15 + - Flashing U-Boot into the eMMC 16 + - Boot 17 + - Self Upgrading 18 + 19 + Build U-Boot 20 + ------------ 21 + 22 + .. code-block:: bash 23 + 24 + $ export CROSS_COMPILE=arm-none-eabi- 25 + $ make ouya_defconfig 26 + $ make 27 + 28 + After the build succeeds, you will obtain the final ``u-boot-dtb-tegra.bin`` 29 + image, ready for further processing. 30 + 31 + Process U-Boot 32 + -------------- 33 + 34 + ``DISCLAMER!`` All questions related to the re-crypt work should be asked 35 + in re-crypt repo issues. NOT HERE! 36 + 37 + re-crypt is a tool that processes the ``u-boot-dtb-tegra.bin`` binary into form 38 + usable by device. This process is required only on the first installation or 39 + to recover the device in case of a failed update. 40 + 41 + Permanent installation can be performed either by using the nv3p protocol or by 42 + pre-loading just built U-Boot into RAM. 43 + 44 + Processing for the NV3P protocol 45 + ******************************** 46 + 47 + .. code-block:: bash 48 + 49 + $ git clone https://gitlab.com/grate-driver/re-crypt.git 50 + $ cd re-crypt # place your u-boot-dtb-tegra.bin here 51 + $ ./re-crypt.py --dev ouya 52 + 53 + The script will produce a ``repart-block.bin`` ready to flash. 54 + 55 + Processing for pre-loaded U-Boot 56 + ******************************** 57 + 58 + The procedure is the same, but the ``--split`` argument is used with the 59 + ``re-crypt.py``. The script will produce ``bct.img`` and ``ebt.img`` ready 60 + to flash. 61 + 62 + Flashing U-Boot into the eMMC 63 + ----------------------------- 64 + 65 + Permanent installation can be performed either by using the nv3p protocol or by 66 + pre-loading just built U-Boot into RAM. Regardless of the method bct and bootloader 67 + will end up in boot0 and boot1 partitions of eMMC. 68 + 69 + Flashing with the NV3P protocol 70 + ******************************* 71 + 72 + ``DISCLAMER!`` All questions related to NvFlash should be asked in the proper 73 + place. NOT HERE! Flashing U-Boot will erase all eMMC, so make a backup before! 74 + 75 + Nv3p is a custom Nvidia protocol used to recover bricked devices. Devices can 76 + enter it by pre-loading vendor bootloader with the Fusée Gelée. 77 + 78 + With nv3p, ``repart-block.bin`` is used. It contains BCT and a bootloader in 79 + encrypted state in form, which can just be written RAW at the start of eMMC. 80 + 81 + .. code-block:: bash 82 + 83 + $ ./run_bootloader.sh -s T30 -t ./bct/ouya.bct -b android_bootloader.bin 84 + $ ./utiils/nvflash_v1.13.87205 --resume --rawdevicewrite 0 1024 repart-block.bin 85 + 86 + When flashing is done, reboot the device. 87 + 88 + Flashing with a pre-loaded U-Boot 89 + ********************************* 90 + 91 + U-Boot pre-loaded into RAM acts the same as when it was booted "cold". Currently 92 + U-Boot supports bootmenu entry fastboot, which allows to write a processed copy 93 + of U-Boot permanently into eMMC. 94 + 95 + While pre-loading U-Boot, interrupt bootflow by pressing ``CTRL + C`` (USB keyboard 96 + must be plugged in before U-Boot is preloaded, else it will not work), input 97 + ``bootmenu`` from the keyboard and hit enter. The bootmenu will appear. There, select 98 + ``fastboot`` using the up and down arrows and enter key. After, on host PC, do: 99 + 100 + .. code-block:: bash 101 + 102 + $ fastboot flash 0.1 bct.img 103 + $ fastboot flash 0.2 ebt.img 104 + $ fastboot reboot 105 + 106 + Device will reboot. 107 + 108 + Boot 109 + ---- 110 + 111 + To boot Linux, U-Boot will look for an ``extlinux.conf`` on eMMC. Additionally, 112 + bootmenu provides entries to mount eMMC as mass storage, fastboot, reboot, 113 + reboot RCM, poweroff, enter U-Boot console and update bootloader (check 114 + the next chapter). 115 + 116 + Flashing ``repart-block.bin`` eliminates vendor restrictions on eMMC and allows 117 + the user to use/partition it in any way the user desires. 118 + 119 + Self Upgrading 120 + -------------- 121 + 122 + Place your ``u-boot-dtb-tegra.bin`` on the first partition of the USB. Enter 123 + bootmenu, choose update bootloader option with Enter and U-Boot should update 124 + itself. Once the process is completed, U-Boot will ask to press any button to reboot.
+17 -17
drivers/pinctrl/tegra/pinctrl-tegra.c
··· 23 23 return; 24 24 } 25 25 26 - drive_group[0].slwf = dev_read_u32_default(config, "nvidia,slew-rate-falling", 0); 27 - drive_group[0].slwr = dev_read_u32_default(config, "nvidia,slew-rate-rising", 0); 28 - drive_group[0].drvup = dev_read_u32_default(config, "nvidia,pull-up-strength", 0); 29 - drive_group[0].drvdn = dev_read_u32_default(config, "nvidia,pull-down-strength", 0); 26 + drive_group[0].slwf = dev_read_u32_default(config, "nvidia,slew-rate-falling", PMUX_SLWF_NONE); 27 + drive_group[0].slwr = dev_read_u32_default(config, "nvidia,slew-rate-rising", PMUX_SLWR_NONE); 28 + drive_group[0].drvup = dev_read_u32_default(config, "nvidia,pull-up-strength", PMUX_DRVUP_NONE); 29 + drive_group[0].drvdn = dev_read_u32_default(config, "nvidia,pull-down-strength", PMUX_DRVDN_NONE); 30 30 #ifdef TEGRA_PMX_GRPS_HAVE_LPMD 31 - drive_group[0].lpmd = dev_read_u32_default(config, "nvidia,low-power-mode", 0); 31 + drive_group[0].lpmd = dev_read_u32_default(config, "nvidia,low-power-mode", PMUX_LPMD_NONE); 32 32 #endif 33 33 #ifdef TEGRA_PMX_GRPS_HAVE_SCHMT 34 - drive_group[0].schmt = dev_read_u32_default(config, "nvidia,schmitt", 0); 34 + drive_group[0].schmt = dev_read_u32_default(config, "nvidia,schmitt", PMUX_SCHMT_NONE); 35 35 #endif 36 36 #ifdef TEGRA_PMX_GRPS_HAVE_HSM 37 - drive_group[0].hsm = dev_read_u32_default(config, "nvidia,high-speed-mode", 0); 37 + drive_group[0].hsm = dev_read_u32_default(config, "nvidia,high-speed-mode", PMUX_HSM_NONE); 38 38 #endif 39 39 40 40 for (i = 1; i < drvcnt; i++) ··· 142 142 143 143 pinmux_group[0].func = i; 144 144 145 - pinmux_group[0].pull = dev_read_u32_default(config, "nvidia,pull", 0); 146 - pinmux_group[0].tristate = dev_read_u32_default(config, "nvidia,tristate", 0); 145 + pinmux_group[0].pull = dev_read_u32_default(config, "nvidia,pull", PMUX_PULL_NORMAL); 146 + pinmux_group[0].tristate = dev_read_u32_default(config, "nvidia,tristate", PMUX_TRI_TRISTATE); 147 147 #ifdef TEGRA_PMX_PINS_HAVE_E_INPUT 148 - pinmux_group[0].io = dev_read_u32_default(config, "nvidia,enable-input", 0); 148 + pinmux_group[0].io = dev_read_u32_default(config, "nvidia,enable-input", PMUX_PIN_NONE); 149 149 #endif 150 150 #ifdef TEGRA_PMX_PINS_HAVE_LOCK 151 - pinmux_group[0].lock = dev_read_u32_default(config, "nvidia,lock", 0); 151 + pinmux_group[0].lock = dev_read_u32_default(config, "nvidia,lock", PMUX_PIN_LOCK_DEFAULT); 152 152 #endif 153 153 #ifdef TEGRA_PMX_PINS_HAVE_OD 154 - pinmux_group[0].od = dev_read_u32_default(config, "nvidia,open-drain", 0); 154 + pinmux_group[0].od = dev_read_u32_default(config, "nvidia,open-drain", PMUX_PIN_OD_DEFAULT); 155 155 #endif 156 156 #ifdef TEGRA_PMX_PINS_HAVE_IO_RESET 157 - pinmux_group[0].ioreset = dev_read_u32_default(config, "nvidia,io-reset", 0); 157 + pinmux_group[0].ioreset = dev_read_u32_default(config, "nvidia,io-reset", PMUX_PIN_IO_RESET_DEFAULT); 158 158 #endif 159 159 #ifdef TEGRA_PMX_PINS_HAVE_RCV_SEL 160 - pinmux_group[0].rcv_sel = dev_read_u32_default(config, "nvidia,rcv-sel", 0); 160 + pinmux_group[0].rcv_sel = dev_read_u32_default(config, "nvidia,rcv-sel", PMUX_PIN_RCV_SEL_DEFAULT); 161 161 #endif 162 162 #ifdef TEGRA_PMX_PINS_HAVE_E_IO_HV 163 - pinmux_group[0].e_io_hv = dev_read_u32_default(config, "nvidia,io-hv", 0); 163 + pinmux_group[0].e_io_hv = dev_read_u32_default(config, "nvidia,io-hv", PMUX_PIN_E_IO_HV_DEFAULT); 164 164 #endif 165 165 #ifdef TEGRA_PMX_PINS_HAVE_SCHMT 166 - pinmux_group[0].schmt = dev_read_u32_default(config, "nvidia,schmitt", 0); 166 + pinmux_group[0].schmt = dev_read_u32_default(config, "nvidia,schmitt", PMUX_SCHMT_NONE); 167 167 #endif 168 168 #ifdef TEGRA_PMX_PINS_HAVE_HSM 169 - pinmux_group[0].hsm = dev_read_u32_default(config, "nvidia,high-speed-mode", 0); 169 + pinmux_group[0].hsm = dev_read_u32_default(config, "nvidia,high-speed-mode", PMUX_HSM_NONE); 170 170 #endif 171 171 172 172 for (i = 1; i < pincnt; i++)
+6
drivers/video/Kconfig
··· 700 700 help 701 701 This enables library for accessing EDID data from an LCD panel. 702 702 703 + config I2C_EDID_STANDARD 704 + bool "Enable standard timings EDID library expansion" 705 + depends on I2C_EDID 706 + help 707 + This enables standard timings expansion for EDID data from an LCD panel. 708 + 703 709 config DISPLAY 704 710 bool "Enable Display support" 705 711 depends on DM
+4 -4
drivers/video/bridge/Kconfig
··· 9 9 10 10 config VIDEO_BRIDGE_PARADE_DP501 11 11 bool "Support Parade DP501 DP & DVI/HDMI dual mode transmitter" 12 - depends on PANEL && DM_GPIO 12 + depends on VIDEO_BRIDGE && PANEL && DM_GPIO 13 13 select DM_I2C 14 14 help 15 15 The Parade DP501 is a DP & DVI/HDMI dual-mode transmitter. It ··· 46 46 47 47 config VIDEO_BRIDGE_SOLOMON_SSD2825 48 48 bool "Solomon SSD2825 bridge driver" 49 - depends on PANEL && DM_GPIO 49 + depends on VIDEO_BRIDGE && PANEL && DM_GPIO 50 50 select VIDEO_MIPI_DSI 51 51 help 52 - Solomon SSD2824 SPI RGB-DSI bridge driver wrapped into panel uClass. 52 + Solomon SSD2824 SPI RGB-DSI bridge driver. 53 53 54 54 config VIDEO_BRIDGE_TOSHIBA_TC358768 55 55 bool "Support Toshiba TC358768 MIPI DSI bridge" 56 - depends on PANEL && DM_GPIO 56 + depends on VIDEO_BRIDGE && PANEL && DM_GPIO 57 57 select VIDEO_MIPI_DSI 58 58 select DM_I2C 59 59 help
+11 -16
drivers/video/bridge/dp501.c
··· 9 9 #include <log.h> 10 10 #include <backlight.h> 11 11 #include <panel.h> 12 + #include <video_bridge.h> 12 13 #include <linux/delay.h> 13 14 #include <linux/err.h> 14 15 #include <power/regulator.h> ··· 206 207 struct udevice *chip2; 207 208 208 209 struct udevice *vdd; 209 - struct gpio_desc reset_gpio; 210 210 struct gpio_desc enable_gpio; 211 211 }; 212 212 ··· 484 484 return 0; 485 485 } 486 486 487 - static void dp501_hw_init(struct dp501_priv *priv) 487 + static void dp501_hw_init(struct udevice *dev) 488 488 { 489 - dm_gpio_set_value(&priv->reset_gpio, 1); 489 + struct dp501_priv *priv = dev_get_priv(dev); 490 + struct video_bridge_priv *uc_priv = dev_get_uclass_priv(dev); 491 + 492 + dm_gpio_set_value(&uc_priv->reset, 1); 490 493 491 494 regulator_set_enable_if_allowed(priv->vdd, 1); 492 495 dm_gpio_set_value(&priv->enable_gpio, 1); 493 496 494 497 udelay(100); 495 498 496 - dm_gpio_set_value(&priv->reset_gpio, 0); 499 + dm_gpio_set_value(&uc_priv->reset, 0); 497 500 mdelay(80); 498 501 } 499 502 ··· 521 524 } 522 525 523 526 /* get gpios */ 524 - ret = gpio_request_by_name(dev, "reset-gpios", 0, 525 - &priv->reset_gpio, GPIOD_IS_OUT); 526 - if (ret) { 527 - log_debug("%s: Could not decode reset-gpios (%d)\n", 528 - __func__, ret); 529 - return ret; 530 - } 531 - 532 527 ret = gpio_request_by_name(dev, "enable-gpios", 0, 533 528 &priv->enable_gpio, GPIOD_IS_OUT); 534 529 if (ret) { ··· 544 539 return ret; 545 540 } 546 541 547 - dp501_hw_init(priv); 542 + dp501_hw_init(dev); 548 543 549 544 /* get EDID */ 550 545 return panel_get_display_timing(priv->panel, &priv->timing); ··· 558 553 return dp501_setup(dev); 559 554 } 560 555 561 - struct panel_ops dp501_ops = { 562 - .enable_backlight = dp501_attach, 556 + static const struct video_bridge_ops dp501_ops = { 557 + .attach = dp501_attach, 563 558 .set_backlight = dp501_set_backlight, 564 559 .get_display_timing = dp501_panel_timings, 565 560 }; ··· 571 566 572 567 U_BOOT_DRIVER(dp501) = { 573 568 .name = "dp501", 574 - .id = UCLASS_PANEL, 569 + .id = UCLASS_VIDEO_BRIDGE, 575 570 .of_match = dp501_ids, 576 571 .ops = &dp501_ops, 577 572 .probe = dp501_probe,
+113 -46
drivers/video/bridge/ssd2825.c
··· 5 5 6 6 #include <clk.h> 7 7 #include <dm.h> 8 + #include <dm/ofnode_graph.h> 8 9 #include <log.h> 9 10 #include <misc.h> 10 11 #include <mipi_display.h> 11 12 #include <mipi_dsi.h> 12 13 #include <backlight.h> 14 + #include <video_bridge.h> 13 15 #include <panel.h> 16 + #include <power/regulator.h> 14 17 #include <spi.h> 15 18 #include <linux/delay.h> 16 19 #include <linux/err.h> ··· 106 109 #define SSD2825_LP_MIN_CLK 5000 /* KHz */ 107 110 #define SSD2825_REF_MIN_CLK 2000 /* KHz */ 108 111 112 + static const char * const ssd2825_supplies[] = { 113 + "dvdd-supply", "avdd-supply", "vddio-supply" 114 + }; 115 + 109 116 struct ssd2825_bridge_priv { 110 117 struct mipi_dsi_host host; 111 118 struct mipi_dsi_device device; ··· 113 120 struct udevice *panel; 114 121 struct display_timing timing; 115 122 123 + struct udevice *supplies[ARRAY_SIZE(ssd2825_supplies)]; 124 + 116 125 struct gpio_desc power_gpio; 117 - struct gpio_desc reset_gpio; 118 126 119 127 struct clk *tx_clk; 120 128 121 129 u32 pll_freq_kbps; /* PLL in kbps */ 130 + 131 + u32 hzd; /* HS Zero Delay in ns */ 132 + u32 hpd; /* HS Prepare Delay is ns */ 122 133 }; 123 134 124 135 static int ssd2825_spi_write(struct udevice *dev, int reg, ··· 231 242 const struct mipi_dsi_msg *msg) 232 243 { 233 244 struct udevice *dev = (struct udevice *)host->dev; 234 - u8 buf = *(u8 *)msg->tx_buf; 235 245 u16 config; 236 246 int ret; 237 247 ··· 260 270 ssd2825_write_register(dev, SSD2825_VC_CTRL_REG, 0x0000); 261 271 ssd2825_write_dsi(dev, msg->tx_buf, msg->tx_len); 262 272 263 - if (buf == MIPI_DCS_SET_DISPLAY_ON) { 264 - ssd2825_write_register(dev, SSD2825_CONFIGURATION_REG, 265 - SSD2825_CONF_REG_HS | SSD2825_CONF_REG_VEN | 266 - SSD2825_CONF_REG_DCS | SSD2825_CONF_REG_ECD | 267 - SSD2825_CONF_REG_EOT); 268 - ssd2825_write_register(dev, SSD2825_PLL_CTRL_REG, 0x0001); 269 - ssd2825_write_register(dev, SSD2825_VC_CTRL_REG, 0x0000); 270 - } 271 - 272 273 return 0; 273 274 } 274 275 ··· 312 313 struct mipi_dsi_device *device = &priv->device; 313 314 struct display_timing *dt = &priv->timing; 314 315 u16 pll_config, lp_div; 316 + u32 nibble_delay, nibble_freq_khz; 315 317 u32 pclk_mult, tx_freq_khz, pd_lines; 318 + u8 hzd, hpd; 316 319 317 320 tx_freq_khz = clk_get_rate(priv->tx_clk) / 1000; 321 + if (!tx_freq_khz || tx_freq_khz < 0) 322 + tx_freq_khz = SSD2825_REF_MIN_CLK; 323 + 318 324 pd_lines = mipi_dsi_pixel_format_to_bpp(device->format); 319 325 pclk_mult = pd_lines / device->lanes + 1; 320 326 ··· 324 330 325 331 lp_div = priv->pll_freq_kbps / (SSD2825_LP_MIN_CLK * 8); 326 332 333 + /* nibble_delay in nanoseconds */ 334 + nibble_freq_khz = priv->pll_freq_kbps / 4; 335 + nibble_delay = 1000 * 1000 / nibble_freq_khz; 336 + 337 + hzd = priv->hzd / nibble_delay; 338 + hpd = (priv->hpd - 4 * nibble_delay) / nibble_delay; 339 + 327 340 /* Disable PLL */ 328 341 ssd2825_write_register(dev, SSD2825_PLL_CTRL_REG, 0x0000); 329 342 ssd2825_write_register(dev, SSD2825_LINE_CTRL_REG, 0x0001); 330 343 331 344 /* Set delays */ 332 - ssd2825_write_register(dev, SSD2825_DELAY_ADJ_REG_1, 0x2103); 345 + ssd2825_write_register(dev, SSD2825_DELAY_ADJ_REG_1, (hzd << 8) | hpd); 333 346 334 347 /* Set PLL coeficients */ 335 348 ssd2825_write_register(dev, SSD2825_PLL_CONFIGURATION_REG, pll_config); ··· 343 356 ssd2825_write_register(dev, SSD2825_VC_CTRL_REG, 0x0000); 344 357 } 345 358 346 - static int ssd2825_bridge_enable_panel(struct udevice *dev) 359 + static int ssd2825_bridge_attach(struct udevice *dev) 347 360 { 348 361 struct ssd2825_bridge_priv *priv = dev_get_priv(dev); 349 362 struct mipi_dsi_device *device = &priv->device; 350 363 struct display_timing *dt = &priv->timing; 364 + u8 pixel_format; 365 + int ret; 366 + 367 + /* Set pixel format */ 368 + switch (device->format) { 369 + case MIPI_DSI_FMT_RGB565: 370 + pixel_format = 0x00; 371 + break; 372 + case MIPI_DSI_FMT_RGB666_PACKED: 373 + pixel_format = 0x01; 374 + break; 375 + case MIPI_DSI_FMT_RGB666: 376 + pixel_format = 0x02; 377 + break; 378 + case MIPI_DSI_FMT_RGB888: 379 + default: 380 + pixel_format = 0x03; 381 + break; 382 + } 351 383 352 384 /* Perform SW reset */ 353 385 ssd2825_write_register(dev, SSD2825_OPERATION_CTRL_REG, 0x0100); ··· 367 399 ssd2825_write_register(dev, SSD2825_RGB_INTERFACE_CTRL_REG_6, 368 400 SSD2825_HSYNC_HIGH | SSD2825_VSYNC_HIGH | 369 401 SSD2825_PCKL_HIGH | SSD2825_NON_BURST | 370 - (3 - device->format)); 402 + pixel_format); 371 403 ssd2825_write_register(dev, SSD2825_LANE_CONFIGURATION_REG, 372 404 device->lanes - 1); 373 405 ssd2825_write_register(dev, SSD2825_TEST_REG, 0x0004); ··· 384 416 ssd2825_write_register(dev, SSD2825_VC_CTRL_REG, 0x0000); 385 417 386 418 /* Perform panel setup */ 387 - return panel_enable_backlight(priv->panel); 419 + ret = panel_enable_backlight(priv->panel); 420 + if (ret) 421 + return ret; 422 + 423 + ssd2825_write_register(dev, SSD2825_CONFIGURATION_REG, 424 + SSD2825_CONF_REG_HS | SSD2825_CONF_REG_VEN | 425 + SSD2825_CONF_REG_DCS | SSD2825_CONF_REG_ECD | 426 + SSD2825_CONF_REG_EOT); 427 + ssd2825_write_register(dev, SSD2825_PLL_CTRL_REG, 0x0001); 428 + ssd2825_write_register(dev, SSD2825_VC_CTRL_REG, 0x0000); 429 + 430 + return 0; 388 431 } 389 432 390 433 static int ssd2825_bridge_set_panel(struct udevice *dev, int percent) ··· 407 450 static int ssd2825_bridge_hw_init(struct udevice *dev) 408 451 { 409 452 struct ssd2825_bridge_priv *priv = dev_get_priv(dev); 410 - int ret; 453 + struct video_bridge_priv *uc_priv = dev_get_uclass_priv(dev); 454 + int i, ret; 411 455 412 456 ret = clk_prepare_enable(priv->tx_clk); 413 457 if (ret) { ··· 416 460 return ret; 417 461 } 418 462 419 - ret = dm_gpio_set_value(&priv->power_gpio, 1); 420 - if (ret) { 421 - log_debug("%s: error changing power-gpios (%d)\n", 422 - __func__, ret); 423 - return ret; 463 + /* enable supplies */ 464 + for (i = 0; i < ARRAY_SIZE(ssd2825_supplies); i++) { 465 + ret = regulator_set_enable_if_allowed(priv->supplies[i], 1); 466 + if (ret) { 467 + log_debug("%s: cannot enable %s %d\n", __func__, 468 + ssd2825_supplies[i], ret); 469 + return ret; 470 + } 424 471 } 425 472 mdelay(10); 426 473 427 - ret = dm_gpio_set_value(&priv->reset_gpio, 0); 474 + ret = dm_gpio_set_value(&uc_priv->reset, 1); 428 475 if (ret) { 429 - log_debug("%s: error changing reset-gpios (%d)\n", 476 + log_debug("%s: error entering reset (%d)\n", 430 477 __func__, ret); 431 478 return ret; 432 479 } 433 480 mdelay(10); 434 481 435 - ret = dm_gpio_set_value(&priv->reset_gpio, 1); 482 + ret = dm_gpio_set_value(&uc_priv->reset, 0); 436 483 if (ret) { 437 - log_debug("%s: error changing reset-gpios (%d)\n", 484 + log_debug("%s: error exiting reset (%d)\n", 438 485 __func__, ret); 439 486 return ret; 440 487 } ··· 443 490 return 0; 444 491 } 445 492 493 + static int ssd2825_bridge_get_panel(struct udevice *dev) 494 + { 495 + struct ssd2825_bridge_priv *priv = dev_get_priv(dev); 496 + int i, ret; 497 + 498 + u32 num = ofnode_graph_get_port_count(dev_ofnode(dev)); 499 + 500 + for (i = 0; i < num; i++) { 501 + ofnode remote = ofnode_graph_get_remote_node(dev_ofnode(dev), i, -1); 502 + 503 + ret = uclass_get_device_by_ofnode(UCLASS_PANEL, remote, 504 + &priv->panel); 505 + if (!ret) 506 + return 0; 507 + } 508 + 509 + /* If this point is reached, no panels were found */ 510 + return -ENODEV; 511 + } 512 + 446 513 static int ssd2825_bridge_probe(struct udevice *dev) 447 514 { 448 515 struct ssd2825_bridge_priv *priv = dev_get_priv(dev); 449 516 struct spi_slave *slave = dev_get_parent_priv(dev); 450 517 struct mipi_dsi_device *device = &priv->device; 451 518 struct mipi_dsi_panel_plat *mipi_plat; 452 - int ret; 519 + int i, ret; 453 520 454 521 ret = spi_claim_bus(slave); 455 522 if (ret) { ··· 457 524 return ret; 458 525 } 459 526 460 - ret = uclass_get_device_by_phandle(UCLASS_PANEL, dev, 461 - "panel", &priv->panel); 527 + ret = ssd2825_bridge_get_panel(dev); 462 528 if (ret) { 463 - log_err("cannot get panel: ret=%d\n", ret); 529 + log_debug("%s: panel not found, ret %d\n", __func__, ret); 464 530 return ret; 465 531 } 466 532 ··· 477 543 device->format = mipi_plat->format; 478 544 device->mode_flags = mipi_plat->mode_flags; 479 545 480 - /* get panel gpios */ 481 - ret = gpio_request_by_name(dev, "power-gpios", 0, 482 - &priv->power_gpio, GPIOD_IS_OUT); 483 - if (ret) { 484 - log_err("could not decode power-gpios (%d)\n", ret); 485 - return ret; 486 - } 487 - 488 - ret = gpio_request_by_name(dev, "reset-gpios", 0, 489 - &priv->reset_gpio, GPIOD_IS_OUT); 490 - if (ret) { 491 - log_err("could not decode reset-gpios (%d)\n", ret); 492 - return ret; 546 + /* get supplies */ 547 + for (i = 0; i < ARRAY_SIZE(ssd2825_supplies); i++) { 548 + ret = device_get_supply_regulator(dev, ssd2825_supplies[i], 549 + &priv->supplies[i]); 550 + if (ret) { 551 + log_debug("%s: cannot get %s %d\n", __func__, 552 + ssd2825_supplies[i], ret); 553 + if (ret != -ENOENT) 554 + return log_ret(ret); 555 + } 493 556 } 494 557 495 558 /* get clk */ 496 - priv->tx_clk = devm_clk_get(dev, "tx_clk"); 559 + priv->tx_clk = devm_clk_get_optional(dev, NULL); 497 560 if (IS_ERR(priv->tx_clk)) { 498 561 log_err("cannot get tx_clk: %ld\n", PTR_ERR(priv->tx_clk)); 499 562 return PTR_ERR(priv->tx_clk); 500 563 } 501 564 565 + priv->hzd = dev_read_u32_default(dev, "solomon,hs-zero-delay-ns", 133); 566 + priv->hpd = dev_read_u32_default(dev, "solomon,hs-prep-delay-ns", 40); 567 + 502 568 return ssd2825_bridge_hw_init(dev); 503 569 } 504 570 505 - static const struct panel_ops ssd2825_bridge_ops = { 506 - .enable_backlight = ssd2825_bridge_enable_panel, 571 + static const struct video_bridge_ops ssd2825_bridge_ops = { 572 + .attach = ssd2825_bridge_attach, 507 573 .set_backlight = ssd2825_bridge_set_panel, 508 574 .get_display_timing = ssd2825_bridge_panel_timings, 509 575 }; ··· 515 581 516 582 U_BOOT_DRIVER(ssd2825) = { 517 583 .name = "ssd2825", 518 - .id = UCLASS_PANEL, 584 + .id = UCLASS_VIDEO_BRIDGE, 519 585 .of_match = ssd2825_bridge_ids, 520 586 .ops = &ssd2825_bridge_ops, 587 + .bind = dm_scan_fdt_dev, 521 588 .probe = ssd2825_bridge_probe, 522 589 .priv_auto = sizeof(struct ssd2825_bridge_priv), 523 590 };
+55 -46
drivers/video/bridge/tc358768.c
··· 6 6 7 7 #include <clk.h> 8 8 #include <dm.h> 9 + #include <dm/ofnode_graph.h> 9 10 #include <i2c.h> 10 11 #include <log.h> 11 12 #include <mipi_display.h> 12 13 #include <mipi_dsi.h> 13 14 #include <backlight.h> 14 15 #include <panel.h> 16 + #include <video_bridge.h> 15 17 #include <linux/delay.h> 16 18 #include <linux/err.h> 17 19 #include <linux/kernel.h> ··· 122 124 #define NANO 1000000000UL 123 125 #define PICO 1000000000000ULL 124 126 127 + static const char * const tc358768_supplies[] = { 128 + "vddc-supply", "vddmipi-supply", "vddio-supply" 129 + }; 130 + 125 131 struct tc358768_priv { 126 132 struct mipi_dsi_host host; 127 133 struct mipi_dsi_device device; ··· 129 135 struct udevice *panel; 130 136 struct display_timing timing; 131 137 132 - struct udevice *vddc; 133 - struct udevice *vddmipi; 134 - struct udevice *vddio; 138 + struct udevice *supplies[ARRAY_SIZE(tc358768_supplies)]; 135 139 136 140 struct clk *refclk; 137 141 ··· 265 269 tc358768_write(dev, TC358768_SYSCTL, 0); 266 270 } 267 271 268 - static void tc358768_hw_enable(struct tc358768_priv *priv) 272 + static void tc358768_hw_enable(struct udevice *dev) 269 273 { 274 + struct tc358768_priv *priv = dev_get_priv(dev); 275 + struct video_bridge_priv *uc_priv = dev_get_uclass_priv(dev); 270 276 int ret; 271 277 272 278 ret = clk_prepare_enable(priv->refclk); 273 279 if (ret) 274 280 log_debug("%s: error enabling refclk (%d)\n", __func__, ret); 275 281 276 - ret = regulator_set_enable_if_allowed(priv->vddc, true); 282 + ret = regulator_set_enable_if_allowed(priv->supplies[0], true); 277 283 if (ret) 278 284 log_debug("%s: error enabling vddc (%d)\n", __func__, ret); 279 285 280 - ret = regulator_set_enable_if_allowed(priv->vddmipi, true); 286 + ret = regulator_set_enable_if_allowed(priv->supplies[1], true); 281 287 if (ret) 282 288 log_debug("%s: error enabling vddmipi (%d)\n", __func__, ret); 283 289 284 290 mdelay(10); 285 291 286 - ret = regulator_set_enable_if_allowed(priv->vddio, true); 292 + ret = regulator_set_enable_if_allowed(priv->supplies[2], true); 287 293 if (ret) 288 294 log_debug("%s: error enabling vddio (%d)\n", __func__, ret); 289 295 ··· 293 299 * The RESX is active low (GPIO_ACTIVE_LOW). 294 300 * DEASSERT (value = 0) the reset_gpio to enable the chip 295 301 */ 296 - ret = dm_gpio_set_value(&priv->reset_gpio, 0); 302 + ret = dm_gpio_set_value(&uc_priv->reset, 0); 297 303 if (ret) 298 304 log_debug("%s: error changing reset-gpio (%d)\n", __func__, ret); 299 305 ··· 477 483 device->mode_flags &= ~MIPI_DSI_CLOCK_NON_CONTINUOUS; 478 484 } 479 485 480 - tc358768_hw_enable(priv); 486 + tc358768_hw_enable(dev); 481 487 tc358768_sw_reset(dev); 482 488 483 489 tc358768_setup_pll(dev); ··· 874 880 return 0; 875 881 } 876 882 883 + static int tc358768_get_panel(struct udevice *dev) 884 + { 885 + struct tc358768_priv *priv = dev_get_priv(dev); 886 + int i, ret; 887 + 888 + u32 num = ofnode_graph_get_port_count(dev_ofnode(dev)); 889 + 890 + for (i = 0; i < num; i++) { 891 + ofnode remote = ofnode_graph_get_remote_node(dev_ofnode(dev), i, -1); 892 + 893 + ret = uclass_get_device_by_ofnode(UCLASS_PANEL, remote, 894 + &priv->panel); 895 + if (!ret) 896 + return 0; 897 + } 898 + 899 + /* If this point is reached, no panels were found */ 900 + return -ENODEV; 901 + } 902 + 877 903 static int tc358768_setup(struct udevice *dev) 878 904 { 879 905 struct tc358768_priv *priv = dev_get_priv(dev); 906 + struct video_bridge_priv *uc_priv = dev_get_uclass_priv(dev); 880 907 struct mipi_dsi_device *device = &priv->device; 881 908 struct mipi_dsi_panel_plat *mipi_plat; 882 - int ret; 909 + int i, ret; 883 910 884 911 /* The bridge uses 16 bit registers */ 885 912 ret = i2c_set_chip_offset_len(dev, 2); ··· 889 916 return ret; 890 917 } 891 918 892 - ret = uclass_get_device_by_phandle(UCLASS_PANEL, dev, 893 - "panel", &priv->panel); 919 + ret = tc358768_get_panel(dev); 894 920 if (ret) { 895 - log_debug("%s: Cannot get panel: ret=%d\n", __func__, ret); 896 - return log_ret(ret); 921 + log_debug("%s: panel not found, ret %d\n", __func__, ret); 922 + return ret; 897 923 } 898 924 899 925 panel_get_display_timing(priv->panel, &priv->timing); ··· 913 939 priv->dsi_lanes = device->lanes; 914 940 915 941 /* get regulators */ 916 - ret = device_get_supply_regulator(dev, "vddc-supply", &priv->vddc); 917 - if (ret) { 918 - log_debug("%s: vddc regulator error: %d\n", __func__, ret); 919 - if (ret != -ENOENT) 920 - return log_ret(ret); 921 - } 922 - 923 - ret = device_get_supply_regulator(dev, "vddmipi-supply", &priv->vddmipi); 924 - if (ret) { 925 - log_debug("%s: vddmipi regulator error: %d\n", __func__, ret); 926 - if (ret != -ENOENT) 927 - return log_ret(ret); 928 - } 929 - 930 - ret = device_get_supply_regulator(dev, "vddio-supply", &priv->vddio); 931 - if (ret) { 932 - log_debug("%s: vddio regulator error: %d\n", __func__, ret); 933 - if (ret != -ENOENT) 934 - return log_ret(ret); 942 + for (i = 0; i < ARRAY_SIZE(tc358768_supplies); i++) { 943 + ret = device_get_supply_regulator(dev, tc358768_supplies[i], 944 + &priv->supplies[i]); 945 + if (ret) { 946 + log_debug("%s: cannot get %s %d\n", __func__, 947 + tc358768_supplies[i], ret); 948 + if (ret != -ENOENT) 949 + return log_ret(ret); 950 + } 935 951 } 936 952 937 953 /* get clk */ 938 - priv->refclk = devm_clk_get(dev, "refclk"); 954 + priv->refclk = devm_clk_get(dev, NULL); 939 955 if (IS_ERR(priv->refclk)) { 940 956 log_debug("%s: Could not get refclk: %ld\n", 941 957 __func__, PTR_ERR(priv->refclk)); 942 958 return PTR_ERR(priv->refclk); 943 959 } 944 960 945 - /* get gpios */ 946 - ret = gpio_request_by_name(dev, "reset-gpios", 0, 947 - &priv->reset_gpio, GPIOD_IS_OUT); 948 - if (ret) { 949 - log_debug("%s: Could not decode reset-gpios (%d)\n", __func__, ret); 950 - return ret; 951 - } 952 - 953 - dm_gpio_set_value(&priv->reset_gpio, 1); 961 + dm_gpio_set_value(&uc_priv->reset, 1); 954 962 955 963 return 0; 956 964 } ··· 963 971 return tc358768_setup(dev); 964 972 } 965 973 966 - struct panel_ops tc358768_ops = { 967 - .enable_backlight = tc358768_attach, 974 + static const struct video_bridge_ops tc358768_ops = { 975 + .attach = tc358768_attach, 968 976 .set_backlight = tc358768_set_backlight, 969 977 .get_display_timing = tc358768_panel_timings, 970 978 }; ··· 977 985 978 986 U_BOOT_DRIVER(tc358768) = { 979 987 .name = "tc358768", 980 - .id = UCLASS_PANEL, 988 + .id = UCLASS_VIDEO_BRIDGE, 981 989 .of_match = tc358768_ids, 982 990 .ops = &tc358768_ops, 991 + .bind = dm_scan_fdt_dev, 983 992 .probe = tc358768_probe, 984 993 .priv_auto = sizeof(struct tc358768_priv), 985 994 };
+13 -8
drivers/video/endeavoru-panel.c
··· 117 117 struct endeavoru_panel_priv *priv = dev_get_priv(dev); 118 118 int ret; 119 119 120 + /* 121 + * Due to the use of the Tegra DC backlight feature, backlight 122 + * requests MUST NOT be made during probe or earlier. This is 123 + * because it creates a loop, as the backlight is a DC child. 124 + */ 125 + ret = uclass_get_device_by_phandle(UCLASS_PANEL_BACKLIGHT, dev, 126 + "backlight", &priv->backlight); 127 + if (ret) { 128 + log_err("cannot get backlight: ret = %d\n", ret); 129 + return ret; 130 + } 131 + 120 132 ret = backlight_enable(priv->backlight); 121 133 if (ret) 122 134 return ret; ··· 135 147 { 136 148 struct endeavoru_panel_priv *priv = dev_get_priv(dev); 137 149 int ret; 138 - 139 - ret = uclass_get_device_by_phandle(UCLASS_PANEL_BACKLIGHT, dev, 140 - "backlight", &priv->backlight); 141 - if (ret) { 142 - log_err("cannot get backlight: ret = %d\n", ret); 143 - return ret; 144 - } 145 150 146 151 ret = uclass_get_device_by_phandle(UCLASS_REGULATOR, dev, 147 152 "vdd-supply", &priv->vdd); ··· 231 236 /* fill characteristics of DSI data link */ 232 237 plat->lanes = 2; 233 238 plat->format = MIPI_DSI_FMT_RGB888; 234 - plat->mode_flags = MIPI_DSI_MODE_VIDEO; 239 + plat->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_LPM; 235 240 236 241 return endeavoru_panel_hw_init(dev); 237 242 }
+1 -1
drivers/video/lg-ld070wx3.c
··· 158 158 /* fill characteristics of DSI data link */ 159 159 plat->lanes = 4; 160 160 plat->format = MIPI_DSI_FMT_RGB888; 161 - plat->mode_flags = MIPI_DSI_MODE_VIDEO; 161 + plat->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_LPM; 162 162 163 163 return lg_ld070wx3_hw_init(dev); 164 164 }
+112 -30
drivers/video/lm3533_backlight.c
··· 7 7 8 8 #include <backlight.h> 9 9 #include <dm.h> 10 + #include <dm/ofnode.h> 10 11 #include <i2c.h> 11 12 #include <log.h> 12 13 #include <linux/delay.h> ··· 17 18 #define LM3533_BL_MAX_BRIGHTNESS 0xFF 18 19 19 20 #define LM3533_SINK_OUTPUT_CONFIG_1 0x10 20 - #define LM3533_CONTROL_BANK_A_PWM 0x14 21 + #define LM3533_CONTROL_PWM_BASE 0x14 22 + #define PWM_MAX GENMASK(5, 0) 21 23 #define LM3533_CONTROL_BANK_AB_BRIGHTNESS 0x1A 22 - #define LM3533_CONTROL_BANK_A_FULLSCALE_CURRENT 0x1F 24 + #define LM3533_CONTROL_FULLSCALE_CURRENT_BASE 0x1F 25 + #define MAX_CURRENT_MIN 5000 26 + #define MAX_CURRENT_MAX 29800 27 + #define MAX_CURRENT_STEP 800 23 28 #define LM3533_CONTROL_BANK_ENABLE 0x27 24 29 #define LM3533_OVP_FREQUENCY_PWM_POLARITY 0x2C 30 + #define BOOST_OVP_MASK GENMASK(2, 1) 31 + #define BOOST_OVP_SHIFT 1 32 + #define BOOST_FREQ_MASK BIT(0) 33 + #define BOOST_FREQ_SHIFT 0 25 34 #define LM3533_BRIGHTNESS_REGISTER_A 0x40 26 35 36 + #define LM3533_BOOST_OVP_16V 16000000UL 37 + #define LM3533_BOOST_FREQ_500KHZ 500000UL 38 + 27 39 struct lm3533_backlight_priv { 28 40 struct gpio_desc enable_gpio; 29 41 u32 def_bl_lvl; 42 + 43 + /* Core */ 44 + u32 boost_ovp; 45 + u32 boost_freq; 46 + 47 + /* Backlight */ 48 + u32 reg; 49 + u16 max_current; /* 5000 - 29800 uA (800 uA step) */ 50 + u8 pwm; /* 0 - 0x3f */ 51 + bool linear; 52 + bool hvled; 30 53 }; 31 54 32 55 static int lm3533_backlight_enable(struct udevice *dev) 33 56 { 34 57 struct lm3533_backlight_priv *priv = dev_get_priv(dev); 58 + u8 val, id = priv->reg; 35 59 int ret; 36 60 37 - dm_gpio_set_value(&priv->enable_gpio, 1); 38 - mdelay(5); 61 + if (priv->linear) { 62 + ret = dm_i2c_reg_clrset(dev, LM3533_CONTROL_BANK_AB_BRIGHTNESS, 63 + BIT(2 * id + 1), BIT(2 * id + 1)); 64 + if (ret) 65 + return ret; 66 + } 39 67 40 - /* HVLED 1 & 2 are controlled by Bank A */ 41 - ret = dm_i2c_reg_write(dev, LM3533_SINK_OUTPUT_CONFIG_1, 0x00); 42 - if (ret) 43 - return ret; 68 + if (priv->hvled) { 69 + ret = dm_i2c_reg_clrset(dev, LM3533_SINK_OUTPUT_CONFIG_1, 70 + BIT(0) | BIT(1), id | id << 1); 71 + if (ret) 72 + return ret; 73 + } 44 74 45 - /* PWM input is disabled for CABC */ 46 - ret = dm_i2c_reg_write(dev, LM3533_CONTROL_BANK_A_PWM, 0x00); 47 - if (ret) 48 - return ret; 75 + /* Set current */ 76 + if (priv->max_current < MAX_CURRENT_MIN || priv->max_current > MAX_CURRENT_MAX) 77 + return -EINVAL; 49 78 50 - /* Linear & Control Bank A is configured for register Current control */ 51 - ret = dm_i2c_reg_write(dev, LM3533_CONTROL_BANK_AB_BRIGHTNESS, 0x02); 79 + val = (priv->max_current - MAX_CURRENT_MIN) / MAX_CURRENT_STEP; 80 + ret = dm_i2c_reg_write(dev, LM3533_CONTROL_FULLSCALE_CURRENT_BASE + id, val); 52 81 if (ret) 53 82 return ret; 54 83 55 - /* Full-Scale Current (20.2mA) */ 56 - ret = dm_i2c_reg_write(dev, LM3533_CONTROL_BANK_A_FULLSCALE_CURRENT, 0x13); 57 - if (ret) 58 - return ret; 84 + /* Set PWM mask */ 85 + if (priv->pwm > PWM_MAX) 86 + return -EINVAL; 59 87 60 - /* Control Bank A is enable */ 61 - ret = dm_i2c_reg_write(dev, LM3533_CONTROL_BANK_ENABLE, 0x01); 62 - if (ret) 63 - return ret; 64 - 65 - ret = dm_i2c_reg_write(dev, LM3533_OVP_FREQUENCY_PWM_POLARITY, 0x0A); 88 + ret = dm_i2c_reg_write(dev, LM3533_CONTROL_PWM_BASE + id, priv->pwm); 66 89 if (ret) 67 90 return ret; 68 91 69 - return 0; 92 + /* Enable Control Bank */ 93 + return dm_i2c_reg_clrset(dev, LM3533_CONTROL_BANK_ENABLE, BIT(id), BIT(id)); 70 94 } 71 95 72 96 static int lm3533_backlight_set_brightness(struct udevice *dev, int percent) ··· 92 116 return 0; 93 117 } 94 118 119 + static int lm3533_backlight_of_to_plat(struct udevice *dev) 120 + { 121 + struct lm3533_backlight_priv *priv = dev_get_priv(dev); 122 + ofnode child; 123 + int ret; 124 + 125 + ret = gpio_request_by_name(dev, "enable-gpios", 0, 126 + &priv->enable_gpio, GPIOD_IS_OUT); 127 + if (ret) { 128 + log_err("Could not decode enable-gpios (%d)\n", ret); 129 + return ret; 130 + } 131 + 132 + priv->boost_ovp = dev_read_u32_default(dev, "ti,boost-ovp-microvolt", 133 + LM3533_BOOST_OVP_16V); 134 + 135 + /* boost_ovp is defined in microvolts, convert to enum value */ 136 + priv->boost_ovp = priv->boost_ovp / (8 * 1000 * 1000) - 2; 137 + 138 + priv->boost_freq = dev_read_u32_default(dev, "ti,boost-freq-hz", 139 + LM3533_BOOST_FREQ_500KHZ); 140 + 141 + /* boost_freq is defined in Hz, convert to enum value */ 142 + priv->boost_freq = priv->boost_freq / (500 * 1000) - 1; 143 + 144 + /* Backlight is one of children but has no dedicated driver */ 145 + ofnode_for_each_subnode(child, dev_ofnode(dev)) { 146 + if (ofnode_device_is_compatible(child, "ti,lm3533-backlight")) { 147 + const char *node_name = ofnode_get_name(child); 148 + 149 + if (!strcmp(&node_name[10], "1")) 150 + priv->reg = 1; 151 + else 152 + priv->reg = 0; 153 + 154 + priv->max_current = ofnode_read_u32_default(child, "ti,max-current-microamp", 155 + 5000); 156 + priv->pwm = ofnode_read_u32_default(child, "ti,pwm-config-mask", 0); 157 + 158 + priv->def_bl_lvl = ofnode_read_u32_default(child, "default-brightness", 159 + LM3533_BL_MAX_BRIGHTNESS); 160 + 161 + priv->linear = ofnode_read_bool(child, "ti,linear-mapping-mode"); 162 + priv->hvled = ofnode_read_bool(child, "ti,hardware-controlled"); 163 + } 164 + } 165 + 166 + return 0; 167 + } 168 + 95 169 static int lm3533_backlight_probe(struct udevice *dev) 96 170 { 97 171 struct lm3533_backlight_priv *priv = dev_get_priv(dev); ··· 100 174 if (device_get_uclass_id(dev->parent) != UCLASS_I2C) 101 175 return -EPROTONOSUPPORT; 102 176 103 - ret = gpio_request_by_name(dev, "enable-gpios", 0, 104 - &priv->enable_gpio, GPIOD_IS_OUT); 177 + dm_gpio_set_value(&priv->enable_gpio, 1); 178 + mdelay(5); 179 + 180 + ret = dm_i2c_reg_clrset(dev, LM3533_OVP_FREQUENCY_PWM_POLARITY, 181 + BOOST_FREQ_MASK, priv->boost_freq << BOOST_FREQ_SHIFT); 105 182 if (ret) { 106 - log_err("Could not decode enable-gpios (%d)\n", ret); 183 + log_debug("%s: freq config failed %d\n", __func__, ret); 107 184 return ret; 108 185 } 109 186 110 - priv->def_bl_lvl = dev_read_u32_default(dev, "default-brightness-level", 111 - LM3533_BL_MAX_BRIGHTNESS); 187 + ret = dm_i2c_reg_clrset(dev, LM3533_OVP_FREQUENCY_PWM_POLARITY, 188 + BOOST_OVP_MASK, priv->boost_ovp << BOOST_OVP_SHIFT); 189 + if (ret) { 190 + log_debug("%s: ovp config failed %d\n", __func__, ret); 191 + return ret; 192 + } 112 193 113 194 return 0; 114 195 } ··· 127 208 .name = "lm3533_backlight", 128 209 .id = UCLASS_PANEL_BACKLIGHT, 129 210 .of_match = lm3533_backlight_ids, 211 + .of_to_plat = lm3533_backlight_of_to_plat, 130 212 .probe = lm3533_backlight_probe, 131 213 .ops = &lm3533_backlight_ops, 132 214 .priv_auto = sizeof(struct lm3533_backlight_priv),
+7 -6
drivers/video/renesas-r61307.c
··· 254 254 return ret; 255 255 } 256 256 257 - ret = dm_gpio_set_value(&priv->reset_gpio, 0); 257 + ret = dm_gpio_set_value(&priv->reset_gpio, 1); 258 258 if (ret) { 259 - log_debug("%s: changing reset-gpio failed (%d)\n", 259 + log_debug("%s: entering reset failed (%d)\n", 260 260 __func__, ret); 261 261 return ret; 262 262 } 263 263 mdelay(5); 264 264 265 - ret = dm_gpio_set_value(&priv->reset_gpio, 1); 265 + ret = dm_gpio_set_value(&priv->reset_gpio, 0); 266 266 if (ret) { 267 - log_debug("%s: changing reset-gpio failed (%d)\n", 267 + log_debug("%s: exiting reset failed (%d)\n", 268 268 __func__, ret); 269 269 return ret; 270 270 } ··· 281 281 /* fill characteristics of DSI data link */ 282 282 plat->lanes = 4; 283 283 plat->format = MIPI_DSI_FMT_RGB888; 284 - plat->mode_flags = MIPI_DSI_MODE_VIDEO; 284 + plat->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE | 285 + MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_LPM; 285 286 286 287 return renesas_r61307_hw_init(dev); 287 288 } ··· 294 295 295 296 static const struct udevice_id renesas_r61307_ids[] = { 296 297 { .compatible = "koe,tx13d100vm0eaa" }, 297 - { .compatible = "hitachi,tx13d100vm0eaa" }, 298 + { .compatible = "hit,tx13d100vm0eaa" }, 298 299 { } 299 300 }; 300 301
+26 -11
drivers/video/renesas-r69328.c
··· 32 32 #define R69328_POWER_SET 0xD1 33 33 34 34 struct renesas_r69328_priv { 35 + struct udevice *vdd; 36 + struct udevice *vddio; 37 + 35 38 struct udevice *backlight; 36 39 37 - struct gpio_desc enable_gpio; 38 40 struct gpio_desc reset_gpio; 39 41 }; 40 42 ··· 159 161 return ret; 160 162 } 161 163 162 - ret = gpio_request_by_name(dev, "enable-gpios", 0, 163 - &priv->enable_gpio, GPIOD_IS_OUT); 164 + ret = device_get_supply_regulator(dev, "vdd-supply", &priv->vdd); 165 + if (ret) { 166 + log_err("Cannot get vdd-supply: ret = %d\n", ret); 167 + return ret; 168 + } 169 + 170 + ret = device_get_supply_regulator(dev, "vddio-supply", &priv->vddio); 164 171 if (ret) { 165 - log_err("could not decode enable-gpios (%d)\n", ret); 172 + log_err("Cannot get vddio-supply: ret = %d\n", ret); 166 173 return ret; 167 174 } 168 175 ··· 181 188 struct renesas_r69328_priv *priv = dev_get_priv(dev); 182 189 int ret; 183 190 184 - ret = dm_gpio_set_value(&priv->enable_gpio, 1); 191 + ret = regulator_set_enable_if_allowed(priv->vddio, 1); 185 192 if (ret) { 186 - log_debug("%s: error changing enable-gpios (%d)\n", 193 + log_debug("%s: enabling vddio-supply failed (%d)\n", 187 194 __func__, ret); 188 195 return ret; 189 196 } 190 197 mdelay(5); 191 198 192 - ret = dm_gpio_set_value(&priv->reset_gpio, 0); 199 + ret = regulator_set_enable_if_allowed(priv->vdd, 1); 200 + if (ret) { 201 + log_debug("%s: enabling vdd-supply failed (%d)\n", 202 + __func__, ret); 203 + return ret; 204 + } 205 + 206 + ret = dm_gpio_set_value(&priv->reset_gpio, 1); 193 207 if (ret) { 194 - log_debug("%s: error changing reset-gpios (%d)\n", 208 + log_debug("%s: error entering reset (%d)\n", 195 209 __func__, ret); 196 210 return ret; 197 211 } 198 212 mdelay(5); 199 213 200 - ret = dm_gpio_set_value(&priv->reset_gpio, 1); 214 + ret = dm_gpio_set_value(&priv->reset_gpio, 0); 201 215 if (ret) { 202 - log_debug("%s: error changing reset-gpios (%d)\n", 216 + log_debug("%s: error exiting reset (%d)\n", 203 217 __func__, ret); 204 218 return ret; 205 219 } ··· 216 230 /* fill characteristics of DSI data link */ 217 231 plat->lanes = 4; 218 232 plat->format = MIPI_DSI_FMT_RGB888; 219 - plat->mode_flags = MIPI_DSI_MODE_VIDEO; 233 + plat->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE | 234 + MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_LPM; 220 235 221 236 return renesas_r69328_hw_init(dev); 222 237 }
+1 -1
drivers/video/samsung-ltl106hl02.c
··· 129 129 /* fill characteristics of DSI data link */ 130 130 plat->lanes = 4; 131 131 plat->format = MIPI_DSI_FMT_RGB888; 132 - plat->mode_flags = MIPI_DSI_MODE_VIDEO; 132 + plat->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_LPM; 133 133 134 134 return samsung_ltl106hl02_hw_init(dev); 135 135 }
+1
drivers/video/sharp-lq101r1sx01.c
··· 255 255 /* fill characteristics of DSI data link */ 256 256 plat->lanes = 4; 257 257 plat->format = MIPI_DSI_FMT_RGB888; 258 + plat->mode_flags = MIPI_DSI_MODE_LPM; 258 259 259 260 return sharp_lq101r1sx01_hw_init(dev); 260 261 }
+15 -1
drivers/video/tegra20/Kconfig
··· 1 + config HOST1X_TEGRA 2 + bool "NVIDIA Tegra host1x BUS support" 3 + depends on SIMPLE_BUS 4 + 1 5 config VIDEO_TEGRA20 2 6 bool "Enable Display Controller support on Tegra20 and Tegra 30" 3 7 depends on OF_CONTROL 8 + select HOST1X_TEGRA 4 9 help 5 10 T20/T30 support video output to an attached LCD panel as well as 6 11 other options such as HDMI. Only the LCD is supported in U-Boot. ··· 9 14 10 15 config VIDEO_DSI_TEGRA30 11 16 bool "Enable Tegra 30 DSI support" 12 - depends on PANEL && DM_GPIO 17 + depends on VIDEO_BRIDGE && PANEL && DM_GPIO 13 18 select VIDEO_TEGRA20 14 19 select VIDEO_MIPI_DSI 15 20 help 16 21 T30 has native support for DSI panels. This option enables support 17 22 for such panels which can be used on endeavoru and tf600t. 23 + 24 + config VIDEO_HDMI_TEGRA 25 + bool "Enable Tegra HDMI support" 26 + depends on VIDEO_BRIDGE && DM_I2C 27 + select I2C_EDID 28 + select VIDEO_TEGRA20 29 + help 30 + Tegra has native support for HDMI. This option enables support 31 + for such connection and can be used for any supported device. 18 32 19 33 config TEGRA_BACKLIGHT_PWM 20 34 bool "Enable Tegra DC PWM backlight support"
+2
drivers/video/tegra20/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0+ 2 2 3 + obj-$(CONFIG_HOST1X_TEGRA) += tegra-host1x.o 3 4 obj-$(CONFIG_VIDEO_TEGRA20) += tegra-dc.o 4 5 obj-$(CONFIG_VIDEO_DSI_TEGRA30) += tegra-dsi.o tegra-mipi.o mipi-phy.o 6 + obj-$(CONFIG_VIDEO_HDMI_TEGRA) += tegra-hdmi.o 5 7 obj-$(CONFIG_TEGRA_BACKLIGHT_PWM) += tegra-pwm-backlight.o
+171 -62
drivers/video/tegra20/tegra-dc.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0+ 2 2 /* 3 3 * Copyright (c) 2011 The Chromium OS Authors. 4 + * Copyright (c) 2024 Svyatoslav Ryhel <clamor95@gmail.com> 4 5 */ 5 6 6 7 #include <backlight.h> 7 8 #include <cpu_func.h> 8 9 #include <clk.h> 9 10 #include <dm.h> 11 + #include <dm/ofnode_graph.h> 10 12 #include <fdtdec.h> 11 13 #include <log.h> 12 14 #include <panel.h> 13 15 #include <video.h> 16 + #include <video_bridge.h> 14 17 #include <asm/system.h> 15 18 #include <asm/io.h> 16 19 #include <asm/arch/clock.h> ··· 31 34 int height; /* height in pixels */ 32 35 enum video_log2_bpp log2_bpp; /* colour depth */ 33 36 struct display_timing timing; 34 - struct udevice *panel; 37 + struct udevice *panel; /* Panels attached to RGB */ 38 + struct udevice *bridge; /* Bridge linked with DC */ 35 39 struct dc_ctlr *dc; /* Display controller regmap */ 36 40 const struct tegra_dc_soc_info *soc; 37 41 fdt_addr_t frame_buffer; /* Address of frame buffer */ ··· 319 323 / priv->pixel_clock) - 2; 320 324 log_debug("Display clock %lu, divider %lu\n", rate, priv->scdiv); 321 325 322 - /* 323 - * HOST1X is init by default at 150MHz with PLLC as parent 324 - */ 325 - clock_start_periph_pll(PERIPH_ID_HOST1X, CLOCK_ID_CGENERAL, 326 - 150 * 1000000); 327 326 clock_start_periph_pll(priv->clk->id, priv->clk_parent->id, 328 327 rate); 329 328 ··· 378 377 } 379 378 380 379 /* Get shift clock divider from Tegra DSI if used */ 381 - if (!strcmp(priv->panel->name, TEGRA_DSI_A) || 382 - !strcmp(priv->panel->name, TEGRA_DSI_B)) { 383 - struct tegra_dc_plat *dc_plat = dev_get_plat(priv->panel); 380 + if (priv->bridge) { 381 + if (!strcmp(priv->bridge->driver->name, "tegra_dsi")) { 382 + struct tegra_dc_plat *dc_plat = dev_get_plat(priv->bridge); 384 383 385 - priv->scdiv = dc_plat->scdiv; 384 + priv->scdiv = dc_plat->scdiv; 385 + } 386 386 } 387 387 388 388 /* Clean the framebuffer area */ ··· 395 395 return ret; 396 396 } 397 397 398 - ret = panel_enable_backlight(priv->panel); 399 - if (ret) { 400 - log_debug("%s: Cannot enable backlight, ret=%d\n", __func__, ret); 401 - return ret; 398 + if (priv->panel) { 399 + ret = panel_enable_backlight(priv->panel); 400 + if (ret) { 401 + log_debug("%s: Cannot enable backlight, ret=%d\n", __func__, ret); 402 + return ret; 403 + } 404 + } 405 + 406 + if (priv->bridge) { 407 + ret = video_bridge_attach(priv->bridge); 408 + if (ret) { 409 + log_debug("%s: Cannot attach bridge, ret=%d\n", __func__, ret); 410 + return ret; 411 + } 402 412 } 403 413 404 414 mmu_set_region_dcache_behaviour(priv->frame_buffer, plat->size, ··· 413 423 log_debug("LCD frame buffer at %08x, size %x\n", priv->frame_buffer, 414 424 plat->size); 415 425 416 - return panel_set_backlight(priv->panel, BACKLIGHT_DEFAULT); 426 + if (priv->panel) { 427 + ret = panel_set_backlight(priv->panel, BACKLIGHT_DEFAULT); 428 + if (ret) 429 + return ret; 430 + } 431 + 432 + if (priv->bridge) { 433 + ret = video_bridge_set_backlight(priv->bridge, BACKLIGHT_DEFAULT); 434 + if (ret) 435 + return ret; 436 + } 437 + 438 + return 0; 439 + } 440 + 441 + static int tegra_lcd_configure_rgb(struct udevice *dev, ofnode rgb) 442 + { 443 + struct tegra_lcd_priv *priv = dev_get_priv(dev); 444 + ofnode remote; 445 + int ret; 446 + 447 + /* DC can have only 1 port */ 448 + remote = ofnode_graph_get_remote_node(rgb, -1, -1); 449 + 450 + ret = uclass_get_device_by_ofnode(UCLASS_PANEL, remote, &priv->panel); 451 + if (!ret) 452 + return 0; 453 + 454 + ret = uclass_get_device_by_ofnode(UCLASS_VIDEO_BRIDGE, remote, &priv->bridge); 455 + if (!ret) 456 + return 0; 457 + 458 + /* Try legacy method if graph did not work */ 459 + remote = ofnode_parse_phandle(rgb, "nvidia,panel", 0); 460 + if (!ofnode_valid(remote)) 461 + return -EINVAL; 462 + 463 + ret = uclass_get_device_by_ofnode(UCLASS_PANEL, remote, &priv->panel); 464 + if (ret) { 465 + log_debug("%s: Cannot find panel for '%s' (ret=%d)\n", 466 + __func__, dev->name, ret); 467 + 468 + ret = uclass_get_device_by_ofnode(UCLASS_VIDEO_BRIDGE, remote, 469 + &priv->bridge); 470 + if (ret) { 471 + log_err("%s: Cannot find panel or bridge for '%s' (ret=%d)\n", 472 + __func__, dev->name, ret); 473 + return ret; 474 + } 475 + } 476 + 477 + return 0; 478 + } 479 + 480 + static int tegra_lcd_configure_internal(struct udevice *dev) 481 + { 482 + struct tegra_lcd_priv *priv = dev_get_priv(dev); 483 + struct tegra_dc_plat *dc_plat; 484 + ofnode host1x = ofnode_get_parent(dev_ofnode(dev)); 485 + ofnode node; 486 + int ret; 487 + 488 + switch (priv->pipe) { 489 + case 0: /* DC0 is usually used for DSI */ 490 + /* Check for ganged DSI configuration */ 491 + ofnode_for_each_subnode(node, host1x) 492 + if (ofnode_name_eq(node, "dsi") && ofnode_is_enabled(node) && 493 + ofnode_read_bool(node, "nvidia,ganged-mode")) 494 + goto exit; 495 + 496 + /* If no master DSI found loop for any active DSI */ 497 + ofnode_for_each_subnode(node, host1x) 498 + if (ofnode_name_eq(node, "dsi") && ofnode_is_enabled(node)) 499 + goto exit; 500 + 501 + log_err("%s: failed to find DSI device for '%s'\n", 502 + __func__, dev->name); 503 + 504 + return -ENODEV; 505 + case 1: /* DC1 is usually used for HDMI */ 506 + ofnode_for_each_subnode(node, host1x) 507 + if (ofnode_name_eq(node, "hdmi")) 508 + goto exit; 509 + 510 + log_err("%s: failed to find HDMI device for '%s'\n", 511 + __func__, dev->name); 512 + 513 + return -ENODEV; 514 + default: 515 + log_debug("Unsupported DC selection\n"); 516 + return -EINVAL; 517 + } 518 + 519 + exit: 520 + ret = uclass_get_device_by_ofnode(UCLASS_VIDEO_BRIDGE, node, &priv->bridge); 521 + if (ret) { 522 + log_err("%s: failed to get DSI/HDMI device for '%s' (ret %d)\n", 523 + __func__, dev->name, ret); 524 + return ret; 525 + } 526 + 527 + priv->clk_parent = devm_clk_get(priv->bridge, "parent"); 528 + if (IS_ERR(priv->clk_parent)) { 529 + log_debug("%s: Could not get DC clock parent from DSI/HDMI: %ld\n", 530 + __func__, PTR_ERR(priv->clk_parent)); 531 + return PTR_ERR(priv->clk_parent); 532 + } 533 + 534 + dc_plat = dev_get_plat(priv->bridge); 535 + 536 + /* Fill the platform data for internal devices */ 537 + dc_plat->dev = dev; 538 + dc_plat->dc = priv->dc; 539 + dc_plat->pipe = priv->pipe; 540 + 541 + return 0; 417 542 } 418 543 419 544 static int tegra_lcd_of_to_plat(struct udevice *dev) 420 545 { 421 546 struct tegra_lcd_priv *priv = dev_get_priv(dev); 422 - const void *blob = gd->fdt_blob; 423 547 struct display_timing *timing; 424 - int node = dev_of_offset(dev); 425 - int panel_node; 426 - int rgb; 548 + ofnode rgb; 427 549 int ret; 428 550 429 551 priv->dc = (struct dc_ctlr *)dev_read_addr_ptr(dev); ··· 451 573 priv->rotation = dev_read_bool(dev, "nvidia,180-rotation"); 452 574 priv->pipe = dev_read_u32_default(dev, "nvidia,head", 0); 453 575 454 - rgb = fdt_subnode_offset(blob, node, "rgb"); 455 - if (rgb < 0) { 456 - log_debug("%s: Cannot find rgb subnode for '%s' (ret=%d)\n", 457 - __func__, dev->name, rgb); 458 - return -EINVAL; 459 - } 460 - 461 576 /* 462 - * Sadly the panel phandle is in an rgb subnode so we cannot use 463 - * uclass_get_device_by_phandle(). 577 + * Usual logic of Tegra video routing should be next: 578 + * 1. Check rgb subnode for RGB/LVDS panels or bridges 579 + * 2. If none found, then iterate through bridges bound, 580 + * looking for DSIA or DSIB for DC0 and HDMI for DC1. 581 + * If none of above is valid, then configuration is not 582 + * valid. 464 583 */ 465 - panel_node = fdtdec_lookup_phandle(blob, rgb, "nvidia,panel"); 466 - if (panel_node < 0) { 467 - log_debug("%s: Cannot find panel information\n", __func__); 468 - return -EINVAL; 469 - } 470 584 471 - ret = uclass_get_device_by_of_offset(UCLASS_PANEL, panel_node, 472 - &priv->panel); 473 - if (ret) { 474 - log_debug("%s: Cannot find panel for '%s' (ret=%d)\n", __func__, 475 - dev->name, ret); 476 - return ret; 585 + rgb = dev_read_subnode(dev, "rgb"); 586 + if (ofnode_valid(rgb) && ofnode_is_enabled(rgb)) { 587 + /* RGB is available, use it */ 588 + ret = tegra_lcd_configure_rgb(dev, rgb); 589 + if (ret) 590 + return ret; 591 + } else { 592 + /* RGB is not available, check for internal devices */ 593 + ret = tegra_lcd_configure_internal(dev); 594 + if (ret) 595 + return ret; 477 596 } 478 597 479 - /* Fill the platform data for internal devices */ 480 - if (!strcmp(priv->panel->name, TEGRA_DSI_A) || 481 - !strcmp(priv->panel->name, TEGRA_DSI_B)) { 482 - struct tegra_dc_plat *dc_plat = dev_get_plat(priv->panel); 483 - 484 - dc_plat->dev = dev; 485 - dc_plat->dc = priv->dc; 486 - dc_plat->pipe = priv->pipe; 598 + if (priv->panel) { 599 + ret = panel_get_display_timing(priv->panel, &priv->timing); 600 + if (ret) { 601 + ret = ofnode_decode_display_timing(rgb, 0, &priv->timing); 602 + if (ret) { 603 + log_debug("%s: Cannot read display timing for '%s' (ret=%d)\n", 604 + __func__, dev->name, ret); 605 + return -EINVAL; 606 + } 607 + } 487 608 } 488 609 489 - ret = panel_get_display_timing(priv->panel, &priv->timing); 490 - if (ret) { 491 - ret = fdtdec_decode_display_timing(blob, rgb, 0, &priv->timing); 610 + if (priv->bridge) { 611 + ret = video_bridge_get_display_timing(priv->bridge, &priv->timing); 492 612 if (ret) { 493 613 log_debug("%s: Cannot read display timing for '%s' (ret=%d)\n", 494 614 __func__, dev->name, ret); ··· 508 628 static int tegra_lcd_bind(struct udevice *dev) 509 629 { 510 630 struct video_uc_plat *plat = dev_get_uclass_plat(dev); 511 - const void *blob = gd->fdt_blob; 512 - int node = dev_of_offset(dev); 513 - int rgb; 514 - 515 - rgb = fdt_subnode_offset(blob, node, "rgb"); 516 - if ((rgb < 0) || !fdtdec_get_is_enabled(blob, rgb)) 517 - return -ENODEV; 518 631 519 632 plat->size = LCD_MAX_WIDTH * LCD_MAX_HEIGHT * 520 633 (1 << LCD_MAX_LOG2_BPP) / 8; 521 634 522 - return 0; 635 + return dm_scan_fdt_dev(dev); 523 636 } 524 - 525 - static const struct video_ops tegra_lcd_ops = { 526 - }; 527 637 528 638 static const struct tegra_dc_soc_info tegra20_dc_soc_info = { 529 639 .has_timer = true, ··· 565 675 .name = "tegra_lcd", 566 676 .id = UCLASS_VIDEO, 567 677 .of_match = tegra_lcd_ids, 568 - .ops = &tegra_lcd_ops, 569 678 .bind = tegra_lcd_bind, 570 679 .probe = tegra_lcd_probe, 571 680 .of_to_plat = tegra_lcd_of_to_plat,
-3
drivers/video/tegra20/tegra-dc.h
··· 14 14 /* arch-tegra/dc exists only because T124 uses it */ 15 15 #include <asm/arch-tegra/dc.h> 16 16 17 - #define TEGRA_DSI_A "dsi@54300000" 18 - #define TEGRA_DSI_B "dsi@54400000" 19 - 20 17 struct tegra_dc_plat { 21 18 struct udevice *dev; /* Display controller device */ 22 19 struct dc_ctlr *dc; /* Display controller regmap */
+8 -4
drivers/video/tegra20/tegra-dsi.c
··· 11 11 #include <mipi_display.h> 12 12 #include <mipi_dsi.h> 13 13 #include <backlight.h> 14 + #include <video_bridge.h> 14 15 #include <panel.h> 15 16 #include <reset.h> 16 17 #include <linux/delay.h> ··· 249 250 250 251 value = DSI_HOST_CONTROL_CRC_RESET | DSI_HOST_CONTROL_TX_TRIG_HOST | 251 252 DSI_HOST_CONTROL_CS | DSI_HOST_CONTROL_ECC; 253 + 254 + if ((msg->flags & MIPI_DSI_MSG_USE_LPM) == 0) 255 + value |= DSI_HOST_CONTROL_HS; 252 256 253 257 /* 254 258 * The host FIFO has a maximum of 64 words, so larger transmissions ··· 991 995 struct tegra_dsi_priv *mpriv = dev_get_priv(dev); 992 996 struct udevice *gangster; 993 997 994 - uclass_get_device_by_phandle(UCLASS_PANEL, dev, 998 + uclass_get_device_by_phandle(UCLASS_VIDEO_BRIDGE, dev, 995 999 "nvidia,ganged-mode", &gangster); 996 1000 if (gangster) { 997 1001 /* Ganged mode is set */ ··· 1118 1122 return 0; 1119 1123 } 1120 1124 1121 - static const struct panel_ops tegra_dsi_bridge_ops = { 1122 - .enable_backlight = tegra_dsi_encoder_enable, 1125 + static const struct video_bridge_ops tegra_dsi_bridge_ops = { 1126 + .attach = tegra_dsi_encoder_enable, 1123 1127 .set_backlight = tegra_dsi_bridge_set_panel, 1124 1128 .get_display_timing = tegra_dsi_panel_timings, 1125 1129 }; ··· 1133 1137 1134 1138 U_BOOT_DRIVER(tegra_dsi) = { 1135 1139 .name = "tegra_dsi", 1136 - .id = UCLASS_PANEL, 1140 + .id = UCLASS_VIDEO_BRIDGE, 1137 1141 .of_match = tegra_dsi_bridge_ids, 1138 1142 .ops = &tegra_dsi_bridge_ops, 1139 1143 .bind = dm_scan_fdt_dev,
+623
drivers/video/tegra20/tegra-hdmi.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + /* 3 + * Copyright (C) 2013 NVIDIA Corporation 4 + * Copyright (c) 2023 Svyatoslav Ryhel <clamor95@gmail.com> 5 + */ 6 + 7 + #include <clk.h> 8 + #include <dm.h> 9 + #include <edid.h> 10 + #include <i2c.h> 11 + #include <log.h> 12 + #include <misc.h> 13 + #include <panel.h> 14 + #include <reset.h> 15 + #include <linux/delay.h> 16 + #include <linux/err.h> 17 + #include <linux/time.h> 18 + #include <power/regulator.h> 19 + #include <video_bridge.h> 20 + 21 + #include <asm/gpio.h> 22 + #include <asm/io.h> 23 + #include <asm/arch/clock.h> 24 + 25 + #include "tegra-dc.h" 26 + #include "tegra-hdmi.h" 27 + 28 + #define DDCCI_ENTRY_ADDR 0x37 29 + #define DDCCI_SOURSE_ADDR 0x51 30 + #define DDCCI_COMMAND_WRITE 0x03 31 + #define DDCCI_CTRL_BRIGHTNESS 0x10 32 + 33 + #define HDMI_EDID_I2C_ADDR 0x50 34 + #define HDMI_REKEY_DEFAULT 56 35 + 36 + static const char * const hdmi_supplies[] = { 37 + "hdmi-supply", "pll-supply", "vdd-supply" 38 + }; 39 + 40 + struct tmds_config { 41 + unsigned int pclk; 42 + u32 pll0; 43 + u32 pll1; 44 + u32 pe_current; 45 + u32 drive_current; 46 + u32 peak_current; 47 + }; 48 + 49 + struct tegra_hdmi_config { 50 + const struct tmds_config *tmds; 51 + unsigned int num_tmds; 52 + unsigned int max_pclk; 53 + 54 + /* to be filled */ 55 + }; 56 + 57 + struct tegra_hdmi_priv { 58 + struct hdmi_ctlr *hdmi_regmap; 59 + 60 + struct udevice *supplies[ARRAY_SIZE(hdmi_supplies)]; 61 + struct udevice *hdmi_ddc; 62 + 63 + struct gpio_desc hpd; /* hotplug detection gpio */ 64 + struct display_timing timing; 65 + 66 + struct clk *clk; 67 + struct clk *clk_parent; 68 + 69 + int panel_bits_per_colourp; 70 + const struct tegra_hdmi_config *config; 71 + }; 72 + 73 + /* 1280x720p 60hz: EIA/CEA-861-B Format 4 */ 74 + static struct display_timing default_720p_timing = { 75 + .pixelclock.typ = 74250000, 76 + .hactive.typ = 1280, 77 + .hfront_porch.typ = 110, 78 + .hback_porch.typ = 220, 79 + .hsync_len.typ = 40, 80 + .vactive.typ = 720, 81 + .vfront_porch.typ = 5, 82 + .vback_porch.typ = 20, 83 + .vsync_len.typ = 5, 84 + .flags = DISPLAY_FLAGS_HSYNC_HIGH | 85 + DISPLAY_FLAGS_VSYNC_HIGH, 86 + }; 87 + 88 + static const struct tmds_config tegra20_tmds_config[] = { 89 + { /* slow pixel clock modes */ 90 + .pclk = 27000000, 91 + .pll0 = SOR_PLL_BG_V17_S(3) | SOR_PLL_ICHPMP(1) | 92 + SOR_PLL_RESISTORSEL | SOR_PLL_VCOCAP(0) | 93 + SOR_PLL_TX_REG_LOAD(3), 94 + .pll1 = SOR_PLL_TMDS_TERM_ENABLE, 95 + .pe_current = PE_CURRENT0(PE_CURRENT_0_0_mA) | 96 + PE_CURRENT1(PE_CURRENT_0_0_mA) | 97 + PE_CURRENT2(PE_CURRENT_0_0_mA) | 98 + PE_CURRENT3(PE_CURRENT_0_0_mA), 99 + .drive_current = DRIVE_CURRENT_LANE0(DRIVE_CURRENT_7_125_mA) | 100 + DRIVE_CURRENT_LANE1(DRIVE_CURRENT_7_125_mA) | 101 + DRIVE_CURRENT_LANE2(DRIVE_CURRENT_7_125_mA) | 102 + DRIVE_CURRENT_LANE3(DRIVE_CURRENT_7_125_mA), 103 + }, 104 + { /* high pixel clock modes */ 105 + .pclk = UINT_MAX, 106 + .pll0 = SOR_PLL_BG_V17_S(3) | SOR_PLL_ICHPMP(1) | 107 + SOR_PLL_RESISTORSEL | SOR_PLL_VCOCAP(1) | 108 + SOR_PLL_TX_REG_LOAD(3), 109 + .pll1 = SOR_PLL_TMDS_TERM_ENABLE | SOR_PLL_PE_EN, 110 + .pe_current = PE_CURRENT0(PE_CURRENT_6_0_mA) | 111 + PE_CURRENT1(PE_CURRENT_6_0_mA) | 112 + PE_CURRENT2(PE_CURRENT_6_0_mA) | 113 + PE_CURRENT3(PE_CURRENT_6_0_mA), 114 + .drive_current = DRIVE_CURRENT_LANE0(DRIVE_CURRENT_7_125_mA) | 115 + DRIVE_CURRENT_LANE1(DRIVE_CURRENT_7_125_mA) | 116 + DRIVE_CURRENT_LANE2(DRIVE_CURRENT_7_125_mA) | 117 + DRIVE_CURRENT_LANE3(DRIVE_CURRENT_7_125_mA), 118 + }, 119 + }; 120 + 121 + static const struct tmds_config tegra30_tmds_config[] = { 122 + { /* 480p modes */ 123 + .pclk = 27000000, 124 + .pll0 = SOR_PLL_BG_V17_S(3) | SOR_PLL_ICHPMP(1) | 125 + SOR_PLL_RESISTORSEL | SOR_PLL_VCOCAP(0) | 126 + SOR_PLL_TX_REG_LOAD(0), 127 + .pll1 = SOR_PLL_TMDS_TERM_ENABLE, 128 + .pe_current = PE_CURRENT0(PE_CURRENT_0_0_mA) | 129 + PE_CURRENT1(PE_CURRENT_0_0_mA) | 130 + PE_CURRENT2(PE_CURRENT_0_0_mA) | 131 + PE_CURRENT3(PE_CURRENT_0_0_mA), 132 + .drive_current = DRIVE_CURRENT_LANE0(DRIVE_CURRENT_5_250_mA) | 133 + DRIVE_CURRENT_LANE1(DRIVE_CURRENT_5_250_mA) | 134 + DRIVE_CURRENT_LANE2(DRIVE_CURRENT_5_250_mA) | 135 + DRIVE_CURRENT_LANE3(DRIVE_CURRENT_5_250_mA), 136 + }, { /* 720p modes */ 137 + .pclk = 74250000, 138 + .pll0 = SOR_PLL_BG_V17_S(3) | SOR_PLL_ICHPMP(1) | 139 + SOR_PLL_RESISTORSEL | SOR_PLL_VCOCAP(1) | 140 + SOR_PLL_TX_REG_LOAD(0), 141 + .pll1 = SOR_PLL_TMDS_TERM_ENABLE | SOR_PLL_PE_EN, 142 + .pe_current = PE_CURRENT0(PE_CURRENT_5_0_mA) | 143 + PE_CURRENT1(PE_CURRENT_5_0_mA) | 144 + PE_CURRENT2(PE_CURRENT_5_0_mA) | 145 + PE_CURRENT3(PE_CURRENT_5_0_mA), 146 + .drive_current = DRIVE_CURRENT_LANE0(DRIVE_CURRENT_5_250_mA) | 147 + DRIVE_CURRENT_LANE1(DRIVE_CURRENT_5_250_mA) | 148 + DRIVE_CURRENT_LANE2(DRIVE_CURRENT_5_250_mA) | 149 + DRIVE_CURRENT_LANE3(DRIVE_CURRENT_5_250_mA), 150 + }, { /* 1080p modes */ 151 + .pclk = UINT_MAX, 152 + .pll0 = SOR_PLL_BG_V17_S(3) | SOR_PLL_ICHPMP(1) | 153 + SOR_PLL_RESISTORSEL | SOR_PLL_VCOCAP(3) | 154 + SOR_PLL_TX_REG_LOAD(0), 155 + .pll1 = SOR_PLL_TMDS_TERM_ENABLE | SOR_PLL_PE_EN, 156 + .pe_current = PE_CURRENT0(PE_CURRENT_5_0_mA) | 157 + PE_CURRENT1(PE_CURRENT_5_0_mA) | 158 + PE_CURRENT2(PE_CURRENT_5_0_mA) | 159 + PE_CURRENT3(PE_CURRENT_5_0_mA), 160 + .drive_current = DRIVE_CURRENT_LANE0(DRIVE_CURRENT_5_250_mA) | 161 + DRIVE_CURRENT_LANE1(DRIVE_CURRENT_5_250_mA) | 162 + DRIVE_CURRENT_LANE2(DRIVE_CURRENT_5_250_mA) | 163 + DRIVE_CURRENT_LANE3(DRIVE_CURRENT_5_250_mA), 164 + }, 165 + }; 166 + 167 + static void tegra_dc_enable_controller(struct udevice *dev) 168 + { 169 + struct tegra_dc_plat *dc_plat = dev_get_plat(dev); 170 + struct dc_ctlr *dc = dc_plat->dc; 171 + u32 value; 172 + 173 + value = readl(&dc->disp.disp_win_opt); 174 + value |= HDMI_ENABLE; 175 + writel(value, &dc->disp.disp_win_opt); 176 + 177 + writel(GENERAL_UPDATE, &dc->cmd.state_ctrl); 178 + writel(GENERAL_ACT_REQ, &dc->cmd.state_ctrl); 179 + } 180 + 181 + static void tegra_hdmi_setup_tmds(struct tegra_hdmi_priv *priv, 182 + const struct tmds_config *tmds) 183 + { 184 + struct hdmi_ctlr *hdmi = priv->hdmi_regmap; 185 + u32 value; 186 + 187 + writel(tmds->pll0, &hdmi->nv_pdisp_sor_pll0); 188 + writel(tmds->pll1, &hdmi->nv_pdisp_sor_pll1); 189 + writel(tmds->pe_current, &hdmi->nv_pdisp_pe_current); 190 + 191 + writel(tmds->drive_current, &hdmi->nv_pdisp_sor_lane_drive_current); 192 + 193 + value = readl(&hdmi->nv_pdisp_sor_lane_drive_current); 194 + value |= BIT(31); 195 + writel(value, &hdmi->nv_pdisp_sor_lane_drive_current); 196 + } 197 + 198 + static int tegra_hdmi_encoder_enable(struct udevice *dev) 199 + { 200 + struct tegra_dc_plat *dc_plat = dev_get_plat(dev); 201 + struct tegra_hdmi_priv *priv = dev_get_priv(dev); 202 + struct dc_ctlr *dc = dc_plat->dc; 203 + struct display_timing *dt = &priv->timing; 204 + struct hdmi_ctlr *hdmi = priv->hdmi_regmap; 205 + unsigned long rate, div82; 206 + unsigned int pulse_start, rekey; 207 + int retries = 1000; 208 + u32 value; 209 + int i; 210 + 211 + /* power up sequence */ 212 + value = readl(&hdmi->nv_pdisp_sor_pll0); 213 + value &= ~SOR_PLL_PDBG; 214 + writel(value, &hdmi->nv_pdisp_sor_pll0); 215 + 216 + udelay(20); 217 + 218 + value = readl(&hdmi->nv_pdisp_sor_pll0); 219 + value &= ~SOR_PLL_PWR; 220 + writel(value, &hdmi->nv_pdisp_sor_pll0); 221 + 222 + writel(VSYNC_H_POSITION(1), &dc->disp.disp_timing_opt); 223 + writel(DITHER_CONTROL_DISABLE | BASE_COLOR_SIZE_888, 224 + &dc->disp.disp_color_ctrl); 225 + 226 + /* video_preamble uses h_pulse2 */ 227 + pulse_start = 1 + dt->hsync_len.typ + dt->hback_porch.typ - 10; 228 + 229 + writel(H_PULSE2_ENABLE, &dc->disp.disp_signal_opt0); 230 + 231 + value = PULSE_MODE_NORMAL | PULSE_POLARITY_HIGH | 232 + PULSE_QUAL_VACTIVE | PULSE_LAST_END_A; 233 + writel(value, &dc->disp.h_pulse[H_PULSE2].h_pulse_ctrl); 234 + 235 + value = PULSE_START(pulse_start) | PULSE_END(pulse_start + 8); 236 + writel(value, &dc->disp.h_pulse[H_PULSE2].h_pulse_pos[H_PULSE0_POSITION_A]); 237 + 238 + value = VSYNC_WINDOW_END(0x210) | VSYNC_WINDOW_START(0x200) | 239 + VSYNC_WINDOW_ENABLE; 240 + writel(value, &hdmi->nv_pdisp_hdmi_vsync_window); 241 + 242 + if (dc_plat->pipe) 243 + value = HDMI_SRC_DISPLAYB; 244 + else 245 + value = HDMI_SRC_DISPLAYA; 246 + 247 + if (dt->hactive.typ == 720 && (dt->vactive.typ == 480 || 248 + dt->vactive.typ == 576)) 249 + writel(value | ARM_VIDEO_RANGE_FULL, 250 + &hdmi->nv_pdisp_input_control); 251 + else 252 + writel(value | ARM_VIDEO_RANGE_LIMITED, 253 + &hdmi->nv_pdisp_input_control); 254 + 255 + rate = clock_get_periph_rate(priv->clk->id, priv->clk_parent->id); 256 + div82 = rate / USEC_PER_SEC * 4; 257 + value = SOR_REFCLK_DIV_INT(div82 >> 2) | SOR_REFCLK_DIV_FRAC(div82); 258 + writel(value, &hdmi->nv_pdisp_sor_refclk); 259 + 260 + rekey = HDMI_REKEY_DEFAULT; 261 + value = HDMI_CTRL_REKEY(rekey); 262 + value |= HDMI_CTRL_MAX_AC_PACKET((dt->hsync_len.typ + dt->hback_porch.typ + 263 + dt->hfront_porch.typ - rekey - 18) / 32); 264 + writel(value, &hdmi->nv_pdisp_hdmi_ctrl); 265 + 266 + /* TMDS CONFIG */ 267 + for (i = 0; i < priv->config->num_tmds; i++) { 268 + if (dt->pixelclock.typ <= priv->config->tmds[i].pclk) { 269 + tegra_hdmi_setup_tmds(priv, &priv->config->tmds[i]); 270 + break; 271 + } 272 + } 273 + 274 + writel(SOR_SEQ_PU_PC(0) | SOR_SEQ_PU_PC_ALT(0) | SOR_SEQ_PD_PC(8) | 275 + SOR_SEQ_PD_PC_ALT(8), &hdmi->nv_pdisp_sor_seq_ctl); 276 + 277 + value = SOR_SEQ_INST_WAIT_TIME(1) | SOR_SEQ_INST_WAIT_UNITS_VSYNC | 278 + SOR_SEQ_INST_HALT | SOR_SEQ_INST_PIN_A_LOW | 279 + SOR_SEQ_INST_PIN_B_LOW | SOR_SEQ_INST_DRIVE_PWM_OUT_LO; 280 + 281 + writel(value, &hdmi->nv_pdisp_sor_seq_inst0); 282 + writel(value, &hdmi->nv_pdisp_sor_seq_inst8); 283 + 284 + value = readl(&hdmi->nv_pdisp_sor_cstm); 285 + 286 + value &= ~SOR_CSTM_ROTCLK(~0); 287 + value |= SOR_CSTM_ROTCLK(2); 288 + value |= SOR_CSTM_PLLDIV; 289 + value &= ~SOR_CSTM_LVDS_ENABLE; 290 + value &= ~SOR_CSTM_MODE_MASK; 291 + value |= SOR_CSTM_MODE_TMDS; 292 + 293 + writel(value, &hdmi->nv_pdisp_sor_cstm); 294 + 295 + /* start SOR */ 296 + writel(SOR_PWR_NORMAL_STATE_PU | SOR_PWR_NORMAL_START_NORMAL | 297 + SOR_PWR_SAFE_STATE_PD | SOR_PWR_SETTING_NEW_TRIGGER, 298 + &hdmi->nv_pdisp_sor_pwr); 299 + writel(SOR_PWR_NORMAL_STATE_PU | SOR_PWR_NORMAL_START_NORMAL | 300 + SOR_PWR_SAFE_STATE_PD | SOR_PWR_SETTING_NEW_DONE, 301 + &hdmi->nv_pdisp_sor_pwr); 302 + 303 + do { 304 + if (--retries < 0) 305 + return -ETIME; 306 + value = readl(&hdmi->nv_pdisp_sor_pwr); 307 + } while (value & SOR_PWR_SETTING_NEW_PENDING); 308 + 309 + value = SOR_STATE_ASY_CRCMODE_COMPLETE | 310 + SOR_STATE_ASY_OWNER_HEAD0 | 311 + SOR_STATE_ASY_SUBOWNER_BOTH | 312 + SOR_STATE_ASY_PROTOCOL_SINGLE_TMDS_A | 313 + SOR_STATE_ASY_DEPOL_POS; 314 + 315 + /* setup sync polarities */ 316 + if (dt->flags & DISPLAY_FLAGS_HSYNC_HIGH) 317 + value |= SOR_STATE_ASY_HSYNCPOL_POS; 318 + 319 + if (dt->flags & DISPLAY_FLAGS_HSYNC_LOW) 320 + value |= SOR_STATE_ASY_HSYNCPOL_NEG; 321 + 322 + if (dt->flags & DISPLAY_FLAGS_VSYNC_HIGH) 323 + value |= SOR_STATE_ASY_VSYNCPOL_POS; 324 + 325 + if (dt->flags & DISPLAY_FLAGS_VSYNC_LOW) 326 + value |= SOR_STATE_ASY_VSYNCPOL_NEG; 327 + 328 + writel(value, &hdmi->nv_pdisp_sor_state2); 329 + 330 + value = SOR_STATE_ASY_HEAD_OPMODE_AWAKE | SOR_STATE_ASY_ORMODE_NORMAL; 331 + writel(value, &hdmi->nv_pdisp_sor_state1); 332 + 333 + writel(0, &hdmi->nv_pdisp_sor_state0); 334 + writel(SOR_STATE_UPDATE, &hdmi->nv_pdisp_sor_state0); 335 + writel(value | SOR_STATE_ATTACHED, 336 + &hdmi->nv_pdisp_sor_state1); 337 + writel(0, &hdmi->nv_pdisp_sor_state0); 338 + 339 + tegra_dc_enable_controller(dev); 340 + 341 + return 0; 342 + } 343 + 344 + /* DDC/CI backlight control */ 345 + static int tegra_hdmi_set_connector(struct udevice *dev, int percent) 346 + { 347 + struct tegra_hdmi_priv *priv = dev_get_priv(dev); 348 + struct udevice *ddc_entry; 349 + struct i2c_msg msg[1]; 350 + u8 checksum = DDCCI_ENTRY_ADDR << 1; 351 + int i, ret; 352 + 353 + ret = dm_i2c_probe(priv->hdmi_ddc, DDCCI_ENTRY_ADDR, 0, &ddc_entry); 354 + if (ret) { 355 + log_debug("%s: cannot probe DDC/CI entry: error %d\n", 356 + __func__, ret); 357 + return 0; 358 + } 359 + 360 + /* 361 + * payload[1] is length: hithest bit OR last 4 bits indicate 362 + * the number of following bytes (excluding checksum) 363 + */ 364 + u8 payload[7] = { DDCCI_SOURSE_ADDR, BIT(7) | (sizeof(payload) - 3), 365 + DDCCI_COMMAND_WRITE, DDCCI_CTRL_BRIGHTNESS, 366 + (u8)(percent & 0xff), (u8)(percent & 0xff), 0 }; 367 + 368 + /* DDC/CI checksum is a simple XOR of all preceding bytes */ 369 + for (i = 0; i < (sizeof(payload) - 1); i++) 370 + checksum ^= payload[i]; 371 + 372 + payload[6] = checksum; 373 + 374 + msg->addr = DDCCI_ENTRY_ADDR; 375 + msg->flags = 0; 376 + msg->len = sizeof(payload); 377 + msg->buf = payload; 378 + 379 + dm_i2c_xfer(ddc_entry, msg, 1); 380 + 381 + return 0; 382 + } 383 + 384 + static int tegra_hdmi_timings(struct udevice *dev, 385 + struct display_timing *timing) 386 + { 387 + struct tegra_hdmi_priv *priv = dev_get_priv(dev); 388 + 389 + memcpy(timing, &priv->timing, sizeof(*timing)); 390 + 391 + return 0; 392 + } 393 + 394 + static void tegra_hdmi_init_clocks(struct udevice *dev) 395 + { 396 + struct tegra_hdmi_priv *priv = dev_get_priv(dev); 397 + u32 n = priv->timing.pixelclock.typ * 2 / USEC_PER_SEC; 398 + 399 + switch (clock_get_osc_freq()) { 400 + case CLOCK_OSC_FREQ_12_0: /* OSC is 12Mhz */ 401 + case CLOCK_OSC_FREQ_48_0: /* OSC is 48Mhz */ 402 + clock_set_rate(priv->clk_parent->id, n, 12, 0, 8); 403 + break; 404 + 405 + case CLOCK_OSC_FREQ_26_0: /* OSC is 26Mhz */ 406 + clock_set_rate(priv->clk_parent->id, n, 26, 0, 8); 407 + break; 408 + 409 + case CLOCK_OSC_FREQ_13_0: /* OSC is 13Mhz */ 410 + case CLOCK_OSC_FREQ_16_8: /* OSC is 16.8Mhz */ 411 + clock_set_rate(priv->clk_parent->id, n, 13, 0, 8); 412 + break; 413 + 414 + case CLOCK_OSC_FREQ_19_2: 415 + case CLOCK_OSC_FREQ_38_4: 416 + default: 417 + /* 418 + * These are not supported. 419 + */ 420 + break; 421 + } 422 + 423 + clock_start_periph_pll(priv->clk->id, priv->clk_parent->id, 424 + priv->timing.pixelclock.typ); 425 + } 426 + 427 + static bool tegra_hdmi_mode_valid(void *hdmi_priv, const struct display_timing *timing) 428 + { 429 + struct tegra_hdmi_priv *priv = hdmi_priv; 430 + 431 + if (timing->pixelclock.typ > priv->config->max_pclk) 432 + return false; 433 + 434 + return true; 435 + } 436 + 437 + static int tegra_hdmi_decode_edid(struct udevice *dev) 438 + { 439 + struct tegra_hdmi_priv *priv = dev_get_priv(dev); 440 + struct udevice *hdmi_edid; 441 + uchar edid_buf[EDID_SIZE] = { 0 }; 442 + int i, ret; 443 + 444 + /* Poll for 1 sec in case EDID is not ready right after hpd */ 445 + for (i = 0; i < 10; i++) { 446 + ret = dm_i2c_probe(priv->hdmi_ddc, HDMI_EDID_I2C_ADDR, 0, 447 + &hdmi_edid); 448 + if (!ret) 449 + break; 450 + 451 + mdelay(100); 452 + } 453 + if (ret) { 454 + log_debug("%s: cannot probe EDID: error %d\n", 455 + __func__, ret); 456 + return ret; 457 + } 458 + 459 + ret = dm_i2c_read(hdmi_edid, 0, edid_buf, sizeof(edid_buf)); 460 + if (ret) { 461 + log_debug("%s: cannot dump EDID buffer: error %d\n", 462 + __func__, ret); 463 + return ret; 464 + } 465 + 466 + ret = edid_get_timing_validate(edid_buf, sizeof(edid_buf), &priv->timing, 467 + &priv->panel_bits_per_colourp, 468 + tegra_hdmi_mode_valid, priv); 469 + if (ret) { 470 + log_debug("%s: cannot decode EDID info: error %d\n", 471 + __func__, ret); 472 + return ret; 473 + } 474 + 475 + return 0; 476 + } 477 + 478 + static int tegra_hdmi_wait_hpd(struct tegra_hdmi_priv *priv) 479 + { 480 + int i; 481 + 482 + /* Poll 1 second for HPD signal */ 483 + for (i = 0; i < 10; i++) { 484 + if (dm_gpio_get_value(&priv->hpd)) 485 + return 0; 486 + 487 + mdelay(100); 488 + } 489 + 490 + return -ETIMEDOUT; 491 + } 492 + 493 + static int tegra_hdmi_probe(struct udevice *dev) 494 + { 495 + struct tegra_hdmi_priv *priv = dev_get_priv(dev); 496 + struct reset_ctl reset_ctl; 497 + int i, ret; 498 + 499 + priv->hdmi_regmap = (struct hdmi_ctlr *)dev_read_addr_ptr(dev); 500 + if (!priv->hdmi_regmap) { 501 + log_debug("%s: no display controller address\n", __func__); 502 + return -EINVAL; 503 + } 504 + 505 + priv->config = (struct tegra_hdmi_config *)dev_get_driver_data(dev); 506 + 507 + priv->clk = devm_clk_get(dev, NULL); 508 + if (IS_ERR(priv->clk)) { 509 + log_debug("%s: Could not get HDMI clock: %ld\n", 510 + __func__, PTR_ERR(priv->clk)); 511 + return PTR_ERR(priv->clk); 512 + } 513 + 514 + priv->clk_parent = devm_clk_get(dev, "parent"); 515 + if (IS_ERR(priv->clk_parent)) { 516 + log_debug("%s: Could not get HDMI clock parent: %ld\n", 517 + __func__, PTR_ERR(priv->clk_parent)); 518 + return PTR_ERR(priv->clk_parent); 519 + } 520 + 521 + for (i = 0; i < ARRAY_SIZE(hdmi_supplies); i++) { 522 + ret = device_get_supply_regulator(dev, hdmi_supplies[i], 523 + &priv->supplies[i]); 524 + if (ret) { 525 + log_debug("%s: cannot get %s %d\n", __func__, 526 + hdmi_supplies[i], ret); 527 + if (ret != -ENOENT) 528 + return log_ret(ret); 529 + } 530 + 531 + ret = regulator_set_enable_if_allowed(priv->supplies[i], true); 532 + if (ret && ret != -ENOSYS) { 533 + log_debug("%s: cannot enable %s: error %d\n", 534 + __func__, hdmi_supplies[i], ret); 535 + return ret; 536 + } 537 + } 538 + 539 + ret = reset_get_by_name(dev, "hdmi", &reset_ctl); 540 + if (ret) { 541 + log_debug("%s: reset_get_by_name() failed: %d\n", 542 + __func__, ret); 543 + return ret; 544 + } 545 + 546 + ret = uclass_get_device_by_phandle(UCLASS_I2C, dev, 547 + "nvidia,ddc-i2c-bus", 548 + &priv->hdmi_ddc); 549 + if (ret) { 550 + log_debug("%s: cannot get hdmi ddc i2c bus: error %d\n", 551 + __func__, ret); 552 + return ret; 553 + } 554 + 555 + ret = gpio_request_by_name(dev, "nvidia,hpd-gpio", 0, 556 + &priv->hpd, GPIOD_IS_IN); 557 + if (ret) { 558 + log_debug("%s: Could not decode hpd-gpios (%d)\n", 559 + __func__, ret); 560 + return ret; 561 + } 562 + 563 + /* wait for connector */ 564 + ret = tegra_hdmi_wait_hpd(priv); 565 + if (ret) { 566 + /* HPD failed, use default timings */ 567 + memcpy(&priv->timing, &default_720p_timing, 568 + sizeof(default_720p_timing)); 569 + } else { 570 + ret = tegra_hdmi_decode_edid(dev); 571 + if (ret) 572 + memcpy(&priv->timing, &default_720p_timing, 573 + sizeof(default_720p_timing)); 574 + } 575 + 576 + reset_assert(&reset_ctl); 577 + tegra_hdmi_init_clocks(dev); 578 + 579 + mdelay(2); 580 + reset_deassert(&reset_ctl); 581 + 582 + return 0; 583 + } 584 + 585 + static const struct tegra_hdmi_config tegra20_hdmi_config = { 586 + .tmds = tegra20_tmds_config, 587 + .num_tmds = ARRAY_SIZE(tegra20_tmds_config), 588 + .max_pclk = 148500000, /* 1080p */ 589 + }; 590 + 591 + static const struct tegra_hdmi_config tegra30_hdmi_config = { 592 + .tmds = tegra30_tmds_config, 593 + .num_tmds = ARRAY_SIZE(tegra30_tmds_config), 594 + .max_pclk = 148500000, /* 1080p */ 595 + }; 596 + 597 + static const struct video_bridge_ops tegra_hdmi_ops = { 598 + .attach = tegra_hdmi_encoder_enable, 599 + .set_backlight = tegra_hdmi_set_connector, 600 + .get_display_timing = tegra_hdmi_timings, 601 + }; 602 + 603 + static const struct udevice_id tegra_hdmi_ids[] = { 604 + { 605 + .compatible = "nvidia,tegra20-hdmi", 606 + .data = (ulong)&tegra20_hdmi_config 607 + }, { 608 + .compatible = "nvidia,tegra30-hdmi", 609 + .data = (ulong)&tegra30_hdmi_config 610 + }, { 611 + /* sentinel */ 612 + } 613 + }; 614 + 615 + U_BOOT_DRIVER(tegra_hdmi) = { 616 + .name = "tegra_hdmi", 617 + .id = UCLASS_VIDEO_BRIDGE, 618 + .of_match = tegra_hdmi_ids, 619 + .ops = &tegra_hdmi_ops, 620 + .probe = tegra_hdmi_probe, 621 + .plat_auto = sizeof(struct tegra_dc_plat), 622 + .priv_auto = sizeof(struct tegra_hdmi_priv), 623 + };
+648
drivers/video/tegra20/tegra-hdmi.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0+ */ 2 + /* 3 + * (C) Copyright 2010 4 + * NVIDIA Corporation <www.nvidia.com> 5 + */ 6 + 7 + #ifndef _TEGRA_HDMI_H 8 + #define _TEGRA_HDMI_H 9 + 10 + #ifndef __ASSEMBLY__ 11 + #include <linux/bitops.h> 12 + #endif 13 + 14 + /* Register definitions for the Tegra high-definition multimedia interface */ 15 + 16 + /* High-Definition Multimedia Interface (HDMI_) regs */ 17 + struct hdmi_ctlr { 18 + /* Address 0x000 ~ 0x0d2 */ 19 + uint ctxsw; /* _CTXSW */ /* 0x00 */ 20 + 21 + uint nv_pdisp_sor_state0; /* _NV_PDISP_SOR_STATE0 */ 22 + uint nv_pdisp_sor_state1; /* _NV_PDISP_SOR_STATE1 */ 23 + uint nv_pdisp_sor_state2; /* _NV_PDISP_SOR_STATE2 */ 24 + 25 + uint nv_pdisp_rg_hdcp_an_msb; /* _NV_PDISP_RG_HDCP_AN_MSB */ 26 + uint nv_pdisp_rg_hdcp_an_lsb; /* _NV_PDISP_RG_HDCP_AN_LSB */ 27 + uint nv_pdisp_rg_hdcp_cn_msb; /* _NV_PDISP_RG_HDCP_CN_MSB */ 28 + uint nv_pdisp_rg_hdcp_cn_lsb; /* _NV_PDISP_RG_HDCP_CN_LSB */ 29 + uint nv_pdisp_rg_hdcp_aksv_msb; /* _NV_PDISP_RG_HDCP_AKSV_MSB */ 30 + uint nv_pdisp_rg_hdcp_aksv_lsb; /* _NV_PDISP_RG_HDCP_AKSV_LSB */ 31 + uint nv_pdisp_rg_hdcp_bksv_msb; /* _NV_PDISP_RG_HDCP_BKSV_MSB */ 32 + uint nv_pdisp_rg_hdcp_bksv_lsb; /* _NV_PDISP_RG_HDCP_BKSV_LSB */ 33 + uint nv_pdisp_rg_hdcp_cksv_msb; /* _NV_PDISP_RG_HDCP_CKSV_MSB */ 34 + uint nv_pdisp_rg_hdcp_cksv_lsb; /* _NV_PDISP_RG_HDCP_CKSV_LSB */ 35 + uint nv_pdisp_rg_hdcp_dksv_msb; /* _NV_PDISP_RG_HDCP_DKSV_MSB */ 36 + uint nv_pdisp_rg_hdcp_dksv_lsb; /* _NV_PDISP_RG_HDCP_DKSV_LSB */ 37 + uint nv_pdisp_rg_hdcp_ctrl; /* _NV_PDISP_RG_HDCP_CTRL */ /* 0x10 */ 38 + uint nv_pdisp_rg_hdcp_cmode; /* _NV_PDISP_RG_HDCP_CMODE */ 39 + uint nv_pdisp_rg_hdcp_mprime_msb; /* _NV_PDISP_RG_HDCP_MPRIME_MSB */ 40 + uint nv_pdisp_rg_hdcp_mprime_lsb; /* _NV_PDISP_RG_HDCP_MPRIME_LSB */ 41 + uint nv_pdisp_rg_hdcp_sprime_msb; /* _NV_PDISP_RG_HDCP_SPRIME_MSB */ 42 + uint nv_pdisp_rg_hdcp_sprime_lsb2; /* _NV_PDISP_RG_HDCP_SPRIME_LSB2 */ 43 + uint nv_pdisp_rg_hdcp_sprime_lsb1; /* _NV_PDISP_RG_HDCP_SPRIME_LSB1 */ 44 + uint nv_pdisp_rg_hdcp_ri; /* _NV_PDISP_RG_HDCP_RI */ 45 + uint nv_pdisp_rg_hdcp_cs_msb; /* _NV_PDISP_RG_HDCP_CS_MSB */ 46 + uint nv_pdisp_rg_hdcp_cs_lsb; /* _NV_PDISP_RG_HDCP_CS_LSB */ 47 + 48 + uint nv_pdisp_hdmi_audio_emu0; /* _NV_PDISP_HDMI_AUDIO_EMU0 */ 49 + uint nv_pdisp_hdmi_audio_emu_rdata0; /* _NV_PDISP_HDMI_AUDIO_EMU_RDATA0 */ 50 + uint nv_pdisp_hdmi_audio_emu1; /* _NV_PDISP_HDMI_AUDIO_EMU1 */ 51 + uint nv_pdisp_hdmi_audio_emu2; /* _NV_PDISP_HDMI_AUDIO_EMU2 */ 52 + uint nv_pdisp_hdmi_audio_infoframe_ctrl; /* _NV_PDISP_HDMI_AUDIO_INFOFRAME_CTRL */ 53 + uint nv_pdisp_hdmi_audio_infoframe_status; /* _NV_PDISP_HDMI_AUDIO_INFOFRAME_STATUS */ 54 + uint nv_pdisp_hdmi_audio_infoframe_header; /* _NV_PDISP_HDMI_AUDIO_INFOFRAME_HEADER */ /* 0x20 */ 55 + uint nv_pdisp_hdmi_audio_infoframe_subpack0_low; /* _NV_PDISP_HDMI_AUDIO_INFOFRAME_SUBPACK0_LOW */ 56 + uint nv_pdisp_hdmi_audio_infoframe_subpack0_high; /* _NV_PDISP_HDMI_AUDIO_INFOFRAME_SUBPACK0_HIGH */ 57 + 58 + uint nv_pdisp_hdmi_avi_infoframe_ctrl; /* _NV_PDISP_HDMI_AVI_INFOFRAME_CTRL */ 59 + uint nv_pdisp_hdmi_avi_infoframe_status; /* _NV_PDISP_HDMI_AVI_INFOFRAME_STATUS */ 60 + uint nv_pdisp_hdmi_avi_infoframe_header; /* _NV_PDISP_HDMI_AVI_INFOFRAME_HEADER */ 61 + uint nv_pdisp_hdmi_avi_infoframe_subpack0_low; /* _NV_PDISP_HDMI_AVI_INFOFRAME_SUBPACK0_LOW */ 62 + uint nv_pdisp_hdmi_avi_infoframe_subpack0_high; /* _NV_PDISP_HDMI_AVI_INFOFRAME_SUBPACK0_HIGH */ 63 + uint nv_pdisp_hdmi_avi_infoframe_subpack1_low; /* _NV_PDISP_HDMI_AVI_INFOFRAME_SUBPACK1_LOW */ 64 + uint nv_pdisp_hdmi_avi_infoframe_subpack1_high; /* _NV_PDISP_HDMI_AVI_INFOFRAME_SUBPACK1_HIGH */ 65 + 66 + uint nv_pdisp_hdmi_generic_ctrl; /* _NV_PDISP_HDMI_GENERIC_CTRL */ 67 + uint nv_pdisp_hdmi_generic_status; /* _NV_PDISP_HDMI_GENERIC_STATUS */ 68 + uint nv_pdisp_hdmi_generic_header; /* _NV_PDISP_HDMI_GENERIC_HEADER */ 69 + uint nv_pdisp_hdmi_generic_subpack0_low; /* _NV_PDISP_HDMI_GENERIC_SUBPACK0_LOW */ 70 + uint nv_pdisp_hdmi_generic_subpack0_high; /* _NV_PDISP_HDMI_GENERIC_SUBPACK0_HIGH */ 71 + uint nv_pdisp_hdmi_generic_subpack1_low; /* _NV_PDISP_HDMI_GENERIC_SUBPACK1_LOW */ 72 + uint nv_pdisp_hdmi_generic_subpack1_high; /* _NV_PDISP_HDMI_GENERIC_SUBPACK1_HIGH */ 73 + uint nv_pdisp_hdmi_generic_subpack2_low; /* _NV_PDISP_HDMI_GENERIC_SUBPACK2_LOW */ 74 + uint nv_pdisp_hdmi_generic_subpack2_high; /* _NV_PDISP_HDMI_GENERIC_SUBPACK2_HIGH */ 75 + uint nv_pdisp_hdmi_generic_subpack3_low; /* _NV_PDISP_HDMI_GENERIC_SUBPACK3_LOW */ 76 + uint nv_pdisp_hdmi_generic_subpack3_high; /* _NV_PDISP_HDMI_GENERIC_SUBPACK3_HIGH */ 77 + 78 + uint nv_pdisp_hdmi_acr_ctrl; /* _NV_PDISP_HDMI_ACR_CTRL */ 79 + uint nv_pdisp_hdmi_acr_0320_subpack_low; /* _NV_PDISP_HDMI_ACR_0320_SUBPACK_LOW */ 80 + uint nv_pdisp_hdmi_acr_0320_subpack_high; /* _NV_PDISP_HDMI_ACR_0320_SUBPACK_HIGH */ 81 + uint nv_pdisp_hdmi_acr_0441_subpack_low; /* _NV_PDISP_HDMI_ACR_0441_SUBPACK_LOW */ 82 + uint nv_pdisp_hdmi_acr_0441_subpack_high; /* _NV_PDISP_HDMI_ACR_0441_SUBPACK_HIGH */ 83 + uint nv_pdisp_hdmi_acr_0882_subpack_low; /* _NV_PDISP_HDMI_ACR_0882_SUBPACK_LOW */ 84 + uint nv_pdisp_hdmi_acr_0882_subpack_high; /* _NV_PDISP_HDMI_ACR_0882_SUBPACK_HIGH */ 85 + uint nv_pdisp_hdmi_acr_1764_subpack_low; /* _NV_PDISP_HDMI_ACR_1764_SUBPACK_LOW */ 86 + uint nv_pdisp_hdmi_acr_1764_subpack_high; /* _NV_PDISP_HDMI_ACR_1764_SUBPACK_HIGH */ 87 + uint nv_pdisp_hdmi_acr_0480_subpack_low; /* _NV_PDISP_HDMI_ACR_0480_SUBPACK_LOW */ 88 + uint nv_pdisp_hdmi_acr_0480_subpack_high; /* _NV_PDISP_HDMI_ACR_0480_SUBPACK_HIGH */ 89 + uint nv_pdisp_hdmi_acr_0960_subpack_low; /* _NV_PDISP_HDMI_ACR_0960_SUBPACK_LOW */ 90 + uint nv_pdisp_hdmi_acr_0960_subpack_high; /* _NV_PDISP_HDMI_ACR_0960_SUBPACK_HIGH */ 91 + uint nv_pdisp_hdmi_acr_1920_subpack_low; /* _NV_PDISP_HDMI_ACR_1920_SUBPACK_LOW */ 92 + uint nv_pdisp_hdmi_acr_1920_subpack_high; /* _NV_PDISP_HDMI_ACR_1920_SUBPACK_HIGH */ 93 + 94 + uint nv_pdisp_hdmi_ctrl; /* _NV_PDISP_HDMI_CTRL */ 95 + uint nv_pdisp_hdmi_vsync_keepout; /* _NV_PDISP_HDMI_VSYNC_KEEPOUT */ 96 + uint nv_pdisp_hdmi_vsync_window; /* _NV_PDISP_HDMI_VSYNC_WINDOW */ 97 + uint nv_pdisp_hdmi_gcp_ctrl; /* _NV_PDISP_HDMI_GCP_CTRL */ 98 + uint nv_pdisp_hdmi_gcp_status; /* _NV_PDISP_HDMI_GCP_STATUS */ 99 + uint nv_pdisp_hdmi_gcp_subpack; /* _NV_PDISP_HDMI_GCP_SUBPACK */ 100 + uint nv_pdisp_hdmi_channel_status1; /* _NV_PDISP_HDMI_CHANNEL_STATUS1 */ 101 + uint nv_pdisp_hdmi_channel_status2; /* _NV_PDISP_HDMI_CHANNEL_STATUS2 */ 102 + uint nv_pdisp_hdmi_emu0; /* _NV_PDISP_HDMI_EMU0 */ 103 + uint nv_pdisp_hdmi_emu1; /* _NV_PDISP_HDMI_EMU1 */ 104 + uint nv_pdisp_hdmi_emu1_rdata; /* _NV_PDISP_HDMI_EMU1_RDATA */ 105 + uint nv_pdisp_hdmi_spare; /* _NV_PDISP_HDMI_SPARE */ 106 + uint nv_pdisp_hdmi_spdif_chn_status1; /* _NV_PDISP_HDMI_SPDIF_CHN_STATUS1 */ 107 + uint nv_pdisp_hdmi_spdif_chn_status2; /* _NV_PDISP_HDMI_SPDIF_CHN_STATUS2 */ 108 + 109 + uint nv_pdisp_hdcprif_rom_ctrl; /* _NV_PDISP_HDCPRIF_ROM_CTRL */ 110 + 111 + uint unused; 112 + 113 + uint nv_pdisp_sor_cap; /* _NV_PDISP_SOR_CAP */ 114 + uint nv_pdisp_sor_pwr; /* _NV_PDISP_SOR_PWR */ 115 + uint nv_pdisp_sor_test; /* _NV_PDISP_SOR_TEST */ 116 + uint nv_pdisp_sor_pll0; /* _NV_PDISP_SOR_PLL0 */ 117 + uint nv_pdisp_sor_pll1; /* _NV_PDISP_SOR_PLL1 */ 118 + uint nv_pdisp_sor_pll2; /* _NV_PDISP_SOR_PLL2 */ 119 + uint nv_pdisp_sor_cstm; /* _NV_PDISP_SOR_CSTM */ 120 + uint nv_pdisp_sor_lvds; /* _NV_PDISP_SOR_LVDS */ 121 + uint nv_pdisp_sor_crca; /* _NV_PDISP_SOR_CRCA */ 122 + uint nv_pdisp_sor_crcb; /* _NV_PDISP_SOR_CRCB */ 123 + uint nv_pdisp_sor_blank; /* _NV_PDISP_SOR_BLANK */ 124 + 125 + uint nv_pdisp_sor_seq_ctl; /* _NV_PDISP_SOR_SEQ_CTL */ 126 + uint nv_pdisp_sor_seq_inst0; /* _NV_PDISP_SOR_SEQ_INST0 */ 127 + uint nv_pdisp_sor_seq_inst1; /* _NV_PDISP_SOR_SEQ_INST1 */ 128 + uint nv_pdisp_sor_seq_inst2; /* _NV_PDISP_SOR_SEQ_INST2 */ 129 + uint nv_pdisp_sor_seq_inst3; /* _NV_PDISP_SOR_SEQ_INST3 */ 130 + uint nv_pdisp_sor_seq_inst4; /* _NV_PDISP_SOR_SEQ_INST4 */ 131 + uint nv_pdisp_sor_seq_inst5; /* _NV_PDISP_SOR_SEQ_INST5 */ 132 + uint nv_pdisp_sor_seq_inst6; /* _NV_PDISP_SOR_SEQ_INST6 */ 133 + uint nv_pdisp_sor_seq_inst7; /* _NV_PDISP_SOR_SEQ_INST7 */ 134 + uint nv_pdisp_sor_seq_inst8; /* _NV_PDISP_SOR_SEQ_INST8 */ 135 + uint nv_pdisp_sor_seq_inst9; /* _NV_PDISP_SOR_SEQ_INST9 */ 136 + uint nv_pdisp_sor_seq_insta; /* _NV_PDISP_SOR_SEQ_INSTA */ 137 + uint nv_pdisp_sor_seq_instb; /* _NV_PDISP_SOR_SEQ_INSTB */ 138 + uint nv_pdisp_sor_seq_instc; /* _NV_PDISP_SOR_SEQ_INSTC */ 139 + uint nv_pdisp_sor_seq_instd; /* _NV_PDISP_SOR_SEQ_INSTD */ 140 + uint nv_pdisp_sor_seq_inste; /* _NV_PDISP_SOR_SEQ_INSTE */ 141 + uint nv_pdisp_sor_seq_instf; /* _NV_PDISP_SOR_SEQ_INSTF */ 142 + 143 + uint unused1[2]; 144 + 145 + uint nv_pdisp_sor_vcrca0; /* _NV_PDISP_SOR_VCRCA0 */ 146 + uint nv_pdisp_sor_vcrca1; /* _NV_PDISP_SOR_VCRCA1 */ 147 + uint nv_pdisp_sor_ccrca0; /* _NV_PDISP_SOR_CCRCA0 */ 148 + uint nv_pdisp_sor_ccrca1; /* _NV_PDISP_SOR_CCRCA1 */ 149 + 150 + uint nv_pdisp_sor_edataa0; /* _NV_PDISP_SOR_EDATAA0 */ 151 + uint nv_pdisp_sor_edataa1; /* _NV_PDISP_SOR_EDATAA1 */ 152 + 153 + uint nv_pdisp_sor_counta0; /* _NV_PDISP_SOR_COUNTA0 */ 154 + uint nv_pdisp_sor_counta1; /* _NV_PDISP_SOR_COUNTA1 */ 155 + 156 + uint nv_pdisp_sor_debuga0; /* _NV_PDISP_SOR_DEBUGA0 */ 157 + uint nv_pdisp_sor_debuga1; /* _NV_PDISP_SOR_DEBUGA1 */ 158 + 159 + uint nv_pdisp_sor_trig; /* _NV_PDISP_SOR_TRIG */ 160 + uint nv_pdisp_sor_mscheck; /* _NV_PDISP_SOR_MSCHECK */ 161 + uint nv_pdisp_sor_lane_drive_current; /* _NV_PDISP_SOR_LANE_DRIVE_CURRENT */ 162 + 163 + uint nv_pdisp_audio_debug0; /* _NV_PDISP_AUDIO_DEBUG0 0x7f */ 164 + uint nv_pdisp_audio_debug1; /* _NV_PDISP_AUDIO_DEBUG1 0x80 */ 165 + uint nv_pdisp_audio_debug2; /* _NV_PDISP_AUDIO_DEBUG2 0x81 */ 166 + 167 + uint nv_pdisp_audio_fs1; /* _NV_PDISP_AUDIO_FS1 0x82 */ 168 + uint nv_pdisp_audio_fs2; /* _NV_PDISP_AUDIO_FS2 */ 169 + uint nv_pdisp_audio_fs3; /* _NV_PDISP_AUDIO_FS3 */ 170 + uint nv_pdisp_audio_fs4; /* _NV_PDISP_AUDIO_FS4 */ 171 + uint nv_pdisp_audio_fs5; /* _NV_PDISP_AUDIO_FS5 */ 172 + uint nv_pdisp_audio_fs6; /* _NV_PDISP_AUDIO_FS6 */ 173 + uint nv_pdisp_audio_fs7; /* _NV_PDISP_AUDIO_FS7 0x88 */ 174 + 175 + uint nv_pdisp_audio_pulse_width; /* _NV_PDISP_AUDIO_PULSE_WIDTH */ 176 + uint nv_pdisp_audio_threshold; /* _NV_PDISP_AUDIO_THRESHOLD */ 177 + uint nv_pdisp_audio_cntrl0; /* _NV_PDISP_AUDIO_CNTRL0 */ 178 + uint nv_pdisp_audio_n; /* _NV_PDISP_AUDIO_N */ 179 + uint nv_pdisp_audio_nval[7]; /* _NV_PDISP_AUDIO_NVAL */ 180 + 181 + uint nv_pdisp_hdcprif_rom_timing; /* _NV_PDISP_HDCPRIF_ROM_TIMING */ 182 + uint nv_pdisp_sor_refclk; /* _NV_PDISP_SOR_REFCLK */ 183 + uint nv_pdisp_crc_control; /* _NV_PDISP_CRC_CONTROL */ 184 + uint nv_pdisp_input_control; /* _NV_PDISP_INPUT_CONTROL */ 185 + uint nv_pdisp_scratch; /* _NV_PDISP_SCRATCH */ 186 + uint nv_pdisp_pe_current; /* _NV_PDISP_PE_CURRENT */ 187 + 188 + uint nv_pdisp_key_ctrl; /* _NV_PDISP_KEY_CTRL */ 189 + uint nv_pdisp_key_debug0; /* _NV_PDISP_KEY_DEBUG0 */ 190 + uint nv_pdisp_key_debug1; /* _NV_PDISP_KEY_DEBUG1 */ 191 + uint nv_pdisp_key_debug2; /* _NV_PDISP_KEY_DEBUG2 */ 192 + uint nv_pdisp_key_hdcp_key_0; /* _NV_PDISP_KEY_HDCP_KEY_0 */ 193 + uint nv_pdisp_key_hdcp_key_1; /* _NV_PDISP_KEY_HDCP_KEY_1 */ 194 + uint nv_pdisp_key_hdcp_key_2; /* _NV_PDISP_KEY_HDCP_KEY_2 */ 195 + uint nv_pdisp_key_hdcp_key_3; /* _NV_PDISP_KEY_HDCP_KEY_3 */ 196 + uint nv_pdisp_key_hdcp_key_trig; /* _NV_PDISP_KEY_HDCP_KEY_3 */ 197 + uint nv_pdisp_key_skey_index; /* _NV_PDISP_KEY_HDCP_KEY_3 */ /* 0xa3 */ 198 + 199 + uint unused2[8]; 200 + 201 + uint nv_pdisp_sor_audio_cntrl0; /* _NV_PDISP_SOR_AUDIO_CNTRL0 */ /* 0xac */ 202 + uint nv_pdisp_sor_audio_debug; /* _NV_PDISP_SOR_AUDIO_DEBUG */ 203 + uint nv_pdisp_sor_audio_spare0; /* _NV_PDISP_SOR_AUDIO_SPARE0 */ 204 + uint nv_pdisp_sor_audio_nval[7]; /* _NV_PDISP_SOR_AUDIO_NVAL 0xaf ~ 0xb5 */ 205 + uint nv_pdisp_sor_audio_hda_scratch[4]; /* _NV_PDISP_SOR_AUDIO_HDA_SCRATCH 0xb6 ~ 0xb9 */ 206 + uint nv_pdisp_sor_audio_hda_codec_scratch[2]; /* _NV_PDISP_SOR_AUDIO_HDA_CODEC_SCRATCH 0xba ~ 0xbb */ 207 + 208 + uint nv_pdisp_sor_audio_hda_eld_bufwr; /* _NV_PDISP_SOR_AUDIO_HDA_ELD_BUFWR */ 209 + uint nv_pdisp_sor_audio_hda_presense; /* _NV_PDISP_SOR_AUDIO_HDA_PRESENSE */ 210 + uint nv_pdisp_sor_audio_hda_cp; /* _NV_PDISP_SOR_AUDIO_HDA_CP */ 211 + uint nv_pdisp_sor_audio_aval[8]; /* _NV_PDISP_SOR_AUDIO_AVAL */ 212 + uint nv_pdisp_sor_audio_gen_ctrl; /* _NV_PDISP_SOR_AUDIO_GEN_CTRL */ 213 + 214 + uint unused3[4]; 215 + 216 + uint nv_pdisp_int_status; /* _NV_PDISP_INT_STATUS */ 217 + uint nv_pdisp_int_mask; /* _NV_PDISP_INT_MASK */ 218 + uint nv_pdisp_int_enable; /* _NV_PDISP_INT_ENABLE */ 219 + 220 + uint unused4[2]; 221 + 222 + uint nv_pdisp_sor_io_peak_current; /* _NV_PDISP_SOR_IO_PEAK_CURRENT */ 223 + uint nv_pdisp_sor_pad_ctls0; /* _NV_PDISP_SOR_PAD_CTLS0 */ 224 + }; 225 + 226 + /* HDMI_NV_PDISP_SOR_STATE0 0x01 */ 227 + #define SOR_STATE_UPDATE BIT(0) 228 + 229 + /* HDMI_NV_PDISP_SOR_STATE1 0x02 */ 230 + #define SOR_STATE_ASY_HEAD_OPMODE_AWAKE BIT(1) 231 + #define SOR_STATE_ASY_ORMODE_NORMAL BIT(2) 232 + #define SOR_STATE_ATTACHED BIT(3) 233 + 234 + /* HDMI_NV_PDISP_SOR_STATE2 0x03 */ 235 + #define SOR_STATE_ASY_OWNER_NONE (0 << 0) 236 + #define SOR_STATE_ASY_OWNER_HEAD0 (1 << 0) 237 + #define SOR_STATE_ASY_SUBOWNER_NONE (0 << 4) 238 + #define SOR_STATE_ASY_SUBOWNER_SUBHEAD0 (1 << 4) 239 + #define SOR_STATE_ASY_SUBOWNER_SUBHEAD1 (2 << 4) 240 + #define SOR_STATE_ASY_SUBOWNER_BOTH (3 << 4) 241 + #define SOR_STATE_ASY_CRCMODE_ACTIVE (0 << 6) 242 + #define SOR_STATE_ASY_CRCMODE_COMPLETE (1 << 6) 243 + #define SOR_STATE_ASY_CRCMODE_NON_ACTIVE (2 << 6) 244 + #define SOR_STATE_ASY_PROTOCOL_SINGLE_TMDS_A (1 << 8) 245 + #define SOR_STATE_ASY_PROTOCOL_CUSTOM (15 << 8) 246 + #define SOR_STATE_ASY_HSYNCPOL_POS (0 << 12) 247 + #define SOR_STATE_ASY_HSYNCPOL_NEG (1 << 12) 248 + #define SOR_STATE_ASY_VSYNCPOL_POS (0 << 13) 249 + #define SOR_STATE_ASY_VSYNCPOL_NEG (1 << 13) 250 + #define SOR_STATE_ASY_DEPOL_POS (0 << 14) 251 + #define SOR_STATE_ASY_DEPOL_NEG (1 << 14) 252 + 253 + #define INFOFRAME_CTRL_ENABLE BIT(0) 254 + #define INFOFRAME_HEADER_TYPE(x) (((x) & 0xff) << 0) 255 + #define INFOFRAME_HEADER_VERSION(x) (((x) & 0xff) << 8) 256 + #define INFOFRAME_HEADER_LEN(x) (((x) & 0x0f) << 16) 257 + 258 + /* HDMI_NV_PDISP_HDMI_GENERIC_CTRL 0x2a */ 259 + #define GENERIC_CTRL_ENABLE BIT(0) 260 + #define GENERIC_CTRL_OTHER BIT(4) 261 + #define GENERIC_CTRL_SINGLE BIT(8) 262 + #define GENERIC_CTRL_HBLANK BIT(12) 263 + #define GENERIC_CTRL_AUDIO BIT(16) 264 + 265 + /* HDMI_NV_PDISP_HDMI_ACR_* */ 266 + #define ACR_SUBPACK_CTS(x) (((x) & 0xffffff) << 8) 267 + #define ACR_SUBPACK_N(x) (((x) & 0xffffff) << 0) 268 + #define ACR_ENABLE BIT(31) 269 + 270 + /* HDMI_NV_PDISP_HDMI_CTRL 0x44 */ 271 + #define HDMI_CTRL_REKEY(x) (((x) & 0x7f) << 0) 272 + #define HDMI_CTRL_MAX_AC_PACKET(x) (((x) & 0x1f) << 16) 273 + #define HDMI_CTRL_ENABLE BIT(30) 274 + 275 + /* HDMI_NV_PDISP_HDMI_VSYNC_* */ 276 + #define VSYNC_WINDOW_END(x) (((x) & 0x3ff) << 0) 277 + #define VSYNC_WINDOW_START(x) (((x) & 0x3ff) << 16) 278 + #define VSYNC_WINDOW_ENABLE BIT(31) 279 + 280 + /* HDMI_NV_PDISP_HDMI_SPARE 0x4f */ 281 + #define SPARE_HW_CTS BIT(0) 282 + #define SPARE_FORCE_SW_CTS BIT(1) 283 + #define SPARE_CTS_RESET_VAL(x) (((x) & 0x7) << 16) 284 + 285 + /* HDMI_NV_PDISP_SOR_PWR 0x55 */ 286 + #define SOR_PWR_NORMAL_STATE_PD (0 << 0) 287 + #define SOR_PWR_NORMAL_STATE_PU (1 << 0) 288 + #define SOR_PWR_NORMAL_START_NORMAL (0 << 1) 289 + #define SOR_PWR_NORMAL_START_ALT (1 << 1) 290 + #define SOR_PWR_SAFE_STATE_PD (0 << 16) 291 + #define SOR_PWR_SAFE_STATE_PU (1 << 16) 292 + #define SOR_PWR_SETTING_NEW_DONE (0 << 31) 293 + #define SOR_PWR_SETTING_NEW_PENDING (1 << 31) 294 + #define SOR_PWR_SETTING_NEW_TRIGGER (1 << 31) 295 + 296 + /* HDMI_NV_PDISP_SOR_PLL0 0x57 */ 297 + #define SOR_PLL_PWR BIT(0) 298 + #define SOR_PLL_PDBG BIT(1) 299 + #define SOR_PLL_VCAPD BIT(2) 300 + #define SOR_PLL_PDPORT BIT(3) 301 + #define SOR_PLL_RESISTORSEL BIT(4) 302 + #define SOR_PLL_PULLDOWN BIT(5) 303 + #define SOR_PLL_VCOCAP(x) (((x) & 0xf) << 8) 304 + #define SOR_PLL_BG_V17_S(x) (((x) & 0xf) << 12) 305 + #define SOR_PLL_FILTER(x) (((x) & 0xf) << 16) 306 + #define SOR_PLL_ICHPMP(x) (((x) & 0xf) << 24) 307 + #define SOR_PLL_TX_REG_LOAD(x) (((x) & 0xf) << 28) 308 + 309 + /* HDMI_NV_PDISP_SOR_PLL1 0x58 */ 310 + #define SOR_PLL_TMDS_TERM_ENABLE BIT(8) 311 + #define SOR_PLL_TMDS_TERMADJ(x) (((x) & 0xf) << 9) 312 + #define SOR_PLL_LOADADJ(x) (((x) & 0xf) << 20) 313 + #define SOR_PLL_PE_EN BIT(28) 314 + #define SOR_PLL_HALF_FULL_PE BIT(29) 315 + #define SOR_PLL_S_D_PIN_PE BIT(30) 316 + 317 + /* HDMI_NV_PDISP_SOR_CSTM 0x5a */ 318 + #define SOR_CSTM_ROTCLK(x) (((x) & 0xf) << 24) 319 + #define SOR_CSTM_PLLDIV BIT(21) 320 + #define SOR_CSTM_LVDS_ENABLE BIT(16) 321 + #define SOR_CSTM_MODE_LVDS (0 << 12) 322 + #define SOR_CSTM_MODE_TMDS (1 << 12) 323 + #define SOR_CSTM_MODE_MASK (3 << 12) 324 + 325 + /* HDMI_NV_PDISP_SOR_SEQ_CTL 0x5f */ 326 + #define SOR_SEQ_PU_PC(x) (((x) & 0xf) << 0) 327 + #define SOR_SEQ_PU_PC_ALT(x) (((x) & 0xf) << 4) 328 + #define SOR_SEQ_PD_PC(x) (((x) & 0xf) << 8) 329 + #define SOR_SEQ_PD_PC_ALT(x) (((x) & 0xf) << 12) 330 + #define SOR_SEQ_PC(x) (((x) & 0xf) << 16) 331 + #define SOR_SEQ_STATUS BIT(28) 332 + #define SOR_SEQ_SWITCH BIT(30) 333 + 334 + /* HDMI_NV_PDISP_SOR_SEQ_INST(x) (0x60 + (x)) */ 335 + #define SOR_SEQ_INST_WAIT_TIME(x) (((x) & 0x3ff) << 0) 336 + #define SOR_SEQ_INST_WAIT_UNITS_VSYNC (2 << 12) 337 + #define SOR_SEQ_INST_HALT (1 << 15) 338 + #define SOR_SEQ_INST_PIN_A_LOW (0 << 21) 339 + #define SOR_SEQ_INST_PIN_A_HIGH (1 << 21) 340 + #define SOR_SEQ_INST_PIN_B_LOW (0 << 22) 341 + #define SOR_SEQ_INST_PIN_B_HIGH (1 << 22) 342 + #define SOR_SEQ_INST_DRIVE_PWM_OUT_LO (1 << 23) 343 + 344 + /* HDMI_NV_PDISP_SOR_LANE_DRIVE_CURRENT 0x7e */ 345 + #define DRIVE_CURRENT_LANE0(x) (((x) & 0x3f) << 0) 346 + #define DRIVE_CURRENT_LANE1(x) (((x) & 0x3f) << 8) 347 + #define DRIVE_CURRENT_LANE2(x) (((x) & 0x3f) << 16) 348 + #define DRIVE_CURRENT_LANE3(x) (((x) & 0x3f) << 24) 349 + #define DRIVE_CURRENT_LANE0_T114(x) (((x) & 0x7f) << 0) 350 + #define DRIVE_CURRENT_LANE1_T114(x) (((x) & 0x7f) << 8) 351 + #define DRIVE_CURRENT_LANE2_T114(x) (((x) & 0x7f) << 16) 352 + #define DRIVE_CURRENT_LANE3_T114(x) (((x) & 0x7f) << 24) 353 + 354 + /* Drive current list */ 355 + enum { 356 + DRIVE_CURRENT_1_500_mA, 357 + DRIVE_CURRENT_1_875_mA, 358 + DRIVE_CURRENT_2_250_mA, 359 + DRIVE_CURRENT_2_625_mA, 360 + DRIVE_CURRENT_3_000_mA, 361 + DRIVE_CURRENT_3_375_mA, 362 + DRIVE_CURRENT_3_750_mA, 363 + DRIVE_CURRENT_4_125_mA, 364 + DRIVE_CURRENT_4_500_mA, 365 + DRIVE_CURRENT_4_875_mA, 366 + DRIVE_CURRENT_5_250_mA, 367 + DRIVE_CURRENT_5_625_mA, 368 + DRIVE_CURRENT_6_000_mA, 369 + DRIVE_CURRENT_6_375_mA, 370 + DRIVE_CURRENT_6_750_mA, 371 + DRIVE_CURRENT_7_125_mA, 372 + DRIVE_CURRENT_7_500_mA, 373 + DRIVE_CURRENT_7_875_mA, 374 + DRIVE_CURRENT_8_250_mA, 375 + DRIVE_CURRENT_8_625_mA, 376 + DRIVE_CURRENT_9_000_mA, 377 + DRIVE_CURRENT_9_375_mA, 378 + DRIVE_CURRENT_9_750_mA, 379 + DRIVE_CURRENT_10_125_mA, 380 + DRIVE_CURRENT_10_500_mA, 381 + DRIVE_CURRENT_10_875_mA, 382 + DRIVE_CURRENT_11_250_mA, 383 + DRIVE_CURRENT_11_625_mA, 384 + DRIVE_CURRENT_12_000_mA, 385 + DRIVE_CURRENT_12_375_mA, 386 + DRIVE_CURRENT_12_750_mA, 387 + DRIVE_CURRENT_13_125_mA, 388 + DRIVE_CURRENT_13_500_mA, 389 + DRIVE_CURRENT_13_875_mA, 390 + DRIVE_CURRENT_14_250_mA, 391 + DRIVE_CURRENT_14_625_mA, 392 + DRIVE_CURRENT_15_000_mA, 393 + DRIVE_CURRENT_15_375_mA, 394 + DRIVE_CURRENT_15_750_mA, 395 + DRIVE_CURRENT_16_125_mA, 396 + DRIVE_CURRENT_16_500_mA, 397 + DRIVE_CURRENT_16_875_mA, 398 + DRIVE_CURRENT_17_250_mA, 399 + DRIVE_CURRENT_17_625_mA, 400 + DRIVE_CURRENT_18_000_mA, 401 + DRIVE_CURRENT_18_375_mA, 402 + DRIVE_CURRENT_18_750_mA, 403 + DRIVE_CURRENT_19_125_mA, 404 + DRIVE_CURRENT_19_500_mA, 405 + DRIVE_CURRENT_19_875_mA, 406 + DRIVE_CURRENT_20_250_mA, 407 + DRIVE_CURRENT_20_625_mA, 408 + DRIVE_CURRENT_21_000_mA, 409 + DRIVE_CURRENT_21_375_mA, 410 + DRIVE_CURRENT_21_750_mA, 411 + DRIVE_CURRENT_22_125_mA, 412 + DRIVE_CURRENT_22_500_mA, 413 + DRIVE_CURRENT_22_875_mA, 414 + DRIVE_CURRENT_23_250_mA, 415 + DRIVE_CURRENT_23_625_mA, 416 + DRIVE_CURRENT_24_000_mA, 417 + DRIVE_CURRENT_24_375_mA, 418 + DRIVE_CURRENT_24_750_mA, 419 + }; 420 + 421 + /* Drive current list for T114 */ 422 + enum { 423 + DRIVE_CURRENT_0_000_mA_T114, 424 + DRIVE_CURRENT_0_400_mA_T114, 425 + DRIVE_CURRENT_0_800_mA_T114, 426 + DRIVE_CURRENT_1_200_mA_T114, 427 + DRIVE_CURRENT_1_600_mA_T114, 428 + DRIVE_CURRENT_2_000_mA_T114, 429 + DRIVE_CURRENT_2_400_mA_T114, 430 + DRIVE_CURRENT_2_800_mA_T114, 431 + DRIVE_CURRENT_3_200_mA_T114, 432 + DRIVE_CURRENT_3_600_mA_T114, 433 + DRIVE_CURRENT_4_000_mA_T114, 434 + DRIVE_CURRENT_4_400_mA_T114, 435 + DRIVE_CURRENT_4_800_mA_T114, 436 + DRIVE_CURRENT_5_200_mA_T114, 437 + DRIVE_CURRENT_5_600_mA_T114, 438 + DRIVE_CURRENT_6_000_mA_T114, 439 + DRIVE_CURRENT_6_400_mA_T114, 440 + DRIVE_CURRENT_6_800_mA_T114, 441 + DRIVE_CURRENT_7_200_mA_T114, 442 + DRIVE_CURRENT_7_600_mA_T114, 443 + DRIVE_CURRENT_8_000_mA_T114, 444 + DRIVE_CURRENT_8_400_mA_T114, 445 + DRIVE_CURRENT_8_800_mA_T114, 446 + DRIVE_CURRENT_9_200_mA_T114, 447 + DRIVE_CURRENT_9_600_mA_T114, 448 + DRIVE_CURRENT_10_000_mA_T114, 449 + DRIVE_CURRENT_10_400_mA_T114, 450 + DRIVE_CURRENT_10_800_mA_T114, 451 + DRIVE_CURRENT_11_200_mA_T114, 452 + DRIVE_CURRENT_11_600_mA_T114, 453 + DRIVE_CURRENT_12_000_mA_T114, 454 + DRIVE_CURRENT_12_400_mA_T114, 455 + DRIVE_CURRENT_12_800_mA_T114, 456 + DRIVE_CURRENT_13_200_mA_T114, 457 + DRIVE_CURRENT_13_600_mA_T114, 458 + DRIVE_CURRENT_14_000_mA_T114, 459 + DRIVE_CURRENT_14_400_mA_T114, 460 + DRIVE_CURRENT_14_800_mA_T114, 461 + DRIVE_CURRENT_15_200_mA_T114, 462 + DRIVE_CURRENT_15_600_mA_T114, 463 + DRIVE_CURRENT_16_000_mA_T114, 464 + DRIVE_CURRENT_16_400_mA_T114, 465 + DRIVE_CURRENT_16_800_mA_T114, 466 + DRIVE_CURRENT_17_200_mA_T114, 467 + DRIVE_CURRENT_17_600_mA_T114, 468 + DRIVE_CURRENT_18_000_mA_T114, 469 + DRIVE_CURRENT_18_400_mA_T114, 470 + DRIVE_CURRENT_18_800_mA_T114, 471 + DRIVE_CURRENT_19_200_mA_T114, 472 + DRIVE_CURRENT_19_600_mA_T114, 473 + DRIVE_CURRENT_20_000_mA_T114, 474 + DRIVE_CURRENT_20_400_mA_T114, 475 + DRIVE_CURRENT_20_800_mA_T114, 476 + DRIVE_CURRENT_21_200_mA_T114, 477 + DRIVE_CURRENT_21_600_mA_T114, 478 + DRIVE_CURRENT_22_000_mA_T114, 479 + DRIVE_CURRENT_22_400_mA_T114, 480 + DRIVE_CURRENT_22_800_mA_T114, 481 + DRIVE_CURRENT_23_200_mA_T114, 482 + DRIVE_CURRENT_23_600_mA_T114, 483 + DRIVE_CURRENT_24_000_mA_T114, 484 + DRIVE_CURRENT_24_400_mA_T114, 485 + DRIVE_CURRENT_24_800_mA_T114, 486 + DRIVE_CURRENT_25_200_mA_T114, 487 + DRIVE_CURRENT_25_400_mA_T114, 488 + DRIVE_CURRENT_25_800_mA_T114, 489 + DRIVE_CURRENT_26_200_mA_T114, 490 + DRIVE_CURRENT_26_600_mA_T114, 491 + DRIVE_CURRENT_27_000_mA_T114, 492 + DRIVE_CURRENT_27_400_mA_T114, 493 + DRIVE_CURRENT_27_800_mA_T114, 494 + DRIVE_CURRENT_28_200_mA_T114, 495 + }; 496 + 497 + /* HDMI_NV_PDISP_AUDIO_FS */ 498 + #define AUDIO_FS_LOW(x) (((x) & 0xfff) << 0) 499 + #define AUDIO_FS_HIGH(x) (((x) & 0xfff) << 16) 500 + 501 + /* HDMI_NV_PDISP_AUDIO_CNTRL0 0x8b */ 502 + #define AUDIO_CNTRL0_ERROR_TOLERANCE(x) (((x) & 0xff) << 0) 503 + #define AUDIO_CNTRL0_SOURCE_SELECT_AUTO (0 << 20) 504 + #define AUDIO_CNTRL0_SOURCE_SELECT_SPDIF (1 << 20) 505 + #define AUDIO_CNTRL0_SOURCE_SELECT_HDAL (2 << 20) 506 + #define AUDIO_CNTRL0_FRAMES_PER_BLOCK(x) (((x) & 0xff) << 24) 507 + 508 + /* HDMI_NV_PDISP_AUDIO_N 0x8c */ 509 + #define AUDIO_N_VALUE(x) (((x) & 0xfffff) << 0) 510 + #define AUDIO_N_RESETF (1 << 20) 511 + #define AUDIO_N_GENERATE_NORMAL (0 << 24) 512 + #define AUDIO_N_GENERATE_ALTERNATE (1 << 24) 513 + 514 + /* HDMI_NV_PDISP_SOR_REFCLK 0x95 */ 515 + #define SOR_REFCLK_DIV_INT(x) (((x) & 0xff) << 8) 516 + #define SOR_REFCLK_DIV_FRAC(x) (((x) & 0x03) << 6) 517 + 518 + /* HDMI_NV_PDISP_INPUT_CONTROL 0x97 */ 519 + #define HDMI_SRC_DISPLAYA (0 << 0) 520 + #define HDMI_SRC_DISPLAYB (1 << 0) 521 + #define ARM_VIDEO_RANGE_FULL (0 << 1) 522 + #define ARM_VIDEO_RANGE_LIMITED (1 << 1) 523 + 524 + /* HDMI_NV_PDISP_PE_CURRENT 0x99 */ 525 + #define PE_CURRENT0(x) (((x) & 0xf) << 0) 526 + #define PE_CURRENT1(x) (((x) & 0xf) << 8) 527 + #define PE_CURRENT2(x) (((x) & 0xf) << 16) 528 + #define PE_CURRENT3(x) (((x) & 0xf) << 24) 529 + 530 + enum { 531 + PE_CURRENT_0_0_mA, 532 + PE_CURRENT_0_5_mA, 533 + PE_CURRENT_1_0_mA, 534 + PE_CURRENT_1_5_mA, 535 + PE_CURRENT_2_0_mA, 536 + PE_CURRENT_2_5_mA, 537 + PE_CURRENT_3_0_mA, 538 + PE_CURRENT_3_5_mA, 539 + PE_CURRENT_4_0_mA, 540 + PE_CURRENT_4_5_mA, 541 + PE_CURRENT_5_0_mA, 542 + PE_CURRENT_5_5_mA, 543 + PE_CURRENT_6_0_mA, 544 + PE_CURRENT_6_5_mA, 545 + PE_CURRENT_7_0_mA, 546 + PE_CURRENT_7_5_mA, 547 + }; 548 + 549 + enum { 550 + PE_CURRENT_0_mA_T114, 551 + PE_CURRENT_1_mA_T114, 552 + PE_CURRENT_2_mA_T114, 553 + PE_CURRENT_3_mA_T114, 554 + PE_CURRENT_4_mA_T114, 555 + PE_CURRENT_5_mA_T114, 556 + PE_CURRENT_6_mA_T114, 557 + PE_CURRENT_7_mA_T114, 558 + PE_CURRENT_8_mA_T114, 559 + PE_CURRENT_9_mA_T114, 560 + PE_CURRENT_10_mA_T114, 561 + PE_CURRENT_11_mA_T114, 562 + PE_CURRENT_12_mA_T114, 563 + PE_CURRENT_13_mA_T114, 564 + PE_CURRENT_14_mA_T114, 565 + PE_CURRENT_15_mA_T114, 566 + }; 567 + 568 + /* HDMI_NV_PDISP_SOR_AUDIO_CNTRL0 0xac */ 569 + #define SOR_AUDIO_CNTRL0_SOURCE_SELECT_AUTO (0 << 20) 570 + #define SOR_AUDIO_CNTRL0_SOURCE_SELECT_SPDIF (1 << 20) 571 + #define SOR_AUDIO_CNTRL0_SOURCE_SELECT_HDAL (2 << 20) 572 + #define SOR_AUDIO_CNTRL0_INJECT_NULLSMPL (1 << 29) 573 + 574 + /* HDMI_NV_PDISP_SOR_AUDIO_SPARE0 0xae */ 575 + #define SOR_AUDIO_SPARE0_HBR_ENABLE BIT(27) 576 + 577 + /* HDMI_NV_PDISP_SOR_AUDIO_HDA_CODEC_SCRATCH0 0xba */ 578 + #define SOR_AUDIO_HDA_CODEC_SCRATCH0_VALID BIT(30) 579 + #define SOR_AUDIO_HDA_CODEC_SCRATCH0_FMT_MASK 0xffff 580 + 581 + /* HDMI_NV_PDISP_SOR_AUDIO_HDA_PRESENSE 0xbd */ 582 + #define SOR_AUDIO_HDA_PRESENSE_VALID BIT(1) 583 + #define SOR_AUDIO_HDA_PRESENSE_PRESENT BIT(0) 584 + 585 + /* HDMI_NV_PDISP_INT_STATUS 0xcc */ 586 + #define INT_SCRATCH BIT(3) 587 + #define INT_CP_REQUEST BIT(2) 588 + #define INT_CODEC_SCRATCH1 BIT(1) 589 + #define INT_CODEC_SCRATCH0 BIT(0) 590 + 591 + /* HDMI_NV_PDISP_SOR_IO_PEAK_CURRENT 0xd1 */ 592 + #define PEAK_CURRENT_LANE0(x) (((x) & 0x7f) << 0) 593 + #define PEAK_CURRENT_LANE1(x) (((x) & 0x7f) << 8) 594 + #define PEAK_CURRENT_LANE2(x) (((x) & 0x7f) << 16) 595 + #define PEAK_CURRENT_LANE3(x) (((x) & 0x7f) << 24) 596 + 597 + enum { 598 + PEAK_CURRENT_0_000_mA, 599 + PEAK_CURRENT_0_200_mA, 600 + PEAK_CURRENT_0_400_mA, 601 + PEAK_CURRENT_0_600_mA, 602 + PEAK_CURRENT_0_800_mA, 603 + PEAK_CURRENT_1_000_mA, 604 + PEAK_CURRENT_1_200_mA, 605 + PEAK_CURRENT_1_400_mA, 606 + PEAK_CURRENT_1_600_mA, 607 + PEAK_CURRENT_1_800_mA, 608 + PEAK_CURRENT_2_000_mA, 609 + PEAK_CURRENT_2_200_mA, 610 + PEAK_CURRENT_2_400_mA, 611 + PEAK_CURRENT_2_600_mA, 612 + PEAK_CURRENT_2_800_mA, 613 + PEAK_CURRENT_3_000_mA, 614 + PEAK_CURRENT_3_200_mA, 615 + PEAK_CURRENT_3_400_mA, 616 + PEAK_CURRENT_3_600_mA, 617 + PEAK_CURRENT_3_800_mA, 618 + PEAK_CURRENT_4_000_mA, 619 + PEAK_CURRENT_4_200_mA, 620 + PEAK_CURRENT_4_400_mA, 621 + PEAK_CURRENT_4_600_mA, 622 + PEAK_CURRENT_4_800_mA, 623 + PEAK_CURRENT_5_000_mA, 624 + PEAK_CURRENT_5_200_mA, 625 + PEAK_CURRENT_5_400_mA, 626 + PEAK_CURRENT_5_600_mA, 627 + PEAK_CURRENT_5_800_mA, 628 + PEAK_CURRENT_6_000_mA, 629 + PEAK_CURRENT_6_200_mA, 630 + PEAK_CURRENT_6_400_mA, 631 + PEAK_CURRENT_6_600_mA, 632 + PEAK_CURRENT_6_800_mA, 633 + PEAK_CURRENT_7_000_mA, 634 + PEAK_CURRENT_7_200_mA, 635 + PEAK_CURRENT_7_400_mA, 636 + PEAK_CURRENT_7_600_mA, 637 + PEAK_CURRENT_7_800_mA, 638 + PEAK_CURRENT_8_000_mA, 639 + PEAK_CURRENT_8_200_mA, 640 + PEAK_CURRENT_8_400_mA, 641 + PEAK_CURRENT_8_600_mA, 642 + PEAK_CURRENT_8_800_mA, 643 + PEAK_CURRENT_9_000_mA, 644 + PEAK_CURRENT_9_200_mA, 645 + PEAK_CURRENT_9_400_mA, 646 + }; 647 + 648 + #endif /* _TEGRA_HDMI_H */
+86
drivers/video/tegra20/tegra-host1x.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + /* 3 + * Copyright (c) 2025 Svyatoslav Ryhel <clamor95@gmail.com> 4 + */ 5 + 6 + #include <dm.h> 7 + #include <clk.h> 8 + #include <log.h> 9 + #include <reset.h> 10 + #include <linux/delay.h> 11 + 12 + #include <asm/arch/clock.h> 13 + #include <asm/arch-tegra/clk_rst.h> 14 + 15 + struct tegra_host1x_info { 16 + u32 clk_parent; 17 + u32 rate; 18 + }; 19 + 20 + static int tegra_host1x_probe(struct udevice *dev) 21 + { 22 + struct clk *clk; 23 + struct reset_ctl reset_ctl; 24 + const struct tegra_host1x_info *info; 25 + int ret; 26 + 27 + clk = devm_clk_get(dev, NULL); 28 + if (IS_ERR(clk)) { 29 + log_debug("%s: cannot get HOST1X clock: %ld\n", 30 + __func__, PTR_ERR(clk)); 31 + return PTR_ERR(clk); 32 + } 33 + 34 + ret = reset_get_by_name(dev, "host1x", &reset_ctl); 35 + if (ret) { 36 + log_debug("%s: cannot get HOST1X reset: %d\n", 37 + __func__, ret); 38 + return ret; 39 + } 40 + 41 + info = (struct tegra_host1x_info *)dev_get_driver_data(dev); 42 + 43 + reset_assert(&reset_ctl); 44 + clock_start_periph_pll(clk->id, info->clk_parent, info->rate); 45 + 46 + mdelay(2); 47 + reset_deassert(&reset_ctl); 48 + 49 + return 0; 50 + } 51 + 52 + static const struct tegra_host1x_info tegra20_host1x_info = { 53 + .clk_parent = CLOCK_ID_CGENERAL, 54 + .rate = 150000000, /* 150 MHz */ 55 + }; 56 + 57 + static const struct tegra_host1x_info tegra114_host1x_info = { 58 + .clk_parent = CLOCK_ID_PERIPH, 59 + .rate = 136000000, /* 136 MHz */ 60 + }; 61 + 62 + static const struct udevice_id tegra_host1x_ids[] = { 63 + { 64 + .compatible = "nvidia,tegra20-host1x", 65 + .data = (ulong)&tegra20_host1x_info 66 + }, { 67 + .compatible = "nvidia,tegra30-host1x", 68 + .data = (ulong)&tegra20_host1x_info 69 + }, { 70 + .compatible = "nvidia,tegra114-host1x", 71 + .data = (ulong)&tegra114_host1x_info 72 + }, { 73 + .compatible = "nvidia,tegra124-host1x", 74 + .data = (ulong)&tegra114_host1x_info 75 + }, { 76 + /* sentinel */ 77 + } 78 + }; 79 + 80 + U_BOOT_DRIVER(tegra_host1x) = { 81 + .name = "tegra_host1x", 82 + .id = UCLASS_SIMPLE_BUS, 83 + .of_match = tegra_host1x_ids, 84 + .probe = tegra_host1x_probe, 85 + .flags = DM_FLAG_PRE_RELOC, 86 + };
+3 -9
drivers/video/tegra20/tegra-pwm-backlight.c
··· 17 17 18 18 #include "tegra-dc.h" 19 19 20 - #define TEGRA_DISPLAY_A_BASE 0x54200000 21 - #define TEGRA_DISPLAY_B_BASE 0x54240000 22 - 23 20 #define TEGRA_PWM_BL_MIN_BRIGHTNESS 0x10 24 21 #define TEGRA_PWM_BL_MAX_BRIGHTNESS 0xFF 25 22 ··· 106 103 static int tegra_pwm_backlight_probe(struct udevice *dev) 107 104 { 108 105 struct tegra_pwm_backlight_priv *priv = dev_get_priv(dev); 106 + ofnode dc = ofnode_get_parent(dev_ofnode(dev)); 109 107 110 - if (dev_read_bool(dev, "nvidia,display-b-base")) 111 - priv->dc = (struct dc_ctlr *)TEGRA_DISPLAY_B_BASE; 112 - else 113 - priv->dc = (struct dc_ctlr *)TEGRA_DISPLAY_A_BASE; 114 - 108 + priv->dc = (struct dc_ctlr *)ofnode_get_addr(dc); 115 109 if (!priv->dc) { 116 - log_err("no display controller address\n"); 110 + log_err("%s: failed to get DC controller\n", __func__); 117 111 return -EINVAL; 118 112 } 119 113
+23
include/configs/ouya.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* 3 + * (C) Copyright 2010,2012 4 + * NVIDIA Corporation <www.nvidia.com> 5 + * 6 + * (C) Copyright 2025 7 + * Svyatoslav Ryhel <clamor95@gmail.com> 8 + */ 9 + 10 + #ifndef __CONFIG_H 11 + #define __CONFIG_H 12 + 13 + #include "tegra30-common.h" 14 + 15 + /* High-level configuration options */ 16 + #define CFG_TEGRA_BOARD_STRING "Ouya Game Console" 17 + 18 + /* Board-specific serial config */ 19 + #define CFG_SYS_NS16550_COM1 NV_PA_APB_UARTD_BASE 20 + 21 + #include "tegra-common-post.h" 22 + 23 + #endif /* __CONFIG_H */
+3 -2
include/env/nvidia/prod_upd.env
··· 3 3 bootloader_file=u-boot-dtb-tegra.bin 4 4 spi_size=0x400000 5 5 boot_dev=0 6 + boot_interface=mmc 6 7 7 8 flash_uboot=echo Preparing RAM; 8 9 mw ${kernel_addr_r} 0 ${boot_block_size_r}; ··· 11 12 mmc dev 0 1; 12 13 mmc read ${kernel_addr_r} 0 ${boot_block_size}; 13 14 echo Reading bootloader; 14 - if load mmc ${boot_dev}:1 ${ramdisk_addr_r} ${bootloader_file}; 15 + if load ${boot_interface} ${boot_dev}:1 ${ramdisk_addr_r} ${bootloader_file}; 15 16 then echo Calculating bootloader size; 16 - size mmc ${boot_dev}:1 ${bootloader_file}; 17 + size ${boot_interface} ${boot_dev}:1 ${bootloader_file}; 17 18 ebtupdate ${kernel_addr_r} ${ramdisk_addr_r} ${filesize}; 18 19 echo Writing bootloader to eMMC; 19 20 mmc dev 0 1;