ssp.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553
  1. /*
  2. * Copyright (C) 2011, Samsung Electronics Co. Ltd. All Rights Reserved.
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. */
  15. #ifndef __SSP_PRJ_H__
  16. #define __SSP_PRJ_H__
  17. #include <linux/kernel.h>
  18. #include <linux/module.h>
  19. #include <linux/i2c.h>
  20. #include <linux/uaccess.h>
  21. #include <linux/slab.h>
  22. #include <linux/input.h>
  23. #include <linux/interrupt.h>
  24. #include <linux/workqueue.h>
  25. #include <linux/gpio.h>
  26. #ifdef CONFIG_HAS_EARLYSUSPEND
  27. #include <linux/earlysuspend.h>
  28. #endif
  29. #include <linux/wakelock.h>
  30. #include <linux/miscdevice.h>
  31. #include <linux/ssp_platformdata.h>
  32. #include <linux/delay.h>
  33. #include <linux/firmware.h>
  34. #include <linux/timer.h>
  35. #include <linux/hrtimer.h>
  36. #include <linux/regulator/consumer.h>
  37. #ifdef CONFIG_HAS_EARLYSUSPEND
  38. #undef CONFIG_HAS_EARLYSUSPEND
  39. #endif
  40. #ifdef CONFIG_SENSORS_SSP_SENSORHUB
  41. #include "ssp_sensorhub.h"
  42. #endif
  43. #define SSP_DBG 1
  44. #define SUCCESS 1
  45. #define FAIL 0
  46. #define ERROR -1
  47. #define FACTORY_DATA_MAX 64
  48. #if SSP_DBG
  49. #define SSP_FUNC_DBG 1
  50. #define SSP_DATA_DBG 0
  51. #define ssp_dbg(dev, format, ...) do { \
  52. printk(KERN_INFO dev, format, ##__VA_ARGS__); \
  53. } while (0)
  54. #else
  55. #define ssp_dbg(dev, format, ...)
  56. #endif
  57. #if SSP_FUNC_DBG
  58. #define func_dbg() do { \
  59. printk(KERN_INFO "[SSP]: %s\n", __func__); \
  60. } while (0)
  61. #else
  62. #define func_dbg()
  63. #endif
  64. #if SSP_DATA_DBG
  65. #define data_dbg(dev, format, ...) do { \
  66. printk(KERN_INFO dev, format, ##__VA_ARGS__); \
  67. } while (0)
  68. #else
  69. #define data_dbg(dev, format, ...)
  70. #endif
  71. #define SSP_SW_RESET_TIME 3000
  72. #define DEFUALT_POLLING_DELAY (200 * NSEC_PER_MSEC)
  73. #define PROX_AVG_READ_NUM 80
  74. #define DEFAULT_RETRIES 3
  75. /* SSP Binary Type */
  76. enum {
  77. KERNEL_BINARY = 0,
  78. KERNEL_CRASHED_BINARY,
  79. UMS_BINARY,
  80. };
  81. /* Sensor Sampling Time Define */
  82. enum {
  83. SENSOR_NS_DELAY_FASTEST = 10000000, /* 10msec */
  84. SENSOR_NS_DELAY_GAME = 20000000, /* 20msec */
  85. SENSOR_NS_DELAY_UI = 66667000, /* 66.667msec */
  86. SENSOR_NS_DELAY_NORMAL = 200000000, /* 200msec */
  87. };
  88. enum {
  89. SENSOR_MS_DELAY_FASTEST = 10, /* 10msec */
  90. SENSOR_MS_DELAY_GAME = 20, /* 20msec */
  91. SENSOR_MS_DELAY_UI = 66, /* 66.7msec */
  92. SENSOR_MS_DELAY_NORMAL = 200, /* 200msec */
  93. };
  94. enum {
  95. SENSOR_CMD_DELAY_FASTEST = 0, /* 10msec */
  96. SENSOR_CMD_DELAY_GAME, /* 20msec */
  97. SENSOR_CMD_DELAY_UI, /* 66.7msec */
  98. SENSOR_CMD_DELAY_NORMAL, /* 200msec */
  99. };
  100. /*
  101. * SENSOR_DELAY_SET_STATE
  102. * Check delay set to avoid sending ADD instruction twice
  103. */
  104. enum {
  105. INITIALIZATION_STATE = 0,
  106. NO_SENSOR_STATE,
  107. ADD_SENSOR_STATE,
  108. RUNNING_SENSOR_STATE,
  109. };
  110. /* Firmware download STATE */
  111. enum {
  112. FW_DL_STATE_FAIL = -1,
  113. FW_DL_STATE_NONE = 0,
  114. FW_DL_STATE_NEED_TO_SCHEDULE,
  115. FW_DL_STATE_SCHEDULED,
  116. FW_DL_STATE_DOWNLOADING,
  117. FW_DL_STATE_SYNC,
  118. FW_DL_STATE_DONE,
  119. };
  120. #define SSP_INVALID_REVISION 99999
  121. #define SSP_INVALID_REVISION2 0xFFFFFF
  122. /* Gyroscope DPS */
  123. #define GYROSCOPE_DPS250 250
  124. #define GYROSCOPE_DPS500 500
  125. #define GYROSCOPE_DPS2000 2000
  126. /* Gesture Sensor Current */
  127. #define DEFUALT_IR_CURRENT 400 //0xF2
  128. /* kernel -> ssp manager cmd*/
  129. #define SSP_LIBRARY_SLEEP_CMD (1 << 5)
  130. #define SSP_LIBRARY_LARGE_DATA_CMD (1 << 6)
  131. #define SSP_LIBRARY_WAKEUP_CMD (1 << 7)
  132. /* ioctl command */
  133. #define AKMIO 0xA1
  134. #define ECS_IOCTL_GET_FUSEROMDATA _IOR(AKMIO, 0x01, unsigned char[3])
  135. #define ECS_IOCTL_GET_MAGDATA _IOR(AKMIO, 0x02, unsigned char[8])
  136. #define ECS_IOCTL_GET_ACCDATA _IOR(AKMIO, 0x03, int[3])
  137. /* AP -> SSP Instruction */
  138. #define MSG2SSP_INST_BYPASS_SENSOR_ADD 0xA1
  139. #define MSG2SSP_INST_BYPASS_SENSOR_REMOVE 0xA2
  140. #define MSG2SSP_INST_REMOVE_ALL 0xA3
  141. #define MSG2SSP_INST_CHANGE_DELAY 0xA4
  142. #define MSG2SSP_INST_SENSOR_SELFTEST 0xA8
  143. #define MSG2SSP_INST_LIBRARY_ADD 0xB1
  144. #define MSG2SSP_INST_LIBRARY_REMOVE 0xB2
  145. #define MSG2SSP_INST_LIB_NOTI 0xB4
  146. #define MSG2SSP_AP_STT 0xC8
  147. #define MSG2SSP_AP_STATUS_WAKEUP 0xD1
  148. #define MSG2SSP_AP_STATUS_SLEEP 0xD2
  149. #define MSG2SSP_AP_STATUS_RESUME 0xD3
  150. #define MSG2SSP_AP_STATUS_SUSPEND 0xD4
  151. #define MSG2SSP_AP_STATUS_RESET 0xD5
  152. #define MSG2SSP_AP_STATUS_POW_CONNECTED 0xD6
  153. #define MSG2SSP_AP_STATUS_CALL_IDLE 0xD8
  154. #define MSG2SSP_AP_STATUS_CALL_ACTIVE 0xD9
  155. #define MSG2SSP_AP_STATUS_POW_DISCONNECTED 0xD7
  156. #define MSG2SSP_AP_TEMPHUMIDITY_CAL_DONE 0xDA
  157. #define MSG2SSP_AP_WHOAMI 0x0F
  158. #define MSG2SSP_AP_FIRMWARE_REV 0xF0
  159. #define MSG2SSP_AP_SENSOR_FORMATION 0xF1
  160. #define MSG2SSP_AP_SENSOR_PROXTHRESHOLD 0xF2
  161. #define MSG2SSP_AP_SENSOR_BARCODE_EMUL 0xF3
  162. #define MSG2SSP_AP_SENSOR_SCANNING 0xF4
  163. #define MSG2SSP_AP_SET_MAGNETIC_HWOFFSET 0xF5
  164. #define MSG2SSP_AP_GET_MAGNETIC_HWOFFSET 0xF6
  165. #define MSG2SSP_AP_SENSOR_GESTURE_CURRENT 0xF7
  166. #define MSG2SSP_AP_FUSEROM 0X01
  167. /* AP -> SSP Data Protocol Frame Field */
  168. #define MSG2SSP_SSP_SLEEP 0xC1
  169. #define MSG2SSP_STS 0xC2 /* Start to Send */
  170. #define MSG2SSP_RTS 0xC4 /* Ready to Send */
  171. #define MSG2SSP_STT 0xC8
  172. #define MSG2SSP_SRM 0xCA /* Start to Read MSG */
  173. #define MSG2SSP_SSM 0xCB /* Start to Send MSG */
  174. #define MSG2SSP_SSD 0xCE /* Start to Send Data Type & Length */
  175. #define MSG2SSP_NO_DATA 0xCF /* There is no data to get from MCU */
  176. /* SSP -> AP ACK about write CMD */
  177. #define MSG_ACK 0x80 /* ACK from SSP to AP */
  178. #define MSG_NAK 0x70 /* NAK from SSP to AP */
  179. /* Accelerometer sensor */
  180. #define MAX_ACCEL_1G 16384
  181. #define MAX_ACCEL_2G 32767
  182. #define MIN_ACCEL_2G -32768
  183. #define MAX_ACCEL_4G 65536
  184. #define MAX_GYRO 32767
  185. #define MIN_GYRO -32768
  186. /* report timestamp from kernel (for Android L) */
  187. #define TIME_LO_MASK 0x00000000FFFFFFFF
  188. #define TIME_HI_MASK 0xFFFFFFFF00000000
  189. #define TIME_HI_SHIFT 32
  190. /* sensor combination, data->sns_combination */
  191. enum {
  192. INVENSENSE_MPU6500_AG = 0,
  193. STM_K330_AG,
  194. };
  195. /* SSP_INSTRUCTION_CMD */
  196. enum {
  197. REMOVE_SENSOR = 0,
  198. ADD_SENSOR,
  199. CHANGE_DELAY,
  200. GO_SLEEP,
  201. FACTORY_MODE,
  202. REMOVE_LIBRARY,
  203. ADD_LIBRARY,
  204. };
  205. /* SENSOR_TYPE */
  206. enum {
  207. ACCELEROMETER_SENSOR = 0,
  208. GYROSCOPE_SENSOR,
  209. GEOMAGNETIC_SENSOR,
  210. PRESSURE_SENSOR,
  211. GESTURE_SENSOR,
  212. PROXIMITY_SENSOR,
  213. TEMPERATURE_HUMIDITY_SENSOR,
  214. LIGHT_SENSOR,
  215. PROXIMITY_RAW,
  216. GEOMAGNETIC_RAW,
  217. ORIENTATION_SENSOR,
  218. SIG_MOTION_SENSOR,
  219. STEP_DETECTOR,
  220. STEP_COUNTER,
  221. SENSOR_MAX,
  222. };
  223. #define SSP_BYPASS_SENSORS_EN_ALL (1 << ACCELEROMETER_SENSOR |\
  224. 1 << GYROSCOPE_SENSOR | 1 << GEOMAGNETIC_SENSOR | 1 << PRESSURE_SENSOR |\
  225. 1 << TEMPERATURE_HUMIDITY_SENSOR | 1 << LIGHT_SENSOR) /* PROXIMITY_SENSOR is not continuos */
  226. /* SENSOR_FACTORY_MODE_TYPE */
  227. enum {
  228. ACCELEROMETER_FACTORY = 0,
  229. GYROSCOPE_FACTORY,
  230. GEOMAGNETIC_FACTORY,
  231. PRESSURE_FACTORY,
  232. MCU_FACTORY,
  233. GYROSCOPE_TEMP_FACTORY,
  234. GYROSCOPE_DPS_FACTORY,
  235. MCU_SLEEP_FACTORY,
  236. GESTURE_FACTORY,
  237. TEMPHUMIDITY_CRC_FACTORY,
  238. SENSOR_FACTORY_MAX,
  239. };
  240. enum {
  241. STORE_SUCCESS = 0,
  242. FILE_OPEN_FAIL,
  243. OFFSET_CAL_DATA,
  244. };
  245. #define META_DATA_FLUSH_COMPLETE 1
  246. struct sensor_value {
  247. union {
  248. struct {
  249. s16 x;
  250. s16 y;
  251. s16 z;
  252. };
  253. struct {
  254. u16 r;
  255. u16 g;
  256. u16 b;
  257. u16 w;
  258. };
  259. u8 prox[4];
  260. s16 data[9];
  261. s32 pressure[3];
  262. u8 step_det;
  263. u8 sig_motion;
  264. u32 step_diff;
  265. };
  266. u64 timestamp;
  267. };
  268. extern struct class *sensors_event_class;
  269. extern int poweroff_charging;
  270. extern int recovery_mode;
  271. struct calibraion_data {
  272. s16 x;
  273. s16 y;
  274. s16 z;
  275. };
  276. struct hw_offset_data {
  277. char x;
  278. char y;
  279. char z;
  280. };
  281. struct ssp_time_diff {
  282. u64 time_diff;
  283. u64 irq_diff;
  284. };
  285. struct ssp_data {
  286. struct input_dev *acc_input_dev;
  287. struct input_dev *gyro_input_dev;
  288. struct input_dev *pressure_input_dev;
  289. struct input_dev *light_input_dev;
  290. struct input_dev *prox_input_dev;
  291. struct input_dev *temp_humi_input_dev;
  292. struct input_dev *mag_input_dev;
  293. struct input_dev *gesture_input_dev;
  294. struct input_dev *sig_motion_input_dev;
  295. struct input_dev *step_det_input_dev;
  296. struct input_dev *step_cnt_input_dev;
  297. struct input_dev *meta_input_dev;
  298. struct i2c_client *client;
  299. struct wake_lock ssp_wake_lock;
  300. struct miscdevice akmd_device;
  301. struct timer_list debug_timer;
  302. struct workqueue_struct *debug_wq;
  303. struct work_struct work_debug;
  304. struct calibraion_data accelcal;
  305. struct calibraion_data gyrocal;
  306. struct hw_offset_data magoffset;
  307. struct sensor_value buf[SENSOR_MAX];
  308. struct device *sen_dev;
  309. struct device *mcu_device;
  310. struct device *acc_device;
  311. struct device *gyro_device;
  312. struct device *mag_device;
  313. struct device *prs_device;
  314. struct device *prox_device;
  315. struct device *light_device;
  316. struct delayed_work work_firmware;
  317. struct device *ges_device;
  318. struct device *temphumidity_device;
  319. bool bSspShutdown;
  320. bool bMcuIRQTestSuccessed;
  321. bool bAccelAlert;
  322. bool bProximityRawEnabled;
  323. bool bGeomagneticRawEnabled;
  324. bool bBarcodeEnabled;
  325. bool bBinaryChashed;
  326. bool bProbeIsDone;
  327. unsigned char uProxCanc;
  328. unsigned char uProxHiThresh;
  329. unsigned char uProxLoThresh;
  330. unsigned char uProxHiThresh_default;
  331. unsigned char uProxLoThresh_default;
  332. unsigned int uIr_Current;
  333. unsigned char uFuseRomData[3];
  334. unsigned char uFactorydata[FACTORY_DATA_MAX];
  335. char *pchLibraryBuf;
  336. char chLcdLdi[2];
  337. int iIrq;
  338. int iLibraryLength;
  339. int aiCheckStatus[SENSOR_MAX];
  340. unsigned int uIrqFailCnt;
  341. unsigned int uSsdFailCnt;
  342. unsigned int uResetCnt;
  343. unsigned int uInstFailCnt;
  344. unsigned int uTimeOutCnt;
  345. unsigned int uIrqCnt;
  346. unsigned int uBusyCnt;
  347. unsigned int uMissSensorCnt;
  348. unsigned int uGyroDps;
  349. unsigned int uSensorState;
  350. unsigned int uCurFirmRev;
  351. unsigned int uFactoryProxAvg[4];
  352. unsigned int uFactorydataReady;
  353. s32 iPressureCal;
  354. u64 step_count_total;
  355. atomic_t aSensorEnable;
  356. int64_t adDelayBuf[SENSOR_MAX];
  357. u64 lastTimestamp[SENSOR_MAX];
  358. u64 timestamp;
  359. int (*wakeup_mcu)(void);
  360. int (*check_mcu_ready)(void);
  361. int (*check_mcu_busy)(void);
  362. int (*set_mcu_reset)(int);
  363. int (*read_chg)(void);
  364. void (*get_sensor_data[SENSOR_MAX])(char *, int *,
  365. struct sensor_value *);
  366. void (*report_sensor_data[SENSOR_MAX])(struct ssp_data *,
  367. struct sensor_value *);
  368. #ifdef CONFIG_HAS_EARLYSUSPEND
  369. struct early_suspend early_suspend;
  370. #endif
  371. #ifdef CONFIG_SENSORS_SSP_SENSORHUB
  372. struct ssp_sensorhub_data *hub_data;
  373. #endif
  374. int ap_rev;
  375. int ssp_changes;
  376. int accel_position;
  377. int mag_position;
  378. int fw_dl_state;
  379. #ifdef CONFIG_SENSORS_SSP_SHTC1
  380. char *comp_engine_ver;
  381. char *comp_engine_ver2;
  382. struct mutex cp_temp_adc_lock;
  383. #endif
  384. int mcu_int1;
  385. int mcu_int2;
  386. int ap_int;
  387. int rst;
  388. int chg;
  389. int sns_combination;
  390. struct regulator *reg_hub;
  391. struct regulator *reg_sns;
  392. unsigned char prox_state;
  393. unsigned char proximity_highThreshold;
  394. unsigned char proximity_lowThreshold;
  395. };
  396. void ssp_enable(struct ssp_data *, bool);
  397. int waiting_init_mcu(struct ssp_data *);
  398. int waiting_wakeup_mcu(struct ssp_data *);
  399. int ssp_i2c_read(struct ssp_data *, char *, u16, char *, u16, int);
  400. void toggle_mcu_reset(struct ssp_data *);
  401. int initialize_mcu(struct ssp_data *);
  402. int initialize_input_dev(struct ssp_data *);
  403. int initialize_sysfs(struct ssp_data *);
  404. void initialize_accel_factorytest(struct ssp_data *);
  405. void initialize_prox_factorytest(struct ssp_data *);
  406. void initialize_light_factorytest(struct ssp_data *);
  407. void initialize_gyro_factorytest(struct ssp_data *);
  408. void initialize_pressure_factorytest(struct ssp_data *);
  409. void initialize_magnetic_factorytest(struct ssp_data *);
  410. void initialize_function_pointer(struct ssp_data *);
  411. void initialize_magnetic(struct ssp_data *);
  412. void initialize_gesture_factorytest(struct ssp_data *data);
  413. void initialize_temphumidity_factorytest(struct ssp_data *data);
  414. void remove_accel_factorytest(struct ssp_data *);
  415. void remove_gyro_factorytest(struct ssp_data *);
  416. void remove_prox_factorytest(struct ssp_data *);
  417. void remove_light_factorytest(struct ssp_data *);
  418. void remove_pressure_factorytest(struct ssp_data *);
  419. void remove_magnetic_factorytest(struct ssp_data *);
  420. void remove_gesture_factorytest(struct ssp_data *data);
  421. void remove_temphumidity_factorytest(struct ssp_data *data);
  422. void destroy_sensor_class(void);
  423. int initialize_event_symlink(struct ssp_data *);
  424. int sensors_create_symlink(struct kobject *target,
  425. const char *name);
  426. int accel_open_calibration(struct ssp_data *);
  427. int gyro_open_calibration(struct ssp_data *);
  428. int pressure_open_calibration(struct ssp_data *);
  429. int proximity_open_calibration(struct ssp_data *);
  430. int check_fwbl(struct ssp_data *);
  431. void remove_input_dev(struct ssp_data *);
  432. void remove_sysfs(struct ssp_data *);
  433. void remove_event_symlink(struct ssp_data *);
  434. int ssp_send_cmd(struct ssp_data *, char);
  435. int send_instruction(struct ssp_data *, u8, u8, u8 *, u8);
  436. int select_irq_msg(struct ssp_data *);
  437. int get_chipid(struct ssp_data *);
  438. int get_fuserom_data(struct ssp_data *);
  439. int mag_open_hwoffset(struct ssp_data *);
  440. int mag_store_hwoffset(struct ssp_data *);
  441. int set_hw_offset(struct ssp_data *);
  442. int get_hw_offset(struct ssp_data *);
  443. int set_sensor_position(struct ssp_data *);
  444. void sync_sensor_state(struct ssp_data *);
  445. void set_proximity_threshold(struct ssp_data *, unsigned char, unsigned char);
  446. void set_proximity_barcode_enable(struct ssp_data *, bool);
  447. void set_gesture_current(struct ssp_data *, unsigned char);
  448. unsigned int get_delay_cmd(u8);
  449. unsigned int get_msdelay(int64_t);
  450. unsigned int get_sensor_scanning_info(struct ssp_data *);
  451. unsigned int get_firmware_rev(struct ssp_data *);
  452. int forced_to_download_binary(struct ssp_data *, int);
  453. int parse_dataframe(struct ssp_data *, char *, int);
  454. void enable_debug_timer(struct ssp_data *);
  455. void disable_debug_timer(struct ssp_data *);
  456. int initialize_debug_timer(struct ssp_data *);
  457. int proximity_open_lcd_ldi(struct ssp_data *);
  458. void report_acc_data(struct ssp_data *, struct sensor_value *);
  459. void report_gyro_data(struct ssp_data *, struct sensor_value *);
  460. void report_mag_data(struct ssp_data *, struct sensor_value *);
  461. void report_gesture_data(struct ssp_data *, struct sensor_value *);
  462. void report_pressure_data(struct ssp_data *, struct sensor_value *);
  463. void report_light_data(struct ssp_data *, struct sensor_value *);
  464. void report_prox_data(struct ssp_data *, struct sensor_value *);
  465. void report_prox_raw_data(struct ssp_data *, struct sensor_value *);
  466. void report_geomagnetic_raw_data(struct ssp_data *, struct sensor_value *);
  467. void report_sig_motion_data(struct ssp_data *, struct sensor_value *);
  468. void report_step_det_data(struct ssp_data *, struct sensor_value *);
  469. void report_step_cnt_data(struct ssp_data *, struct sensor_value *);
  470. int print_mcu_debug(char *, int *, int);
  471. void report_temp_humidity_data(struct ssp_data *, struct sensor_value *);
  472. unsigned int get_module_rev(struct ssp_data *data);
  473. void reset_mcu(struct ssp_data *);
  474. void convert_acc_data(s16 *);
  475. int sensors_register(struct device *, void *,
  476. struct device_attribute*[], char *);
  477. void sensors_unregister(struct device *,
  478. struct device_attribute*[]);
  479. ssize_t mcu_reset_show(struct device *, struct device_attribute *, char *);
  480. ssize_t mcu_revision_show(struct device *, struct device_attribute *, char *);
  481. ssize_t mcu_update_ums_bin_show(struct device *,
  482. struct device_attribute *, char *);
  483. ssize_t mcu_update_kernel_bin_show(struct device *,
  484. struct device_attribute *, char *);
  485. ssize_t mcu_update_kernel_crashed_bin_show(struct device *,
  486. struct device_attribute *, char *);
  487. ssize_t mcu_factorytest_store(struct device *, struct device_attribute *,
  488. const char *, size_t);
  489. ssize_t mcu_factorytest_show(struct device *,
  490. struct device_attribute *, char *);
  491. ssize_t mcu_model_name_show(struct device *,
  492. struct device_attribute *, char *);
  493. ssize_t mcu_sleep_factorytest_show(struct device *,
  494. struct device_attribute *, char *);
  495. ssize_t mcu_sleep_factorytest_store(struct device *,
  496. struct device_attribute *, const char *, size_t);
  497. ssize_t mpu6500_gyro_selftest(char *, struct ssp_data *);
  498. ssize_t k330_gyro_selftest(char *, struct ssp_data *);
  499. #endif