ASoC: qcom: apq8016: set the correct max register for regmap
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Thu, 11 Feb 2016 12:18:27 +0000 (12:18 +0000)
committerMark Brown <broonie@kernel.org>
Fri, 19 Feb 2016 16:20:18 +0000 (01:20 +0900)
Now that we are ready to access wrdma registers, set the max register
and other regmap related configs to use correct values.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Acked-by: Kenneth Westfield <kwestfie@codeaurora.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/qcom/lpass-cpu.c

index e5101e0d2d372262f8ecf7d0498240cba971b86f..91774fc87fcce4b12368f3422c9fba73ef7ccc0f 100644 (file)
@@ -294,6 +294,17 @@ static bool lpass_cpu_regmap_writeable(struct device *dev, unsigned int reg)
                        return true;
        }
 
+       for (i = 0; i < v->wrdma_channels; ++i) {
+               if (reg == LPAIF_WRDMACTL_REG(v, i + v->wrdma_channel_start))
+                       return true;
+               if (reg == LPAIF_WRDMABASE_REG(v, i + v->wrdma_channel_start))
+                       return true;
+               if (reg == LPAIF_WRDMABUFF_REG(v, i + v->wrdma_channel_start))
+                       return true;
+               if (reg == LPAIF_WRDMAPER_REG(v, i + v->wrdma_channel_start))
+                       return true;
+       }
+
        return false;
 }
 
@@ -327,6 +338,19 @@ static bool lpass_cpu_regmap_readable(struct device *dev, unsigned int reg)
                        return true;
        }
 
+       for (i = 0; i < v->wrdma_channels; ++i) {
+               if (reg == LPAIF_WRDMACTL_REG(v, i + v->wrdma_channel_start))
+                       return true;
+               if (reg == LPAIF_WRDMABASE_REG(v, i + v->wrdma_channel_start))
+                       return true;
+               if (reg == LPAIF_WRDMABUFF_REG(v, i + v->wrdma_channel_start))
+                       return true;
+               if (reg == LPAIF_WRDMACURR_REG(v, i + v->wrdma_channel_start))
+                       return true;
+               if (reg == LPAIF_WRDMAPER_REG(v, i + v->wrdma_channel_start))
+                       return true;
+       }
+
        return false;
 }
 
@@ -344,6 +368,10 @@ static bool lpass_cpu_regmap_volatile(struct device *dev, unsigned int reg)
                if (reg == LPAIF_RDMACURR_REG(v, i))
                        return true;
 
+       for (i = 0; i < v->wrdma_channels; ++i)
+               if (reg == LPAIF_WRDMACURR_REG(v, i + v->wrdma_channel_start))
+                       return true;
+
        return false;
 }
 
@@ -398,8 +426,9 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev)
                return PTR_ERR((void const __force *)drvdata->lpaif);
        }
 
-       lpass_cpu_regmap_config.max_register = LPAIF_RDMAPER_REG(variant,
-                                               variant->rdma_channels);
+       lpass_cpu_regmap_config.max_register = LPAIF_WRDMAPER_REG(variant,
+                                               variant->wrdma_channels +
+                                               variant->wrdma_channel_start);
 
        drvdata->lpaif_map = devm_regmap_init_mmio(&pdev->dev, drvdata->lpaif,
                        &lpass_cpu_regmap_config);