staging:iio:adc:ad799x use a table for frequency values rather than big switch.
authorJonathan Cameron <jic23@cam.ac.uk>
Fri, 30 Sep 2011 09:05:33 +0000 (10:05 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 3 Oct 2011 23:07:02 +0000 (16:07 -0700)
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Acked-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/iio/adc/ad799x_core.c

index 8a7dce0..ff902ea 100644 (file)
@@ -169,7 +169,15 @@ static int ad799x_read_raw(struct iio_dev *dev_info,
        }
        return -EINVAL;
 }
-
+static const unsigned int ad7998_frequencies[] = {
+       [AD7998_CYC_DIS]        = 0,
+       [AD7998_CYC_TCONF_32]   = 15625,
+       [AD7998_CYC_TCONF_64]   = 7812,
+       [AD7998_CYC_TCONF_128]  = 3906,
+       [AD7998_CYC_TCONF_512]  = 976,
+       [AD7998_CYC_TCONF_1024] = 488,
+       [AD7998_CYC_TCONF_2048] = 244,
+};
 static ssize_t ad799x_read_frequency(struct device *dev,
                                        struct device_attribute *attr,
                                        char *buf)
@@ -177,7 +185,7 @@ static ssize_t ad799x_read_frequency(struct device *dev,
        struct iio_dev *dev_info = dev_get_drvdata(dev);
        struct ad799x_state *st = iio_priv(dev_info);
 
-       int ret, len = 0;
+       int ret;
        u8 val;
        ret = ad799x_i2c_read8(st, AD7998_CYCLE_TMR_REG, &val);
        if (ret)
@@ -185,33 +193,7 @@ static ssize_t ad799x_read_frequency(struct device *dev,
 
        val &= AD7998_CYC_MASK;
 
-       switch (val) {
-       case AD7998_CYC_DIS:
-               len = sprintf(buf, "0\n");
-               break;
-       case AD7998_CYC_TCONF_32:
-               len = sprintf(buf, "15625\n");
-               break;
-       case AD7998_CYC_TCONF_64:
-               len = sprintf(buf, "7812\n");
-               break;
-       case AD7998_CYC_TCONF_128:
-               len = sprintf(buf, "3906\n");
-               break;
-       case AD7998_CYC_TCONF_256:
-               len = sprintf(buf, "1953\n");
-               break;
-       case AD7998_CYC_TCONF_512:
-               len = sprintf(buf, "976\n");
-               break;
-       case AD7998_CYC_TCONF_1024:
-               len = sprintf(buf, "488\n");
-               break;
-       case AD7998_CYC_TCONF_2048:
-               len = sprintf(buf, "244\n");
-               break;
-       }
-       return len;
+       return sprintf(buf, "%u\n", ad7998_frequencies[val]);
 }
 
 static ssize_t ad799x_write_frequency(struct device *dev,
@@ -223,7 +205,7 @@ static ssize_t ad799x_write_frequency(struct device *dev,
        struct ad799x_state *st = iio_priv(dev_info);
 
        long val;
-       int ret;
+       int ret, i;
        u8 t;
 
        ret = strict_strtol(buf, 10, &val);
@@ -237,36 +219,14 @@ static ssize_t ad799x_write_frequency(struct device *dev,
        /* Wipe the bits clean */
        t &= ~AD7998_CYC_MASK;
 
-       switch (val) {
-       case 15625:
-               t |= AD7998_CYC_TCONF_32;
-               break;
-       case 7812:
-               t |= AD7998_CYC_TCONF_64;
-               break;
-       case 3906:
-               t |= AD7998_CYC_TCONF_128;
-               break;
-       case 1953:
-               t |= AD7998_CYC_TCONF_256;
-               break;
-       case 976:
-               t |= AD7998_CYC_TCONF_512;
-               break;
-       case 488:
-               t |= AD7998_CYC_TCONF_1024;
-               break;
-       case 244:
-               t |= AD7998_CYC_TCONF_2048;
-               break;
-       case  0:
-               t |= AD7998_CYC_DIS;
-               break;
-       default:
+       for (i = 0; i < ARRAY_SIZE(ad7998_frequencies); i++)
+               if (val == ad7998_frequencies[i])
+                       break;
+       if (i == ARRAY_SIZE(ad7998_frequencies)) {
                ret = -EINVAL;
                goto error_ret_mutex;
        }
-
+       t |= i;
        ret = ad799x_i2c_write8(st, AD7998_CYCLE_TMR_REG, t);
 
 error_ret_mutex: