platform/chrome: cros_ec_proto: Introduce cros_ec_cmd_readmem()

To read from the EC memory different mechanism are possible.
ECs connected via LPC expose their memory via a ->cmd_readmem operation.
Other protocols require the usage of EC_CMD_READ_MEMMAP, which on the
other hand is not implemented by LPC ECs.

Provide a helper that automatically selects the correct mechanism.

Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20240529-cros_ec-hwmon-v4-1-5cdf0c5db50a@weissschuh.net
Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
This commit is contained in:
Thomas Weißschuh 2024-05-29 08:27:11 +02:00 committed by Tzung-Bi Shih
parent 7b44d5381e
commit a14a569a99
2 changed files with 29 additions and 0 deletions

View File

@ -1033,3 +1033,30 @@ error:
return ret;
}
EXPORT_SYMBOL_GPL(cros_ec_cmd);
/**
* cros_ec_cmd_readmem - Read from EC memory.
*
* @ec_dev: EC device
* @offset: Is within EC_LPC_ADDR_MEMMAP region.
* @size: Number of bytes to read.
* @dest: EC command output data
*
* Return: >= 0 on success, negative error number on failure.
*/
int cros_ec_cmd_readmem(struct cros_ec_device *ec_dev, u8 offset, u8 size, void *dest)
{
struct ec_params_read_memmap params = {};
if (!size)
return -EINVAL;
if (ec_dev->cmd_readmem)
return ec_dev->cmd_readmem(ec_dev, offset, size, dest);
params.offset = offset;
params.size = size;
return cros_ec_cmd(ec_dev, 0, EC_CMD_READ_MEMMAP,
&params, sizeof(params), dest, size);
}
EXPORT_SYMBOL_GPL(cros_ec_cmd_readmem);

View File

@ -261,6 +261,8 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec);
int cros_ec_cmd(struct cros_ec_device *ec_dev, unsigned int version, int command, const void *outdata,
size_t outsize, void *indata, size_t insize);
int cros_ec_cmd_readmem(struct cros_ec_device *ec_dev, u8 offset, u8 size, void *dest);
/**
* cros_ec_get_time_ns() - Return time in ns.
*