sentelic.h 3.3 KB
Newer Older
1 2 3 4
/*-
 * Finger Sensing Pad PS/2 mouse driver.
 *
 * Copyright (C) 2005-2007 Asia Vital Components Co., Ltd.
5
 * Copyright (C) 2005-2011 Tai-hwa Liang, Sentelic Corporation.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
 *
 *   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., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#ifndef	__SENTELIC_H
#define	__SENTELIC_H

/* Finger-sensing Pad information registers */
#define	FSP_REG_DEVICE_ID	0x00
#define	FSP_REG_VERSION		0x01
#define	FSP_REG_REVISION	0x04
#define	FSP_REG_TMOD_STATUS1	0x0B
#define	FSP_BIT_NO_ROTATION	BIT(3)
#define	FSP_REG_PAGE_CTRL	0x0F

/* Finger-sensing Pad control registers */
#define	FSP_REG_SYSCTL1		0x10
#define	FSP_BIT_EN_REG_CLK	BIT(5)
36
#define	FSP_REG_TMOD_STATUS	0x20
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
#define	FSP_REG_OPC_QDOWN	0x31
#define	FSP_BIT_EN_OPC_TAG	BIT(7)
#define	FSP_REG_OPTZ_XLO	0x34
#define	FSP_REG_OPTZ_XHI	0x35
#define	FSP_REG_OPTZ_YLO	0x36
#define	FSP_REG_OPTZ_YHI	0x37
#define	FSP_REG_SYSCTL5		0x40
#define	FSP_BIT_90_DEGREE	BIT(0)
#define	FSP_BIT_EN_MSID6	BIT(1)
#define	FSP_BIT_EN_MSID7	BIT(2)
#define	FSP_BIT_EN_MSID8	BIT(3)
#define	FSP_BIT_EN_AUTO_MSID8	BIT(5)
#define	FSP_BIT_EN_PKT_G0	BIT(6)

#define	FSP_REG_ONPAD_CTL	0x43
#define	FSP_BIT_ONPAD_ENABLE	BIT(0)
#define	FSP_BIT_ONPAD_FBBB	BIT(1)
#define	FSP_BIT_FIX_VSCR	BIT(3)
#define	FSP_BIT_FIX_HSCR	BIT(5)
#define	FSP_BIT_DRAG_LOCK	BIT(6)

/* Finger-sensing Pad packet formating related definitions */

/* absolute packet type */
#define	FSP_PKT_TYPE_NORMAL	(0x00)
#define	FSP_PKT_TYPE_ABS	(0x01)
#define	FSP_PKT_TYPE_NOTIFY	(0x02)
#define	FSP_PKT_TYPE_NORMAL_OPC	(0x03)
#define	FSP_PKT_TYPE_SHIFT	(6)

67 68 69 70 71 72 73 74 75 76 77
/* hardware revisions */
#define	FSP_VER_STL3888_A4	(0xC1)
#define	FSP_VER_STL3888_B0	(0xD0)
#define	FSP_VER_STL3888_B1	(0xD1)
#define	FSP_VER_STL3888_B2	(0xD2)
#define	FSP_VER_STL3888_C0	(0xE0)
#define	FSP_VER_STL3888_C1	(0xE1)
#define	FSP_VER_STL3888_D0	(0xE2)
#define	FSP_VER_STL3888_D1	(0xE3)
#define	FSP_VER_STL3888_E0	(0xE4)

78 79 80 81 82
#ifdef __KERNEL__

struct fsp_data {
	unsigned char	ver;		/* hardware version */
	unsigned char	rev;		/* hardware revison */
83
	unsigned int	buttons;	/* Number of buttons */
84 85 86 87 88 89 90 91 92 93 94
	unsigned int	flags;
#define	FSPDRV_FLAG_EN_OPC	(0x001)	/* enable on-pad clicking */

	bool		vscroll;	/* Vertical scroll zone enabled */
	bool		hscroll;	/* Horizontal scroll zone enabled */

	unsigned char	last_reg;	/* Last register we requested read from */
	unsigned char	last_val;
};

#ifdef CONFIG_MOUSE_PS2_SENTELIC
95
extern int fsp_detect(struct psmouse *psmouse, bool set_properties);
96 97
extern int fsp_init(struct psmouse *psmouse);
#else
98
inline int fsp_detect(struct psmouse *psmouse, bool set_properties)
99 100 101 102 103 104 105 106 107 108 109 110
{
	return -ENOSYS;
}
inline int fsp_init(struct psmouse *psmouse)
{
	return -ENOSYS;
}
#endif

#endif	/* __KERNEL__ */

#endif	/* !__SENTELIC_H */