[PATCH] EP93xx: Document DMA M2P API

Mika Westerberg mika.westerberg at iki.fi
Mon Oct 18 03:43:35 EDT 2010


On Mon, Oct 18, 2010 at 01:50:29PM +1300, Ryan Mallon wrote:
> Add documentation for the EP93xx DMA memory to peripheral/peripheral to
> memory API.

This is a good thing but I think that you might want to use standard
kernel-doc style comments (see Documentation/kernel-doc-nano-HOWTO.txt)
so that we can get nicely formatted document of the DMA API when
'make *docs' is run.

> Signed-off-by: Ryan Mallon <ryan at bluewatersys.com>
> ---
> 
> diff --git a/arch/arm/mach-ep93xx/include/mach/dma.h b/arch/arm/mach-ep93xx/include/mach/dma.h
> index 3a5961d..66b1555 100644
> --- a/arch/arm/mach-ep93xx/include/mach/dma.h
> +++ b/arch/arm/mach-ep93xx/include/mach/dma.h
> @@ -1,6 +1,11 @@
> -/*
> - * arch/arm/mach-ep93xx/include/mach/dma.h
> - */
> +/**
> + * EP93xx DMA M2P memory to peripheral and peripheral to memory engine

For this you need to use something like:

/**
 * DOC: EP93xx DMA M2P memory to peripheral and peripheral to memory engine
 *

...

> + *
> + * DMA M2P channels are available for audio, UARTs and IrDA. See chapter 10 of
> + * the EP93xx users guide for full details on the DMA M2P engine.
> + * See sound/soc/ep93xx/ep93xx-pcm.c for an example use of the DMA M2P code.
> + *
> + */ 
>  
>  #ifndef __ASM_ARCH_DMA_H
>  #define __ASM_ARCH_DMA_H
> @@ -8,12 +13,29 @@
>  #include <linux/list.h>
>  #include <linux/types.h>
>  
> +/**
> + * Information about a buffer to be transferred using the DMA M2P engine

/**
 * struct ep93xx_dma_buffer - buffer to be transferred using the DMA M2P engine

> + *
> + * @list: Entry in DMA buffer list
> + * @bus_addr: Physical address of the buffer
> + * @size: Size of the buffer in bytes
> + */
>  struct ep93xx_dma_buffer {
>  	struct list_head	list;
>  	u32			bus_addr;
>  	u16			size;
>  };
>  
> +/**
> + * Information about a DMA M2P client

ditto

> + *
> + * @name: Unique name for this client
> + * @flags: Client flags
> + * @cookie: User data to pass to callback functions
> + * @buffer_started: Non NULL function to call when a transfer is started
> + * @buffer_finished: Non NULL function to call when a transfer is completed
> + * @channel: Internal DMA M2P channel pointer. Do not modify
> + */
>  struct ep93xx_dma_m2p_client {
>  	char			*name;
>  	u8			flags;
> @@ -28,6 +50,9 @@ struct ep93xx_dma_m2p_client {
>  	void			*channel;
>  };
>  
> +/**

Don't use /** here as this is just a normal comment.

> + * DMA M2P ports
> + */
>  #define EP93XX_DMA_M2P_PORT_I2S1	0x00
>  #define EP93XX_DMA_M2P_PORT_I2S2	0x01
>  #define EP93XX_DMA_M2P_PORT_AAC1	0x02
> @@ -39,18 +64,66 @@ struct ep93xx_dma_m2p_client {
>  #define EP93XX_DMA_M2P_PORT_UART3	0x08
>  #define EP93XX_DMA_M2P_PORT_IRDA	0x09
>  #define EP93XX_DMA_M2P_PORT_MASK	0x0f
> -#define EP93XX_DMA_M2P_TX		0x00
> -#define EP93XX_DMA_M2P_RX		0x10
> -#define EP93XX_DMA_M2P_ABORT_ON_ERROR	0x20
> -#define EP93XX_DMA_M2P_IGNORE_ERROR	0x40
> -#define EP93XX_DMA_M2P_ERROR_MASK	0x60
>  
> +/**

ditto

> + * DMA M2P client flags
> + */
> +#define EP93XX_DMA_M2P_TX		0x00	/* Memory to peripheral */
> +#define EP93XX_DMA_M2P_RX		0x10	/* Peripheral to memory */
> +
> +/**

ditto

> + * DMA M2P client error handling flags. See the EP93xx users guide
> + * documentation on the DMA M2P CONTROL register for more details
> + */
> +#define EP93XX_DMA_M2P_ABORT_ON_ERROR	0x20	/* Abort on peripheral error */
> +#define EP93XX_DMA_M2P_IGNORE_ERROR	0x40	/* Ignore peripheral errors */
> +#define EP93XX_DMA_M2P_ERROR_MASK	0x60	/* Mask of error bits */
> +
> +/**
> + * Register a client with the DMA M2P subsystem. The DMA M2P subsystem

/**
 * ep93xx_dma_m2p_client_register - register a client ..


Also you might want to put these function comments in the .c file (so they
are as close the actual code as possible).

Regards,
MW

> + * allocates a channel and an interrupt line for the DMA client.
> + *
> + * @m2p: Client information to register
> + * returns 0 on success
> + */
>  int  ep93xx_dma_m2p_client_register(struct ep93xx_dma_m2p_client *m2p);
> +
> +/**
> + * Unregister a DMA M2P subsystem. Any transfers currently in progress will be
> + * completed in hardware, but ignored in software.
> + *
> + * @m2p: Client to unregister
> + */
>  void ep93xx_dma_m2p_client_unregister(struct ep93xx_dma_m2p_client *m2p);
> +
> +/**
> + * Submit a DMA M2P transfer. If the current or next transfer positions are
> + * free on the M2P client then the transfer is started immediately. If not,
> + * the transfer is added to the list of pending transfers. This function must
> + * not be called from the buffer_finished callback for an M2P channel.
> + *
> + * @m2p: DMA Client to submit the transfer on
> + * @buf: DMA Buffer to submit
> + */
>  void ep93xx_dma_m2p_submit(struct ep93xx_dma_m2p_client *m2p,
>  			   struct ep93xx_dma_buffer *buf);
> +
> +/**
> + * Put a DMA transfer on the pending list for an M2P channel. This function
> + * must only be called from the buffer_finished callback for an M2P channel.
> + *
> + * @m2p: DMA Client to submit the transfer on
> + * @buf: DMA Buffer to submit 
> + */
>  void ep93xx_dma_m2p_submit_recursive(struct ep93xx_dma_m2p_client *m2p,
>  				     struct ep93xx_dma_buffer *buf);
> +
> +/**
> + * Flush all pending transfers on a DMA M2P client. Any transfers currently
> + * in progress will be completed in hardware, but ignored in software.
> + *
> + * @m2p: DMA client to flush transfers on
> + */
>  void ep93xx_dma_m2p_flush(struct ep93xx_dma_m2p_client *m2p);
>  
>  #endif /* __ASM_ARCH_DMA_H */



More information about the linux-arm-kernel mailing list