On Thu, Nov 5, 2020 at 9:48 AM Nicolin Chen nicoleotsuka@gmail.com wrote:
On Mon, Nov 02, 2020 at 09:52:27AM +0800, Shengjiu Wang wrote:
The AUD2HTX is a digital module that provides a bridge between the Audio Subsystem and the HDMI RTX Subsystem. This module includes intermediate storage to queue SDMA transactions prior to being synchronized and passed to the HDMI RTX Subsystem over the Audio Link.
The AUD2HTX contains a DMA request routed to the SDMA module. This DMA request is controlled based on the watermark level in the 32-entry sample buffer.
Signed-off-by: Shengjiu Wang shengjiu.wang@nxp.com
Acked-by: Nicolin Chen nicoleotsuka@gmail.com
Despite some small comments inline.
+static int fsl_aud2htx_dai_probe(struct snd_soc_dai *cpu_dai) +{
struct fsl_aud2htx *aud2htx = dev_get_drvdata(cpu_dai->dev);
/* DMA request when number of entries < WTMK_LOW */
regmap_update_bits(aud2htx->regmap, AUD2HTX_CTRL_EXT,
AUD2HTX_CTRE_DT_MASK, 0);
/* Disable interrupts*/
regmap_update_bits(aud2htx->regmap, AUD2HTX_IRQ_MASK,
AUD2HTX_WM_HIGH_IRQ_MASK |
AUD2HTX_WM_LOW_IRQ_MASK |
AUD2HTX_OVF_MASK,
AUD2HTX_WM_HIGH_IRQ_MASK |
AUD2HTX_WM_LOW_IRQ_MASK |
AUD2HTX_OVF_MASK);
/* Configure watermark */
regmap_update_bits(aud2htx->regmap, AUD2HTX_CTRL_EXT,
AUD2HTX_CTRE_WL_MASK,
AUD2HTX_WTMK_LOW << AUD2HTX_CTRE_WL_SHIFT);
regmap_update_bits(aud2htx->regmap, AUD2HTX_CTRL_EXT,
AUD2HTX_CTRE_WH_MASK,
AUD2HTX_WTMK_HIGH << AUD2HTX_CTRE_WH_SHIFT);
If there isn't a hard requirement from hardware, feels better to combine all the writes to AUD2HTX_CTRL_EXT into one single MMIO.
ok, will update it.
+static irqreturn_t fsl_aud2htx_isr(int irq, void *dev_id) +{
return IRQ_HANDLED;
Empty isr? Perhaps can drop the request_irq() at all?
I'd like to keep this for future enhancement, what do you think?
+static int fsl_aud2htx_probe(struct platform_device *pdev) +{
struct fsl_aud2htx *aud2htx;
struct resource *res;
void __iomem *regs;
int ret, irq;
aud2htx = devm_kzalloc(&pdev->dev, sizeof(*aud2htx), GFP_KERNEL);
if (!aud2htx)
return -ENOMEM;
aud2htx->pdev = pdev;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(regs)) {
dev_err(&pdev->dev, "failed ioremap\n");
return PTR_ERR(regs);
}
aud2htx->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
&fsl_aud2htx_regmap_config);
if (IS_ERR(aud2htx->regmap)) {
dev_err(&pdev->dev, "failed to init regmap");
return PTR_ERR(aud2htx->regmap);
}
irq = platform_get_irq(pdev, 0);
if (irq < 0) {
dev_err(&pdev->dev, "no irq for node %s\n",
dev_name(&pdev->dev));
dev_err() already prints dev_name, so not necessary to print again.
ok, will update it
best regards wang shengjiu