/*
 * wait until calibration impedance is ok
 *  operate on all devices that have a handle open
 */
static void waitCalibration(Tfa98xx_handle_t handle, float *pRe25)
{
        Tfa98xx_Error_t err;
        int calibrateDone, count = 500;

        assert(pRe25 != NULL);

        err = Tfa98xx_DspReadMem(handle, 231, 1, &calibrateDone);
        assert(err == Tfa98xx_Error_Ok);
        while ((calibrateDone == 0) && (count-- > 0))   // TODO protect loop with timeout?
        {
                err = Tfa98xx_DspReadMem(handle, 231, 1, &calibrateDone);
                assert(err == Tfa98xx_Error_Ok);
        }
        err = Tfa98xx_DspGetCalibrationImpedance(handle, pRe25);
        assert(err == Tfa98xx_Error_Ok);

}
static void waitCalibration(Tfa98xx_handle_t handle, int *calibrateDone)
{
	enum Tfa98xx_Error err;
	int tries = 0;
	unsigned short mtp;
	unsigned short spkrCalibration;
#define WAIT_TRIES 1000

	err = Tfa98xx_ReadRegister16(handle, TFA98XX_MTP, &mtp);

	/* in case of calibrate once wait for MTPEX */
	if (mtp & TFA98XX_MTP_MTPOTC) {
		while ((*calibrateDone == 0) && (tries < WAIT_TRIES)) {
			err = Tfa98xx_ReadRegister16(handle,
				TFA98XX_MTP, &mtp);
			/* check MTP bit1 (MTPEX) */
			*calibrateDone = (mtp & TFA98XX_MTP_MTPEX);
			tries++;
		}
	} else { /* poll xmem for calibrate always */
		while ((*calibrateDone == 0) && (tries < WAIT_TRIES)) {
			/* TODO optimise with wait estimation */
			err = Tfa98xx_DspReadMem(handle, 231, 1,
				calibrateDone);
			tries++;
		}
		if (tries == WAIT_TRIES)
			pr_err("%s: calibrateDone 231 timedout\n", __func__);
	}

	err = Tfa98xx_ReadRegister16(handle,
		TFA98XX_SPKR_CALIBRATION, &spkrCalibration);
	if (err != Tfa98xx_Error_Ok) {
		pr_err("%s: Tfa98xx_ReadRegister16 failed %d\n",
			__func__, err);
		return;
	}

	spkrCalibration &= ~(TFA98XX_SPKR_CALIBRATION_TROS_MSK);

	err = Tfa98xx_WriteRegister16(handle,
		TFA98XX_SPKR_CALIBRATION, spkrCalibration);
	if (err != Tfa98xx_Error_Ok) {
		pr_err("%s: Tfa98xx_WriteRegister16 failed %d\n",
			__func__, err);
		return;
	}
}