/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Platform data for Madera codec driver
 *
 * Copyright (C) 2016-2019 Cirrus Logic, Inc. and
 *                         Cirrus Logic International Semiconductor Ltd.
 */

#ifndef MADERA_CODEC_PDATA_H
#define MADERA_CODEC_PDATA_H

#include <linux/types.h>

#define MADERA_MAX_INPUT		6
#define MADERA_MAX_MUXED_CHANNELS	4
#define MADERA_MAX_OUTPUT		6
#define MADERA_MAX_AIF			4
#define MADERA_MAX_PDM_SPK		2
#define MADERA_MAX_DSP			7

/**
 * struct madera_codec_pdata
 *
 * @max_channels_clocked: Maximum number of channels that I2S clocks will be
 *			  generated for. Useful when clock master for systems
 *			  where the I2S bus has multiple data lines.
 * @dmic_ref:		  Indicates how the MICBIAS pins have been externally
 *			  connected to DMICs on each input. A value of 0
 *			  indicates MICVDD and is the default. Other values are:
 *			  For CS47L35 one of the CS47L35_DMIC_REF_xxx values
 *			  For all other codecs one of the MADERA_DMIC_REF_xxx
 *			  Also see the datasheet for a description of the
 *			  INn_DMIC_SUP field.
 * @inmode:		  Mode for the ADC inputs. One of the MADERA_INMODE_xxx
 *			  values. Two-dimensional array
 *			  [input_number][channel number], with four slots per
 *			  input in the order
 *			  [n][0]=INnAL [n][1]=INnAR [n][2]=INnBL [n][3]=INnBR
 * @out_mono:		  For each output set the value to TRUE to indicate that
 *			  the output is mono. [0]=OUT1, [1]=OUT2, ...
 * @pdm_fmt:		  PDM speaker data format. See the PDM_SPKn_FMT field in
 *			  the datasheet for a description of this value.
 * @pdm_mute:		  PDM mute format. See the PDM_SPKn_CTRL_1 register
 *			  in the datasheet for a description of this value.
 */
struct madera_codec_pdata {
	u32 max_channels_clocked[MADERA_MAX_AIF];

	u32 dmic_ref[MADERA_MAX_INPUT];

	u32 inmode[MADERA_MAX_INPUT][MADERA_MAX_MUXED_CHANNELS];

	bool out_mono[MADERA_MAX_OUTPUT];

	u32 pdm_fmt[MADERA_MAX_PDM_SPK];
	u32 pdm_mute[MADERA_MAX_PDM_SPK];
};

#endif
