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: light: ltr501: Factor out core of write_raw() where direct mode claim is held.

Factoring this code out allows for direct returns on error simplifying code
flow.

Reviewed-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20250309170633.1347476-8-jic23@kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

+46 -48
+46 -48
drivers/iio/light/ltr501.c
··· 763 763 return -1; 764 764 } 765 765 766 - static int ltr501_write_raw(struct iio_dev *indio_dev, 767 - struct iio_chan_spec const *chan, 768 - int val, int val2, long mask) 766 + static int __ltr501_write_raw(struct iio_dev *indio_dev, 767 + struct iio_chan_spec const *chan, 768 + int val, int val2, long mask) 769 769 { 770 770 struct ltr501_data *data = iio_priv(indio_dev); 771 771 int i, ret, freq_val, freq_val2; 772 772 const struct ltr501_chip_info *info = data->chip_info; 773 - 774 - ret = iio_device_claim_direct_mode(indio_dev); 775 - if (ret) 776 - return ret; 777 773 778 774 switch (mask) { 779 775 case IIO_CHAN_INFO_SCALE: ··· 778 782 i = ltr501_get_gain_index(info->als_gain, 779 783 info->als_gain_tbl_size, 780 784 val, val2); 781 - if (i < 0) { 782 - ret = -EINVAL; 783 - break; 784 - } 785 + if (i < 0) 786 + return -EINVAL; 785 787 786 788 data->als_contr &= ~info->als_gain_mask; 787 789 data->als_contr |= i << info->als_gain_shift; 788 790 789 - ret = regmap_write(data->regmap, LTR501_ALS_CONTR, 790 - data->als_contr); 791 - break; 791 + return regmap_write(data->regmap, LTR501_ALS_CONTR, 792 + data->als_contr); 792 793 case IIO_PROXIMITY: 793 794 i = ltr501_get_gain_index(info->ps_gain, 794 795 info->ps_gain_tbl_size, 795 796 val, val2); 796 - if (i < 0) { 797 - ret = -EINVAL; 798 - break; 799 - } 797 + if (i < 0) 798 + return -EINVAL; 799 + 800 800 data->ps_contr &= ~LTR501_CONTR_PS_GAIN_MASK; 801 801 data->ps_contr |= i << LTR501_CONTR_PS_GAIN_SHIFT; 802 802 803 - ret = regmap_write(data->regmap, LTR501_PS_CONTR, 804 - data->ps_contr); 805 - break; 803 + return regmap_write(data->regmap, LTR501_PS_CONTR, 804 + data->ps_contr); 806 805 default: 807 - ret = -EINVAL; 808 - break; 806 + return -EINVAL; 809 807 } 810 - break; 811 808 812 809 case IIO_CHAN_INFO_INT_TIME: 813 810 switch (chan->type) { 814 811 case IIO_INTENSITY: 815 - if (val != 0) { 816 - ret = -EINVAL; 817 - break; 818 - } 812 + if (val != 0) 813 + return -EINVAL; 814 + 819 815 mutex_lock(&data->lock_als); 820 816 ret = ltr501_set_it_time(data, val2); 821 817 mutex_unlock(&data->lock_als); 822 - break; 818 + return ret; 823 819 default: 824 - ret = -EINVAL; 825 - break; 820 + return -EINVAL; 826 821 } 827 - break; 828 822 829 823 case IIO_CHAN_INFO_SAMP_FREQ: 830 824 switch (chan->type) { ··· 822 836 ret = ltr501_als_read_samp_freq(data, &freq_val, 823 837 &freq_val2); 824 838 if (ret < 0) 825 - break; 839 + return ret; 826 840 827 841 ret = ltr501_als_write_samp_freq(data, val, val2); 828 842 if (ret < 0) 829 - break; 843 + return ret; 830 844 831 845 /* update persistence count when changing frequency */ 832 846 ret = ltr501_write_intr_prst(data, chan->type, 833 847 0, data->als_period); 834 848 835 849 if (ret < 0) 836 - ret = ltr501_als_write_samp_freq(data, freq_val, 837 - freq_val2); 838 - break; 850 + /* Do not ovewrite error */ 851 + ltr501_als_write_samp_freq(data, freq_val, 852 + freq_val2); 853 + return ret; 839 854 case IIO_PROXIMITY: 840 855 ret = ltr501_ps_read_samp_freq(data, &freq_val, 841 856 &freq_val2); 842 857 if (ret < 0) 843 - break; 858 + return ret; 844 859 845 860 ret = ltr501_ps_write_samp_freq(data, val, val2); 846 861 if (ret < 0) 847 - break; 862 + return ret; 848 863 849 864 /* update persistence count when changing frequency */ 850 865 ret = ltr501_write_intr_prst(data, chan->type, 851 866 0, data->ps_period); 852 867 853 868 if (ret < 0) 854 - ret = ltr501_ps_write_samp_freq(data, freq_val, 855 - freq_val2); 856 - break; 869 + /* Do not overwrite error */ 870 + ltr501_ps_write_samp_freq(data, freq_val, 871 + freq_val2); 872 + return ret; 857 873 default: 858 - ret = -EINVAL; 859 - break; 874 + return -EINVAL; 860 875 } 861 - break; 862 - 863 876 default: 864 - ret = -EINVAL; 865 - break; 877 + return -EINVAL; 866 878 } 879 + } 880 + 881 + static int ltr501_write_raw(struct iio_dev *indio_dev, 882 + struct iio_chan_spec const *chan, 883 + int val, int val2, long mask) 884 + { 885 + int ret; 886 + 887 + ret = iio_device_claim_direct_mode(indio_dev); 888 + if (ret) 889 + return ret; 890 + 891 + ret = __ltr501_write_raw(indio_dev, chan, val, val2, mask); 867 892 868 893 iio_device_release_direct_mode(indio_dev); 894 + 869 895 return ret; 870 896 } 871 897