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/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 <linux/irq.h>
31 #include <linux/gpio.h>
32 #include <linux/interrupt.h>
33 #include <linux/sensors_core.h>
36 #define I2C_M_WR 0 /* for i2c Write */
37 #define I2c_M_RD 1 /* for i2c Read */
38 #define READ_DATA_LENTH 6
40 #define VENDOR_NAME "STM"
41 #define MODEL_NAME "K2HH"
42 #define MODULE_NAME "accelerometer_sensor"
44 #define CALIBRATION_FILE_PATH "/efs/accel_calibration_data"
45 #define CALIBRATION_DATA_AMOUNT 20
46 #define MAX_ACCEL_1G 16384
48 #define K2HH_DEFAULT_DELAY 200000000LL
50 #define CHIP_ID_RETRIES 3
51 #define ACCEL_LOG_TIME 15 /* 15 sec */
53 #define K2HH_MODE_SUSPEND 0
54 #define K2HH_MODE_NORMAL 1
56 #define SENSITIVITY_2G 61
57 #define SENSITIVITY_4G 122
58 #define SENSITIVITY_8G 244
60 #define K2HH_RANGE_2G 0
61 #define K2HH_RANGE_4G 1
62 #define K2HH_RANGE_8G 2
64 #define WHOAMI_REG 0x0F
65 #define AXISDATA_REG 0x28
67 #define CTRL1_REG 0x20
68 #define CTRL2_REG 0x21
69 #define CTRL3_REG 0x22
70 #define CTRL4_REG 0x23
71 #define CTRL5_REG 0x24
72 #define CTRL6_REG 0x25
73 #define CTRL7_REG 0x26
74 #define STATUS_REG 0x27
77 #define CTRL1_HR_DISABLE 0x00
78 #define CTRL1_HR_ENABLE 0x80
79 #define CTRL1_HR_MASK 0x80
80 #define CTRL1_BDU_ENABLE 0x08
81 #define CTRL1_BDU_MASK 0x08
84 #define CTRL2_IG1_INT1 0x08
87 #define CTRL3_IG1_INT1 0x08
90 #define CTRL7_LIR2 0x08
91 #define CTRL7_LIR1 0x04
93 #define ACC_PM_OFF 0x00
94 #define ACC_ENABLE_ALL_AXES 0x07
96 #define INT_CFG1_REG 0x30
97 #define INT_SRC1_REG 0x31
98 #define K2HH_CHIP_ID 0x41
100 #define K2HH_ACC_FS_MASK 0x30
101 #define K2HH_ACC_ODR_MASK 0x70
102 #define K2HH_ACC_AXES_MASK 0x07
104 #define SELF_TEST_2G_MAX_LSB 24576
105 #define SELF_TEST_2G_MIN_LSB 1146
107 #define K2HH_ACC_FS_2G 0x00
108 #define K2HH_ACC_FS_4G 0x20
109 #define K2HH_ACC_FS_8G 0x30
111 #define INT_THSX1_REG 0x32
112 #define INT_THSY1_REG 0x33
113 #define INT_THSZ1_REG 0x34
115 #define DYNAMIC_THRESHOLD 5000
134 struct wake_lock reactive_wake_lock;
135 struct i2c_client *client;
136 struct input_dev *input;
137 struct delayed_work irq_work;
138 struct device *factory_device;
139 struct k2hh_v accdata;
140 struct k2hh_v caldata;
141 struct mutex mode_mutex;
142 struct hrtimer accel_timer;
143 struct workqueue_struct *accel_wq;
144 struct work_struct work;
145 struct regulator *vdd;
146 //struct regulator *vio;
167 #define ACC_ODR10 0x10 /* 10Hz output data rate */
168 #define ACC_ODR50 0x20 /* 50Hz output data rate */
169 #define ACC_ODR100 0x30 /* 100Hz output data rate */
170 #define ACC_ODR200 0x40 /* 200Hz output data rate */
171 #define ACC_ODR400 0x50 /* 400Hz output data rate */
172 #define ACC_ODR800 0x60 /* 800Hz output data rate */
173 #define ACC_ODR_MASK 0X70
175 struct k2hh_acc_odr {
176 unsigned int cutoff_ms;
180 #define OUTPUT_ALWAYS_ANTI_ALIASED
182 const struct k2hh_acc_odr k2hh_acc_odr_table[] = {
187 #ifndef OUTPUT_ALWAYS_ANTI_ALIASED
193 static int k2hh_open_calibration(struct k2hh_p *);
194 static int k2hh_regulator_onoff(struct k2hh_p *data, bool onoff);
196 static int k2hh_i2c_recovery(struct k2hh_p *data)
199 struct gpiomux_setting old_config[2];
200 struct gpiomux_setting recovery_config = {
201 .func = GPIOMUX_FUNC_3,
202 .drv = GPIOMUX_DRV_2MA,
203 .pull = GPIOMUX_PULL_NONE,
207 if (data->sda_gpio < 0 || data->scl_gpio < 0) {
208 pr_err("[SENSOR]: %s - no sda, scl gpio\n", __func__);
212 pr_err("[SENSOR] ################# %s #################\n", __func__);
214 /*If LDO's are disabled then enable, Fallback LDO off scenario*/
216 if( 0 == regulator_is_enabled(data->vdd) ) {
217 ret = regulator_enable(data->vdd);
219 pr_err(KERN_ERR "%s: vdd enable failed (%d)\n",__func__, ret);
224 if( 0 == regulator_is_enabled(data->vio) ) {
225 ret = regulator_enable(data->vio);
227 pr_err(KERN_ERR "%s: vio enable failed (%d)\n",__func__, ret);
237 pr_err("RECOVERY called as one of regulator was off:****\n Regulator \
238 on/recovery complete****\n ");
242 ret = msm_gpiomux_write(data->sda_gpio, GPIOMUX_ACTIVE,
243 &recovery_config, &old_config[0]);
245 pr_err("[SENSOR]: %s sda_gpio have no active setting %d\n",
250 ret = msm_gpiomux_write(data->scl_gpio, GPIOMUX_ACTIVE,
251 &recovery_config, &old_config[1]);
253 pr_err("[SENSOR]: %s scl_gpio have no active setting %d\n",
258 ret = gpio_request(data->sda_gpio, "SENSOR_SDA");
260 pr_err("[SENSOR]: %s - gpio %d request failed (%d)\n",
261 __func__, data->sda_gpio, ret);
265 ret = gpio_request(data->scl_gpio, "SENSOR_SCL");
267 pr_err("[SENSOR]: %s - gpio %d request failed (%d)\n",
268 __func__, data->scl_gpio, ret);
269 gpio_free(data->scl_gpio);
273 ret = gpio_direction_input(data->sda_gpio);
275 pr_err("[SENSOR]: %s - failed to set gpio %d as output (%d)\n",
276 __func__, data->sda_gpio, ret);
280 ret = gpio_direction_input(data->scl_gpio);
282 pr_err("[SENSOR]: %s - failed to set gpio %d as output (%d)\n",
283 __func__, data->scl_gpio, ret);
287 /*Setting initial value after recovery*/
289 gpio_set_value_cansleep(data->sda_gpio, 0);
290 gpio_set_value_cansleep(data->scl_gpio, 0);
292 gpio_set_value_cansleep(data->sda_gpio, 1);
293 gpio_set_value_cansleep(data->scl_gpio, 1);
297 gpio_free(data->sda_gpio);
298 gpio_free(data->scl_gpio);
300 msm_gpiomux_write(data->sda_gpio, GPIOMUX_ACTIVE, &old_config[0], NULL);
301 msm_gpiomux_write(data->scl_gpio, GPIOMUX_ACTIVE, &old_config[1], NULL);
307 static int k2hh_i2c_read(struct k2hh_p *data,
308 unsigned char reg_addr, unsigned char *buf, unsigned int len)
310 int ret, retries = 0;
311 struct i2c_msg msg[2];
313 msg[0].addr = data->client->addr;
314 msg[0].flags = I2C_M_WR;
316 msg[0].buf = ®_addr;
318 msg[1].addr = data->client->addr;
319 msg[1].flags = I2C_M_RD;
324 ret = i2c_transfer(data->client->adapter, msg, 2);
328 // k2hh_i2c_recovery(data);
329 } while (retries++ < 2);
332 pr_err("[SENSOR]: %s - i2c read error %d\n", __func__, ret);
339 static int k2hh_i2c_write(struct k2hh_p *data,
340 unsigned char reg_addr, unsigned char buf)
342 int ret, retries = 0;
344 unsigned char w_buf[2];
349 msg.addr = data->client->addr;
350 msg.flags = I2C_M_WR;
352 msg.buf = (char *)w_buf;
355 ret = i2c_transfer(data->client->adapter, &msg, 1);
359 // k2hh_i2c_recovery(data);
360 } while (retries++ < 2);
363 pr_err("[SENSOR]: %s - i2c write error %d\n", __func__, ret);
370 static int k2hh_set_range(struct k2hh_p *data, unsigned char range)
373 unsigned char temp, new_range, buf, mask;
377 new_range = K2HH_ACC_FS_2G;
380 new_range = K2HH_ACC_FS_4G;
383 new_range = K2HH_ACC_FS_8G;
386 new_range = K2HH_ACC_FS_2G;
390 mask = K2HH_ACC_FS_MASK;
391 ret = k2hh_i2c_read(data, CTRL4_REG, &temp, 1);
392 #ifndef OUTPUT_ALWAYS_ANTI_ALIASED
393 buf = (mask & new_range) | ((~mask) & temp);
397 ret += k2hh_i2c_write(data, CTRL4_REG, buf);
402 static int k2hh_set_odr(struct k2hh_p *data)
405 unsigned char buf, new_odr, mask, temp;
407 /* Following, looks for the longest possible odr interval scrolling the
408 * odr_table vector from the end (shortest interval) backward (longest
409 * interval), to support the poll_interval requested by the system.
410 * It must be the longest interval lower then the poll interval.*/
411 for (i = ARRAY_SIZE(k2hh_acc_odr_table) - 1; i >= 0; i--) {
412 if ((k2hh_acc_odr_table[i].cutoff_ms <= \
413 ktime_to_ms(data->poll_delay)) || (i == 0))
417 if (data->recog_flag == ON)
418 i = ARRAY_SIZE(k2hh_acc_odr_table) - 1;
420 new_odr = k2hh_acc_odr_table[i].mask;
422 mask = K2HH_ACC_ODR_MASK;
423 ret = k2hh_i2c_read(data, CTRL1_REG, &temp, 1);
424 buf = ((mask & new_odr) | ((~mask) & temp));
425 ret += k2hh_i2c_write(data, CTRL1_REG, buf);
427 pr_info("[SENSOR]: %s - change odr %d\n", __func__, i);
431 static int k2hh_set_mode(struct k2hh_p *data, unsigned char mode)
434 unsigned char buf, mask, temp;
436 mutex_lock(&data->mode_mutex);
439 case K2HH_MODE_NORMAL:
440 mask = K2HH_ACC_AXES_MASK;
441 ret = k2hh_i2c_read(data, CTRL1_REG, &temp, 1);
442 buf = ((mask & ACC_ENABLE_ALL_AXES) | ((~mask) & temp));
443 ret += k2hh_i2c_write(data, CTRL1_REG, buf);
445 pr_info("[SENSOR]: %s - normal mode\n", __func__);
448 case K2HH_MODE_SUSPEND:
449 if (data->recog_flag == ON)
452 mask = K2HH_ACC_AXES_MASK | K2HH_ACC_ODR_MASK;
453 ret = k2hh_i2c_read(data, CTRL1_REG, &temp, 1);
454 buf = ((mask & ACC_PM_OFF) | ((~mask) & temp));
455 ret += k2hh_i2c_write(data, CTRL1_REG, buf);
456 pr_info("[SENSOR]: %s - suspend mode\n", __func__);
463 mutex_unlock(&data->mode_mutex);
467 static int k2hh_read_accel_xyz(struct k2hh_p *data, struct k2hh_v *acc)
470 struct k2hh_v rawdata;
471 unsigned char buf[READ_DATA_LENTH];
473 ret += k2hh_i2c_read(data, AXISDATA_REG, buf, READ_DATA_LENTH);
478 rawdata.v[0] = ((s16) ((buf[1] << 8) | buf[0]));
479 rawdata.v[1] = ((s16) ((buf[3] << 8) | buf[2]));
480 rawdata.v[2] = ((s16) ((buf[5] << 8) | buf[4]));
482 acc->v[0] = ((data->negate_x) ? (-rawdata.v[data->axis_map_x])
483 : (rawdata.v[data->axis_map_x]));
484 acc->v[1] = ((data->negate_y) ? (-rawdata.v[data->axis_map_y])
485 : (rawdata.v[data->axis_map_y]));
486 acc->v[2] = ((data->negate_z) ? (-rawdata.v[data->axis_map_z])
487 : (rawdata.v[data->axis_map_z]));
493 static enum hrtimer_restart k2hh_timer_func(struct hrtimer *timer)
495 struct k2hh_p *data = container_of(timer,
496 struct k2hh_p, accel_timer);
498 if (!work_pending(&data->work))
499 queue_work(data->accel_wq, &data->work);
501 hrtimer_forward_now(&data->accel_timer, data->poll_delay);
503 return HRTIMER_RESTART;
506 static void k2hh_work_func(struct work_struct *work)
510 struct k2hh_p *data = container_of(work, struct k2hh_p, work);
512 ret = k2hh_read_accel_xyz(data, &acc);
516 data->accdata.x = acc.x - data->caldata.x;
517 data->accdata.y = acc.y - data->caldata.y;
518 data->accdata.z = acc.z - data->caldata.z;
520 input_report_rel(data->input, REL_X, data->accdata.x);
521 input_report_rel(data->input, REL_Y, data->accdata.y);
522 input_report_rel(data->input, REL_Z, data->accdata.z);
523 input_sync(data->input);
526 if ((ktime_to_ns(data->poll_delay) * (int64_t)data->time_count)
527 >= ((int64_t)ACCEL_LOG_TIME * NSEC_PER_SEC)) {
528 pr_info("[SENSOR]: %s - x = %d, y = %d, z = %d (ra:%d)\n",
529 __func__, data->accdata.x, data->accdata.y,
530 data->accdata.z, data->recog_flag);
531 data->time_count = 0;
536 static void k2hh_set_enable(struct k2hh_p *data, int enable)
539 hrtimer_start(&data->accel_timer, data->poll_delay,
542 hrtimer_cancel(&data->accel_timer);
543 cancel_work_sync(&data->work);
547 static ssize_t k2hh_enable_show(struct device *dev,
548 struct device_attribute *attr, char *buf)
550 struct k2hh_p *data = dev_get_drvdata(dev);
552 return snprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&data->enable));
555 static ssize_t k2hh_enable_store(struct device *dev,
556 struct device_attribute *attr, const char *buf, size_t size)
560 struct k2hh_p *data = dev_get_drvdata(dev);
562 ret = kstrtou8(buf, 2, &enable);
564 pr_err("[SENSOR]: %s - Invalid Argument\n", __func__);
568 pr_info("[SENSOR]: %s - new_value = %u\n", __func__, enable);
569 pre_enable = atomic_read(&data->enable);
572 if (pre_enable == OFF) {
573 k2hh_regulator_onoff(data, true);
574 k2hh_open_calibration(data);
575 k2hh_set_range(data, K2HH_RANGE_2G);
577 k2hh_set_mode(data, K2HH_MODE_NORMAL);
578 atomic_set(&data->enable, ON);
579 k2hh_set_enable(data, ON);
582 if (pre_enable == ON) {
583 atomic_set(&data->enable, OFF);
584 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
585 k2hh_set_enable(data, OFF);
586 k2hh_regulator_onoff(data, false);
593 static ssize_t k2hh_delay_show(struct device *dev,
594 struct device_attribute *attr, char *buf)
596 struct k2hh_p *data = dev_get_drvdata(dev);
598 return snprintf(buf, PAGE_SIZE, "%lld\n",
599 ktime_to_ns(data->poll_delay));
602 static ssize_t k2hh_delay_store(struct device *dev,
603 struct device_attribute *attr, const char *buf, size_t size)
607 struct k2hh_p *data = dev_get_drvdata(dev);
609 ret = kstrtoll(buf, 10, &delay);
611 pr_err("[SENSOR]: %s - Invalid Argument\n", __func__);
615 data->poll_delay = ns_to_ktime(delay);
618 if (atomic_read(&data->enable) == ON) {
619 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
620 k2hh_set_mode(data, K2HH_MODE_NORMAL);
623 pr_info("[SENSOR]: %s - poll_delay = %lld\n", __func__, delay);
627 static DEVICE_ATTR(poll_delay, S_IRUGO | S_IWUSR | S_IWGRP,
628 k2hh_delay_show, k2hh_delay_store);
629 static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR | S_IWGRP,
630 k2hh_enable_show, k2hh_enable_store);
632 static struct attribute *k2hh_attributes[] = {
633 &dev_attr_poll_delay.attr,
634 &dev_attr_enable.attr,
638 static struct attribute_group k2hh_attribute_group = {
639 .attrs = k2hh_attributes
643 static ssize_t k2hh_vendor_show(struct device *dev,
644 struct device_attribute *attr, char *buf)
646 return snprintf(buf, PAGE_SIZE, "%s\n", VENDOR_NAME);
649 static ssize_t k2hh_name_show(struct device *dev,
650 struct device_attribute *attr, char *buf)
652 return snprintf(buf, PAGE_SIZE, "%s\n", MODEL_NAME);
655 static int k2hh_open_calibration(struct k2hh_p *data)
659 struct file *cal_filp = NULL;
664 cal_filp = filp_open(CALIBRATION_FILE_PATH, O_RDONLY, 0666);
665 if (IS_ERR(cal_filp)) {
667 ret = PTR_ERR(cal_filp);
673 pr_info("[SENSOR]: %s - No Calibration\n", __func__);
678 ret = cal_filp->f_op->read(cal_filp, (char *)&data->caldata.v,
679 3 * sizeof(s16), &cal_filp->f_pos);
680 if (ret != 3 * sizeof(s16)) {
681 pr_err("[SENSOR] %s: - Can't read the cal data\n", __func__);
685 filp_close(cal_filp, current->files);
688 pr_info("[SENSOR]: open accel calibration %d, %d, %d\n",
689 data->caldata.x, data->caldata.y, data->caldata.z);
691 if ((data->caldata.x == 0) && (data->caldata.y == 0)
692 && (data->caldata.z == 0))
698 static int k2hh_do_calibrate(struct k2hh_p *data, int enable)
702 struct file *cal_filp = NULL;
711 if (atomic_read(&data->enable) == ON)
712 k2hh_set_enable(data, OFF);
714 k2hh_set_mode(data, K2HH_MODE_NORMAL);
718 for (cnt = 0; cnt < CALIBRATION_DATA_AMOUNT; cnt++) {
719 k2hh_read_accel_xyz(data, &acc);
726 if (atomic_read(&data->enable) == ON)
727 k2hh_set_enable(data, ON);
729 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
731 data->caldata.x = (sum[0] / CALIBRATION_DATA_AMOUNT);
732 data->caldata.y = (sum[1] / CALIBRATION_DATA_AMOUNT);
733 data->caldata.z = (sum[2] / CALIBRATION_DATA_AMOUNT);
735 if (data->caldata.z > 0)
736 data->caldata.z -= MAX_ACCEL_1G;
737 else if (data->caldata.z < 0)
738 data->caldata.z += MAX_ACCEL_1G;
745 pr_info("[SENSOR]: %s - do accel calibrate %d, %d, %d\n", __func__,
746 data->caldata.x, data->caldata.y, data->caldata.z);
751 cal_filp = filp_open(CALIBRATION_FILE_PATH,
752 O_CREAT | O_TRUNC | O_WRONLY, 0666);
753 if (IS_ERR(cal_filp)) {
754 pr_err("[SENSOR]: %s - Can't open calibration file\n",
757 ret = PTR_ERR(cal_filp);
761 ret = cal_filp->f_op->write(cal_filp, (char *)&data->caldata.v,
762 3 * sizeof(s16), &cal_filp->f_pos);
763 if (ret != 3 * sizeof(s16)) {
764 pr_err("[SENSOR]: %s - Can't write the caldata to file\n",
769 filp_close(cal_filp, current->files);
775 static ssize_t k2hh_calibration_show(struct device *dev,
776 struct device_attribute *attr, char *buf)
779 struct k2hh_p *data = dev_get_drvdata(dev);
781 ret = k2hh_open_calibration(data);
783 pr_err("[SENSOR]: %s - calibration open failed(%d)\n",
786 pr_info("[SENSOR]: %s - cal data %d %d %d - ret : %d\n", __func__,
787 data->caldata.x, data->caldata.y, data->caldata.z, ret);
789 return snprintf(buf, PAGE_SIZE, "%d %d %d %d\n", ret, data->caldata.x,
790 data->caldata.y, data->caldata.z);
793 static ssize_t k2hh_calibration_store(struct device *dev,
794 struct device_attribute *attr, const char *buf, size_t size)
798 struct k2hh_p *data = dev_get_drvdata(dev);
800 ret = kstrtoll(buf, 10, &dEnable);
804 ret = k2hh_do_calibrate(data, (int)dEnable);
806 pr_err("[SENSOR]: %s - accel calibrate failed\n", __func__);
811 static ssize_t k2hh_raw_data_read(struct device *dev,
812 struct device_attribute *attr, char *buf)
815 struct k2hh_p *data = dev_get_drvdata(dev);
817 if (atomic_read(&data->enable) == OFF) {
818 k2hh_set_mode(data, K2HH_MODE_NORMAL);
820 k2hh_read_accel_xyz(data, &acc);
821 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
823 acc.x = acc.x - data->caldata.x;
824 acc.y = acc.y - data->caldata.y;
825 acc.z = acc.z - data->caldata.z;
830 return snprintf(buf, PAGE_SIZE, "%d,%d,%d\n",
831 acc.x, acc.y, acc.z);
834 static ssize_t k2hh_reactive_alert_store(struct device *dev,
835 struct device_attribute *attr, const char *buf, size_t size)
837 unsigned char threshx, threshy, threshz;
838 int enable = OFF, factory_mode = OFF;
840 struct k2hh_p *data = dev_get_drvdata(dev);
842 if (sysfs_streq(buf, "0")) {
845 pr_info("[SENSOR]: %s - disable\n", __func__);
846 } else if (sysfs_streq(buf, "1")) {
849 pr_info("[SENSOR]: %s - enable\n", __func__);
850 } else if (sysfs_streq(buf, "2")) {
853 pr_info("[SENSOR]: %s - factory mode\n", __func__);
855 pr_err("[SENSOR]: %s - invalid value %d\n", __func__, *buf);
859 if ((enable == ON) && (data->recog_flag == OFF)) {
861 data->recog_flag = ON;
863 if (factory_mode == ON) {
864 k2hh_i2c_write(data, INT_THSX1_REG, 0x00);
865 k2hh_i2c_write(data, INT_THSY1_REG, 0x00);
866 k2hh_i2c_write(data, INT_THSZ1_REG, 0x00);
867 k2hh_i2c_write(data, INT_CFG1_REG, 0x3f);
870 if (atomic_read(&data->enable) == OFF) {
871 k2hh_set_mode(data, K2HH_MODE_NORMAL);
873 k2hh_read_accel_xyz(data, &acc);
874 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
876 acc.x = data->accdata.x;
877 acc.y = data->accdata.y;
878 acc.z = data->accdata.z;
881 threshx = (abs(acc.v[data->axis_map_x]) \
882 + DYNAMIC_THRESHOLD) >> 8;
883 threshy = (abs(acc.v[data->axis_map_y]) \
884 + DYNAMIC_THRESHOLD) >> 8;
885 threshz = (abs(acc.v[data->axis_map_z]) \
886 + DYNAMIC_THRESHOLD) >> 8;
888 k2hh_i2c_write(data, INT_THSX1_REG, threshx);
889 k2hh_i2c_write(data, INT_THSY1_REG, threshy);
890 k2hh_i2c_write(data, INT_THSZ1_REG, threshz);
891 k2hh_i2c_write(data, INT_CFG1_REG, 0x0a);
894 k2hh_i2c_write(data, CTRL7_REG, CTRL7_LIR1);
895 k2hh_i2c_write(data, CTRL3_REG, CTRL3_IG1_INT1);
897 enable_irq(data->irq1);
898 enable_irq_wake(data->irq1);
900 pr_info("[SENSOR]: %s - reactive alert is on!\n", __func__);
901 } else if ((enable == OFF) && (data->recog_flag == ON)) {
902 k2hh_i2c_write(data, CTRL3_REG, 0x00);
904 disable_irq_wake(data->irq1);
905 disable_irq_nosync(data->irq1);
906 data->recog_flag = OFF;
907 pr_info("[SENSOR]: %s - reactive alert is off! irq = %d\n",
908 __func__, data->irq_state);
914 static ssize_t k2hh_reactive_alert_show(struct device *dev,
915 struct device_attribute *attr, char *buf)
917 struct k2hh_p *data = dev_get_drvdata(dev);
919 return snprintf(buf, PAGE_SIZE, "%d\n", data->irq_state);
922 static ssize_t k2hh_selftest_show(struct device *dev,
923 struct device_attribute *attr, char *buf)
925 struct k2hh_p *data = dev_get_drvdata(dev);
930 s32 NO_ST[3] = {0, 0, 0};
931 s32 ST[3] = {0, 0, 0};
933 if (atomic_read(&data->enable) == OFF)
934 k2hh_set_mode(data, K2HH_MODE_NORMAL);
936 k2hh_set_enable(data, OFF);
938 k2hh_i2c_write(data, CTRL1_REG, 0x3f);
939 k2hh_i2c_write(data, CTRL4_REG, 0x04);
940 k2hh_i2c_write(data, CTRL5_REG, 0x00);
941 k2hh_i2c_write(data, CTRL6_REG, 0x00);
945 k2hh_read_accel_xyz(data, &acc);
947 for (i = 0; i < 5; i++) {
949 if (k2hh_i2c_read(data, STATUS_REG, &temp, 1) < 0) {
950 pr_err("[SENSOR] %s: i2c error", __func__);
951 goto exit_status_err;
958 k2hh_read_accel_xyz(data, &acc);
967 k2hh_i2c_write(data, CTRL5_REG, 0x04);
971 k2hh_read_accel_xyz(data, &acc);
973 for (i = 0; i < 5; i++) {
975 if (k2hh_i2c_read(data, STATUS_REG, &temp, 1) < 0) {
976 pr_err("[SENSOR] %s: i2c error", __func__);
977 goto exit_status_err;
984 k2hh_read_accel_xyz(data, &acc);
994 for (i = 0; i < 3; i++) {
998 if ((SELF_TEST_2G_MIN_LSB > ST[i]) \
999 || (ST[i] > SELF_TEST_2G_MAX_LSB)) {
1000 pr_info("[SENSOR] %s: %d Out of range!! (%d)\n",
1001 __func__, i, ST[i]);
1007 ret = sprintf(buf, "1,%d,%d,%d\n", ST[0], ST[1], ST[2]);
1009 ret = sprintf(buf, "0,%d,%d,%d\n", ST[0], ST[1], ST[2]);
1014 ret = sprintf(buf, "-1,0,0,0\n");
1016 k2hh_i2c_write(data, CTRL1_REG, 0x00);
1017 k2hh_i2c_write(data, CTRL5_REG, 0x00);
1019 if (atomic_read(&data->enable) == OFF) {
1020 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
1022 k2hh_set_mode(data, K2HH_MODE_NORMAL);
1023 k2hh_set_enable(data, ON);
1029 static DEVICE_ATTR(selftest, S_IRUGO, k2hh_selftest_show, NULL);
1030 static DEVICE_ATTR(name, S_IRUGO, k2hh_name_show, NULL);
1031 static DEVICE_ATTR(vendor, S_IRUGO, k2hh_vendor_show, NULL);
1032 static DEVICE_ATTR(calibration, S_IRUGO | S_IWUSR | S_IWGRP,
1033 k2hh_calibration_show, k2hh_calibration_store);
1034 static DEVICE_ATTR(raw_data, S_IRUGO, k2hh_raw_data_read, NULL);
1035 static DEVICE_ATTR(reactive_alert, S_IRUGO | S_IWUSR | S_IWGRP,
1036 k2hh_reactive_alert_show, k2hh_reactive_alert_store);
1038 static struct device_attribute *sensor_attrs[] = {
1041 &dev_attr_calibration,
1043 &dev_attr_reactive_alert,
1048 static void k2hh_irq_work_func(struct work_struct *work)
1050 struct k2hh_p *data = container_of((struct delayed_work *)work,
1051 struct k2hh_p, irq_work);
1054 k2hh_i2c_write(data, INT_CFG1_REG, 0x00);
1055 k2hh_i2c_read(data, INT_SRC1_REG, &buf, 1);
1058 static irqreturn_t k2hh_irq_thread(int irq, void *k2hh_data_p)
1060 struct k2hh_p *data = k2hh_data_p;
1062 data->irq_state = 1;
1063 wake_lock_timeout(&data->reactive_wake_lock,
1064 msecs_to_jiffies(2000));
1065 schedule_delayed_work(&data->irq_work, msecs_to_jiffies(100));
1066 pr_info("###### [SENSOR]: %s reactive irq ######\n", __func__);
1071 static int k2hh_setup_pin(struct k2hh_p *data)
1075 ret = gpio_request(data->acc_int1, "ACC_INT1");
1077 pr_err("[SENSOR] %s - gpio %d request failed (%d)\n",
1078 __func__, data->acc_int1, ret);
1082 ret = gpio_direction_input(data->acc_int1);
1084 pr_err("[SENSOR]: %s - failed to set gpio %d as input (%d)\n",
1085 __func__, data->acc_int1, ret);
1089 wake_lock_init(&data->reactive_wake_lock, WAKE_LOCK_SUSPEND,
1090 "reactive_wake_lock");
1092 data->irq1 = gpio_to_irq(data->acc_int1);
1093 ret = request_threaded_irq(data->irq1, NULL, k2hh_irq_thread,
1094 IRQF_TRIGGER_RISING | IRQF_ONESHOT, "k2hh_accel", data);
1096 pr_err("[SENSOR]: %s - can't allocate irq.\n", __func__);
1097 goto exit_reactive_irq;
1100 disable_irq(data->irq1);
1104 wake_lock_destroy(&data->reactive_wake_lock);
1106 gpio_free(data->acc_int1);
1111 static int k2hh_input_init(struct k2hh_p *data)
1114 struct input_dev *dev;
1116 dev = input_allocate_device();
1120 dev->name = MODULE_NAME;
1121 dev->id.bustype = BUS_I2C;
1123 input_set_capability(dev, EV_REL, REL_X);
1124 input_set_capability(dev, EV_REL, REL_Y);
1125 input_set_capability(dev, EV_REL, REL_Z);
1126 input_set_drvdata(dev, data);
1128 ret = input_register_device(dev);
1130 input_free_device(dev);
1133 /* sysfs node creation */
1134 ret = sysfs_create_group(&dev->dev.kobj, &k2hh_attribute_group);
1136 input_unregister_device(dev);
1144 static int k2hh_parse_dt(struct k2hh_p *data, struct device *dev)
1146 struct device_node *dNode = dev->of_node;
1147 enum of_gpio_flags flags;
1154 data->acc_int1 = of_get_named_gpio_flags(dNode,
1155 "stm,irq_gpio", 0, &flags);
1156 if (data->acc_int1 < 0) {
1157 pr_err("[SENSOR]: %s - get acc_int1 error\n", __func__);
1161 data->sda_gpio = of_get_named_gpio_flags(dNode,
1162 "stm,sda", 0, &flags);
1163 if (data->sda_gpio < 0)
1164 pr_info("[SENSOR]: %s - no sda_gpio\n", __func__);
1166 data->scl_gpio = of_get_named_gpio_flags(dNode,
1167 "stm,scl", 0, &flags);
1168 if (data->scl_gpio < 0)
1169 pr_info("[SENSOR]: %s - no scl_gpio\n", __func__);
1171 ret = of_property_read_u32(dNode,"stm,axis_map_x", &temp);
1172 if ((data->axis_map_x > 2) || (ret < 0)) {
1173 pr_err("%s: invalid x axis_map value %u\n",
1174 __func__, data->axis_map_x);
1175 data->axis_map_x = 0;
1177 data->axis_map_x= (u8)temp;
1180 ret = of_property_read_u32(dNode,"stm,axis_map_y", &temp);
1181 if ((data->axis_map_y > 2) || (ret < 0)) {
1182 pr_err("%s: invalid y axis_map value %u\n",
1183 __func__, data->axis_map_y);
1184 data->axis_map_y = 1;
1186 data->axis_map_y= (u8)temp;
1189 ret = of_property_read_u32(dNode,"stm,axis_map_z", &temp);
1190 if ((data->axis_map_z > 2) || (ret < 0)) {
1191 pr_err("%s: invalid z axis_map value %u\n",
1192 __func__, data->axis_map_z);
1193 data->axis_map_z = 2;
1195 data->axis_map_z= (u8)temp;
1198 ret = of_property_read_u32(dNode,"stm,negate_x", &temp);
1199 if ((data->negate_x > 1) || (ret < 0)) {
1200 pr_err("%s: invalid x axis_map value %u\n",
1201 __func__, data->negate_x);
1204 data->negate_x= (u8)temp;
1207 ret = of_property_read_u32(dNode,"stm,negate_y", &temp);
1208 if ((data->negate_y > 1) || (ret < 0)) {
1209 pr_err("%s: invalid y axis_map value %u\n",
1210 __func__, data->negate_y);
1213 data->negate_y= (u8)temp;
1216 ret = of_property_read_u32(dNode,"stm,negate_z", &temp);
1217 if ((data->negate_z > 1) || (ret < 0)) {
1218 pr_err("%s: invalid z axis_map value %u\n",
1219 __func__, data->negate_z);
1222 data->negate_z= (u8)temp;
1228 static int k2hh_regulator_onoff(struct k2hh_p *data, bool onoff)
1234 data->vdd = regulator_get(&data->client->dev, "stm,reg_vdd");
1236 pr_err("%s: regulator pointer null vdd, rc=%d\n",
1240 ret = regulator_set_voltage(data->vdd, 3000000, 3000000);
1242 pr_err("%s: set voltage failed on vdd, rc=%d\n",
1248 data->vio = regulator_get(&data->client->dev, "stm,reg_vio");
1250 pr_err("%s: regulator_get for vio failed\n",
1256 ret = regulator_enable(data->vdd);
1258 pr_err("%s: Failed to enable regulator vdd.\n",
1262 /*ret = regulator_enable(data->vio);
1264 pr_err("%s: Failed to enable regulator vio.\n",
1271 ret = regulator_disable(data->vdd);
1273 pr_err("%s: Failed to disable regulator vdd.\n",
1277 /*ret = regulator_disable(data->vio);
1279 pr_err("%s: Failed to disable regulator vio.\n",
1289 static int k2hh_probe(struct i2c_client *client,
1290 const struct i2c_device_id *id)
1293 int ret = -ENODEV, i;
1294 struct k2hh_p *data = NULL;
1296 pr_err("[SENSOR]: %s - Probe Start!\n", __func__);
1297 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
1298 pr_err("[SENSOR]: %s - i2c_check_functionality error\n",
1303 data = kzalloc(sizeof(struct k2hh_p), GFP_KERNEL);
1305 pr_err("[SENSOR]: %s - kzalloc error\n", __func__);
1310 i2c_set_clientdata(client, data);
1311 data->client = client;
1313 ret = k2hh_parse_dt(data, &client->dev);
1315 pr_err("[SENSOR]: %s - of_node error\n", __func__);
1320 ret = k2hh_regulator_onoff(data, true);
1322 pr_err("[SENSOR]: %s - No regulator\n", __func__);
1324 ret = k2hh_setup_pin(data);
1326 pr_err("[SENSOR]: %s - could not setup pin\n", __func__);
1327 goto exit_setup_pin;
1330 mutex_init(&data->mode_mutex);
1333 k2hh_set_mode(data, K2HH_MODE_NORMAL);
1334 for (i = 0; i < CHIP_ID_RETRIES; i++) {
1335 ret = k2hh_i2c_read(data, WHOAMI_REG, &temp, 1);
1336 if (temp != K2HH_CHIP_ID) {
1337 pr_err("[SENSOR]: %s - chip id failed 0x%x : %d\n",
1338 __func__, temp, ret);
1340 pr_info("[SENSOR]: %s - chip id success 0x%x\n",
1347 if (i >= CHIP_ID_RETRIES) {
1349 goto exit_read_chipid;
1352 /* input device init */
1353 ret = k2hh_input_init(data);
1355 goto exit_input_init;
1357 sensors_register(data->factory_device, data, sensor_attrs, MODULE_NAME);
1359 /* accel_timer settings. we poll for light values using a timer. */
1360 hrtimer_init(&data->accel_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1361 data->poll_delay = ns_to_ktime(K2HH_DEFAULT_DELAY);
1362 data->accel_timer.function = k2hh_timer_func;
1364 /* the timer just fires off a work queue request. we need a thread
1365 to read the i2c (can be slow and blocking). */
1366 data->accel_wq = create_singlethread_workqueue("accel_wq");
1367 if (!data->accel_wq) {
1369 pr_err("[SENSOR]: %s - could not create workqueue\n", __func__);
1370 goto exit_create_workqueue;
1373 /* this is the thread function we run on the work queue */
1374 INIT_WORK(&data->work, k2hh_work_func);
1375 INIT_DELAYED_WORK(&data->irq_work, k2hh_irq_work_func);
1377 atomic_set(&data->enable, OFF);
1378 data->time_count = 0;
1379 data->irq_state = 0;
1380 data->recog_flag = OFF;
1382 k2hh_set_range(data, K2HH_RANGE_2G);
1383 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
1385 /*power off the regulators, for next enable power will be on*/
1386 ret = k2hh_regulator_onoff(data, false);
1388 pr_err("[SENSOR]: %s - Probe done!\n", __func__);
1392 exit_create_workqueue:
1393 sensors_unregister(data->factory_device, sensor_attrs);
1394 sysfs_remove_group(&data->input->dev.kobj, &k2hh_attribute_group);
1395 input_unregister_device(data->input);
1398 mutex_destroy(&data->mode_mutex);
1399 free_irq(data->irq1, data);
1400 wake_lock_destroy(&data->reactive_wake_lock);
1401 gpio_free(data->acc_int1);
1407 pr_err("[SENSOR]: %s - Probe fail!\n", __func__);
1411 static void k2hh_shutdown(struct i2c_client *client)
1413 struct k2hh_p *data = (struct k2hh_p *)i2c_get_clientdata(client);
1415 pr_info("[SENSOR]: %s\n", __func__);
1417 if (atomic_read(&data->enable) == ON)
1418 k2hh_set_enable(data, OFF);
1420 atomic_set(&data->enable, OFF);
1421 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
1425 static int k2hh_remove(struct i2c_client *client)
1427 struct k2hh_p *data = (struct k2hh_p *)i2c_get_clientdata(client);
1429 if (atomic_read(&data->enable) == ON)
1430 k2hh_set_enable(data, OFF);
1432 atomic_set(&data->enable, OFF);
1433 cancel_delayed_work_sync(&data->irq_work);
1435 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
1436 sensors_unregister(data->factory_device, sensor_attrs);
1438 sysfs_remove_group(&data->input->dev.kobj, &k2hh_attribute_group);
1439 input_unregister_device(data->input);
1441 free_irq(data->irq1, data);
1442 wake_lock_destroy(&data->reactive_wake_lock);
1443 mutex_destroy(&data->mode_mutex);
1444 gpio_free(data->acc_int1);
1451 static int k2hh_suspend(struct device *dev)
1453 struct k2hh_p *data = dev_get_drvdata(dev);
1455 pr_info("[SENSOR]: %s\n", __func__);
1457 if (atomic_read(&data->enable) == ON) {
1458 k2hh_set_mode(data, K2HH_MODE_SUSPEND);
1459 k2hh_set_enable(data, OFF);
1465 static int k2hh_resume(struct device *dev)
1467 struct k2hh_p *data = dev_get_drvdata(dev);
1469 pr_info("[SENSOR]: %s\n", __func__);
1471 if (atomic_read(&data->enable) == ON) {
1472 k2hh_set_mode(data, K2HH_MODE_NORMAL);
1473 k2hh_set_enable(data, ON);
1479 static struct of_device_id k2hh_match_table[] = {
1480 { .compatible = "stm,k2hh",},
1484 static const struct i2c_device_id k2hh_id[] = {
1485 { "k2hh_match_table", 0 },
1489 static const struct dev_pm_ops k2hh_pm_ops = {
1490 .suspend = k2hh_suspend,
1491 .resume = k2hh_resume
1494 static struct i2c_driver k2hh_driver = {
1497 .owner = THIS_MODULE,
1498 .of_match_table = k2hh_match_table,
1501 .probe = k2hh_probe,
1502 .shutdown = k2hh_shutdown,
1503 /* .remove = k2hh_remove, */
1504 .id_table = k2hh_id,
1507 static int __init k2hh_init(void)
1509 return i2c_add_driver(&k2hh_driver);
1512 static void __exit k2hh_exit(void)
1514 i2c_del_driver(&k2hh_driver);
1517 module_init(k2hh_init);
1518 module_exit(k2hh_exit);
1520 MODULE_DESCRIPTION("k2hh accelerometer sensor driver");
1521 MODULE_AUTHOR("Samsung Electronics");
1522 MODULE_LICENSE("GPL");