aboutsummaryrefslogtreecommitdiff
path: root/arch/arm
diff options
context:
space:
mode:
authorJarkko Nikula <jhnikula@gmail.com>2009-08-24 17:45:50 +0300
committerMark Brown <broonie@opensource.wolfsonmicro.com>2009-08-25 10:14:37 +0100
commit9b30050908fad96968497e73b88626056ea33c96 (patch)
tree80804d58312fa77ff45723fa0113b834f5ce210d /arch/arm
parent9f0f4ae570a148c76be6e86c959c8d4ed912fb1f (diff)
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@gmail.com> Cc: Peter Ujfalusi <peter.ujfalusi@nokia.com> Acked-by: Eduardo Valentin <eduardo.valentin@nokia.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/plat-omap/mcbsp.c48
1 files changed, 25 insertions, 23 deletions
diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c
index b63a7209b41..ee60ab68251 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);