Hi, This is a fairly substantial driver to get through, but here are some initial comments on some of the simpler stuff: On Wed, Dec 19, 2007 at 06:03:09PM -0600, Timur Tabi wrote: > This patch adds ALSA SoC device drivers for the Freescale MPC8610 SoC > and the MPC8610-HPCD reference board. [...] > diff --git a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c > index 6390895..6e1bde3 100644 > --- a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c > +++ b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c > @@ -34,9 +34,27 @@ > > #include <asm/mpic.h> > > +#include <asm/of_platform.h> > #include <sysdev/fsl_pci.h> > #include <sysdev/fsl_soc.h> > > +static struct of_device_id mpc8610_ids[] = { > + { .type = "soc", }, > + {} Please scan based on compatible instead of device_type. > diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig > new file mode 100644 > index 0000000..4a5bbd2 > --- /dev/null > +++ b/sound/soc/fsl/Kconfig > @@ -0,0 +1,21 @@ > +menu "ALSA SoC audio for Freescale SOCs" > + > +config SND_SOC_MPC8610 > + bool "ALSA SoC support for the MPC8610 SOC" > + depends on SND_SOC #&& MPC8610_HPCD > + default y #if MPC8610 > + help > + Say Y if you want to add support for codecs attached to the SSI > + device on an MPC8610. Don't default configs to 'y'. Also, what's with the commented-out dependencies and if? > +config SND_SOC_MPC8610_HPCD > + # ALSA SoC support for Freescale MPC8610HPCD > + bool "ALSA SoC support for the Freescale MPC8610 HPCD board" > + depends on SND_SOC_MPC8610 > + select SND_SOC_CS4270 > + select SND_SOC_CS4270_VD33_ERRATA > + default y #if MPC8610_HPCD > + help > + Say Y if you want to enable audio on the Freescale MPC8610 HPCD. Same here w.r.t. defaults and dependencies. > diff --git a/sound/soc/fsl/fsl_dma.c b/sound/soc/fsl/fsl_dma.c > new file mode 100644 > index 0000000..6b86be0 > --- /dev/null > +++ b/sound/soc/fsl/fsl_dma.c > @@ -0,0 +1,819 @@ > +/* > + * Freescale DMA ALSA SoC PCM driver > + * > + * Author: Timur Tabi <timur@xxxxxxxxxxxxx> > + * > + * Copyright 2007 Freescale Semiconductor, Inc. This file is licensed under > + * the terms of the GNU General Public License version 2. This program > + * is licensed "as is" without any warranty of any kind, whether express > + * or implied. > + * > + * This driver implements ASoC support for the Elo DMA controller, which is > + * the DMA controller on Freescale 83xx, 85xx, and 86xx SOCs. In ALSA terms, > + * the PCM driver is what handles the DMA buffer. > + */ > + > +#include <linux/module.h> > +#include <linux/init.h> > +#include <linux/platform_device.h> > +#include <linux/dma-mapping.h> > +#include <linux/interrupt.h> > +#include <linux/delay.h> > + > +#include <sound/driver.h> > +#include <sound/core.h> > +#include <sound/pcm.h> > +#include <sound/pcm_params.h> > +#include <sound/soc.h> > + > +#include <asm/io.h> > + > +#include "fsl_dma.h" > + > +/* > + * The formats that the DMA controller supports, which is anything > + * that is 8, 16, or 32 bits. > + */ > +#define FSLDMA_PCM_FORMATS (SNDRV_PCM_FMTBIT_S8 | \ > + SNDRV_PCM_FMTBIT_U8 | \ > + SNDRV_PCM_FMTBIT_S16_LE | \ > + SNDRV_PCM_FMTBIT_S16_BE | \ > + SNDRV_PCM_FMTBIT_U16_LE | \ > + SNDRV_PCM_FMTBIT_U16_BE | \ > + SNDRV_PCM_FMTBIT_S24_LE | \ > + SNDRV_PCM_FMTBIT_S24_BE | \ > + SNDRV_PCM_FMTBIT_U24_LE | \ > + SNDRV_PCM_FMTBIT_U24_BE | \ > + SNDRV_PCM_FMTBIT_S32_LE | \ > + SNDRV_PCM_FMTBIT_S32_BE | \ > + SNDRV_PCM_FMTBIT_U32_LE | \ > + SNDRV_PCM_FMTBIT_U32_BE) > + > +#define FSLDMA_PCM_RATES (SNDRV_PCM_RATE_5512 | SNDRV_PCM_RATE_8000_192000 | \ > + SNDRV_PCM_RATE_CONTINUOUS) > + > +/* DMA global data. This structure is used by fsl_dma_open() to determine > + * which DMA channels to assign to a substream. Unfortunately, ASoC V1 does > + * not allow the machine driver to provide this information to the PCM > + * driver in advance, and there's no way to differentiate between the two > + * DMA controllers. So for now, this driver only supports one SSI device > + * using two DMA channels. We cannot support multiple DMA devices. > + * > + * ssi_stx_phys: bus address of SSI STX register > + * ssi_srx_phys: bus address of SSI SRX register > + * dma_channel: pointer to the DMA channel's registers > + * irq: IRQ for this DMA channel > + * assigned: set to 1 if that DMA channel is assigned to a substream > + */ This goes for the whole patch: You've got good documentation, but it's not in docbook format. Please reformat it since it should be a pretty simple thing to do. > +/* > + * Initialize this PCM driver. > + * > + * This function is called when the codec driver calls snd_soc_new_pcms(), > + * once for each .dai_link in the machine driver's snd_soc_machine > + * structure. > + */ > +static int fsl_dma_new(struct snd_card *card, struct snd_soc_codec_dai *dai, > + struct snd_pcm *pcm) > +{ > + static u64 fsl_dma_dmamask = 0xffffffff; > + int ret; > + > + if (!card->dev->dma_mask) > + card->dev->dma_mask = &fsl_dma_dmamask; I haven't read how your channel allocation works, but providing a pointer to a local static variable is a bit fishy no matter what. > + /* Find the DMA channels to use. For now, we always use the first DMA > + controller. */ > + for_each_compatible_node(dma_np, NULL, "fsl,mpc8610-dma") { > + iprop = of_get_property(dma_np, "cell-index", NULL); > + if (iprop && (*iprop == 0)) { > + of_node_put(dma_np); > + break; > + } > + } Do you ever anticipate having other dma users on the system, such as memcpy offload? You'll probably need allocation support for channels when that day comes (I ended up writing a simple library for dma channel management for that very reason on my platform). -Olof _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel