drop IRQF_DISABLED from RTC, then convert stmp-rtc to mach-mxs
Subsystems (5)
cover drop IRQF_DISABLED from RTC, then convert stmp-rtc to mach-mxs
First, cleanup RTC to remove the deprecated IRQF_DISABLED which is a nop these days.
Then, because plat-stmp is going to be removed and merged with mxs, this patch series will convert the stmp-rtc driver for usage with mach-mxs. Quite some platform-specific dependencies have been removed, so the driver should be better reusable.
The driver has successfully been tested on an i.MX28-board and passed the RTC test program.
Regards,
Wolfram
Wolfram Sang (6):
rtc: remove IRQF_DISABLED
rtc: stmp3xxx: get rid of platform-specific register include
rtc: stmp3xxx: port stmp-functions to mxs-equivalents
rtc: stmp3xxx: fix crash on boot
rtc: stmp3xxx: get rid of mach-specific accessors
rtc: stmp3xxx: remove UIE handlers
drivers/rtc/Kconfig | 6 +- drivers/rtc/rtc-at91sam9.c | 3 +- drivers/rtc/rtc-cmos.c | 5 +- drivers/rtc/rtc-coh901331.c | 2 +- drivers/rtc/rtc-davinci.c | 2 +- drivers/rtc/rtc-ds1511.c | 2 +- drivers/rtc/rtc-ds1553.c | 2 +- drivers/rtc/rtc-lpc32xx.c | 2 +- drivers/rtc/rtc-mpc5121.c | 4 +- drivers/rtc/rtc-mrst.c | 5 +- drivers/rtc/rtc-mv.c | 3 +- drivers/rtc/rtc-nuc900.c | 2 +- drivers/rtc/rtc-omap.c | 4 +- drivers/rtc/rtc-pl030.c | 3 +- drivers/rtc/rtc-pl031.c | 2 +- drivers/rtc/rtc-pxa.c | 6 +- drivers/rtc/rtc-s3c.c | 4 +- drivers/rtc/rtc-sa1100.c | 4 +- drivers/rtc/rtc-sh.c | 8 +- drivers/rtc/rtc-stk17ta8.c | 3 +- drivers/rtc/rtc-stmp3xxx.c | 150 ++++++++++++++++++++++--------------------- drivers/rtc/rtc-tx4939.c | 2 +- drivers/rtc/rtc-vr41xx.c | 4 +- 23 files changed, 112 insertions(+), 116 deletions(-)
Signature · 1 line
1.7.2.5
PATCH 1/6 rtc: remove IRQF_DISABLED
It is deprecated and currently a NOP.
--- drivers/rtc/rtc-at91sam9.c | 3 +-- drivers/rtc/rtc-cmos.c | 5 ++--- drivers/rtc/rtc-coh901331.c | 2 +- drivers/rtc/rtc-davinci.c | 2 +- drivers/rtc/rtc-ds1511.c | 2 +- drivers/rtc/rtc-ds1553.c | 2 +- drivers/rtc/rtc-lpc32xx.c | 2 +- drivers/rtc/rtc-mpc5121.c | 4 ++-- drivers/rtc/rtc-mrst.c | 5 ++--- drivers/rtc/rtc-mv.c | 3 +-- drivers/rtc/rtc-nuc900.c | 2 +- drivers/rtc/rtc-omap.c | 4 ++-- drivers/rtc/rtc-pl030.c | 3 +-- drivers/rtc/rtc-pl031.c | 2 +- drivers/rtc/rtc-pxa.c | 6 ++---- drivers/rtc/rtc-s3c.c | 4 ++-- drivers/rtc/rtc-sa1100.c | 4 ++-- drivers/rtc/rtc-sh.c | 8 ++++---- drivers/rtc/rtc-stk17ta8.c | 3 +-- drivers/rtc/rtc-stmp3xxx.c | 4 ++-- drivers/rtc/rtc-tx4939.c | 2 +- drivers/rtc/rtc-vr41xx.c | 4 ++-- 22 files changed, 34 insertions(+), 42 deletions(-)
drivers/rtc/rtc-at91sam9.c +1 -2
@@ -330,8 +330,7 @@ static int __init at91_rtc_probe(struct platform_device *pdev) }/* register irq handler after we know what name we'll use */ - ret =request_irq (AT91_ID_SYS , at91_rtc_interrupt, -IRQF_DISABLED |IRQF_SHARED , + ret =request_irq (AT91_ID_SYS , at91_rtc_interrupt,IRQF_SHARED ,dev_name (&rtc->rtcdev->dev), rtc);if (ret) {dev_dbg (&pdev->dev,"can't share IRQ %d?\n" ,AT91_ID_SYS );
drivers/rtc/rtc-cmos.c +2 -3
@@ -713,9 +713,8 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq) }else rtc_cmos_int_handler = cmos_interrupt; - retval =request_irq (rtc_irq, rtc_cmos_int_handler, -IRQF_DISABLED ,dev_name (&cmos_rtc.rtc->dev), - cmos_rtc.rtc); + retval =request_irq (rtc_irq, rtc_cmos_int_handler,0 , +dev_name (&cmos_rtc.rtc->dev), cmos_rtc.rtc);if (retval <0 ) {dev_dbg (dev,"IRQ %d is already in use\n" , rtc_irq); goto cleanup1;
drivers/rtc/rtc-coh901331.c +1 -1
@@ -199,7 +199,7 @@ static int __init coh901331_probe(struct platform_device *pdev) } rtap->irq =platform_get_irq (pdev,0 ); -if (request_irq (rtap->irq, coh901331_interrupt,IRQF_DISABLED , +if (request_irq (rtap->irq, coh901331_interrupt,0 ,"RTC COH 901 331 Alarm" , rtap)) { ret = -EIO ; goto out_no_irq;
drivers/rtc/rtc-davinci.c +1 -1
@@ -540,7 +540,7 @@ static int __init davinci_rtc_probe(struct platform_device *pdev)rtcss_write (davinci_rtc,0 ,PRTCSS_RTC_CCTRL ); ret =request_irq (davinci_rtc->irq, davinci_rtc_interrupt, -IRQF_DISABLED ,"davinci_rtc" , davinci_rtc); +0 ,"davinci_rtc" , davinci_rtc);if (ret <0 ) {dev_err (dev,"unable to register davinci RTC interrupt\n" ); goto fail4;
drivers/rtc/rtc-ds1511.c +1 -1
@@ -531,7 +531,7 @@ ds1511_rtc_probe(struct platform_device *pdev)if (pdata->irq >0 ) {rtc_read (RTC_CMD1 );if (devm_request_irq (&pdev->dev, pdata->irq, ds1511_interrupt, -IRQF_DISABLED |IRQF_SHARED , pdev->name, pdev) <0 ) { +IRQF_SHARED , pdev->name, pdev) <0 ) {dev_warn (&pdev->dev,"interrupt not available.\n" ); pdata->irq =0 ;
drivers/rtc/rtc-ds1553.c +1 -1
@@ -319,7 +319,7 @@ static int __devinit ds1553_rtc_probe(struct platform_device *pdev)writeb (0 , ioaddr +RTC_INTERRUPTS );if (devm_request_irq (&pdev->dev, pdata->irq, ds1553_rtc_interrupt, -IRQF_DISABLED , pdev->name, pdev) <0 ) { +0 , pdev->name, pdev) <0 ) {dev_warn (&pdev->dev,"interrupt not available.\n" ); pdata->irq =0 ; }
drivers/rtc/rtc-lpc32xx.c +1 -1
@@ -287,7 +287,7 @@ static int __devinit lpc32xx_rtc_probe(struct platform_device *pdev)if (rtc->irq >=0 ) {if (devm_request_irq (&pdev->dev, rtc->irq, lpc32xx_rtc_alarm_interrupt, -IRQF_DISABLED , pdev->name, rtc) <0 ) { +0 , pdev->name, rtc) <0 ) {dev_warn (&pdev->dev,"Can't request interrupt.\n" ); rtc->irq =-1 ; }else {
drivers/rtc/rtc-mpc5121.c +2 -2
@@ -270,7 +270,7 @@ static int __devinit mpc5121_rtc_probe(struct platform_device *op)dev_set_drvdata (&op->dev, rtc); rtc->irq =irq_of_parse_and_map (op->dev.of_node,1 ); - err =request_irq (rtc->irq, mpc5121_rtc_handler,IRQF_DISABLED , + err =request_irq (rtc->irq, mpc5121_rtc_handler,0 ,"mpc5121-rtc" , &op->dev);if (err) { dev_err(&op->dev, "%s: could not request irq: %i\n",
@@ -280,7 +280,7 @@ static int __devinit mpc5121_rtc_probe(struct platform_device *op) rtc->irq_periodic =irq_of_parse_and_map (op->dev.of_node,0 ); err =request_irq (rtc->irq_periodic, mpc5121_rtc_handler_upd, -IRQF_DISABLED ,"mpc5121-rtc_upd" , &op->dev); +0 ,"mpc5121-rtc_upd" , &op->dev);if (err) {dev_err (&op->dev,"%s: could not request irq: %i\n" , __func__, rtc->irq_periodic);
drivers/rtc/rtc-mrst.c +2 -3
@@ -363,9 +363,8 @@ vrtc_mrst_do_probe(struct device *dev, struct resource *iomem, int rtc_irq)dev_dbg (dev,"TODO: support more than 24-hr BCD mode\n" );if (rtc_irq) { - retval =request_irq (rtc_irq, mrst_rtc_irq, -IRQF_DISABLED ,dev_name (&mrst_rtc.rtc->dev), - mrst_rtc.rtc); + retval =request_irq (rtc_irq, mrst_rtc_irq,0 , +dev_name (&mrst_rtc.rtc->dev), mrst_rtc.rtc);if (retval <0 ) {dev_dbg (dev,"IRQ %d is already in use, err %d\n" , rtc_irq, retval);
drivers/rtc/rtc-mv.c +1 -2
@@ -272,8 +272,7 @@ static int __devinit mv_rtc_probe(struct platform_device *pdev)if (pdata->irq >=0 ) {writel (0 , pdata->ioaddr +RTC_ALARM_INTERRUPT_MASK_REG_OFFS );if (devm_request_irq (&pdev->dev, pdata->irq, mv_rtc_interrupt, -IRQF_DISABLED |IRQF_SHARED , - pdev->name, pdata) <0 ) { +IRQF_SHARED , pdev->name, pdata) <0 ) {dev_warn (&pdev->dev,"interrupt not available.\n" ); pdata->irq =-1 ; }
drivers/rtc/rtc-nuc900.c +1 -1
@@ -269,7 +269,7 @@ static int __devinit nuc900_rtc_probe(struct platform_device *pdev) nuc900_rtc->irq_num =platform_get_irq (pdev,0 );if (request_irq (nuc900_rtc->irq_num, nuc900_rtc_interrupt, -IRQF_DISABLED ,"nuc900rtc" , nuc900_rtc)) { +0 ,"nuc900rtc" , nuc900_rtc)) {dev_err (&pdev->dev,"NUC900 RTC request irq failed\n" ); err = -EBUSY ; goto fail4;
drivers/rtc/rtc-omap.c +2 -2
@@ -348,14 +348,14 @@ static int __init omap_rtc_probe(struct platform_device *pdev)rtc_write (OMAP_RTC_STATUS_ALARM ,OMAP_RTC_STATUS_REG );/* handle periodic and alarm irqs */ -if (request_irq (omap_rtc_timer, rtc_irq,IRQF_DISABLED , +if (request_irq (omap_rtc_timer, rtc_irq,0 ,dev_name (&rtc->dev), rtc)) {pr_debug ("%s: RTC timer interrupt IRQ%d already claimed\n" , pdev->name, omap_rtc_timer); goto fail1; }if ((omap_rtc_timer != omap_rtc_alarm) && - (request_irq (omap_rtc_alarm, rtc_irq,IRQF_DISABLED , + (request_irq (omap_rtc_alarm, rtc_irq,0 ,dev_name (&rtc->dev), rtc))) {pr_debug ("%s: RTC alarm interrupt IRQ%d already claimed\n" , pdev->name, omap_rtc_alarm);
drivers/rtc/rtc-pl030.c +1 -2
@@ -123,8 +123,7 @@ static int pl030_probe(struct amba_device *dev, const struct amba_id *id)amba_set_drvdata (dev, rtc); - ret =request_irq (dev->irq[0 ], pl030_interrupt,IRQF_DISABLED , -"rtc-pl030" , rtc); + ret =request_irq (dev->irq[0 ], pl030_interrupt,0 ,"rtc-pl030" , rtc);if (ret) goto err_irq;
drivers/rtc/rtc-pl031.c +1 -1
@@ -352,7 +352,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id) }if (request_irq (adev->irq[0 ], pl031_interrupt, -IRQF_DISABLED ,"rtc-pl031" , ldata)) { +0 ,"rtc-pl031" , ldata)) { ret = -EIO ; goto out_no_irq; }
drivers/rtc/rtc-pxa.c +2 -4
@@ -174,15 +174,13 @@ static int pxa_rtc_open(struct device *dev)struct pxa_rtc *pxa_rtc =dev_get_drvdata (dev);int ret; - ret =request_irq (pxa_rtc->irq_1Hz, pxa_rtc_irq,IRQF_DISABLED , -"rtc 1Hz" , dev); + ret =request_irq (pxa_rtc->irq_1Hz, pxa_rtc_irq,0 ,"rtc 1Hz" , dev);if (ret <0 ) {dev_err (dev,"can't get irq %i, err %d\n" , pxa_rtc->irq_1Hz, ret); goto err_irq_1Hz; } - ret =request_irq (pxa_rtc->irq_Alrm, pxa_rtc_irq,IRQF_DISABLED , -"rtc Alrm" , dev); + ret =request_irq (pxa_rtc->irq_Alrm, pxa_rtc_irq,0 ,"rtc Alrm" , dev);if (ret <0 ) {dev_err (dev,"can't get irq %i, err %d\n" , pxa_rtc->irq_Alrm, ret);
drivers/rtc/rtc-s3c.c +2 -2
@@ -307,7 +307,7 @@ static int s3c_rtc_open(struct device *dev)int ret; ret =request_irq (s3c_rtc_alarmno, s3c_rtc_alarmirq, -IRQF_DISABLED ,"s3c2410-rtc alarm" , rtc_dev); +0 ,"s3c2410-rtc alarm" , rtc_dev);if (ret) {dev_err (dev,"IRQ%d error %d\n" , s3c_rtc_alarmno, ret);
@@ -315,7 +315,7 @@ static int s3c_rtc_open(struct device *dev) } ret =request_irq (s3c_rtc_tickno, s3c_rtc_tickirq, -IRQF_DISABLED ,"s3c2410-rtc tick" , rtc_dev); +0 ,"s3c2410-rtc tick" , rtc_dev);if (ret) {dev_err (dev,"IRQ%d error %d\n" , s3c_rtc_tickno, ret);
drivers/rtc/rtc-sa1100.c +2 -2
@@ -161,13 +161,13 @@ static int sa1100_rtc_open(struct device *dev)struct platform_device *plat_dev =to_platform_device (dev);struct rtc_device *rtc =platform_get_drvdata (plat_dev); - ret =request_irq (IRQ_RTC1Hz, sa1100_rtc_interrupt,IRQF_DISABLED , + ret =request_irq (IRQ_RTC1Hz, sa1100_rtc_interrupt,0 ,"rtc 1Hz" , dev);if (ret) {dev_err (dev,"IRQ %d already in use.\n" , IRQ_RTC1Hz); goto fail_ui; } - ret =request_irq (IRQ_RTCAlrm, sa1100_rtc_interrupt,IRQF_DISABLED , + ret =request_irq (IRQ_RTCAlrm, sa1100_rtc_interrupt,0 ,"rtc Alrm" , dev);if (ret) {dev_err (dev,"IRQ %d already in use.\n" , IRQ_RTCAlrm);
drivers/rtc/rtc-sh.c +4 -4
@@ -666,7 +666,7 @@ static int __init sh_rtc_probe(struct platform_device *pdev)if (rtc->carry_irq <=0 ) {/* register shared periodic/carry/alarm irq */ ret =request_irq (rtc->periodic_irq, sh_rtc_shared, -IRQF_DISABLED ,"sh-rtc" , rtc); +0 ,"sh-rtc" , rtc);if (unlikely (ret)) { dev_err(&pdev->dev, "request IRQ failed with %d, IRQ %d\n", ret,
@@ -676,7 +676,7 @@ static int __init sh_rtc_probe(struct platform_device *pdev) }else {/* register periodic/carry/alarm irqs */ ret =request_irq (rtc->periodic_irq, sh_rtc_periodic, -IRQF_DISABLED ,"sh-rtc period" , rtc); +0 ,"sh-rtc period" , rtc);if (unlikely (ret)) { dev_err(&pdev->dev, "request period IRQ failed with %d, IRQ %d\n",
@@ -685,7 +685,7 @@ static int __init sh_rtc_probe(struct platform_device *pdev) } ret =request_irq (rtc->carry_irq, sh_rtc_interrupt, -IRQF_DISABLED ,"sh-rtc carry" , rtc); +0 ,"sh-rtc carry" , rtc);if (unlikely (ret)) { dev_err(&pdev->dev, "request carry IRQ failed with %d, IRQ %d\n",
@@ -695,7 +695,7 @@ static int __init sh_rtc_probe(struct platform_device *pdev) } ret =request_irq (rtc->alarm_irq, sh_rtc_alarm, -IRQF_DISABLED ,"sh-rtc alarm" , rtc); +0 ,"sh-rtc alarm" , rtc);if (unlikely (ret)) { dev_err(&pdev->dev, "request alarm IRQ failed with %d, IRQ %d\n",
drivers/rtc/rtc-stk17ta8.c +1 -2
@@ -327,8 +327,7 @@ static int __devinit stk17ta8_rtc_probe(struct platform_device *pdev)if (pdata->irq >0 ) {writeb (0 , ioaddr +RTC_INTERRUPTS );if (devm_request_irq (&pdev->dev, pdata->irq, - stk17ta8_rtc_interrupt, -IRQF_DISABLED |IRQF_SHARED , + stk17ta8_rtc_interrupt,IRQF_SHARED , pdev->name, pdev) <0 ) {dev_warn (&pdev->dev,"interrupt not available.\n" ); pdata->irq =0 ;
drivers/rtc/rtc-stmp3xxx.c +2 -2
@@ -208,14 +208,14 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev) rtc_data->irq_count =0 ; err =request_irq (rtc_data->irq_alarm, stmp3xxx_rtc_interrupt, -IRQF_DISABLED ,"RTC alarm" , &pdev->dev); +0 ,"RTC alarm" , &pdev->dev);if (err) {dev_err (&pdev->dev,"Cannot claim IRQ%d\n" , rtc_data->irq_alarm); goto out_irq_alarm; } err =request_irq (rtc_data->irq_1msec, stmp3xxx_rtc_interrupt, -IRQF_DISABLED ,"RTC tick" , &pdev->dev); +0 ,"RTC tick" , &pdev->dev);if (err) {dev_err (&pdev->dev,"Cannot claim IRQ%d\n" , rtc_data->irq_1msec);
drivers/rtc/rtc-tx4939.c +1 -1
@@ -265,7 +265,7 @@ static int __init tx4939_rtc_probe(struct platform_device *pdev)spin_lock_init (&pdata->lock);tx4939_rtc_cmd (pdata->rtcreg,TX4939_RTCCTL_COMMAND_NOP );if (devm_request_irq (&pdev->dev, irq, tx4939_rtc_interrupt, -IRQF_DISABLED , pdev->name, &pdev->dev) <0 ) +0 , pdev->name, &pdev->dev) <0 )return -EBUSY ; rtc =rtc_device_register (pdev->name, &pdev->dev, &tx4939_rtc_ops,THIS_MODULE );
drivers/rtc/rtc-vr41xx.c +2 -2
@@ -333,7 +333,7 @@ static int __devinit rtc_probe(struct platform_device *pdev) goto err_device_unregister; } - retval =request_irq (aie_irq, elapsedtime_interrupt,IRQF_DISABLED , + retval =request_irq (aie_irq, elapsedtime_interrupt,0 ,"elapsed_time" , pdev);if (retval <0 ) goto err_device_unregister;
@@ -342,7 +342,7 @@ static int __devinit rtc_probe(struct platform_device *pdev)if (pie_irq <=0 ) goto err_free_irq; - retval =request_irq (pie_irq, rtclong1_interrupt,IRQF_DISABLED , + retval =request_irq (pie_irq, rtclong1_interrupt,0 ,"rtclong1" , pdev);if (retval <0 ) goto err_free_irq;
Signature · 1 line
1.7.2.5
PATCH 2/6 rtc: stmp3xxx: get rid of platform-specific register include
In reply to Wolfram SangDefine the registers locally and rename defines to something closer to kernel style.
--- drivers/rtc/rtc-stmp3xxx.c | 92 ++++++++++++++++++++++++++------------------ 1 files changed, 55 insertions(+), 37 deletions(-)
drivers/rtc/rtc-stmp3xxx.c +55 -37
@@ -26,7 +26,25 @@#include <mach/platform.h> #include <mach/stmp3xxx.h> -#include <mach/regs-rtc.h> + +#define STMP3XXX_RTC_CTRL 0x0 +#define STMP3XXX_RTC_CTRL_ALARM_IRQ_EN 0x00000001 +#define STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN 0x00000002 +#define STMP3XXX_RTC_CTRL_ALARM_IRQ 0x00000004 +#define STMP3XXX_RTC_CTRL_ONEMSEC_IRQ 0x00000008 + +#define STMP3XXX_RTC_STAT 0x10 +#define STMP3XXX_RTC_STAT_STALE_SHIFT 16 +#define STMP3XXX_RTC_STAT_RTC_PRESENT 0x80000000 + +#define STMP3XXX_RTC_SECONDS 0x30 + +#define STMP3XXX_RTC_ALARM 0x40 + +#define STMP3XXX_RTC_PERSISTENT0 0x60 +#define STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN 0x00000002 +#define STMP3XXX_RTC_PERSISTENT0_ALARM_EN 0x00000004 +#define STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE 0x00000080struct stmp3xxx_rtc_data {struct rtc_device *rtc;
@@ -42,8 +60,8 @@ static void stmp3xxx_wait_time(struct stmp3xxx_rtc_data *rtc_data)* NEW_REGS/STALE_REGS bitfields go. In fact it's 0x1=P0, * 0x2=P1, .., 0x20=P5, 0x40=ALARM, 0x80=SECONDS */ -while (__raw_readl (rtc_data->io +HW_RTC_STAT ) & -BF (0x80 ,RTC_STAT_STALE_REGS )) +while (__raw_readl (rtc_data->io +STMP3XXX_RTC_STAT ) & + (0x80 <<STMP3XXX_RTC_STAT_STALE_SHIFT ))cpu_relax (); }
@@ -53,7 +71,7 @@ static int stmp3xxx_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)struct stmp3xxx_rtc_data *rtc_data =dev_get_drvdata (dev);stmp3xxx_wait_time (rtc_data); -rtc_time_to_tm (__raw_readl (rtc_data->io +HW_RTC_SECONDS ), rtc_tm); +rtc_time_to_tm (__raw_readl (rtc_data->io +STMP3XXX_RTC_SECONDS ), rtc_tm);return 0 ; }
@@ -61,7 +79,7 @@ static int stmp3xxx_rtc_set_mmss(struct device *dev, unsigned long t) {struct stmp3xxx_rtc_data *rtc_data =dev_get_drvdata (dev); -__raw_writel (t, rtc_data->io +HW_RTC_SECONDS ); +__raw_writel (t, rtc_data->io +STMP3XXX_RTC_SECONDS );stmp3xxx_wait_time (rtc_data);return 0 ; }
@@ -73,18 +91,18 @@ static irqreturn_t stmp3xxx_rtc_interrupt(int irq, void *dev_id)u32 status;u32 events =0 ; - status =__raw_readl (rtc_data->io +HW_RTC_CTRL ) & - (BM_RTC_CTRL_ALARM_IRQ |BM_RTC_CTRL_ONEMSEC_IRQ ); + status =__raw_readl (rtc_data->io +STMP3XXX_RTC_CTRL ) & + (STMP3XXX_RTC_CTRL_ALARM_IRQ |STMP3XXX_RTC_CTRL_ONEMSEC_IRQ ); -if (status &BM_RTC_CTRL_ALARM_IRQ ) { -stmp3xxx_clearl (BM_RTC_CTRL_ALARM_IRQ , - rtc_data->io +HW_RTC_CTRL ); +if (status &STMP3XXX_RTC_CTRL_ALARM_IRQ ) { +stmp3xxx_clearl (STMP3XXX_RTC_CTRL_ALARM_IRQ , + rtc_data->io +STMP3XXX_RTC_CTRL ); events |=RTC_AF |RTC_IRQF ; } -if (status &BM_RTC_CTRL_ONEMSEC_IRQ ) { -stmp3xxx_clearl (BM_RTC_CTRL_ONEMSEC_IRQ , - rtc_data->io +HW_RTC_CTRL ); +if (status &STMP3XXX_RTC_CTRL_ONEMSEC_IRQ ) { +stmp3xxx_clearl (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ , + rtc_data->io +STMP3XXX_RTC_CTRL );if (++rtc_data->irq_count %1000 ==0 ) { events |=RTC_UF |RTC_IRQF ; rtc_data->irq_count =0 ;
@@ -100,17 +118,17 @@ static irqreturn_t stmp3xxx_rtc_interrupt(int irq, void *dev_id)static int stmp3xxx_alarm_irq_enable (struct device *dev,unsigned int enabled) {struct stmp3xxx_rtc_data *rtc_data =dev_get_drvdata (dev); -void __iomem *p = rtc_data->io +HW_RTC_PERSISTENT0 , - *ctl = rtc_data->io +HW_RTC_CTRL ; +void __iomem *p = rtc_data->io +STMP3XXX_RTC_PERSISTENT0 , + *ctl = rtc_data->io +STMP3XXX_RTC_CTRL ;if (enabled) { -stmp3xxx_setl (BM_RTC_PERSISTENT0_ALARM_EN | -BM_RTC_PERSISTENT0_ALARM_WAKE_EN , p); -stmp3xxx_setl (BM_RTC_CTRL_ALARM_IRQ_EN , ctl); +stmp3xxx_setl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | +STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN , p); +stmp3xxx_setl (STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , ctl); }else { -stmp3xxx_clearl (BM_RTC_PERSISTENT0_ALARM_EN | -BM_RTC_PERSISTENT0_ALARM_WAKE_EN , p); -stmp3xxx_clearl (BM_RTC_CTRL_ALARM_IRQ_EN , ctl); +stmp3xxx_clearl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | +STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN , p); +stmp3xxx_clearl (STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , ctl); }return 0 ; }
@@ -119,7 +137,7 @@ static int stmp3xxx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm) {struct stmp3xxx_rtc_data *rtc_data =dev_get_drvdata (dev); -rtc_time_to_tm (__raw_readl (rtc_data->io +HW_RTC_ALARM ), &alm->time); +rtc_time_to_tm (__raw_readl (rtc_data->io +STMP3XXX_RTC_ALARM ), &alm->time);return 0 ; }
@@ -129,7 +147,7 @@ static int stmp3xxx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)struct stmp3xxx_rtc_data *rtc_data =dev_get_drvdata (dev);rtc_tm_to_time (&alm->time, &t); -__raw_writel (t, rtc_data->io +HW_RTC_ALARM ); +__raw_writel (t, rtc_data->io +STMP3XXX_RTC_ALARM );return 0 ; }
@@ -149,8 +167,8 @@ static int stmp3xxx_rtc_remove(struct platform_device *pdev)if (!rtc_data)return 0 ; -stmp3xxx_clearl (BM_RTC_CTRL_ONEMSEC_IRQ_EN |BM_RTC_CTRL_ALARM_IRQ_EN , - rtc_data->io +HW_RTC_CTRL ); +stmp3xxx_clearl (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , + rtc_data->io +STMP3XXX_RTC_CTRL );free_irq (rtc_data->irq_alarm, &pdev->dev);free_irq (rtc_data->irq_1msec, &pdev->dev);rtc_device_unregister (rtc_data->rtc);
@@ -187,18 +205,18 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev) rtc_data->irq_alarm =platform_get_irq (pdev,0 ); rtc_data->irq_1msec =platform_get_irq (pdev,1 ); -if (!(__raw_readl (HW_RTC_STAT + rtc_data->io) & -BM_RTC_STAT_RTC_PRESENT )) { +if (!(__raw_readl (STMP3XXX_RTC_STAT + rtc_data->io) & +STMP3XXX_RTC_STAT_RTC_PRESENT )) {dev_err (&pdev->dev,"no device onboard\n" ); err = -ENODEV ; goto out_remap; }stmp3xxx_reset_block (rtc_data->io, true); -stmp3xxx_clearl (BM_RTC_PERSISTENT0_ALARM_EN | -BM_RTC_PERSISTENT0_ALARM_WAKE_EN | -BM_RTC_PERSISTENT0_ALARM_WAKE , - rtc_data->io +HW_RTC_PERSISTENT0 ); +stmp3xxx_clearl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | +STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN | +STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE , + rtc_data->io +STMP3XXX_RTC_PERSISTENT0 ); rtc_data->rtc =rtc_device_register (pdev->name, &pdev->dev, &stmp3xxx_rtc_ops,THIS_MODULE );if (IS_ERR (rtc_data->rtc)) {
@@ -229,8 +247,8 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev) out_irq1:free_irq (rtc_data->irq_alarm, &pdev->dev); out_irq_alarm: -stmp3xxx_clearl (BM_RTC_CTRL_ONEMSEC_IRQ_EN |BM_RTC_CTRL_ALARM_IRQ_EN , - rtc_data->io +HW_RTC_CTRL ); +stmp3xxx_clearl (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , + rtc_data->io +STMP3XXX_RTC_CTRL );rtc_device_unregister (rtc_data->rtc); out_remap:iounmap (rtc_data->io);
@@ -250,10 +268,10 @@ static int stmp3xxx_rtc_resume(struct platform_device *dev)struct stmp3xxx_rtc_data *rtc_data =platform_get_drvdata (dev);stmp3xxx_reset_block (rtc_data->io, true); -stmp3xxx_clearl (BM_RTC_PERSISTENT0_ALARM_EN | -BM_RTC_PERSISTENT0_ALARM_WAKE_EN | -BM_RTC_PERSISTENT0_ALARM_WAKE , - rtc_data->io +HW_RTC_PERSISTENT0 ); +stmp3xxx_clearl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | +STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN | +STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE , + rtc_data->io +STMP3XXX_RTC_PERSISTENT0 ); return 0; }#else
Signature · 1 line
1.7.2.5
PATCH 3/6 rtc: stmp3xxx: port stmp-functions to mxs-equivalents
In reply to Wolfram Sangplat-stmp is going to be removed since it is compatible to mach-mxs.
--- drivers/rtc/Kconfig | 6 +++--- drivers/rtc/rtc-stmp3xxx.c | 28 ++++++++++++++-------------- 2 files changed, 17 insertions(+), 17 deletions(-)
drivers/rtc/Kconfig +3 -3
@@ -932,11 +932,11 @@ config RTC_DRV_COH901331 config RTC_DRV_STMP - tristate "Freescale STMP3xxx RTC" - depends on ARCH_STMP3XXX + tristate "Freescale STMP3xxx/i.MX23/i.MX28 RTC" + depends on ARCH_MXS help If you say yes here you will get support for the onboard - STMP3xxx RTC. + STMP3xxx/i.MX23/i.MX28 RTC. This driver can also be built as a module. If so, the module will be called rtc-stmp3xxx.
drivers/rtc/rtc-stmp3xxx.c +14 -14
@@ -24,8 +24,8 @@#include <linux/rtc.h> #include <linux/slab.h> -#include <mach/platform.h> -#include <mach/stmp3xxx.h> +#include <mach/common.h> +#include <mach/mxs.h> #define STMP3XXX_RTC_CTRL 0x0#define STMP3XXX_RTC_CTRL_ALARM_IRQ_EN 0x00000001
@@ -95,13 +95,13 @@ static irqreturn_t stmp3xxx_rtc_interrupt(int irq, void *dev_id) (STMP3XXX_RTC_CTRL_ALARM_IRQ |STMP3XXX_RTC_CTRL_ONEMSEC_IRQ );if (status &STMP3XXX_RTC_CTRL_ALARM_IRQ ) { -stmp3xxx_clearl (STMP3XXX_RTC_CTRL_ALARM_IRQ , +__mxs_clrl (STMP3XXX_RTC_CTRL_ALARM_IRQ , rtc_data->io +STMP3XXX_RTC_CTRL ); events |=RTC_AF |RTC_IRQF ; }if (status &STMP3XXX_RTC_CTRL_ONEMSEC_IRQ ) { -stmp3xxx_clearl (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ , +__mxs_clrl (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ , rtc_data->io +STMP3XXX_RTC_CTRL );if (++rtc_data->irq_count %1000 ==0 ) { events |=RTC_UF |RTC_IRQF ;
@@ -122,13 +122,13 @@ static int stmp3xxx_alarm_irq_enable(struct device *dev, unsigned int enabled) *ctl = rtc_data->io +STMP3XXX_RTC_CTRL ;if (enabled) { -stmp3xxx_setl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | +__mxs_setl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN |STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN , p); -stmp3xxx_setl (STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , ctl); +__mxs_setl (STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , ctl); }else { -stmp3xxx_clearl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | +__mxs_clrl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN |STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN , p); -stmp3xxx_clearl (STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , ctl); +__mxs_clrl (STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , ctl); }return 0 ; }
@@ -167,7 +167,7 @@ static int stmp3xxx_rtc_remove(struct platform_device *pdev)if (!rtc_data)return 0 ; -stmp3xxx_clearl (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , +__mxs_clrl (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , rtc_data->io +STMP3XXX_RTC_CTRL );free_irq (rtc_data->irq_alarm, &pdev->dev);free_irq (rtc_data->irq_1msec, &pdev->dev);
@@ -212,8 +212,8 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev) goto out_remap; } -stmp3xxx_reset_block (rtc_data->io, true); -stmp3xxx_clearl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | +mxs_reset_block (rtc_data->io); +__mxs_clrl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN |STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN |STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE , rtc_data->io +STMP3XXX_RTC_PERSISTENT0 );
@@ -247,7 +247,7 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev) out_irq1:free_irq (rtc_data->irq_alarm, &pdev->dev); out_irq_alarm: -stmp3xxx_clearl (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , +__mxs_clrl (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , rtc_data->io +STMP3XXX_RTC_CTRL );rtc_device_unregister (rtc_data->rtc); out_remap:
@@ -267,8 +267,8 @@ static int stmp3xxx_rtc_resume(struct platform_device *dev) {struct stmp3xxx_rtc_data *rtc_data =platform_get_drvdata (dev); -stmp3xxx_reset_block (rtc_data->io, true); -stmp3xxx_clearl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | +mxs_reset_block (rtc_data->io); +__mxs_clrl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN |STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN |STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE , rtc_data->io +STMP3XXX_RTC_PERSISTENT0 );
Signature · 1 line
1.7.2.5
PATCH 4/6 rtc: stmp3xxx: fix crash on boot
In reply to Wolfram SangCommit f44f7f96a20 ("RTC: Initialize kernel state from RTC") caused a crash using the mxs/stmp-rtc driver.
The reason is that rtc_device_register() calls rtc_read_alarm() after that change, when the driver does not have all driver data set up yet.
--- drivers/rtc/rtc-stmp3xxx.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-)
drivers/rtc/rtc-stmp3xxx.c +5 -2
@@ -172,6 +172,7 @@ static int stmp3xxx_rtc_remove(struct platform_device *pdev)free_irq (rtc_data->irq_alarm, &pdev->dev);free_irq (rtc_data->irq_1msec, &pdev->dev);rtc_device_unregister (rtc_data->rtc); +platform_set_drvdata (pdev,NULL );iounmap (rtc_data->io);kfree (rtc_data);
@@ -212,11 +213,14 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev) goto out_remap; } +platform_set_drvdata (pdev, rtc_data); +mxs_reset_block (rtc_data->io);__mxs_clrl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN |STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN |STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE , rtc_data->io +STMP3XXX_RTC_PERSISTENT0 ); + rtc_data->rtc =rtc_device_register (pdev->name, &pdev->dev, &stmp3xxx_rtc_ops,THIS_MODULE );if (IS_ERR (rtc_data->rtc)) {
@@ -240,8 +244,6 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev) goto out_irq1; } -platform_set_drvdata (pdev, rtc_data); -return 0 ; out_irq1:
@@ -251,6 +253,7 @@ out_irq_alarm: rtc_data->io + STMP3XXX_RTC_CTRL);rtc_device_unregister (rtc_data->rtc); out_remap: +platform_set_drvdata (pdev,NULL );iounmap (rtc_data->io); out_free:kfree (rtc_data);
Signature · 1 line
1.7.2.5
PATCH 5/6 rtc: stmp3xxx: get rid of mach-specific accessors
In reply to Wolfram SangAnd drop __raw_(read|write)l-accessors while we are here.
--- drivers/rtc/rtc-stmp3xxx.c | 62 ++++++++++++++++++++++++-------------------- 1 files changed, 34 insertions(+), 28 deletions(-)
drivers/rtc/rtc-stmp3xxx.c +34 -28
@@ -18,6 +18,7 @@*/ #include <linux/kernel.h> #include <linux/module.h> +#include <linux/io.h> #include <linux/init.h> #include <linux/platform_device.h> #include <linux/interrupt.h>
@@ -25,9 +26,10 @@#include <linux/slab.h> #include <mach/common.h> -#include <mach/mxs.h> #define STMP3XXX_RTC_CTRL 0x0 +#define STMP3XXX_RTC_CTRL_SET 0x4 +#define STMP3XXX_RTC_CTRL_CLR 0x8#define STMP3XXX_RTC_CTRL_ALARM_IRQ_EN 0x00000001#define STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN 0x00000002#define STMP3XXX_RTC_CTRL_ALARM_IRQ 0x00000004
@@ -42,6 +44,8 @@#define STMP3XXX_RTC_ALARM 0x40#define STMP3XXX_RTC_PERSISTENT0 0x60 +#define STMP3XXX_RTC_PERSISTENT0_SET 0x64 +#define STMP3XXX_RTC_PERSISTENT0_CLR 0x68#define STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN 0x00000002#define STMP3XXX_RTC_PERSISTENT0_ALARM_EN 0x00000004#define STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE 0x00000080
@@ -60,7 +64,7 @@ static void stmp3xxx_wait_time(struct stmp3xxx_rtc_data *rtc_data)* NEW_REGS/STALE_REGS bitfields go. In fact it's 0x1=P0, * 0x2=P1, .., 0x20=P5, 0x40=ALARM, 0x80=SECONDS */ -while (__raw_readl (rtc_data->io +STMP3XXX_RTC_STAT ) & +while (readl (rtc_data->io +STMP3XXX_RTC_STAT ) & (0x80 <<STMP3XXX_RTC_STAT_STALE_SHIFT ))cpu_relax (); }
@@ -71,7 +75,7 @@ static int stmp3xxx_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)struct stmp3xxx_rtc_data *rtc_data =dev_get_drvdata (dev);stmp3xxx_wait_time (rtc_data); -rtc_time_to_tm (__raw_readl (rtc_data->io +STMP3XXX_RTC_SECONDS ), rtc_tm); +rtc_time_to_tm (readl (rtc_data->io +STMP3XXX_RTC_SECONDS ), rtc_tm);return 0 ; }
@@ -79,7 +83,7 @@ static int stmp3xxx_rtc_set_mmss(struct device *dev, unsigned long t) {struct stmp3xxx_rtc_data *rtc_data =dev_get_drvdata (dev); -__raw_writel (t, rtc_data->io +STMP3XXX_RTC_SECONDS ); +writel (t, rtc_data->io +STMP3XXX_RTC_SECONDS );stmp3xxx_wait_time (rtc_data);return 0 ; }
@@ -91,18 +95,18 @@ static irqreturn_t stmp3xxx_rtc_interrupt(int irq, void *dev_id)u32 status;u32 events =0 ; - status =__raw_readl (rtc_data->io +STMP3XXX_RTC_CTRL ) & + status =readl (rtc_data->io +STMP3XXX_RTC_CTRL ) & (STMP3XXX_RTC_CTRL_ALARM_IRQ |STMP3XXX_RTC_CTRL_ONEMSEC_IRQ );if (status &STMP3XXX_RTC_CTRL_ALARM_IRQ ) { -__mxs_clrl (STMP3XXX_RTC_CTRL_ALARM_IRQ , - rtc_data->io +STMP3XXX_RTC_CTRL ); +writel (STMP3XXX_RTC_CTRL_ALARM_IRQ , + rtc_data->io +STMP3XXX_RTC_CTRL_CLR ); events |=RTC_AF |RTC_IRQF ; }if (status &STMP3XXX_RTC_CTRL_ONEMSEC_IRQ ) { -__mxs_clrl (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ , - rtc_data->io +STMP3XXX_RTC_CTRL ); +writel (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ , + rtc_data->io +STMP3XXX_RTC_CTRL_CLR );if (++rtc_data->irq_count %1000 ==0 ) { events |=RTC_UF |RTC_IRQF ; rtc_data->irq_count =0 ;
@@ -118,17 +122,19 @@ static irqreturn_t stmp3xxx_rtc_interrupt(int irq, void *dev_id)static int stmp3xxx_alarm_irq_enable (struct device *dev,unsigned int enabled) {struct stmp3xxx_rtc_data *rtc_data =dev_get_drvdata (dev); -void __iomem *p = rtc_data->io +STMP3XXX_RTC_PERSISTENT0 , - *ctl = rtc_data->io +STMP3XXX_RTC_CTRL ;if (enabled) { -__mxs_setl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | -STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN , p); -__mxs_setl (STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , ctl); +writel (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | +STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN , + rtc_data->io +STMP3XXX_RTC_PERSISTENT0_SET ); +writel (STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , + rtc_data->io +STMP3XXX_RTC_CTRL_SET ); }else { -__mxs_clrl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | -STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN , p); -__mxs_clrl (STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , ctl); +writel (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | +STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN , + rtc_data->io +STMP3XXX_RTC_PERSISTENT0_CLR ); +writel (STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , + rtc_data->io +STMP3XXX_RTC_CTRL_CLR ); }return 0 ; }
@@ -137,7 +143,7 @@ static int stmp3xxx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm) {struct stmp3xxx_rtc_data *rtc_data =dev_get_drvdata (dev); -rtc_time_to_tm (__raw_readl (rtc_data->io +STMP3XXX_RTC_ALARM ), &alm->time); +rtc_time_to_tm (readl (rtc_data->io +STMP3XXX_RTC_ALARM ), &alm->time);return 0 ; }
@@ -147,7 +153,7 @@ static int stmp3xxx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)struct stmp3xxx_rtc_data *rtc_data =dev_get_drvdata (dev);rtc_tm_to_time (&alm->time, &t); -__raw_writel (t, rtc_data->io +STMP3XXX_RTC_ALARM ); +writel (t, rtc_data->io +STMP3XXX_RTC_ALARM );return 0 ; }
@@ -167,8 +173,8 @@ static int stmp3xxx_rtc_remove(struct platform_device *pdev)if (!rtc_data)return 0 ; -__mxs_clrl (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , - rtc_data->io +STMP3XXX_RTC_CTRL ); +writel (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , + rtc_data->io +STMP3XXX_RTC_CTRL_CLR );free_irq (rtc_data->irq_alarm, &pdev->dev);free_irq (rtc_data->irq_1msec, &pdev->dev);rtc_device_unregister (rtc_data->rtc);
@@ -206,7 +212,7 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev) rtc_data->irq_alarm =platform_get_irq (pdev,0 ); rtc_data->irq_1msec =platform_get_irq (pdev,1 ); -if (!(__raw_readl (STMP3XXX_RTC_STAT + rtc_data->io) & +if (!(readl (STMP3XXX_RTC_STAT + rtc_data->io) &STMP3XXX_RTC_STAT_RTC_PRESENT )) {dev_err (&pdev->dev,"no device onboard\n" ); err = -ENODEV ;
@@ -216,10 +222,10 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev)platform_set_drvdata (pdev, rtc_data);mxs_reset_block (rtc_data->io); -__mxs_clrl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | +writel (STMP3XXX_RTC_PERSISTENT0_ALARM_EN |STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN |STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE , - rtc_data->io +STMP3XXX_RTC_PERSISTENT0 ); + rtc_data->io +STMP3XXX_RTC_PERSISTENT0_CLR ); rtc_data->rtc =rtc_device_register (pdev->name, &pdev->dev, &stmp3xxx_rtc_ops,THIS_MODULE );
@@ -249,8 +255,8 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev) out_irq1:free_irq (rtc_data->irq_alarm, &pdev->dev); out_irq_alarm: -__mxs_clrl (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , - rtc_data->io +STMP3XXX_RTC_CTRL ); +writel (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , + rtc_data->io +STMP3XXX_RTC_CTRL_CLR );rtc_device_unregister (rtc_data->rtc); out_remap:platform_set_drvdata (pdev,NULL );
@@ -271,10 +277,10 @@ static int stmp3xxx_rtc_resume(struct platform_device *dev)struct stmp3xxx_rtc_data *rtc_data =platform_get_drvdata (dev);mxs_reset_block (rtc_data->io); -__mxs_clrl (STMP3XXX_RTC_PERSISTENT0_ALARM_EN | +writel (STMP3XXX_RTC_PERSISTENT0_ALARM_EN |STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN |STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE , - rtc_data->io +STMP3XXX_RTC_PERSISTENT0 ); + rtc_data->io +STMP3XXX_RTC_PERSISTENT0_CLR ); return 0; }#else
Signature · 1 line
1.7.2.5
PATCH 6/6 rtc: stmp3xxx: remove UIE handlers
In reply to Wolfram SangThe RTC core handles it since 6610e08 (RTC: Rework RTC code to use timerqueue for events). To make it work, check if interrupts need to be enabled in set_alarm. Add my copyright after all these changes.
--- drivers/rtc/rtc-stmp3xxx.c | 53 ++++++++++++------------------------------- 1 files changed, 15 insertions(+), 38 deletions(-)
drivers/rtc/rtc-stmp3xxx.c +15 -38
@@ -6,6 +6,7 @@* * Copyright 2008 Freescale Semiconductor, Inc. All Rights Reserved. * Copyright 2008 Embedded Alley Solutions, Inc All Rights Reserved. +* Copyright 2011 Wolfram Sang, Pengutronix e.K. */ /*
@@ -33,7 +34,6 @@#define STMP3XXX_RTC_CTRL_ALARM_IRQ_EN 0x00000001#define STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN 0x00000002#define STMP3XXX_RTC_CTRL_ALARM_IRQ 0x00000004 -#define STMP3XXX_RTC_CTRL_ONEMSEC_IRQ 0x00000008#define STMP3XXX_RTC_STAT 0x10#define STMP3XXX_RTC_STAT_STALE_SHIFT 16
@@ -52,9 +52,8 @@struct stmp3xxx_rtc_data {struct rtc_device *rtc; -unsigned irq_count;void __iomem *io; -int irq_alarm, irq_1msec; +int irq_alarm; };static void stmp3xxx_wait_time (struct stmp3xxx_rtc_data *rtc_data)
@@ -92,31 +91,16 @@ static int stmp3xxx_rtc_set_mmss(struct device *dev, unsigned long t)static irqreturn_t stmp3xxx_rtc_interrupt (int irq,void *dev_id) {struct stmp3xxx_rtc_data *rtc_data =dev_get_drvdata (dev_id); -u32 status; -u32 events =0 ; - - status =readl (rtc_data->io +STMP3XXX_RTC_CTRL ) & - (STMP3XXX_RTC_CTRL_ALARM_IRQ |STMP3XXX_RTC_CTRL_ONEMSEC_IRQ ); +u32 status =readl (rtc_data->io +STMP3XXX_RTC_CTRL );if (status &STMP3XXX_RTC_CTRL_ALARM_IRQ ) {writel (STMP3XXX_RTC_CTRL_ALARM_IRQ , rtc_data->io +STMP3XXX_RTC_CTRL_CLR ); - events |=RTC_AF |RTC_IRQF ; +rtc_update_irq (rtc_data->rtc,1 ,RTC_AF |RTC_IRQF ); +return IRQ_HANDLED ; } -if (status &STMP3XXX_RTC_CTRL_ONEMSEC_IRQ ) { -writel (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ , - rtc_data->io +STMP3XXX_RTC_CTRL_CLR ); -if (++rtc_data->irq_count %1000 ==0 ) { - events |=RTC_UF |RTC_IRQF ; - rtc_data->irq_count =0 ; - } - } - -if (events) -rtc_update_irq (rtc_data->rtc,1 , events); - -return IRQ_HANDLED ; +return IRQ_NONE ; }static int stmp3xxx_alarm_irq_enable (struct device *dev,unsigned int enabled)
@@ -154,6 +138,9 @@ static int stmp3xxx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)rtc_tm_to_time (&alm->time, &t);writel (t, rtc_data->io +STMP3XXX_RTC_ALARM ); + +stmp3xxx_alarm_irq_enable (dev, alm->enabled); +return 0 ; }
@@ -173,10 +160,9 @@ static int stmp3xxx_rtc_remove(struct platform_device *pdev)if (!rtc_data)return 0 ; -writel (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , +writel (STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , rtc_data->io +STMP3XXX_RTC_CTRL_CLR );free_irq (rtc_data->irq_alarm, &pdev->dev); -free_irq (rtc_data->irq_1msec, &pdev->dev);rtc_device_unregister (rtc_data->rtc);platform_set_drvdata (pdev,NULL );iounmap (rtc_data->io);
@@ -210,7 +196,6 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev) } rtc_data->irq_alarm =platform_get_irq (pdev,0 ); - rtc_data->irq_1msec =platform_get_irq (pdev,1 );if (!(readl (STMP3XXX_RTC_STAT + rtc_data->io) &STMP3XXX_RTC_STAT_RTC_PRESENT )) {
@@ -227,6 +212,9 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev)STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE , rtc_data->io + STMP3XXX_RTC_PERSISTENT0_CLR); +writel (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , + rtc_data->io +STMP3XXX_RTC_CTRL_CLR ); + rtc_data->rtc =rtc_device_register (pdev->name, &pdev->dev, &stmp3xxx_rtc_ops,THIS_MODULE );if (IS_ERR (rtc_data->rtc)) {
@@ -234,7 +222,6 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev) goto out_remap; } - rtc_data->irq_count =0 ; err =request_irq (rtc_data->irq_alarm, stmp3xxx_rtc_interrupt,0 ,"RTC alarm" , &pdev->dev);if (err) {
@@ -242,21 +229,10 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev) rtc_data->irq_alarm); goto out_irq_alarm; } - err =request_irq (rtc_data->irq_1msec, stmp3xxx_rtc_interrupt, -0 ,"RTC tick" , &pdev->dev); -if (err) { -dev_err (&pdev->dev,"Cannot claim IRQ%d\n" , - rtc_data->irq_1msec); - goto out_irq1; - }return 0 ; -out_irq1: -free_irq (rtc_data->irq_alarm, &pdev->dev); out_irq_alarm: -writel (STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |STMP3XXX_RTC_CTRL_ALARM_IRQ_EN , - rtc_data->io +STMP3XXX_RTC_CTRL_CLR );rtc_device_unregister (rtc_data->rtc); out_remap:platform_set_drvdata (pdev,NULL );
@@ -313,5 +289,6 @@ module_init(stmp3xxx_rtc_init);module_exit (stmp3xxx_rtc_exit);MODULE_DESCRIPTION ("STMP3xxx RTC Driver" ); -MODULE_AUTHOR ("dmitry pervushin <[email protected]>" ); +MODULE_AUTHOR ("dmitry pervushin <[email protected]> and " +"Wolfram Sang <[email protected]>" );MODULE_LICENSE ("GPL" );
Signature · 1 line
1.7.2.5
cover drop IRQF_DISABLED from RTC, then convert stmp-rtc to mach-mxs
In reply to Wolfram SangHi Wolfram,
Quoted 11 lines · Wolfram Sang
First, cleanup RTC to remove the deprecated
IRQF_DISABLEDwhich is a nop these days.Then, because plat-stmp is going to be removed and merged with mxs, this patch series will convert the stmp-rtc driver for usage with mach-mxs. Quite some platform-specific dependencies have been removed, so the driver should be better reusable.
The driver has successfully been tested on an i.MX28-board and passed the RTC test program.
Can you post the platform device code? I would give it a test on my end.
Signature · 2 lines
Regards, Shawn
cover drop IRQF_DISABLED from RTC, then convert stmp-rtc to mach-mxs
Hi Shawn,
Quoted 8 lines
Quoted 8 lines
First, cleanup RTC to remove the deprecated
IRQF_DISABLEDwhich is a nop these days.Then, because plat-stmp is going to be removed and merged with mxs, this patch series will convert the stmp-rtc driver for usage with mach-mxs. Quite some platform-specific dependencies have been removed, so the driver should be better reusable.
Quoted 4 lines
Quoted 3 lines
The driver has successfully been tested on an i.MX28-board and passed the RTC test program.
Can you post the platform device code? I would give it a test on my end.
Yup, will send them as RFC in a minute. Tests are much appreciated, thanks! Would add the tags then to V2 of this series (with updated commit msgs) when you are done.
Wolfram
Signature · 9 lines
Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ | -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110517/93db441a/attachment.sig>
cover drop IRQF_DISABLED from RTC, then convert stmp-rtc to mach-mxs
In reply to Wolfram SangQuoted 15 lines · Wolfram Sang
First, cleanup RTC to remove the deprecated
IRQF_DISABLEDwhich is a nop these days.Then, because plat-stmp is going to be removed and merged with mxs, this patch series will convert the stmp-rtc driver for usage with mach-mxs. Quite some platform-specific dependencies have been removed, so the driver should be better reusable.
The driver has successfully been tested on an i.MX28-board and passed the RTC test program.
Regards,
Wolfram
Quoted 8 lines
Wolfram Sang (6):
rtc: removeIRQF_DISABLED
rtc: stmp3xxx: get rid of platform-specific register include
rtc: stmp3xxx: port stmp-functions to mxs-equivalents
rtc: stmp3xxx: fix crash on boot
rtc: stmp3xxx: get rid of mach-specific accessors
rtc: stmp3xxx: remove UIE handlers
On i.MX23 and i.MX28
Signature · 2 lines
Regards, Shawn