From: Alessandro Zummo <a.zummo@towertech.it>
To: RAGHAVENDRA GANIGA <ravi23ganiga@gmail.com>
Cc: linux-kernel@vger.kernel.org, rtc-linux@googlegroups.com
Subject: Re: [PATCH] rtc: add support for maxim dallas rtc ds1347
Date: Thu, 20 Mar 2014 19:22:49 +0100 [thread overview]
Message-ID: <20140320192249.72f0288a@linux.lan.towertech.it> (raw)
In-Reply-To: <532B167D.80406@gmail.com>
On Thu, 20 Mar 2014 21:55:33 +0530
RAGHAVENDRA GANIGA <ravi23ganiga@gmail.com> wrote:
Thanks for your submission!
just a few comments below:
> ---
> drivers/rtc/Kconfig | 12 ++++
> drivers/rtc/Makefile | 1 +
> drivers/rtc/rtc-ds1347.c | 175 ++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 188 insertions(+)
> create mode 100644 drivers/rtc/rtc-ds1347.c
>
> diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
> index db933de..2e565f8 100644
> --- a/drivers/rtc/Kconfig
> +++ b/drivers/rtc/Kconfig
> @@ -573,6 +573,18 @@ config RTC_DRV_DS1305
> This driver can also be built as a module. If so, the module
> will be called rtc-ds1305.
>
> +config RTC_DRV_DS1347
> + tristate "Dallas/Maxim DS1347"
> + help
> + If you say yes here you get support for the
> + Dallas/Maxim DS1347 chips.
> +
> + This driver only supports the RTC feature, and not other chip
> + features such as alarms.
> +
> + This driver can also be built as a module. If so, the module
> + will be called rtc-ds1347.
> +
> config RTC_DRV_DS1390
> tristate "Dallas/Maxim DS1390/93/94"
> help
> diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
> index b427bf7..40a0991 100644
> --- a/drivers/rtc/Makefile
> +++ b/drivers/rtc/Makefile
> @@ -40,6 +40,7 @@ obj-$(CONFIG_RTC_DRV_DS1286) += rtc-ds1286.o
> obj-$(CONFIG_RTC_DRV_DS1302) += rtc-ds1302.o
> obj-$(CONFIG_RTC_DRV_DS1305) += rtc-ds1305.o
> obj-$(CONFIG_RTC_DRV_DS1307) += rtc-ds1307.o
> +obj-$(CONFIG_RTC_DRV_DS1347) += rtc-ds1347.o
> obj-$(CONFIG_RTC_DRV_DS1374) += rtc-ds1374.o
> obj-$(CONFIG_RTC_DRV_DS1390) += rtc-ds1390.o
> obj-$(CONFIG_RTC_DRV_DS1511) += rtc-ds1511.o
> diff --git a/drivers/rtc/rtc-ds1347.c b/drivers/rtc/rtc-ds1347.c
> new file mode 100644
> index 0000000..3c9a934
> --- /dev/null
> +++ b/drivers/rtc/rtc-ds1347.c
> @@ -0,0 +1,175 @@
> +/* rtc-ds1347.c
> + *
> + * Driver for Dallas Semiconductor DS1347 Low Current, SPI Compatible
> + * Real Time Clock
> + *
> + * Author : Raghavendra Chandra Ganiga <ravi23ganiga@gmail.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + */
> +
> +#include <linux/init.h>
> +#include <linux/module.h>
> +#include <linux/device.h>
> +#include <linux/platform_device.h>
> +#include <linux/rtc.h>
> +#include <linux/spi/spi.h>
> +#include <linux/bcd.h>
> +
> +/*Registers in ds1347 rtc*/
> +
> +#define DS1347_SECONDS_REG 0x01
> +#define DS1347_MINUTES_REG 0x03
> +#define DS1347_HOURS_REG 0x05
> +#define DS1347_DATE_REG 0x07
> +#define DS1347_MONTH_REG 0x09
> +#define DS1347_DAY_REG 0x0B
> +#define DS1347_YEAR_REG 0x0D
> +#define DS1347_CONTROL_REG 0x0F
> +#define DS1347_STATUS_REG 0x17
> +#define DS1347_CLOCK_BURST 0x3F
> +
> +
> +
> +static int ds1347_read_reg(struct device *dev, unsigned char address,
> + unsigned char *data)
> +{
> + struct spi_device *spi = to_spi_device(dev);
> +
> + *data = address | 0x80;
> +
> + return spi_write_then_read(spi, data, 1, data, 1);
> +}
> +
> +static int ds1347_write_reg(struct device *dev, unsigned char address,
> + unsigned char data)
> +{
> + struct spi_device *spi = to_spi_device(dev);
> + unsigned char buf[2];
> +
> + buf[0] = address & 0x7F;
> + buf[1] = data;
> +
> + return spi_write_then_read(spi, buf, 2, NULL, 0);
> +}
> +
> +static int ds1347_read_time(struct device *dev, struct rtc_time *dt)
> +{
> + struct spi_device *spi = to_spi_device(dev);
> + int err;
> + unsigned char buf[8];
> +
> + buf[0] = DS1347_CLOCK_BURST | 0x80;
> +
> + err = spi_write_then_read(spi, buf, 1, buf, 8);
> + if (err)
> + return err;
> +
> + dt->tm_sec = bcd2bin(buf[0]);
> + dt->tm_min = bcd2bin(buf[1]);
> + dt->tm_hour = bcd2bin(buf[2] & 0x3F);
> + dt->tm_mday = bcd2bin(buf[3]);
> + dt->tm_mon = bcd2bin(buf[4]) - 1;
> + dt->tm_wday = bcd2bin(buf[5]) - 1;
> + dt->tm_year = bcd2bin(buf[6]) + 100;
> +
> + return rtc_valid_tm(dt);
> +}
> +
> +static int ds1347_set_time(struct device *dev, struct rtc_time *dt)
> +{
> + struct spi_device *spi = to_spi_device(dev);
> + unsigned char buf[9];
> +
> + buf[0] = DS1347_CLOCK_BURST & 0x7F;
> + buf[1] = bin2bcd(dt->tm_sec);
> + buf[2] = bin2bcd(dt->tm_min);
> + buf[3] = (bin2bcd(dt->tm_hour) & 0x3F);
> + buf[4] = bin2bcd(dt->tm_mday);
> + buf[5] = bin2bcd(dt->tm_mon + 1);
> + buf[6] = bin2bcd(dt->tm_wday + 1);
> +
> + /*year in linux is from 1900 i.e in range of 100
> + in rtc it is from 00 to 99 so subtract
please leave a space after /*
> + the linux year by 100*/
and before */
(ditto for the other comments)
> + if (dt->tm_year >= 100)
> + dt->tm_year -= 100;
> +
> + buf[7] = bin2bcd(dt->tm_year);
> + buf[8] = bin2bcd(0x00);
> +
> + /*write the rtc settings*/
> + return spi_write_then_read(spi, buf, 9, NULL, 0);
> +}
> +
> +
> +
extra white lines
> +static const struct rtc_class_ops ds1347_rtc_ops = {
> + .read_time = ds1347_read_time,
> + .set_time = ds1347_set_time,
> +};
> +
> +static int ds1347_probe(struct spi_device *spi)
> +{
> + struct rtc_device *rtc;
> + unsigned char data;
> + int res;
> +
> + /*spi setup with ds1347 in mode 3 and bits per word as 8*/
> + spi->mode = SPI_MODE_3;
> + spi->bits_per_word = 8;
> + spi_setup(spi);
> +
> + /*RTC Settings*/
> +
unnecessary comment
> + /*check if spi read is successfull*/
unnecessary comment, this is pretty clear
> + res = ds1347_read_reg(&spi->dev, DS1347_SECONDS_REG, &data);
> + if (res)
> + return res;
> +
> + /*Disable the write protect of rtc*/
> + ds1347_read_reg(&spi->dev, DS1347_CONTROL_REG, &data);
> + data = data & ~(1<<7);
> + ds1347_write_reg(&spi->dev, DS1347_CONTROL_REG, data);
> +
> + /*Enable the oscillator , disable the oscillator stop flag,
> + and glitch filter to reduce current consumption*/
> + ds1347_read_reg(&spi->dev, DS1347_STATUS_REG, &data);
> + data = data & 0x1B;
> + ds1347_write_reg(&spi->dev, DS1347_STATUS_REG, data);
> +
> + /*display the settings*/
> + ds1347_read_reg(&spi->dev, DS1347_CONTROL_REG, &data);
> + dev_info(&spi->dev, "DS1347 RTC CTRL Reg = 0x%02x\n", data);
> +
> + ds1347_read_reg(&spi->dev, DS1347_STATUS_REG, &data);
> + dev_info(&spi->dev, "DS1347 RTC Status Reg = 0x%02x\n", data);
> +
> + rtc = devm_rtc_device_register(&spi->dev, "ds1347",
> + &ds1347_rtc_ops, THIS_MODULE);
> +
> + if (IS_ERR(rtc))
> + return PTR_ERR(rtc);
> +
> + spi_set_drvdata(spi, rtc);
> +
> + return 0;
> +}
> +
> +static struct spi_driver ds1347_driver = {
> + .driver = {
> + .name = "ds1347",
> + .owner = THIS_MODULE,
> + },
> + .probe = ds1347_probe,
> +};
> +
> +module_spi_driver(ds1347_driver);
> +
> +MODULE_DESCRIPTION("DS1347 SPI RTC DRIVER");
> +MODULE_AUTHOR("Raghavendra C Ganiga <ravi23ganiga@gmail.com>");
> +MODULE_LICENSE("GPL");
should be GPL v2
as you declared in the comments at the top of the file.
--
Best regards,
Alessandro Zummo,
Tower Technologies - Torino, Italy
http://www.towertech.it
next prev parent reply other threads:[~2014-03-20 18:22 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-20 16:25 [PATCH] rtc: add support for maxim dallas rtc ds1347 RAGHAVENDRA GANIGA
2014-03-20 18:22 ` Alessandro Zummo [this message]
-- strict thread matches above, loose matches on Subject: below --
2014-03-20 19:00 RAGHAVENDRA GANIGA
2014-03-20 19:19 ` Joe Perches
2014-03-20 21:01 ` Alessandro Zummo
2014-03-20 21:08 ` Joe Perches
2014-03-21 14:35 RAGHAVENDRA GANIGA
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140320192249.72f0288a@linux.lan.towertech.it \
--to=a.zummo@towertech.it \
--cc=linux-kernel@vger.kernel.org \
--cc=ravi23ganiga@gmail.com \
--cc=rtc-linux@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.