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