/*
 *  Copyright (C) 2012 Marvell Technology Group Ltd.
 *  Author: Haojian Zhuang <haojian.zhuang@marvell.com>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  publishhed by the Free Software Foundation.
 */

/dts-v1/;
/include/ "mmp2.dtsi"

/ {
	model = "Marvell MMP2 Brownstone Development Board";
	compatible = "mrvl,mmp2-brownstone", "mrvl,mmp2";

	chosen {
		bootargs = "console=ttyS2,38400 root=/dev/nfs nfsroot=192.168.1.100:/nfsroot/ ip=192.168.1.101:192.168.1.100::255.255.255.0::eth0:on";
	};

	memory {
		reg = <0x00000000 0x08000000>;
	};

	soc {
		apb@d4000000 {
			uart3: uart@d4018000 {
				status = "okay";
			};
			twsi1: i2c@d4011000 {
				status = "okay";
				pmic: max8925@3c {
					compatible = "maxium,max8925";
					reg = <0x3c>;
					interrupts = <1>;
					interrupt-parent = <&intcmux4>;
					interrupt-controller;
					#interrupt-cells = <1>;
					maxim,tsc-irq = <0>;

					regulators {
						SDV1 {
							regulator-min-microvolt = <637500>;
							regulator-max-microvolt = <1425000>;
							regulator-boot-on;
							regulator-always-on;
						};
						SDV2 {
							regulator-min-microvolt = <650000>;
							regulator-max-microvolt = <2225000>;
							regulator-boot-on;
							regulator-always-on;
						};
						SDV3 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO1 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO2 {
							regulator-min-microvolt = <650000>;
							regulator-max-microvolt = <2250000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO3 {
							regulator-min-microvolt = <650000>;
							regulator-max-microvolt = <2250000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO4 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO5 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO6 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO7 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO8 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO9 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO10 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
						};
						LDO11 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO12 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO13 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO14 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO15 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO16 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO17 {
							regulator-min-microvolt = <650000>;
							regulator-max-microvolt = <2250000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO18 {
							regulator-min-microvolt = <650000>;
							regulator-max-microvolt = <2250000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO19 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
						LDO20 {
							regulator-min-microvolt = <750000>;
							regulator-max-microvolt = <3900000>;
							regulator-boot-on;
							regulator-always-on;
						};
					};
					backlight {
						maxim,max8925-dual-string = <0>;
					};
					charger {
						batt-detect = <0>;
						topoff-threshold = <1>;
						fast-charge = <7>;
						no-temp-support = <0>;
						no-insert-detect = <0>;
					};
				};
			};
			rtc: rtc@d4010000 {
				status = "okay";
			};
		};
	};
};
