If we put the values which are looked up by regbit_map() directly in the
config array then we can remove the function.
And now when I look at it I don't understand why the array has to have
two dimensions. One does it, too. And while at it, the description says
that AIN0 … AIN7 can be used so allow this.

Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
---
 drivers/input/touchscreen/ti_am335x_tsc.c |   76 ++++++++---------------------
 1 file changed, 19 insertions(+), 57 deletions(-)

diff --git a/drivers/input/touchscreen/ti_am335x_tsc.c 
b/drivers/input/touchscreen/ti_am335x_tsc.c
index 7c97fc7..63cee57 100644
--- a/drivers/input/touchscreen/ti_am335x_tsc.c
+++ b/drivers/input/touchscreen/ti_am335x_tsc.c
@@ -37,15 +37,11 @@
 #define TSCADC_DELTA_X         15
 #define TSCADC_DELTA_Y         15
 
-/*
- * Refer to function regbit_map() to
- * map the values in the matrix.
- */
-static int config[4][4] = {
-               {1,     0,      1,      0},
-               {2,     3,      2,      3},
-               {4,     5,      4,      5},
-               {0,     6,      0,      6}
+static const int config_pins[] = {
+               XPP,
+               XNN,
+               YPP,
+               YNN,
 };
 
 struct titsc {
@@ -79,45 +75,11 @@ static void titsc_writel(struct titsc *tsc, unsigned int 
reg,
        regmap_write(tsc->mfd_tscadc->regmap_tscadc, reg, val);
 }
 
-/*
- * Each of the analog lines are mapped
- * with one or two register bits,
- * which can be either pulled high/low
- * depending on the value to be read.
- */
-static int regbit_map(int val)
-{
-       int map_bits = 0;
-
-       switch (val) {
-       case 1:
-               map_bits = XPP;
-               break;
-       case 2:
-               map_bits = XNP;
-               break;
-       case 3:
-               map_bits = XNN;
-               break;
-       case 4:
-               map_bits = YPP;
-               break;
-       case 5:
-               map_bits = YPN;
-               break;
-       case 6:
-               map_bits = YNN;
-               break;
-       }
-
-       return map_bits;
-}
-
 static int titsc_config_wires(struct titsc *ts_dev)
 {
        u32 analog_line[4];
        u32 wire_order[4];
-       int i, temp_bits;
+       int i, bit_cfg;
 
        for (i = 0; i < 4; i++) {
                /*
@@ -126,9 +88,9 @@ static int titsc_config_wires(struct titsc *ts_dev)
                 */
                analog_line[i] = (ts_dev->config_inp[i] & 0xF0) >> 4;
                wire_order[i] = ts_dev->config_inp[i] & 0x0F;
-               if (WARN_ON(analog_line[i] > 4))
+               if (WARN_ON(analog_line[i] > 7))
                                return -EINVAL;
-               if (WARN_ON(wire_order[i] > 4))
+               if (WARN_ON(wire_order[i] > ARRAY_SIZE(config_pins)))
                                return -EINVAL;
        }
 
@@ -138,27 +100,27 @@ static int titsc_config_wires(struct titsc *ts_dev)
 
                an_line = analog_line[i];
                wi_order = wire_order[i];
-               temp_bits = config[an_line][wi_order];
-               if (temp_bits == 0)
+               bit_cfg = config_pins[wi_order];
+               if (bit_cfg == 0)
                        return -EINVAL;
-               switch (wire_order[i]) {
+               switch (wi_order) {
                case 0:
-                       ts_dev->bit_xp = regbit_map(temp_bits);
-                       ts_dev->inp_xp = analog_line[i];
+                       ts_dev->bit_xp = bit_cfg;
+                       ts_dev->inp_xp = an_line;
                        break;
 
                case 1:
-                       ts_dev->bit_xn = regbit_map(temp_bits);
-                       ts_dev->inp_xn = analog_line[i];
+                       ts_dev->bit_xn = bit_cfg;
+                       ts_dev->inp_xn = an_line;
                        break;
 
                case 2:
-                       ts_dev->bit_yp = regbit_map(temp_bits);
-                       ts_dev->inp_yp = analog_line[i];
+                       ts_dev->bit_yp = bit_cfg;
+                       ts_dev->inp_yp = an_line;
                        break;
                case 3:
-                       ts_dev->bit_yn = regbit_map(temp_bits);
-                       ts_dev->inp_yn = analog_line[i];
+                       ts_dev->bit_yn = bit_cfg;
+                       ts_dev->inp_yn = an_line;
                        break;
                }
        }
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to