1ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*
2ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda * Definitions for akm8975 compass chip.
3ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda */
4ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#ifndef AKM8975_H
5ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AKM8975_H
6ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
7ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#include <linux/ioctl.h>
8ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
9ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AKM8975_I2C_NAME "akm8975"
10ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
11ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define SENSOR_DATA_SIZE	8
12ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define YPR_DATA_SIZE		12
13ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define RWBUF_SIZE			16
14ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
15ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ACC_DATA_FLAG		0
16ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define MAG_DATA_FLAG		1
17ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ORI_DATA_FLAG		2
18ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AKM_NUM_SENSORS		3
19ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
20ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ACC_DATA_READY		(1<<(ACC_DATA_FLAG))
21ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define MAG_DATA_READY		(1<<(MAG_DATA_FLAG))
22ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ORI_DATA_READY		(1<<(ORI_DATA_FLAG))
23ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
24ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*! \name AK8975 constant definition
25ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda \anchor AK8975_Def
26ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda Constant definitions of the AK8975.*/
27ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_MEASUREMENT_TIME_US	10000
28ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
29ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*! \name AK8975 operation mode
30ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda \anchor AK8975_Mode
31ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda Defines an operation mode of the AK8975.*/
32ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*! @{*/
33ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_MODE_SNG_MEASURE	0x01
34ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define	AK8975_MODE_SELF_TEST	0x08
35ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define	AK8975_MODE_FUSE_ACCESS	0x0F
36ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define	AK8975_MODE_POWERDOWN	0x00
37ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*! @}*/
38ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
39ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*! \name AK8975 register address
40ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda\anchor AK8975_REG
41ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi MasudaDefines a register address of the AK8975.*/
42ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*! @{*/
43ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_WIA		0x00
44ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_INFO		0x01
45ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_ST1		0x02
46ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_HXL		0x03
47ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_HXH		0x04
48ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_HYL		0x05
49ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_HYH		0x06
50ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_HZL		0x07
51ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_HZH		0x08
52ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_ST2		0x09
53ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_CNTL		0x0A
54ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_RSV		0x0B
55ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_ASTC		0x0C
56ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_TS1		0x0D
57ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_TS2		0x0E
58ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_REG_I2CDIS	0x0F
59ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*! @}*/
60ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
61ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*! \name AK8975 fuse-rom address
62ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda\anchor AK8975_FUSE
63ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi MasudaDefines a read-only address of the fuse ROM of the AK8975.*/
64ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*! @{*/
65ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_FUSE_ASAX	0x10
66ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_FUSE_ASAY	0x11
67ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AK8975_FUSE_ASAZ	0x12
68ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/*! @}*/
69ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
70ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define AKMIO                   0xA1
71ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
72ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda/* IOCTLs for AKM library */
73ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ECS_IOCTL_READ              _IOWR(AKMIO, 0x01, char*)
74ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ECS_IOCTL_WRITE             _IOW(AKMIO, 0x02, char*)
75ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ECS_IOCTL_SET_MODE          _IOW(AKMIO, 0x03, short)
76ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ECS_IOCTL_GETDATA           _IOR(AKMIO, 0x04, char[SENSOR_DATA_SIZE])
77ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ECS_IOCTL_SET_YPR           _IOW(AKMIO, 0x05, int[YPR_DATA_SIZE])
78ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ECS_IOCTL_GET_OPEN_STATUS   _IOR(AKMIO, 0x06, int)
79ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ECS_IOCTL_GET_CLOSE_STATUS  _IOR(AKMIO, 0x07, int)
80ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ECS_IOCTL_GET_DELAY         _IOR(AKMIO, 0x08, long long int[AKM_NUM_SENSORS])
81ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ECS_IOCTL_GET_LAYOUT        _IOR(AKMIO, 0x09, char)
82ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#define ECS_IOCTL_GET_ACCEL			_IOR(AKMIO, 0x30, short[3])
83ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
84ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masudastruct akm8975_platform_data {
85ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	char layout;
86ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda	int gpio_DRDY;
87ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda};
88ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
89ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda#endif
90ab17e987e7f5371df91fe4e137fcf9041489ffdfTsuyoshi Masuda
91