Message ID | 20220608161150.58919-2-linux@fw-web.de |
---|---|
State | New |
Headers | show |
Series | Support RTC on BPI-R2 Pro | expand |
Hi, just a gentle ping...any comment on this? regards Frank
On 2022-06-08 17:11, Frank Wunderlich wrote: > From: Peter Geis <pgwipeout@gmail.com> > > RTC sometimes does not respond the first time in init. > Try multiple times to get a response. FWIW, given that HYM8563 is fairly common on RK3288 boards - I can't say I've ever noticed an issue with mine, for instance - it seems dubious that this would be a general issue of the chip itself. Are you sure it's not a SoC or board-level issue with the I2C bus being in a funny initial state, timings being marginal, or suchlike? Robin. > Signed-off-by: Peter Geis <pgwipeout@gmail.com> > Signed-off-by: Frank Wunderlich <frank-w@public-files.de> > --- > drivers/rtc/rtc-hym8563.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/drivers/rtc/rtc-hym8563.c b/drivers/rtc/rtc-hym8563.c > index 90e602e99d03..9adcedaa4613 100644 > --- a/drivers/rtc/rtc-hym8563.c > +++ b/drivers/rtc/rtc-hym8563.c > @@ -13,6 +13,7 @@ > #include <linux/clk-provider.h> > #include <linux/i2c.h> > #include <linux/bcd.h> > +#include <linux/delay.h> > #include <linux/rtc.h> > > #define HYM8563_CTL1 0x00 > @@ -438,10 +439,16 @@ static irqreturn_t hym8563_irq(int irq, void *dev_id) > > static int hym8563_init_device(struct i2c_client *client) > { > - int ret; > + int ret, i; > > /* Clear stop flag if present */ > - ret = i2c_smbus_write_byte_data(client, HYM8563_CTL1, 0); > + for (i = 0; i < 3; i++) { > + ret = i2c_smbus_write_byte_data(client, HYM8563_CTL1, 0); > + if (ret == 0) > + break; > + msleep(20); > + } > + > if (ret < 0) > return ret; >
diff --git a/drivers/rtc/rtc-hym8563.c b/drivers/rtc/rtc-hym8563.c index 90e602e99d03..9adcedaa4613 100644 --- a/drivers/rtc/rtc-hym8563.c +++ b/drivers/rtc/rtc-hym8563.c @@ -13,6 +13,7 @@ #include <linux/clk-provider.h> #include <linux/i2c.h> #include <linux/bcd.h> +#include <linux/delay.h> #include <linux/rtc.h> #define HYM8563_CTL1 0x00 @@ -438,10 +439,16 @@ static irqreturn_t hym8563_irq(int irq, void *dev_id) static int hym8563_init_device(struct i2c_client *client) { - int ret; + int ret, i; /* Clear stop flag if present */ - ret = i2c_smbus_write_byte_data(client, HYM8563_CTL1, 0); + for (i = 0; i < 3; i++) { + ret = i2c_smbus_write_byte_data(client, HYM8563_CTL1, 0); + if (ret == 0) + break; + msleep(20); + } + if (ret < 0) return ret;