motion: Add MOTIONSENSE_CMD_DATA: retrieve single sensor data

MOTIONSENSE_CMD_DATA return the value of a sinlge sensor.

BRANCH=none
BUG=chrome-os-partner:39900
TEST=On Smaug, using the new cros-ec-sensors driver,
check sensors data using iio sysfs interface.

Change-Id: I618ff050e0c7b4247ac56cfb0ca25e351270e1d6
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/274824
Reviewed-by: Alec Berg <alecaberg@chromium.org>
This commit is contained in:
Gwendal Grignou
2015-06-02 09:41:58 -07:00
committed by ChromeOS Commit Bot
parent b88495f718
commit c70fb0f9eb
3 changed files with 37 additions and 9 deletions

View File

@@ -386,6 +386,23 @@ static int host_cmd_motion_sense(struct host_cmd_handler_args *args)
sizeof(struct ec_response_motion_sensor_data);
break;
case MOTIONSENSE_CMD_DATA:
sensor = host_sensor_id_to_motion_sensor(
in->sensor_odr.sensor_num);
if (sensor == NULL)
return EC_RES_INVALID_PARAM;
out->data.flags = 0;
mutex_lock(&g_sensor_mutex);
out->data.data[X] = sensor->xyz[X];
out->data.data[Y] = sensor->xyz[Y];
out->data.data[Z] = sensor->xyz[Z];
mutex_unlock(&g_sensor_mutex);
args->response_size = sizeof(out->data);
break;
case MOTIONSENSE_CMD_INFO:
sensor = host_sensor_id_to_motion_sensor(
in->sensor_odr.sensor_num);
@@ -493,7 +510,7 @@ static int host_cmd_motion_sense(struct host_cmd_handler_args *args)
DECLARE_HOST_COMMAND(EC_CMD_MOTION_SENSE_CMD,
host_cmd_motion_sense,
EC_VER_MASK(1));
EC_VER_MASK(1) | EC_VER_MASK(2));
/*****************************************************************************/
/* Console commands */

View File

@@ -1555,7 +1555,7 @@ struct ec_response_led_control {
*/
/* Verified boot hash command */
#define EC_CMD_VBOOT_HASH 0x2A
#define EC_CMD_VBOOT_HASH 0x2a
struct ec_params_vboot_hash {
uint8_t cmd; /* enum ec_vboot_hash_cmd */
@@ -1607,7 +1607,7 @@ enum ec_vboot_hash_status {
* Motion sense commands. We'll make separate structs for sub-commands with
* different input args, so that we know how much to expect.
*/
#define EC_CMD_MOTION_SENSE_CMD 0x2B
#define EC_CMD_MOTION_SENSE_CMD 0x2b
/* Motion sense commands */
enum motionsense_command {
@@ -1651,6 +1651,11 @@ enum motionsense_command {
*/
MOTIONSENSE_CMD_KB_WAKE_ANGLE = 5,
/*
* Returns a single sensor data.
*/
MOTIONSENSE_CMD_DATA = 6,
/* Number of motionsense sub-commands. */
MOTIONSENSE_NUM_CMDS
};
@@ -1660,12 +1665,14 @@ enum motionsensor_type {
MOTIONSENSE_TYPE_ACCEL = 0,
MOTIONSENSE_TYPE_GYRO = 1,
MOTIONSENSE_TYPE_MAG = 2,
MOTIONSENSE_TYPE_MAX = 3,
};
/* List of motion sensor locations. */
enum motionsensor_location {
MOTIONSENSE_LOC_BASE = 0,
MOTIONSENSE_LOC_LID = 1,
MOTIONSENSE_LOC_MAX = 2,
};
/* List of motion sensor chips. */
@@ -1710,10 +1717,10 @@ struct ec_params_motion_sense {
int16_t data;
} ec_rate, kb_wake_angle;
/* Used for MOTIONSENSE_CMD_INFO. */
/* Used for MOTIONSENSE_CMD_INFO, MOTIONSENSE_CMD_DATA. */
struct {
uint8_t sensor_num;
} info;
} info, data;
/*
* Used for MOTIONSENSE_CMD_SENSOR_ODR and
@@ -1771,6 +1778,9 @@ struct ec_response_motion_sense {
uint8_t chip;
} info;
/* Used for MOTIONSENSE_CMD_DATA */
struct ec_response_motion_sensor_data data;
/*
* Used for MOTIONSENSE_CMD_EC_RATE, MOTIONSENSE_CMD_SENSOR_ODR,
* MOTIONSENSE_CMD_SENSOR_RANGE, and
@@ -3112,8 +3122,8 @@ struct ec_response_pd_log {
/* The timestamp is the microsecond counter shifted to get about a ms. */
#define PD_LOG_TIMESTAMP_SHIFT 10 /* 1 LSB = 1024us */
#define PD_LOG_SIZE_MASK 0x1F
#define PD_LOG_PORT_MASK 0xE0
#define PD_LOG_SIZE_MASK 0x1f
#define PD_LOG_PORT_MASK 0xe0
#define PD_LOG_PORT_SHIFT 5
#define PD_LOG_PORT_SIZE(port, size) (((port) << PD_LOG_PORT_SHIFT) | \
((size) & PD_LOG_SIZE_MASK))
@@ -3139,7 +3149,7 @@ struct ec_response_pd_log {
#define PD_EVENT_VIDEO_DP_MODE (PD_EVENT_VIDEO_BASE+0)
#define PD_EVENT_VIDEO_CODEC (PD_EVENT_VIDEO_BASE+1)
/* Returned in the "type" field, when there is no entry available */
#define PD_EVENT_NO_ENTRY 0xFF
#define PD_EVENT_NO_ENTRY 0xff
/*
* PD_EVENT_MCU_CHARGE event definition :
@@ -3154,7 +3164,7 @@ struct ec_response_pd_log {
#define CHARGE_FLAGS_OVERRIDE (1 << 13)
/* Charger type */
#define CHARGE_FLAGS_TYPE_SHIFT 3
#define CHARGE_FLAGS_TYPE_MASK (0xF << CHARGE_FLAGS_TYPE_SHIFT)
#define CHARGE_FLAGS_TYPE_MASK (0xf << CHARGE_FLAGS_TYPE_SHIFT)
/* Power delivery role */
#define CHARGE_FLAGS_ROLE_MASK (7 << 0)

View File

@@ -3219,6 +3219,7 @@ static const struct {
MS_SIZES(sensor_odr),
MS_SIZES(sensor_range),
MS_SIZES(kb_wake_angle),
MS_SIZES(data),
};
BUILD_ASSERT(ARRAY_SIZE(ms_command_sizes) == MOTIONSENSE_NUM_CMDS);
#undef MS_SIZES