131a6296333b94964e9a073649840bb34d4603369Bryan Wu/*
231a6296333b94964e9a073649840bb34d4603369Bryan Wu * AD714X CapTouch Programmable Controller driver (bus interfaces)
331a6296333b94964e9a073649840bb34d4603369Bryan Wu *
49eff794b777ac9ca034129a1b637204000c8fb29Michael Hennerich * Copyright 2009-2011 Analog Devices Inc.
531a6296333b94964e9a073649840bb34d4603369Bryan Wu *
631a6296333b94964e9a073649840bb34d4603369Bryan Wu * Licensed under the GPL-2 or later.
731a6296333b94964e9a073649840bb34d4603369Bryan Wu */
831a6296333b94964e9a073649840bb34d4603369Bryan Wu
931a6296333b94964e9a073649840bb34d4603369Bryan Wu#ifndef _AD714X_H_
1031a6296333b94964e9a073649840bb34d4603369Bryan Wu#define _AD714X_H_
1131a6296333b94964e9a073649840bb34d4603369Bryan Wu
1231a6296333b94964e9a073649840bb34d4603369Bryan Wu#include <linux/types.h>
1331a6296333b94964e9a073649840bb34d4603369Bryan Wu
14c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov#define STAGE_NUM              12
15c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov
1631a6296333b94964e9a073649840bb34d4603369Bryan Wustruct device;
17c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhovstruct ad714x_platform_data;
18c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhovstruct ad714x_driver_data;
1931a6296333b94964e9a073649840bb34d4603369Bryan Wustruct ad714x_chip;
2031a6296333b94964e9a073649840bb34d4603369Bryan Wu
219eff794b777ac9ca034129a1b637204000c8fb29Michael Hennerichtypedef int (*ad714x_read_t)(struct ad714x_chip *, unsigned short, unsigned short *, size_t);
22c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhovtypedef int (*ad714x_write_t)(struct ad714x_chip *, unsigned short, unsigned short);
23c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov
24c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhovstruct ad714x_chip {
25c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	unsigned short l_state;
269eff794b777ac9ca034129a1b637204000c8fb29Michael Hennerich	unsigned short h_state;
27c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	unsigned short c_state;
28c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	unsigned short adc_reg[STAGE_NUM];
29c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	unsigned short amb_reg[STAGE_NUM];
30c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	unsigned short sensor_val[STAGE_NUM];
31c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov
32c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	struct ad714x_platform_data *hw;
33c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	struct ad714x_driver_data *sw;
34c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov
35c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	int irq;
36c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	struct device *dev;
37c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	ad714x_read_t read;
38c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	ad714x_write_t write;
39c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov
40c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	struct mutex mutex;
41c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov
42c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	unsigned product;
43c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	unsigned version;
44c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov
45c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov	__be16 xfer_buf[16] ____cacheline_aligned;
46c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov
47c0409feb86893f5ccf73964c7b2b47ca64bdb014Dmitry Torokhov};
4831a6296333b94964e9a073649840bb34d4603369Bryan Wu
4931a6296333b94964e9a073649840bb34d4603369Bryan Wuint ad714x_disable(struct ad714x_chip *ad714x);
5031a6296333b94964e9a073649840bb34d4603369Bryan Wuint ad714x_enable(struct ad714x_chip *ad714x);
5131a6296333b94964e9a073649840bb34d4603369Bryan Wustruct ad714x_chip *ad714x_probe(struct device *dev, u16 bus_type, int irq,
5231a6296333b94964e9a073649840bb34d4603369Bryan Wu				 ad714x_read_t read, ad714x_write_t write);
5331a6296333b94964e9a073649840bb34d4603369Bryan Wuvoid ad714x_remove(struct ad714x_chip *ad714x);
5431a6296333b94964e9a073649840bb34d4603369Bryan Wu
5531a6296333b94964e9a073649840bb34d4603369Bryan Wu#endif
56