/*
 * Device Tree Source for the KZM-A9-GT board
 *
 * Copyright (C) 2012 Horms Solutions Ltd.
 *
 * Based on sh73a0-kzm9g.dts
 * Copyright (C) 2012 Renesas Solutions Corp.
 *
 * This file is licensed under the terms of the GNU General Public License
 * version 2.  This program is licensed "as is" without any warranty of any
 * kind, whether express or implied.
 */

/dts-v1/;
#include "sh73a0.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/irq.h>

/ {
	model = "KZM-A9-GT";
	compatible = "renesas,kzm9g", "renesas,sh73a0";

	aliases {
		serial0 = &scifa4;
	};

	cpus {
		cpu@0 {
			cpu0-supply = <&vdd_dvfs>;
			operating-points = <
				/* kHz  uV */
				1196000 1315000
				 598000 1175000
				 398667 1065000
			>;
			voltage-tolerance = <1>; /* 1% */
		};
	};

	chosen {
		bootargs = "root=/dev/nfs ip=dhcp ignore_loglevel rw";
		stdout-path = "serial0:115200n8";
	};

	memory@40000000 {
		device_type = "memory";
		reg = <0x40000000 0x20000000>;
	};

	reg_1p8v: regulator-1p8v {
		compatible = "regulator-fixed";
		regulator-name = "fixed-1.8V";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		regulator-always-on;
		regulator-boot-on;
	};

	reg_3p3v: regulator-3p3v {
		compatible = "regulator-fixed";
		regulator-name = "fixed-3.3V";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
		regulator-boot-on;
	};

	vmmc_sdhi0: regulator-vmmc-sdhi0 {
		compatible = "regulator-fixed";
		regulator-name = "SDHI0 Vcc";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		gpio = <&pfc 15 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	vmmc_sdhi2: regulator-vmmc-sdhi2 {
		compatible = "regulator-fixed";
		regulator-name = "SDHI2 Vcc";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		gpio = <&pfc 14 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	leds {
		compatible = "gpio-leds";
		led1 {
			gpios = <&pfc 20 GPIO_ACTIVE_LOW>;
			label = "LED1";
		};
		led2 {
			gpios = <&pfc 21 GPIO_ACTIVE_LOW>;
			label = "LED2";
		};
		led3 {
			gpios = <&pfc 22 GPIO_ACTIVE_LOW>;
			label = "LED3";
		};
		led4 {
			gpios = <&pfc 23 GPIO_ACTIVE_LOW>;
			label = "LED4";
		};
	};

	keyboard {
		compatible = "gpio-keys";

		back-key {
			gpios = <&pcf8575 8 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_BACK>;
			label = "SW3";
		};

		right-key {
			gpios = <&pcf8575 9 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_RIGHT>;
			label = "SW2-R";
		};

		left-key {
			gpios = <&pcf8575 10 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_LEFT>;
			label = "SW2-L";
		};

		enter-key {
			gpios = <&pcf8575 11 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_ENTER>;
			label = "SW2-P";
		};

		up-key {
			gpios = <&pcf8575 12 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_UP>;
			label = "SW2-U";
		};

		down-key {
			gpios = <&pcf8575 13 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_DOWN>;
			label = "SW2-D";
		};

		home-key {
			gpios = <&pcf8575 14 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_HOME>;
			label = "SW1";
			wakeup-source;
		};

		wakeup-key {
			gpios = <&pfc 159 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_WAKEUP>;
			label = "NMI";
			wakeup-source;
		};
	};

	sound {
		compatible = "simple-audio-card";
		simple-audio-card,format = "left_j";
		simple-audio-card,cpu {
			sound-dai = <&sh_fsi2 0>;
		};
		simple-audio-card,codec {
			sound-dai = <&ak4648>;
			bitclock-master;
			frame-master;
			system-clock-frequency = <11289600>;
		};
	};
};

&bsc {
	ethernet@10000000 {
		compatible = "smsc,lan9220", "smsc,lan9115";
		reg = <0x10000000 0x100>;
		phy-mode = "mii";
		interrupt-parent = <&irqpin0>;
		interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
		reg-io-width = <4>;
		smsc,irq-push-pull;
		smsc,save-mac-address;
		vddvario-supply = <&reg_1p8v>;
		vdd33a-supply = <&reg_3p3v>;
	};
};

&cmt1 {
	status = "okay";
};

&extal2_clk {
	clock-frequency = <48000000>;
};

&i2c0 {
	status = "okay";

	compass@c {
		compatible = "asahi-kasei,ak8975";
		reg = <0x0c>;
		interrupt-parent = <&irqpin3>;
		interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
	};

	ak4648: codec@12 {
		compatible = "asahi-kasei,ak4648";
		reg = <0x12>;
		#sound-dai-cells = <0>;
	};

	accelerometer@1d {
		compatible = "adi,adxl345";
		reg = <0x1d>;
		interrupt-parent = <&irqpin3>;
		interrupts = <2 IRQ_TYPE_LEVEL_HIGH>,
			     <3 IRQ_TYPE_LEVEL_HIGH>;
	};

	rtc@32 {
		compatible = "ricoh,r2025sd";
		reg = <0x32>;
	};

	as3711@40 {
		compatible = "ams,as3711";
		reg = <0x40>;

		regulators {
			vdd_dvfs: sd1 {
				regulator-name = "1.315V CPU";
				regulator-min-microvolt = <1050000>;
				regulator-max-microvolt = <1350000>;
				regulator-always-on;
				regulator-boot-on;
			};
			sd2 {
				regulator-name = "1.8V";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-always-on;
				regulator-boot-on;
			};
			sd4 {
				regulator-name = "1.215V";
				regulator-min-microvolt = <1215000>;
				regulator-max-microvolt = <1235000>;
				regulator-always-on;
				regulator-boot-on;
			};
			ldo2 {
				regulator-name = "2.8V CPU";
				regulator-min-microvolt = <2800000>;
				regulator-max-microvolt = <2800000>;
				regulator-always-on;
				regulator-boot-on;
			};
			ldo3 {
				regulator-name = "3.0V CPU";
				regulator-min-microvolt = <3000000>;
				regulator-max-microvolt = <3000000>;
				regulator-always-on;
				regulator-boot-on;
			};
			ldo4 {
				regulator-name = "2.8V";
				regulator-min-microvolt = <2800000>;
				regulator-max-microvolt = <2800000>;
				regulator-always-on;
				regulator-boot-on;
			};
			ldo5 {
				regulator-name = "2.8V #2";
				regulator-min-microvolt = <2800000>;
				regulator-max-microvolt = <2800000>;
				regulator-always-on;
				regulator-boot-on;
			};
			ldo7 {
				regulator-name = "1.15V CPU";
				regulator-min-microvolt = <1150000>;
				regulator-max-microvolt = <1150000>;
				regulator-always-on;
				regulator-boot-on;
			};
			ldo8 {
				regulator-name = "1.15V CPU #2";
				regulator-min-microvolt = <1150000>;
				regulator-max-microvolt = <1150000>;
				regulator-always-on;
				regulator-boot-on;
			};
		};
	};
};

&i2c1 {
	status = "okay";

	touchscreen@55 {
		compatible = "sitronix,st1232";
		reg = <0x55>;
		interrupt-parent = <&irqpin1>;
		interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
	};
};

&i2c3 {
	pinctrl-0 = <&i2c3_pins>;
	pinctrl-names = "default";
	status = "okay";

	pcf8575: gpio@20 {
		compatible = "nxp,pcf8575";
		reg = <0x20>;
		interrupt-parent = <&irqpin2>;
		interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};
};

&mmcif {
	pinctrl-0 = <&mmcif_pins>;
	pinctrl-names = "default";

	bus-width = <8>;
	vmmc-supply = <&reg_1p8v>;
	status = "okay";
};

&pfc {
	i2c3_pins: i2c3 {
		groups = "i2c3_1";
		function = "i2c3";
	};

	mmcif_pins: mmc {
		mux {
			groups = "mmc0_data8_0", "mmc0_ctrl_0";
			function = "mmc0";
		};
		cfg {
			groups = "mmc0_data8_0";
			pins = "PORT279";
			bias-pull-up;
		};
	};

	scifa4_pins: scifa4 {
		groups = "scifa4_data", "scifa4_ctrl";
		function = "scifa4";
	};

	sdhi0_pins: sd0 {
		groups = "sdhi0_data4", "sdhi0_ctrl", "sdhi0_cd", "sdhi0_wp";
		function = "sdhi0";
	};

	sdhi2_pins: sd2 {
		groups = "sdhi2_data4", "sdhi2_ctrl";
		function = "sdhi2";
	};

	fsia_pins: sounda {
		groups = "fsia_mclk_in", "fsia_sclk_in",
			 "fsia_data_in", "fsia_data_out";
		function = "fsia";
	};
};

&scifa4 {
	pinctrl-0 = <&scifa4_pins>;
	pinctrl-names = "default";

	uart-has-rtscts;
	status = "okay";
};

&sdhi0 {
	pinctrl-0 = <&sdhi0_pins>;
	pinctrl-names = "default";

	vmmc-supply = <&vmmc_sdhi0>;
	bus-width = <4>;
	status = "okay";
};

&sdhi2 {
	pinctrl-0 = <&sdhi2_pins>;
	pinctrl-names = "default";

	vmmc-supply = <&vmmc_sdhi2>;
	bus-width = <4>;
	broken-cd;
	status = "okay";
};

&sh_fsi2 {
	pinctrl-0 = <&fsia_pins>;
	pinctrl-names = "default";

	status = "okay";
};
