diff options
Diffstat (limited to 'sensors/akm8963.c')
-rw-r--r-- | sensors/akm8963.c | 30 |
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; } |