summaryrefslogtreecommitdiff
path: root/include/linux/input
diff options
context:
space:
mode:
authorKoushik Vishwamurthy <Koushik.Vishwamurthy@maximintegrated.com>2015-05-14 17:02:35 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:51:31 -0700
commit0ea6dbc3a5d5265d68cb32ed608ba8e6326f9dff (patch)
tree8151c83d9187eea6004247d3316640c5301c42a8 /include/linux/input
parentfa6246b1f46a75af788b467b39061e2f938ef282 (diff)
input: touchscreen: maxim_sti: initial commit
Maxim SmartTouch Imager Touchscreen driver added. Change-Id: Ia570d7afa09bc081df6d79cd7a2f432867113439 Git-commit: b223650ce7eae499cf1a3474ad9a7019e1e3edf1 Git-repo: https://www.codeaurora.org/cgit/quic/la/kernel/msm-3.10/log/?h=github-maxim_sti/A2 [jinglin@codeaurora.org: add subject line to commit text] Signed-off-by: Jing Lin <jinglin@codeaurora.org>
Diffstat (limited to 'include/linux/input')
-rw-r--r--include/linux/input/maxim_sti.h282
1 files changed, 282 insertions, 0 deletions
diff --git a/include/linux/input/maxim_sti.h b/include/linux/input/maxim_sti.h
new file mode 100644
index 000000000000..60320708cae0
--- /dev/null
+++ b/include/linux/input/maxim_sti.h
@@ -0,0 +1,282 @@
+/* drivers/input/touchscreen/maxim_sti.c
+ *
+ * Maxim SmartTouch Imager Touchscreen Driver
+ *
+ * Copyright (c)2013 Maxim Integrated Products, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * 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.
+ *
+ */
+
+#ifndef __MAXIM_STI_H__
+#define __MAXIM_STI_H__
+
+#ifdef __KERNEL__
+#include <net/genetlink.h>
+#include <net/sock.h>
+#else
+#include <stdlib.h>
+#include "genetlink.h"
+#endif
+
+#define DRIVER_VERSION "1.4.1"
+#define DRIVER_RELEASE "August 14, 2013"
+
+/****************************************************************************\
+* Netlink: common kernel/user space macros *
+\****************************************************************************/
+
+#define NL_BUF_SIZE 8192
+
+#define NL_ATTR_FIRST(nptr) \
+ ((struct nlattr *)((void *)nptr + NLMSG_HDRLEN + GENL_HDRLEN))
+#define NL_ATTR_LAST(nptr) \
+ ((struct nlattr *)((void *)nptr + \
+ NLMSG_ALIGN(((struct nlmsghdr *)nptr)->nlmsg_len)))
+#define NL_SIZE(nptr) NLMSG_ALIGN(((struct nlmsghdr *)nptr)->nlmsg_len)
+#define NL_TYPE(nptr) (((struct nlmsghdr *)nptr)->nlmsg_type)
+#define NL_SEQ(nptr) (((struct nlmsghdr *)nptr)->nlmsg_seq)
+#define NL_OK(nptr) (NL_TYPE(nptr) >= NLMSG_MIN_TYPE)
+#define NL_ATTR_VAL(aptr, type) ((type *)((void *)aptr + NLA_HDRLEN))
+#define NL_ATTR_NEXT(aptr) \
+ ((struct nlattr *)((void *)aptr + \
+ NLA_ALIGN(((struct nlattr *)aptr)->nla_len)))
+#define GENL_CMP(name1, name2) strncmp(name1, name2, GENL_NAMSIZ)
+#define GENL_COPY(name1, name2) strncpy(name1, name2, GENL_NAMSIZ)
+#define GENL_CHK(name) (strlen(name) > (GENL_NAMSIZ - 1))
+#define MSG_TYPE(nptr) NL_ATTR_FIRST(nptr)->nla_type
+#define MSG_PAYLOAD(nptr) NL_ATTR_VAL(NL_ATTR_FIRST(nptr), void)
+
+/****************************************************************************\
+* Netlink: common kernel/user space inline functions *
+\****************************************************************************/
+
+static inline void
+nl_msg_init(void *buf, __u16 family_id, __u32 sequence, __u8 dst)
+{
+ struct nlmsghdr *nlh = (struct nlmsghdr *)buf;
+ struct genlmsghdr *genl = (struct genlmsghdr *)(buf + NLMSG_HDRLEN);
+
+ memset(buf, 0, NLMSG_HDRLEN + GENL_HDRLEN);
+ nlh->nlmsg_type = family_id;
+ nlh->nlmsg_flags = NLM_F_REQUEST;
+ nlh->nlmsg_seq = sequence;
+ nlh->nlmsg_len = NLMSG_HDRLEN + GENL_HDRLEN;
+ genl->cmd = dst;
+}
+
+static inline void
+*nl_alloc_attr(void *buf, __u16 type, __u16 len)
+{
+ struct nlmsghdr *nlh = (struct nlmsghdr *)buf;
+ struct nlattr *attr = NL_ATTR_LAST(nlh);
+
+ if ((NL_SIZE(buf) + NLMSG_ALIGN(NLA_HDRLEN + len)) > NL_BUF_SIZE)
+ return NULL;
+
+ attr->nla_type = type;
+ attr->nla_len = NLA_HDRLEN + len;
+ nlh->nlmsg_len += NLMSG_ALIGN(attr->nla_len);
+ return NL_ATTR_VAL(attr, void);
+}
+
+static inline int
+nl_add_attr(void *buf, __u16 type, void *ptr, __u16 len)
+{
+ void *a_ptr;
+
+ a_ptr = nl_alloc_attr(buf, type, len);
+ if (a_ptr == NULL)
+ return -1;
+ memcpy(a_ptr, ptr, len);
+ return 0;
+}
+
+/****************************************************************************\
+* Netlink: multicast groups enum and name strings *
+\****************************************************************************/
+
+enum {
+ MC_DRIVER,
+ MC_FUSION,
+ MC_REQUIRED_GROUPS,
+};
+
+#define MC_DRIVER_NAME "driver"
+#define MC_FUSION_NAME "fusion"
+
+#define NL_FAMILY_VERSION 1
+
+#define TF_FAMILY_NAME "touch_fusion"
+
+/****************************************************************************\
+* Netlink: common parameter and message definitions *
+\****************************************************************************/
+
+enum {
+ DR_STATE_BASIC,
+ DR_STATE_ACTIVE,
+ DR_STATE_SUSPEND,
+ DR_STATE_RESUME,
+ DR_STATE_FAULT,
+};
+
+enum {
+ DR_INPUT_FINGER,
+ DR_INPUT_STYLUS,
+ DR_INPUT_ERASER,
+};
+
+enum {
+ DR_IRQ_FALLING_EDGE,
+ DR_IRQ_RISING_EDGE,
+};
+
+enum {
+ DR_ADD_MC_GROUP,
+ DR_ECHO_REQUEST,
+ DR_CHIP_READ,
+ DR_CHIP_WRITE,
+ DR_CHIP_RESET,
+ DR_GET_IRQLINE,
+ DR_DELAY,
+ DR_CHIP_ACCESS_METHOD,
+ DR_CONFIG_IRQ,
+ DR_CONFIG_INPUT,
+ DR_CONFIG_WATCHDOG,
+ DR_DECONFIG,
+ DR_INPUT,
+ DR_LEGACY_FWDL,
+ DR_LEGACY_ACCELERATION,
+};
+
+struct __attribute__ ((__packed__)) dr_add_mc_group {
+ __u8 number;
+ char name[GENL_NAMSIZ];
+};
+
+struct __attribute__ ((__packed__)) dr_echo_request {
+ __u32 cookie;
+};
+
+struct __attribute__ ((__packed__)) dr_chip_read {
+ __u16 address;
+ __u16 length;
+};
+
+struct __attribute__ ((__packed__)) dr_chip_write {
+ __u16 address;
+ __u16 length;
+ __u8 data[0];
+};
+
+struct __attribute__ ((__packed__)) dr_chip_reset {
+ __u8 state;
+};
+
+struct __attribute__ ((__packed__)) dr_delay {
+ __u32 period;
+};
+
+struct __attribute__ ((__packed__)) dr_chip_access_method {
+ __u8 method;
+};
+
+#define MAX_IRQ_PARAMS 20
+struct __attribute__ ((__packed__)) dr_config_irq {
+ __u16 irq_param[MAX_IRQ_PARAMS];
+ __u8 irq_params;
+ __u8 irq_method;
+ __u8 irq_edge;
+};
+
+struct __attribute__ ((__packed__)) dr_config_input {
+ __u16 x_range;
+ __u16 y_range;
+};
+
+struct __attribute__ ((__packed__)) dr_config_watchdog {
+ __u32 pid;
+};
+
+struct __attribute__ ((__packed__)) dr_input_event {
+ __u8 id;
+ __u8 tool_type;
+ __u16 x;
+ __u16 y;
+ __u8 z;
+};
+
+#define MAX_INPUT_EVENTS 10
+struct __attribute__ ((__packed__)) dr_input {
+ struct dr_input_event event[MAX_INPUT_EVENTS];
+ __u8 events;
+};
+
+struct __attribute__ ((__packed__)) dr_legacy_acceleration {
+ __u8 enable;
+};
+
+enum {
+ FU_ECHO_RESPONSE,
+ FU_CHIP_READ_RESULT,
+ FU_IRQLINE_STATUS,
+ FU_ASYNC_DATA,
+ FU_RESUME,
+};
+
+struct __attribute__ ((__packed__)) fu_echo_response {
+ __u32 cookie;
+ __u8 driver_state;
+};
+
+struct __attribute__ ((__packed__)) fu_chip_read_result {
+ __u16 address;
+ __u16 length;
+ __u8 data[0];
+};
+
+struct __attribute__ ((__packed__)) fu_irqline_status {
+ __u8 status;
+};
+
+struct __attribute__ ((__packed__)) fu_async_data {
+ __u16 address;
+ __u16 length;
+ __u16 status;
+ __u8 data[0];
+};
+
+#ifdef __KERNEL__
+/****************************************************************************\
+* Kernel platform data structure *
+\****************************************************************************/
+
+#define MAXIM_STI_NAME "maxim_sti"
+
+struct maxim_sti_pdata {
+ char *touch_fusion;
+ char *config_file;
+ char *nl_family;
+ u8 nl_mc_groups;
+ u8 chip_access_method;
+ u8 default_reset_state;
+ u16 tx_buf_size;
+ u16 rx_buf_size;
+ unsigned gpio_reset;
+ unsigned gpio_irq;
+ int (*init)(struct maxim_sti_pdata *pdata, bool init);
+ void (*reset)(struct maxim_sti_pdata *pdata, int value);
+ int (*irq)(struct maxim_sti_pdata *pdata);
+};
+#endif
+
+#endif
+