On 07/03/2018 at 17:09:22 -0600, Gustavo A. R. Silva wrote:
Yeah, the 128 or 255 bytes NVRAM is not yet supported but this is on my
On 03/07/2018 05:01 PM, Alexandre Belloni wrote:
On 07/03/2018 at 16:39:51 -0600, Gustavo A. R. Silva wrote:I see...
Hi Alexandre,Seems better, yes.
On 03/07/2018 03:25 PM, Alexandre Belloni wrote:
On 07/03/2018 at 14:11:33 -0600, Gustavo A. R. Silva wrote:Sure. I can elaborate a little bit more.
In preparation to enabling -Wvla, remove VLA and replace itYou should probably explain what VLA is and why this is important to do.
with a fixed-length array instead.
Correct.Signed-off-by: Gustavo A. R. Silva <gustavo@xxxxxxxxxxxxxx>You chose to change len to 255, probably because this is a uint8_t but
---
drivers/rtc/rtc-bq32k.c | 2 +-
drivers/rtc/rtc-mcp795.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/rtc/rtc-bq32k.c b/drivers/rtc/rtc-bq32k.c
index e8698e9..e4b234a 100644
--- a/drivers/rtc/rtc-bq32k.c
+++ b/drivers/rtc/rtc-bq32k.c
@@ -74,7 +74,7 @@ static int bq32k_read(struct device *dev, void *data, uint8_t off, uint8_t len)
static int bq32k_write(struct device *dev, void *data, uint8_t off, uint8_t len)
{
struct i2c_client *client = to_i2c_client(dev);
- uint8_t buffer[len + 1];
+ uint8_t buffer[256];
this is way too much for this rtc, it only has 10 consecutive registers.In that case probably the best solution is to add the following line to the
module:
#define MAX_LEN 10
and update the rest of the code as follows:
uint8_t buffer[MAX_LEN + 1];
Nope, that RTC has a section of 255 bytes that could be read at once soFor this particular case it seems to me that the following works just fine:buffer[0] = off;
memcpy(&buffer[1], data, len);
diff --git a/drivers/rtc/rtc-mcp795.c b/drivers/rtc/rtc-mcp795.c
index 79e24ea..00e11c1 100644
--- a/drivers/rtc/rtc-mcp795.c
+++ b/drivers/rtc/rtc-mcp795.c
@@ -82,7 +82,7 @@ static int mcp795_rtcc_write(struct device *dev, u8 addr, u8 *data, u8 count)
{
struct spi_device *spi = to_spi_device(dev);
int ret;
- u8 tx[2 + count];
+ u8 tx[257];
#define MAX_COUNT 7
u8 tx[MAX_COUNT + 2];
What do you think?
257 is the correct value.
I was looking into this piece of code drivers/rtc/rtc-mcp795.c:302:
ÂÂÂÂÂÂÂ tmp[0] = (tmp[0] & 0x80) | bin2bcd(alm->time.tm_sec);
ÂÂÂÂÂÂÂ tmp[1] = (tmp[1] & 0x80) | bin2bcd(alm->time.tm_min);
ÂÂÂÂÂÂÂ tmp[2] = (tmp[2] & 0xE0) | bin2bcd(alm->time.tm_hour);
ÂÂÂÂÂÂÂ tmp[3] = (tmp[3] & 0x80) | bin2bcd(alm->time.tm_wday + 1);
ÂÂÂÂÂÂÂ /* set alarm match: seconds, minutes, hour, day, date and month */
ÂÂÂÂÂÂÂ tmp[3] |= (MCP795_ALM0C2_BIT | MCP795_ALM0C1_BIT |
MCP795_ALM0C0_BIT);
ÂÂÂÂÂÂÂ tmp[4] = (tmp[4] & 0xC0) | bin2bcd(alm->time.tm_mday);
ÂÂÂÂÂÂÂ tmp[5] = (tmp[5] & 0xE0) | bin2bcd(alm->time.tm_mon + 1);
ÂÂÂÂÂÂÂ ret = mcp795_rtcc_write(dev, MCP795_REG_ALM0_SECONDS, tmp,
sizeof(tmp));
todo list