Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c159a850 authored by Mark Brown's avatar Mark Brown
Browse files

Merge remote-tracking branches 'asoc/topic/tdm' and 'asoc/topic/tegra' into asoc-next

Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -142,7 +142,7 @@ struct snd_soc_dai_ops {
	 * Called by soc_card drivers, normally in their hw_params.
	 */
	int (*set_fmt)(struct snd_soc_dai *dai, unsigned int fmt);
	int (*of_xlate_tdm_slot_mask)(unsigned int slots,
	int (*xlate_tdm_slot_mask)(unsigned int slots,
		unsigned int *tx_mask, unsigned int *rx_mask);
	int (*set_tdm_slot)(struct snd_soc_dai *dai,
		unsigned int tx_mask, unsigned int rx_mask,
+2 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ config SND_SOC_FSL_SPDIF
config SND_SOC_FSL_ESAI
	tristate
	select REGMAP_MMIO
	select SND_SOC_FSL_UTILS

config SND_SOC_FSL_UTILS
	tristate
@@ -120,6 +121,7 @@ if SND_IMX_SOC

config SND_SOC_IMX_SSI
	tristate
	select SND_SOC_FSL_UTILS

config SND_SOC_IMX_PCM_FIQ
	tristate
+2 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#include "fsl_esai.h"
#include "imx-pcm.h"
#include "fsl_utils.h"

#define FSL_ESAI_RATES		SNDRV_PCM_RATE_8000_192000
#define FSL_ESAI_FORMATS	(SNDRV_PCM_FMTBIT_S8 | \
@@ -581,6 +582,7 @@ static struct snd_soc_dai_ops fsl_esai_dai_ops = {
	.hw_params = fsl_esai_hw_params,
	.set_sysclk = fsl_esai_set_dai_sysclk,
	.set_fmt = fsl_esai_set_dai_fmt,
	.xlate_tdm_slot_mask = fsl_asoc_xlate_tdm_slot_mask,
	.set_tdm_slot = fsl_esai_set_dai_tdm_slot,
};

+27 −0
Original line number Diff line number Diff line
@@ -86,6 +86,33 @@ int fsl_asoc_get_dma_channel(struct device_node *ssi_np,
}
EXPORT_SYMBOL(fsl_asoc_get_dma_channel);

/**
 * fsl_asoc_xlate_tdm_slot_mask - generate TDM slot TX/RX mask.
 *
 * @slots: Number of slots in use.
 * @tx_mask: bitmask representing active TX slots.
 * @rx_mask: bitmask representing active RX slots.
 *
 * This function used to generate the TDM slot TX/RX mask. And the TX/RX
 * mask will use a 0 bit for an active slot as default, and the default
 * active bits are at the LSB of the mask value.
 */
int fsl_asoc_xlate_tdm_slot_mask(unsigned int slots,
				    unsigned int *tx_mask,
				    unsigned int *rx_mask)
{
	if (!slots)
		return -EINVAL;

	if (tx_mask)
		*tx_mask = ~((1 << slots) - 1);
	if (rx_mask)
		*rx_mask = ~((1 << slots) - 1);

	return 0;
}
EXPORT_SYMBOL_GPL(fsl_asoc_xlate_tdm_slot_mask);

MODULE_AUTHOR("Timur Tabi <timur@freescale.com>");
MODULE_DESCRIPTION("Freescale ASoC utility code");
MODULE_LICENSE("GPL v2");
+3 −1
Original line number Diff line number Diff line
@@ -22,5 +22,7 @@ int fsl_asoc_get_dma_channel(struct device_node *ssi_np, const char *name,
			     struct snd_soc_dai_link *dai,
			     unsigned int *dma_channel_id,
			     unsigned int *dma_id);

int fsl_asoc_xlate_tdm_slot_mask(unsigned int slots,
				    unsigned int *tx_mask,
				    unsigned int *rx_mask);
#endif /* _FSL_UTILS_H */
Loading