mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 14:56:54 -04:00
iio: imu: mpu6050: add level shifter flag
Some boards fail in magnetometer probe if level shifter flag is not set, definition was found in the vendor Linux kernel v3.0. Signed-off-by: Andreas Kemnade <andreas@kemnade.info> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Acked-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com> Link: https://lore.kernel.org/r/20230927173245.2151083-3-andreas@kemnade.info Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
committed by
Jonathan Cameron
parent
14114c8a74
commit
c48fb9f956
@@ -71,6 +71,19 @@ int inv_mpu_aux_init(const struct inv_mpu6050_state *st)
|
||||
unsigned int val;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* Code based on the vendor Linux kernel v3.0,
|
||||
* the exact meaning is unknown.
|
||||
*/
|
||||
if (st->chip_type == INV_MPU9150) {
|
||||
unsigned int mask = BIT(7);
|
||||
|
||||
val = st->level_shifter ? mask : 0;
|
||||
ret = regmap_update_bits(st->map, 0x1, mask, val);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* configure i2c master */
|
||||
val = INV_MPU6050_BITS_I2C_MST_CLK_400KHZ |
|
||||
INV_MPU6050_BIT_WAIT_FOR_ES;
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/property.h>
|
||||
|
||||
#include <linux/iio/common/inv_sensors_timestamp.h>
|
||||
#include <linux/iio/iio.h>
|
||||
@@ -1495,6 +1496,8 @@ int inv_mpu_core_probe(struct regmap *regmap, int irq, const char *name,
|
||||
st->irq = irq;
|
||||
st->map = regmap;
|
||||
|
||||
st->level_shifter = device_property_read_bool(dev,
|
||||
"invensense,level-shifter");
|
||||
pdata = dev_get_platdata(dev);
|
||||
if (!pdata) {
|
||||
result = iio_read_mount_matrix(dev, &st->orientation);
|
||||
|
||||
@@ -203,6 +203,7 @@ struct inv_mpu6050_state {
|
||||
s32 magn_raw_to_gauss[3];
|
||||
struct iio_mount_matrix magn_orient;
|
||||
unsigned int suspended_sensors;
|
||||
bool level_shifter;
|
||||
u8 *data;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user