Home | History | Annotate | Line # | Download | only in ingenic
      1 // SPDX-License-Identifier: GPL-2.0
      2 /dts-v1/;
      3 
      4 #include "jz4770.dtsi"
      5 #include <dt-bindings/clock/ingenic,tcu.h>
      6 
      7 #include <dt-bindings/gpio/gpio.h>
      8 #include <dt-bindings/iio/adc/ingenic,adc.h>
      9 #include <dt-bindings/input/input.h>
     10 
     11 / {
     12 	compatible = "gcw,zero", "ingenic,jz4770";
     13 	model = "GCW Zero";
     14 
     15 	aliases {
     16 		serial0 = &uart0;
     17 		serial1 = &uart1;
     18 		serial2 = &uart2;
     19 		serial3 = &uart3;
     20 	};
     21 
     22 	memory: memory {
     23 		device_type = "memory";
     24 		reg = <0x0 0x10000000>,
     25 		      <0x30000000 0x10000000>;
     26 	};
     27 
     28 	chosen {
     29 		stdout-path = "serial2:57600n8";
     30 	};
     31 
     32 	vcc: regulator@0 {
     33 		compatible = "regulator-fixed";
     34 		regulator-name = "vcc";
     35 
     36 		regulator-min-microvolt = <3300000>;
     37 		regulator-max-microvolt = <3300000>;
     38 		regulator-always-on;
     39 	};
     40 
     41 	mmc1_power: regulator@1 {
     42 		compatible = "regulator-fixed";
     43 		regulator-name = "mmc1_vcc";
     44 		gpio = <&gpe 9 0>;
     45 
     46 		regulator-min-microvolt = <3300000>;
     47 		regulator-max-microvolt = <3300000>;
     48 		vin-supply = <&vcc>;
     49 	};
     50 
     51 	headphones_amp: analog-amplifier@0 {
     52 		compatible = "simple-audio-amplifier";
     53 		enable-gpios = <&gpf 3 GPIO_ACTIVE_LOW>;
     54 		enable-delay-ms = <50>;
     55 
     56 		VCC-supply = <&ldo5>;
     57 		sound-name-prefix = "Headphones Amp";
     58 	};
     59 
     60 	speaker_amp: analog-amplifier@1 {
     61 		compatible = "simple-audio-amplifier";
     62 		enable-gpios = <&gpf 20 GPIO_ACTIVE_HIGH>;
     63 
     64 		VCC-supply = <&ldo5>;
     65 		sound-name-prefix = "Speaker Amp";
     66 	};
     67 
     68 	sound {
     69 		compatible = "simple-audio-card";
     70 
     71 		simple-audio-card,name = "gcw0-audio";
     72 		simple-audio-card,format = "i2s";
     73 
     74 		simple-audio-card,widgets =
     75 			"Speaker", "Speaker",
     76 			"Headphone", "Headphones",
     77 			"Microphone", "Built-in Mic";
     78 		simple-audio-card,routing =
     79 			"Headphones Amp INL", "LHPOUT",
     80 			"Headphones Amp INR", "RHPOUT",
     81 			"Headphones", "Headphones Amp OUTL",
     82 			"Headphones", "Headphones Amp OUTR",
     83 			"Speaker Amp INL", "LOUT",
     84 			"Speaker Amp INR", "ROUT",
     85 			"Speaker", "Speaker Amp OUTL",
     86 			"Speaker", "Speaker Amp OUTR",
     87 			"LLINEIN", "Cap-less",
     88 			"RLINEIN", "Cap-less",
     89 			"Built-in Mic", "MICBIAS",
     90 			"MIC1P", "Built-in Mic",
     91 			"MIC1N", "Built-in Mic";
     92 		simple-audio-card,pin-switches = "Speaker", "Headphones";
     93 
     94 		simple-audio-card,hp-det-gpio = <&gpf 21 GPIO_ACTIVE_LOW>;
     95 		simple-audio-card,aux-devs = <&speaker_amp>, <&headphones_amp>;
     96 
     97 		simple-audio-card,bitclock-master = <&dai_codec>;
     98 		simple-audio-card,frame-master = <&dai_codec>;
     99 
    100 		dai_cpu: simple-audio-card,cpu {
    101 			sound-dai = <&aic>;
    102 		};
    103 
    104 		dai_codec: simple-audio-card,codec {
    105 			sound-dai = <&codec>;
    106 		};
    107 	};
    108 
    109 	rumble {
    110 		compatible = "pwm-vibrator";
    111 		pwms = <&pwm 4 2000000 0>;
    112 		pwm-names = "enable";
    113 
    114 		pinctrl-names = "default";
    115 		pinctrl-0 = <&pins_pwm4>;
    116 	};
    117 
    118 	backlight: backlight {
    119 		compatible = "pwm-backlight";
    120 		pwms = <&pwm 1 40000 0>;
    121 		power-supply = <&vcc>;
    122 
    123 		brightness-levels = <0 16 32 48 64 80 96 112 128
    124 				     144 160 176 192 208 224 240 255>;
    125 		default-brightness-level = <12>;
    126 
    127 		pinctrl-names = "default";
    128 		pinctrl-0 = <&pins_pwm1>;
    129 	};
    130 
    131 	gpio-keys {
    132 		compatible = "gpio-keys";
    133 		#address-cells = <1>;
    134 		#size-cells = <0>;
    135 
    136 		autorepeat;
    137 
    138 		button@0 {
    139 			label = "D-pad up";
    140 			linux,code = <KEY_UP>;
    141 			linux,can-disable;
    142 			gpios = <&gpe 21 GPIO_ACTIVE_LOW>;
    143 		};
    144 
    145 		button@1 {
    146 			label = "D-pad down";
    147 			linux,code = <KEY_DOWN>;
    148 			linux,can-disable;
    149 			gpios = <&gpe 25 GPIO_ACTIVE_LOW>;
    150 		};
    151 
    152 		button@2 {
    153 			label = "D-pad left";
    154 			linux,code = <KEY_LEFT>;
    155 			linux,can-disable;
    156 			gpios = <&gpe 23 GPIO_ACTIVE_LOW>;
    157 		};
    158 
    159 		button@3 {
    160 			label = "D-pad right";
    161 			linux,code = <KEY_RIGHT>;
    162 			linux,can-disable;
    163 			gpios = <&gpe 24 GPIO_ACTIVE_LOW>;
    164 		};
    165 
    166 		button@4 {
    167 			label = "Button A";
    168 			linux,code = <KEY_LEFTCTRL>;
    169 			linux,can-disable;
    170 			gpios = <&gpe 29 GPIO_ACTIVE_LOW>;
    171 		};
    172 
    173 		button@5 {
    174 			label = "Button B";
    175 			linux,code = <KEY_LEFTALT>;
    176 			linux,can-disable;
    177 			gpios = <&gpe 20 GPIO_ACTIVE_LOW>;
    178 		};
    179 
    180 		button@6 {
    181 			label = "Button Y";
    182 			linux,code = <KEY_SPACE>;
    183 			linux,can-disable;
    184 			gpios = <&gpe 27 GPIO_ACTIVE_LOW>;
    185 		};
    186 
    187 		button@7 {
    188 			label = "Button X";
    189 			linux,code = <KEY_LEFTSHIFT>;
    190 			linux,can-disable;
    191 			gpios = <&gpe 28 GPIO_ACTIVE_LOW>;
    192 		};
    193 
    194 		button@8 {
    195 			label = "Left shoulder button";
    196 			linux,code = <KEY_TAB>;
    197 			linux,can-disable;
    198 			gpios = <&gpb 20 GPIO_ACTIVE_LOW>;
    199 		};
    200 
    201 		button@9 {
    202 			label = "Right shoulder button";
    203 			linux,code = <KEY_BACKSPACE>;
    204 			linux,can-disable;
    205 			gpios = <&gpe 26 GPIO_ACTIVE_LOW>;
    206 		};
    207 
    208 		button@10 {
    209 			label = "Start button";
    210 			linux,code = <KEY_ENTER>;
    211 			linux,can-disable;
    212 			gpios = <&gpb 21 GPIO_ACTIVE_LOW>;
    213 		};
    214 
    215 		button@11 {
    216 			label = "Select button";
    217 			linux,code = <KEY_ESC>;
    218 			linux,can-disable;
    219 			/*
    220 			 * This is the only button that is active high,
    221 			 * since it doubles as BOOT_SEL1.
    222 			 */
    223 			gpios = <&gpd 18 GPIO_ACTIVE_HIGH>;
    224 		};
    225 
    226 		button@12 {
    227 			label = "Power slider";
    228 			linux,code = <KEY_POWER>;
    229 			linux,can-disable;
    230 			gpios = <&gpa 30 GPIO_ACTIVE_LOW>;
    231 			wakeup-source;
    232 		};
    233 
    234 		button@13 {
    235 			label = "Power hold";
    236 			linux,code = <KEY_PAUSE>;
    237 			linux,can-disable;
    238 			gpios = <&gpf 11 GPIO_ACTIVE_LOW>;
    239 		};
    240 	};
    241 
    242 	i2c3: i2c-controller@3 {
    243 		compatible = "i2c-gpio";
    244 		#address-cells = <1>;
    245 		#size-cells = <0>;
    246 
    247 		sda-gpios = <&gpd 5 GPIO_ACTIVE_HIGH>;
    248 		scl-gpios = <&gpd 4 GPIO_ACTIVE_HIGH>;
    249 		i2c-gpio,delay-us = <2>; /* 250 kHz */
    250 
    251 		act8600: pmic@5a {
    252 			compatible = "active-semi,act8600";
    253 			reg = <0x5a>;
    254 
    255 			regulators {
    256 				/* USB OTG */
    257 				otg_vbus: SUDCDC_REG4 {
    258 					/*
    259 					 * 5.3V instead of 5.0V to compensate
    260 					 * for the voltage drop of a diode
    261 					 * between the regulator and the
    262 					 * connector.
    263 					 */
    264 					regulator-min-microvolt = <5300000>;
    265 					regulator-max-microvolt = <5300000>;
    266 					inl-supply = <&vcc>;
    267 				};
    268 
    269 				/*
    270 				 * When this is off, there is no sound, but also
    271 				 * no USB networking.
    272 				 */
    273 				ldo5: LDO5 {
    274 					regulator-min-microvolt = <2500000>;
    275 					regulator-max-microvolt = <2500000>;
    276 					inl-supply = <&vcc>;
    277 				};
    278 
    279 				/* LCD panel and FM radio */
    280 				ldo6: LDO6 {
    281 					regulator-min-microvolt = <3300000>;
    282 					regulator-max-microvolt = <3300000>;
    283 					inl-supply = <&vcc>;
    284 				};
    285 
    286 				/* ??? */
    287 				LDO7 {
    288 					regulator-min-microvolt = <3300000>;
    289 					regulator-max-microvolt = <3300000>;
    290 					/*regulator-always-on;*/
    291 					inl-supply = <&vcc>;
    292 				};
    293 
    294 				/*
    295 				 * The colors on the LCD are wrong when this is
    296 				 * off. Which is strange, since the LCD panel
    297 				 * data sheet only mentions a 3.3V input.
    298 				 */
    299 				LDO8 {
    300 					regulator-min-microvolt = <1800000>;
    301 					regulator-max-microvolt = <1800000>;
    302 					regulator-always-on;
    303 					inl-supply = <&vcc>;
    304 				};
    305 
    306 				/* RTC fixed 3.3V */
    307 				LDO_REG9 {
    308 					regulator-min-microvolt = <3300000>;
    309 					regulator-max-microvolt = <3300000>;
    310 					regulator-always-on;
    311 					inl-supply = <&vcc>;
    312 				};
    313 
    314 				/* Unused fixed 1.2V */
    315 				LDO_REG10 {
    316 					inl-supply = <&vcc>;
    317 				};
    318 			};
    319 		};
    320 	};
    321 
    322 	leds {
    323 		compatible = "gpio-leds";
    324 
    325 		led {
    326 			gpios = <&gpb 30 GPIO_ACTIVE_LOW>;
    327 			default-state = "on";
    328 		};
    329 	};
    330 
    331 	spi {
    332 		compatible = "spi-gpio";
    333 		#address-cells = <1>;
    334 		#size-cells = <0>;
    335 
    336 		sck-gpios = <&gpe 15 GPIO_ACTIVE_HIGH>;
    337 		mosi-gpios = <&gpe 17 GPIO_ACTIVE_HIGH>;
    338 		cs-gpios = <&gpe 16 GPIO_ACTIVE_HIGH>;
    339 		num-chipselects = <1>;
    340 
    341 		nt39016@0 {
    342 			compatible = "kingdisplay,kd035g6-54nt";
    343 			reg = <0>;
    344 
    345 			spi-max-frequency = <3125000>;
    346 			spi-3wire;
    347 
    348 			reset-gpios = <&gpe 2 GPIO_ACTIVE_LOW>;
    349 
    350 			backlight = <&backlight>;
    351 			power-supply = <&ldo6>;
    352 
    353 			port {
    354 				panel_input: endpoint {
    355 					remote-endpoint = <&panel_output>;
    356 				};
    357 			};
    358 		};
    359 	};
    360 
    361 	connector {
    362 		compatible = "gpio-usb-b-connector", "usb-b-connector";
    363 		label = "mini-USB";
    364 		type = "mini";
    365 
    366 		/*
    367 		 * USB OTG is not yet working reliably, the ID detection
    368 		 * mechanism tends to fry easily for unknown reasons.
    369 		 * Until this is fixed, disable OTG by not providing the
    370 		 * ID GPIO to the driver.
    371 		 */
    372 		//id-gpios = <&gpf 18 GPIO_ACTIVE_LOW>;
    373 
    374 		vbus-gpios = <&gpb 5 GPIO_ACTIVE_HIGH>;
    375 		vbus-supply = <&otg_vbus>;
    376 
    377 		pinctrl-names = "default";
    378 		pinctrl-0 = <&pins_otg>;
    379 
    380 		port {
    381 			usb_ep: endpoint {
    382 				remote-endpoint = <&usb_otg_ep>;
    383 			};
    384 		};
    385 	};
    386 };
    387 
    388 &ext {
    389 	clock-frequency = <12000000>;
    390 };
    391 
    392 &pinctrl {
    393 	pins_lcd: lcd {
    394 		function = "lcd";
    395 		groups = "lcd-24bit";
    396 	};
    397 
    398 	pins_uart2: uart2 {
    399 		function = "uart2";
    400 		groups = "uart2-data";
    401 	};
    402 
    403 	pins_mmc0: mmc0 {
    404 		function = "mmc0";
    405 		groups = "mmc0-1bit-a", "mmc0-4bit-a";
    406 	};
    407 
    408 	pins_mmc1: mmc1 {
    409 		function = "mmc1";
    410 		groups = "mmc1-1bit-d", "mmc1-4bit-d";
    411 	};
    412 
    413 	pins_otg: otg {
    414 		otg-vbus-pin {
    415 			function = "otg";
    416 			groups = "otg-vbus";
    417 		};
    418 
    419 		vbus-pin {
    420 			pins = "PB5";
    421 			bias-disable;
    422 		};
    423 	};
    424 
    425 	pins_pwm1: pwm1 {
    426 		function = "pwm1";
    427 		groups = "pwm1";
    428 	};
    429 
    430 	pins_pwm4: pwm4 {
    431 		function = "pwm4";
    432 		groups = "pwm4";
    433 	};
    434 };
    435 
    436 &uart2 {
    437 	pinctrl-names = "default";
    438 	pinctrl-0 = <&pins_uart2>;
    439 
    440 	status = "okay";
    441 };
    442 
    443 &cgu {
    444 	/*
    445 	 * Put high-speed peripherals under PLL1, such that we can change the
    446 	 * PLL0 frequency on demand without having to suspend peripherals.
    447 	 * We use a rate of 432 MHz, which is the least common multiple of
    448 	 * 27 MHz (required by TV encoder) and 48 MHz (required by USB host).
    449 	 * Put the GPU under PLL0 since we want a higher frequency.
    450 	 * Use the 32 kHz oscillator as the parent of the RTC for a higher
    451 	 * precision.
    452 	 */
    453 	assigned-clocks =
    454 		<&cgu JZ4770_CLK_PLL1>,
    455 		<&cgu JZ4770_CLK_GPU>,
    456 		<&cgu JZ4770_CLK_RTC>,
    457 		<&cgu JZ4770_CLK_UHC>,
    458 		<&cgu JZ4770_CLK_LPCLK_MUX>,
    459 		<&cgu JZ4770_CLK_MMC0_MUX>,
    460 		<&cgu JZ4770_CLK_MMC1_MUX>;
    461 	assigned-clock-parents =
    462 		<0>,
    463 		<&cgu JZ4770_CLK_PLL0>,
    464 		<&cgu JZ4770_CLK_OSC32K>,
    465 		<&cgu JZ4770_CLK_PLL1>,
    466 		<&cgu JZ4770_CLK_PLL1>,
    467 		<&cgu JZ4770_CLK_PLL1>,
    468 		<&cgu JZ4770_CLK_PLL1>;
    469 	assigned-clock-rates =
    470 		<432000000>,
    471 		<600000000>;
    472 };
    473 
    474 &uhc {
    475 	/* The WiFi module is connected to the UHC. */
    476 	status = "okay";
    477 };
    478 
    479 &tcu {
    480 	/*
    481 	 * 750 kHz for the system timer and clocksource, 12 MHz for the OST,
    482 	 * and use RTC as the parent for the watchdog clock
    483 	 */
    484 	assigned-clocks = <&tcu TCU_CLK_TIMER0>, <&tcu TCU_CLK_TIMER2>,
    485 			  <&tcu TCU_CLK_OST>, <&tcu TCU_CLK_WDT>;
    486 	assigned-clock-parents = <0>, <0>, <0>, <&cgu JZ4770_CLK_RTC>;
    487 	assigned-clock-rates = <750000>, <750000>, <12000000>;
    488 
    489 	/* PWM1 is in use, so use channel #2 for the clocksource */
    490 	ingenic,pwm-channels-mask = <0xfa>;
    491 };
    492 
    493 &usb_otg {
    494 	port {
    495 		usb_otg_ep: endpoint {
    496 			remote-endpoint = <&usb_ep>;
    497 		};
    498 	};
    499 };
    500 
    501 &otg_phy {
    502 	vcc-supply = <&ldo5>;
    503 };
    504 
    505 &rtc {
    506 	clocks = <&cgu JZ4770_CLK_RTC>;
    507 	clock-names = "rtc";
    508 
    509 	system-power-controller;
    510 };
    511 
    512 &mmc0 {
    513 	status = "okay";
    514 
    515 	bus-width = <4>;
    516 	max-frequency = <48000000>;
    517 	vmmc-supply = <&vcc>;
    518 	non-removable;
    519 
    520 	pinctrl-names = "default";
    521 	pinctrl-0 = <&pins_mmc0>;
    522 };
    523 
    524 &mmc1 {
    525 	status = "okay";
    526 
    527 	bus-width = <4>;
    528 	max-frequency = <48000000>;
    529 	cd-gpios = <&gpb 2 GPIO_ACTIVE_LOW>;
    530 	vmmc-supply = <&mmc1_power>;
    531 
    532 	pinctrl-names = "default";
    533 	pinctrl-0 = <&pins_mmc1>;
    534 };
    535 
    536 &lcd {
    537 	pinctrl-names = "default";
    538 	pinctrl-0 = <&pins_lcd>;
    539 
    540 	port {
    541 		panel_output: endpoint {
    542 			remote-endpoint = <&panel_input>;
    543 		};
    544 	};
    545 };
    546