2 * Copyright (C) 2013 Samsung Electronics. All rights reserved.
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.
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.
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
19 #include <linux/uaccess.h>
20 #include <linux/module.h>
21 #include <linux/i2c.h>
22 #include <linux/errno.h>
23 #include <linux/workqueue.h>
24 #include <linux/slab.h>
25 #include <linux/delay.h>
26 #include <linux/of_gpio.h>
27 #include <linux/wakelock.h>
28 #include <linux/regulator/consumer.h>
29 #include <linux/irq.h>
30 #include <linux/gpio.h>
31 #include <linux/interrupt.h>
32 #include <linux/input.h>
33 #include <linux/timer.h>
35 #include "sensors_core.h"
37 #define I2C_M_WR 0 /* for i2c Write */
38 #define I2c_M_RD 1 /* for i2c Read */
39 #define READ_DATA_LENTH 6
41 #define VENDOR_NAME "STM"
42 #define MODEL_NAME "K2HH"
43 #define MODULE_NAME "accelerometer_sensor"
45 #define CALIBRATION_FILE_PATH "/csa/sensor/accel_cal_data"
46 #define CALIBRATION_DATA_AMOUNT 20
47 #define MAX_ACCEL_1G 8192
49 #define K2HH_DEFAULT_DELAY 200000000LL
51 #define CHIP_ID_RETRIES 3
52 #define ACCEL_LOG_TIME 15 /* 15 sec */
54 #define K2HH_MODE_SUSPEND 0
55 #define K2HH_MODE_NORMAL 1
57 #define SENSITIVITY_2G 61
58 #define SENSITIVITY_4G 122
59 #define SENSITIVITY_8G 244
61 #define K2HH_RANGE_2G 0
62 #define K2HH_RANGE_4G 1
63 #define K2HH_RANGE_8G 2
65 #define WHOAMI_REG 0x0F
66 #define AXISDATA_REG 0x28
68 #define CTRL1_REG 0x20
69 #define CTRL2_REG 0x21
70 #define CTRL3_REG 0x22
71 #define CTRL4_REG 0x23
72 #define CTRL5_REG 0x24
73 #define CTRL6_REG 0x25
74 #define CTRL7_REG 0x26
75 #define STATUS_REG 0x27
78 #define CTRL1_HR_DISABLE 0x00
79 #define CTRL1_HR_ENABLE 0x80
80 #define CTRL1_HR_MASK 0x80
81 #define CTRL1_BDU_ENABLE 0x08
82 #define CTRL1_BDU_MASK 0x08
85 #define CTRL2_IG1_INT1 0x08
88 #define CTRL3_IG1_INT1 0x08
91 #define CTRL7_LIR2 0x08
92 #define CTRL7_LIR1 0x04
94 #define ACC_PM_OFF 0x00
95 #define ACC_ENABLE_ALL_AXES 0x07
97 #define INT_CFG1_REG 0x30
98 #define INT_SRC1_REG 0x31
99 #define K2HH_CHIP_ID 0x41
101 #define K2HH_ACC_FS_MASK 0x30
102 #define K2HH_ACC_ODR_MASK 0x70
103 #define K2HH_ACC_BW_MASK 0xC0
104 #define K2HH_ACC_AXES_MASK 0x07
105 #define K2HH_ACC_BW_SCALE_ODR_MASK 0x08
107 #define SELF_TEST_2G_MAX_LSB 24576
108 #define SELF_TEST_2G_MIN_LSB 1146
110 #define K2HH_ACC_FS_2G 0x00
111 #define K2HH_ACC_FS_4G 0x20
112 #define K2HH_ACC_FS_8G 0x30
114 #define K2HH_ACC_BW_50 0xC0
115 #define K2HH_ACC_BW_100 0x80
116 #define K2HH_ACC_BW_200 0x40
117 #define K2HH_ACC_BW_400 0x00
119 #define INT_THSX1_REG 0x32
120 #define INT_THSY1_REG 0x33
121 #define INT_THSZ1_REG 0x34
123 #define K2HH_ACC_BW_SCALE_ODR_ENABLE 0x08
124 #define K2HH_ACC_BW_SCALE_ODR_DISABLE 0x00
126 #define DYNAMIC_THRESHOLD 5000
145 struct wake_lock reactive_wake_lock;
146 struct i2c_client *client;
147 struct input_dev *input;
148 struct delayed_work irq_work;
149 struct device *factory_device;
150 struct k2hh_v accdata;
151 struct k2hh_v caldata;
152 struct mutex mode_mutex;
153 struct hrtimer accel_timer;
154 struct workqueue_struct *accel_wq;
155 struct work_struct work_accel;
156 #ifdef CONFIG_SENSORS_K2HH_HAS_REGULATOR
157 struct regulator *reg_vdd;
180 #define ACC_ODR10 0x10 /* 10Hz output data rate */
181 #define ACC_ODR50 0x20 /* 50Hz output data rate */
182 #define ACC_ODR100 0x30 /* 100Hz output data rate */
183 #define ACC_ODR200 0x40 /* 200Hz output data rate */
184 #define ACC_ODR400 0x50 /* 400Hz output data rate */
185 #define ACC_ODR800 0x60 /* 800Hz output data rate */
186 #define ACC_ODR_MASK 0X70
188 struct k2hh_acc_odr {
189 unsigned int cutoff_ms;
193 #define OUTPUT_ALWAYS_ANTI_ALIASED /* Anti aliasing filter */
195 const struct k2hh_acc_odr k2hh_acc_odr_table[] = {
200 #ifndef OUTPUT_ALWAYS_ANTI_ALIASED
207 static int k2hh_regulator_onoff(struct k2hh_p *data, bool onoff)
211 pr_info("[SENSOR] %s\n", __func__);
213 #if defined(CONFIG_SENSORS_K2HH_HAS_REGULATOR)
215 data->vdd = devm_regulator_get(&data->client->dev,
217 if (IS_ERR(data->vdd)) {
218 pr_err("[SENSOR] %s, could not get vdd, %ld\n",
219 __func__, PTR_ERR(data->vdd));
224 ret = regulator_set_voltage(data->vdd, 2850000, 2850000);
228 ret = regulator_enable(data->vdd);
230 pr_err("[SENSOR] %s: Failed to enable vdd.\n",
234 ret = regulator_disable(data->vdd);
236 pr_err("[SENSOR] %s: Failed to disable vdd.\n",
245 static int k2hh_i2c_read(struct k2hh_p *data, unsigned char reg_addr,
246 unsigned char *buf, unsigned int len)
248 int ret, retries = 0;
249 struct i2c_msg msg[2];
251 msg[0].addr = data->client->addr;
252 msg[0].flags = I2C_M_WR;
254 msg[0].buf = ®_addr;
256 msg[1].addr = data->client->addr;
257 msg[1].flags = I2C_M_RD;
262 ret = i2c_transfer(data->client->adapter, msg, 2);
265 } while (retries++ < 2);
268 pr_err("[SENSOR] %s - i2c read error %d\n", __func__, ret);
275 static int k2hh_i2c_write(struct k2hh_p *data, unsigned char reg_addr,
278 int ret, retries = 0;
280 unsigned char w_buf[2];
285 msg.addr = data->client->addr;
286 msg.flags = I2C_M_WR;
288 msg.buf = (char *)w_buf;
291 ret = i2c_transfer(data->client->adapter, &msg, 1);
294 } while (retries++ < 2);
297 pr_err("[SENSOR] %s - i2c write error %d\n", __func__, ret);
304 static int k2hh_read_accel_xyz(struct k2hh_p *data, struct k2hh_v *acc)
307 struct k2hh_v rawdata;
308 unsigned char buf[READ_DATA_LENTH];
310 ret = k2hh_i2c_read(data, AXISDATA_REG, buf, READ_DATA_LENTH);
314 rawdata.v[0] = ((s16) ((buf[1] << 8) | buf[0]));
315 rawdata.v[1] = ((s16) ((buf[3] << 8) | buf[2]));
316 rawdata.v[2] = ((s16) ((buf[5] << 8) | buf[4]));
318 acc->v[0] = ((data->negate_x) ? (-rawdata.v[data->axis_map_x]) :
319 (rawdata.v[data->axis_map_x]));
320 acc->v[1] = ((data->negate_y) ? (-rawdata.v[data->axis_map_y]) :
321 (rawdata.v[data->axis_map_y]));
322 acc->v[2] = ((data->negate_z) ? (-rawdata.v[data->axis_map_z]) :
323 (rawdata.v[data->axis_map_z]));
329 static int k2hh_set_range(struct k2hh_p *data, unsigned char range)
332 unsigned char temp, new_range, buf, mask;
336 new_range = K2HH_ACC_FS_2G;
339 new_range = K2HH_ACC_FS_4G;
342 new_range = K2HH_ACC_FS_8G;
345 new_range = K2HH_ACC_FS_2G;
349 mask = K2HH_ACC_FS_MASK;
350 ret = k2hh_i2c_read(data, CTRL4_REG, &temp, 1);
352 buf = (mask & new_range) | ((~mask) & temp);
353 ret += k2hh_i2c_write(data, CTRL4_REG, buf);
354 pr_info("[SENSOR] %s - 0x%x\n", __func__, new_range);
359 static int k2hh_set_odr(struct k2hh_p *data)
362 unsigned char buf, new_odr, mask, temp;
364 /* Following, looks for the longest possible odr interval scrolling the
365 * odr_table vector from the end (shortest interval) backward (longest
366 * interval), to support the poll_interval requested by the system.
367 * It must be the longest interval lower then the poll interval.*/
368 for (i = ARRAY_SIZE(k2hh_acc_odr_table) - 1; i >= 0; i--) {
369 if ((k2hh_acc_odr_table[i].cutoff_ms <=
370 ktime_to_ms(data->poll_delay)) || (i == 0))
374 if (data->recog_flag == ON)
375 i = ARRAY_SIZE(k2hh_acc_odr_table) - 1;
377 new_odr = k2hh_acc_odr_table[i].mask;
379 mask = K2HH_ACC_ODR_MASK;
380 ret = k2hh_i2c_read(data, CTRL1_REG, &temp, 1);
381 buf = ((mask & new_odr) | ((~mask) & temp));
382 ret += k2hh_i2c_write(data, CTRL1_REG, buf);
386 pr_info("[SENSOR] %s - change odr %d\n", __func__, i);
391 static int k2hh_set_bw(struct k2hh_p *data)
394 unsigned char temp, buf, mask, new_range;
396 #if defined(OUTPUT_ALWAYS_ANTI_ALIASED)
397 new_range = K2HH_ACC_BW_SCALE_ODR_ENABLE;
398 mask = K2HH_ACC_BW_SCALE_ODR_MASK;
399 ret = k2hh_i2c_read(data, CTRL4_REG, &temp, 1);
401 buf = (mask & new_range) | ((~mask) & temp);
402 ret += k2hh_i2c_write(data, CTRL4_REG, buf);
403 new_range = K2HH_ACC_BW_50;
405 new_range = K2HH_ACC_BW_400;
407 mask = K2HH_ACC_BW_MASK;
408 ret = k2hh_i2c_read(data, CTRL4_REG, &temp, 1);
410 buf = (mask & new_range) | ((~mask) & temp);
411 ret += k2hh_i2c_write(data, CTRL4_REG, buf);
416 static int k2hh_set_hr(struct k2hh_p *data, int set)
421 pr_info("[SENSOR] %s %d\n", __func__, set);
424 data->hr = CTRL1_HR_ENABLE;
428 data->hr = CTRL1_HR_DISABLE;
430 bw = K2HH_ACC_BW_400;
431 k2hh_i2c_read(data, CTRL4_REG, &buf, 1);
432 buf = (K2HH_ACC_BW_MASK & bw) | ((~K2HH_ACC_BW_MASK) & buf);
433 k2hh_i2c_write(data, CTRL4_REG, buf);
435 #if defined(OUTPUT_ALWAYS_ANTI_ALIASED)
436 bw = K2HH_ACC_BW_SCALE_ODR_DISABLE;
437 k2hh_i2c_read(data, CTRL4_REG, &buf, 1);
438 buf = (K2HH_ACC_BW_SCALE_ODR_MASK & bw) |
439 ((~K2HH_ACC_BW_SCALE_ODR_MASK) & buf);
440 k2hh_i2c_write(data, CTRL4_REG, buf);
444 ret = k2hh_i2c_read(data, CTRL1_REG, &buf, 1);
445 buf = data->hr | ((~CTRL1_HR_MASK) & buf);
446 ret += k2hh_i2c_write(data, CTRL1_REG, buf);
448 ret += k2hh_i2c_read(data, CTRL1_REG, &buf, 1);
449 buf = ((K2HH_ACC_ODR_MASK & odr) | ((~K2HH_ACC_ODR_MASK) & buf));
450 ret += k2hh_i2c_write(data, CTRL1_REG, buf);
455 static void k2hh_set_enable(struct k2hh_p *data, int enable)
458 hrtimer_start(&data->accel_timer, data->poll_delay,
461 hrtimer_cancel(&data->accel_timer);
462 cancel_work_sync(&data->work_accel);
466 static int k2hh_set_mode(struct k2hh_p *data, unsigned char mode)
469 unsigned char buf, mask, temp;
471 mutex_lock(&data->mode_mutex);
474 case K2HH_MODE_NORMAL:
475 mask = K2HH_ACC_ODR_MASK;
476 ret = k2hh_i2c_read(data, CTRL1_REG, &temp, 1);
477 buf = ((mask & data->odr) | ((~mask) & temp));
478 buf = data->hr | ((~CTRL1_HR_MASK) & buf);
479 ret += k2hh_i2c_write(data, CTRL1_REG, buf);
481 case K2HH_MODE_SUSPEND:
482 if (data->recog_flag == ON)
485 mask = K2HH_ACC_ODR_MASK;
486 ret = k2hh_i2c_read(data, CTRL1_REG, &temp, 1);
487 buf = ((mask & ACC_PM_OFF) | ((~mask) & temp));
488 ret += k2hh_i2c_write(data, CTRL1_REG, buf);
494 mutex_unlock(&data->mode_mutex);
495 pr_info("[SENSOR] %s - change mode %u\n", __func__, mode);
500 static int k2hh_open_calibration(struct k2hh_p *data)
504 struct file *cal_filp = NULL;
509 cal_filp = filp_open(CALIBRATION_FILE_PATH, O_RDONLY, 0666);
510 if (IS_ERR(cal_filp)) {
512 ret = PTR_ERR(cal_filp);
518 pr_err("[SENSOR] %s - No Calibration\n", __func__);
523 ret = cal_filp->f_op->read(cal_filp, (char *)&data->caldata.v,
524 3 * sizeof(s16), &cal_filp->f_pos);
525 if (ret != 3 * sizeof(s16)) {
526 pr_err("[SENSOR] %s: - Can't read the cal data\n", __func__);
530 filp_close(cal_filp, current->files);
533 pr_info("[SENSOR] open accel calibration %d, %d, %d\n",
534 data->caldata.x, data->caldata.y, data->caldata.z);
536 if ((data->caldata.x == 0) && (data->caldata.y == 0)
537 && (data->caldata.z == 0))
543 static int k2hh_do_calibrate(struct k2hh_p *data, int enable)
547 struct file *cal_filp = NULL;
556 if (atomic_read(&data->enable) == ON)
557 k2hh_set_enable(data, OFF);
559 k2hh_set_mode(data, K2HH_MODE_NORMAL);
563 for (cnt = 0; cnt < CALIBRATION_DATA_AMOUNT; cnt++) {
564 k2hh_read_accel_xyz(data, &acc);
571 if (atomic_read(&data->enable) == ON)
572 k2hh_set_enable(data, ON);
574 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
576 data->caldata.x = (sum[0] / CALIBRATION_DATA_AMOUNT);
577 data->caldata.y = (sum[1] / CALIBRATION_DATA_AMOUNT);
578 data->caldata.z = (sum[2] / CALIBRATION_DATA_AMOUNT);
580 if (data->caldata.z > 0)
581 data->caldata.z -= MAX_ACCEL_1G;
582 else if (data->caldata.z < 0)
583 data->caldata.z += MAX_ACCEL_1G;
586 pr_info("[SENSOR]: %s - do accel calibrate %d, %d, %d\n", __func__,
587 data->caldata.x, data->caldata.y, data->caldata.z);
592 cal_filp = filp_open(CALIBRATION_FILE_PATH,
593 O_CREAT | O_TRUNC | O_WRONLY, 0666);
594 if (IS_ERR(cal_filp)) {
595 pr_err("[SENSOR]: %s - Can't open calibration file\n",
598 ret = PTR_ERR(cal_filp);
602 ret = cal_filp->f_op->write(cal_filp, (char *)&data->caldata.v,
603 3 * sizeof(s16), &cal_filp->f_pos);
604 if (ret != 3 * sizeof(s16)) {
605 pr_err("[SENSOR]: %s - Can't write the caldata to file\n",
610 filp_close(cal_filp, current->files);
616 static enum hrtimer_restart k2hh_timer_func(struct hrtimer *timer)
618 struct k2hh_p *data = container_of(timer,
619 struct k2hh_p, accel_timer);
621 if (!work_pending(&data->work_accel))
622 queue_work(data->accel_wq, &data->work_accel);
624 hrtimer_forward_now(&data->accel_timer, data->poll_delay);
626 return HRTIMER_RESTART;
629 static void k2hh_work_func(struct work_struct *work)
632 struct k2hh_p *data = container_of(work, struct k2hh_p, work_accel);
635 ret = k2hh_read_accel_xyz(data, &acc);
639 data->accdata.x = acc.x - data->caldata.x;
640 data->accdata.y = acc.y - data->caldata.y;
641 data->accdata.z = acc.z - data->caldata.z;
642 input_report_rel(data->input, REL_X, data->accdata.x);
643 input_report_rel(data->input, REL_Y, data->accdata.y);
644 input_report_rel(data->input, REL_Z, data->accdata.z);
645 input_sync(data->input);
648 if ((ktime_to_ns(data->poll_delay) * (int64_t)data->time_count)
649 >= ((int64_t)ACCEL_LOG_TIME * NSEC_PER_SEC)) {
650 pr_info("[SENSOR]: %s - x = %d, y = %d, z = %d (ra:%d)\n",
651 __func__, data->accdata.x, data->accdata.y,
652 data->accdata.z, data->recog_flag);
653 data->time_count = 0;
658 static ssize_t k2hh_enable_show(struct device *dev,
659 struct device_attribute *attr, char *buf)
661 struct k2hh_p *data = dev_get_drvdata(dev);
663 return snprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&data->enable));
666 static ssize_t k2hh_enable_store(struct device *dev,
667 struct device_attribute *attr, const char *buf, size_t size)
669 struct k2hh_p *data = dev_get_drvdata(dev);
673 ret = kstrtou8(buf, 2, &enable);
675 pr_err("[SENSOR]: %s - Invalid Argument\n", __func__);
679 pre_enable = atomic_read(&data->enable);
680 pr_info("[SENSOR]: %s, pre_enable = %d, enable = %d\n", __func__,
684 if (pre_enable == OFF) {
685 k2hh_regulator_onoff(data, true);
686 k2hh_open_calibration(data);
687 k2hh_set_range(data, K2HH_RANGE_4G);
690 k2hh_set_mode(data, K2HH_MODE_NORMAL);
691 atomic_set(&data->enable, ON);
692 k2hh_set_enable(data, ON);
695 if (pre_enable == ON) {
696 atomic_set(&data->enable, OFF);
697 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
698 k2hh_set_enable(data, OFF);
700 k2hh_regulator_onoff(data, false);
703 #ifdef CONFIG_SLEEP_MONITOR
704 sensors_set_enable_mask(enable, SENSORS_ENABLE_ACCEL);
709 static ssize_t k2hh_delay_show(struct device *dev,
710 struct device_attribute *attr, char *buf)
712 struct k2hh_p *data = dev_get_drvdata(dev);
714 return snprintf(buf, PAGE_SIZE, "%lld\n",
715 ktime_to_ns(data->poll_delay));
718 static ssize_t k2hh_delay_store(struct device *dev,
719 struct device_attribute *attr, const char *buf, size_t size)
722 struct k2hh_p *data = dev_get_drvdata(dev);
726 ret = kstrtoll(buf, 10, &delay);
728 pr_err("[SENSOR]: %s - Invalid Argument\n", __func__);
732 data->poll_delay = ns_to_ktime(delay);
735 if (atomic_read(&data->enable) == ON) {
736 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
737 k2hh_set_mode(data, K2HH_MODE_NORMAL);
740 pr_info("[SENSOR]: %s - poll_delay = %lld\n", __func__, delay);
744 static DEVICE_ATTR(poll_delay, S_IRUGO | S_IWUSR | S_IWGRP,
745 k2hh_delay_show, k2hh_delay_store);
746 static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR | S_IWGRP,
747 k2hh_enable_show, k2hh_enable_store);
749 static struct attribute *k2hh_attributes[] = {
750 &dev_attr_poll_delay.attr,
751 &dev_attr_enable.attr,
755 static struct attribute_group k2hh_attribute_group = {
756 .attrs = k2hh_attributes
759 static ssize_t k2hh_vendor_show(struct device *dev,
760 struct device_attribute *attr, char *buf)
762 return snprintf(buf, PAGE_SIZE, "%s\n", VENDOR_NAME);
765 static ssize_t k2hh_name_show(struct device *dev,
766 struct device_attribute *attr, char *buf)
768 return snprintf(buf, PAGE_SIZE, "%s\n", MODEL_NAME);
771 static ssize_t k2hh_calibration_show(struct device *dev,
772 struct device_attribute *attr, char *buf)
775 struct k2hh_p *data = dev_get_drvdata(dev);
777 ret = k2hh_open_calibration(data);
779 pr_err("[SENSOR]: %s - calibration open failed(%d)\n",
782 pr_info("[SENSOR]: %s - cal data %d %d %d - ret : %d\n", __func__,
783 data->caldata.x, data->caldata.y, data->caldata.z, ret);
785 return snprintf(buf, PAGE_SIZE, "%d %d %d %d\n", ret,
786 data->caldata.x, data->caldata.y, data->caldata.z);
789 static ssize_t k2hh_calibration_store(struct device *dev,
790 struct device_attribute *attr, const char *buf, size_t size)
794 struct k2hh_p *data = dev_get_drvdata(dev);
796 ret = kstrtoll(buf, 10, &dEnable);
800 ret = k2hh_do_calibrate(data, (int)dEnable);
802 pr_err("[SENSOR]: %s - accel calibrate failed\n", __func__);
807 static ssize_t k2hh_lowpassfilter_show(struct device *dev,
808 struct device_attribute *attr, char *buf)
811 struct k2hh_p *data = dev_get_drvdata(dev);
813 if (data->hr == CTRL1_HR_ENABLE)
818 return snprintf(buf, PAGE_SIZE, "%d\n", ret);
821 static ssize_t k2hh_lowpassfilter_store(struct device *dev,
822 struct device_attribute *attr, const char *buf, size_t size)
826 struct k2hh_p *data = dev_get_drvdata(dev);
828 pr_info("[SENSOR] %s\n", __func__);
830 ret = kstrtoll(buf, 10, &dEnable);
832 pr_err("[SENSOR] %s - kstrtoll failed\n", __func__);
834 ret = k2hh_set_hr(data, dEnable);
836 pr_err("[SENSOR] %s -set hr failed\n", __func__);
841 static ssize_t k2hh_raw_data_read(struct device *dev,
842 struct device_attribute *attr, char *buf)
845 struct k2hh_p *data = dev_get_drvdata(dev);
847 if (atomic_read(&data->enable) == OFF) {
848 k2hh_set_mode(data, K2HH_MODE_NORMAL);
850 k2hh_read_accel_xyz(data, &acc);
851 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
853 acc.x = acc.x - data->caldata.x;
854 acc.y = acc.y - data->caldata.y;
855 acc.z = acc.z - data->caldata.z;
859 return snprintf(buf, PAGE_SIZE, "%d,%d,%d\n",
860 acc.x, acc.y, acc.z);
863 static ssize_t k2hh_reactive_alert_show(struct device *dev,
864 struct device_attribute *attr, char *buf)
866 struct k2hh_p *data = dev_get_drvdata(dev);
868 return snprintf(buf, PAGE_SIZE, "%d\n", data->irq_state);
871 static ssize_t k2hh_reactive_alert_store(struct device *dev,
872 struct device_attribute *attr, const char *buf, size_t size)
874 unsigned char threshx, threshy, threshz;
875 int enable = OFF, factory_mode = OFF;
877 struct k2hh_p *data = dev_get_drvdata(dev);
879 if (sysfs_streq(buf, "0")) {
882 pr_info("[SENSOR]: %s - disable\n", __func__);
883 } else if (sysfs_streq(buf, "1")) {
886 pr_info("[SENSOR]: %s - enable\n", __func__);
887 } else if (sysfs_streq(buf, "2")) {
890 pr_info("[SENSOR]: %s - factory mode\n", __func__);
892 pr_err("[SENSOR]: %s - invalid value %d\n", __func__, *buf);
896 if ((enable == ON) && (data->recog_flag == OFF)) {
898 data->recog_flag = ON;
900 if (factory_mode == ON) {
901 k2hh_i2c_write(data, INT_THSX1_REG, 0x00);
902 k2hh_i2c_write(data, INT_THSY1_REG, 0x00);
903 k2hh_i2c_write(data, INT_THSZ1_REG, 0x00);
904 k2hh_i2c_write(data, INT_CFG1_REG, 0x3f);
907 if (atomic_read(&data->enable) == OFF) {
908 k2hh_set_mode(data, K2HH_MODE_NORMAL);
910 k2hh_read_accel_xyz(data, &acc);
911 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
913 acc.x = data->accdata.x;
914 acc.y = data->accdata.y;
915 acc.z = data->accdata.z;
918 threshx = (abs(acc.v[data->axis_map_x])
919 + DYNAMIC_THRESHOLD) >> 8;
920 threshy = (abs(acc.v[data->axis_map_y])
921 + DYNAMIC_THRESHOLD) >> 8;
922 threshz = (abs(acc.v[data->axis_map_z])
923 + DYNAMIC_THRESHOLD) >> 8;
925 k2hh_i2c_write(data, INT_THSX1_REG, threshx);
926 k2hh_i2c_write(data, INT_THSY1_REG, threshy);
927 k2hh_i2c_write(data, INT_THSZ1_REG, threshz);
928 k2hh_i2c_write(data, INT_CFG1_REG, 0x0a);
931 k2hh_i2c_write(data, CTRL7_REG, CTRL7_LIR1);
932 k2hh_i2c_write(data, CTRL3_REG, CTRL3_IG1_INT1);
934 enable_irq(data->irq1);
935 enable_irq_wake(data->irq1);
937 pr_info("[SENSOR]: %s - reactive alert is on!\n", __func__);
938 } else if ((enable == OFF) && (data->recog_flag == ON)) {
939 k2hh_i2c_write(data, CTRL3_REG, 0x00);
941 disable_irq_wake(data->irq1);
942 disable_irq_nosync(data->irq1);
943 data->recog_flag = OFF;
944 pr_info("[SENSOR]: %s - reactive alert is off! irq = %d\n",
945 __func__, data->irq_state);
951 static ssize_t k2hh_selftest_show(struct device *dev,
952 struct device_attribute *attr, char *buf)
954 struct k2hh_p *data = dev_get_drvdata(dev);
956 unsigned char temp, backup[4];
957 int result = 1, i, retry;
959 s32 NO_ST[3] = {0, 0, 0};
960 s32 ST[3] = {0, 0, 0};
962 k2hh_i2c_read(data, CTRL1_REG, &backup[0], 1);
963 k2hh_i2c_read(data, CTRL4_REG, &backup[1], 1);
964 k2hh_i2c_read(data, CTRL5_REG, &backup[2], 1);
965 k2hh_i2c_read(data, CTRL6_REG, &backup[3], 1);
967 if (atomic_read(&data->enable) == OFF)
968 k2hh_set_mode(data, K2HH_MODE_NORMAL);
970 k2hh_set_enable(data, OFF);
972 k2hh_i2c_write(data, CTRL1_REG, 0x3f);
973 k2hh_i2c_write(data, CTRL4_REG, 0x04);
974 k2hh_i2c_write(data, CTRL5_REG, 0x00);
975 k2hh_i2c_write(data, CTRL6_REG, 0x00);
979 k2hh_read_accel_xyz(data, &acc);
981 for (i = 0; i < 5; i++) {
984 if (k2hh_i2c_read(data, STATUS_REG, &temp, 1) < 0) {
985 pr_err("[SENSOR] %s: i2c error", __func__);
986 goto exit_status_err;
993 } while (retry-- >= 0);
996 pr_err("[SENSOR] %s failed to update data\n",
998 goto exit_status_err;
1001 k2hh_read_accel_xyz(data, &acc);
1012 k2hh_i2c_write(data, CTRL5_REG, 0x04);
1016 k2hh_read_accel_xyz(data, &acc);
1018 for (i = 0; i < 5; i++) {
1021 if (k2hh_i2c_read(data, STATUS_REG, &temp, 1) < 0) {
1022 pr_err("[SENSOR] %s: i2c error", __func__);
1023 goto exit_status_err;
1030 } while (retry-- >= 0);
1033 pr_err("[SENSOR] %s failed to update data\n",
1035 goto exit_status_err;
1038 k2hh_read_accel_xyz(data, &acc);
1048 for (i = 0; i < 3; i++) {
1052 if ((SELF_TEST_2G_MIN_LSB > ST[i])
1053 || (ST[i] > SELF_TEST_2G_MAX_LSB)) {
1054 pr_err("[SENSOR] %s: %d Out of range!! (%d)\n",
1055 __func__, i, ST[i]);
1061 ret = snprintf(buf, 0xff, "1,%d,%d,%d\n", ST[0], ST[1], ST[2]);
1063 ret = snprintf(buf, 0xff, "0,%d,%d,%d\n", ST[0], ST[1], ST[2]);
1068 ret = snprintf(buf, 0xff, "-1,0,0,0\n");
1070 k2hh_i2c_write(data, CTRL1_REG, 0x00);
1071 k2hh_i2c_write(data, CTRL5_REG, 0x00);
1073 k2hh_i2c_write(data, CTRL1_REG, backup[0]);
1074 k2hh_i2c_write(data, CTRL4_REG, backup[1]);
1075 k2hh_i2c_write(data, CTRL5_REG, backup[2]);
1076 k2hh_i2c_write(data, CTRL6_REG, backup[3]);
1078 if (atomic_read(&data->enable) == OFF) {
1079 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
1081 k2hh_set_mode(data, K2HH_MODE_NORMAL);
1082 k2hh_set_enable(data, ON);
1088 static DEVICE_ATTR(selftest, S_IRUGO, k2hh_selftest_show, NULL);
1089 static DEVICE_ATTR(name, S_IRUGO, k2hh_name_show, NULL);
1090 static DEVICE_ATTR(vendor, S_IRUGO, k2hh_vendor_show, NULL);
1091 static DEVICE_ATTR(calibration, S_IRUGO | S_IWUSR | S_IWGRP,
1092 k2hh_calibration_show, k2hh_calibration_store);
1093 static DEVICE_ATTR(lowpassfilter, S_IRUGO | S_IWUSR | S_IWGRP,
1094 k2hh_lowpassfilter_show, k2hh_lowpassfilter_store);
1095 static DEVICE_ATTR(raw_data, S_IRUGO, k2hh_raw_data_read, NULL);
1096 static DEVICE_ATTR(reactive_alert, S_IRUGO | S_IWUSR | S_IWGRP,
1097 k2hh_reactive_alert_show, k2hh_reactive_alert_store);
1099 static struct device_attribute *sensor_attrs[] = {
1102 &dev_attr_calibration,
1103 &dev_attr_lowpassfilter,
1105 &dev_attr_reactive_alert,
1110 static void k2hh_irq_work_func(struct work_struct *work)
1112 struct k2hh_p *data = container_of((struct delayed_work *)work,
1113 struct k2hh_p, irq_work);
1116 k2hh_i2c_write(data, INT_CFG1_REG, 0x00);
1117 k2hh_i2c_read(data, INT_SRC1_REG, &buf, 1);
1120 static irqreturn_t k2hh_irq_thread(int irq, void *k2hh_data_p)
1122 struct k2hh_p *data = k2hh_data_p;
1124 data->irq_state = 1;
1125 wake_lock_timeout(&data->reactive_wake_lock,
1126 msecs_to_jiffies(2000));
1127 schedule_delayed_work(&data->irq_work, msecs_to_jiffies(100));
1128 pr_info("###### [SENSOR]: %s reactive irq ######\n", __func__);
1133 static int k2hh_setup_pin(struct k2hh_p *data)
1137 ret = gpio_request(data->acc_int1, "ACC_INT1");
1139 pr_err("[SENSOR] %s - gpio %d request failed (%d)\n",
1140 __func__, data->acc_int1, ret);
1144 ret = gpio_direction_input(data->acc_int1);
1146 pr_err("[SENSOR]: %s - failed to set gpio %d as input (%d)\n",
1147 __func__, data->acc_int1, ret);
1151 wake_lock_init(&data->reactive_wake_lock, WAKE_LOCK_SUSPEND,
1152 "reactive_wake_lock");
1154 data->irq1 = gpio_to_irq(data->acc_int1);
1155 ret = request_threaded_irq(data->irq1, NULL, k2hh_irq_thread,
1156 IRQF_TRIGGER_RISING | IRQF_ONESHOT | IRQF_NO_SUSPEND,
1157 "k2hh_accel", data);
1159 pr_err("[SENSOR]: %s - can't allocate irq.\n", __func__);
1160 goto exit_reactive_irq;
1163 disable_irq(data->irq1);
1167 wake_lock_destroy(&data->reactive_wake_lock);
1169 gpio_free(data->acc_int1);
1174 static int k2hh_input_init(struct k2hh_p *data)
1177 struct input_dev *dev;
1179 dev = input_allocate_device();
1183 dev->name = MODULE_NAME;
1184 dev->id.bustype = BUS_I2C;
1186 input_set_capability(dev, EV_REL, REL_X);
1187 input_set_capability(dev, EV_REL, REL_Y);
1188 input_set_capability(dev, EV_REL, REL_Z);
1189 input_set_drvdata(dev, data);
1191 ret = input_register_device(dev);
1193 goto err_register_input_dev;
1195 ret = sensors_create_symlink(&dev->dev.kobj, dev->name);
1197 goto err_create_sensor_symlink;
1199 /* sysfs node creation */
1200 ret = sysfs_create_group(&dev->dev.kobj, &k2hh_attribute_group);
1202 goto err_create_sysfs_group;
1208 err_create_sysfs_group:
1209 sensors_remove_symlink(&dev->dev.kobj, dev->name);
1210 err_create_sensor_symlink:
1211 input_unregister_device(dev);
1212 err_register_input_dev:
1213 input_free_device(dev);
1217 static int k2hh_parse_dt(struct k2hh_p *data, struct device *dev)
1219 struct device_node *dNode = dev->of_node;
1220 enum of_gpio_flags flags;
1227 data->acc_int1 = of_get_named_gpio_flags(dNode, "stm,irq_gpio", 0,
1229 if (data->acc_int1 < 0) {
1230 pr_err("[SENSOR] %s - get acc_int1 error\n", __func__);
1234 ret = of_property_read_u32(dNode, "stm,axis_map_x", &temp);
1235 if ((data->axis_map_x > 2) || (ret < 0)) {
1236 pr_err("[SENSOR] %s: invalid x axis_map value %u\n",
1237 __func__, data->axis_map_x);
1238 data->axis_map_x = 0;
1240 data->axis_map_x = (u8)temp;
1242 ret = of_property_read_u32(dNode, "stm,axis_map_y", &temp);
1243 if ((data->axis_map_y > 2) || (ret < 0)) {
1244 pr_err("[SENSOR] %s: invalid y axis_map value %u\n",
1245 __func__, data->axis_map_y);
1246 data->axis_map_y = 1;
1248 data->axis_map_y = (u8)temp;
1250 ret = of_property_read_u32(dNode, "stm,axis_map_z", &temp);
1251 if ((data->axis_map_z > 2) || (ret < 0)) {
1252 pr_err("[SENSOR] %s: invalid z axis_map value %u\n",
1253 __func__, data->axis_map_z);
1254 data->axis_map_z = 2;
1256 data->axis_map_z = (u8)temp;
1258 ret = of_property_read_u32(dNode, "stm,negate_x", &temp);
1259 if ((data->negate_x > 1) || (ret < 0)) {
1260 pr_err("[SENSOR] %s: invalid x axis_map value %u\n",
1261 __func__, data->negate_x);
1264 data->negate_x = (u8)temp;
1266 ret = of_property_read_u32(dNode, "stm,negate_y", &temp);
1267 if ((data->negate_y > 1) || (ret < 0)) {
1268 pr_err("[SENSOR] %s: invalid y axis_map value %u\n",
1269 __func__, data->negate_y);
1272 data->negate_y = (u8)temp;
1274 ret = of_property_read_u32(dNode, "stm,negate_z", &temp);
1275 if ((data->negate_z > 1) || (ret < 0)) {
1276 pr_err("[SENSOR] %s: invalid z axis_map value %u\n",
1277 __func__, data->negate_z);
1280 data->negate_z = (u8)temp;
1286 static int k2hh_probe(struct i2c_client *client,
1287 const struct i2c_device_id *id)
1290 int ret = -ENODEV, i;
1291 struct k2hh_p *data;
1293 pr_info("[SENSOR]: %s - Probe Start!\n", __func__);
1295 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
1296 pr_err("[SENSOR]: %s - i2c_check_functionality error\n",
1301 data = kzalloc(sizeof(struct k2hh_p), GFP_KERNEL);
1303 pr_err("[SENSOR]: %s - kzalloc error\n", __func__);
1308 i2c_set_clientdata(client, data);
1310 data->client = client;
1312 ret = k2hh_parse_dt(data, &client->dev);
1314 pr_err("[SENSOR]: %s - of_node error\n", __func__);
1319 ret = k2hh_regulator_onoff(data, true);
1321 pr_err("[SENSOR]: %s - No regulator\n", __func__);
1322 goto exit_no_regulator;
1325 ret = k2hh_setup_pin(data);
1327 pr_err("[SENSOR]: %s - could not setup pin\n", __func__);
1328 goto exit_setup_pin;
1331 mutex_init(&data->mode_mutex);
1334 k2hh_set_mode(data, K2HH_MODE_NORMAL);
1335 for (i = 0; i < CHIP_ID_RETRIES; i++) {
1336 ret = k2hh_i2c_read(data, WHOAMI_REG, &temp, 1);
1337 if (temp != K2HH_CHIP_ID) {
1338 pr_err("[SENSOR]: %s - chip id failed 0x%x : %d\n",
1339 __func__, temp, ret);
1341 pr_info("[SENSOR]: %s - chip id success 0x%x\n",
1348 if (i >= CHIP_ID_RETRIES) {
1350 goto exit_read_chipid;
1353 /* input device init */
1354 ret = k2hh_input_init(data);
1356 goto exit_input_init;
1358 ret = sensors_register(data->factory_device, data, sensor_attrs,
1361 pr_err("[SENSOR]: %s, failed to sensors_register (%d)\n",
1363 goto exit_sensor_register_failed;
1366 /* accel_timer settings. we poll for light values using a timer. */
1367 hrtimer_init(&data->accel_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1368 data->poll_delay = ns_to_ktime(K2HH_DEFAULT_DELAY);
1369 data->accel_timer.function = k2hh_timer_func;
1371 /* the timer just fires off a work queue request. we need a thread
1372 to read the i2c (can be slow and blocking). */
1373 data->accel_wq = create_singlethread_workqueue("accel_wq");
1374 if (!data->accel_wq) {
1376 pr_err("[SENSOR]: %s - could not create workqueue\n",
1378 goto exit_create_workqueue;
1381 /* this is the thread function we run on the work queue */
1382 INIT_WORK(&data->work_accel, k2hh_work_func);
1383 INIT_DELAYED_WORK(&data->irq_work, k2hh_irq_work_func);
1385 atomic_set(&data->enable, OFF);
1386 data->time_count = 0;
1387 data->irq_state = 0;
1388 data->recog_flag = OFF;
1389 data->hr = CTRL1_HR_ENABLE;
1391 k2hh_set_range(data, K2HH_RANGE_4G);
1392 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
1394 /*power off the regulators, for next enable power will be on*/
1395 ret = k2hh_regulator_onoff(data, false);
1397 pr_info("[SENSOR]: %s - Probe done!\n", __func__);
1401 exit_create_workqueue:
1402 sensors_unregister(data->factory_device, sensor_attrs);
1403 exit_sensor_register_failed:
1404 sensors_remove_symlink(&data->input->dev.kobj, data->input->name);
1405 sysfs_remove_group(&data->input->dev.kobj, &k2hh_attribute_group);
1406 input_unregister_device(data->input);
1409 mutex_destroy(&data->mode_mutex);
1410 free_irq(data->irq1, data);
1411 cancel_delayed_work_sync(&data->irq_work);
1412 wake_lock_destroy(&data->reactive_wake_lock);
1413 gpio_free(data->acc_int1);
1415 k2hh_regulator_onoff(data, false);
1420 pr_err("[SENSOR]: %s - Probe fail!\n", __func__);
1424 static void k2hh_shutdown(struct i2c_client *client)
1426 struct k2hh_p *data = (struct k2hh_p *)i2c_get_clientdata(client);
1428 pr_info("[SENSOR]: %s\n", __func__);
1430 if (atomic_read(&data->enable) == ON)
1431 k2hh_set_enable(data, OFF);
1433 atomic_set(&data->enable, OFF);
1434 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
1437 static int k2hh_remove(struct i2c_client *client)
1439 struct k2hh_p *data = (struct k2hh_p *)i2c_get_clientdata(client);
1441 if (atomic_read(&data->enable) == ON)
1442 k2hh_set_enable(data, OFF);
1444 atomic_set(&data->enable, OFF);
1445 cancel_delayed_work_sync(&data->irq_work);
1447 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
1448 sensors_unregister(data->factory_device, sensor_attrs);
1449 sysfs_remove_group(&data->input->dev.kobj, &k2hh_attribute_group);
1450 input_unregister_device(data->input);
1452 free_irq(data->irq1, data);
1453 wake_lock_destroy(&data->reactive_wake_lock);
1454 mutex_destroy(&data->mode_mutex);
1455 gpio_free(data->acc_int1);
1461 static int k2hh_suspend(struct device *dev)
1463 struct k2hh_p *data = dev_get_drvdata(dev);
1465 pr_info("[SENSOR]: %s\n", __func__);
1467 if (atomic_read(&data->enable) == ON) {
1468 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
1469 k2hh_set_enable(data, OFF);
1475 static int k2hh_resume(struct device *dev)
1477 struct k2hh_p *data = dev_get_drvdata(dev);
1479 pr_info("[SENSOR]: %s\n", __func__);
1481 if (atomic_read(&data->enable) == ON) {
1482 k2hh_set_mode(data, K2HH_MODE_NORMAL);
1483 k2hh_set_enable(data, ON);
1489 static struct of_device_id k2hh_match_table[] = {
1490 { .compatible = "stm,k2hh",},
1494 static const struct i2c_device_id k2hh_id[] = {
1495 { "k2hh_match_table", 0 },
1499 static const struct dev_pm_ops k2hh_pm_ops = {
1500 .suspend = k2hh_suspend,
1501 .resume = k2hh_resume
1504 static struct i2c_driver k2hh_driver = {
1507 .owner = THIS_MODULE,
1508 .of_match_table = k2hh_match_table,
1511 .probe = k2hh_probe,
1512 .shutdown = k2hh_shutdown,
1513 .remove = k2hh_remove,
1514 .id_table = k2hh_id,
1517 static int __init k2hh_init(void)
1519 return i2c_add_driver(&k2hh_driver);
1522 static void __exit k2hh_exit(void)
1524 i2c_del_driver(&k2hh_driver);
1527 module_init(k2hh_init);
1528 module_exit(k2hh_exit);
1530 MODULE_DESCRIPTION("k2hh accelerometer sensor driver");
1531 MODULE_AUTHOR("Samsung Electronics");
1532 MODULE_LICENSE("GPL");