diff options
| -rw-r--r-- | drivers/mfd/m4sensorhub-core.c | 2 | ||||
| -rw-r--r-- | drivers/misc/m4sensorhub_mpu9150.c | 69 |
2 files changed, 70 insertions, 1 deletions
diff --git a/drivers/mfd/m4sensorhub-core.c b/drivers/mfd/m4sensorhub-core.c index 5d0b83912f8..92d0d3ed037 100644 --- a/drivers/mfd/m4sensorhub-core.c +++ b/drivers/mfd/m4sensorhub-core.c @@ -511,6 +511,8 @@ static int m4sensorhub_probe(struct i2c_client *client, m4sensorhub_debug = M4SH_ERROR; #endif } + /* Enabling detailed level M4 logs for all builds*/ + m4sensorhub_debug = M4SH_INFO; KDEBUG(M4SH_ERROR, "Initializing M4 Sensor Hub debug=%d\n", m4sensorhub_debug); diff --git a/drivers/misc/m4sensorhub_mpu9150.c b/drivers/misc/m4sensorhub_mpu9150.c index e3ee394d1a2..40792ffcc9e 100644 --- a/drivers/misc/m4sensorhub_mpu9150.c +++ b/drivers/misc/m4sensorhub_mpu9150.c @@ -393,6 +393,27 @@ static void m4_handle_mpu9150_fusion_irq(enum m4sensorhub_irqs int_event, m4_report_mpu9150_inputevent(mpu9150_client_data, TYPE_FUSION); } +static ssize_t m4_mpu9150_write_accel_enable(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + int scanresult; + + sscanf(buf, "%d", &scanresult); + + if (scanresult == 0) { + m4_set_mpu9150_delay(misc_mpu9150_data, -1, TYPE_ACCEL); + mpu9150_irq_enable_disable(misc_mpu9150_data, TYPE_ACCEL, + SENSOR_IRQ_DISABLE); + } else + /* nothing to be done, just return, setdelay will enable irq*/ + pr_info("%s: ignoring non 0 values\n", __func__); + + return count; +} + +static DEVICE_ATTR(accel_enable, 0222, NULL, m4_mpu9150_write_accel_enable); + static ssize_t m4_mpu9150_write_accel_setdelay(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) @@ -411,6 +432,28 @@ static ssize_t m4_mpu9150_write_accel_setdelay(struct device *dev, static DEVICE_ATTR(accel_setdelay, 0222, NULL, m4_mpu9150_write_accel_setdelay); +static ssize_t m4_mpu9150_write_gyro_enable(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + int scanresult; + + sscanf(buf, "%d", &scanresult); + + if (scanresult == 0) { + m4_set_mpu9150_delay(misc_mpu9150_data, -1, TYPE_GYRO); + mpu9150_irq_enable_disable(misc_mpu9150_data, TYPE_GYRO, + SENSOR_IRQ_DISABLE); + } else + /* nothing to be done, just return, setdelay will enable irq*/ + pr_info("%s: ignoring non 0 values\n", __func__); + + return count; +} + +static DEVICE_ATTR(gyro_enable, 0222, NULL, + m4_mpu9150_write_gyro_enable); + static ssize_t m4_mpu9150_write_gyro_setdelay(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) @@ -442,14 +485,38 @@ static ssize_t m4_mpu9150_write_compass_setdelay(struct device *dev, return count; } - static DEVICE_ATTR(compass_setdelay, 0222, NULL, m4_mpu9150_write_compass_setdelay); +static ssize_t m4_mpu9150_write_compass_enable(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + int scanresult; + + sscanf(buf, "%d", &scanresult); + + if (scanresult == 0) { + m4_set_mpu9150_delay(misc_mpu9150_data, -1, TYPE_COMPASS); + mpu9150_irq_enable_disable(misc_mpu9150_data, TYPE_COMPASS, + SENSOR_IRQ_DISABLE); + } else + /* nothing to be done, just return, setdelay will enable irq*/ + pr_info("%s: ignoring non 0 values\n", __func__); + + return count; +} + +static DEVICE_ATTR(compass_enable, 0222, NULL, + m4_mpu9150_write_compass_enable); + static struct attribute *mpu9150_control_attributes[] = { &dev_attr_accel_setdelay.attr, + &dev_attr_accel_enable.attr, &dev_attr_gyro_setdelay.attr, + &dev_attr_gyro_enable.attr, &dev_attr_compass_setdelay.attr, + &dev_attr_compass_enable.attr, NULL }; |