summaryrefslogtreecommitdiffstats
path: root/sensors/akm8963.c
diff options
context:
space:
mode:
Diffstat (limited to 'sensors/akm8963.c')
-rw-r--r--sensors/akm8963.c30
1 files changed, 11 insertions, 19 deletions
diff --git a/sensors/akm8963.c b/sensors/akm8963.c
index d5cad3f..c3a1851 100644
--- a/sensors/akm8963.c
+++ b/sensors/akm8963.c
@@ -20,6 +20,7 @@
#include <stdint.h>
#include <fcntl.h>
#include <errno.h>
+#include <string.h>
#include <hardware/sensors.h>
#include <hardware/hardware.h>
@@ -33,7 +34,6 @@
#define AKM8963_CONFIG_PATH "/data/misc/akmd_set.txt"
struct akm8963_data {
- struct smdk4x12_sensors_handlers *orientation_sensor;
sensors_vec_t magnetic;
short magnetic_data[4][3];
@@ -44,7 +44,7 @@ struct akm8963_data {
unsigned char asa[3];
int ho[3];
- long int delay;
+ int64_t delay;
int device_fd;
int uinput_fd;
@@ -363,6 +363,8 @@ void *akm8963_thread(void *thread_data)
write(uinput_fd, &event, sizeof(event));
input_event_set(&event, EV_REL, REL_Z, (int) (data->magnetic.z * 1000));
write(uinput_fd, &event, sizeof(event));
+ input_event_set(&event, EV_REL, REL_MISC, (int) data->magnetic.status);
+ write(uinput_fd, &event, sizeof(event));
input_event_set(&event, EV_SYN, 0, 0);
write(uinput_fd, &event, sizeof(event));
@@ -398,14 +400,6 @@ int akm8963_init(struct smdk4x12_sensors_handlers *handlers,
data = (struct akm8963_data *) calloc(1, sizeof(struct akm8963_data));
- for (i = 0; i < device->handlers_count; i++) {
- if (device->handlers[i] == NULL)
- continue;
-
- if (device->handlers[i]->handle == SENSOR_TYPE_ORIENTATION)
- data->orientation_sensor = device->handlers[i];
- }
-
device_fd = open("/dev/akm8963", O_RDONLY);
if (device_fd < 0) {
ALOGE("%s: Unable to open device", __func__);
@@ -421,13 +415,13 @@ int akm8963_init(struct smdk4x12_sensors_handlers *handlers,
ALOGD("AKM8963 ASA (Sensitivity Adjustment) values are: (%d, %d, %d)",
data->asa[0], data->asa[1], data->asa[2]);
- uinput_fd = uinput_rel_create("magnetic");
+ uinput_fd = uinput_rel_create("magnetic_sensor");
if (uinput_fd < 0) {
ALOGD("%s: Unable to create uinput", __func__);
goto error;
}
- input_fd = input_open("magnetic");
+ input_fd = input_open("magnetic_sensor");
if (input_fd < 0) {
ALOGE("%s: Unable to open magnetic input", __func__);
goto error;
@@ -581,13 +575,13 @@ int akm8963_deactivate(struct smdk4x12_sensors_handlers *handlers)
return 0;
}
-int akm8963_set_delay(struct smdk4x12_sensors_handlers *handlers, long int delay)
+int akm8963_set_delay(struct smdk4x12_sensors_handlers *handlers, int64_t delay)
{
struct akm8963_data *data;
char path_delay[PATH_MAX] = "/sys/class/sensors/ssp_sensor/mag_poll_delay";
int rc;
- ALOGD("%s(%p, %ld)", __func__, handlers, delay);
+ ALOGD("%s(%p, %" PRId64 ")", __func__, handlers, delay);
if (handlers == NULL || handlers->data == NULL)
return -EINVAL;
@@ -634,8 +628,6 @@ int akm8963_get_data(struct smdk4x12_sensors_handlers *handlers,
event->sensor = handlers->handle;
event->type = handlers->handle;
- event->magnetic.status = SENSOR_STATUS_ACCURACY_MEDIUM;
-
do {
rc = read(input_fd, &input_event, sizeof(input_event));
if (rc < (int) sizeof(input_event))
@@ -652,6 +644,9 @@ int akm8963_get_data(struct smdk4x12_sensors_handlers *handlers,
case REL_Z:
event->magnetic.z = akm8963_convert(input_event.value);
break;
+ case REL_MISC:
+ event->magnetic.status = input_event.value;
+ break;
default:
continue;
}
@@ -661,9 +656,6 @@ int akm8963_get_data(struct smdk4x12_sensors_handlers *handlers,
}
} while (input_event.type != EV_SYN);
- if (data->orientation_sensor != NULL)
- orientation_fill(data->orientation_sensor, NULL, &event->magnetic);
-
return 0;
}