/*
 * Copyright 2017 NXP
 *
 * 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.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include "fsl-imx8qxp-lpddr4-arm2.dts"

/ {
	regulators {
		reg_wm8962: regulator-wm8962 {
			compatible = "regulator-fixed";
			regulator-name = "wm8962-supply";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
			regulator-always-on;
			enable-active-high;
		};
	};

	sound-cs42888 {
		status = "disabled";
	};

	sound-wm8962 {
		compatible = "fsl,imx6q-sabresd-wm8962",
			   "fsl,imx-audio-wm8962";
		model = "wm8962-audio";
		cpu-dai = <&sai0>;
		audio-codec = <&wm8962>;
		audio-routing =
			"Headphone Jack", "HPOUTL",
			"Headphone Jack", "HPOUTR",
			"Ext Spk", "SPKOUTL",
			"Ext Spk", "SPKOUTR",
			"AMIC", "MICBIAS",
			"IN3R", "AMIC",
			"DMIC", "MICBIAS",
			"DMICDAT", "DMIC",
			"Playback", "CPU-Playback",
			"CPU-Capture", "Capture";
		codec-master;
		hp-det-gpios = <&gpio1 2 1>;
		mic-det-gpios = <&gpio1 3 1>;
	};
};

&esai0 {
	status = "disabled";
};

&iomuxc {
	imx8qxp-lpddr4-arm2 {
		pinctrl_sai0: sai0grp {
			fsl,pins = <
				SC_P_SAI0_TXFS_ADMA_SAI0_TXFS		0xc6000040
				SC_P_SAI0_TXC_ADMA_SAI0_TXC		0xc6000040
				SC_P_SAI0_TXD_ADMA_SAI0_TXD		0xc6000060
				SC_P_SAI0_RXD_ADMA_SAI0_RXD		0xc6000040
				SC_P_SPI2_SDO_LSIO_GPIO1_IO01		0xc6000040
				SC_P_SPI2_SDI_LSIO_GPIO1_IO02		0xc6000040
				SC_P_SPI2_SCK_LSIO_GPIO1_IO03		0xc6000040
				SC_P_MCLK_OUT0_ADMA_ACM_MCLK_OUT0	0xc6000040
			>;
		};
	};
};

&i2c0_csi0 {

	wm8962: wm8962@1a {
		compatible = "wlf,wm8962";
		reg = <0x1a>;
		clocks = <&clk IMX8QXP_AUD_MCLKOUT0>;
		DCVDD-supply = <&reg_wm8962>;
		DBVDD-supply = <&reg_wm8962>;
		AVDD-supply = <&reg_wm8962>;
		CPVDD-supply = <&reg_wm8962>;
		MICVDD-supply = <&reg_wm8962>;
		PLLVDD-supply = <&reg_wm8962>;
		SPKVDD1-supply = <&reg_wm8962>;
		SPKVDD2-supply = <&reg_wm8962>;
		gpio-cfg = <
			0x0000 /* 0:Default */
			0x0000 /* 1:Default */
			0x0013 /* 2:FN_DMICCLK */
			0x0000 /* 3:Default */
			0x8014 /* 4:FN_DMICCDAT */
			0x0000 /* 5:Default */
		>;
		amic-mono;
		power-domains = <&pd_mclk_out0>;
	};
};

&sai0 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_sai0>;
	assigned-clocks = <&clk IMX8QXP_AUD_PLL0_DIV>,
			<&clk IMX8QXP_AUD_ACM_AUD_PLL_CLK0_DIV>,
			<&clk IMX8QXP_AUD_ACM_AUD_REC_CLK0_DIV>;
	assigned-clock-rates = <786432000>, <49152000>, <24576000>;
	status = "okay";
};
