Merge branch 'work.namei' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[linux-2.6-microblaze.git] / sound / soc / qcom / lpass-platform.c
index 0df9481..f9df76d 100644 (file)
@@ -526,7 +526,7 @@ static int lpass_platform_pcmops_trigger(struct snd_soc_component *component,
                        return -EINVAL;
                }
 
-               ret = regmap_write(map, reg_irqclr, val_irqclr);
+               ret = regmap_update_bits(map, reg_irqclr, val_irqclr, val_irqclr);
                if (ret) {
                        dev_err(soc_runtime->dev, "error writing to irqclear reg: %d\n", ret);
                        return ret;
@@ -650,10 +650,11 @@ static irqreturn_t lpass_dma_interrupt_handler(
        struct lpass_variant *v = drvdata->variant;
        irqreturn_t ret = IRQ_NONE;
        int rv;
-       unsigned int reg = 0, val = 0;
+       unsigned int reg, val, mask;
        struct regmap *map;
        unsigned int dai_id = cpu_dai->driver->id;
 
+       mask = LPAIF_IRQ_ALL(chan);
        switch (dai_id) {
        case LPASS_DP_RX:
                map = drvdata->hdmiif_map;
@@ -676,8 +677,7 @@ static irqreturn_t lpass_dma_interrupt_handler(
        return -EINVAL;
        }
        if (interrupts & LPAIF_IRQ_PER(chan)) {
-
-               rv = regmap_write(map, reg, LPAIF_IRQ_PER(chan) | val);
+               rv = regmap_update_bits(map, reg, mask, (LPAIF_IRQ_PER(chan) | val));
                if (rv) {
                        dev_err(soc_runtime->dev,
                                "error writing to irqclear reg: %d\n", rv);
@@ -688,7 +688,7 @@ static irqreturn_t lpass_dma_interrupt_handler(
        }
 
        if (interrupts & LPAIF_IRQ_XRUN(chan)) {
-               rv = regmap_write(map, reg, LPAIF_IRQ_XRUN(chan) | val);
+               rv = regmap_update_bits(map, reg, mask, (LPAIF_IRQ_XRUN(chan) | val));
                if (rv) {
                        dev_err(soc_runtime->dev,
                                "error writing to irqclear reg: %d\n", rv);
@@ -700,7 +700,7 @@ static irqreturn_t lpass_dma_interrupt_handler(
        }
 
        if (interrupts & LPAIF_IRQ_ERR(chan)) {
-               rv = regmap_write(map, reg, LPAIF_IRQ_ERR(chan) | val);
+               rv = regmap_update_bits(map, reg, mask, (LPAIF_IRQ_ERR(chan) | val));
                if (rv) {
                        dev_err(soc_runtime->dev,
                                "error writing to irqclear reg: %d\n", rv);