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

Configure Feed

Select the types of activity you want to include in your feed.

iio: accel: kxcjk-1013: Deduplicate setup interrupt functions

The contents of kxcjk1013_setup_any_motion_interrupt and
kxcj1013_setup_new_data_interrupt are very similar. Deduplicate these
functions by introducing a generic function named
kxcjk1013_setup_interrupt that has an additional flag indicating if
it's a new data interrupt.

Signed-off-by: Gustavo Vaz <gustavo.vaz@usp.br>
Co-developed-by: Francisco Henriques <franciscolealhenriques@usp.br>
Signed-off-by: Francisco Henriques <franciscolealhenriques@usp.br>
Link: https://patch.msgid.link/20250423204631.16460-1-gustavo.vaz@usp.br
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Gustavo Vaz and committed by
Jonathan Cameron
7ba42511 e50cf7e2

+17 -70
+17 -70
drivers/iio/accel/kxcjk-1013.c
··· 674 674 return 0; 675 675 } 676 676 677 - static int kxcjk1013_setup_any_motion_interrupt(struct kxcjk1013_data *data, 678 - bool status) 677 + static int kxcjk1013_setup_interrupt(struct kxcjk1013_data *data, 678 + bool status, bool is_new_data) 679 679 { 680 680 const struct kx_chipset_regs *regs = data->info->regs; 681 681 int ret; ··· 690 690 if (ret < 0) 691 691 return ret; 692 692 693 - ret = kxcjk1013_chip_update_thresholds(data); 694 - if (ret < 0) 695 - return ret; 696 - 697 - ret = i2c_smbus_read_byte_data(data->client, regs->int_ctrl1); 698 - if (ret < 0) { 699 - dev_err(&data->client->dev, "Error reading reg_int_ctrl1\n"); 700 - return ret; 701 - } 702 - 703 - if (status) 704 - ret |= KXCJK1013_REG_INT_CTRL1_BIT_IEN; 705 - else 706 - ret &= ~KXCJK1013_REG_INT_CTRL1_BIT_IEN; 707 - 708 - ret = i2c_smbus_write_byte_data(data->client, regs->int_ctrl1, ret); 709 - if (ret < 0) { 710 - dev_err(&data->client->dev, "Error writing reg_int_ctrl1\n"); 711 - return ret; 712 - } 713 - 714 - ret = i2c_smbus_read_byte_data(data->client, regs->ctrl1); 715 - if (ret < 0) { 716 - dev_err(&data->client->dev, "Error reading reg_ctrl1\n"); 717 - return ret; 718 - } 719 - 720 - if (status) 721 - ret |= KXCJK1013_REG_CTRL1_BIT_WUFE; 722 - else 723 - ret &= ~KXCJK1013_REG_CTRL1_BIT_WUFE; 724 - 725 - ret = i2c_smbus_write_byte_data(data->client, regs->ctrl1, ret); 726 - if (ret < 0) { 727 - dev_err(&data->client->dev, "Error writing reg_ctrl1\n"); 728 - return ret; 729 - } 730 - 731 - if (store_mode == OPERATION) { 732 - ret = kxcjk1013_set_mode(data, OPERATION); 693 + if (is_new_data == true) { 694 + ret = kxcjk1013_chip_update_thresholds(data); 733 695 if (ret < 0) 734 696 return ret; 735 697 } 736 698 737 - return 0; 738 - } 739 - 740 - static int kxcjk1013_setup_new_data_interrupt(struct kxcjk1013_data *data, 741 - bool status) 742 - { 743 - const struct kx_chipset_regs *regs = data->info->regs; 744 - int ret; 745 - enum kxcjk1013_mode store_mode; 746 - 747 - ret = kxcjk1013_get_mode(data, &store_mode); 748 - if (ret < 0) 749 - return ret; 750 - 751 - /* This is requirement by spec to change state to STANDBY */ 752 - ret = kxcjk1013_set_mode(data, STANDBY); 753 - if (ret < 0) 754 - return ret; 755 - 756 699 ret = i2c_smbus_read_byte_data(data->client, regs->int_ctrl1); 757 700 if (ret < 0) { 758 701 dev_err(&data->client->dev, "Error reading reg_int_ctrl1\n"); ··· 719 776 return ret; 720 777 } 721 778 722 - if (status) 723 - ret |= KXCJK1013_REG_CTRL1_BIT_DRDY; 724 - else 725 - ret &= ~KXCJK1013_REG_CTRL1_BIT_DRDY; 779 + if (is_new_data) { 780 + if (status) 781 + ret |= KXCJK1013_REG_CTRL1_BIT_DRDY; 782 + else 783 + ret &= ~KXCJK1013_REG_CTRL1_BIT_DRDY; 784 + } else { 785 + if (status) 786 + ret |= KXCJK1013_REG_CTRL1_BIT_WUFE; 787 + else 788 + ret &= ~KXCJK1013_REG_CTRL1_BIT_WUFE; 789 + } 726 790 727 791 ret = i2c_smbus_write_byte_data(data->client, regs->ctrl1, ret); 728 792 if (ret < 0) { ··· 1062 1112 return ret; 1063 1113 } 1064 1114 1065 - ret = kxcjk1013_setup_any_motion_interrupt(data, state); 1115 + ret = kxcjk1013_setup_interrupt(data, state, false); 1066 1116 if (ret < 0) { 1067 1117 kxcjk1013_set_power_state(data, false); 1068 1118 data->ev_enable_state = 0; ··· 1243 1293 mutex_unlock(&data->mutex); 1244 1294 return ret; 1245 1295 } 1246 - if (data->motion_trig == trig) 1247 - ret = kxcjk1013_setup_any_motion_interrupt(data, state); 1248 - else 1249 - ret = kxcjk1013_setup_new_data_interrupt(data, state); 1296 + ret = kxcjk1013_setup_interrupt(data, state, data->motion_trig != trig); 1250 1297 if (ret < 0) { 1251 1298 kxcjk1013_set_power_state(data, false); 1252 1299 mutex_unlock(&data->mutex);