|
@@ -600,6 +600,10 @@ inv_fifo_rate_show(struct device *dev, struct device_attribute *attr,
|
|
|
/**
|
|
|
* inv_attr_show() - calling this function will show current
|
|
|
* parameters.
|
|
|
+ *
|
|
|
+ * Deprecated in favor of IIO mounting matrix API.
|
|
|
+ *
|
|
|
+ * See inv_get_mount_matrix()
|
|
|
*/
|
|
|
static ssize_t inv_attr_show(struct device *dev, struct device_attribute *attr,
|
|
|
char *buf)
|
|
@@ -644,6 +648,18 @@ static int inv_mpu6050_validate_trigger(struct iio_dev *indio_dev,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static const struct iio_mount_matrix *
|
|
|
+inv_get_mount_matrix(const struct iio_dev *indio_dev,
|
|
|
+ const struct iio_chan_spec *chan)
|
|
|
+{
|
|
|
+ return &((struct inv_mpu6050_state *)iio_priv(indio_dev))->orientation;
|
|
|
+}
|
|
|
+
|
|
|
+static const struct iio_chan_spec_ext_info inv_ext_info[] = {
|
|
|
+ IIO_MOUNT_MATRIX(IIO_SHARED_BY_TYPE, inv_get_mount_matrix),
|
|
|
+ { },
|
|
|
+};
|
|
|
+
|
|
|
#define INV_MPU6050_CHAN(_type, _channel2, _index) \
|
|
|
{ \
|
|
|
.type = _type, \
|
|
@@ -660,6 +676,7 @@ static int inv_mpu6050_validate_trigger(struct iio_dev *indio_dev,
|
|
|
.shift = 0, \
|
|
|
.endianness = IIO_BE, \
|
|
|
}, \
|
|
|
+ .ext_info = inv_ext_info, \
|
|
|
}
|
|
|
|
|
|
static const struct iio_chan_spec inv_mpu_channels[] = {
|
|
@@ -692,14 +709,16 @@ static IIO_CONST_ATTR(in_accel_scale_available,
|
|
|
"0.000598 0.001196 0.002392 0.004785");
|
|
|
static IIO_DEV_ATTR_SAMP_FREQ(S_IRUGO | S_IWUSR, inv_fifo_rate_show,
|
|
|
inv_mpu6050_fifo_rate_store);
|
|
|
+
|
|
|
+/* Deprecated: kept for userspace backward compatibility. */
|
|
|
static IIO_DEVICE_ATTR(in_gyro_matrix, S_IRUGO, inv_attr_show, NULL,
|
|
|
ATTR_GYRO_MATRIX);
|
|
|
static IIO_DEVICE_ATTR(in_accel_matrix, S_IRUGO, inv_attr_show, NULL,
|
|
|
ATTR_ACCL_MATRIX);
|
|
|
|
|
|
static struct attribute *inv_attributes[] = {
|
|
|
- &iio_dev_attr_in_gyro_matrix.dev_attr.attr,
|
|
|
- &iio_dev_attr_in_accel_matrix.dev_attr.attr,
|
|
|
+ &iio_dev_attr_in_gyro_matrix.dev_attr.attr, /* deprecated */
|
|
|
+ &iio_dev_attr_in_accel_matrix.dev_attr.attr, /* deprecated */
|
|
|
&iio_dev_attr_sampling_frequency.dev_attr.attr,
|
|
|
&iio_const_attr_sampling_frequency_available.dev_attr.attr,
|
|
|
&iio_const_attr_in_accel_scale_available.dev_attr.attr,
|
|
@@ -779,9 +798,20 @@ int inv_mpu_core_probe(struct regmap *regmap, int irq, const char *name,
|
|
|
st->powerup_count = 0;
|
|
|
st->irq = irq;
|
|
|
st->map = regmap;
|
|
|
+
|
|
|
pdata = dev_get_platdata(dev);
|
|
|
- if (pdata)
|
|
|
+ if (!pdata) {
|
|
|
+ result = of_iio_read_mount_matrix(dev, "mount-matrix",
|
|
|
+ &st->orientation);
|
|
|
+ if (result) {
|
|
|
+ dev_err(dev, "Failed to retrieve mounting matrix %d\n",
|
|
|
+ result);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
st->plat_data = *pdata;
|
|
|
+ }
|
|
|
+
|
|
|
/* power is turned on inside check chip type*/
|
|
|
result = inv_check_and_setup_chip(st);
|
|
|
if (result)
|