[alsa-devel] [PATCH 1/3] OMAP: McBSP: Use textual values in DMA operating mode sysfs files

Eduardo Valentin eduardo.valentin at nokia.com
Tue Aug 25 08:25:47 CEST 2009


On Mon, Aug 24, 2009 at 04:45:50PM +0200, Jarkko Nikula wrote:
> On Mon, 24 Aug 2009 10:34:22 +0300
> Eduardo Valentin <eduardo.valentin at nokia.com> wrote:
> 
> > > Are there need for case insensitive check? The sysfs_streq is not.
> > 
> > Yes, sysfs_streq is not. There is no need for the insensitive, but
> > it can give user more options (ELEMENT or element)?
> > 
> > If using strcicmp, then strstrip would be required.
> > 
> > Just to reminder that strstrip does a wider job by cleaning any kind of
> > spaces. sysfs_streq deals only with 1 leading "\n".
> > 
> Sounds too fancy :-)
> 
> Here with sysfs_streq. Clean and simple.
> 
> ============================== CUT HERE ==============================
> From: Jarkko Nikula <jhnikula at gmail.com>
> Subject: [PATCH 1/3] OMAP: McBSP: Use textual values in DMA operating mode sysfs files
> 
> Use more descriptive than numerical value when showing and storing the
> McBSP DMA operating mode. Show function is using similar syntax than e.g.
> the led triggers so that all possible values for store function are
> printed but with current value surrounded with square brackets.
> 
> Signed-off-by: Jarkko Nikula <jhnikula at gmail.com>
> Cc: Peter Ujfalusi <peter.ujfalusi at nokia.com>
> Cc: Eduardo Valentin <eduardo.valentin at nokia.com>

Acked-by: Eduardo Valentin <eduardo.valentin at nokia.com>

> ---
>  arch/arm/plat-omap/mcbsp.c |   48 ++++++++++++++++++++++---------------------
>  1 files changed, 25 insertions(+), 23 deletions(-)
> 
> diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c
> index b63a720..ee60ab6 100644
> --- a/arch/arm/plat-omap/mcbsp.c
> +++ b/arch/arm/plat-omap/mcbsp.c
> @@ -1161,25 +1161,31 @@ static DEVICE_ATTR(prop, 0644, prop##_show, prop##_store);
>  THRESHOLD_PROP_BUILDER(max_tx_thres);
>  THRESHOLD_PROP_BUILDER(max_rx_thres);
>  
> +static const char *dma_op_modes[] = {
> +	"element", "threshold", "frame",
> +};
> +
>  static ssize_t dma_op_mode_show(struct device *dev,
>  			struct device_attribute *attr, char *buf)
>  {
>  	struct omap_mcbsp *mcbsp = dev_get_drvdata(dev);
> -	int dma_op_mode;
> +	int dma_op_mode, i = 0;
> +	ssize_t len = 0;
> +	const char * const *s;
>  
>  	spin_lock_irq(&mcbsp->lock);
>  	dma_op_mode = mcbsp->dma_op_mode;
>  	spin_unlock_irq(&mcbsp->lock);
>  
> -	return sprintf(buf, "current mode: %d\n"
> -			"possible mode values are:\n"
> -			"%d - %s\n"
> -			"%d - %s\n"
> -			"%d - %s\n",
> -			dma_op_mode,
> -			MCBSP_DMA_MODE_ELEMENT, "element mode",
> -			MCBSP_DMA_MODE_THRESHOLD, "threshold mode",
> -			MCBSP_DMA_MODE_FRAME, "frame mode");
> +	for (s = &dma_op_modes[i]; i < ARRAY_SIZE(dma_op_modes); s++, i++) {
> +		if (dma_op_mode == i)
> +			len += sprintf(buf + len, "[%s] ", *s);
> +		else
> +			len += sprintf(buf + len, "%s ", *s);
> +	}
> +	len += sprintf(buf + len, "\n");
> +
> +	return len;
>  }
>  
>  static ssize_t dma_op_mode_store(struct device *dev,
> @@ -1187,26 +1193,22 @@ static ssize_t dma_op_mode_store(struct device *dev,
>  				const char *buf, size_t size)
>  {
>  	struct omap_mcbsp *mcbsp = dev_get_drvdata(dev);
> -	unsigned long val;
> -	int status;
> +	const char * const *s;
> +	int i = 0;
>  
> -	status = strict_strtoul(buf, 0, &val);
> -	if (status)
> -		return status;
> +	for (s = &dma_op_modes[i]; i < ARRAY_SIZE(dma_op_modes); s++, i++)
> +		if (sysfs_streq(buf, *s))
> +			break;
>  
> -	spin_lock_irq(&mcbsp->lock);
> +	if (i == ARRAY_SIZE(dma_op_modes))
> +		return -EINVAL;
>  
> +	spin_lock_irq(&mcbsp->lock);
>  	if (!mcbsp->free) {
>  		size = -EBUSY;
>  		goto unlock;
>  	}
> -
> -	if (val > MCBSP_DMA_MODE_FRAME || val < MCBSP_DMA_MODE_ELEMENT) {
> -		size = -EINVAL;
> -		goto unlock;
> -	}
> -
> -	mcbsp->dma_op_mode = val;
> +	mcbsp->dma_op_mode = i;
>  
>  unlock:
>  	spin_unlock_irq(&mcbsp->lock);
> -- 
> 1.6.3.3

-- 
Eduardo Valentin


More information about the Alsa-devel mailing list