Skip to content
Snippets Groups Projects
Select Git revision
  • 13f6f62f61b4d3d5f45bed889128bb7ff3fda5ed
  • vme-testing default
  • ci-test
  • master
  • remoteproc
  • am625-sk-ov5640
  • pcal6534-upstreaming
  • lps22df-upstreaming
  • msc-upstreaming
  • imx8mp
  • iio/noa1305
  • vme-next
  • vme-next-4.14-rc4
  • v4.14-rc4
  • v4.14-rc3
  • v4.14-rc2
  • v4.14-rc1
  • v4.13
  • vme-next-4.13-rc7
  • v4.13-rc7
  • v4.13-rc6
  • v4.13-rc5
  • v4.13-rc4
  • v4.13-rc3
  • v4.13-rc2
  • v4.13-rc1
  • v4.12
  • v4.12-rc7
  • v4.12-rc6
  • v4.12-rc5
  • v4.12-rc4
  • v4.12-rc3
32 results

rtc-ds3232.c

Blame
  • rtc-ds3232.c 13.61 KiB
    /*
     * RTC client/driver for the Maxim/Dallas DS3232/DS3234 Real-Time Clock
     *
     * Copyright (C) 2009-2011 Freescale Semiconductor.
     * Author: Jack Lan <jack.lan@freescale.com>
     * Copyright (C) 2008 MIMOMax Wireless Ltd.
     *
     * This program is free software; you can redistribute  it and/or modify it
     * under  the terms of  the GNU General  Public License as published by the
     * Free Software Foundation;  either version 2 of the  License, or (at your
     * option) any later version.
     */
    
    #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
    
    #include <linux/kernel.h>
    #include <linux/module.h>
    #include <linux/interrupt.h>
    #include <linux/i2c.h>
    #include <linux/spi/spi.h>
    #include <linux/rtc.h>
    #include <linux/bcd.h>
    #include <linux/slab.h>
    #include <linux/regmap.h>
    
    #define DS3232_REG_SECONDS	0x00
    #define DS3232_REG_MINUTES	0x01
    #define DS3232_REG_HOURS	0x02
    #define DS3232_REG_AMPM		0x02
    #define DS3232_REG_DAY		0x03
    #define DS3232_REG_DATE		0x04
    #define DS3232_REG_MONTH	0x05
    #define DS3232_REG_CENTURY	0x05
    #define DS3232_REG_YEAR		0x06
    #define DS3232_REG_ALARM1         0x07	/* Alarm 1 BASE */
    #define DS3232_REG_ALARM2         0x0B	/* Alarm 2 BASE */
    #define DS3232_REG_CR		0x0E	/* Control register */
    #	define DS3232_REG_CR_nEOSC        0x80
    #       define DS3232_REG_CR_INTCN        0x04
    #       define DS3232_REG_CR_A2IE        0x02
    #       define DS3232_REG_CR_A1IE        0x01
    
    #define DS3232_REG_SR	0x0F	/* control/status register */
    #	define DS3232_REG_SR_OSF   0x80
    #       define DS3232_REG_SR_BSY   0x04
    #       define DS3232_REG_SR_A2F   0x02
    #       define DS3232_REG_SR_A1F   0x01
    
    struct ds3232 {
    	struct device *dev;
    	struct regmap *regmap;
    	int irq;
    	struct rtc_device *rtc;
    
    	bool suspended;
    };
    
    static int ds3232_check_rtc_status(struct device *dev)
    {
    	struct ds3232 *ds3232 = dev_get_drvdata(dev);
    	int ret = 0;
    	int control, stat;
    
    	ret = regmap_read(ds3232->regmap, DS3232_REG_SR, &stat);
    	if (ret)
    		return ret;
    
    	if (stat & DS3232_REG_SR_OSF)
    		dev_warn(dev,
    				"oscillator discontinuity flagged, "