diff options
Diffstat (limited to 'drivers/rtc/rtc-mxc.c')
| -rw-r--r-- | drivers/rtc/rtc-mxc.c | 34 | 
1 files changed, 31 insertions, 3 deletions
diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c index cd0106293a4..7304139934a 100644 --- a/drivers/rtc/rtc-mxc.c +++ b/drivers/rtc/rtc-mxc.c @@ -17,8 +17,6 @@  #include <linux/platform_device.h>  #include <linux/clk.h> -#include <mach/hardware.h> -  #define RTC_INPUT_CLK_32768HZ	(0x00 << 5)  #define RTC_INPUT_CLK_32000HZ	(0x01 << 5)  #define RTC_INPUT_CLK_38400HZ	(0x02 << 5) @@ -72,14 +70,38 @@ static const u32 PIE_BIT_DEF[MAX_PIE_NUM][2] = {  #define RTC_TEST2	0x2C	/*  32bit rtc test reg 2 */  #define RTC_TEST3	0x30	/*  32bit rtc test reg 3 */ +enum imx_rtc_type { +	IMX1_RTC, +	IMX21_RTC, +}; +  struct rtc_plat_data {  	struct rtc_device *rtc;  	void __iomem *ioaddr;  	int irq;  	struct clk *clk;  	struct rtc_time g_rtc_alarm; +	enum imx_rtc_type devtype;  }; +static struct platform_device_id imx_rtc_devtype[] = { +	{ +		.name = "imx1-rtc", +		.driver_data = IMX1_RTC, +	}, { +		.name = "imx21-rtc", +		.driver_data = IMX21_RTC, +	}, { +		/* sentinel */ +	} +}; +MODULE_DEVICE_TABLE(platform, imx_rtc_devtype); + +static inline int is_imx1_rtc(struct rtc_plat_data *data) +{ +	return data->devtype == IMX1_RTC; +} +  /*   * This function is used to obtain the RTC time or the alarm value in   * second. @@ -278,10 +300,13 @@ static int mxc_rtc_read_time(struct device *dev, struct rtc_time *tm)   */  static int mxc_rtc_set_mmss(struct device *dev, unsigned long time)  { +	struct platform_device *pdev = to_platform_device(dev); +	struct rtc_plat_data *pdata = platform_get_drvdata(pdev); +  	/*  	 * TTC_DAYR register is 9-bit in MX1 SoC, save time and day of year only  	 */ -	if (cpu_is_mx1()) { +	if (is_imx1_rtc(pdata)) {  		struct rtc_time tm;  		rtc_time_to_tm(time, &tm); @@ -360,6 +385,8 @@ static int __devinit mxc_rtc_probe(struct platform_device *pdev)  	if (!pdata)  		return -ENOMEM; +	pdata->devtype = pdev->id_entry->driver_data; +  	if (!devm_request_mem_region(&pdev->dev, res->start,  				     resource_size(res), pdev->name))  		return -EBUSY; @@ -480,6 +507,7 @@ static struct platform_driver mxc_rtc_driver = {  #endif  		   .owner	= THIS_MODULE,  	}, +	.id_table = imx_rtc_devtype,  	.probe = mxc_rtc_probe,  	.remove = __devexit_p(mxc_rtc_remove),  };  |