|
@@ -173,6 +173,10 @@ static inline int omap_mcpdm_active(struct omap_mcpdm *mcpdm)
|
|
*/
|
|
*/
|
|
static void omap_mcpdm_open_streams(struct omap_mcpdm *mcpdm)
|
|
static void omap_mcpdm_open_streams(struct omap_mcpdm *mcpdm)
|
|
{
|
|
{
|
|
|
|
+ u32 ctrl = omap_mcpdm_read(mcpdm, MCPDM_REG_CTRL);
|
|
|
|
+
|
|
|
|
+ omap_mcpdm_write(mcpdm, MCPDM_REG_CTRL, ctrl | MCPDM_WD_EN);
|
|
|
|
+
|
|
omap_mcpdm_write(mcpdm, MCPDM_REG_IRQENABLE_SET,
|
|
omap_mcpdm_write(mcpdm, MCPDM_REG_IRQENABLE_SET,
|
|
MCPDM_DN_IRQ_EMPTY | MCPDM_DN_IRQ_FULL |
|
|
MCPDM_DN_IRQ_EMPTY | MCPDM_DN_IRQ_FULL |
|
|
MCPDM_UP_IRQ_EMPTY | MCPDM_UP_IRQ_FULL);
|
|
MCPDM_UP_IRQ_EMPTY | MCPDM_UP_IRQ_FULL);
|
|
@@ -258,12 +262,9 @@ static int omap_mcpdm_dai_startup(struct snd_pcm_substream *substream,
|
|
|
|
|
|
mutex_lock(&mcpdm->mutex);
|
|
mutex_lock(&mcpdm->mutex);
|
|
|
|
|
|
- if (!dai->active) {
|
|
|
|
- u32 ctrl = omap_mcpdm_read(mcpdm, MCPDM_REG_CTRL);
|
|
|
|
-
|
|
|
|
- omap_mcpdm_write(mcpdm, MCPDM_REG_CTRL, ctrl | MCPDM_WD_EN);
|
|
|
|
|
|
+ if (!dai->active)
|
|
omap_mcpdm_open_streams(mcpdm);
|
|
omap_mcpdm_open_streams(mcpdm);
|
|
- }
|
|
|
|
|
|
+
|
|
mutex_unlock(&mcpdm->mutex);
|
|
mutex_unlock(&mcpdm->mutex);
|
|
|
|
|
|
return 0;
|
|
return 0;
|