Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1be627df authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull staging and IIO fixes from Greg KH:
 "Here are some small staging and IIO driver fixes for 4.12-rc6.

  Nothing huge, just a few small driver fixes for reported issues. All
  have been in linux-next with no reported issues"

* tag 'staging-4.12-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging:
  Staging: rtl8723bs: fix an error code in isFileReadable()
  iio: buffer-dmaengine: Add missing header buffer_impl.h
  iio: buffer-dma: Add missing header buffer_impl.h
  iio: adc: meson-saradc: fix potential crash in meson_sar_adc_clear_fifo
  iio: adc: mxs-lradc: Fix return value check in mxs_lradc_adc_probe()
  iio: imu: inv_mpu6050: add accel lpf setting for chip >= MPU6500
  staging: iio: ad7152: Fix deadlock in ad7152_write_raw_samp_freq()
parents 6e203506 ed6456af
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -468,13 +468,13 @@ static void meson_sar_adc_unlock(struct iio_dev *indio_dev)
static void meson_sar_adc_clear_fifo(struct iio_dev *indio_dev)
static void meson_sar_adc_clear_fifo(struct iio_dev *indio_dev)
{
{
	struct meson_sar_adc_priv *priv = iio_priv(indio_dev);
	struct meson_sar_adc_priv *priv = iio_priv(indio_dev);
	int count;
	unsigned int count, tmp;


	for (count = 0; count < MESON_SAR_ADC_MAX_FIFO_SIZE; count++) {
	for (count = 0; count < MESON_SAR_ADC_MAX_FIFO_SIZE; count++) {
		if (!meson_sar_adc_get_fifo_count(indio_dev))
		if (!meson_sar_adc_get_fifo_count(indio_dev))
			break;
			break;


		regmap_read(priv->regmap, MESON_SAR_ADC_FIFO_RD, 0);
		regmap_read(priv->regmap, MESON_SAR_ADC_FIFO_RD, &tmp);
	}
	}
}
}


+5 −2
Original line number Original line Diff line number Diff line
@@ -718,9 +718,12 @@ static int mxs_lradc_adc_probe(struct platform_device *pdev)
	adc->dev = dev;
	adc->dev = dev;


	iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (!iores)
		return -EINVAL;

	adc->base = devm_ioremap(dev, iores->start, resource_size(iores));
	adc->base = devm_ioremap(dev, iores->start, resource_size(iores));
	if (IS_ERR(adc->base))
	if (!adc->base)
		return PTR_ERR(adc->base);
		return -ENOMEM;


	init_completion(&adc->completion);
	init_completion(&adc->completion);
	spin_lock_init(&adc->lock);
	spin_lock_init(&adc->lock);
+1 −0
Original line number Original line Diff line number Diff line
@@ -14,6 +14,7 @@
#include <linux/sched.h>
#include <linux/sched.h>
#include <linux/poll.h>
#include <linux/poll.h>
#include <linux/iio/buffer.h>
#include <linux/iio/buffer.h>
#include <linux/iio/buffer_impl.h>
#include <linux/iio/buffer-dma.h>
#include <linux/iio/buffer-dma.h>
#include <linux/dma-mapping.h>
#include <linux/dma-mapping.h>
#include <linux/sizes.h>
#include <linux/sizes.h>
+1 −0
Original line number Original line Diff line number Diff line
@@ -14,6 +14,7 @@


#include <linux/iio/iio.h>
#include <linux/iio/iio.h>
#include <linux/iio/buffer.h>
#include <linux/iio/buffer.h>
#include <linux/iio/buffer_impl.h>
#include <linux/iio/buffer-dma.h>
#include <linux/iio/buffer-dma.h>
#include <linux/iio/buffer-dmaengine.h>
#include <linux/iio/buffer-dmaengine.h>


+36 −3
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@ static const int accel_scale[] = {598, 1196, 2392, 4785};
static const struct inv_mpu6050_reg_map reg_set_6500 = {
static const struct inv_mpu6050_reg_map reg_set_6500 = {
	.sample_rate_div	= INV_MPU6050_REG_SAMPLE_RATE_DIV,
	.sample_rate_div	= INV_MPU6050_REG_SAMPLE_RATE_DIV,
	.lpf                    = INV_MPU6050_REG_CONFIG,
	.lpf                    = INV_MPU6050_REG_CONFIG,
	.accel_lpf              = INV_MPU6500_REG_ACCEL_CONFIG_2,
	.user_ctrl              = INV_MPU6050_REG_USER_CTRL,
	.user_ctrl              = INV_MPU6050_REG_USER_CTRL,
	.fifo_en                = INV_MPU6050_REG_FIFO_EN,
	.fifo_en                = INV_MPU6050_REG_FIFO_EN,
	.gyro_config            = INV_MPU6050_REG_GYRO_CONFIG,
	.gyro_config            = INV_MPU6050_REG_GYRO_CONFIG,
@@ -210,6 +211,37 @@ int inv_mpu6050_set_power_itg(struct inv_mpu6050_state *st, bool power_on)
}
}
EXPORT_SYMBOL_GPL(inv_mpu6050_set_power_itg);
EXPORT_SYMBOL_GPL(inv_mpu6050_set_power_itg);


/**
 *  inv_mpu6050_set_lpf_regs() - set low pass filter registers, chip dependent
 *
 *  MPU60xx/MPU9150 use only 1 register for accelerometer + gyroscope
 *  MPU6500 and above have a dedicated register for accelerometer
 */
static int inv_mpu6050_set_lpf_regs(struct inv_mpu6050_state *st,
				    enum inv_mpu6050_filter_e val)
{
	int result;

	result = regmap_write(st->map, st->reg->lpf, val);
	if (result)
		return result;

	switch (st->chip_type) {
	case INV_MPU6050:
	case INV_MPU6000:
	case INV_MPU9150:
		/* old chips, nothing to do */
		result = 0;
		break;
	default:
		/* set accel lpf */
		result = regmap_write(st->map, st->reg->accel_lpf, val);
		break;
	}

	return result;
}

/**
/**
 *  inv_mpu6050_init_config() - Initialize hardware, disable FIFO.
 *  inv_mpu6050_init_config() - Initialize hardware, disable FIFO.
 *
 *
@@ -233,8 +265,7 @@ static int inv_mpu6050_init_config(struct iio_dev *indio_dev)
	if (result)
	if (result)
		return result;
		return result;


	d = INV_MPU6050_FILTER_20HZ;
	result = inv_mpu6050_set_lpf_regs(st, INV_MPU6050_FILTER_20HZ);
	result = regmap_write(st->map, st->reg->lpf, d);
	if (result)
	if (result)
		return result;
		return result;


@@ -537,6 +568,8 @@ static int inv_mpu6050_write_raw(struct iio_dev *indio_dev,
 *                  would be alising. This function basically search for the
 *                  would be alising. This function basically search for the
 *                  correct low pass parameters based on the fifo rate, e.g,
 *                  correct low pass parameters based on the fifo rate, e.g,
 *                  sampling frequency.
 *                  sampling frequency.
 *
 *  lpf is set automatically when setting sampling rate to avoid any aliases.
 */
 */
static int inv_mpu6050_set_lpf(struct inv_mpu6050_state *st, int rate)
static int inv_mpu6050_set_lpf(struct inv_mpu6050_state *st, int rate)
{
{
@@ -552,7 +585,7 @@ static int inv_mpu6050_set_lpf(struct inv_mpu6050_state *st, int rate)
	while ((h < hz[i]) && (i < ARRAY_SIZE(d) - 1))
	while ((h < hz[i]) && (i < ARRAY_SIZE(d) - 1))
		i++;
		i++;
	data = d[i];
	data = d[i];
	result = regmap_write(st->map, st->reg->lpf, data);
	result = inv_mpu6050_set_lpf_regs(st, data);
	if (result)
	if (result)
		return result;
		return result;
	st->chip_config.lpf = data;
	st->chip_config.lpf = data;
Loading