static int msm_dai_q6_dai_mi2s_probe(struct snd_soc_dai *dai)
{
	struct msm_dai_q6_dai_data *dai_data;
	int rc = 0;

	dai_data = kzalloc(sizeof(struct msm_dai_q6_dai_data),
		GFP_KERNEL);

	if (!dai_data) {
		dev_err(dai->dev, "DAI-%d: fail to allocate dai data\n",
		dai->id);
		rc = -ENOMEM;
		goto rtn;
	} else
		dev_set_drvdata(dai->dev, dai_data);

	rc = msm_dai_q6_mi2s_platform_data_validation(dai);
	if (rc != 0) {
		pr_err("%s: The msm_dai_q6_mi2s_platform_data_validation failed\n",
			    __func__);
		kfree(dai_data);
	}
rtn:
	return rc;
}
static __devinit int msm_dai_q6_mi2s_dev_probe(struct platform_device *pdev)
{
	struct msm_dai_q6_mi2s_dai_data *dai_data;
	int rc = 0;

	dev_dbg(&pdev->dev, "%s: pdev %p dev %p\n", __func__, pdev, &pdev->dev);

	dai_data = kzalloc(sizeof(struct msm_dai_q6_mi2s_dai_data),
		GFP_KERNEL);

	if (!dai_data) {
		dev_err(&pdev->dev, "fail to allocate dai data\n");
		rc = -ENOMEM;
		goto rtn;
	} else
		dev_set_drvdata(&pdev->dev, dai_data);

	rc = msm_dai_q6_mi2s_platform_data_validation(pdev,
						      &msm_dai_q6_mi2s_dai);
	if (IS_ERR_VALUE(rc))
		goto err_pdata;

	dai_data->rate_constraint.count = 1;
	dai_data->bitwidth_constraint.count = 1;
	rc = snd_soc_register_dai(&pdev->dev, &msm_dai_q6_mi2s_dai);

	if (IS_ERR_VALUE(rc))
		goto err_pdata;

	return 0;

err_pdata:
	kfree(dai_data);
rtn:
	return rc;
}