k2hh.c 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567
  1. /*
  2. * Copyright (C) 2013 Samsung Electronics. All rights reserved.
  3. *
  4. * This program is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU General Public License
  6. * version 2 as published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope that it will be useful, but
  9. * WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11. * General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program; if not, write to the Free Software
  15. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  16. * 02110-1301 USA
  17. */
  18. #include <linux/fs.h>
  19. #include <linux/uaccess.h>
  20. #include <linux/module.h>
  21. #include <linux/i2c.h>
  22. #include <linux/errno.h>
  23. #include <linux/input.h>
  24. #include <linux/workqueue.h>
  25. #include <linux/slab.h>
  26. #include <linux/delay.h>
  27. #include <linux/of_gpio.h>
  28. #include <linux/wakelock.h>
  29. #include <linux/regulator/consumer.h>
  30. #include <mach/gpiomux.h>
  31. #include "sensors_core.h"
  32. #define I2C_M_WR 0 /* for i2c Write */
  33. #define I2c_M_RD 1 /* for i2c Read */
  34. #define READ_DATA_LENTH 6
  35. #define VENDOR_NAME "STM"
  36. #define MODEL_NAME "K2HH"
  37. #define MODULE_NAME "accelerometer_sensor"
  38. #define CALIBRATION_FILE_PATH "/efs/accel_calibration_data"
  39. #define CALIBRATION_DATA_AMOUNT 20
  40. #define MAX_ACCEL_1G 16384
  41. #define K2HH_DEFAULT_DELAY 200000000LL
  42. #define CHIP_ID_RETRIES 3
  43. #define ACCEL_LOG_TIME 15 /* 15 sec */
  44. #define K2HH_TOP_UPPER_RIGHT 0
  45. #define K2HH_TOP_LOWER_RIGHT 1
  46. #define K2HH_TOP_LOWER_LEFT 2
  47. #define K2HH_TOP_UPPER_LEFT 3
  48. #define K2HH_BOTTOM_UPPER_RIGHT 4
  49. #define K2HH_BOTTOM_LOWER_RIGHT 5
  50. #define K2HH_BOTTOM_LOWER_LEFT 6
  51. #define K2HH_BOTTOM_UPPER_LEFT 7
  52. #define K2HH_MODE_SUSPEND 0
  53. #define K2HH_MODE_NORMAL 1
  54. #define SENSITIVITY_2G 61
  55. #define SENSITIVITY_4G 122
  56. #define SENSITIVITY_8G 244
  57. #define K2HH_RANGE_2G 0
  58. #define K2HH_RANGE_4G 1
  59. #define K2HH_RANGE_8G 2
  60. #define WHOAMI_REG 0x0F
  61. #define AXISDATA_REG 0x28
  62. #define CTRL1_REG 0x20
  63. #define CTRL2_REG 0x21
  64. #define CTRL3_REG 0x22
  65. #define CTRL4_REG 0x23
  66. #define CTRL5_REG 0x24
  67. #define CTRL6_REG 0x25
  68. #define CTRL7_REG 0x26
  69. #define STATUS_REG 0x27
  70. /* CTRL1 */
  71. #define CTRL1_HR_DISABLE 0x00
  72. #define CTRL1_HR_ENABLE 0x80
  73. #define CTRL1_HR_MASK 0x80
  74. #define CTRL1_BDU_ENABLE 0x08
  75. #define CTRL1_BDU_MASK 0x08
  76. /* CTRL2 */
  77. #define CTRL2_IG1_INT1 0x08
  78. /* CTRL3 */
  79. #define CTRL3_IG1_INT1 0x08
  80. /* CTRL7 */
  81. #define CTRL7_LIR2 0x08
  82. #define CTRL7_LIR1 0x04
  83. #define ACC_PM_OFF 0x00
  84. #define ACC_ENABLE_ALL_AXES 0x07
  85. #define INT_CFG1_REG 0x30
  86. #define INT_SRC1_REG 0x31
  87. #define K2HH_CHIP_ID 0x41
  88. #define K2HH_ACC_FS_MASK 0x30
  89. #define K2HH_ACC_ODR_MASK 0x70
  90. #define K2HH_ACC_AXES_MASK 0x07
  91. #define SELF_TEST_2G_MAX_LSB 24576
  92. #define SELF_TEST_2G_MIN_LSB 1146
  93. #define K2HH_ACC_FS_2G 0x00
  94. #define K2HH_ACC_FS_4G 0x20
  95. #define K2HH_ACC_FS_8G 0x30
  96. #define INT_THSX1_REG 0x32
  97. #define INT_THSY1_REG 0x33
  98. #define INT_THSZ1_REG 0x34
  99. #define DYNAMIC_THRESHOLD 5000
  100. enum {
  101. OFF = 0,
  102. ON = 1
  103. };
  104. struct k2hh_v {
  105. union {
  106. s16 v[3];
  107. struct {
  108. s16 x;
  109. s16 y;
  110. s16 z;
  111. };
  112. };
  113. };
  114. struct k2hh_p {
  115. struct wake_lock reactive_wake_lock;
  116. struct i2c_client *client;
  117. struct input_dev *input;
  118. struct delayed_work irq_work;
  119. struct device *factory_device;
  120. struct k2hh_v accdata;
  121. struct k2hh_v caldata;
  122. struct mutex mode_mutex;
  123. struct hrtimer accel_timer;
  124. struct workqueue_struct *accel_wq;
  125. struct work_struct work;
  126. struct regulator *l19;
  127. struct regulator *lvs1_1p8;
  128. ktime_t poll_delay;
  129. atomic_t enable;
  130. int recog_flag;
  131. int irq1;
  132. int irq_state;
  133. int acc_int1;
  134. int sda_gpio;
  135. int scl_gpio;
  136. int time_count;
  137. u8 axis_map_x;
  138. u8 axis_map_y;
  139. u8 axis_map_z;
  140. u8 negate_x;
  141. u8 negate_y;
  142. u8 negate_z;
  143. u64 old_timestamp;
  144. };
  145. #define ACC_ODR10 0x10 /* 10Hz output data rate */
  146. #define ACC_ODR50 0x20 /* 50Hz output data rate */
  147. #define ACC_ODR100 0x30 /* 100Hz output data rate */
  148. #define ACC_ODR200 0x40 /* 200Hz output data rate */
  149. #define ACC_ODR400 0x50 /* 400Hz output data rate */
  150. #define ACC_ODR800 0x60 /* 800Hz output data rate */
  151. #define ACC_ODR_MASK 0X70
  152. struct k2hh_acc_odr {
  153. unsigned int cutoff_ms;
  154. unsigned int mask;
  155. };
  156. #define OUTPUT_ALWAYS_ANTI_ALIASED
  157. const struct k2hh_acc_odr k2hh_acc_odr_table[] = {
  158. { 2, ACC_ODR800},
  159. { 3, ACC_ODR400},
  160. { 5, ACC_ODR200},
  161. { 10, ACC_ODR100},
  162. #ifndef OUTPUT_ALWAYS_ANTI_ALIASED
  163. { 20, ACC_ODR50},
  164. {100, ACC_ODR10},
  165. #endif
  166. };
  167. static int k2hh_open_calibration(struct k2hh_p *);
  168. static int sensor_regulator_onoff(struct k2hh_p *data, bool onoff);
  169. static int k2hh_i2c_recovery(struct k2hh_p *data)
  170. {
  171. int ret = 0;
  172. struct gpiomux_setting old_config[2];
  173. struct gpiomux_setting recovery_config = {
  174. .func = GPIOMUX_FUNC_3,
  175. .drv = GPIOMUX_DRV_2MA,
  176. .pull = GPIOMUX_PULL_NONE,
  177. .dir = GPIOMUX_IN,
  178. };
  179. if ((data->sda_gpio < 0) || (data->scl_gpio < 0)) {
  180. pr_err("[SENSOR]: %s - no sda, scl gpio\n", __func__);
  181. return -1;
  182. }
  183. pr_err("[SENSOR] ################# %s #################\n", __func__);
  184. /*If LDO's are disabled then enable, Fallback LDO off scenario*/
  185. do {
  186. if( 0 == regulator_is_enabled(data->l19) ) {
  187. ret = regulator_enable(data->l19);
  188. if (ret){
  189. pr_err(KERN_ERR "%s: 8226_l19 enable failed (%d)\n",__func__, ret);
  190. break;
  191. }
  192. ret++;
  193. }
  194. if( 0 == regulator_is_enabled(data->lvs1_1p8) ) {
  195. ret = regulator_enable(data->lvs1_1p8);
  196. if (ret){
  197. pr_err(KERN_ERR "%s: 8226_l6 enable failed (%d)\n",__func__, ret);
  198. break;
  199. }
  200. ret++;
  201. }
  202. if(ret)
  203. msleep(30);
  204. }while(0);
  205. if(ret){
  206. pr_err("RECOVERY called as one of regulator was off:****\n Regulator \
  207. on/recovery complete****\n ");
  208. }
  209. ret = msm_gpiomux_write(data->sda_gpio, GPIOMUX_ACTIVE,
  210. &recovery_config, &old_config[0]);
  211. if (ret < 0) {
  212. pr_err("[SENSOR]: %s sda_gpio have no active setting %d\n",
  213. __func__, ret);
  214. goto exit;
  215. }
  216. ret = msm_gpiomux_write(data->scl_gpio, GPIOMUX_ACTIVE,
  217. &recovery_config, &old_config[1]);
  218. if (ret < 0) {
  219. pr_err("[SENSOR]: %s scl_gpio have no active setting %d\n",
  220. __func__, ret);
  221. goto exit;
  222. }
  223. ret = gpio_request(data->sda_gpio, "SENSOR_SDA");
  224. if (ret < 0) {
  225. pr_err("[SENSOR]: %s - gpio %d request failed (%d)\n",
  226. __func__, data->sda_gpio, ret);
  227. goto exit;
  228. }
  229. ret = gpio_request(data->scl_gpio, "SENSOR_SCL");
  230. if (ret < 0) {
  231. pr_err("[SENSOR]: %s - gpio %d request failed (%d)\n",
  232. __func__, data->scl_gpio, ret);
  233. gpio_free(data->scl_gpio);
  234. goto exit;
  235. }
  236. ret = gpio_direction_input(data->sda_gpio);
  237. if (ret < 0) {
  238. pr_err("[SENSOR]: %s - failed to set gpio %d as output (%d)\n",
  239. __func__, data->sda_gpio, ret);
  240. goto exit_to_free;
  241. }
  242. ret = gpio_direction_input(data->scl_gpio);
  243. if (ret < 0) {
  244. pr_err("[SENSOR]: %s - failed to set gpio %d as output (%d)\n",
  245. __func__, data->scl_gpio, ret);
  246. goto exit_to_free;
  247. }
  248. /*Setting initial value after recovery*/
  249. udelay(100);
  250. gpio_set_value_cansleep(data->sda_gpio, 0);
  251. gpio_set_value_cansleep(data->scl_gpio, 0);
  252. udelay(100);
  253. gpio_set_value_cansleep(data->sda_gpio, 1);
  254. gpio_set_value_cansleep(data->scl_gpio, 1);
  255. exit_to_free:
  256. gpio_free(data->sda_gpio);
  257. gpio_free(data->scl_gpio);
  258. exit:
  259. msm_gpiomux_write(data->sda_gpio, GPIOMUX_ACTIVE, &old_config[0], NULL);
  260. msm_gpiomux_write(data->scl_gpio, GPIOMUX_ACTIVE, &old_config[1], NULL);
  261. return ret;
  262. }
  263. static int k2hh_i2c_read(struct k2hh_p *data,
  264. unsigned char reg_addr, unsigned char *buf, unsigned int len)
  265. {
  266. int ret, retries = 0;
  267. struct i2c_msg msg[2];
  268. msg[0].addr = data->client->addr;
  269. msg[0].flags = I2C_M_WR;
  270. msg[0].len = 1;
  271. msg[0].buf = &reg_addr;
  272. msg[1].addr = data->client->addr;
  273. msg[1].flags = I2C_M_RD;
  274. msg[1].len = len;
  275. msg[1].buf = buf;
  276. do {
  277. ret = i2c_transfer(data->client->adapter, msg, 2);
  278. if (ret >= 0)
  279. break;
  280. else
  281. k2hh_i2c_recovery(data);
  282. } while (retries++ < 2);
  283. if (ret < 0) {
  284. pr_err("[SENSOR]: %s - i2c read error %d\n", __func__, ret);
  285. return ret;
  286. }
  287. return 0;
  288. }
  289. static int k2hh_i2c_write(struct k2hh_p *data,
  290. unsigned char reg_addr, unsigned char buf)
  291. {
  292. int ret, retries = 0;
  293. struct i2c_msg msg;
  294. unsigned char w_buf[2];
  295. w_buf[0] = reg_addr;
  296. w_buf[1] = buf;
  297. msg.addr = data->client->addr;
  298. msg.flags = I2C_M_WR;
  299. msg.len = 2;
  300. msg.buf = (char *)w_buf;
  301. do {
  302. ret = i2c_transfer(data->client->adapter, &msg, 1);
  303. if (ret >= 0)
  304. break;
  305. else
  306. k2hh_i2c_recovery(data);
  307. } while (retries++ < 2);
  308. if (ret < 0) {
  309. pr_err("[SENSOR]: %s - i2c write error %d\n", __func__, ret);
  310. return ret;
  311. }
  312. return 0;
  313. }
  314. static int k2hh_set_range(struct k2hh_p *data, unsigned char range)
  315. {
  316. int ret = 0;
  317. unsigned char temp, new_range, buf, mask;
  318. switch (range) {
  319. case K2HH_RANGE_2G:
  320. new_range = K2HH_ACC_FS_2G;
  321. break;
  322. case K2HH_RANGE_4G:
  323. new_range = K2HH_ACC_FS_4G;
  324. break;
  325. case K2HH_RANGE_8G:
  326. new_range = K2HH_ACC_FS_8G;
  327. break;
  328. default:
  329. new_range = K2HH_ACC_FS_2G;
  330. break;
  331. }
  332. mask = K2HH_ACC_FS_MASK;
  333. ret = k2hh_i2c_read(data, CTRL4_REG, &temp, 1);
  334. #ifndef OUTPUT_ALWAYS_ANTI_ALIASED
  335. buf = (mask & new_range) | ((~mask) & temp);
  336. #else
  337. buf = 0xCC;
  338. #endif
  339. ret += k2hh_i2c_write(data, CTRL4_REG, buf);
  340. return ret;
  341. }
  342. static int k2hh_set_odr(struct k2hh_p *data)
  343. {
  344. int ret = 0, i;
  345. unsigned char buf, new_odr, mask, temp;
  346. /* Following, looks for the longest possible odr interval scrolling the
  347. * odr_table vector from the end (shortest interval) backward (longest
  348. * interval), to support the poll_interval requested by the system.
  349. * It must be the longest interval lower then the poll interval.*/
  350. for (i = ARRAY_SIZE(k2hh_acc_odr_table) - 1; i >= 0; i--) {
  351. if ((k2hh_acc_odr_table[i].cutoff_ms <= \
  352. ktime_to_ms(data->poll_delay)) || (i == 0))
  353. break;
  354. }
  355. if (data->recog_flag == ON)
  356. i = ARRAY_SIZE(k2hh_acc_odr_table) - 1;
  357. new_odr = k2hh_acc_odr_table[i].mask;
  358. mask = K2HH_ACC_ODR_MASK;
  359. ret = k2hh_i2c_read(data, CTRL1_REG, &temp, 1);
  360. buf = ((mask & new_odr) | ((~mask) & temp));
  361. ret += k2hh_i2c_write(data, CTRL1_REG, buf);
  362. pr_info("[SENSOR]: %s - change odr %d\n", __func__, i);
  363. return ret;
  364. }
  365. static int k2hh_set_mode(struct k2hh_p *data, unsigned char mode)
  366. {
  367. int ret = 0;
  368. unsigned char buf, mask, temp;
  369. mutex_lock(&data->mode_mutex);
  370. switch (mode) {
  371. case K2HH_MODE_NORMAL:
  372. mask = K2HH_ACC_AXES_MASK;
  373. ret = k2hh_i2c_read(data, CTRL1_REG, &temp, 1);
  374. buf = ((mask & ACC_ENABLE_ALL_AXES) | ((~mask) & temp));
  375. ret += k2hh_i2c_write(data, CTRL1_REG, buf);
  376. break;
  377. case K2HH_MODE_SUSPEND:
  378. mask = K2HH_ACC_AXES_MASK;
  379. ret = k2hh_i2c_read(data, CTRL1_REG, &temp, 1);
  380. buf = ((mask & ACC_PM_OFF) | ((~mask) & temp));
  381. ret += k2hh_i2c_write(data, CTRL1_REG, buf);
  382. break;
  383. default:
  384. ret = -EINVAL;
  385. break;
  386. }
  387. pr_info("[SENSOR]: %s - change mode %u\n", __func__, mode);
  388. mutex_unlock(&data->mode_mutex);
  389. return ret;
  390. }
  391. static int k2hh_read_accel_xyz(struct k2hh_p *data, struct k2hh_v *acc)
  392. {
  393. int ret = 0;
  394. struct k2hh_v rawdata;
  395. unsigned char buf[READ_DATA_LENTH];
  396. ret += k2hh_i2c_read(data, AXISDATA_REG, buf, READ_DATA_LENTH);
  397. if (ret < 0)
  398. goto exit;
  399. rawdata.v[0] = ((s16) ((buf[1] << 8) | buf[0]));
  400. rawdata.v[1] = ((s16) ((buf[3] << 8) | buf[2]));
  401. rawdata.v[2] = ((s16) ((buf[5] << 8) | buf[4]));
  402. acc->v[0] = ((data->negate_x) ? (-rawdata.v[data->axis_map_x])
  403. : (rawdata.v[data->axis_map_x]));
  404. acc->v[1] = ((data->negate_y) ? (-rawdata.v[data->axis_map_y])
  405. : (rawdata.v[data->axis_map_y]));
  406. acc->v[2] = ((data->negate_z) ? (-rawdata.v[data->axis_map_z])
  407. : (rawdata.v[data->axis_map_z]));
  408. exit:
  409. return ret;
  410. }
  411. static enum hrtimer_restart k2hh_timer_func(struct hrtimer *timer)
  412. {
  413. struct k2hh_p *data = container_of(timer,
  414. struct k2hh_p, accel_timer);
  415. if (!work_pending(&data->work))
  416. queue_work(data->accel_wq, &data->work);
  417. hrtimer_forward_now(&data->accel_timer, data->poll_delay);
  418. return HRTIMER_RESTART;
  419. }
  420. static void k2hh_work_func(struct work_struct *work)
  421. {
  422. int ret;
  423. struct k2hh_v acc;
  424. struct k2hh_p *data = container_of(work, struct k2hh_p, work);
  425. struct timespec ts;
  426. u64 timestamp_new;
  427. int time_hi, time_lo;
  428. get_monotonic_boottime(&ts);
  429. timestamp_new = ts.tv_sec * 1000000000ULL + ts.tv_nsec;
  430. ret = k2hh_read_accel_xyz(data, &acc);
  431. if (ret < 0)
  432. goto exit;
  433. data->accdata.x = acc.x - data->caldata.x;
  434. data->accdata.y = acc.y - data->caldata.y;
  435. data->accdata.z = acc.z - data->caldata.z;
  436. if (data->old_timestamp != 0 &&
  437. ((timestamp_new - data->old_timestamp) > ktime_to_ms(data->poll_delay) * 1800000LL)) {
  438. u64 delay = ktime_to_ns(data->poll_delay);
  439. u64 shift_timestamp = delay >> 1;
  440. u64 timestamp = 0ULL;
  441. for (timestamp = data->old_timestamp + delay; timestamp < timestamp_new - shift_timestamp; timestamp+=delay) {
  442. time_hi = (int)((timestamp & TIME_HI_MASK) >> TIME_HI_SHIFT);
  443. time_lo = (int)(timestamp & TIME_LO_MASK);
  444. input_report_rel(data->input, REL_X, data->accdata.x);
  445. input_report_rel(data->input, REL_Y, data->accdata.y);
  446. input_report_rel(data->input, REL_Z, data->accdata.z);
  447. input_report_rel(data->input, REL_DIAL, time_hi);
  448. input_report_rel(data->input, REL_MISC, time_lo);
  449. input_sync(data->input);
  450. }
  451. }
  452. time_hi = (int)((timestamp_new & TIME_HI_MASK) >> TIME_HI_SHIFT);
  453. time_lo = (int)(timestamp_new & TIME_LO_MASK);
  454. input_report_rel(data->input, REL_X, data->accdata.x);
  455. input_report_rel(data->input, REL_Y, data->accdata.y);
  456. input_report_rel(data->input, REL_Z, data->accdata.z);
  457. input_report_rel(data->input, REL_DIAL, time_hi);
  458. input_report_rel(data->input, REL_MISC, time_lo);
  459. input_sync(data->input);
  460. data->old_timestamp = timestamp_new;
  461. exit:
  462. if ((ktime_to_ns(data->poll_delay) * (int64_t)data->time_count)
  463. >= ((int64_t)ACCEL_LOG_TIME * NSEC_PER_SEC)) {
  464. pr_info("[SENSOR]: %s - x = %d, y = %d, z = %d (ra:%d)\n",
  465. __func__, data->accdata.x, data->accdata.y,
  466. data->accdata.z, data->recog_flag);
  467. data->time_count = 0;
  468. } else
  469. data->time_count++;
  470. }
  471. static void k2hh_set_enable(struct k2hh_p *data, int enable)
  472. {
  473. if (enable == ON) {
  474. hrtimer_start(&data->accel_timer, data->poll_delay,
  475. HRTIMER_MODE_REL);
  476. } else {
  477. hrtimer_cancel(&data->accel_timer);
  478. cancel_work_sync(&data->work);
  479. }
  480. }
  481. static ssize_t k2hh_enable_show(struct device *dev,
  482. struct device_attribute *attr, char *buf)
  483. {
  484. struct k2hh_p *data = dev_get_drvdata(dev);
  485. return snprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&data->enable));
  486. }
  487. static ssize_t k2hh_enable_store(struct device *dev,
  488. struct device_attribute *attr, const char *buf, size_t size)
  489. {
  490. u8 enable;
  491. int ret, pre_enable;
  492. struct k2hh_p *data = dev_get_drvdata(dev);
  493. ret = kstrtou8(buf, 2, &enable);
  494. if (ret) {
  495. pr_err("[SENSOR]: %s - Invalid Argument\n", __func__);
  496. return ret;
  497. }
  498. pr_info("[SENSOR]: %s - new_value = %u\n", __func__, enable);
  499. pre_enable = atomic_read(&data->enable);
  500. if (enable) {
  501. if (pre_enable == OFF) {
  502. data->old_timestamp = 0LL;
  503. sensor_regulator_onoff(data, true);
  504. k2hh_open_calibration(data);
  505. k2hh_set_range(data, K2HH_RANGE_2G);
  506. k2hh_set_mode(data, K2HH_MODE_NORMAL);
  507. atomic_set(&data->enable, ON);
  508. k2hh_set_enable(data, ON);
  509. }
  510. } else {
  511. if (pre_enable == ON) {
  512. atomic_set(&data->enable, OFF);
  513. k2hh_set_mode(data, K2HH_MODE_SUSPEND);
  514. k2hh_set_enable(data, OFF);
  515. sensor_regulator_onoff(data, false);
  516. }
  517. }
  518. return size;
  519. }
  520. static ssize_t k2hh_delay_show(struct device *dev,
  521. struct device_attribute *attr, char *buf)
  522. {
  523. struct k2hh_p *data = dev_get_drvdata(dev);
  524. return snprintf(buf, PAGE_SIZE, "%lld\n",
  525. ktime_to_ns(data->poll_delay));
  526. }
  527. static ssize_t k2hh_delay_store(struct device *dev,
  528. struct device_attribute *attr, const char *buf, size_t size)
  529. {
  530. int ret;
  531. int64_t delay;
  532. struct k2hh_p *data = dev_get_drvdata(dev);
  533. ret = kstrtoll(buf, 10, &delay);
  534. if (ret) {
  535. pr_err("[SENSOR]: %s - Invalid Argument\n", __func__);
  536. return ret;
  537. }
  538. if (delay > K2HH_DEFAULT_DELAY)
  539. delay = K2HH_DEFAULT_DELAY;
  540. data->poll_delay = ns_to_ktime(delay);
  541. k2hh_set_odr(data);
  542. if (atomic_read(&data->enable) == ON) {
  543. k2hh_set_mode(data, K2HH_MODE_SUSPEND);
  544. k2hh_set_mode(data, K2HH_MODE_NORMAL);
  545. }
  546. pr_info("[SENSOR]: %s - poll_delay = %lld\n", __func__, delay);
  547. return size;
  548. }
  549. static DEVICE_ATTR(poll_delay, S_IRUGO | S_IWUSR | S_IWGRP,
  550. k2hh_delay_show, k2hh_delay_store);
  551. static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR | S_IWGRP,
  552. k2hh_enable_show, k2hh_enable_store);
  553. static struct attribute *k2hh_attributes[] = {
  554. &dev_attr_poll_delay.attr,
  555. &dev_attr_enable.attr,
  556. NULL
  557. };
  558. static struct attribute_group k2hh_attribute_group = {
  559. .attrs = k2hh_attributes
  560. };
  561. static ssize_t k2hh_vendor_show(struct device *dev,
  562. struct device_attribute *attr, char *buf)
  563. {
  564. return snprintf(buf, PAGE_SIZE, "%s\n", VENDOR_NAME);
  565. }
  566. static ssize_t k2hh_name_show(struct device *dev,
  567. struct device_attribute *attr, char *buf)
  568. {
  569. return snprintf(buf, PAGE_SIZE, "%s\n", MODEL_NAME);
  570. }
  571. static int k2hh_open_calibration(struct k2hh_p *data)
  572. {
  573. int ret = 0;
  574. mm_segment_t old_fs;
  575. struct file *cal_filp = NULL;
  576. old_fs = get_fs();
  577. set_fs(KERNEL_DS);
  578. cal_filp = filp_open(CALIBRATION_FILE_PATH, O_RDONLY, 0666);
  579. if (IS_ERR(cal_filp)) {
  580. set_fs(old_fs);
  581. ret = PTR_ERR(cal_filp);
  582. data->caldata.x = 0;
  583. data->caldata.y = 0;
  584. data->caldata.z = 0;
  585. pr_info("[SENSOR]: %s - No Calibration\n", __func__);
  586. return ret;
  587. }
  588. ret = cal_filp->f_op->read(cal_filp, (char *)&data->caldata.v,
  589. 3 * sizeof(s16), &cal_filp->f_pos);
  590. if (ret != 3 * sizeof(s16)) {
  591. pr_err("[SENSOR] %s: - Can't read the cal data\n", __func__);
  592. ret = -EIO;
  593. }
  594. filp_close(cal_filp, current->files);
  595. set_fs(old_fs);
  596. pr_info("[SENSOR]: open accel calibration %d, %d, %d\n",
  597. data->caldata.x, data->caldata.y, data->caldata.z);
  598. if ((data->caldata.x == 0) && (data->caldata.y == 0)
  599. && (data->caldata.z == 0))
  600. return -EIO;
  601. return ret;
  602. }
  603. static int k2hh_do_calibrate(struct k2hh_p *data, int enable)
  604. {
  605. int sum[3] = { 0, };
  606. int ret = 0, cnt;
  607. struct file *cal_filp = NULL;
  608. struct k2hh_v acc;
  609. mm_segment_t old_fs;
  610. if (enable) {
  611. data->caldata.x = 0;
  612. data->caldata.y = 0;
  613. data->caldata.z = 0;
  614. if (atomic_read(&data->enable) == ON)
  615. k2hh_set_enable(data, OFF);
  616. else
  617. k2hh_set_mode(data, K2HH_MODE_NORMAL);
  618. msleep(300);
  619. for (cnt = 0; cnt < CALIBRATION_DATA_AMOUNT; cnt++) {
  620. k2hh_read_accel_xyz(data, &acc);
  621. sum[0] += acc.x;
  622. sum[1] += acc.y;
  623. sum[2] += acc.z;
  624. mdelay(10);
  625. }
  626. if (atomic_read(&data->enable) == ON)
  627. k2hh_set_enable(data, ON);
  628. else
  629. k2hh_set_mode(data, K2HH_MODE_SUSPEND);
  630. data->caldata.x = (sum[0] / CALIBRATION_DATA_AMOUNT);
  631. data->caldata.y = (sum[1] / CALIBRATION_DATA_AMOUNT);
  632. data->caldata.z = (sum[2] / CALIBRATION_DATA_AMOUNT);
  633. if (data->caldata.z > 0)
  634. data->caldata.z -= MAX_ACCEL_1G;
  635. else if (data->caldata.z < 0)
  636. data->caldata.z += MAX_ACCEL_1G;
  637. } else {
  638. data->caldata.x = 0;
  639. data->caldata.y = 0;
  640. data->caldata.z = 0;
  641. }
  642. pr_info("[SENSOR]: %s - do accel calibrate %d, %d, %d\n", __func__,
  643. data->caldata.x, data->caldata.y, data->caldata.z);
  644. old_fs = get_fs();
  645. set_fs(KERNEL_DS);
  646. cal_filp = filp_open(CALIBRATION_FILE_PATH,
  647. O_CREAT | O_TRUNC | O_WRONLY, 0666);
  648. if (IS_ERR(cal_filp)) {
  649. pr_err("[SENSOR]: %s - Can't open calibration file\n",
  650. __func__);
  651. set_fs(old_fs);
  652. ret = PTR_ERR(cal_filp);
  653. return ret;
  654. }
  655. ret = cal_filp->f_op->write(cal_filp, (char *)&data->caldata.v,
  656. 3 * sizeof(s16), &cal_filp->f_pos);
  657. if (ret != 3 * sizeof(s16)) {
  658. pr_err("[SENSOR]: %s - Can't write the caldata to file\n",
  659. __func__);
  660. ret = -EIO;
  661. }
  662. filp_close(cal_filp, current->files);
  663. set_fs(old_fs);
  664. return ret;
  665. }
  666. static ssize_t k2hh_calibration_show(struct device *dev,
  667. struct device_attribute *attr, char *buf)
  668. {
  669. int ret;
  670. struct k2hh_p *data = dev_get_drvdata(dev);
  671. ret = k2hh_open_calibration(data);
  672. if (ret < 0)
  673. pr_err("[SENSOR]: %s - calibration open failed(%d)\n",
  674. __func__, ret);
  675. pr_info("[SENSOR]: %s - cal data %d %d %d - ret : %d\n", __func__,
  676. data->caldata.x, data->caldata.y, data->caldata.z, ret);
  677. return snprintf(buf, PAGE_SIZE, "%d %d %d %d\n", ret, data->caldata.x,
  678. data->caldata.y, data->caldata.z);
  679. }
  680. static ssize_t k2hh_calibration_store(struct device *dev,
  681. struct device_attribute *attr, const char *buf, size_t size)
  682. {
  683. int ret;
  684. int64_t dEnable;
  685. struct k2hh_p *data = dev_get_drvdata(dev);
  686. ret = kstrtoll(buf, 10, &dEnable);
  687. if (ret < 0)
  688. return ret;
  689. ret = k2hh_do_calibrate(data, (int)dEnable);
  690. if (ret < 0)
  691. pr_err("[SENSOR]: %s - accel calibrate failed\n", __func__);
  692. return size;
  693. }
  694. static ssize_t k2hh_raw_data_read(struct device *dev,
  695. struct device_attribute *attr, char *buf)
  696. {
  697. struct k2hh_v acc;
  698. struct k2hh_p *data = dev_get_drvdata(dev);
  699. if (atomic_read(&data->enable) == OFF) {
  700. k2hh_set_mode(data, K2HH_MODE_NORMAL);
  701. msleep(20);
  702. k2hh_read_accel_xyz(data, &acc);
  703. k2hh_set_mode(data, K2HH_MODE_SUSPEND);
  704. acc.x = acc.x - data->caldata.x;
  705. acc.y = acc.y - data->caldata.y;
  706. acc.z = acc.z - data->caldata.z;
  707. } else {
  708. acc = data->accdata;
  709. }
  710. return snprintf(buf, PAGE_SIZE, "%d,%d,%d\n",
  711. acc.x, acc.y, acc.z);
  712. }
  713. static ssize_t k2hh_reactive_alert_store(struct device *dev,
  714. struct device_attribute *attr, const char *buf, size_t size)
  715. {
  716. unsigned char threshx, threshy, threshz;
  717. int enable = OFF, factory_mode = OFF;
  718. struct k2hh_v acc;
  719. struct k2hh_p *data = dev_get_drvdata(dev);
  720. if (sysfs_streq(buf, "0")) {
  721. enable = OFF;
  722. factory_mode = OFF;
  723. pr_info("[SENSOR]: %s - disable\n", __func__);
  724. } else if (sysfs_streq(buf, "1")) {
  725. enable = ON;
  726. factory_mode = OFF;
  727. pr_info("[SENSOR]: %s - enable\n", __func__);
  728. } else if (sysfs_streq(buf, "2")) {
  729. enable = ON;
  730. factory_mode = ON;
  731. pr_info("[SENSOR]: %s - factory mode\n", __func__);
  732. } else {
  733. pr_err("[SENSOR]: %s - invalid value %d\n", __func__, *buf);
  734. return -EINVAL;
  735. }
  736. if ((enable == ON) && (data->recog_flag == OFF)) {
  737. data->irq_state = 0;
  738. data->recog_flag = ON;
  739. if (factory_mode == ON) {
  740. k2hh_i2c_write(data, INT_THSX1_REG, 0x00);
  741. k2hh_i2c_write(data, INT_THSY1_REG, 0x00);
  742. k2hh_i2c_write(data, INT_THSZ1_REG, 0x00);
  743. k2hh_i2c_write(data, INT_CFG1_REG, 0x3f);
  744. } else {
  745. k2hh_set_odr(data);
  746. if (atomic_read(&data->enable) == OFF) {
  747. k2hh_set_mode(data, K2HH_MODE_NORMAL);
  748. msleep(20);
  749. k2hh_read_accel_xyz(data, &acc);
  750. k2hh_set_mode(data, K2HH_MODE_SUSPEND);
  751. } else {
  752. acc.x = data->accdata.x;
  753. acc.y = data->accdata.y;
  754. acc.z = data->accdata.z;
  755. }
  756. threshx = (abs(acc.v[data->axis_map_x]) \
  757. + DYNAMIC_THRESHOLD) >> 8;
  758. threshy = (abs(acc.v[data->axis_map_y]) \
  759. + DYNAMIC_THRESHOLD) >> 8;
  760. threshz = (abs(acc.v[data->axis_map_z]) \
  761. + DYNAMIC_THRESHOLD) >> 8;
  762. k2hh_i2c_write(data, INT_THSX1_REG, threshx);
  763. k2hh_i2c_write(data, INT_THSY1_REG, threshy);
  764. k2hh_i2c_write(data, INT_THSZ1_REG, threshz);
  765. k2hh_i2c_write(data, INT_CFG1_REG, 0x0a);
  766. }
  767. k2hh_i2c_write(data, CTRL7_REG, CTRL7_LIR1);
  768. k2hh_i2c_write(data, CTRL3_REG, CTRL3_IG1_INT1);
  769. enable_irq(data->irq1);
  770. enable_irq_wake(data->irq1);
  771. pr_info("[SENSOR]: %s - reactive alert is on!\n", __func__);
  772. } else if ((enable == OFF) && (data->recog_flag == ON)) {
  773. k2hh_i2c_write(data, CTRL3_REG, 0x00);
  774. disable_irq_wake(data->irq1);
  775. disable_irq_nosync(data->irq1);
  776. data->recog_flag = OFF;
  777. pr_info("[SENSOR]: %s - reactive alert is off! irq = %d\n",
  778. __func__, data->irq_state);
  779. }
  780. return size;
  781. }
  782. static ssize_t k2hh_reactive_alert_show(struct device *dev,
  783. struct device_attribute *attr, char *buf)
  784. {
  785. struct k2hh_p *data = dev_get_drvdata(dev);
  786. return snprintf(buf, PAGE_SIZE, "%d\n", data->irq_state);
  787. }
  788. static ssize_t k2hh_selftest_show(struct device *dev,
  789. struct device_attribute *attr, char *buf)
  790. {
  791. struct k2hh_p *data = dev_get_drvdata(dev);
  792. struct k2hh_v acc;
  793. unsigned char temp;
  794. int result = 1, i;
  795. ssize_t ret;
  796. s32 NO_ST[3] = {0, 0, 0};
  797. s32 ST[3] = {0, 0, 0};
  798. if (atomic_read(&data->enable) == OFF)
  799. k2hh_set_mode(data, K2HH_MODE_NORMAL);
  800. else
  801. k2hh_set_enable(data, OFF);
  802. k2hh_i2c_write(data, CTRL1_REG, 0x3f);
  803. k2hh_i2c_write(data, CTRL4_REG, 0x04);
  804. k2hh_i2c_write(data, CTRL5_REG, 0x00);
  805. k2hh_i2c_write(data, CTRL6_REG, 0x00);
  806. mdelay(80);
  807. k2hh_read_accel_xyz(data, &acc);
  808. for (i = 0; i < 5; i++) {
  809. while (1) {
  810. if (k2hh_i2c_read(data, STATUS_REG, &temp, 1) < 0) {
  811. pr_err("[SENSOR] %s: i2c error", __func__);
  812. goto exit_status_err;
  813. }
  814. if (temp & 0x08)
  815. break;
  816. }
  817. k2hh_read_accel_xyz(data, &acc);
  818. NO_ST[0] += acc.x;
  819. NO_ST[1] += acc.y;
  820. NO_ST[2] += acc.z;
  821. }
  822. NO_ST[0] /= 5;
  823. NO_ST[1] /= 5;
  824. NO_ST[2] /= 5;
  825. k2hh_i2c_write(data, CTRL5_REG, 0x04);
  826. mdelay(80);
  827. k2hh_read_accel_xyz(data, &acc);
  828. for (i = 0; i < 5; i++) {
  829. while (1) {
  830. if (k2hh_i2c_read(data, STATUS_REG, &temp, 1) < 0) {
  831. pr_err("[SENSOR] %s: i2c error", __func__);
  832. goto exit_status_err;
  833. }
  834. if (temp & 0x08)
  835. break;
  836. }
  837. k2hh_read_accel_xyz(data, &acc);
  838. ST[0] += acc.x;
  839. ST[1] += acc.y;
  840. ST[2] += acc.z;
  841. }
  842. ST[0] /= 5;
  843. ST[1] /= 5;
  844. ST[2] /= 5;
  845. for (i = 0; i < 3; i++) {
  846. ST[i] -= NO_ST[i];
  847. ST[i] = abs(ST[i]);
  848. if ((SELF_TEST_2G_MIN_LSB > ST[i]) \
  849. || (ST[i] > SELF_TEST_2G_MAX_LSB)) {
  850. pr_info("[SENSOR] %s: %d Out of range!! (%d)\n",
  851. __func__, i, ST[i]);
  852. result = 0;
  853. }
  854. }
  855. if (result)
  856. ret = sprintf(buf, "1,%d,%d,%d\n", ST[0], ST[1], ST[2]);
  857. else
  858. ret = sprintf(buf, "0,%d,%d,%d\n", ST[0], ST[1], ST[2]);
  859. goto exit;
  860. exit_status_err:
  861. ret = sprintf(buf, "-1,0,0,0\n");
  862. exit:
  863. k2hh_i2c_write(data, CTRL1_REG, 0x00);
  864. k2hh_i2c_write(data, CTRL5_REG, 0x00);
  865. if (atomic_read(&data->enable) == OFF) {
  866. k2hh_set_mode(data, K2HH_MODE_SUSPEND);
  867. } else {
  868. k2hh_set_mode(data, K2HH_MODE_NORMAL);
  869. k2hh_set_enable(data, ON);
  870. }
  871. return ret;
  872. }
  873. static DEVICE_ATTR(selftest, S_IRUGO, k2hh_selftest_show, NULL);
  874. static DEVICE_ATTR(name, S_IRUGO, k2hh_name_show, NULL);
  875. static DEVICE_ATTR(vendor, S_IRUGO, k2hh_vendor_show, NULL);
  876. static DEVICE_ATTR(calibration, S_IRUGO | S_IWUSR | S_IWGRP,
  877. k2hh_calibration_show, k2hh_calibration_store);
  878. static DEVICE_ATTR(raw_data, S_IRUGO, k2hh_raw_data_read, NULL);
  879. static DEVICE_ATTR(reactive_alert, S_IRUGO | S_IWUSR | S_IWGRP,
  880. k2hh_reactive_alert_show, k2hh_reactive_alert_store);
  881. static struct device_attribute *sensor_attrs[] = {
  882. &dev_attr_name,
  883. &dev_attr_vendor,
  884. &dev_attr_calibration,
  885. &dev_attr_raw_data,
  886. &dev_attr_reactive_alert,
  887. &dev_attr_selftest,
  888. NULL,
  889. };
  890. static void k2hh_irq_work_func(struct work_struct *work)
  891. {
  892. struct k2hh_p *data = container_of((struct delayed_work *)work,
  893. struct k2hh_p, irq_work);
  894. unsigned char buf;
  895. k2hh_i2c_write(data, INT_CFG1_REG, 0x00);
  896. k2hh_i2c_read(data, INT_SRC1_REG, &buf, 1);
  897. }
  898. static irqreturn_t k2hh_irq_thread(int irq, void *k2hh_data_p)
  899. {
  900. struct k2hh_p *data = k2hh_data_p;
  901. data->irq_state = 1;
  902. wake_lock_timeout(&data->reactive_wake_lock,
  903. msecs_to_jiffies(2000));
  904. schedule_delayed_work(&data->irq_work, msecs_to_jiffies(100));
  905. pr_info("###### [SENSOR]: %s reactive irq ######\n", __func__);
  906. return IRQ_HANDLED;
  907. }
  908. static int k2hh_setup_pin(struct k2hh_p *data)
  909. {
  910. int ret;
  911. ret = gpio_request(data->acc_int1, "ACC_INT1");
  912. if (ret < 0) {
  913. pr_err("[SENSOR] %s - gpio %d request failed (%d)\n",
  914. __func__, data->acc_int1, ret);
  915. goto exit;
  916. }
  917. ret = gpio_direction_input(data->acc_int1);
  918. if (ret < 0) {
  919. pr_err("[SENSOR]: %s - failed to set gpio %d as input (%d)\n",
  920. __func__, data->acc_int1, ret);
  921. goto exit_acc_int1;
  922. }
  923. wake_lock_init(&data->reactive_wake_lock, WAKE_LOCK_SUSPEND,
  924. "reactive_wake_lock");
  925. data->irq1 = gpio_to_irq(data->acc_int1);
  926. ret = request_threaded_irq(data->irq1, NULL, k2hh_irq_thread,
  927. IRQF_TRIGGER_RISING | IRQF_ONESHOT, "k2hh_accel", data);
  928. if (ret < 0) {
  929. pr_err("[SENSOR]: %s - can't allocate irq.\n", __func__);
  930. goto exit_reactive_irq;
  931. }
  932. disable_irq(data->irq1);
  933. goto exit;
  934. exit_reactive_irq:
  935. wake_lock_destroy(&data->reactive_wake_lock);
  936. exit_acc_int1:
  937. gpio_free(data->acc_int1);
  938. exit:
  939. return ret;
  940. }
  941. static int k2hh_input_init(struct k2hh_p *data)
  942. {
  943. int ret = 0;
  944. struct input_dev *dev;
  945. dev = input_allocate_device();
  946. if (!dev)
  947. return -ENOMEM;
  948. dev->name = MODULE_NAME;
  949. dev->id.bustype = BUS_I2C;
  950. input_set_capability(dev, EV_REL, REL_X);
  951. input_set_capability(dev, EV_REL, REL_Y);
  952. input_set_capability(dev, EV_REL, REL_Z);
  953. input_set_capability(dev, EV_REL, REL_DIAL);
  954. input_set_capability(dev, EV_REL, REL_MISC);
  955. input_set_drvdata(dev, data);
  956. ret = input_register_device(dev);
  957. if (ret < 0) {
  958. input_free_device(dev);
  959. return ret;
  960. }
  961. ret = sensors_create_symlink(&dev->dev.kobj, dev->name);
  962. if (ret < 0) {
  963. input_unregister_device(dev);
  964. return ret;
  965. }
  966. /* sysfs node creation */
  967. ret = sysfs_create_group(&dev->dev.kobj, &k2hh_attribute_group);
  968. if (ret < 0) {
  969. sensors_remove_symlink(&data->input->dev.kobj,
  970. data->input->name);
  971. input_unregister_device(dev);
  972. return ret;
  973. }
  974. data->input = dev;
  975. return 0;
  976. }
  977. static int k2hh_parse_dt(struct k2hh_p *data, struct device *dev)
  978. {
  979. struct device_node *dNode = dev->of_node;
  980. enum of_gpio_flags flags;
  981. int ret;
  982. u32 temp;
  983. if (dNode == NULL)
  984. return -ENODEV;
  985. data->acc_int1 = of_get_named_gpio_flags(dNode,
  986. "stm,irq_gpio", 0, &flags);
  987. if (data->acc_int1 < 0) {
  988. pr_err("[SENSOR]: %s - get acc_int1 error\n", __func__);
  989. return -ENODEV;
  990. }
  991. data->sda_gpio = of_get_named_gpio_flags(dNode,
  992. "stm,sda", 0, &flags);
  993. if (data->sda_gpio < 0)
  994. pr_info("[SENSOR]: %s - no sda_gpio\n", __func__);
  995. data->scl_gpio = of_get_named_gpio_flags(dNode,
  996. "stm,scl", 0, &flags);
  997. if (data->scl_gpio < 0)
  998. pr_info("[SENSOR]: %s - no scl_gpio\n", __func__);
  999. ret = of_property_read_u32(dNode,"stm,axis_map_x", &temp);
  1000. if ((data->axis_map_x > 2) || (ret < 0)) {
  1001. pr_err("%s: invalid x axis_map value %u\n",
  1002. __func__, data->axis_map_x);
  1003. data->axis_map_x = 0;
  1004. } else {
  1005. data->axis_map_x= (u8)temp;
  1006. }
  1007. ret = of_property_read_u32(dNode,"stm,axis_map_y", &temp);
  1008. if ((data->axis_map_y > 2) || (ret < 0)) {
  1009. pr_err("%s: invalid y axis_map value %u\n",
  1010. __func__, data->axis_map_y);
  1011. data->axis_map_y = 1;
  1012. } else {
  1013. data->axis_map_y= (u8)temp;
  1014. }
  1015. ret = of_property_read_u32(dNode,"stm,axis_map_z", &temp);
  1016. if ((data->axis_map_z > 2) || (ret < 0)) {
  1017. pr_err("%s: invalid z axis_map value %u\n",
  1018. __func__, data->axis_map_z);
  1019. data->axis_map_z = 2;
  1020. } else {
  1021. data->axis_map_z= (u8)temp;
  1022. }
  1023. ret = of_property_read_u32(dNode,"stm,negate_x", &temp);
  1024. if ((data->negate_x > 1) || (ret < 0)) {
  1025. pr_err("%s: invalid x axis_map value %u\n",
  1026. __func__, data->negate_x);
  1027. data->negate_x = 0;
  1028. } else {
  1029. data->negate_x= (u8)temp;
  1030. }
  1031. ret = of_property_read_u32(dNode,"stm,negate_y", &temp);
  1032. if ((data->negate_y > 1) || (ret < 0)) {
  1033. pr_err("%s: invalid y axis_map value %u\n",
  1034. __func__, data->negate_y);
  1035. data->negate_y = 0;
  1036. } else {
  1037. data->negate_y= (u8)temp;
  1038. }
  1039. ret = of_property_read_u32(dNode,"stm,negate_z", &temp);
  1040. if ((data->negate_z > 1) || (ret < 0)) {
  1041. pr_err("%s: invalid z axis_map value %u\n",
  1042. __func__, data->negate_z);
  1043. data->negate_z = 0;
  1044. } else {
  1045. data->negate_z= (u8)temp;
  1046. }
  1047. return 0;
  1048. }
  1049. static int sensor_regulator_onoff(struct k2hh_p *data, bool onoff)
  1050. {
  1051. int ret = -1;
  1052. if (!data->l19) {
  1053. data->l19 = regulator_get(&data->client->dev, "8226_l19");
  1054. if (!data->l19) {
  1055. pr_err("%s: regulator pointer null l19, rc=%d\n",
  1056. __func__, ret);
  1057. return ret;
  1058. }
  1059. ret = regulator_set_voltage(data->l19, 2850000, 2850000);
  1060. if (ret) {
  1061. pr_err("%s: set voltage failed on l19, rc=%d\n",
  1062. __func__, ret);
  1063. return ret;
  1064. }
  1065. }
  1066. if (!data->lvs1_1p8) {
  1067. data->lvs1_1p8 = regulator_get(&data->client->dev, "8226_lvs1");
  1068. if(!data->lvs1_1p8){
  1069. pr_err("%s: regulator_get for 8226_lvs1 failed\n",
  1070. __func__);
  1071. return 0;
  1072. }
  1073. }
  1074. if(onoff){
  1075. ret = regulator_enable(data->l19);
  1076. if (ret) {
  1077. pr_err("%s: Failed to enable regulator l19.\n",
  1078. __func__);
  1079. return ret;
  1080. }
  1081. ret = regulator_enable(data->lvs1_1p8);
  1082. if (ret) {
  1083. pr_err("%s: Failed to enable regulator lvs1_1p8.\n",
  1084. __func__);
  1085. return ret;
  1086. }
  1087. msleep(30);
  1088. }
  1089. else {
  1090. ret = regulator_disable(data->l19);
  1091. if (ret) {
  1092. pr_err("%s: Failed to disable regulatorl19.\n",
  1093. __func__);
  1094. return ret;
  1095. }
  1096. ret = regulator_disable(data->lvs1_1p8);
  1097. if (ret) {
  1098. pr_err("%s: Failed to disable regulator lvs1_1p8.\n",
  1099. __func__);
  1100. return ret;
  1101. }
  1102. }
  1103. return 0;
  1104. }
  1105. static int k2hh_probe(struct i2c_client *client,
  1106. const struct i2c_device_id *id)
  1107. {
  1108. u8 temp;
  1109. int ret = -ENODEV, i;
  1110. struct k2hh_p *data = NULL;
  1111. pr_err("[SENSOR]: %s - Probe Start!\n", __func__);
  1112. if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
  1113. pr_err("[SENSOR]: %s - i2c_check_functionality error\n",
  1114. __func__);
  1115. goto exit;
  1116. }
  1117. data = kzalloc(sizeof(struct k2hh_p), GFP_KERNEL);
  1118. if (data == NULL) {
  1119. pr_err("[SENSOR]: %s - kzalloc error\n", __func__);
  1120. ret = -ENOMEM;
  1121. goto exit_kzalloc;
  1122. }
  1123. i2c_set_clientdata(client, data);
  1124. data->client = client;
  1125. ret = sensor_regulator_onoff(data, true);
  1126. if (ret < 0)
  1127. pr_err("[SENSOR]: %s - No regulator\n", __func__);
  1128. ret = k2hh_parse_dt(data, &client->dev);
  1129. if (ret < 0) {
  1130. pr_err("[SENSOR]: %s - of_node error\n", __func__);
  1131. ret = -ENODEV;
  1132. goto exit_of_node;
  1133. }
  1134. ret = k2hh_setup_pin(data);
  1135. if (ret < 0) {
  1136. pr_err("[SENSOR]: %s - could not setup pin\n", __func__);
  1137. goto exit_setup_pin;
  1138. }
  1139. mutex_init(&data->mode_mutex);
  1140. /* read chip id */
  1141. k2hh_set_mode(data, K2HH_MODE_NORMAL);
  1142. for (i = 0; i < CHIP_ID_RETRIES; i++) {
  1143. ret = k2hh_i2c_read(data, WHOAMI_REG, &temp, 1);
  1144. if (temp != K2HH_CHIP_ID) {
  1145. pr_err("[SENSOR]: %s - chip id failed 0x%x : %d\n",
  1146. __func__, temp, ret);
  1147. } else {
  1148. pr_info("[SENSOR]: %s - chip id success 0x%x\n",
  1149. __func__, temp);
  1150. break;
  1151. }
  1152. msleep(20);
  1153. }
  1154. if (i >= CHIP_ID_RETRIES) {
  1155. ret = -ENODEV;
  1156. goto exit_read_chipid;
  1157. }
  1158. /* input device init */
  1159. ret = k2hh_input_init(data);
  1160. if (ret < 0)
  1161. goto exit_input_init;
  1162. sensors_register(data->factory_device, data, sensor_attrs, MODULE_NAME);
  1163. /* accel_timer settings. we poll for light values using a timer. */
  1164. hrtimer_init(&data->accel_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
  1165. data->poll_delay = ns_to_ktime(K2HH_DEFAULT_DELAY);
  1166. data->accel_timer.function = k2hh_timer_func;
  1167. /* the timer just fires off a work queue request. we need a thread
  1168. to read the i2c (can be slow and blocking). */
  1169. data->accel_wq = create_singlethread_workqueue("accel_wq");
  1170. if (!data->accel_wq) {
  1171. ret = -ENOMEM;
  1172. pr_err("[SENSOR]: %s - could not create workqueue\n", __func__);
  1173. goto exit_create_workqueue;
  1174. }
  1175. /* this is the thread function we run on the work queue */
  1176. INIT_WORK(&data->work, k2hh_work_func);
  1177. INIT_DELAYED_WORK(&data->irq_work, k2hh_irq_work_func);
  1178. atomic_set(&data->enable, OFF);
  1179. data->time_count = 0;
  1180. data->irq_state = 0;
  1181. data->recog_flag = OFF;
  1182. k2hh_set_range(data, K2HH_RANGE_2G);
  1183. k2hh_set_mode(data, K2HH_MODE_SUSPEND);
  1184. /*power off the regulators, for next enable power will be on*/
  1185. ret = sensor_regulator_onoff(data, false);
  1186. pr_err("[SENSOR]: %s - Probe done!\n", __func__);
  1187. return 0;
  1188. exit_create_workqueue:
  1189. sensors_unregister(data->factory_device, sensor_attrs);
  1190. sensors_remove_symlink(&data->input->dev.kobj, data->input->name);
  1191. sysfs_remove_group(&data->input->dev.kobj, &k2hh_attribute_group);
  1192. input_unregister_device(data->input);
  1193. exit_input_init:
  1194. exit_read_chipid:
  1195. mutex_destroy(&data->mode_mutex);
  1196. free_irq(data->irq1, data);
  1197. wake_lock_destroy(&data->reactive_wake_lock);
  1198. gpio_free(data->acc_int1);
  1199. exit_setup_pin:
  1200. exit_of_node:
  1201. kfree(data);
  1202. exit_kzalloc:
  1203. exit:
  1204. pr_err("[SENSOR]: %s - Probe fail!\n", __func__);
  1205. return ret;
  1206. }
  1207. static void k2hh_shutdown(struct i2c_client *client)
  1208. {
  1209. struct k2hh_p *data = (struct k2hh_p *)i2c_get_clientdata(client);
  1210. pr_info("[SENSOR]: %s\n", __func__);
  1211. if (atomic_read(&data->enable) == ON)
  1212. k2hh_set_enable(data, OFF);
  1213. atomic_set(&data->enable, OFF);
  1214. k2hh_set_mode(data, K2HH_MODE_SUSPEND);
  1215. }
  1216. static int __devexit k2hh_remove(struct i2c_client *client)
  1217. {
  1218. struct k2hh_p *data = (struct k2hh_p *)i2c_get_clientdata(client);
  1219. if (atomic_read(&data->enable) == ON)
  1220. k2hh_set_enable(data, OFF);
  1221. atomic_set(&data->enable, OFF);
  1222. cancel_delayed_work_sync(&data->irq_work);
  1223. k2hh_set_mode(data, K2HH_MODE_SUSPEND);
  1224. sensors_unregister(data->factory_device, sensor_attrs);
  1225. sensors_remove_symlink(&data->input->dev.kobj, data->input->name);
  1226. sysfs_remove_group(&data->input->dev.kobj, &k2hh_attribute_group);
  1227. input_unregister_device(data->input);
  1228. free_irq(data->irq1, data);
  1229. wake_lock_destroy(&data->reactive_wake_lock);
  1230. mutex_destroy(&data->mode_mutex);
  1231. gpio_free(data->acc_int1);
  1232. kfree(data);
  1233. return 0;
  1234. }
  1235. static int k2hh_suspend(struct device *dev)
  1236. {
  1237. struct k2hh_p *data = dev_get_drvdata(dev);
  1238. pr_info("[SENSOR]: %s\n", __func__);
  1239. if (atomic_read(&data->enable) == ON) {
  1240. k2hh_set_mode(data, K2HH_MODE_SUSPEND);
  1241. k2hh_set_enable(data, OFF);
  1242. }
  1243. return 0;
  1244. }
  1245. static int k2hh_resume(struct device *dev)
  1246. {
  1247. struct k2hh_p *data = dev_get_drvdata(dev);
  1248. pr_info("[SENSOR]: %s\n", __func__);
  1249. if (atomic_read(&data->enable) == ON) {
  1250. k2hh_set_mode(data, K2HH_MODE_NORMAL);
  1251. k2hh_set_enable(data, ON);
  1252. }
  1253. return 0;
  1254. }
  1255. static struct of_device_id k2hh_match_table[] = {
  1256. { .compatible = "stm,k2hh",},
  1257. {},
  1258. };
  1259. static const struct i2c_device_id k2hh_id[] = {
  1260. { "k2hh_match_table", 0 },
  1261. { }
  1262. };
  1263. static const struct dev_pm_ops k2hh_pm_ops = {
  1264. .suspend = k2hh_suspend,
  1265. .resume = k2hh_resume
  1266. };
  1267. static struct i2c_driver k2hh_driver = {
  1268. .driver = {
  1269. .name = MODEL_NAME,
  1270. .owner = THIS_MODULE,
  1271. .of_match_table = k2hh_match_table,
  1272. .pm = &k2hh_pm_ops
  1273. },
  1274. .probe = k2hh_probe,
  1275. .shutdown = k2hh_shutdown,
  1276. .remove = __devexit_p(k2hh_remove),
  1277. .id_table = k2hh_id,
  1278. };
  1279. static int __init k2hh_init(void)
  1280. {
  1281. return i2c_add_driver(&k2hh_driver);
  1282. }
  1283. static void __exit k2hh_exit(void)
  1284. {
  1285. i2c_del_driver(&k2hh_driver);
  1286. }
  1287. module_init(k2hh_init);
  1288. module_exit(k2hh_exit);
  1289. MODULE_DESCRIPTION("k2hh accelerometer sensor driver");
  1290. MODULE_AUTHOR("Samsung Electronics");
  1291. MODULE_LICENSE("GPL");