MLK-18655-6 sound: asoc: correct hwvad bug
Correct hwvad initialization procedure bugs: - VADCHSEL was set to N instead of ((1 << N) - 1) - IE set before ERIE - voice detected interrupt line was used wrong Signed-off-by: Cosmin-Gabriel Samoila <cosmin.samoila@nxp.com> Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>pull/10/head
parent
272d3164f5
commit
fa486c8e3d
|
@ -730,17 +730,6 @@ static int configure_hwvad_interrupts(struct device *dev,
|
|||
u32 vadie_reg = enable ? MICFIL_VAD0_CTRL1_IE : 0;
|
||||
u32 vaderie_reg = enable ? MICFIL_VAD0_CTRL1_ERIE : 0;
|
||||
|
||||
/* Voice Activity Detector Interruption Enable */
|
||||
ret = regmap_update_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1,
|
||||
MICFIL_VAD0_CTRL1_IE_MASK,
|
||||
vadie_reg);
|
||||
if (ret) {
|
||||
dev_err(dev,
|
||||
"Failed to set/clear VADIE in CTRL1_VAD0 [%d]\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Voice Activity Detector Error Interruption Enable */
|
||||
ret = regmap_update_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1,
|
||||
MICFIL_VAD0_CTRL1_ERIE_MASK,
|
||||
|
@ -752,6 +741,17 @@ static int configure_hwvad_interrupts(struct device *dev,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* Voice Activity Detector Interruption Enable */
|
||||
ret = regmap_update_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1,
|
||||
MICFIL_VAD0_CTRL1_IE_MASK,
|
||||
vadie_reg);
|
||||
if (ret) {
|
||||
dev_err(dev,
|
||||
"Failed to set/clear VADIE in CTRL1_VAD0 [%d]\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1026,7 +1026,7 @@ static int init_hwvad_envelope_mode(struct device *dev)
|
|||
|
||||
/* Voice Activity Detector Reset */
|
||||
ret = regmap_update_bits(micfil->regmap, REG_MICFIL_VAD0_CTRL1,
|
||||
MICFIL_VAD0_CTRL1_RST_SHIFT,
|
||||
MICFIL_VAD0_CTRL1_RST_MASK,
|
||||
MICFIL_VAD0_CTRL1_RST);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to set VADRST in CTRL1_VAD0 [%d]\n", ret);
|
||||
|
@ -1670,13 +1670,12 @@ static irqreturn_t hwvad_isr(int irq, void *devid)
|
|||
int old_flag;
|
||||
|
||||
regmap_read(micfil->regmap, REG_MICFIL_VAD0_STAT, &vad0_reg);
|
||||
|
||||
old_flag = atomic_cmpxchg(&micfil->voice_detected, 0, 1);
|
||||
if ((vad0_reg & MICFIL_VAD0_STAT_IF_MASK) && !old_flag) {
|
||||
dev_info(dev, "Detected voice\n");
|
||||
|
||||
/* Write 1 to clear */
|
||||
regmap_update_bits(micfil->regmap, REG_MICFIL_VAD0_STAT,
|
||||
regmap_write_bits(micfil->regmap, REG_MICFIL_VAD0_STAT,
|
||||
MICFIL_VAD0_STAT_IF_MASK,
|
||||
MICFIL_VAD0_STAT_IF);
|
||||
|
||||
|
@ -1767,9 +1766,9 @@ static int enable_hwvad(struct device *dev)
|
|||
* suspend function will mark regmap as cache only
|
||||
* and reads/writes in volatile regs will fail
|
||||
*/
|
||||
regcache_cache_only(micfil->regmap, false);
|
||||
regcache_mark_dirty(micfil->regmap);
|
||||
regcache_sync(micfil->regmap);
|
||||
regcache_cache_only(micfil->regmap, false);
|
||||
|
||||
/* clear voice detected flag */
|
||||
atomic_set(&micfil->voice_detected, 0);
|
||||
|
@ -1967,9 +1966,9 @@ static int fsl_micfil_probe(struct platform_device *pdev)
|
|||
if (of_property_read_bool(np, "fsl,shared-interrupt"))
|
||||
irqflag = IRQF_SHARED;
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev, irq, micfil_isr,
|
||||
hwvad_isr, irqflag,
|
||||
micfil->name, micfil);
|
||||
ret = devm_request_irq(&pdev->dev, irq,
|
||||
hwvad_isr, irqflag,
|
||||
micfil->name, micfil);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to claim irq %u\n", irq);
|
||||
return ret;
|
||||
|
|
|
@ -121,7 +121,7 @@
|
|||
#define MICFIL_VAD0_CTRL1_CHSEL_WIDTH 3
|
||||
#define MICFIL_VAD0_CTRL1_CHSEL_MASK ((BIT(MICFIL_VAD0_CTRL1_CHSEL_WIDTH) - 1) \
|
||||
<< MICFIL_VAD0_CTRL1_CHSEL_SHIFT)
|
||||
#define MICFIL_VAD0_CTRL1_CHSEL(v) (((v) << MICFIL_VAD0_CTRL1_CHSEL_SHIFT) \
|
||||
#define MICFIL_VAD0_CTRL1_CHSEL(v) ((((1 << (v)) - 1) << MICFIL_VAD0_CTRL1_CHSEL_SHIFT) \
|
||||
& MICFIL_VAD0_CTRL1_CHSEL_MASK)
|
||||
#define MICFIL_VAD0_CTRL1_CICOSR_SHIFT 16
|
||||
#define MICFIL_VAD0_CTRL1_CICOSR_WIDTH 4
|
||||
|
@ -145,6 +145,7 @@
|
|||
#define MICFIL_VAD0_CTRL1_IE_MASK BIT(MICFIL_VAD0_CTRL1_IE_SHIFT)
|
||||
#define MICFIL_VAD0_CTRL1_IE BIT(MICFIL_VAD0_CTRL1_IE_SHIFT)
|
||||
#define MICFIL_VAD0_CTRL1_RST_SHIFT 1
|
||||
#define MICFIL_VAD0_CTRL1_RST_MASK BIT(MICFIL_VAD0_CTRL1_RST_SHIFT)
|
||||
#define MICFIL_VAD0_CTRL1_RST BIT(MICFIL_VAD0_CTRL1_RST_SHIFT)
|
||||
#define MICFIL_VAD0_CTRL1_EN_SHIFT 0
|
||||
#define MICFIL_VAD0_CTRL1_EN_MASK BIT(MICFIL_VAD0_CTRL1_EN_SHIFT)
|
||||
|
|
Loading…
Reference in New Issue