From e28e3e0d01c0fcb628e841977b51c45189b43f47 Mon Sep 17 00:00:00 2001 From: Viorel Suman Date: Thu, 8 Mar 2018 14:37:30 +0200 Subject: [PATCH] MLK-17580: ASoC: fsl: dsd: Add DSD utilities helper Add DSD utilities helper. Signed-off-by: Viorel Suman Reviewed-by: Shengjiu Wang +#include +#include + +static bool fsl_is_dsd(struct snd_pcm_hw_params *params) +{ + snd_pcm_format_t format = params_format(params); + + switch (format) { + case SNDRV_PCM_FORMAT_DSD_U8: + case SNDRV_PCM_FORMAT_DSD_U16_LE: + case SNDRV_PCM_FORMAT_DSD_U16_BE: + case SNDRV_PCM_FORMAT_DSD_U32_LE: + case SNDRV_PCM_FORMAT_DSD_U32_BE: + return true; + default: + return false; + } +} + +static struct pinctrl_state *fsl_get_pins_state(struct pinctrl *pinctrl, + struct snd_pcm_hw_params *params) +{ + int dsd_bclk; + struct pinctrl_state *state = 0; + + if (fsl_is_dsd(params)) { + dsd_bclk = params_rate(params) * params_physical_width(params); + + switch (dsd_bclk) { + case 22579200: /* DSD512 */ + state = pinctrl_lookup_state(pinctrl, "dsd512"); + break; + } + + /* Get default DSD state */ + if (IS_ERR_OR_NULL(state)) + state = pinctrl_lookup_state(pinctrl, "dsd"); + } + + /* Get default state */ + if (IS_ERR_OR_NULL(state)) + state = pinctrl_lookup_state(pinctrl, "default"); + + return state; +} + +#endif /* __FSL_DSD_H */