diff options
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/ts_filter.h | 16 | ||||
-rw-r--r-- | include/linux/ts_filter_linear.h | 64 |
2 files changed, 75 insertions, 5 deletions
diff --git a/include/linux/ts_filter.h b/include/linux/ts_filter.h index 715f1badbf4..167104482dd 100644 --- a/include/linux/ts_filter.h +++ b/include/linux/ts_filter.h @@ -7,6 +7,8 @@ * (c) 2008 Andy Green <andy@openmoko.com> */ +#include <linux/platform_device.h> + #define MAX_TS_FILTER_CHAIN 4 /* max filters you can chain up */ #define MAX_TS_FILTER_COORDS 3 /* X, Y and Z (pressure) */ @@ -15,8 +17,9 @@ struct ts_filter; /* operations that a filter can perform */ struct ts_filter_api { - struct ts_filter * (*create)(void *config, int count_coords); - void (*destroy)(struct ts_filter *filter); + struct ts_filter * (*create)(struct platform_device *pdev, void *config, + int count_coords); + void (*destroy)(struct platform_device *pdev, struct ts_filter *filter); void (*clear)(struct ts_filter *filter); int (*process)(struct ts_filter *filter, int *coords); void (*scale)(struct ts_filter *filter, int *coords); @@ -41,10 +44,13 @@ struct ts_filter { * array and fills in ->next pointers to create the chain */ -extern int ts_filter_create_chain(struct ts_filter_api **api, void **config, - struct ts_filter **list, int count_coords); +extern int ts_filter_create_chain(struct platform_device *pdev, + struct ts_filter_api **api, void **config, + struct ts_filter **list, int count_coords); /* helper to destroy a whole chain from the list of filter pointers */ -extern void ts_filter_destroy_chain(struct ts_filter **list); +extern void ts_filter_destroy_chain(struct platform_device *pdev, + struct ts_filter **list); + #endif diff --git a/include/linux/ts_filter_linear.h b/include/linux/ts_filter_linear.h new file mode 100644 index 00000000000..dab53907a90 --- /dev/null +++ b/include/linux/ts_filter_linear.h @@ -0,0 +1,64 @@ +#ifndef __TS_FILTER_LINEAR_H__ +#define __TS_FILTER_LINEAR_H__ + +#include <linux/ts_filter.h> +#include <linux/kobject.h> + +/* + * touchscreen linear filter. + * + * Copyright (C) 2008 by Openmoko, Inc. + * Author: Nelson Castillo <arhuaco@freaks-unidos.net> + * + */ + +#define TS_FILTER_LINEAR_NCONSTANTS 7 + +/* sysfs */ + +struct ts_filter_linear; + +struct const_obj { + struct ts_filter_linear *tsfl; + struct kobject kobj; +}; + +#define to_const_obj(x) container_of(x, struct const_obj, kobj) + +struct const_attribute { + struct attribute attr; + ssize_t (*show)(struct const_obj *const, struct const_attribute *attr, + char *buf); + ssize_t (*store)(struct const_obj *const, struct const_attribute *attr, + const char *buf, size_t count); +}; + +#define to_const_attr(x) container_of(x, struct const_attribute, attr) + +/* filter configuration */ + +struct ts_filter_linear_configuration { + int constants[TS_FILTER_LINEAR_NCONSTANTS]; + int coord0; + int coord1; +}; + +/* the filter */ + +struct ts_filter_linear { + struct ts_filter tsf; + struct ts_filter_linear_configuration *config; + + int constants[TS_FILTER_LINEAR_NCONSTANTS]; + + /* sysfs */ + struct const_obj c_obj; + struct kobj_type const_ktype; + struct const_attribute kattrs[TS_FILTER_LINEAR_NCONSTANTS]; + struct attribute *attrs[TS_FILTER_LINEAR_NCONSTANTS + 1]; + char attr_names[TS_FILTER_LINEAR_NCONSTANTS][2]; +}; + +extern struct ts_filter_api ts_filter_linear_api; + +#endif |