Re: [PATCH v4 2/2] iio: accel: Add driver support for ADXL355

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Puranjay,

I love your patch! Perhaps something to improve:

[auto build test WARNING on iio/togreg]
[also build test WARNING on linus/master v5.14-rc3 next-20210726]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Puranjay-Mohan/iio-accel-add-support-for-ADXL355/20210727-131822
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg
config: openrisc-randconfig-s031-20210727 (attached as .config)
compiler: or1k-linux-gcc (GCC) 10.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.3-341-g8af24329-dirty
        # https://github.com/0day-ci/linux/commit/a0ad8ce87d3d3357c64f98bec48b75d07b961da8
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Puranjay-Mohan/iio-accel-add-support-for-ADXL355/20210727-131822
        git checkout a0ad8ce87d3d3357c64f98bec48b75d07b961da8
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-10.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=openrisc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>


sparse warnings: (new ones prefixed by >>)
>> drivers/iio/accel/adxl355_core.c:204:16: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __be32 [usertype] regval @@     got int @@
   drivers/iio/accel/adxl355_core.c:204:16: sparse:     expected restricted __be32 [usertype] regval
   drivers/iio/accel/adxl355_core.c:204:16: sparse:     got int
>> drivers/iio/accel/adxl355_core.c:341:29: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __be16 [usertype] out @@     got int @@
   drivers/iio/accel/adxl355_core.c:341:29: sparse:     expected restricted __be16 [usertype] out
   drivers/iio/accel/adxl355_core.c:341:29: sparse:     got int

vim +204 drivers/iio/accel/adxl355_core.c

   195	
   196	static int adxl355_read_axis(struct adxl355_data *data, u8 addr)
   197	{
   198		__be32 regval;
   199		int ret;
   200	
   201		ret = regmap_bulk_read(data->regmap, addr, data->transf_buf, 3);
   202		if (ret < 0)
   203			return ret;
 > 204		regval = data->transf_buf[0] + (data->transf_buf[1] << 8)
   205					     + (data->transf_buf[2] << 16);
   206	
   207		return be32_to_cpu(regval) >> 8;
   208	}
   209	
   210	static int adxl355_find_match(const int (*freq_tbl)[2], const int n,
   211				      const int val, const int val2)
   212	{
   213		int i;
   214	
   215		for (i = 0; i < n; i++) {
   216			if (freq_tbl[i][0] == val && freq_tbl[i][1] == val2)
   217				return i;
   218		}
   219	
   220		return -EINVAL;
   221	}
   222	
   223	static int adxl355_set_odr(struct adxl355_data *data,
   224				   enum adxl355_odr odr)
   225	{
   226		int ret = 0;
   227	
   228		mutex_lock(&data->lock);
   229	
   230		if (data->odr == odr)
   231			goto out_unlock;
   232	
   233		ret = adxl355_set_op_mode(data, ADXL355_STANDBY);
   234		if (ret < 0)
   235			goto out_unlock;
   236	
   237		ret = regmap_update_bits(data->regmap, ADXL355_FILTER,
   238					 ADXL355_FILTER_ODR_MSK,
   239					 FIELD_PREP(ADXL355_FILTER_ODR_MSK, odr));
   240		if (ret < 0)
   241			goto out_unlock;
   242	
   243		data->odr = odr;
   244		adxl355_fill_3db_frequency_table(data);
   245	
   246	out_unlock:
   247		ret = adxl355_set_op_mode(data, ADXL355_MEASUREMENT);
   248		mutex_unlock(&data->lock);
   249		return ret;
   250	}
   251	
   252	static int adxl355_set_hpf_3db(struct adxl355_data *data,
   253				       enum adxl355_hpf_3db hpf)
   254	{
   255		int ret = 0;
   256	
   257		mutex_lock(&data->lock);
   258	
   259		if (data->hpf_3db == hpf)
   260			goto out_unlock;
   261	
   262		ret = adxl355_set_op_mode(data, ADXL355_STANDBY);
   263		if (ret < 0)
   264			goto out_unlock;
   265	
   266		ret = regmap_update_bits(data->regmap, ADXL355_FILTER,
   267					 ADXL355_FILTER_HPF_MSK,
   268					 FIELD_PREP(ADXL355_FILTER_HPF_MSK, hpf));
   269		if (!ret)
   270			data->hpf_3db = hpf;
   271	
   272	out_unlock:
   273		ret = adxl355_set_op_mode(data, ADXL355_MEASUREMENT);
   274		mutex_unlock(&data->lock);
   275		return ret;
   276	}
   277	
   278	static int adxl355_set_calibbias(struct adxl355_data *data,
   279					 int channel2, int calibbias)
   280	{
   281		int ret = 0;
   282	
   283		data->transf_buf[0] = (calibbias >> 8) & 0xFF;
   284		data->transf_buf[1] = calibbias & 0xFF;
   285		data->transf_buf[2] = 0;
   286	
   287		mutex_lock(&data->lock);
   288	
   289		ret = adxl355_set_op_mode(data, ADXL355_STANDBY);
   290		if (ret < 0)
   291			goto out_unlock;
   292	
   293		switch (channel2) {
   294		case IIO_MOD_X:
   295			ret = regmap_bulk_write(data->regmap, ADXL355_OFFSET_X_H,
   296						data->transf_buf, 2);
   297			if (ret < 0)
   298				goto out_unlock;
   299			data->x_calibbias = calibbias;
   300			break;
   301		case IIO_MOD_Y:
   302			ret = regmap_bulk_write(data->regmap, ADXL355_OFFSET_Y_H,
   303						data->transf_buf, 2);
   304			if (ret < 0)
   305				goto out_unlock;
   306			data->y_calibbias = calibbias;
   307			break;
   308		case IIO_MOD_Z:
   309			ret = regmap_bulk_write(data->regmap, ADXL355_OFFSET_Z_H,
   310						data->transf_buf, 2);
   311			if (ret < 0)
   312				goto out_unlock;
   313			data->z_calibbias = calibbias;
   314			break;
   315		default:
   316			ret = -EINVAL;
   317			break;
   318		}
   319	
   320	out_unlock:
   321		ret = adxl355_set_op_mode(data, ADXL355_MEASUREMENT);
   322		mutex_unlock(&data->lock);
   323		return ret;
   324	}
   325	
   326	static int adxl355_read_raw(struct iio_dev *indio_dev,
   327				    struct iio_chan_spec const *chan,
   328				    int *val, int *val2, long mask)
   329	{
   330		struct adxl355_data *data = iio_priv(indio_dev);
   331		int ret;
   332		__be16 out;
   333	
   334		switch (mask) {
   335		case IIO_CHAN_INFO_RAW:
   336			switch (chan->type) {
   337			case IIO_TEMP:
   338				ret = adxl355_get_temp_data(data, chan->address);
   339				if (ret < 0)
   340					return ret;
 > 341				out = (data->transf_buf[1] << 8) + data->transf_buf[0];
   342				*val = be16_to_cpu(out);
   343	
   344				return IIO_VAL_INT;
   345			case IIO_ACCEL:
   346				ret = adxl355_read_axis(data, chan->address);
   347				if (ret < 0)
   348					return ret;
   349				*val = sign_extend32(ret >> (chan->scan_type.shift),
   350						     chan->scan_type.realbits - 1);
   351				return IIO_VAL_INT;
   352			default:
   353				return -EINVAL;
   354			}
   355	
   356		case IIO_CHAN_INFO_SCALE:
   357			switch (chan->type) {
   358			case IIO_TEMP:
   359				*val = TEMP_SCALE_VAL;
   360				*val2 = TEMP_SCALE_VAL2;
   361				return IIO_VAL_INT_PLUS_MICRO;
   362			case IIO_ACCEL:
   363				*val = 0;
   364				*val2 = ADXL355_NSCALE;
   365				return IIO_VAL_INT_PLUS_NANO;
   366			default:
   367				return -EINVAL;
   368			}
   369		case IIO_CHAN_INFO_OFFSET:
   370			*val = TEMP_OFFSET_VAL;
   371			*val2 = TEMP_OFFSET_VAL2;
   372			return IIO_VAL_INT_PLUS_MICRO;
   373		case IIO_CHAN_INFO_CALIBBIAS:
   374			if (chan->channel2 == IIO_MOD_X)
   375				*val = data->x_calibbias;
   376			else if (chan->channel2 == IIO_MOD_Y)
   377				*val = data->y_calibbias;
   378			else
   379				*val = data->z_calibbias;
   380			*val = sign_extend32(*val, 15);
   381			return IIO_VAL_INT;
   382		case IIO_CHAN_INFO_SAMP_FREQ:
   383			*val = adxl355_odr_table[data->odr][0];
   384			*val2 = adxl355_odr_table[data->odr][1];
   385			return IIO_VAL_INT_PLUS_MICRO;
   386		case IIO_CHAN_INFO_HIGH_PASS_FILTER_3DB_FREQUENCY:
   387			*val = data->adxl355_hpf_3db_table[data->hpf_3db][0];
   388			*val2 = data->adxl355_hpf_3db_table[data->hpf_3db][1];
   389			return IIO_VAL_INT_PLUS_MICRO;
   390		default:
   391			return -EINVAL;
   392		}
   393	}
   394	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux