Loading include/sound/soc-dai.h +1 −1 Original line number Diff line number Diff line Loading @@ -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, Loading sound/soc/fsl/Kconfig +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading sound/soc/fsl/fsl_esai.c +2 −0 Original line number Diff line number Diff line Loading @@ -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 | \ Loading Loading @@ -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, }; Loading sound/soc/fsl/fsl_utils.c +27 −0 Original line number Diff line number Diff line Loading @@ -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"); sound/soc/fsl/fsl_utils.h +3 −1 Original line number Diff line number Diff line Loading @@ -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
include/sound/soc-dai.h +1 −1 Original line number Diff line number Diff line Loading @@ -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, Loading
sound/soc/fsl/Kconfig +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading
sound/soc/fsl/fsl_esai.c +2 −0 Original line number Diff line number Diff line Loading @@ -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 | \ Loading Loading @@ -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, }; Loading
sound/soc/fsl/fsl_utils.c +27 −0 Original line number Diff line number Diff line Loading @@ -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");
sound/soc/fsl/fsl_utils.h +3 −1 Original line number Diff line number Diff line Loading @@ -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 */