cros_ec: Support reading EC features
The EC can support a variety of features and provides a way to find out what is available. Add support for this. Also update the feature list to the lastest available while we are here. This is at: https://chromium.googlesource.com/chromiumos/platform/ec/+/refs/heads/master/include/ec_commands.h Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -1344,19 +1344,33 @@ int cros_ec_i2c_tunnel(struct udevice *dev, int port, struct i2c_msg *in,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cros_ec_check_feature(struct udevice *dev, int feature)
|
||||
int cros_ec_get_features(struct udevice *dev, u64 *featuresp)
|
||||
{
|
||||
struct ec_response_get_features r;
|
||||
int rv;
|
||||
|
||||
rv = ec_command(dev, EC_CMD_GET_FEATURES, 0, &r, sizeof(r), NULL, 0);
|
||||
if (rv)
|
||||
return rv;
|
||||
rv = ec_command(dev, EC_CMD_GET_FEATURES, 0, NULL, 0, &r, sizeof(r));
|
||||
if (rv != sizeof(r))
|
||||
return -EIO;
|
||||
*featuresp = r.flags[0] | (u64)r.flags[1] << 32;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cros_ec_check_feature(struct udevice *dev, uint feature)
|
||||
{
|
||||
struct ec_response_get_features r;
|
||||
int rv;
|
||||
|
||||
rv = ec_command(dev, EC_CMD_GET_FEATURES, 0, NULL, 0, &r, sizeof(r));
|
||||
if (rv != sizeof(r))
|
||||
return -EIO;
|
||||
|
||||
if (feature >= 8 * sizeof(r.flags))
|
||||
return -1;
|
||||
return -EINVAL;
|
||||
|
||||
return r.flags[feature / 32] & EC_FEATURE_MASK_0(feature);
|
||||
return r.flags[feature / 32] & EC_FEATURE_MASK_0(feature) ? true :
|
||||
false;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -480,6 +480,17 @@ static int process_cmd(struct ec_state *ec,
|
||||
len = sizeof(*resp);
|
||||
break;
|
||||
}
|
||||
case EC_CMD_GET_FEATURES: {
|
||||
struct ec_response_get_features *resp = resp_data;
|
||||
|
||||
resp->flags[0] = EC_FEATURE_MASK_0(EC_FEATURE_FLASH) |
|
||||
EC_FEATURE_MASK_0(EC_FEATURE_I2C);
|
||||
resp->flags[1] =
|
||||
EC_FEATURE_MASK_1(EC_FEATURE_UNIFIED_WAKE_MASKS) |
|
||||
EC_FEATURE_MASK_1(EC_FEATURE_ISH);
|
||||
len = sizeof(*resp);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
printf(" ** Unknown EC command %#02x\n", req_hdr->command);
|
||||
return -1;
|
||||
|
||||
Reference in New Issue
Block a user