// SPDX-License-Identifier: GPL-2.0
/*
 * 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.
 */

/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 = <1196000 1315000>,	/* kHz  uV */
					   < 598000 1175000>,
					   < 398667 1065000>;
			voltage-tolerance = <1>; /* 1% */
		};
	};

	chosen {
		bootargs = "root=/dev/nfs ip=on 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,lan9221", "smsc,lan9115";
		reg = <0x10000000 0x100>;
		phy-mode = "mii";
		interrupts-extended = <&irqpin0 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>;
		interrupts-extended = <&irqpin3 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>;
		interrupts-extended = <&irqpin3 2 IRQ_TYPE_LEVEL_HIGH>,
				      <&irqpin3 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>;
		interrupts-extended = <&irqpin1 0 IRQ_TYPE_EDGE_FALLING>;
	};
};

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

	pcf8575: gpio@20 {
		compatible = "nxp,pcf8575";
		reg = <0x20>;
		interrupts-extended = <&irqpin2 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";
};
