On 07/09/2018 21:35:08+0200, Sam Ravnborg wrote: > From: Søren Andersen <san@xxxxxxx> > > Add support for specifying the quartz load in the DT node. > The pcf85063 may use either a 7 pF or an 12.5 pF xtal. > If the rtc has the wrong configuration the time will > drift several hours/week. > > If nothing is specified in DT then the factory default of 7 pF is used. > > Signed-off-by: Søren Andersen <san@xxxxxxx> > Signed-off-by: Sam Ravnborg <sam@xxxxxxxxxxxx> > Cc: Alessandro Zummo <a.zummo@xxxxxxxxxxxx> > Cc: Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx> > --- > drivers/rtc/rtc-pcf85063.c | 31 +++++++++++++++++++++++++++++++ > 1 file changed, 31 insertions(+) > > diff --git a/drivers/rtc/rtc-pcf85063.c b/drivers/rtc/rtc-pcf85063.c > index 283c2335b01b..38163446664f 100644 > --- a/drivers/rtc/rtc-pcf85063.c > +++ b/drivers/rtc/rtc-pcf85063.c > @@ -27,6 +27,7 @@ > */ > > #define PCF85063_REG_CTRL1 0x00 /* status */ > +#define PCF85063_REG_CTRL1_CAP_SEL BIT(0) > #define PCF85063_REG_CTRL1_STOP BIT(5) > #define PCF85063_REG_CTRL2 0x01 > > @@ -180,6 +181,31 @@ static const struct rtc_class_ops pcf85063_rtc_ops = { > .set_time = pcf85063_rtc_set_time > }; > > +static int pcf85063_select_capacitance(struct i2c_client *client) > +{ > + int rc; > + u8 reg; > + > + rc = i2c_smbus_read_byte_data(client, PCF85063_REG_CTRL1); > + if (rc < 0) { > + dev_err(&client->dev, "Failing to read Control1 reg\n"); > + return -EIO; > + } > + > + if (device_property_present(&client->dev, "nxp,quartz_load_12.5pf")) > + reg = rc |= PCF85063_REG_CTRL1_CAP_SEL; > + else > + reg = rc &= ~PCF85063_REG_CTRL1_CAP_SEL; That one is more straight forward, set it to the value from DT or leave it alone. -- Alexandre Belloni, Bootlin Embedded Linux and Kernel engineering https://bootlin.com