for (i = 0; i < sensorhub->sensor_num; i++) {
sensorhub->params->cmd = MOTIONSENSE_CMD_INFO;
sensorhub->params->info.sensor_num = i;
retries = CROS_EC_CMD_INFO_RETRIES; do {
ret = cros_ec_cmd_xfer_status(ec->ec_dev, msg); if (ret == -EBUSY) { /* The EC is still busy initializing sensors. */
usleep_range(5000, 6000);
retries--;
}
} while (ret == -EBUSY && retries);
if (ret < 0) {
dev_err(dev, "no info for EC sensor %d : %d/%d\n",
i, ret, msg->result); continue;
} if (retries < CROS_EC_CMD_INFO_RETRIES) {
dev_warn(dev, "%d retries needed to bring up sensor %d\n",
CROS_EC_CMD_INFO_RETRIES - retries, i);
}
switch (sensorhub->resp->info.type) { case MOTIONSENSE_TYPE_ACCEL:
name = "cros-ec-accel"; break; case MOTIONSENSE_TYPE_BARO:
name = "cros-ec-baro"; break; case MOTIONSENSE_TYPE_GYRO:
name = "cros-ec-gyro"; break; case MOTIONSENSE_TYPE_MAG:
name = "cros-ec-mag"; break; case MOTIONSENSE_TYPE_PROX:
name = "cros-ec-prox"; break; case MOTIONSENSE_TYPE_LIGHT:
name = "cros-ec-light"; break; case MOTIONSENSE_TYPE_ACTIVITY:
name = "cros-ec-activity"; break; default:
dev_warn(dev, "unknown type %d\n",
sensorhub->resp->info.type); continue;
}
ret = cros_ec_sensorhub_allocate_sensor(dev, name, i); if (ret) return ret;
sensor_type[sensorhub->resp->info.type]++;
}
if (sensor_type[MOTIONSENSE_TYPE_ACCEL] >= 2)
ec->has_kb_wake_angle = true;
if (cros_ec_check_features(ec,
EC_FEATURE_REFINED_TABLET_MODE_HYSTERESIS)) {
ret = cros_ec_sensorhub_allocate_sensor(dev, "cros-ec-lid-angle", 0); if (ret) return ret;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.