summaryrefslogtreecommitdiff
path: root/drivers/misc/m4sensorhub_fusion.c
diff options
context:
space:
mode:
authorViditha Hanumanthareddy <ngjq36@motorola.com>2014-06-02 09:11:25 -0500
committerViditha Hanumanthareddy <ngjq36@motorola.com>2014-06-04 09:36:24 -0500
commit13994f358b36cf0482295fe3a38a1297c3916715 (patch)
tree4e91b74228f67c1f4d438d96d0d6c30ba98f75c2 /drivers/misc/m4sensorhub_fusion.c
parent312df65201da563be207d3c5b9a0ff06fd0c48be (diff)
downloadolio-linux-3.10-13994f358b36cf0482295fe3a38a1297c3916715.tar.xz
olio-linux-3.10-13994f358b36cf0482295fe3a38a1297c3916715.zip
IKXCLOCK-1762: Fix m4 panic handlers
Change-Id: I53820435227388c323d2beec6e678a94b674fff9
Diffstat (limited to 'drivers/misc/m4sensorhub_fusion.c')
-rw-r--r--drivers/misc/m4sensorhub_fusion.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/misc/m4sensorhub_fusion.c b/drivers/misc/m4sensorhub_fusion.c
index e426efe9021..99c80df1d33 100644
--- a/drivers/misc/m4sensorhub_fusion.c
+++ b/drivers/misc/m4sensorhub_fusion.c
@@ -308,6 +308,27 @@ m4fus_create_iiodev_exit:
return err;
}
+static void m4fus_panic_restore(struct m4sensorhub_data *m4sensorhub,
+ void *data)
+{
+ int size, err;
+ struct m4fus_driver_data *dd = (struct m4fus_driver_data *)data;
+
+ if (dd == NULL) {
+ m4als_err("%s: Driver data is null, unable to restore\n");
+ return;
+ }
+ size = m4sensorhub_reg_getsize(dd->m4, M4SH_REG_FUSION_SAMPLERATE);
+ err = m4sensorhub_reg_write(dd->m4, M4SH_REG_FUSION_SAMPLERATE,
+ (char *)&dd->samplerate, m4sh_no_mask);
+ if (err < 0) {
+ m4fus_err("%s: Failed to set sample rate.\n", __func__);
+ } else if (err != size) {
+ m4fus_err("%s: Wrote %d bytes instead of %d.\n",
+ __func__, err, size);
+ }
+}
+
static int m4fus_driver_init(struct init_calldata *p_arg)
{
struct iio_dev *iio = p_arg->p_data;
@@ -330,6 +351,11 @@ static int m4fus_driver_init(struct init_calldata *p_arg)
goto m4fus_driver_init_fail;
}
+ err = m4sensorhub_panic_register(dd->m4, PANICHDL_FUSION_RESTORE,
+ m4fus_panic_restore, dd);
+ if (err < 0)
+ KDEBUG(M4SH_ERROR, "Fusion panic callback register failed\n");
+
goto m4fus_driver_init_exit;
m4fus_driver_init_fail: