blob: 6a7c432600184ac16fa74b2086481261dbce3b3d [file] [log] [blame]
Colin Crossc1dbe302010-04-20 19:54:09 -07001/*
2 * Definitions for akm8975 compass chip.
3 */
4#ifndef AKM8975_H
5#define AKM8975_H
6
7#include <linux/ioctl.h>
8
9/*! \name AK8975 operation mode
10 \anchor AK8975_Mode
11 Defines an operation mode of the AK8975.*/
12/*! @{*/
13#define AK8975_MODE_SNG_MEASURE 0x01
14#define AK8975_MODE_SELF_TEST 0x08
15#define AK8975_MODE_FUSE_ACCESS 0x0F
16#define AK8975_MODE_POWER_DOWN 0x00
17/*! @}*/
18
19#define RBUFF_SIZE 8 /* Rx buffer size */
20
21/*! \name AK8975 register address
22\anchor AK8975_REG
23Defines a register address of the AK8975.*/
24/*! @{*/
25#define AK8975_REG_WIA 0x00
26#define AK8975_REG_INFO 0x01
27#define AK8975_REG_ST1 0x02
28#define AK8975_REG_HXL 0x03
29#define AK8975_REG_HXH 0x04
30#define AK8975_REG_HYL 0x05
31#define AK8975_REG_HYH 0x06
32#define AK8975_REG_HZL 0x07
33#define AK8975_REG_HZH 0x08
34#define AK8975_REG_ST2 0x09
35#define AK8975_REG_CNTL 0x0A
36#define AK8975_REG_RSV 0x0B
37#define AK8975_REG_ASTC 0x0C
38#define AK8975_REG_TS1 0x0D
39#define AK8975_REG_TS2 0x0E
40#define AK8975_REG_I2CDIS 0x0F
41/*! @}*/
42
43/*! \name AK8975 fuse-rom address
44\anchor AK8975_FUSE
45Defines a read-only address of the fuse ROM of the AK8975.*/
46/*! @{*/
47#define AK8975_FUSE_ASAX 0x10
48#define AK8975_FUSE_ASAY 0x11
49#define AK8975_FUSE_ASAZ 0x12
50/*! @}*/
51
52#define AKMIO 0xA1
53
54/* IOCTLs for AKM library */
55#define ECS_IOCTL_WRITE _IOW(AKMIO, 0x02, char[5])
56#define ECS_IOCTL_READ _IOWR(AKMIO, 0x03, char[5])
57#define ECS_IOCTL_GETDATA _IOR(AKMIO, 0x08, char[RBUFF_SIZE])
58#define ECS_IOCTL_SET_YPR _IOW(AKMIO, 0x0C, short[12])
59#define ECS_IOCTL_GET_OPEN_STATUS _IOR(AKMIO, 0x0D, int)
60#define ECS_IOCTL_GET_CLOSE_STATUS _IOR(AKMIO, 0x0E, int)
61#define ECS_IOCTL_GET_DELAY _IOR(AKMIO, 0x30, short)
62
63/* IOCTLs for APPs */
64#define ECS_IOCTL_APP_SET_MFLAG _IOW(AKMIO, 0x11, short)
65#define ECS_IOCTL_APP_GET_MFLAG _IOW(AKMIO, 0x12, short)
66#define ECS_IOCTL_APP_SET_AFLAG _IOW(AKMIO, 0x13, short)
67#define ECS_IOCTL_APP_GET_AFLAG _IOR(AKMIO, 0x14, short)
68#define ECS_IOCTL_APP_SET_DELAY _IOW(AKMIO, 0x18, short)
69#define ECS_IOCTL_APP_GET_DELAY ECS_IOCTL_GET_DELAY
70/* Set raw magnetic vector flag */
71#define ECS_IOCTL_APP_SET_MVFLAG _IOW(AKMIO, 0x19, short)
72/* Get raw magnetic vector flag */
73#define ECS_IOCTL_APP_GET_MVFLAG _IOR(AKMIO, 0x1A, short)
74#define ECS_IOCTL_APP_SET_TFLAG _IOR(AKMIO, 0x15, short)
75
76
77struct akm8975_platform_data {
78 int intr;
79
80 int (*init)(void);
81 void (*exit)(void);
82 int (*power_on)(void);
83 int (*power_off)(void);
84};
85
86#endif
87