Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: accel: kxcjk-1013: Support thresholds

This chip has a motion detect capability. Using IIO events to
specify thresholds and pushing events.
In addition a new trigger of type any-motion is added, which
pushes data to buffer only when there is any movement.

Change list:
Comments addressed for
Re: [PATCH 5/6] iio: accel: kxcjk-1013: Support thresholds
Date: 07/20/2014

- Both motion detect and data ready can be enabled together
- Sending RISING/FALLING events based on int status
- Separate interrupt configuration for data ready and motion detect

Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>

authored by

Srinivas Pandruvada and committed by
Jonathan Cameron
b4b491c0 b5faca4b

+448 -51
+448 -51
drivers/iio/accel/kxcjk-1013.c
··· 27 27 #include <linux/iio/sysfs.h> 28 28 #include <linux/iio/buffer.h> 29 29 #include <linux/iio/trigger.h> 30 + #include <linux/iio/events.h> 30 31 #include <linux/iio/trigger_consumer.h> 31 32 #include <linux/iio/triggered_buffer.h> 32 33 #include <linux/iio/accel/kxcjk_1013.h> ··· 76 75 77 76 #define KXCJK1013_SLEEP_DELAY_MS 2000 78 77 78 + #define KXCJK1013_REG_INT_SRC2_BIT_ZP BIT(0) 79 + #define KXCJK1013_REG_INT_SRC2_BIT_ZN BIT(1) 80 + #define KXCJK1013_REG_INT_SRC2_BIT_YP BIT(2) 81 + #define KXCJK1013_REG_INT_SRC2_BIT_YN BIT(3) 82 + #define KXCJK1013_REG_INT_SRC2_BIT_XP BIT(4) 83 + #define KXCJK1013_REG_INT_SRC2_BIT_XN BIT(5) 84 + 85 + #define KXCJK1013_DEFAULT_WAKE_THRES 1 86 + 79 87 struct kxcjk1013_data { 80 88 struct i2c_client *client; 81 - struct iio_trigger *trig; 82 - bool trig_mode; 89 + struct iio_trigger *dready_trig; 90 + struct iio_trigger *motion_trig; 83 91 struct mutex mutex; 84 92 s16 buffer[8]; 85 93 u8 odr_bits; 86 94 u8 range; 95 + int wake_thres; 96 + int wake_dur; 87 97 bool active_high_intr; 88 - bool trigger_on; 98 + bool dready_trigger_on; 99 + int ev_enable_state; 100 + bool motion_trigger_on; 101 + int64_t timestamp; 89 102 }; 90 103 91 104 enum kxcjk1013_axis { ··· 145 130 } KXCJK1013_scale_table[] = { {9582, 0, 0}, 146 131 {19163, 1, 0}, 147 132 {38326, 0, 1} }; 133 + 134 + static const struct { 135 + int val; 136 + int val2; 137 + int odr_bits; 138 + } wake_odr_data_rate_table[] = { {0, 781000, 0x00}, 139 + {1, 563000, 0x01}, 140 + {3, 125000, 0x02}, 141 + {6, 250000, 0x03}, 142 + {12, 500000, 0x04}, 143 + {25, 0, 0x05}, 144 + {50, 0, 0x06}, 145 + {100, 0, 0x06}, 146 + {200, 0, 0x06}, 147 + {400, 0, 0x06}, 148 + {800, 0, 0x06}, 149 + {1600, 0, 0x06} }; 148 150 149 151 static int kxcjk1013_set_mode(struct kxcjk1013_data *data, 150 152 enum kxcjk1013_mode mode) ··· 302 270 if (ret < 0) 303 271 return ret; 304 272 273 + data->wake_thres = KXCJK1013_DEFAULT_WAKE_THRES; 274 + 305 275 return 0; 306 276 } 307 277 ··· 338 304 return 0; 339 305 } 340 306 341 - static int kxcjk1013_chip_setup_interrupt(struct kxcjk1013_data *data, 342 - bool status) 307 + static int kxcjk1013_chip_update_thresholds(struct kxcjk1013_data *data) 308 + { 309 + int ret; 310 + 311 + ret = i2c_smbus_write_byte_data(data->client, 312 + KXCJK1013_REG_WAKE_TIMER, 313 + data->wake_dur); 314 + if (ret < 0) { 315 + dev_err(&data->client->dev, 316 + "Error writing reg_wake_timer\n"); 317 + return ret; 318 + } 319 + 320 + ret = i2c_smbus_write_byte_data(data->client, 321 + KXCJK1013_REG_WAKE_THRES, 322 + data->wake_thres); 323 + if (ret < 0) { 324 + dev_err(&data->client->dev, "Error writing reg_wake_thres\n"); 325 + return ret; 326 + } 327 + 328 + return 0; 329 + } 330 + 331 + static int kxcjk1013_setup_any_motion_interrupt(struct kxcjk1013_data *data, 332 + bool status) 333 + { 334 + int ret; 335 + enum kxcjk1013_mode store_mode; 336 + 337 + ret = kxcjk1013_get_mode(data, &store_mode); 338 + if (ret < 0) 339 + return ret; 340 + 341 + /* This is requirement by spec to change state to STANDBY */ 342 + ret = kxcjk1013_set_mode(data, STANDBY); 343 + if (ret < 0) 344 + return ret; 345 + 346 + ret = kxcjk1013_chip_update_thresholds(data); 347 + if (ret < 0) 348 + return ret; 349 + 350 + ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_CTRL1); 351 + if (ret < 0) { 352 + dev_err(&data->client->dev, "Error reading reg_int_ctrl1\n"); 353 + return ret; 354 + } 355 + 356 + if (status) 357 + ret |= KXCJK1013_REG_INT_REG1_BIT_IEN; 358 + else 359 + ret &= ~KXCJK1013_REG_INT_REG1_BIT_IEN; 360 + 361 + ret = i2c_smbus_write_byte_data(data->client, KXCJK1013_REG_INT_CTRL1, 362 + ret); 363 + if (ret < 0) { 364 + dev_err(&data->client->dev, "Error writing reg_int_ctrl1\n"); 365 + return ret; 366 + } 367 + 368 + ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_CTRL1); 369 + if (ret < 0) { 370 + dev_err(&data->client->dev, "Error reading reg_ctrl1\n"); 371 + return ret; 372 + } 373 + 374 + if (status) 375 + ret |= KXCJK1013_REG_CTRL1_BIT_WUFE; 376 + else 377 + ret &= ~KXCJK1013_REG_CTRL1_BIT_WUFE; 378 + 379 + ret = i2c_smbus_write_byte_data(data->client, 380 + KXCJK1013_REG_CTRL1, ret); 381 + if (ret < 0) { 382 + dev_err(&data->client->dev, "Error writing reg_ctrl1\n"); 383 + return ret; 384 + } 385 + 386 + if (store_mode == OPERATION) { 387 + ret = kxcjk1013_set_mode(data, OPERATION); 388 + if (ret < 0) 389 + return ret; 390 + } 391 + 392 + return 0; 393 + } 394 + 395 + static int kxcjk1013_setup_new_data_interrupt(struct kxcjk1013_data *data, 396 + bool status) 343 397 { 344 398 int ret; 345 399 enum kxcjk1013_mode store_mode; ··· 500 378 return -EINVAL; 501 379 } 502 380 381 + static int kxcjk1013_convert_wake_odr_to_bit(int val, int val2) 382 + { 383 + int i; 384 + 385 + for (i = 0; i < ARRAY_SIZE(wake_odr_data_rate_table); ++i) { 386 + if (wake_odr_data_rate_table[i].val == val && 387 + wake_odr_data_rate_table[i].val2 == val2) { 388 + return wake_odr_data_rate_table[i].odr_bits; 389 + } 390 + } 391 + 392 + return -EINVAL; 393 + } 394 + 503 395 static int kxcjk1013_set_odr(struct kxcjk1013_data *data, int val, int val2) 504 396 { 505 397 int ret; ··· 541 405 } 542 406 543 407 data->odr_bits = odr_bits; 408 + 409 + odr_bits = kxcjk1013_convert_wake_odr_to_bit(val, val2); 410 + if (odr_bits < 0) 411 + return odr_bits; 412 + 413 + ret = i2c_smbus_write_byte_data(data->client, KXCJK1013_REG_CTRL2, 414 + odr_bits); 415 + if (ret < 0) { 416 + dev_err(&data->client->dev, "Error writing reg_ctrl2\n"); 417 + return ret; 418 + } 544 419 545 420 if (store_mode == OPERATION) { 546 421 ret = kxcjk1013_set_mode(data, OPERATION); ··· 704 557 return ret; 705 558 } 706 559 560 + static int kxcjk1013_read_event(struct iio_dev *indio_dev, 561 + const struct iio_chan_spec *chan, 562 + enum iio_event_type type, 563 + enum iio_event_direction dir, 564 + enum iio_event_info info, 565 + int *val, int *val2) 566 + { 567 + struct kxcjk1013_data *data = iio_priv(indio_dev); 568 + 569 + *val2 = 0; 570 + switch (info) { 571 + case IIO_EV_INFO_VALUE: 572 + *val = data->wake_thres; 573 + break; 574 + case IIO_EV_INFO_PERIOD: 575 + *val = data->wake_dur; 576 + break; 577 + default: 578 + return -EINVAL; 579 + } 580 + 581 + return IIO_VAL_INT; 582 + } 583 + 584 + static int kxcjk1013_write_event(struct iio_dev *indio_dev, 585 + const struct iio_chan_spec *chan, 586 + enum iio_event_type type, 587 + enum iio_event_direction dir, 588 + enum iio_event_info info, 589 + int val, int val2) 590 + { 591 + struct kxcjk1013_data *data = iio_priv(indio_dev); 592 + 593 + if (data->ev_enable_state) 594 + return -EBUSY; 595 + 596 + switch (info) { 597 + case IIO_EV_INFO_VALUE: 598 + data->wake_thres = val; 599 + break; 600 + case IIO_EV_INFO_PERIOD: 601 + data->wake_dur = val; 602 + break; 603 + default: 604 + return -EINVAL; 605 + } 606 + 607 + return 0; 608 + } 609 + 610 + static int kxcjk1013_read_event_config(struct iio_dev *indio_dev, 611 + const struct iio_chan_spec *chan, 612 + enum iio_event_type type, 613 + enum iio_event_direction dir) 614 + { 615 + 616 + struct kxcjk1013_data *data = iio_priv(indio_dev); 617 + 618 + return data->ev_enable_state; 619 + } 620 + 621 + static int kxcjk1013_write_event_config(struct iio_dev *indio_dev, 622 + const struct iio_chan_spec *chan, 623 + enum iio_event_type type, 624 + enum iio_event_direction dir, 625 + int state) 626 + { 627 + struct kxcjk1013_data *data = iio_priv(indio_dev); 628 + int ret; 629 + 630 + if (state && data->ev_enable_state) 631 + return 0; 632 + 633 + mutex_lock(&data->mutex); 634 + 635 + if (!state && data->motion_trigger_on) { 636 + data->ev_enable_state = 0; 637 + mutex_unlock(&data->mutex); 638 + return 0; 639 + } 640 + 641 + /* 642 + * We will expect the enable and disable to do operation in 643 + * in reverse order. This will happen here anyway as our 644 + * resume operation uses sync mode runtime pm calls, the 645 + * suspend operation will be delayed by autosuspend delay 646 + * So the disable operation will still happen in reverse of 647 + * enable operation. When runtime pm is disabled the mode 648 + * is always on so sequence doesn't matter 649 + */ 650 + ret = kxcjk1013_set_power_state(data, state); 651 + if (ret < 0) { 652 + mutex_unlock(&data->mutex); 653 + return ret; 654 + } 655 + 656 + ret = kxcjk1013_setup_any_motion_interrupt(data, state); 657 + if (ret < 0) { 658 + mutex_unlock(&data->mutex); 659 + return ret; 660 + } 661 + 662 + data->ev_enable_state = state; 663 + mutex_unlock(&data->mutex); 664 + 665 + return 0; 666 + } 667 + 707 668 static int kxcjk1013_validate_trigger(struct iio_dev *indio_dev, 708 669 struct iio_trigger *trig) 709 670 { 710 671 struct kxcjk1013_data *data = iio_priv(indio_dev); 711 672 712 - if (data->trig != trig) 673 + if (data->dready_trig != trig && data->motion_trig != trig) 713 674 return -EINVAL; 714 675 715 676 return 0; ··· 838 583 .attrs = kxcjk1013_attributes, 839 584 }; 840 585 586 + static const struct iio_event_spec kxcjk1013_event = { 587 + .type = IIO_EV_TYPE_THRESH, 588 + .dir = IIO_EV_DIR_RISING | IIO_EV_DIR_FALLING, 589 + .mask_separate = BIT(IIO_EV_INFO_VALUE) | 590 + BIT(IIO_EV_INFO_ENABLE) | 591 + BIT(IIO_EV_INFO_PERIOD) 592 + }; 593 + 841 594 #define KXCJK1013_CHANNEL(_axis) { \ 842 595 .type = IIO_ACCEL, \ 843 596 .modified = 1, \ ··· 861 598 .shift = 4, \ 862 599 .endianness = IIO_CPU, \ 863 600 }, \ 601 + .event_spec = &kxcjk1013_event, \ 602 + .num_event_specs = 1 \ 864 603 } 865 604 866 605 static const struct iio_chan_spec kxcjk1013_channels[] = { ··· 876 611 .attrs = &kxcjk1013_attrs_group, 877 612 .read_raw = kxcjk1013_read_raw, 878 613 .write_raw = kxcjk1013_write_raw, 614 + .read_event_value = kxcjk1013_read_event, 615 + .write_event_value = kxcjk1013_write_event, 616 + .write_event_config = kxcjk1013_write_event_config, 617 + .read_event_config = kxcjk1013_read_event_config, 879 618 .validate_trigger = kxcjk1013_validate_trigger, 880 619 .driver_module = THIS_MODULE, 881 620 }; ··· 905 636 mutex_unlock(&data->mutex); 906 637 907 638 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, 908 - pf->timestamp); 639 + data->timestamp); 909 640 err: 910 641 iio_trigger_notify_done(indio_dev->trig); 911 642 ··· 934 665 struct kxcjk1013_data *data = iio_priv(indio_dev); 935 666 int ret; 936 667 937 - if (state && data->trigger_on) 938 - return 0; 939 - 940 668 mutex_lock(&data->mutex); 941 - ret = kxcjk1013_chip_setup_interrupt(data, state); 942 - if (!ret) { 943 - ret = kxcjk1013_set_power_state(data, state); 944 - if (ret < 0) { 945 - mutex_unlock(&data->mutex); 946 - return ret; 947 - } 669 + 670 + if (!state && data->ev_enable_state && data->motion_trigger_on) { 671 + data->motion_trigger_on = false; 672 + mutex_unlock(&data->mutex); 673 + return 0; 948 674 } 949 - data->trigger_on = state; 675 + 676 + ret = kxcjk1013_set_power_state(data, state); 677 + if (ret < 0) { 678 + mutex_unlock(&data->mutex); 679 + return ret; 680 + } 681 + if (data->motion_trig == trig) 682 + ret = kxcjk1013_setup_any_motion_interrupt(data, state); 683 + else 684 + ret = kxcjk1013_setup_new_data_interrupt(data, state); 685 + if (ret < 0) { 686 + mutex_unlock(&data->mutex); 687 + return ret; 688 + } 689 + if (data->motion_trig == trig) 690 + data->motion_trigger_on = state; 691 + else 692 + data->dready_trigger_on = state; 693 + 950 694 mutex_unlock(&data->mutex); 951 695 952 696 return 0; ··· 970 688 .try_reenable = kxcjk1013_trig_try_reen, 971 689 .owner = THIS_MODULE, 972 690 }; 691 + 692 + static irqreturn_t kxcjk1013_event_handler(int irq, void *private) 693 + { 694 + struct iio_dev *indio_dev = private; 695 + struct kxcjk1013_data *data = iio_priv(indio_dev); 696 + int ret; 697 + 698 + ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_SRC1); 699 + if (ret < 0) { 700 + dev_err(&data->client->dev, "Error reading reg_int_src1\n"); 701 + goto ack_intr; 702 + } 703 + 704 + if (ret & 0x02) { 705 + ret = i2c_smbus_read_byte_data(data->client, 706 + KXCJK1013_REG_INT_SRC2); 707 + if (ret < 0) { 708 + dev_err(&data->client->dev, 709 + "Error reading reg_int_src2\n"); 710 + goto ack_intr; 711 + } 712 + 713 + if (ret & KXCJK1013_REG_INT_SRC2_BIT_XN) 714 + iio_push_event(indio_dev, 715 + IIO_MOD_EVENT_CODE(IIO_ACCEL, 716 + 0, 717 + IIO_MOD_X, 718 + IIO_EV_TYPE_THRESH, 719 + IIO_EV_DIR_FALLING), 720 + data->timestamp); 721 + if (ret & KXCJK1013_REG_INT_SRC2_BIT_XP) 722 + iio_push_event(indio_dev, 723 + IIO_MOD_EVENT_CODE(IIO_ACCEL, 724 + 0, 725 + IIO_MOD_X, 726 + IIO_EV_TYPE_THRESH, 727 + IIO_EV_DIR_RISING), 728 + data->timestamp); 729 + 730 + 731 + if (ret & KXCJK1013_REG_INT_SRC2_BIT_YN) 732 + iio_push_event(indio_dev, 733 + IIO_MOD_EVENT_CODE(IIO_ACCEL, 734 + 0, 735 + IIO_MOD_Y, 736 + IIO_EV_TYPE_THRESH, 737 + IIO_EV_DIR_FALLING), 738 + data->timestamp); 739 + if (ret & KXCJK1013_REG_INT_SRC2_BIT_YP) 740 + iio_push_event(indio_dev, 741 + IIO_MOD_EVENT_CODE(IIO_ACCEL, 742 + 0, 743 + IIO_MOD_Y, 744 + IIO_EV_TYPE_THRESH, 745 + IIO_EV_DIR_RISING), 746 + data->timestamp); 747 + 748 + if (ret & KXCJK1013_REG_INT_SRC2_BIT_ZN) 749 + iio_push_event(indio_dev, 750 + IIO_MOD_EVENT_CODE(IIO_ACCEL, 751 + 0, 752 + IIO_MOD_Z, 753 + IIO_EV_TYPE_THRESH, 754 + IIO_EV_DIR_FALLING), 755 + data->timestamp); 756 + if (ret & KXCJK1013_REG_INT_SRC2_BIT_ZP) 757 + iio_push_event(indio_dev, 758 + IIO_MOD_EVENT_CODE(IIO_ACCEL, 759 + 0, 760 + IIO_MOD_Z, 761 + IIO_EV_TYPE_THRESH, 762 + IIO_EV_DIR_RISING), 763 + data->timestamp); 764 + } 765 + 766 + ack_intr: 767 + if (data->dready_trigger_on) 768 + return IRQ_HANDLED; 769 + 770 + ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_REL); 771 + if (ret < 0) 772 + dev_err(&data->client->dev, "Error reading reg_int_rel\n"); 773 + 774 + return IRQ_HANDLED; 775 + } 776 + 777 + static irqreturn_t kxcjk1013_data_rdy_trig_poll(int irq, void *private) 778 + { 779 + struct iio_dev *indio_dev = private; 780 + struct kxcjk1013_data *data = iio_priv(indio_dev); 781 + 782 + data->timestamp = iio_get_time_ns(); 783 + 784 + if (data->dready_trigger_on) 785 + iio_trigger_poll(data->dready_trig); 786 + else if (data->motion_trigger_on) 787 + iio_trigger_poll(data->motion_trig); 788 + 789 + if (data->ev_enable_state) 790 + return IRQ_WAKE_THREAD; 791 + else 792 + return IRQ_HANDLED; 793 + } 973 794 974 795 static int kxcjk1013_acpi_gpio_probe(struct i2c_client *client, 975 796 struct kxcjk1013_data *data) ··· 1116 731 { 1117 732 struct kxcjk1013_data *data; 1118 733 struct iio_dev *indio_dev; 1119 - struct iio_trigger *trig = NULL; 1120 734 struct kxcjk_1013_platform_data *pdata; 1121 735 int ret; 1122 736 ··· 1150 766 client->irq = kxcjk1013_acpi_gpio_probe(client, data); 1151 767 1152 768 if (client->irq >= 0) { 1153 - trig = iio_trigger_alloc("%s-dev%d", indio_dev->name, 1154 - indio_dev->id); 1155 - if (!trig) 769 + ret = devm_request_threaded_irq(&client->dev, client->irq, 770 + kxcjk1013_data_rdy_trig_poll, 771 + kxcjk1013_event_handler, 772 + IRQF_TRIGGER_RISING, 773 + KXCJK1013_IRQ_NAME, 774 + indio_dev); 775 + if (ret) 776 + return ret; 777 + 778 + data->dready_trig = devm_iio_trigger_alloc(&client->dev, 779 + "%s-dev%d", 780 + indio_dev->name, 781 + indio_dev->id); 782 + if (!data->dready_trig) 1156 783 return -ENOMEM; 1157 784 1158 - data->trig_mode = true; 785 + data->motion_trig = devm_iio_trigger_alloc(&client->dev, 786 + "%s-any-motion-dev%d", 787 + indio_dev->name, 788 + indio_dev->id); 789 + if (!data->motion_trig) 790 + return -ENOMEM; 1159 791 1160 - ret = devm_request_irq(&client->dev, client->irq, 1161 - iio_trigger_generic_data_rdy_poll, 1162 - IRQF_TRIGGER_RISING, 1163 - KXCJK1013_IRQ_NAME, 1164 - trig); 1165 - if (ret) { 1166 - dev_err(&client->dev, "unable to request IRQ\n"); 1167 - goto err_trigger_free; 1168 - } 1169 - 1170 - trig->dev.parent = &client->dev; 1171 - trig->ops = &kxcjk1013_trigger_ops; 1172 - iio_trigger_set_drvdata(trig, indio_dev); 1173 - data->trig = trig; 1174 - indio_dev->trig = trig; 792 + data->dready_trig->dev.parent = &client->dev; 793 + data->dready_trig->ops = &kxcjk1013_trigger_ops; 794 + iio_trigger_set_drvdata(data->dready_trig, indio_dev); 795 + indio_dev->trig = data->dready_trig; 1175 796 iio_trigger_get(indio_dev->trig); 1176 - 1177 - ret = iio_trigger_register(trig); 797 + ret = iio_trigger_register(data->dready_trig); 1178 798 if (ret) 1179 - goto err_trigger_free; 799 + return ret; 800 + 801 + data->motion_trig->dev.parent = &client->dev; 802 + data->motion_trig->ops = &kxcjk1013_trigger_ops; 803 + iio_trigger_set_drvdata(data->motion_trig, indio_dev); 804 + ret = iio_trigger_register(data->motion_trig); 805 + if (ret) { 806 + data->motion_trig = NULL; 807 + goto err_trigger_unregister; 808 + } 1180 809 1181 810 ret = iio_triggered_buffer_setup(indio_dev, 1182 811 &iio_pollfunc_store_time, ··· 1222 825 err_iio_unregister: 1223 826 iio_device_unregister(indio_dev); 1224 827 err_buffer_cleanup: 1225 - if (data->trig_mode) 828 + if (data->dready_trig) 1226 829 iio_triggered_buffer_cleanup(indio_dev); 1227 830 err_trigger_unregister: 1228 - if (data->trig_mode) 1229 - iio_trigger_unregister(trig); 1230 - err_trigger_free: 1231 - if (data->trig_mode) 1232 - iio_trigger_free(trig); 831 + if (data->dready_trig) 832 + iio_trigger_unregister(data->dready_trig); 833 + if (data->motion_trig) 834 + iio_trigger_unregister(data->motion_trig); 1233 835 1234 836 return ret; 1235 837 } ··· 1244 848 1245 849 iio_device_unregister(indio_dev); 1246 850 1247 - if (data->trig_mode) { 851 + if (data->dready_trig) { 1248 852 iio_triggered_buffer_cleanup(indio_dev); 1249 - iio_trigger_unregister(data->trig); 1250 - iio_trigger_free(data->trig); 853 + iio_trigger_unregister(data->dready_trig); 854 + iio_trigger_unregister(data->motion_trig); 1251 855 } 1252 856 1253 857 mutex_lock(&data->mutex); ··· 1279 883 1280 884 mutex_lock(&data->mutex); 1281 885 /* Check, if the suspend occured while active */ 1282 - if (data->trigger_on) 886 + if (data->dready_trigger_on || data->motion_trigger_on || 887 + data->ev_enable_state) 1283 888 ret = kxcjk1013_set_mode(data, OPERATION); 1284 889 mutex_unlock(&data->mutex); 1285 890