diff options
author | Lars-Peter Clausen <lars@metafoo.de> | 2009-12-07 10:13:32 +0000 |
---|---|---|
committer | Lars-Peter Clausen <lars@metafoo.de> | 2009-12-07 10:13:32 +0000 |
commit | 6a2ea35b7998d44a3b8f5938c5a7603fef220a99 (patch) | |
tree | fcc276dd3b6feb096fa5c3a0f5618bd2342bf1da /target/linux/s3c24xx/files-2.6.31/drivers/input/touchscreen/ts_filter_chain.c | |
parent | a155e4fd53dbb4e53b2846eb8fb783833dcf07a0 (diff) | |
download | upstream-6a2ea35b7998d44a3b8f5938c5a7603fef220a99.tar.gz upstream-6a2ea35b7998d44a3b8f5938c5a7603fef220a99.tar.bz2 upstream-6a2ea35b7998d44a3b8f5938c5a7603fef220a99.zip |
Remove 2.6.31 support.
SVN-Revision: 18673
Diffstat (limited to 'target/linux/s3c24xx/files-2.6.31/drivers/input/touchscreen/ts_filter_chain.c')
-rw-r--r-- | target/linux/s3c24xx/files-2.6.31/drivers/input/touchscreen/ts_filter_chain.c | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/target/linux/s3c24xx/files-2.6.31/drivers/input/touchscreen/ts_filter_chain.c b/target/linux/s3c24xx/files-2.6.31/drivers/input/touchscreen/ts_filter_chain.c deleted file mode 100644 index e6bb382700..0000000000 --- a/target/linux/s3c24xx/files-2.6.31/drivers/input/touchscreen/ts_filter_chain.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Copyright (c) 2008,2009 Andy Green <andy@openmoko.com> - */ - -#include <linux/kernel.h> -#include <linux/device.h> - -#include <linux/touchscreen/ts_filter_chain.h> -#include <linux/touchscreen/ts_filter.h> - -/* - * Tux, would you like the following function in /lib? - * It helps us avoid silly code. - */ - -/** - * sptrlen - Count how many non-null pointers are in a pointer array - * @arr: The array of pointers - */ -static int sptrlen(const void *arr) -{ - /* All pointers have the same size. */ - const int **p = (const int **)arr; - int len = 0; - - while (*(p++)) - len++; - - return len; -} - - -struct ts_filter_chain { - /* All of the filters. */ - struct ts_filter **arr; - /* Filters that can propagate values in the chain. */ - struct ts_filter **pchain; - /* Length of the pchain array. */ - int pchain_len; - /* FIXME: Add a spinlock and use it. */ -}; - -struct ts_filter_chain *ts_filter_chain_create( - struct platform_device *pdev, - const struct ts_filter_chain_configuration conf[], - int count_coords) -{ - struct ts_filter_chain *c; - int count = 0; - int len; - - BUG_ON((count_coords < 1)); - BUG_ON(count_coords > MAX_TS_FILTER_COORDS); - - c = kzalloc(sizeof(struct ts_filter_chain), GFP_KERNEL); - if (!c) - goto create_err_1; - - len = (sptrlen(conf) + 1); - /* Memory for two null-terminated arrays of filters. */ - c->arr = kzalloc(2 * sizeof(struct ts_filter *) * len, GFP_KERNEL); - if (!c->arr) - goto create_err_1; - c->pchain = c->arr + len; - - while (conf->api) { - /* TODO: Can we get away with only sending pdev->dev? */ - struct ts_filter *f = - (conf->api->create)(pdev, conf->config, count_coords); - if (!f) { - dev_info(&pdev->dev, "Filter %d creation failed\n", - count); - goto create_err_2; - } - - f->api = conf->api; - c->arr[count++] = f; - - if (f->api->haspoint && f->api->getpoint && f->api->process) - c->pchain[c->pchain_len++] = f; - - conf++; - } - - dev_info(&pdev->dev, "%d filter(s) initialized\n", count); - - return c; - -create_err_2: - ts_filter_chain_destroy(c); /* Also frees c. */ -create_err_1: - dev_info(&pdev->dev, "Error in filter chain initialization\n"); - /* - * FIXME: Individual filters have to return errors this way. - * We only have to forward the errors we find. - */ - return ERR_PTR(-ENOMEM); -} -EXPORT_SYMBOL_GPL(ts_filter_chain_create); - -void ts_filter_chain_destroy(struct ts_filter_chain *c) -{ - if (c->arr) { - struct ts_filter **a = c->arr; - while (*a) { - ((*a)->api->destroy)(*a); - a++; - } - kfree(c->arr); - } - kfree(c); -} -EXPORT_SYMBOL_GPL(ts_filter_chain_destroy); - -void ts_filter_chain_clear(struct ts_filter_chain *c) -{ - struct ts_filter **a = c->arr; - - while (*a) { - if ((*a)->api->clear) - ((*a)->api->clear)(*a); - a++; - } -} -EXPORT_SYMBOL_GPL(ts_filter_chain_clear); - -static void ts_filter_chain_scale(struct ts_filter_chain *c, int *coords) -{ - struct ts_filter **a = c->arr; - while (*a) { - if ((*a)->api->scale) - ((*a)->api->scale)(*a, coords); - a++; - } -} - -int ts_filter_chain_feed(struct ts_filter_chain *c, int *coords) -{ - int len = c->pchain_len; - int i = len - 1; - - if (!c->pchain[0]) - return 1; /* Nothing to do. */ - - BUG_ON(c->pchain[0]->api->haspoint(c->pchain[0])); - - if (c->pchain[0]->api->process(c->pchain[0], coords)) - return -1; - - while (i >= 0 && i < len) { - if (c->pchain[i]->api->haspoint(c->pchain[i])) { - c->pchain[i]->api->getpoint(c->pchain[i], coords); - if (++i < len && - c->pchain[i]->api->process(c->pchain[i], coords)) - return -1; /* Error. */ - } else { - i--; - } - } - - if (i >= 0) { /* Same as i == len. */ - ts_filter_chain_scale(c, coords); - return 1; - } - - return 0; -} -EXPORT_SYMBOL_GPL(ts_filter_chain_feed); - |