RTC: Cleanup rtc_class_ops->irq_set_freq()
With the generic rtc code now emulating PIE mode irqs via an hrtimer, no one calls the rtc_class_ops->irq_set_freq call. This patch removes the hook and deletes the driver functions if no one else calls them. CC: Thomas Gleixner <tglx@linutronix.de> CC: Alessandro Zummo <a.zummo@towertech.it> CC: Marcelo Roberto Jimenez <mroberto@cpti.cetuc.puc-rio.br> CC: rtc-linux@googlegroups.com Signed-off-by: John Stultz <john.stultz@linaro.org>
This commit is contained in:
		
							parent
							
								
									80d4bb515b
								
							
						
					
					
						commit
						696160fec1
					
				| @ -375,31 +375,6 @@ static int cmos_set_alarm(struct device *dev, struct rtc_wkalrm *t) | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int cmos_irq_set_freq(struct device *dev, int freq) | ||||
| { | ||||
| 	struct cmos_rtc	*cmos = dev_get_drvdata(dev); | ||||
| 	int		f; | ||||
| 	unsigned long	flags; | ||||
| 
 | ||||
| 	if (!is_valid_irq(cmos->irq)) | ||||
| 		return -ENXIO; | ||||
| 
 | ||||
| 	if (!is_power_of_2(freq)) | ||||
| 		return -EINVAL; | ||||
| 	/* 0 = no irqs; 1 = 2^15 Hz ... 15 = 2^0 Hz */ | ||||
| 	f = ffs(freq); | ||||
| 	if (f-- > 16) | ||||
| 		return -EINVAL; | ||||
| 	f = 16 - f; | ||||
| 
 | ||||
| 	spin_lock_irqsave(&rtc_lock, flags); | ||||
| 	hpet_set_periodic_freq(freq); | ||||
| 	CMOS_WRITE(RTC_REF_CLCK_32KHZ | f, RTC_FREQ_SELECT); | ||||
| 	spin_unlock_irqrestore(&rtc_lock, flags); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int cmos_alarm_irq_enable(struct device *dev, unsigned int enabled) | ||||
| { | ||||
| 	struct cmos_rtc	*cmos = dev_get_drvdata(dev); | ||||
| @ -482,7 +457,6 @@ static const struct rtc_class_ops cmos_rtc_ops = { | ||||
| 	.read_alarm		= cmos_read_alarm, | ||||
| 	.set_alarm		= cmos_set_alarm, | ||||
| 	.proc			= cmos_procfs, | ||||
| 	.irq_set_freq		= cmos_irq_set_freq, | ||||
| 	.alarm_irq_enable	= cmos_alarm_irq_enable, | ||||
| 	.update_irq_enable	= cmos_update_irq_enable, | ||||
| }; | ||||
|  | ||||
| @ -473,22 +473,6 @@ static int davinci_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm) | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int davinci_rtc_irq_set_freq(struct device *dev, int freq) | ||||
| { | ||||
| 	struct davinci_rtc *davinci_rtc = dev_get_drvdata(dev); | ||||
| 	unsigned long flags; | ||||
| 	u16 tmr_counter = (0x8000 >> (ffs(freq) - 1)); | ||||
| 
 | ||||
| 	spin_lock_irqsave(&davinci_rtc_lock, flags); | ||||
| 
 | ||||
| 	rtcss_write(davinci_rtc, tmr_counter & 0xFF, PRTCSS_RTC_TMR0); | ||||
| 	rtcss_write(davinci_rtc, (tmr_counter & 0xFF00) >> 8, PRTCSS_RTC_TMR1); | ||||
| 
 | ||||
| 	spin_unlock_irqrestore(&davinci_rtc_lock, flags); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static struct rtc_class_ops davinci_rtc_ops = { | ||||
| 	.ioctl			= davinci_rtc_ioctl, | ||||
| 	.read_time		= davinci_rtc_read_time, | ||||
| @ -496,7 +480,6 @@ static struct rtc_class_ops davinci_rtc_ops = { | ||||
| 	.alarm_irq_enable	= davinci_rtc_alarm_irq_enable, | ||||
| 	.read_alarm		= davinci_rtc_read_alarm, | ||||
| 	.set_alarm		= davinci_rtc_set_alarm, | ||||
| 	.irq_set_freq		= davinci_rtc_irq_set_freq, | ||||
| }; | ||||
| 
 | ||||
| static int __init davinci_rtc_probe(struct platform_device *pdev) | ||||
|  | ||||
| @ -293,25 +293,6 @@ static int pl031_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| static int pl031_irq_set_freq(struct device *dev, int freq) | ||||
| { | ||||
| 	struct pl031_local *ldata = dev_get_drvdata(dev); | ||||
| 
 | ||||
| 	/* Cant set timer if it is already enabled */ | ||||
| 	if (readl(ldata->base + RTC_TCR) & RTC_TCR_EN) { | ||||
| 		dev_err(dev, "can't change frequency while timer enabled\n"); | ||||
| 		return -EINVAL; | ||||
| 	} | ||||
| 
 | ||||
| 	/* If self start bit in RTC_TCR is set timer will start here,
 | ||||
| 	 * but we never set that bit. Instead we start the timer when | ||||
| 	 * set_state is called with enabled == 1. | ||||
| 	 */ | ||||
| 	writel(RTC_TIMER_FREQ / freq, ldata->base + RTC_TLR); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int pl031_remove(struct amba_device *adev) | ||||
| { | ||||
| 	struct pl031_local *ldata = dev_get_drvdata(&adev->dev); | ||||
| @ -408,7 +389,6 @@ static struct rtc_class_ops stv1_pl031_ops = { | ||||
| 	.read_alarm = pl031_read_alarm, | ||||
| 	.set_alarm = pl031_set_alarm, | ||||
| 	.alarm_irq_enable = pl031_alarm_irq_enable, | ||||
| 	.irq_set_freq = pl031_irq_set_freq, | ||||
| }; | ||||
| 
 | ||||
| /* And the second ST derivative */ | ||||
| @ -418,7 +398,6 @@ static struct rtc_class_ops stv2_pl031_ops = { | ||||
| 	.read_alarm = pl031_stv2_read_alarm, | ||||
| 	.set_alarm = pl031_stv2_set_alarm, | ||||
| 	.alarm_irq_enable = pl031_alarm_irq_enable, | ||||
| 	.irq_set_freq = pl031_irq_set_freq, | ||||
| }; | ||||
| 
 | ||||
| static struct amba_id pl031_ids[] = { | ||||
|  | ||||
| @ -209,20 +209,6 @@ static void pxa_rtc_release(struct device *dev) | ||||
| 	free_irq(pxa_rtc->irq_1Hz, dev); | ||||
| } | ||||
| 
 | ||||
| static int pxa_periodic_irq_set_freq(struct device *dev, int freq) | ||||
| { | ||||
| 	struct pxa_rtc *pxa_rtc = dev_get_drvdata(dev); | ||||
| 	int period_ms; | ||||
| 
 | ||||
| 	if (freq < 1 || freq > MAXFREQ_PERIODIC) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	period_ms = 1000 / freq; | ||||
| 	rtc_writel(pxa_rtc, PIAR, period_ms); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int pxa_alarm_irq_enable(struct device *dev, unsigned int enabled) | ||||
| { | ||||
| 	struct pxa_rtc *pxa_rtc = dev_get_drvdata(dev); | ||||
| @ -336,7 +322,6 @@ static const struct rtc_class_ops pxa_rtc_ops = { | ||||
| 	.alarm_irq_enable = pxa_alarm_irq_enable, | ||||
| 	.update_irq_enable = pxa_update_irq_enable, | ||||
| 	.proc = pxa_rtc_proc, | ||||
| 	.irq_set_freq = pxa_periodic_irq_set_freq, | ||||
| }; | ||||
| 
 | ||||
| static int __init pxa_rtc_probe(struct platform_device *pdev) | ||||
|  | ||||
| @ -348,7 +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, | ||||
| 	.proc		= s3c_rtc_proc, | ||||
| 	.alarm_irq_enable = s3c_rtc_setaie, | ||||
| }; | ||||
|  | ||||
| @ -392,7 +392,6 @@ static const struct rtc_class_ops sa1100_rtc_ops = { | ||||
| 	.read_alarm = sa1100_rtc_read_alarm, | ||||
| 	.set_alarm = sa1100_rtc_set_alarm, | ||||
| 	.proc = sa1100_rtc_proc, | ||||
| 	.irq_set_freq = sa1100_irq_set_freq, | ||||
| 	.alarm_irq_enable = sa1100_rtc_alarm_irq_enable, | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -603,7 +603,6 @@ static struct rtc_class_ops sh_rtc_ops = { | ||||
| 	.set_time	= sh_rtc_set_time, | ||||
| 	.read_alarm	= sh_rtc_read_alarm, | ||||
| 	.set_alarm	= sh_rtc_set_alarm, | ||||
| 	.irq_set_freq	= sh_rtc_irq_set_freq, | ||||
| 	.proc		= sh_rtc_proc, | ||||
| 	.alarm_irq_enable = sh_rtc_alarm_irq_enable, | ||||
| }; | ||||
|  | ||||
| @ -207,26 +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_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) | ||||
| { | ||||
| 	switch (cmd) { | ||||
| @ -298,7 +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, | ||||
| }; | ||||
| 
 | ||||
| static int __devinit rtc_probe(struct platform_device *pdev) | ||||
|  | ||||
| @ -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,7 +147,6 @@ 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_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); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user