summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/mfd/m4sensorhub-core.c2
-rw-r--r--drivers/misc/m4sensorhub_mpu9150.c69
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
};