diff options
| author | Stefano Babic <sbabic@denx.de> | 2010-04-16 17:11:19 +0200 | 
|---|---|---|
| committer | Stefano Babic <sbabic@denx.de> | 2010-05-05 09:48:41 +0200 | 
| commit | dfe5e14fa263eb8f1a9f087f0284788e7559821d (patch) | |
| tree | dab89f22049a3df99d302d7e2f5f92fc1f97c49b /drivers/rtc | |
| parent | 28bb6d34d3f431b7b00444e2f829b2c04f5daf4d (diff) | |
| download | olio-uboot-2014.01-dfe5e14fa263eb8f1a9f087f0284788e7559821d.tar.xz olio-uboot-2014.01-dfe5e14fa263eb8f1a9f087f0284788e7559821d.zip | |
MX: RTC13783 uses general function to access PMIC
The RTC is part of the Freescale's PMIC controller.
Use general function to access to PMIC internal registers.
Signed-off-by: Stefano Babic <sbabic@denx.de>
Tested-by: Magnus Lilja <lilja.magnus@gmail.com>
Diffstat (limited to 'drivers/rtc')
| -rw-r--r-- | drivers/rtc/mc13783-rtc.c | 72 | 
1 files changed, 15 insertions, 57 deletions
| diff --git a/drivers/rtc/mc13783-rtc.c b/drivers/rtc/mc13783-rtc.c index 416f50d01..4e18f80e9 100644 --- a/drivers/rtc/mc13783-rtc.c +++ b/drivers/rtc/mc13783-rtc.c @@ -23,53 +23,30 @@  #include <common.h>  #include <rtc.h>  #include <spi.h> - -static struct spi_slave *slave; +#include <fsl_pmic.h>  int rtc_get(struct rtc_time *rtc)  {  	u32 day1, day2, time; -	u32 reg; -	int err, tim, i = 0; - -	if (!slave) { -		/* FIXME: Verify the max SCK rate */ -		slave = spi_setup_slave(CONFIG_MC13783_SPI_BUS, -				CONFIG_MC13783_SPI_CS, 1000000, -				SPI_MODE_2 | SPI_CS_HIGH); -		if (!slave) -			return -1; -	} - -	if (spi_claim_bus(slave)) -		return -1; +	int tim, i = 0;  	do { -		reg = 0x2c000000; -		err = spi_xfer(slave, 32, (uchar *)®, (uchar *)&day1, -				SPI_XFER_BEGIN | SPI_XFER_END); - -		if (err) -			return err; - -		reg = 0x28000000; -		err = spi_xfer(slave, 32, (uchar *)®, (uchar *)&time, -				SPI_XFER_BEGIN | SPI_XFER_END); +		day1 = pmic_reg_read(REG_RTC_DAY); +		if (day1 < 0) +			return -1; -		if (err) -			return err; +		time = pmic_reg_read(REG_RTC_TIME); +		if (time < 0) +			return -1; -		reg = 0x2c000000; -		err = spi_xfer(slave, 32, (uchar *)®, (uchar *)&day2, -				SPI_XFER_BEGIN | SPI_XFER_END); +		day2 = pmic_reg_read(REG_RTC_DAY); +		if (day2 < 0) +			return -1; -		if (err) -			return err;  	} while (day1 != day2 && i++ < 3); -	spi_release_bus(slave); -  	tim = day1 * 86400 + time; +  	to_tm(tim, rtc);  	rtc->tm_yday = 0; @@ -80,34 +57,15 @@ int rtc_get(struct rtc_time *rtc)  int rtc_set(struct rtc_time *rtc)  { -	u32 time, day, reg; - -	if (!slave) { -		/* FIXME: Verify the max SCK rate */ -		slave = spi_setup_slave(CONFIG_MC13783_SPI_BUS, -				CONFIG_MC13783_SPI_CS, 1000000, -				SPI_MODE_2 | SPI_CS_HIGH); -		if (!slave) -			return -1; -	} +	u32 time, day;  	time = mktime(rtc->tm_year, rtc->tm_mon, rtc->tm_mday,  		      rtc->tm_hour, rtc->tm_min, rtc->tm_sec);  	day = time / 86400;  	time %= 86400; -	if (spi_claim_bus(slave)) -		return -1; - -	reg = 0x2c000000 | day | 0x80000000; -	spi_xfer(slave, 32, (uchar *)®, (uchar *)&day, -			SPI_XFER_BEGIN | SPI_XFER_END); - -	reg = 0x28000000 | time | 0x80000000; -	spi_xfer(slave, 32, (uchar *)®, (uchar *)&time, -			SPI_XFER_BEGIN | SPI_XFER_END); - -	spi_release_bus(slave); +	pmic_reg_write(REG_RTC_DAY, day); +	pmic_reg_write(REG_RTC_TIME, time);  	return 0;  } |