summaryrefslogtreecommitdiff
path: root/drivers/misc/m4sensorhub_mpu9150.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc/m4sensorhub_mpu9150.c')
-rw-r--r--drivers/misc/m4sensorhub_mpu9150.c69
1 files changed, 68 insertions, 1 deletions
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
};