timers/rtc changes for v2.6.39
Subsystems (8)
Linus,
Please pull the latest timers-rtc-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git timers-rtc-for-linus
Thanks,
Ingo
------------------>
John Stultz (6):
RTC: Initialize kernel state from RTC
RTC: Cleanup rtc_class_ops->irq_set_state
RTC: Cleanup rtc_class_ops->irq_set_freq()
RTC: Cleanup rtc_class_ops->update_irq_enable()
RTC: Clean out UIE icotl implementations
RTC: Fix up rtc.txt documentation to reflect changes to generic rtc layer
Marcelo Roberto Jimenez (4):
RTC: Include information about UIE and PIE in RTC driver proc.
RTC: Remove UIE and PIE information from the sa1100 driver proc.
RTC: Fix the cross interrupt issue on rtc-test.
RTC: sa1100: Update the sa1100 RTC driver.
Documentation/rtc.txt | 29 +++----- drivers/rtc/class.c | 7 ++ drivers/rtc/interface.c | 180 ++++++++++++++++++++++++++++++++++++++++++ drivers/rtc/rtc-at91rm9200.c | 28 ------- drivers/rtc/rtc-at91sam9.c | 28 ------- drivers/rtc/rtc-bfin.c | 27 ------ drivers/rtc/rtc-cmos.c | 66 --------------- drivers/rtc/rtc-davinci.c | 55 ------------- drivers/rtc/rtc-ds1511.c | 17 ---- drivers/rtc/rtc-ds1553.c | 17 ---- drivers/rtc/rtc-ds3232.c | 18 ---- drivers/rtc/rtc-jz4740.c | 7 -- drivers/rtc/rtc-mc13xxx.c | 7 -- drivers/rtc/rtc-mpc5121.c | 20 ----- drivers/rtc/rtc-mrst.c | 20 ----- drivers/rtc/rtc-mxc.c | 7 -- drivers/rtc/rtc-nuc900.c | 15 ---- drivers/rtc/rtc-omap.c | 39 --------- drivers/rtc/rtc-pcap.c | 6 -- drivers/rtc/rtc-pcf50633.c | 22 +----- drivers/rtc/rtc-pl030.c | 6 -- drivers/rtc/rtc-pl031.c | 55 ------------- drivers/rtc/rtc-proc.c | 8 ++ drivers/rtc/rtc-pxa.c | 44 ---------- drivers/rtc/rtc-rs5c372.c | 52 ------------ drivers/rtc/rtc-rx8025.c | 25 ------ drivers/rtc/rtc-s3c.c | 33 -------- drivers/rtc/rtc-sa1100.c | 160 +------------------------------------ drivers/rtc/rtc-sh.c | 24 ------ drivers/rtc/rtc-stmp3xxx.c | 15 ---- drivers/rtc/rtc-test.c | 13 ++- drivers/rtc/rtc-twl.c | 13 --- drivers/rtc/rtc-vr41xx.c | 32 -------- drivers/rtc/rtc-wm831x.c | 16 ---- drivers/rtc/rtc-wm8350.c | 21 ----- include/linux/rtc.h | 5 +- 36 files changed, 221 insertions(+), 916 deletions(-)
Documentation/rtc.txt +10 -19
@@ -178,38 +178,29 @@ RTC class framework, but can't be supported by the older driver. setting the longer alarm time and enabling its IRQ using a single request (using the same model as EFI firmware). - * RTC_UIE_ON, RTC_UIE_OFF ... if the RTC offers IRQs, it probably - also offers update IRQs whenever the "seconds" counter changes. - If needed, the RTC framework can emulate this mechanism. + * RTC_UIE_ON, RTC_UIE_OFF ... if the RTC offers IRQs, the RTC framework + will emulate this mechanism. - * RTC_PIE_ON, RTC_PIE_OFF, RTC_IRQP_SET, RTC_IRQP_READ ... another - feature often accessible with an IRQ line is a periodic IRQ, issued - at settable frequencies (usually 2^N Hz). + * RTC_PIE_ON, RTC_PIE_OFF, RTC_IRQP_SET, RTC_IRQP_READ ... these icotls + are emulated via a kernel hrtimer. In many cases, the RTC alarm can be a system wake event, used to force Linux out of a low power sleep state (or hibernation) back to a fully operational state. For example, a system could enter a deep power saving state until it's time to execute some scheduled tasks. -Note that many of these ioctls need not actually be implemented by your -driver. The common rtc-dev interface handles many of these nicely if your -driver returns ENOIOCTLCMD. Some common examples: +Note that many of these ioctls are handled by the common rtc-dev interface. +Some common examples: * RTC_RD_TIME, RTC_SET_TIME: the read_time/set_time functions will be called with appropriate values. - * RTC_ALM_SET, RTC_ALM_READ, RTC_WKALM_SET, RTC_WKALM_RD: the - set_alarm/read_alarm functions will be called. + * RTC_ALM_SET, RTC_ALM_READ, RTC_WKALM_SET, RTC_WKALM_RD: gets or sets + the alarm rtc_timer. May call the set_alarm driver function. - * RTC_IRQP_SET, RTC_IRQP_READ: the irq_set_freq function will be called - to set the frequency while the framework will handle the read for you - since the frequency is stored in the irq_freq member of the rtc_device - structure. Your driver needs to initialize the irq_freq member during - init. Make sure you check the requested frequency is in range of your - hardware in the irq_set_freq function. If it isn't, return -EINVAL. If - you cannot actually change the frequency, do not define irq_set_freq. + * RTC_IRQP_SET, RTC_IRQP_READ: These are emulated by the generic code. - * RTC_PIE_ON, RTC_PIE_OFF: the irq_set_state function will be called. + * RTC_PIE_ON, RTC_PIE_OFF: These are also emulated by the generic code. If all else fails, check out the rtc-test.c driver!
drivers/rtc/class.c +7 -0
@@ -117,6 +117,7 @@ struct rtc_device *rtc_device_register(const char *name, struct device *dev, struct module *owner) {struct rtc_device *rtc; +struct rtc_wkalrm alrm;int id, err;if (idr_pre_get (&rtc_idr,GFP_KERNEL ) ==0 ) {
@@ -166,6 +167,12 @@ struct rtc_device *rtc_device_register(const char *name, struct device *dev, rtc->pie_timer.function = rtc_pie_update_irq; rtc->pie_enabled =0 ; +/* Check to see if there is an ALARM already set in hw */ + err =__rtc_read_alarm (rtc, &alrm); + +if (!err && !rtc_valid_tm (&alrm.time)) +rtc_set_alarm (rtc, &alrm); +strlcpy (rtc->name, name,RTC_DEVICE_NAME_SIZE );dev_set_name (&rtc->dev,"rtc%d" , id);
drivers/rtc/interface.c +180 -0
186 lines not on this page · raw message
drivers/rtc/rtc-at91rm9200.c +0 -28
@@ -183,33 +183,6 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)return 0 ; } -/* -* Handle commands from user-space -*/ -static int at91_rtc_ioctl (struct device *dev,unsigned int cmd, -unsigned long arg) -{ -int ret =0 ; - -pr_debug ("%s(): cmd=%08x, arg=%08lx.\n" , __func__, cmd, arg); - -/* important: scrub old status before enabling IRQs */ -switch (cmd) { -case RTC_UIE_OFF :/* update off */ -at91_sys_write (AT91_RTC_IDR ,AT91_RTC_SECEV ); -break ; -case RTC_UIE_ON :/* update on */ -at91_sys_write (AT91_RTC_SCCR ,AT91_RTC_SECEV ); -at91_sys_write (AT91_RTC_IER ,AT91_RTC_SECEV ); -break ; -default : - ret = -ENOIOCTLCMD ; -break ; - } - -return ret; -} -static int at91_rtc_alarm_irq_enable (struct device *dev,unsigned int enabled) {pr_debug ("%s(): cmd=%08x\n" , __func__, enabled);
@@ -269,7 +242,6 @@ static irqreturn_t at91_rtc_interrupt(int irq, void *dev_id) }static const struct rtc_class_ops at91_rtc_ops = { - .ioctl = at91_rtc_ioctl, .read_time = at91_rtc_readtime, .set_time = at91_rtc_settime, .read_alarm = at91_rtc_readalarm,
drivers/rtc/rtc-at91sam9.c +0 -28
@@ -216,33 +216,6 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)return 0 ; } -/* -* Handle commands from user-space -*/ -static int at91_rtc_ioctl (struct device *dev,unsigned int cmd, -unsigned long arg) -{ -struct sam9_rtc *rtc =dev_get_drvdata (dev); -int ret =0 ; -u32 mr =rtt_readl (rtc,MR ); - -dev_dbg (dev,"ioctl: cmd=%08x, arg=%08lx, mr %08x\n" , cmd, arg, mr); - -switch (cmd) { -case RTC_UIE_OFF :/* update off */ -rtt_writel (rtc,MR , mr & ~AT91_RTT_RTTINCIEN ); -break ; -case RTC_UIE_ON :/* update on */ -rtt_writel (rtc,MR , mr |AT91_RTT_RTTINCIEN ); -break ; -default : - ret = -ENOIOCTLCMD ; -break ; - } - -return ret; -} -static int at91_rtc_alarm_irq_enable (struct device *dev,unsigned int enabled) {struct sam9_rtc *rtc =dev_get_drvdata (dev);
@@ -303,7 +276,6 @@ static irqreturn_t at91_rtc_interrupt(int irq, void *_rtc) }static const struct rtc_class_ops at91_rtc_ops = { - .ioctl = at91_rtc_ioctl, .read_time = at91_rtc_readtime, .set_time = at91_rtc_settime, .read_alarm = at91_rtc_readalarm,
drivers/rtc/rtc-bfin.c +0 -27
@@ -240,32 +240,6 @@ static void bfin_rtc_int_set_alarm(struct bfin_rtc *rtc)*/ bfin_rtc_int_set (rtc->rtc_alarm.tm_yday ==-1 ?RTC_ISTAT_ALARM :RTC_ISTAT_ALARM_DAY ); } -static int bfin_rtc_ioctl (struct device *dev,unsigned int cmd,unsigned long arg) -{ -struct bfin_rtc *rtc =dev_get_drvdata (dev); -int ret =0 ; - -dev_dbg_stamp (dev); - -bfin_rtc_sync_pending (dev); - -switch (cmd) { -case RTC_UIE_ON : -dev_dbg_stamp (dev); -bfin_rtc_int_set (RTC_ISTAT_SEC ); -break ; -case RTC_UIE_OFF : -dev_dbg_stamp (dev); -bfin_rtc_int_clear (~RTC_ISTAT_SEC ); -break ; - -default : -dev_dbg_stamp (dev); - ret = -ENOIOCTLCMD ; - } - -return ret; -}static int bfin_rtc_alarm_irq_enable (struct device *dev,unsigned int enabled) {
@@ -358,7 +332,6 @@ static int bfin_rtc_proc(struct device *dev, struct seq_file *seq) }static struct rtc_class_ops bfin_rtc_ops = { - .ioctl = bfin_rtc_ioctl, .read_time = bfin_rtc_read_time, .set_time = bfin_rtc_set_time, .read_alarm = bfin_rtc_read_alarm,
drivers/rtc/rtc-cmos.c +0 -66
85 lines not on this page · raw message
drivers/rtc/rtc-davinci.c +0 -55
73 lines not on this page · raw message
drivers/rtc/rtc-ds1511.c +0 -17
@@ -397,29 +397,12 @@ static int ds1511_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)return 0 ; } -static int ds1511_rtc_update_irq_enable (struct device *dev, -unsigned int enabled) -{ -struct platform_device *pdev =to_platform_device (dev); -struct rtc_plat_data *pdata =platform_get_drvdata (pdev); - -if (pdata->irq <=0 ) -return -EINVAL ; -if (enabled) - pdata->irqen |=RTC_UF ; -else - pdata->irqen &= ~RTC_UF ; -ds1511_rtc_update_alarm (pdata); -return 0 ; -} -static const struct rtc_class_ops ds1511_rtc_ops = { .read_time = ds1511_rtc_read_time, .set_time = ds1511_rtc_set_time, .read_alarm = ds1511_rtc_read_alarm, .set_alarm = ds1511_rtc_set_alarm, .alarm_irq_enable = ds1511_rtc_alarm_irq_enable, - .update_irq_enable = ds1511_rtc_update_irq_enable, }; static ssize_t
drivers/rtc/rtc-ds1553.c +0 -17
@@ -227,29 +227,12 @@ static int ds1553_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)return 0 ; } -static int ds1553_rtc_update_irq_enable (struct device *dev, -unsigned int enabled) -{ -struct platform_device *pdev =to_platform_device (dev); -struct rtc_plat_data *pdata =platform_get_drvdata (pdev); - -if (pdata->irq <=0 ) -return -EINVAL ; -if (enabled) - pdata->irqen |=RTC_UF ; -else - pdata->irqen &= ~RTC_UF ; -ds1553_rtc_update_alarm (pdata); -return 0 ; -} -static const struct rtc_class_ops ds1553_rtc_ops = { .read_time = ds1553_rtc_read_time, .set_time = ds1553_rtc_set_time, .read_alarm = ds1553_rtc_read_alarm, .set_alarm = ds1553_rtc_set_alarm, .alarm_irq_enable = ds1553_rtc_alarm_irq_enable, - .update_irq_enable = ds1553_rtc_update_irq_enable, }; static ssize_t ds1553_nvram_read(struct file *filp, struct kobject *kobj,
drivers/rtc/rtc-ds3232.c +0 -18
@@ -339,23 +339,6 @@ static int ds3232_alarm_irq_enable(struct device *dev, unsigned int enabled)return 0 ; } -static int ds3232_update_irq_enable (struct device *dev,unsigned int enabled) -{ -struct i2c_client *client =to_i2c_client (dev); -struct ds3232 *ds3232 =i2c_get_clientdata (client); - -if (client->irq <=0 ) -return -EINVAL ; - -if (enabled) - ds3232->rtc->irq_data |=RTC_UF ; -else - ds3232->rtc->irq_data &= ~RTC_UF ; - -ds3232_update_alarm (client); -return 0 ; -} -static irqreturn_t ds3232_irq (int irq,void *dev_id) {struct i2c_client *client = dev_id;
@@ -406,7 +389,6 @@ static const struct rtc_class_ops ds3232_rtc_ops = { .read_alarm = ds3232_read_alarm, .set_alarm = ds3232_set_alarm, .alarm_irq_enable = ds3232_alarm_irq_enable, - .update_irq_enable = ds3232_update_irq_enable, }; static int __devinit ds3232_probe(struct i2c_client *client,
drivers/rtc/rtc-jz4740.c +0 -7
@@ -168,12 +168,6 @@ static int jz4740_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)return ret; } -static int jz4740_rtc_update_irq_enable (struct device *dev,unsigned int enable) -{ -struct jz4740_rtc *rtc =dev_get_drvdata (dev); -return jz4740_rtc_ctrl_set_bits (rtc,JZ_RTC_CTRL_1HZ_IRQ , enable); -} -static int jz4740_rtc_alarm_irq_enable (struct device *dev,unsigned int enable) {struct jz4740_rtc *rtc =dev_get_drvdata (dev);
@@ -185,7 +179,6 @@ static struct rtc_class_ops jz4740_rtc_ops = { .set_mmss = jz4740_rtc_set_mmss, .read_alarm = jz4740_rtc_read_alarm, .set_alarm = jz4740_rtc_set_alarm, - .update_irq_enable = jz4740_rtc_update_irq_enable, .alarm_irq_enable = jz4740_rtc_alarm_irq_enable, };
drivers/rtc/rtc-mc13xxx.c +0 -7
@@ -282,12 +282,6 @@ static irqreturn_t mc13xxx_rtc_update_handler(int irq, void *dev)return IRQ_HANDLED ; } -static int mc13xxx_rtc_update_irq_enable (struct device *dev, -unsigned int enabled) -{ -return mc13xxx_rtc_irq_enable (dev, enabled,MC13XXX_IRQ_1HZ ); -} -static int mc13xxx_rtc_alarm_irq_enable (struct device *dev,unsigned int enabled) {
@@ -300,7 +294,6 @@ static const struct rtc_class_ops mc13xxx_rtc_ops = { .read_alarm = mc13xxx_rtc_read_alarm, .set_alarm = mc13xxx_rtc_set_alarm, .alarm_irq_enable = mc13xxx_rtc_alarm_irq_enable, - .update_irq_enable = mc13xxx_rtc_update_irq_enable, };static irqreturn_t mc13xxx_rtc_reset_handler (int irq,void *dev)
drivers/rtc/rtc-mpc5121.c +0 -20
@@ -240,32 +240,12 @@ static int mpc5121_rtc_alarm_irq_enable(struct device *dev,return 0 ; } -static int mpc5121_rtc_update_irq_enable (struct device *dev, -unsigned int enabled) -{ -struct mpc5121_rtc_data *rtc =dev_get_drvdata (dev); -struct mpc5121_rtc_regs __iomem *regs = rtc->regs; -int val; - - val =in_8 (®s->int_enable); - -if (enabled) - val = (val & ~0x8 ) |0x1 ; -else - val &= ~0x1 ; - -out_8 (®s->int_enable, val); - -return 0 ; -} -static const struct rtc_class_ops mpc5121_rtc_ops = { .read_time = mpc5121_rtc_read_time, .set_time = mpc5121_rtc_set_time, .read_alarm = mpc5121_rtc_read_alarm, .set_alarm = mpc5121_rtc_set_alarm, .alarm_irq_enable = mpc5121_rtc_alarm_irq_enable, - .update_irq_enable = mpc5121_rtc_update_irq_enable, }; static int __devinit mpc5121_rtc_probe(struct platform_device *op,
drivers/rtc/rtc-mrst.c +0 -20
@@ -236,25 +236,6 @@ static int mrst_set_alarm(struct device *dev, struct rtc_wkalrm *t)return 0 ; } -static int mrst_irq_set_state (struct device *dev,int enabled) -{ -struct mrst_rtc *mrst =dev_get_drvdata (dev); -unsigned long flags; - -if (!mrst->irq) -return -ENXIO ; - -spin_lock_irqsave (&rtc_lock, flags); - -if (enabled) -mrst_irq_enable (mrst,RTC_PIE ); -else -mrst_irq_disable (mrst,RTC_PIE ); - -spin_unlock_irqrestore (&rtc_lock, flags); -return 0 ; -} -/* Currently, the vRTC doesn't support UIE ON/OFF */ static int mrst_rtc_alarm_irq_enable (struct device *dev,unsigned int enabled) {
@@ -301,7 +282,6 @@ static const struct rtc_class_ops mrst_rtc_ops = { .read_alarm = mrst_read_alarm, .set_alarm = mrst_set_alarm, .proc = mrst_procfs, - .irq_set_state = mrst_irq_set_state, .alarm_irq_enable = mrst_rtc_alarm_irq_enable, };
drivers/rtc/rtc-mxc.c +0 -7
@@ -274,12 +274,6 @@ static int mxc_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)return 0 ; } -static int mxc_rtc_update_irq_enable (struct device *dev,unsigned int enabled) -{ -mxc_rtc_irq_enable (dev,RTC_1HZ_BIT , enabled); -return 0 ; -} -/* * This function reads the current RTC time into tm in Gregorian date. */
@@ -368,7 +362,6 @@ static struct rtc_class_ops mxc_rtc_ops = { .read_alarm = mxc_rtc_read_alarm, .set_alarm = mxc_rtc_set_alarm, .alarm_irq_enable = mxc_rtc_alarm_irq_enable, - .update_irq_enable = mxc_rtc_update_irq_enable, };static int __init mxc_rtc_probe (struct platform_device *pdev)
drivers/rtc/rtc-nuc900.c +0 -15
@@ -134,20 +134,6 @@ static void nuc900_rtc_bin2bcd(struct device *dev, struct rtc_time *settm, gettm->bcd_hour =bin2bcd (settm->tm_hour) <<16 ; } -static int nuc900_update_irq_enable (struct device *dev,unsigned int enabled) -{ -struct nuc900_rtc *rtc =dev_get_drvdata (dev); - -if (enabled) -__raw_writel (__raw_readl (rtc->rtc_reg +REG_RTC_RIER )| - (TICKINTENB ), rtc->rtc_reg +REG_RTC_RIER ); -else -__raw_writel (__raw_readl (rtc->rtc_reg +REG_RTC_RIER )& - (~TICKINTENB ), rtc->rtc_reg +REG_RTC_RIER ); - -return 0 ; -} -static int nuc900_alarm_irq_enable (struct device *dev,unsigned int enabled) {struct nuc900_rtc *rtc =dev_get_drvdata (dev);
@@ -234,7 +220,6 @@ static struct rtc_class_ops nuc900_rtc_ops = { .read_alarm = nuc900_rtc_read_alarm, .set_alarm = nuc900_rtc_set_alarm, .alarm_irq_enable = nuc900_alarm_irq_enable, - .update_irq_enable = nuc900_update_irq_enable, };static int __devinit nuc900_rtc_probe (struct platform_device *pdev)
drivers/rtc/rtc-omap.c +0 -39
@@ -135,44 +135,6 @@ static irqreturn_t rtc_irq(int irq, void *rtc)return IRQ_HANDLED ; } -#ifdef CONFIG_RTC_INTF_DEV - -static int -omap_rtc_ioctl (struct device *dev,unsigned int cmd,unsigned long arg) -{ -u8 reg; - -switch (cmd) { -case RTC_UIE_OFF : -case RTC_UIE_ON : -break ; -default : -return -ENOIOCTLCMD ; - } - -local_irq_disable (); -rtc_wait_not_busy (); - reg =rtc_read (OMAP_RTC_INTERRUPTS_REG ); -switch (cmd) { -/* UIE = Update Interrupt Enable (1/second) */ -case RTC_UIE_OFF : - reg &= ~OMAP_RTC_INTERRUPTS_IT_TIMER ; -break ; -case RTC_UIE_ON : - reg |=OMAP_RTC_INTERRUPTS_IT_TIMER ; -break ; - } -rtc_wait_not_busy (); -rtc_write (reg,OMAP_RTC_INTERRUPTS_REG ); -local_irq_enable (); - -return 0 ; -} - -#else -#define omap_rtc_ioctl NULL -#endif -static int omap_rtc_alarm_irq_enable (struct device *dev,unsigned int enabled) {u8 reg;
@@ -313,7 +275,6 @@ static int omap_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm) }static struct rtc_class_ops omap_rtc_ops = { - .ioctl = omap_rtc_ioctl, .read_time = omap_rtc_read_time, .set_time = omap_rtc_set_time, .read_alarm = omap_rtc_read_alarm,
drivers/rtc/rtc-pcap.c +0 -6
@@ -131,18 +131,12 @@ static int pcap_rtc_alarm_irq_enable(struct device *dev, unsigned int en)return pcap_rtc_irq_enable (dev,PCAP_IRQ_TODA , en); } -static int pcap_rtc_update_irq_enable (struct device *dev,unsigned int en) -{ -return pcap_rtc_irq_enable (dev,PCAP_IRQ_1HZ , en); -} -static const struct rtc_class_ops pcap_rtc_ops = { .read_time = pcap_rtc_read_time, .read_alarm = pcap_rtc_read_alarm, .set_alarm = pcap_rtc_set_alarm, .set_mmss = pcap_rtc_set_mmss, .alarm_irq_enable = pcap_rtc_alarm_irq_enable, - .update_irq_enable = pcap_rtc_update_irq_enable, };static int __devinit pcap_rtc_probe (struct platform_device *pdev)
drivers/rtc/rtc-pcf50633.c +1 -21
@@ -106,25 +106,6 @@ pcf50633_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)return 0 ; } -static int -pcf50633_rtc_update_irq_enable (struct device *dev,unsigned int enabled) -{ -struct pcf50633_rtc *rtc =dev_get_drvdata (dev); -int err; - -if (enabled) - err =pcf50633_irq_unmask (rtc->pcf,PCF50633_IRQ_SECOND ); -else - err =pcf50633_irq_mask (rtc->pcf,PCF50633_IRQ_SECOND ); - -if (err <0 ) -return err; - - rtc->second_enabled = enabled; - -return 0 ; -} -static int pcf50633_rtc_read_time (struct device *dev,struct rtc_time *tm) {struct pcf50633_rtc *rtc;
@@ -262,8 +243,7 @@ static struct rtc_class_ops pcf50633_rtc_ops = { .set_time = pcf50633_rtc_set_time, .read_alarm = pcf50633_rtc_read_alarm, .set_alarm = pcf50633_rtc_set_alarm, - .alarm_irq_enable = pcf50633_rtc_alarm_irq_enable, - .update_irq_enable = pcf50633_rtc_update_irq_enable, + .alarm_irq_enable = pcf50633_rtc_alarm_irq_enable, };static void pcf50633_rtc_irq (int irq,void *data)
drivers/rtc/rtc-pl030.c +0 -6
@@ -35,11 +35,6 @@ static irqreturn_t pl030_interrupt(int irq, void *dev_id)return IRQ_HANDLED ; } -static int pl030_ioctl (struct device *dev,unsigned int cmd,unsigned long arg) -{ -return -ENOIOCTLCMD ; -} -static int pl030_read_alarm (struct device *dev,struct rtc_wkalrm *alrm) {struct pl030_rtc *rtc =dev_get_drvdata (dev);
@@ -96,7 +91,6 @@ static int pl030_set_time(struct device *dev, struct rtc_time *tm) }static const struct rtc_class_ops pl030_ops = { - .ioctl = pl030_ioctl, .read_time = pl030_read_time, .set_time = pl030_set_time, .read_alarm = pl030_read_alarm,
drivers/rtc/rtc-pl031.c +0 -55
73 lines not on this page · raw message
drivers/rtc/rtc-proc.c +8 -0
@@ -69,6 +69,14 @@ static int rtc_proc_show(struct seq_file *seq, void *offset) alrm.enabled ? "yes" : "no");seq_printf (seq,"alrm_pending\t: %s\n" , alrm.pending ?"yes" :"no" ); +seq_printf (seq,"update IRQ enabled\t: %s\n" , + (rtc->uie_rtctimer.enabled) ?"yes" :"no" ); +seq_printf (seq,"periodic IRQ enabled\t: %s\n" , + (rtc->pie_enabled) ?"yes" :"no" ); +seq_printf (seq,"periodic IRQ frequency\t: %d\n" , + rtc->irq_freq); +seq_printf (seq,"max user IRQ frequency\t: %d\n" , + rtc->max_user_freq); }seq_printf (seq,"24hr\t\t: yes\n" );
drivers/rtc/rtc-pxa.c +0 -44
63 lines not on this page · raw message
drivers/rtc/rtc-rs5c372.c +0 -52
64 lines not on this page · raw message
drivers/rtc/rtc-rx8025.c +0 -25
@@ -424,37 +424,12 @@ static int rx8025_alarm_irq_enable(struct device *dev, unsigned int enabled)return 0 ; } -static int rx8025_irq_set_state (struct device *dev,int enabled) -{ -struct i2c_client *client =to_i2c_client (dev); -struct rx8025_data *rx8025 =i2c_get_clientdata (client); -int ctrl1; -int err; - -if (client->irq <=0 ) -return -ENXIO ; - - ctrl1 = rx8025->ctrl1 & ~RX8025_BIT_CTRL1_CT ; -if (enabled) - ctrl1 |=RX8025_BIT_CTRL1_CT_1HZ ; -if (ctrl1 != rx8025->ctrl1) { - rx8025->ctrl1 = ctrl1; - err =rx8025_write_reg (rx8025->client,RX8025_REG_CTRL1 , - rx8025->ctrl1); -if (err) -return err; - } - -return 0 ; -} -static struct rtc_class_ops rx8025_rtc_ops = { .read_time = rx8025_get_time, .set_time = rx8025_set_time, .read_alarm = rx8025_read_alarm, .set_alarm = rx8025_set_alarm, .alarm_irq_enable = rx8025_alarm_irq_enable, - .irq_set_state = rx8025_irq_set_state, };/*
drivers/rtc/rtc-s3c.c +0 -33
@@ -93,37 +93,6 @@ static int s3c_rtc_setaie(struct device *dev, unsigned int enabled)return 0 ; } -static int s3c_rtc_setpie (struct device *dev,int enabled) -{ -unsigned int tmp; - -pr_debug ("%s: pie=%d\n" , __func__, enabled); - -spin_lock_irq (&s3c_rtc_pie_lock); - -if (s3c_rtc_cpu_type ==TYPE_S3C64XX ) { - tmp =readw (s3c_rtc_base +S3C2410_RTCCON ); - tmp &= ~S3C64XX_RTCCON_TICEN ; - -if (enabled) - tmp |=S3C64XX_RTCCON_TICEN ; - -writew (tmp, s3c_rtc_base +S3C2410_RTCCON ); - }else { - tmp =readb (s3c_rtc_base +S3C2410_TICNT ); - tmp &= ~S3C2410_TICNT_ENABLE ; - -if (enabled) - tmp |=S3C2410_TICNT_ENABLE ; - -writeb (tmp, s3c_rtc_base +S3C2410_TICNT ); - } - -spin_unlock_irq (&s3c_rtc_pie_lock); - -return 0 ; -} -static int s3c_rtc_setfreq (struct device *dev,int freq) {struct platform_device *pdev =to_platform_device (dev);
@@ -379,8 +348,6 @@ static const struct rtc_class_ops s3c_rtcops = { .set_time = s3c_rtc_settime, .read_alarm = s3c_rtc_getalarm, .set_alarm = s3c_rtc_setalarm, - .irq_set_freq = s3c_rtc_setfreq, - .irq_set_state = s3c_rtc_setpie, .proc = s3c_rtc_proc, .alarm_irq_enable = s3c_rtc_setaie, };
drivers/rtc/rtc-sa1100.c +5 -155
225 lines not on this page · raw message
drivers/rtc/rtc-sh.c +0 -24
@@ -344,27 +344,6 @@ static inline void sh_rtc_setcie(struct device *dev, unsigned int enable)spin_unlock_irq (&rtc->lock); } -static int sh_rtc_ioctl (struct device *dev,unsigned int cmd,unsigned long arg) -{ -struct sh_rtc *rtc =dev_get_drvdata (dev); -unsigned int ret =0 ; - -switch (cmd) { -case RTC_UIE_OFF : - rtc->periodic_freq &= ~PF_OXS ; -sh_rtc_setcie (dev,0 ); -break ; -case RTC_UIE_ON : - rtc->periodic_freq |=PF_OXS ; -sh_rtc_setcie (dev,1 ); -break ; -default : - ret = -ENOIOCTLCMD ; - } - -return ret; -} -static int sh_rtc_alarm_irq_enable (struct device *dev,unsigned int enabled) {sh_rtc_setaie (dev, enabled);
@@ -598,13 +577,10 @@ static int sh_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *wkalrm) }static struct rtc_class_ops sh_rtc_ops = { - .ioctl = sh_rtc_ioctl, .read_time = sh_rtc_read_time, .set_time = sh_rtc_set_time, .read_alarm = sh_rtc_read_alarm, .set_alarm = sh_rtc_set_alarm, - .irq_set_state = sh_rtc_irq_set_state, - .irq_set_freq = sh_rtc_irq_set_freq, .proc = sh_rtc_proc, .alarm_irq_enable = sh_rtc_alarm_irq_enable, };
drivers/rtc/rtc-stmp3xxx.c +0 -15
@@ -115,19 +115,6 @@ static int stmp3xxx_alarm_irq_enable(struct device *dev, unsigned int enabled)return 0 ; } -static int stmp3xxx_update_irq_enable (struct device *dev,unsigned int enabled) -{ -struct stmp3xxx_rtc_data *rtc_data =dev_get_drvdata (dev); - -if (enabled) -stmp3xxx_setl (BM_RTC_CTRL_ONEMSEC_IRQ_EN , - rtc_data->io +HW_RTC_CTRL ); -else -stmp3xxx_clearl (BM_RTC_CTRL_ONEMSEC_IRQ_EN , - rtc_data->io +HW_RTC_CTRL ); -return 0 ; -} -static int stmp3xxx_rtc_read_alarm (struct device *dev,struct rtc_wkalrm *alm) {struct stmp3xxx_rtc_data *rtc_data =dev_get_drvdata (dev);
@@ -149,8 +136,6 @@ static int stmp3xxx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)static struct rtc_class_ops stmp3xxx_rtc_ops = { .alarm_irq_enable = stmp3xxx_alarm_irq_enable, - .update_irq_enable = - stmp3xxx_update_irq_enable, .read_time = stmp3xxx_rtc_gettime, .set_mmss = stmp3xxx_rtc_set_mmss, .read_alarm = stmp3xxx_rtc_read_alarm,
drivers/rtc/rtc-test.c +9 -4
@@ -78,11 +78,16 @@ static ssize_t test_irq_store(struct device *dev,struct rtc_device *rtc =platform_get_drvdata (plat_dev); retval = count; -if (strncmp (buf,"tick" ,4 ) ==0 ) +if (strncmp (buf,"tick" ,4 ) ==0 && rtc->pie_enabled)rtc_update_irq (rtc,1 ,RTC_PF |RTC_IRQF ); -else if (strncmp (buf,"alarm" ,5 ) ==0 ) -rtc_update_irq (rtc,1 ,RTC_AF |RTC_IRQF ); -else if (strncmp (buf,"update" ,6 ) ==0 ) +else if (strncmp (buf,"alarm" ,5 ) ==0 ) { +struct rtc_wkalrm alrm; +int err =rtc_read_alarm (rtc, &alrm); + +if (!err && alrm.enabled) +rtc_update_irq (rtc,1 ,RTC_AF |RTC_IRQF ); + + }else if (strncmp (buf,"update" ,6 ) ==0 && rtc->uie_rtctimer.enabled)rtc_update_irq (rtc,1 ,RTC_UF |RTC_IRQF );else retval = -EINVAL ;
drivers/rtc/rtc-twl.c +0 -13
@@ -213,18 +213,6 @@ static int twl_rtc_alarm_irq_enable(struct device *dev, unsigned enabled)return ret; } -static int twl_rtc_update_irq_enable (struct device *dev,unsigned enabled) -{ -int ret; - -if (enabled) - ret =set_rtc_irq_bit (BIT_RTC_INTERRUPTS_REG_IT_TIMER_M ); -else - ret =mask_rtc_irq_bit (BIT_RTC_INTERRUPTS_REG_IT_TIMER_M ); - -return ret; -} -/* * Gets current TWL RTC time and date parameters. *
@@ -433,7 +421,6 @@ static struct rtc_class_ops twl_rtc_ops = { .read_alarm = twl_rtc_read_alarm, .set_alarm = twl_rtc_set_alarm, .alarm_irq_enable = twl_rtc_alarm_irq_enable, - .update_irq_enable = twl_rtc_update_irq_enable, };/*----------------------------------------------------------------------*/
drivers/rtc/rtc-vr41xx.c +0 -32
@@ -207,36 +207,6 @@ static int vr41xx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *wkalrm)return 0 ; } -static int vr41xx_rtc_irq_set_freq (struct device *dev,int freq) -{ -u64 count; - -if (!is_power_of_2 (freq)) -return -EINVAL ; - count =RTC_FREQUENCY ; -do_div (count, freq); - -spin_lock_irq (&rtc_lock); - - periodic_count = count; -rtc1_write (RTCL1LREG , periodic_count); -rtc1_write (RTCL1HREG , periodic_count >>16 ); - -spin_unlock_irq (&rtc_lock); - -return 0 ; -} - -static int vr41xx_rtc_irq_set_state (struct device *dev,int enabled) -{ -if (enabled) -enable_irq (pie_irq); -else -disable_irq (pie_irq); - -return 0 ; -} -static int vr41xx_rtc_ioctl (struct device *dev,unsigned int cmd,unsigned long arg) {switch (cmd) {
@@ -308,8 +278,6 @@ static const struct rtc_class_ops vr41xx_rtc_ops = { .set_time = vr41xx_rtc_set_time, .read_alarm = vr41xx_rtc_read_alarm, .set_alarm = vr41xx_rtc_set_alarm, - .irq_set_freq = vr41xx_rtc_irq_set_freq, - .irq_set_state = vr41xx_rtc_irq_set_state, };static int __devinit rtc_probe (struct platform_device *pdev)
drivers/rtc/rtc-wm831x.c +0 -16
@@ -315,21 +315,6 @@ static int wm831x_rtc_alarm_irq_enable(struct device *dev,return wm831x_rtc_stop_alarm (wm831x_rtc); } -static int wm831x_rtc_update_irq_enable (struct device *dev, -unsigned int enabled) -{ -struct wm831x_rtc *wm831x_rtc =dev_get_drvdata (dev); -int val; - -if (enabled) - val =1 <<WM831X_RTC_PINT_FREQ_SHIFT ; -else - val =0 ; - -return wm831x_set_bits (wm831x_rtc->wm831x,WM831X_RTC_CONTROL , -WM831X_RTC_PINT_FREQ_MASK , val); -} -static irqreturn_t wm831x_alm_irq (int irq,void *data) {struct wm831x_rtc *wm831x_rtc = data;
@@ -354,7 +339,6 @@ static const struct rtc_class_ops wm831x_rtc_ops = { .read_alarm = wm831x_rtc_readalarm, .set_alarm = wm831x_rtc_setalarm, .alarm_irq_enable = wm831x_rtc_alarm_irq_enable, - .update_irq_enable = wm831x_rtc_update_irq_enable, };#ifdef CONFIG_PM
drivers/rtc/rtc-wm8350.c +0 -21
@@ -302,26 +302,6 @@ static int wm8350_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)return ret; } -static int wm8350_rtc_update_irq_enable (struct device *dev, -unsigned int enabled) -{ -struct wm8350 *wm8350 =dev_get_drvdata (dev); - -/* Suppress duplicate changes since genirq nests enable and -* disable calls. */ -if (enabled == wm8350->rtc.update_enabled) -return 0 ; - -if (enabled) -wm8350_unmask_irq (wm8350,WM8350_IRQ_RTC_SEC ); -else -wm8350_mask_irq (wm8350,WM8350_IRQ_RTC_SEC ); - - wm8350->rtc.update_enabled = enabled; - -return 0 ; -} -static irqreturn_t wm8350_rtc_alarm_handler (int irq,void *data) {struct wm8350 *wm8350 = data;
@@ -357,7 +337,6 @@ static const struct rtc_class_ops wm8350_rtc_ops = { .read_alarm = wm8350_rtc_readalarm, .set_alarm = wm8350_rtc_setalarm, .alarm_irq_enable = wm8350_rtc_alarm_irq_enable, - .update_irq_enable = wm8350_rtc_update_irq_enable, };#ifdef CONFIG_PM
include/linux/rtc.h +1 -4
@@ -133,7 +133,6 @@ extern struct class *rtc_class;* The (current) exceptions are mostly filesystem hooks: * - the proc() hook for procfs * - non-ioctl() chardev hooks: open(), release(), read_callback() -* - periodic irq calls: irq_set_state(), irq_set_freq() * * REVISIT those periodic irq calls *do* have ops_lock when they're * issued through ioctl() ...
@@ -148,11 +147,8 @@ struct rtc_class_ops {int (*set_alarm)(struct device *,struct rtc_wkalrm *);int (*proc)(struct device *,struct seq_file *);int (*set_mmss)(struct device *,unsigned long secs); -int (*irq_set_state)(struct device *,int enabled); -int (*irq_set_freq)(struct device *,int freq);int (*read_callback)(struct device *,int data);int (*alarm_irq_enable)(struct device *,unsigned int enabled); -int (*update_irq_enable)(struct device *,unsigned int enabled); };#define RTC_DEVICE_NAME_SIZE 20
@@ -227,6 +223,7 @@ extern void rtc_device_unregister(struct rtc_device *rtc);extern int rtc_read_time (struct rtc_device *rtc,struct rtc_time *tm);extern int rtc_set_time (struct rtc_device *rtc,struct rtc_time *tm);extern int rtc_set_mmss (struct rtc_device *rtc,unsigned long secs); +int __rtc_read_alarm (struct rtc_device *rtc,struct rtc_wkalrm *alarm);extern int rtc_read_alarm (struct rtc_device *rtc,struct rtc_wkalrm *alrm); extern int rtc_set_alarm(struct rtc_device *rtc,