/*
 * 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-imx8qm-lpddr4-arm2.dts"

/ {

	leds {
		status = "disabled";
	};

	regulators {

		reg_spdif_en: regulator-spdif-en {
			compatible = "regulator-fixed";
			regulator-name = "spdif-en";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&pca9557_d 0 GPIO_ACTIVE_HIGH>;
			regulator-always-on;
			enable-active-high;
		};

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

		reg_bb2: regulator-bb2 {
			compatible = "regulator-fixed";
			regulator-name = "bb2-supply";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&gpio1 13 GPIO_ACTIVE_HIGH>;
			regulator-always-on;
			enable-active-high;
		};
	};

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

	sound-spdif {
		compatible = "fsl,imx-audio-spdif";
		model = "imx-spdif";
		spdif-controller = <&spdif0>;
		spdif-in;
		spdif-out;
	};

	sound-mqs {
		compatible = "fsl,imx8qm-lpddr4-arm2-mqs",
				"fsl,imx-audio-mqs";
		model = "mqs-audio";
		cpu-dai = <&sai1>;
		audio-codec = <&mqs>;
		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",
			"CPU-Playback", "ASRC-Playback",
			"Playback", "CPU-Playback",
			"ASRC-Capture", "CPU-Capture",
			"CPU-Capture", "Capture";
		hp-det-gpios = <&gpio5 26 1>;
		mic-det-gpios = <&gpio5 27 1>;
		codec-master;
	};
};

&esai0 {
	status = "disabled";
};

&iomuxc {

	imx8qm-arm2 {

		pinctrl_spdif0: spdif0grp {
			fsl,pins = <
				SC_P_SPDIF0_TX_AUD_SPDIF0_TX	0xc6000040
				SC_P_SPDIF0_RX_AUD_SPDIF0_RX	0xc6000040
			>;
		};

		pinctrl_mqs: mqsgrp {
			fsl,pins = <
				SC_P_SPDIF0_TX_AUD_MQS_L	0xc6000061
				SC_P_SPDIF0_RX_AUD_MQS_R	0xc6000061
			>;
		};

		pinctrl_sai0: sai0grp {
			fsl,pins = <
				SC_P_SAI1_RXC_AUD_SAI0_TXD		0xc6000060
				SC_P_SAI1_RXFS_AUD_SAI0_RXD		0xc6000040
				SC_P_SAI1_TXC_AUD_SAI0_TXC		0xc6000040
				SC_P_SPI2_CS1_AUD_SAI0_TXFS		0xc6000040

				SC_P_USDHC2_CD_B_LSIO_GPIO4_IO12	0xc6000040
				SC_P_USDHC2_DATA0_LSIO_GPIO5_IO26	0xc6000040
				SC_P_USDHC2_DATA1_LSIO_GPIO5_IO27	0xc6000040
				SC_P_LVDS1_I2C0_SDA_LSIO_GPIO1_IO13	0xc6000040
				SC_P_MCLK_OUT0_AUD_ACM_MCLK_OUT0	0xc6000040
			>;
		};
	};
};

&esai0 {
	status = "disabled";
};

&i2c0 {

	wm8962: wm8962@1a {
		compatible = "wlf,wm8962";
		reg = <0x1a>;
		clocks = <&clk IMX8QM_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>;
	};
};


&mqs {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_mqs>;
	status = "disabled";
};

&spdif0 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_spdif0>;
	assigned-clocks =<&clk IMX8QM_AUD_PLL0_DIV>,
			<&clk IMX8QM_AUD_ACM_AUD_PLL_CLK0_DIV>,
			<&clk IMX8QM_AUD_ACM_AUD_REC_CLK0_DIV>;
	assigned-clock-rates = <786432000>, <49152000>, <24576000>;
	status = "okay";
};

&sai1 {
	assigned-clocks =<&clk IMX8QM_AUD_PLL0_DIV>,
			<&clk IMX8QM_AUD_ACM_AUD_PLL_CLK0_DIV>,
			<&clk IMX8QM_AUD_ACM_AUD_REC_CLK0_DIV>;
	assigned-clock-rates = <786432000>, <49152000>, <24576000>;
	status = "okay";
};

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