Commit 01761882 authored by Gustavo A. R. Silva's avatar Gustavo A. R. Silva Committed by Alexandre Belloni
Browse files

rtc: cros-ec: Avoid a couple of -Wflex-array-member-not-at-end warnings



Use the `DEFINE_RAW_FLEX()` helper for an on-stack definition of
a flexible structure where the size of the flexible-array member
is known at compile-time, and refactor the rest of the code,
accordingly.

So, with these changes, fix the following warning:

drivers/rtc/rtc-cros-ec.c:62:40: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
drivers/rtc/rtc-cros-ec.c:40:40: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]

Signed-off-by: default avatarGustavo A. R. Silva <gustavoars@kernel.org>
Reviewed-by: default avatarTzung-Bi Shih <tzungbi@kernel.org>
Link: https://lore.kernel.org/r/Z9PpPg06OK8ghNvm@kspp


Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
parent 6c2b8335
Loading
Loading
Loading
Loading
+12 −18
Original line number Diff line number Diff line
@@ -35,21 +35,18 @@ struct cros_ec_rtc {
static int cros_ec_rtc_get(struct cros_ec_device *cros_ec, u32 command,
			   u32 *response)
{
	DEFINE_RAW_FLEX(struct cros_ec_command, msg, data,
			sizeof(struct ec_response_rtc));
	int ret;
	struct {
		struct cros_ec_command msg;
		struct ec_response_rtc data;
	} __packed msg;

	memset(&msg, 0, sizeof(msg));
	msg.msg.command = command;
	msg.msg.insize = sizeof(msg.data);
	msg->command = command;
	msg->insize = sizeof(struct ec_response_rtc);

	ret = cros_ec_cmd_xfer_status(cros_ec, &msg.msg);
	ret = cros_ec_cmd_xfer_status(cros_ec, msg);
	if (ret < 0)
		return ret;

	*response = msg.data.time;
	*response = ((struct ec_response_rtc *)msg->data)->time;

	return 0;
}
@@ -57,18 +54,15 @@ static int cros_ec_rtc_get(struct cros_ec_device *cros_ec, u32 command,
static int cros_ec_rtc_set(struct cros_ec_device *cros_ec, u32 command,
			   u32 param)
{
	DEFINE_RAW_FLEX(struct cros_ec_command, msg, data,
			sizeof(struct ec_response_rtc));
	int ret;
	struct {
		struct cros_ec_command msg;
		struct ec_response_rtc data;
	} __packed msg;

	memset(&msg, 0, sizeof(msg));
	msg.msg.command = command;
	msg.msg.outsize = sizeof(msg.data);
	msg.data.time = param;
	msg->command = command;
	msg->outsize = sizeof(struct ec_response_rtc);
	((struct ec_response_rtc *)msg->data)->time = param;

	ret = cros_ec_cmd_xfer_status(cros_ec, &msg.msg);
	ret = cros_ec_cmd_xfer_status(cros_ec, msg);
	if (ret < 0)
		return ret;
	return 0;