linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@01.org, Song Qiang <songqiang1304521@gmail.com>
Cc: kbuild-all@01.org, jic23@kernel.org, knaack.h@gmx.de,
	lars@metafoo.de, pmeerw@pmeerw.net, robh+dt@kernel.org,
	mark.rutland@arm.com, linux-iio@vger.kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	Song Qiang <songqiang1304521@gmail.com>
Subject: Re: [PATCH] iio: magnetometer: Add support for PNI RM3100 9-axis magnetometer
Date: Sun, 23 Sep 2018 14:01:15 +0300	[thread overview]
Message-ID: <20180923110115.vjnmfssmeq3i37pf@mwanda> (raw)
In-Reply-To: <20180920131340.6699-1-songqiang1304521@gmail.com>

Hi Song,

I love your patch! Perhaps something to improve:

url:    https://github.com/0day-ci/linux/commits/Song-Qiang/iio-magnetometer-Add-support-for-PNI-RM3100-9-axis-magnetometer/20180920-215124
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg

smatch warnings:
drivers/iio/magnetometer/rm3100-core.c:235 rm3100_set_samp_freq() warn: inconsistent returns 'mutex:&data->lock'.
  Locked on:   line 206
  Unlocked on: line 194
drivers/iio/magnetometer/rm3100-core.c:319 rm3100_trigger_handler() warn: inconsistent returns 'mutex:&data->lock'.
  Locked on:   line 310
  Unlocked on: line 319

# https://github.com/0day-ci/linux/commit/0345472c15bab336397b25a25eb76a9f8586faf0
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout 0345472c15bab336397b25a25eb76a9f8586faf0
vim +235 drivers/iio/magnetometer/rm3100-core.c

0345472c Song Qiang 2018-09-20  183  
0345472c Song Qiang 2018-09-20  184  static int rm3100_set_samp_freq(struct rm3100_data *data, int val, int val2)
0345472c Song Qiang 2018-09-20  185  {
0345472c Song Qiang 2018-09-20  186  	struct regmap *regmap = data->regmap;
0345472c Song Qiang 2018-09-20  187  	int cycle_count;
0345472c Song Qiang 2018-09-20  188  	int ret;
0345472c Song Qiang 2018-09-20  189  	int i;
0345472c Song Qiang 2018-09-20  190  
0345472c Song Qiang 2018-09-20  191  	/* All cycle count registers use the same value. */
0345472c Song Qiang 2018-09-20  192  	ret = regmap_read(regmap, RM_REG_CCXL, &cycle_count);
0345472c Song Qiang 2018-09-20  193  	if (cycle_count < 0)
0345472c Song Qiang 2018-09-20  194  		return cycle_count;
0345472c Song Qiang 2018-09-20  195  
0345472c Song Qiang 2018-09-20  196  	for (i = 0; i < RM_SAMP_NUM; i++) {
0345472c Song Qiang 2018-09-20  197  		if (val == rm3100_samp_rates[i][0] &&
0345472c Song Qiang 2018-09-20  198  			val2 == rm3100_samp_rates[i][1])
0345472c Song Qiang 2018-09-20  199  			break;
0345472c Song Qiang 2018-09-20  200  	}
0345472c Song Qiang 2018-09-20  201  
0345472c Song Qiang 2018-09-20  202  	if (i != RM_SAMP_NUM) {
0345472c Song Qiang 2018-09-20  203  		mutex_lock(&data->lock);
                                                ^^^^^^^^^^^^^^^^^^^^^^^
0345472c Song Qiang 2018-09-20  204  		ret = regmap_write(regmap, RM_REG_TMRC, i + RM_TMRC_OFFSET);
0345472c Song Qiang 2018-09-20  205  		if (ret < 0)
0345472c Song Qiang 2018-09-20  206  			return ret;
                                                        ^^^^^^^^^^
goto unlock;  there are a bunch of these.

0345472c Song Qiang 2018-09-20  207  
0345472c Song Qiang 2018-09-20  208  		/* Checking if cycle count registers need changing. */
0345472c Song Qiang 2018-09-20  209  		if (val == 600 && cycle_count == 200) {
0345472c Song Qiang 2018-09-20  210  			for (i = 0; i < 3; i++) {
0345472c Song Qiang 2018-09-20  211  				regmap_write(regmap, RM_REG_CCXL + 2 * i, 100);
0345472c Song Qiang 2018-09-20  212  				if (ret < 0)
0345472c Song Qiang 2018-09-20  213  					return ret;
0345472c Song Qiang 2018-09-20  214  			}
0345472c Song Qiang 2018-09-20  215  		} else if (val != 600 && cycle_count == 100) {
0345472c Song Qiang 2018-09-20  216  			for (i = 0; i < 3; i++) {
0345472c Song Qiang 2018-09-20  217  				regmap_write(regmap, RM_REG_CCXL + 2 * i, 200);
0345472c Song Qiang 2018-09-20  218  				if (ret < 0)
0345472c Song Qiang 2018-09-20  219  					return ret;
0345472c Song Qiang 2018-09-20  220  			}
0345472c Song Qiang 2018-09-20  221  		}
0345472c Song Qiang 2018-09-20  222  		/* Writing TMRC registers requires CMM reset. */
0345472c Song Qiang 2018-09-20  223  		ret = regmap_write(regmap, RM_REG_CMM, 0);
0345472c Song Qiang 2018-09-20  224  		if (ret < 0)
0345472c Song Qiang 2018-09-20  225  			return ret;
0345472c Song Qiang 2018-09-20  226  		ret = regmap_write(regmap, RM_REG_CMM, RM_CMM_PMX |
0345472c Song Qiang 2018-09-20  227  			RM_CMM_PMY | RM_CMM_PMZ | RM_CMM_START);
0345472c Song Qiang 2018-09-20  228  		if (ret < 0)
0345472c Song Qiang 2018-09-20  229  			return ret;
0345472c Song Qiang 2018-09-20  230  		mutex_unlock(&data->lock);
0345472c Song Qiang 2018-09-20  231  
0345472c Song Qiang 2018-09-20  232  		data->conversion_time = rm3100_samp_rates[i][2] + 3000;
0345472c Song Qiang 2018-09-20  233  		return 0;
0345472c Song Qiang 2018-09-20  234  	}
0345472c Song Qiang 2018-09-20 @235  	return -EINVAL;
0345472c Song Qiang 2018-09-20  236  }
0345472c Song Qiang 2018-09-20  237  
0345472c Song Qiang 2018-09-20  238  static int rm3100_read_raw(struct iio_dev *indio_dev,
0345472c Song Qiang 2018-09-20  239  			   const struct iio_chan_spec *chan,
0345472c Song Qiang 2018-09-20  240  			   int *val, int *val2, long mask)
0345472c Song Qiang 2018-09-20  241  {
0345472c Song Qiang 2018-09-20  242  	struct rm3100_data *data = iio_priv(indio_dev);
0345472c Song Qiang 2018-09-20  243  	int ret;
0345472c Song Qiang 2018-09-20  244  
0345472c Song Qiang 2018-09-20  245  	switch (mask) {
0345472c Song Qiang 2018-09-20  246  	case IIO_CHAN_INFO_RAW:
0345472c Song Qiang 2018-09-20  247  		ret = iio_device_claim_direct_mode(indio_dev);
0345472c Song Qiang 2018-09-20  248  		if (ret < 0)
0345472c Song Qiang 2018-09-20  249  			return ret;
0345472c Song Qiang 2018-09-20  250  		ret = rm3100_read_mag(data, chan->scan_index, val);
0345472c Song Qiang 2018-09-20  251  		iio_device_release_direct_mode(indio_dev);
0345472c Song Qiang 2018-09-20  252  
0345472c Song Qiang 2018-09-20  253  		return ret;
0345472c Song Qiang 2018-09-20  254  	case IIO_CHAN_INFO_SAMP_FREQ:
0345472c Song Qiang 2018-09-20  255  		return ret = rm3100_get_samp_freq(data, val, val2);
0345472c Song Qiang 2018-09-20  256  	default:
0345472c Song Qiang 2018-09-20  257  		return -EINVAL;
0345472c Song Qiang 2018-09-20  258  	}
0345472c Song Qiang 2018-09-20  259  }
0345472c Song Qiang 2018-09-20  260  
0345472c Song Qiang 2018-09-20  261  static int rm3100_write_raw(struct iio_dev *indio_dev,
0345472c Song Qiang 2018-09-20  262  			    struct iio_chan_spec const *chan,
0345472c Song Qiang 2018-09-20  263  			    int val, int val2, long mask)
0345472c Song Qiang 2018-09-20  264  {
0345472c Song Qiang 2018-09-20  265  	struct rm3100_data *data = iio_priv(indio_dev);
0345472c Song Qiang 2018-09-20  266  	int ret;
0345472c Song Qiang 2018-09-20  267  
0345472c Song Qiang 2018-09-20  268  	switch (mask) {
0345472c Song Qiang 2018-09-20  269  	case IIO_CHAN_INFO_SAMP_FREQ:
0345472c Song Qiang 2018-09-20  270  		ret = rm3100_set_samp_freq(data, val, val2);
0345472c Song Qiang 2018-09-20  271  		if (ret < 0)
0345472c Song Qiang 2018-09-20  272  			return ret;
0345472c Song Qiang 2018-09-20  273  		return 0;
0345472c Song Qiang 2018-09-20  274  	default:
0345472c Song Qiang 2018-09-20  275  		return -EINVAL;
0345472c Song Qiang 2018-09-20  276  	}
0345472c Song Qiang 2018-09-20  277  
0345472c Song Qiang 2018-09-20  278  }
0345472c Song Qiang 2018-09-20  279  
0345472c Song Qiang 2018-09-20  280  static const struct iio_info rm3100_info = {
0345472c Song Qiang 2018-09-20  281  	.read_raw = rm3100_read_raw,
0345472c Song Qiang 2018-09-20  282  	.write_raw = rm3100_write_raw,
0345472c Song Qiang 2018-09-20  283  };
0345472c Song Qiang 2018-09-20  284  
0345472c Song Qiang 2018-09-20  285  static irqreturn_t rm3100_trigger_handler(int irq, void *p)
0345472c Song Qiang 2018-09-20  286  {
0345472c Song Qiang 2018-09-20  287  	struct iio_poll_func *pf = p;
0345472c Song Qiang 2018-09-20  288  	struct iio_dev *indio_dev = pf->indio_dev;
0345472c Song Qiang 2018-09-20  289  	struct rm3100_data *data = iio_priv(indio_dev);
0345472c Song Qiang 2018-09-20  290  	struct regmap *regmap = data->regmap;
0345472c Song Qiang 2018-09-20  291  	u8 *buffer;
0345472c Song Qiang 2018-09-20  292  	int ret;
0345472c Song Qiang 2018-09-20  293  	int i;
0345472c Song Qiang 2018-09-20  294  
0345472c Song Qiang 2018-09-20  295  	buffer = devm_kzalloc(data->dev, indio_dev->scan_bytes, GFP_KERNEL);
0345472c Song Qiang 2018-09-20  296  	if (!buffer)
0345472c Song Qiang 2018-09-20  297  		goto done;
0345472c Song Qiang 2018-09-20  298  
0345472c Song Qiang 2018-09-20  299  	mutex_lock(&data->lock);
0345472c Song Qiang 2018-09-20  300  	ret = rm3100_wait_measurement(data);
0345472c Song Qiang 2018-09-20  301  	if (ret < 0) {
0345472c Song Qiang 2018-09-20  302  		mutex_unlock(&data->lock);
0345472c Song Qiang 2018-09-20  303  		goto done;
0345472c Song Qiang 2018-09-20  304  	}
0345472c Song Qiang 2018-09-20  305  
0345472c Song Qiang 2018-09-20  306  	for (i = 0; i < 3; i++) {
0345472c Song Qiang 2018-09-20  307  		ret = regmap_bulk_read(regmap, RM_REG_MX2 + 3 * i,
0345472c Song Qiang 2018-09-20  308  				buffer + 4 * i, 3);
0345472c Song Qiang 2018-09-20  309  		if (ret < 0)
0345472c Song Qiang 2018-09-20  310  			return ret;
0345472c Song Qiang 2018-09-20  311  	}
0345472c Song Qiang 2018-09-20  312  	mutex_unlock(&data->lock);
0345472c Song Qiang 2018-09-20  313  
0345472c Song Qiang 2018-09-20  314  	iio_push_to_buffers_with_timestamp(indio_dev, buffer,
0345472c Song Qiang 2018-09-20  315  			iio_get_time_ns(indio_dev));
0345472c Song Qiang 2018-09-20  316  done:
0345472c Song Qiang 2018-09-20  317  	iio_trigger_notify_done(indio_dev->trig);
0345472c Song Qiang 2018-09-20  318  
0345472c Song Qiang 2018-09-20 @319  	return IRQ_HANDLED;
0345472c Song Qiang 2018-09-20  320  }
0345472c Song Qiang 2018-09-20  321  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

  parent reply	other threads:[~2018-09-23 11:02 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-20 13:13 [PATCH] iio: magnetometer: Add support for PNI RM3100 9-axis magnetometer Song Qiang
2018-09-20 13:46 ` Peter Meerwald-Stadler
2018-09-20 18:05   ` Song Qiang
2018-09-22  9:42     ` Jonathan Cameron
2018-09-22 10:08       ` Jonathan Cameron
2018-09-21  5:07   ` Phil Reid
2018-09-21 11:29     ` Song Qiang
2018-09-21 12:20       ` Jonathan Cameron
2018-09-22  9:18         ` Song Qiang
2018-09-21  2:05 ` Phil Reid
2018-09-21  9:13   ` Song Qiang
2018-09-22 10:14 ` Jonathan Cameron
2018-09-23 15:17   ` Song Qiang
2018-09-24 20:04     ` Jonathan Cameron
2018-09-24 14:37   ` Song Qiang
2018-09-29 12:44     ` Jonathan Cameron
2018-09-23 11:01 ` Dan Carpenter [this message]
     [not found] ` <5baa1b01.1c69fb81.f0d8f.30c6@mx.google.com>
2018-09-26  0:34   ` Song Qiang
2018-09-29 11:22     ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180923110115.vjnmfssmeq3i37pf@mwanda \
    --to=dan.carpenter@oracle.com \
    --cc=devicetree@vger.kernel.org \
    --cc=jic23@kernel.org \
    --cc=kbuild-all@01.org \
    --cc=kbuild@01.org \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=pmeerw@pmeerw.net \
    --cc=robh+dt@kernel.org \
    --cc=songqiang1304521@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).