예제 #1
0
static int max98505_dai_hw_params(struct snd_pcm_substream *substream,
		struct snd_pcm_hw_params *params,
		struct snd_soc_dai *dai)
{
	struct snd_soc_codec *codec = dai->codec;
	struct max98505_priv *max98505 = snd_soc_codec_get_drvdata(codec);
	struct max98505_cdata *cdata;
	unsigned int rate;

	msg_maxim("enter");

	cdata = &max98505->dai[0];

	rate = params_rate(params);

	switch (params_format(params)) {
	case SNDRV_PCM_FORMAT_S16_LE:
		msg_maxim("set SNDRV_PCM_FORMAT_S16_LE");
		regmap_update_bits(max98505->regmap,
				MAX98505_R020_FORMAT,
				MAX98505_DAI_CHANSZ_MASK,
				MAX98505_DAI_CHANSZ_16);
		break;
	case SNDRV_PCM_FORMAT_S24_LE:
		msg_maxim("set SNDRV_PCM_FORMAT_S24_LE");
		regmap_update_bits(max98505->regmap,
				MAX98505_R020_FORMAT,
				MAX98505_DAI_CHANSZ_MASK,
				MAX98505_DAI_CHANSZ_32);
		msg_maxim("(really set to 32 bits)");
		break;
	case SNDRV_PCM_FORMAT_S32_LE:
		msg_maxim("set SNDRV_PCM_FORMAT_S32_LE");
		regmap_update_bits(max98505->regmap,
				MAX98505_R020_FORMAT,
				MAX98505_DAI_CHANSZ_MASK,
				MAX98505_DAI_CHANSZ_32);
		break;
	default:
		msg_maxim("format unsupported %d",
				params_format(params));
		return -EINVAL;
	}

	return max98505_set_clock(max98505, rate);
}
static int max98505_dai_hw_params(struct snd_pcm_substream *substream,
				   struct snd_pcm_hw_params *params,
				   struct snd_soc_dai *dai)
{
	struct snd_soc_codec *codec = dai->codec;
	struct max98505_priv *max98505 = snd_soc_codec_get_drvdata(codec);
	struct max98505_cdata *cdata;
	unsigned int rate;

	pr_info("%s: enter\n", __func__);

	cdata = &max98505->dai[0];

	rate = params_rate(params);

	switch (params_format(params)) {
	case SNDRV_PCM_FORMAT_S16_LE:
		pr_info("%s: set SNDRV_PCM_FORMAT_S16_LE\n", __func__);
		regmap_update_bits(max98505->regmap, MAX98505_R020_FORMAT,
				M98505_DAI_CHANSZ_MASK, M98505_DAI_CHANSZ_16);
		break;
	case SNDRV_PCM_FORMAT_S24_LE:
		pr_info("%s: set SNDRV_PCM_FORMAT_S24_LE\n", __func__);
#ifdef RIVER
		regmap_update_bits(max98505->regmap, MAX98505_R020_FORMAT,
				M98505_DAI_CHANSZ_MASK, M98505_DAI_CHANSZ_32);
		pr_info("%s: (really set to 32 bits)\n", __func__);
#else
		regmap_update_bits(max98505->regmap, MAX98505_R020_FORMAT,
				M98505_DAI_CHANSZ_MASK, M98505_DAI_CHANSZ_24);
#endif
		break;
	case SNDRV_PCM_FORMAT_S32_LE:
		pr_info("%s: set SNDRV_PCM_FORMAT_S32_LE\n", __func__);
		regmap_update_bits(max98505->regmap, MAX98505_R020_FORMAT,
				M98505_DAI_CHANSZ_MASK, M98505_DAI_CHANSZ_32);
		break;
	default:
		pr_info("%s: format unsupported %d but skip", __func__, params_format(params));
		regmap_update_bits(max98505->regmap, MAX98505_R020_FORMAT,
				M98505_DAI_CHANSZ_MASK, M98505_DAI_CHANSZ_16);
	}

	return max98505_set_clock(max98505, rate);
}