-------------------------------------------- On Thu, 1/5/17, bret.ng via rtc-linux <rtc-linux@googlegroups.com> wrote:
Subject: Re: [rtc-linux] [PATCH] rtc: Add support for RX4035 To: rtc-linux@googlegroups.com Date: Thursday, January 5, 2017, 12:40 AM -------------------------------------------- On Wed, 1/4/17, Alexandre Belloni <alexandre.bell...@free-electrons.com> wrote: Subject: Re: [rtc-linux] [PATCH] rtc: Add support for RX4035 To: "Ryan Jones" <r...@rjones.io> Cc: rtc-linux@googlegroups.com Date: Wednesday, January 4, 2017, 11:57 PM Hi, Sorry for the late review! On 05/08/2016 at 11:54:36 -0600, Ryan Jones wrote : > + * Based on: > + * drivers/rtc/rtc-rx4581.c I'd argue that it doesn't really matter ;) > +#define RX4035_REG_SC 0x00 /* Second in BCD */ > +#define RX4035_REG_MN 0x01 /* Minute in BCD */ > +#define RX4035_REG_HR 0x02 /* Hour in BCD */ > +#define RX4035_REG_DW 0x03 /* Day of Week */ > +#define RX4035_REG_DM 0x04 /* Day of Month in BCD */ > +#define RX4035_REG_MO 0x05 /* Month in BCD */ > +#define RX4035_REG_YR 0x06 /* Year in BCD */ > +#define RX4035_REG_RAM 0x0D /* RAM */ > +#define RX4035_REG_CTL1 0x0E /* Control Register 1*/ > +#define RX4035_REG_CTL2 0x0F /* Control Register 2*/ > + > +/* Flag Register bit definitions */ > +#define RX4035_FLAG_VDET 0x40 /* Low Voltage Detection */ > +#define RX4035_FLAG_PON 0x10 /* Indicates a Power On condition */ Please use BIT(). > + > +static int rx4035_set_reg(struct spi_device *spi, unsigned char address, > + unsigned char data) > +{ > + unsigned char buf[2]; > + > + /*Set MSB to indicate a write transfer*/ > + buf[0] = (address<<4) | 0x08; checkpatch --strict is complaining about spaces here and also a few alignements later. Can you fix those? > + buf[1] = data; > + > + return spi_write_then_read(spi, buf, 2, NULL, 0); > +} > + > +static int rx4035_get_reg(struct spi_device *spi, unsigned char address, > + unsigned char *data) > +{ > + /*Set MSB to indicate a write transfer*/ This comment is probably wrong... > + *data = (address<<4) | 0x0c; > + > + return spi_write_then_read(spi, data, 1, data, 1); > +} > + > +/* > + * In the routines that deal directly with the rx4035 hardware, we use > + * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch. > + */ This comment is not useful > +static int rx4035_get_datetime(struct device *dev, struct rtc_time *tm) > +{ > + struct spi_device *spi = to_spi_device(dev); > + unsigned char date[7]; > + unsigned char data; > + int err; > + > + /*Check that data is reliable*/ > + err = rx4035_get_reg(spi, RX4035_REG_CTL1, &data); > + if (err != 0) { > + dev_err(dev, "Unable to read control register\n"); > + return -EIO; > + } > + if (data & (RX4035_FLAG_VDET | RX4035_FLAG_PON)) > + dev_err(dev, "RTC DATA UNRELIABLE - battery voltage fell below minimum value\n"); It prints an error but the function continues as if nothing happend so userspace doesn't actually know something is wrong. You probably need to return -EINVAL here. > + > + /* Read time and date */ > + date[0] = 0x04; This is a magic value. I understand what it does but maybe you could have a define for each read and write mode and then remove the (inaccurate) comments. > + err = spi_write_then_read(spi, date, 1, date, 7); > + if (err < 0) { > + dev_err(dev, "Unable to read date\n"); > + return -EIO; > + } > + > + dev_dbg(dev, > + "%s: raw data is sec=%02x, min=%02x, hr=%02x, wday=%02x, mday=%02x, mon=%02x, year=%02x\n", > + __func__, > + date[0], date[1], date[2], date[3], date[4], date[5], date[6]); > + > + tm->tm_sec = bcd2bin(date[RX4035_REG_SC] & 0x7F); > + tm->tm_min = bcd2bin(date[RX4035_REG_MN] & 0x7F); > + tm->tm_hour = bcd2bin(date[RX4035_REG_HR] & 0x3F); /* rtc hr 0-23 */ > + tm->tm_wday = date[RX4035_REG_DW] & 0x7F; > + tm->tm_mday = bcd2bin(date[RX4035_REG_DM] & 0x3F); > + tm->tm_mon = bcd2bin(date[RX4035_REG_MO] & 0x1F) - 1; /* rtc mn 1-12 */ > + tm->tm_year = bcd2bin(date[RX4035_REG_YR]); > + if (tm->tm_year < 70) > + tm->tm_year += 100; /* assume we are in 1970...2069 */ This is bad and usually doesn't work properly. The datasheet explicitly state: "The auto calendar function updates all dates, months, and years from January 1, 2001 to December 31, 2099." It will not work outside this range. The leap year handling will certainly fail at the edges. -- Alexandre Belloni, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com -- You received this message because you are subscribed to "rtc-linux". Membership options at http://groups.google.com/group/rtc-linux . Please read http://groups.google.com/group/rtc-linux/web/checklist before submitting a driver. --- You received this message because you are subscribed to the Google Groups "rtc-linux" group. To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout. entre de presa politica germana Centre de presa politica maghiara | Aparitia unor organe de presa muncitoresti Asociatii stiintifice culturale si academice0 W Periodice de cultura stiintifice -- You received this message because you are subscribed to "rtc-linux". Membership options at http://groups.google.com/group/rtc-linux . Please read http://groups.google.com/group/rtc-linux/web/checklist before submitting a driver. --- You received this message because you are subscribed to the Google Groups "rtc-linux" group. To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.ntre timp in tara se inregistreaza primul semn de sange al veacului. tarani rasculati la 1907 sunt ucisi sau raniti de armata din ordinul autoritatilor presate si de un factor extrem de periculos armatele Austro-Ungariei ocupa pozitii de atac pe linia Carpatilor iar cele ale Rusiei la Prut . Dumnezeu sa-i ierte scrie N. lorga in ziarul Neamul Romanesc indemnand la o reconciliere din care rezulta prezenta eroica a fiilor satelor in Razboiul pentru Reintregirea Nationala 1916-1919 . Mobilizati de un guvern condus de Ion I.C. Bratianu si comandati intre alti generali de Alexandru Averescu peste 800 000 de ostasi participa la cele trei campanii de pe frontul romanesc 300 000 dintre ei jertfindu-si viata pentru supremul ideal national. -- You received this message because you are subscribed to "rtc-linux". Membership options at http://groups.google.com/group/rtc-linux . Please read http://groups.google.com/group/rtc-linux/web/checklist before submitting a driver. --- You received this message because you are subscribed to the Google Groups "rtc-linux" group. To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.