forked from PAWPAW-Mirror/lib_xua
Put PFD reset in c_mclk_change case
This commit is contained in:
@@ -483,15 +483,6 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
|
|||||||
{
|
{
|
||||||
masterClockFreq = MCLK_441;
|
masterClockFreq = MCLK_441;
|
||||||
}
|
}
|
||||||
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC && XUA_USE_SW_PLL)
|
|
||||||
sw_pll_pfd_init(&sw_pll_pfd,
|
|
||||||
sof_rate_hz / controller_rate_hz, /* How often the PFD is invoked */
|
|
||||||
masterClockFreq / sof_rate_hz, /* pll ratio integer */
|
|
||||||
0, /* Assume precise timing of sampling */
|
|
||||||
2000);
|
|
||||||
restart_sigma_delta(c_sw_pll, masterClockFreq);
|
|
||||||
|
|
||||||
#endif /* (XUA_SYNCMODE == XUA_SYNCMODE_SYNC && XUA_USE_SW_PLL) */
|
|
||||||
}
|
}
|
||||||
#endif /* (MAX_FREQ != MIN_FREQ) */
|
#endif /* (MAX_FREQ != MIN_FREQ) */
|
||||||
/* Ideally we want to wait for handshake (and pass back up) here. But we cannot keep this
|
/* Ideally we want to wait for handshake (and pass back up) here. But we cannot keep this
|
||||||
@@ -1035,17 +1026,28 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
|
|||||||
|
|
||||||
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
||||||
case c_mclk_change :> u_tmp:
|
case c_mclk_change :> u_tmp:
|
||||||
|
printstr("c_mclk_change\n");
|
||||||
unsigned selected_mclk_rate = u_tmp;
|
unsigned selected_mclk_rate = u_tmp;
|
||||||
c_mclk_change :> u_tmp; /* Sample rate we discard */
|
c_mclk_change :> u_tmp; /* Sample rate is discarded as only care about mclk */
|
||||||
c_mclk_change <: 0; /* ACK back to audio to release */
|
#if (XUA_USE_SW_PLL)
|
||||||
|
sw_pll_pfd_init(&sw_pll_pfd,
|
||||||
|
sof_rate_hz / controller_rate_hz, /* How often the PFD is invoked */
|
||||||
|
selected_mclk_rate / sof_rate_hz, /* pll muliplication ratio integer */
|
||||||
|
0, /* Assume precise timing of sampling */
|
||||||
|
2000);
|
||||||
|
restart_sigma_delta(c_sw_pll, selected_mclk_rate);
|
||||||
|
/* Delay ACK until sw_pll says it is ready */
|
||||||
|
#else
|
||||||
|
c_mclk_change <: 0; /* ACK back to audio to release I2S immediately */
|
||||||
|
#endif /* XUA_USE_SW_PLL */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if (XUA_USE_SW_PLL)
|
#if (XUA_USE_SW_PLL)
|
||||||
/* This is fired when sw_pll has completed initialising a new mclk_rate */
|
/* This is fired when sw_pll has completed initialising a new mclk_rate */
|
||||||
case inuint_byref(c_sw_pll, u_tmp):
|
case inuint_byref(c_sw_pll, u_tmp):
|
||||||
printstr("SWPLL synch\n");
|
printstr("SWPLL synch\n");
|
||||||
|
c_mclk_change <: 0; /* ACK back to audio to release */
|
||||||
//TODO - hold off audio until we get this ACK
|
|
||||||
break;
|
break;
|
||||||
#endif /* (XUA_USE_SW_PLL) */
|
#endif /* (XUA_USE_SW_PLL) */
|
||||||
#endif /* (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) */
|
#endif /* (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) */
|
||||||
|
|||||||
Reference in New Issue
Block a user