diff mbox series

[V1,4/5] iio: accel: bmi088: Make it possible to config scales.

Message ID 20220509134629.440965-5-Qing-wu.Li@leica-geosystems.com.cn (mailing list archive)
State Superseded
Headers show
Series iio: accel: bmi088: support BMI085 BMI090L | expand

Commit Message

LI Qingwu May 9, 2022, 1:46 p.m. UTC
All the sensors can set the scales by writing the range register 0x41,
The current driver has no interface to configure it.
The commit adds the interface for config the scales.

Signed-off-by: LI Qingwu <Qing-wu.Li@leica-geosystems.com.cn>
---
 drivers/iio/accel/bmi088-accel-core.c | 32 +++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

Comments

kernel test robot May 9, 2022, 5:24 p.m. UTC | #1
Hi LI,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on jic23-iio/togreg]
[also build test WARNING on v5.18-rc6 next-20220509]
[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/intel-lab-lkp/linux/commits/LI-Qingwu/iio-accel-bmi088-support-BMI085-BMI090L/20220509-215750
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg
config: i386-randconfig-r013-20220509 (https://download.01.org/0day-ci/archive/20220510/202205100100.6k4OJbjS-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.2.0-20) 11.2.0
reproduce (this is a W=1 build):
        # https://github.com/intel-lab-lkp/linux/commit/70883e96ff4d7433fa8974815aba932f8bb2e8e7
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review LI-Qingwu/iio-accel-bmi088-support-BMI085-BMI090L/20220509-215750
        git checkout 70883e96ff4d7433fa8974815aba932f8bb2e8e7
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/iio/accel/

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

All warnings (new ones prefixed by >>):

   drivers/iio/accel/bmi088-accel-core.c: In function 'bmi088_accel_set_scale':
>> drivers/iio/accel/bmi088-accel-core.c:244:13: warning: unused variable 'reg' [-Wunused-variable]
     244 |         int reg;
         |             ^~~
>> drivers/iio/accel/bmi088-accel-core.c:243:13: warning: unused variable 'ret' [-Wunused-variable]
     243 |         int ret;
         |             ^~~


vim +/reg +244 drivers/iio/accel/bmi088-accel-core.c

   239	
   240	static int bmi088_accel_set_scale(struct bmi088_accel_data *data, int val, int val2)
   241	{
   242		unsigned int i;
 > 243		int ret;
 > 244		int reg;
   245	
   246		for (i = 0; i < 4; i++)
   247			if (val == data->chip_info->scale_table[i][0] &&
   248			    val2 == data->chip_info->scale_table[i][1])
   249				break;
   250	
   251		if (i >= 4)
   252			return -EINVAL;
   253	
   254		return regmap_write(data->regmap, BMI088_ACCEL_REG_ACC_RANGE, i);
   255	}
   256
kernel test robot May 9, 2022, 6:50 p.m. UTC | #2
Hi LI,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on jic23-iio/togreg]
[also build test WARNING on v5.18-rc6 next-20220509]
[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/intel-lab-lkp/linux/commits/LI-Qingwu/iio-accel-bmi088-support-BMI085-BMI090L/20220509-215750
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg
config: x86_64-randconfig-a003-20220509 (https://download.01.org/0day-ci/archive/20220510/202205100238.ZzT44bv1-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project a385645b470e2d3a1534aae618ea56b31177639f)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/70883e96ff4d7433fa8974815aba932f8bb2e8e7
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review LI-Qingwu/iio-accel-bmi088-support-BMI085-BMI090L/20220509-215750
        git checkout 70883e96ff4d7433fa8974815aba932f8bb2e8e7
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/iio/accel/

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

All warnings (new ones prefixed by >>):

>> drivers/iio/accel/bmi088-accel-core.c:243:6: warning: unused variable 'ret' [-Wunused-variable]
           int ret;
               ^
>> drivers/iio/accel/bmi088-accel-core.c:244:6: warning: unused variable 'reg' [-Wunused-variable]
           int reg;
               ^
   2 warnings generated.


vim +/ret +243 drivers/iio/accel/bmi088-accel-core.c

   239	
   240	static int bmi088_accel_set_scale(struct bmi088_accel_data *data, int val, int val2)
   241	{
   242		unsigned int i;
 > 243		int ret;
 > 244		int reg;
   245	
   246		for (i = 0; i < 4; i++)
   247			if (val == data->chip_info->scale_table[i][0] &&
   248			    val2 == data->chip_info->scale_table[i][1])
   249				break;
   250	
   251		if (i >= 4)
   252			return -EINVAL;
   253	
   254		return regmap_write(data->regmap, BMI088_ACCEL_REG_ACC_RANGE, i);
   255	}
   256
Alexandru Ardelean May 10, 2022, 7:01 a.m. UTC | #3
On Mon, May 9, 2022 at 4:46 PM LI Qingwu
<Qing-wu.Li@leica-geosystems.com.cn> wrote:
>
> All the sensors can set the scales by writing the range register 0x41,
> The current driver has no interface to configure it.
> The commit adds the interface for config the scales.

With the warnings fixed:


Reviewed-by: Alexandru Ardelean <ardeleanalex@gmail.com>


>
> Signed-off-by: LI Qingwu <Qing-wu.Li@leica-geosystems.com.cn>
> ---
>  drivers/iio/accel/bmi088-accel-core.c | 32 +++++++++++++++++++++++++++
>  1 file changed, 32 insertions(+)
>
> diff --git a/drivers/iio/accel/bmi088-accel-core.c b/drivers/iio/accel/bmi088-accel-core.c
> index 44cbe098c093..7c78cfb321ee 100644
> --- a/drivers/iio/accel/bmi088-accel-core.c
> +++ b/drivers/iio/accel/bmi088-accel-core.c
> @@ -237,6 +237,23 @@ static int bmi088_accel_set_sample_freq(struct bmi088_accel_data *data, int val)
>                                   BMI088_ACCEL_MODE_ODR_MASK, regval);
>  }
>
> +static int bmi088_accel_set_scale(struct bmi088_accel_data *data, int val, int val2)
> +{
> +       unsigned int i;
> +       int ret;
> +       int reg;
> +
> +       for (i = 0; i < 4; i++)
> +               if (val == data->chip_info->scale_table[i][0] &&
> +                   val2 == data->chip_info->scale_table[i][1])
> +                       break;
> +
> +       if (i >= 4)
> +               return -EINVAL;
> +
> +       return regmap_write(data->regmap, BMI088_ACCEL_REG_ACC_RANGE, i);
> +}
> +
>  static int bmi088_accel_get_temp(struct bmi088_accel_data *data, int *val)
>  {
>         int ret;
> @@ -368,7 +385,13 @@ static int bmi088_accel_read_avail(struct iio_dev *indio_dev,
>                              const int **vals, int *type, int *length,
>                              long mask)
>  {
> +       struct bmi088_accel_data *data = iio_priv(indio_dev);
>         switch (mask) {
> +       case IIO_CHAN_INFO_SCALE:
> +               *vals = (const int *)data->chip_info->scale_table;
> +               *length = 8;
> +               *type = IIO_VAL_INT_PLUS_MICRO;
> +               return IIO_AVAIL_LIST;
>         case IIO_CHAN_INFO_SAMP_FREQ:
>                 *type = IIO_VAL_INT_PLUS_MICRO;
>                 *vals = bmi088_sample_freqs;
> @@ -388,6 +411,14 @@ static int bmi088_accel_write_raw(struct iio_dev *indio_dev,
>         int ret;
>
>         switch (mask) {
> +       case IIO_CHAN_INFO_SCALE:
> +               ret = pm_runtime_resume_and_get(dev);
> +               if (ret)
> +                       return ret;
> +               ret = bmi088_accel_set_scale(data, val, val2);
> +               pm_runtime_mark_last_busy(dev);
> +               pm_runtime_put_autosuspend(dev);
> +               return ret;
>         case IIO_CHAN_INFO_SAMP_FREQ:
>                 ret = pm_runtime_resume_and_get(dev);
>                 if (ret)
> @@ -410,6 +441,7 @@ static int bmi088_accel_write_raw(struct iio_dev *indio_dev,
>         .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
>                                 BIT(IIO_CHAN_INFO_SAMP_FREQ), \
>         .info_mask_shared_by_type_available = BIT(IIO_CHAN_INFO_SAMP_FREQ), \
> +                               BIT(IIO_CHAN_INFO_SCALE ), \
>         .scan_index = AXIS_##_axis, \
>  }
>
> --
> 2.25.1
>
diff mbox series

Patch

diff --git a/drivers/iio/accel/bmi088-accel-core.c b/drivers/iio/accel/bmi088-accel-core.c
index 44cbe098c093..7c78cfb321ee 100644
--- a/drivers/iio/accel/bmi088-accel-core.c
+++ b/drivers/iio/accel/bmi088-accel-core.c
@@ -237,6 +237,23 @@  static int bmi088_accel_set_sample_freq(struct bmi088_accel_data *data, int val)
 				  BMI088_ACCEL_MODE_ODR_MASK, regval);
 }
 
+static int bmi088_accel_set_scale(struct bmi088_accel_data *data, int val, int val2)
+{
+	unsigned int i;
+	int ret;
+	int reg;
+
+	for (i = 0; i < 4; i++)
+		if (val == data->chip_info->scale_table[i][0] &&
+		    val2 == data->chip_info->scale_table[i][1])
+			break;
+
+	if (i >= 4)
+		return -EINVAL;
+
+	return regmap_write(data->regmap, BMI088_ACCEL_REG_ACC_RANGE, i);
+}
+
 static int bmi088_accel_get_temp(struct bmi088_accel_data *data, int *val)
 {
 	int ret;
@@ -368,7 +385,13 @@  static int bmi088_accel_read_avail(struct iio_dev *indio_dev,
 			     const int **vals, int *type, int *length,
 			     long mask)
 {
+	struct bmi088_accel_data *data = iio_priv(indio_dev);
 	switch (mask) {
+	case IIO_CHAN_INFO_SCALE:
+		*vals = (const int *)data->chip_info->scale_table;
+		*length = 8;
+		*type = IIO_VAL_INT_PLUS_MICRO;
+		return IIO_AVAIL_LIST;
 	case IIO_CHAN_INFO_SAMP_FREQ:
 		*type = IIO_VAL_INT_PLUS_MICRO;
 		*vals = bmi088_sample_freqs;
@@ -388,6 +411,14 @@  static int bmi088_accel_write_raw(struct iio_dev *indio_dev,
 	int ret;
 
 	switch (mask) {
+	case IIO_CHAN_INFO_SCALE:
+		ret = pm_runtime_resume_and_get(dev);
+		if (ret)
+			return ret;
+		ret = bmi088_accel_set_scale(data, val, val2);
+		pm_runtime_mark_last_busy(dev);
+		pm_runtime_put_autosuspend(dev);
+		return ret;
 	case IIO_CHAN_INFO_SAMP_FREQ:
 		ret = pm_runtime_resume_and_get(dev);
 		if (ret)
@@ -410,6 +441,7 @@  static int bmi088_accel_write_raw(struct iio_dev *indio_dev,
 	.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
 				BIT(IIO_CHAN_INFO_SAMP_FREQ), \
 	.info_mask_shared_by_type_available = BIT(IIO_CHAN_INFO_SAMP_FREQ), \
+				BIT(IIO_CHAN_INFO_SCALE ), \
 	.scan_index = AXIS_##_axis, \
 }