/*
 * arch/powerpc/boot/dts/wii.dts
 *
 * Nintendo Wii platform device tree source
 * Copyright (C) 2008-2009 The GameCube Linux Team
 * Copyright (C) 2008,2009 Albert Herranz
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 */

/dts-v1/;
#include <dt-bindings/gpio/gpio.h>

/*
 * This is commented-out for now.
 * Until a later patch is merged, the kernel can use only the first
 * contiguous RAM range and will BUG() if the memreserve is outside
 * that range.
 */
/*/memreserve/ 0x10000000 0x0004000;*/	/* DSP RAM */

/ {
	model = "nintendo,wii";
	compatible = "nintendo,wii";
	#address-cells = <1>;
	#size-cells = <1>;

	chosen {
		bootargs = "root=/dev/mmcblk0p2 rootwait udbg-immortal";
	};

	memory {
		device_type = "memory";
		reg = <0x00000000 0x01800000	/* MEM1 24MB 1T-SRAM */
		       0x10000000 0x04000000>;	/* MEM2 64MB GDDR3 */
	};

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		PowerPC,broadway@0 {
			device_type = "cpu";
			reg = <0>;
			clock-frequency = <729000000>; /* 729MHz */
			bus-frequency = <243000000>; /* 243MHz core-to-bus 3x */
			timebase-frequency = <60750000>; /* 243MHz / 4 */
			i-cache-line-size = <32>;
			d-cache-line-size = <32>;
			i-cache-size = <32768>;
			d-cache-size = <32768>;
		};
	};

	/* devices contained in the hollywood chipset */
	hollywood {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "nintendo,hollywood";
                ranges = <0x0c000000 0x0c000000 0x01000000
			  0x0d000000 0x0d000000 0x00800000
			  0x0d800000 0x0d800000 0x00800000>;
		interrupt-parent = <&PIC0>;

		video@c002000 {
			compatible = "nintendo,hollywood-vi",
					"nintendo,flipper-vi";
			reg = <0x0c002000 0x100>;
			interrupts = <8>;
		};

		processor-interface@c003000 {
			compatible = "nintendo,hollywood-pi",
					"nintendo,flipper-pi";
			reg = <0x0c003000 0x100>;

			PIC0: pic0 {
				#interrupt-cells = <1>;
				compatible = "nintendo,flipper-pic";
				interrupt-controller;
			};
		};

		dsp@c005000 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "nintendo,hollywood-dsp",
					"nintendo,flipper-dsp";
			reg = <0x0c005000 0x200>;
			interrupts = <6>;
		};

		gamepad-controller@d006400 {
			compatible = "nintendo,hollywood-si",
					"nintendo,flipper-si";
			reg = <0x0d006400 0x100>;
			interrupts = <3>;
		};

		audio@c006c00 {
			compatible = "nintendo,hollywood-ai",
					"nintendo,flipper-ai";
			reg = <0x0d006c00 0x20>;
			interrupts = <6>;
		};

		/* External Interface bus */
		exi@d006800 {
			compatible = "nintendo,hollywood-exi",
					"nintendo,flipper-exi";
			reg = <0x0d006800 0x40>;
			virtual-reg = <0x0d006800>;
			interrupts = <4>;
		};

		usb@d040000 {
			compatible = "nintendo,hollywood-usb-ehci",
					"usb-ehci";
			reg = <0x0d040000 0x100>;
			interrupts = <4>;
			interrupt-parent = <&PIC1>;
		};

		usb@d050000 {
			compatible = "nintendo,hollywood-usb-ohci",
					"usb-ohci";
			reg = <0x0d050000 0x100>;
			interrupts = <5>;
			interrupt-parent = <&PIC1>;
		};

		usb@d060000 {
			compatible = "nintendo,hollywood-usb-ohci",
					"usb-ohci";
			reg = <0x0d060000 0x100>;
			interrupts = <6>;
			interrupt-parent = <&PIC1>;
		};

		sd@d070000 {
			compatible = "nintendo,hollywood-sdhci",
					"sdhci";
			reg = <0x0d070000 0x200>;
			interrupts = <7>;
			interrupt-parent = <&PIC1>;
		};

		sdio@d080000 {
			compatible = "nintendo,hollywood-sdhci",
					"sdhci";
			reg = <0x0d080000 0x200>;
			interrupts = <8>;
			interrupt-parent = <&PIC1>;
		};

		ipc@d000000 {
			compatible = "nintendo,hollywood-ipc";
			reg = <0x0d000000 0x10>;
			interrupts = <30>;
			interrupt-parent = <&PIC1>;
		};

		PIC1: pic1@d800030 {
			#interrupt-cells = <1>;
			compatible = "nintendo,hollywood-pic";
			reg = <0x0d800030 0x10>;
			interrupt-controller;
			interrupts = <14>;
		};

		GPIO: gpio@d8000c0 {
			#gpio-cells = <2>;
			compatible = "nintendo,hollywood-gpio";
			reg = <0x0d8000c0 0x40>;
			gpio-controller;
			ngpios = <24>;

			gpio-line-names =
				"POWER", "SHUTDOWN", "FAN", "DC_DC",
				"DI_SPIN", "SLOT_LED", "EJECT_BTN", "SLOT_IN",
				"SENSOR_BAR", "DO_EJECT", "EEP_CS", "EEP_CLK",
				"EEP_MOSI", "EEP_MISO", "AVE_SCL", "AVE_SDA",
				"DEBUG0", "DEBUG1", "DEBUG2", "DEBUG3",
				"DEBUG4", "DEBUG5", "DEBUG6", "DEBUG7";

			/*
			 * This is commented out while a standard binding
			 * for i2c over gpio is defined.
			 */
			/*
			i2c-video {
				#address-cells = <1>;
				#size-cells = <0>;
			        compatible = "i2c-gpio";

			        gpios = <&GPIO 15 0
			                 &GPIO 14 0>;
			        clock-frequency = <250000>;
				no-clock-stretching;
			        scl-is-open-drain;
			        sda-is-open-drain;
			        sda-enforce-dir;

			        AVE: audio-video-encoder@70 {
			                compatible = "nintendo,wii-audio-video-encoder";
			                reg = <0x70>;
			        };
			};
			*/
		};

		control@d800100 {
			compatible = "nintendo,hollywood-control";
			reg = <0x0d800100 0x300>;
		};

		disk@d806000 {
			compatible = "nintendo,hollywood-di";
			reg = <0x0d806000 0x40>;
			interrupts = <2>;
		};
	};

	gpio-leds {
		compatible = "gpio-leds";

		/* This is the blue LED in the disk drive slot */
		drive-slot {
			label = "wii:blue:drive_slot";
			gpios = <&GPIO 5 GPIO_ACTIVE_HIGH>;
			panic-indicator;
		};
	};
};

