On 11/06/2024 11:47, Piotr Wojtaszczyk wrote: > This driver was ported from an old version in linux 2.6.27 and adjusted > for the new ASoC framework and DMA API. > > Signed-off-by: Piotr Wojtaszczyk <piotr.wojtaszczyk@xxxxxxxxxxx> > --- > Changes for v2: > - Coding Style cleanup > - Use dev_err_probe() for error handling in probe function > - Removed unneded err_clk_disable label > - Removed empty function > - Droped of_match_ptr in lpc32xx_i2s_match DT match table > - ASoC struct adjustmes for the latest 6.10-rc3 kernel > > MAINTAINERS | 7 + 1: > arch/arm/boot/dts/nxp/lpc/lpc32xx.dtsi | 4 + 2: > arch/arm/mach-lpc32xx/phy3250.c | 60 ++++ 3: > sound/soc/fsl/Kconfig | 7 + > sound/soc/fsl/Makefile | 2 + > sound/soc/fsl/lpc3xxx-i2s.c | 383 +++++++++++++++++++++++++ > sound/soc/fsl/lpc3xxx-i2s.h | 94 ++++++ > sound/soc/fsl/lpc3xxx-pcm.c | 75 +++++ Three separate subsystems, so three separate patches. > 8 files changed, 632 insertions(+) > create mode 100644 sound/soc/fsl/lpc3xxx-i2s.c > create mode 100644 sound/soc/fsl/lpc3xxx-i2s.h > create mode 100644 sound/soc/fsl/lpc3xxx-pcm.c > > diff --git a/MAINTAINERS b/MAINTAINERS > index aacccb376c28..7616f61d6327 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -8909,6 +8909,13 @@ S: Maintained > F: sound/soc/fsl/fsl* > F: sound/soc/fsl/imx* > > +FREESCALE SOC LPC32XX SOUND DRIVERS > +M: Piotr Wojtaszczyk <piotr.wojtaszczyk@xxxxxxxxxxx> > +L: alsa-devel@xxxxxxxxxxxxxxxx (moderated for non-subscribers) > +L: linuxppc-dev@xxxxxxxxxxxxxxxx > +S: Orphan Not sure if we want it in the first place. Why would we like to support orphaned drivers? Sorry, if there is no one to care about it, then it should not be merged. ... > + > +static int lpc32xx_i2s_probe(struct platform_device *pdev) > +{ > + struct device *dev = &pdev->dev; > + struct lpc3xxx_i2s_info *i2s_info_p; > + struct resource *res; > + void __iomem *iomem; > + int ret; > + > + i2s_info_p = devm_kzalloc(dev, sizeof(*i2s_info_p), GFP_KERNEL); > + if (!i2s_info_p) > + return -ENOMEM; > + > + platform_set_drvdata(pdev, i2s_info_p); > + i2s_info_p->dev = dev; > + > + iomem = devm_platform_get_and_ioremap_resource(pdev, 0, &res); > + if (IS_ERR(iomem)) > + return dev_err_probe(dev, PTR_ERR(iomem), "Can't map registers\n"); > + > + i2s_info_p->regs = devm_regmap_init_mmio(dev, iomem, &lpc32xx_i2s_regconfig); > + if (IS_ERR(i2s_info_p->regs)) > + return dev_err_probe(dev, PTR_ERR(i2s_info_p->regs), > + "failed to init register map: %d\n", ret); > + > + i2s_info_p->clk = devm_clk_get(dev, "i2s_clk"); > + if (IS_ERR(i2s_info_p->clk)) > + return dev_err_probe(dev, PTR_ERR(i2s_info_p->clk), "Can't get clock\n"); > + > + i2s_info_p->clkrate = clk_get_rate(i2s_info_p->clk); > + if (i2s_info_p->clkrate == 0) > + return dev_err_probe(dev, -EINVAL, "Invalid returned clock rate\n"); > + > + mutex_init(&i2s_info_p->lock); > + > + ret = devm_snd_soc_register_component(dev, &lpc32xx_i2s_component, > + &lpc3xxx_i2s_dai_driver, 1); > + if (ret) > + return dev_err_probe(dev, ret, "Can't register cpu_dai component\n"); > + > + i2s_info_p->playback_dma_config.addr = (dma_addr_t)(res->start + I2S_TX_FIFO); > + i2s_info_p->playback_dma_config.maxburst = 4; > + i2s_info_p->playback_dma_config.filter_data = "i2s-tx"; > + i2s_info_p->capture_dma_config.addr = (dma_addr_t)(res->start + I2S_RX_FIFO); > + i2s_info_p->capture_dma_config.maxburst = 4; > + i2s_info_p->capture_dma_config.filter_data = "i2s-rx"; > + > + ret = lpc3xxx_pcm_register(pdev); > + if (ret) > + return dev_err_probe(dev, ret, "Can't register pcm component\n"); > + > + return 0; > +} > + > +static int lpc32xx_i2s_remove(struct platform_device *pdev) > +{ > + return 0; > +} You did not respond to comment about this. Drop. Best regards, Krzysztof