Re: [patch 2.6.27-rc5-omap1] rtc-twl4030 cleanup

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



* David Brownell <david-b@xxxxxxxxxxx> [080904 10:25]:
> From: David Brownell <dbrownell@xxxxxxxxxxxxxxxxxxxxx>
> 
> Some rtc-twl4030 cleanup, which among other things adds up to
> using about 10% less object code:
> 
>  - Remove:
>     * broken/unfixable "periodic" IRQ support (2^N Hz)
>     * duplicated constants in the header file
>     * pointless stuff:
>        + support for settable epoch
>        + memset() calls
>        + indirection when reading time and alarm
>        + indirection when enabling irqs
>     * needless ifdeffery for reading irq enable register
>  - IRQ updates:
>     * group irq enable/disable utilities together
>     * cache irq enable register
>     * now disable any old alarm irq before setting alarm
>  - Comment updates
>     * fix up my copyright attribution (old omap1 code)
>     * more correctly describe the rtc mask/set ops
>     * have a single place describe the register vs tm_* differences
>  - Other:
>     * don't support "current" dates in the 20th century
>     * switch over to bcd2bin()/bin2bcd()
>     * prefer dev_err() and better messages to printk(KERN_ERR...)
>     * correct some KERN_WARNING messages (should have been pr_err)
>     * whitespace bugs
>     * misc
> 
> The bugs fixed here are removing "periodic" IRQ support, and
> some of the messaging.  Update IRQs still misbehave (two per
> second, not one!), and the alarm isn't wake-enabled.

Pushing today.

Tony


> 
> Signed-off-by: David Brownell <dbrownell@xxxxxxxxxxxxxxxxxxxxx>
> ---
>  drivers/rtc/rtc-twl4030.c       |  328 +++++++++++---------------------------
>  include/linux/i2c/twl4030-rtc.h |   58 ------
>  2 files changed, 103 insertions(+), 283 deletions(-)
> 
> --- a/drivers/rtc/rtc-twl4030.c
> +++ b/drivers/rtc/rtc-twl4030.c
> @@ -1,7 +1,5 @@
>  /*
> - * drivers/rtc/rtc-twl4030.c
> - *
> - * TWL4030 Real Time Clock interface
> + * rtc-twl4030.c -- TWL4030 Real Time Clock interface
>   *
>   * Copyright (C) 2007 MontaVista Software, Inc
>   * Author: Alexandre Rusev <source@xxxxxxxxxx>
> @@ -12,14 +10,12 @@
>   * Based on rtc-omap.c
>   *   Copyright (C) 2003 MontaVista Software, Inc.
>   *   Author: George G. Davis <gdavis@xxxxxxxxxx> or <source@xxxxxxxxxx>
> - *
>   *   Copyright (C) 2006 David Brownell
>   *
>   * This program is free software; you can redistribute it and/or
>   * modify it under the terms of the GNU General Public License
>   * as published by the Free Software Foundation; either version
>   * 2 of the License, or (at your option) any later version.
> - *
>   */
>  
>  #include <linux/kernel.h>
> @@ -46,12 +42,6 @@
>  #define ALL_TIME_REGS		6
>  
>  /*
> - * If this driver ever becomes modularised, it will be really nice
> - * to make the epoch retain its value across module reload...
> - */
> -static int epoch = 1900;	/* year corresponding to 0x00   */
> -
> -/*
>   * Supports 1 byte read from TWL4030 RTC register.
>   */
>  static int twl4030_rtc_read_u8(u8 *data, u8 reg)
> @@ -59,10 +49,9 @@ static int twl4030_rtc_read_u8(u8 *data,
>  	int ret;
>  
>  	ret = twl4030_i2c_read_u8(TWL4030_MODULE_RTC, data, reg);
> -	if (ret < 0) {
> -		printk(KERN_WARNING "twl4030_rtc: Could not read TWL4030"
> -		       "register %X - returned %d[%x]\n", reg, ret, ret);
> -	}
> +	if (ret < 0)
> +		pr_err("twl4030_rtc: Could not read TWL4030"
> +		       "register %X - error %d\n", reg, ret);
>  	return ret;
>  }
>  
> @@ -74,68 +63,54 @@ static int twl4030_rtc_write_u8(u8 data,
>  	int ret;
>  
>  	ret = twl4030_i2c_write_u8(TWL4030_MODULE_RTC, data, reg);
> -	if (ret < 0) {
> -		printk(KERN_WARNING "twl4030_rtc: Could not write TWL4030"
> -		       "register %X - returned %d[%x]\n", reg, ret, ret);
> -	}
> +	if (ret < 0)
> +		pr_err("twl4030_rtc: Could not write TWL4030"
> +		       "register %X - error %d\n", reg, ret);
>  	return ret;
>  }
>  
>  /*
> - * Enables timer or alarm interrupts.
> + * Cache the value for timer/alarm interrupts register; this is
> + * only changed by callers holding rtc ops lock (or resume).
> + */
> +static unsigned char rtc_irq_bits;
> +
> +/*
> + * Enable timer and/or alarm interrupts.
>   */
>  static int set_rtc_irq_bit(unsigned char bit)
>  {
>  	unsigned char val;
>  	int ret;
>  
> -	ret = twl4030_rtc_read_u8(&val, REG_RTC_INTERRUPTS_REG);
> -	if (ret < 0)
> -		goto set_irq_out;
> -
> -	val |= bit;
> +	val = rtc_irq_bits | bit;
>  	ret = twl4030_rtc_write_u8(val, REG_RTC_INTERRUPTS_REG);
> +	if (ret == 0)
> +		rtc_irq_bits = val;
>  
> -set_irq_out:
>  	return ret;
>  }
>  
> -#ifdef CONFIG_PM
>  /*
> - * Read timer or alarm interrupts register.
> - */
> -static int get_rtc_irq_bit(unsigned char *val)
> -{
> -	int ret;
> -
> -	ret = twl4030_rtc_read_u8(val, REG_RTC_INTERRUPTS_REG);
> -	return ret;
> -}
> -#endif
> -/*
> - * Disables timer or alarm interrupts.
> + * Disable timer and/or alarm interrupts.
>   */
>  static int mask_rtc_irq_bit(unsigned char bit)
>  {
>  	unsigned char val;
>  	int ret;
>  
> -	ret = twl4030_rtc_read_u8(&val, REG_RTC_INTERRUPTS_REG);
> -	if (ret < 0)
> -		goto mask_irq_out;
> -
> -	val &= ~bit;
> +	val = rtc_irq_bits & ~bit;
>  	ret = twl4030_rtc_write_u8(val, REG_RTC_INTERRUPTS_REG);
> +	if (ret == 0)
> +		rtc_irq_bits = val;
>  
> -mask_irq_out:
>  	return ret;
>  }
>  
> -static int twl4030_rtc_alarm_irq_set_state(struct device *dev, int enabled)
> +static inline int twl4030_rtc_alarm_irq_set_state(int enabled)
>  {
>  	int ret;
>  
> -	/* Allow ints for RTC ALARM updates.  */
>  	if (enabled)
>  		ret = set_rtc_irq_bit(BIT_RTC_INTERRUPTS_REG_IT_ALARM_M);
>  	else
> @@ -144,10 +119,28 @@ static int twl4030_rtc_alarm_irq_set_sta
>  	return ret;
>  }
>  
> +static inline int twl4030_rtc_irq_set_state(int 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 TWL4030 RTC time and date parameters.
> + *
> + * The RTC's time/alarm representation is not what gmtime(3) requires
> + * Linux to use:
> + *
> + *  - Months are 1..12 vs Linux 0-11
> + *  - Years are 0..99 vs Linux 1900..N (we assume 21st century)
>   */
> -static int get_rtc_time(struct rtc_time *rtc_tm)
> +static int twl4030_rtc_read_time(struct device *dev, struct rtc_time *tm)
>  {
>  	unsigned char rtc_data[ALL_TIME_REGS + 1];
>  	int ret;
> @@ -167,26 +160,16 @@ static int get_rtc_time(struct rtc_time 
>  			       REG_SECONDS_REG, ALL_TIME_REGS);
>  
>  	if (ret < 0) {
> -		printk(KERN_ERR "twl4030_rtc: twl4030_i2c_read error.\n");
> +		dev_err(dev, "rtc_read_time error %d\n", ret);
>  		return ret;
>  	}
>  
> -	rtc_tm->tm_sec = BCD2BIN(rtc_data[0]);
> -	rtc_tm->tm_min = BCD2BIN(rtc_data[1]);
> -	rtc_tm->tm_hour = BCD2BIN(rtc_data[2]);
> -	rtc_tm->tm_mday = BCD2BIN(rtc_data[3]);
> -	rtc_tm->tm_mon = BCD2BIN(rtc_data[4]);
> -	rtc_tm->tm_year = BCD2BIN(rtc_data[5]);
> -
> -	/*
> -	 * Account for differences between how the RTC uses the values
> -	 * and how they are defined in a struct rtc_time;
> -	 */
> -	rtc_tm->tm_year += (epoch - 1900);
> -	if (rtc_tm->tm_year <= 69)
> -		rtc_tm->tm_year += 100;
> -
> -	rtc_tm->tm_mon--;
> +	tm->tm_sec = bcd2bin(rtc_data[0]);
> +	tm->tm_min = bcd2bin(rtc_data[1]);
> +	tm->tm_hour = bcd2bin(rtc_data[2]);
> +	tm->tm_mday = bcd2bin(rtc_data[3]);
> +	tm->tm_mon = bcd2bin(rtc_data[4]) - 1;
> +	tm->tm_year = bcd2bin(rtc_data[5]) + 100;
>  
>  	return ret;
>  }
> @@ -197,15 +180,12 @@ static int twl4030_rtc_set_time(struct d
>  	unsigned char rtc_data[ALL_TIME_REGS + 1];
>  	int ret;
>  
> -	/* Month range is 01..12 */
> -	tm->tm_mon++;
> -
> -	rtc_data[1] = BIN2BCD(tm->tm_sec);
> -	rtc_data[2] = BIN2BCD(tm->tm_min);
> -	rtc_data[3] = BIN2BCD(tm->tm_hour);
> -	rtc_data[4] = BIN2BCD(tm->tm_mday);
> -	rtc_data[5] = BIN2BCD(tm->tm_mon);
> -	rtc_data[6] = BIN2BCD(tm->tm_year);
> +	rtc_data[1] = bin2bcd(tm->tm_sec);
> +	rtc_data[2] = bin2bcd(tm->tm_min);
> +	rtc_data[3] = bin2bcd(tm->tm_hour);
> +	rtc_data[4] = bin2bcd(tm->tm_mday);
> +	rtc_data[5] = bin2bcd(tm->tm_mon + 1);
> +	rtc_data[6] = bin2bcd(tm->tm_year - 100);
>  
>  	/* Stop RTC while updating the TC registers */
>  	ret = twl4030_rtc_read_u8(&save_control, REG_RTC_CTRL_REG);
> @@ -217,11 +197,11 @@ static int twl4030_rtc_set_time(struct d
>  	if (ret < 0)
>  		goto out;
>  
> -	/* update all the alarm registers in one shot */
> +	/* update all the time registers in one shot */
>  	ret = twl4030_i2c_write(TWL4030_MODULE_RTC, rtc_data,
>  			REG_SECONDS_REG, ALL_TIME_REGS);
>  	if (ret < 0) {
> -		printk(KERN_ERR "twl4030: twl4030_i2c_write error.\n");
> +		dev_err(dev, "rtc_set_time error %d\n", ret);
>  		goto out;
>  	}
>  
> @@ -236,7 +216,7 @@ out:
>  /*
>   * Gets current TWL4030 RTC alarm time.
>   */
> -static int get_rtc_alm_time(struct rtc_time *alm_tm)
> +static int twl4030_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm)
>  {
>  	unsigned char rtc_data[ALL_TIME_REGS + 1];
>  	int ret;
> @@ -244,85 +224,21 @@ static int get_rtc_alm_time(struct rtc_t
>  	ret = twl4030_i2c_read(TWL4030_MODULE_RTC, rtc_data,
>  			       REG_ALARM_SECONDS_REG, ALL_TIME_REGS);
>  	if (ret < 0) {
> -		printk(KERN_ERR "twl4030_rtc: twl4030_i2c_read error.\n");
> +		dev_err(dev, "rtc_read_alarm error %d\n", ret);
>  		return ret;
>  	}
>  
> -	alm_tm->tm_sec = BCD2BIN(rtc_data[0]);
> -	alm_tm->tm_min = BCD2BIN(rtc_data[1]);
> -	alm_tm->tm_hour = BCD2BIN(rtc_data[2]);
> -	alm_tm->tm_mday = BCD2BIN(rtc_data[3]);
> -	alm_tm->tm_mon = BCD2BIN(rtc_data[4]);
> -	alm_tm->tm_year = BCD2BIN(rtc_data[5]);
> -
> -	/*
> -	 * Account for differences between how the RTC uses the values
> -	 * and how they are defined in a struct rtc_time;
> -	 */
> -	alm_tm->tm_year += (epoch - 1900);
> -	if (alm_tm->tm_year <= 69)
> -		alm_tm->tm_year += 100;
> -
> -	alm_tm->tm_mon--;
> -
> -	return ret;
> -}
> -
> -static int twl4030_rtc_read_time(struct device *dev, struct rtc_time *tm)
> -{
> -	int ret;
> -
> -	memset(tm, 0, sizeof(struct rtc_time));
> -	ret = get_rtc_time(tm);
> -
> -	return ret;
> -}
> -
> -/*
> - * Gets current TWL4030 RTC alarm time.
> - */
> -static int twl4030_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm)
> -{
> -	int ret;
> -	u8 rtc_interrupts_reg = 0;
> -
> -	/*
> -	 * This returns a struct rtc_time. Reading >= 0xc0
> -	 * means "don't care" or "match all". Only the tm_hour,
> -	 * tm_min, and tm_sec values are filled in.
> -	 */
> -	memset(&alm->time, 0, sizeof(struct rtc_time));
> -	ret = get_rtc_alm_time(&alm->time);
> -
> -	if (ret)
> -		goto out;
> -
> -	/* Check alarm enabled flag state */
> -	ret =
> -	    ret | twl4030_i2c_read_u8(TWL4030_MODULE_RTC, &rtc_interrupts_reg,
> -				      REG_RTC_INTERRUPTS_REG);
> -
> -	if (ret)
> -		goto out;
> +	/* some of these fields may be wildcard/"match all" */
> +	alm->time.tm_sec = bcd2bin(rtc_data[0]);
> +	alm->time.tm_min = bcd2bin(rtc_data[1]);
> +	alm->time.tm_hour = bcd2bin(rtc_data[2]);
> +	alm->time.tm_mday = bcd2bin(rtc_data[3]);
> +	alm->time.tm_mon = bcd2bin(rtc_data[4]) - 1;
> +	alm->time.tm_year = bcd2bin(rtc_data[5]) + 100;
>  
> -	if ((rtc_interrupts_reg & BIT_RTC_INTERRUPTS_REG_IT_ALARM_M) != 0)
> +	/* report cached alarm enable state */
> +	if (rtc_irq_bits & BIT_RTC_INTERRUPTS_REG_IT_ALARM_M)
>  		alm->enabled = 1;
> -	else
> -		alm->enabled = 0;
> -
> -out:
> -	return ret;
> -}
> -
> -static int twl4030_rtc_irq_set_state(struct device *dev, int enabled)
> -{
> -	int ret;
> -
> -	/* Allow ints for RTC updates.  */
> -	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;
>  }
> @@ -332,86 +248,46 @@ static int twl4030_rtc_set_alarm(struct 
>  	unsigned char alarm_data[ALL_TIME_REGS + 1];
>  	int ret;
>  
> -	/* Month range is 01..12 */
> -	alm->time.tm_mon++;
> +	ret = twl4030_rtc_alarm_irq_set_state(0);
> +	if (ret)
> +		goto out;
>  
> -	alarm_data[1] = BIN2BCD(alm->time.tm_sec);
> -	alarm_data[2] = BIN2BCD(alm->time.tm_min);
> -	alarm_data[3] = BIN2BCD(alm->time.tm_hour);
> -	alarm_data[4] = BIN2BCD(alm->time.tm_mday);
> -	alarm_data[5] = BIN2BCD(alm->time.tm_mon);
> -	alarm_data[6] = BIN2BCD(alm->time.tm_year);
> +	alarm_data[1] = bin2bcd(alm->time.tm_sec);
> +	alarm_data[2] = bin2bcd(alm->time.tm_min);
> +	alarm_data[3] = bin2bcd(alm->time.tm_hour);
> +	alarm_data[4] = bin2bcd(alm->time.tm_mday);
> +	alarm_data[5] = bin2bcd(alm->time.tm_mon + 1);
> +	alarm_data[6] = bin2bcd(alm->time.tm_year - 100);
>  
>  	/* update all the alarm registers in one shot */
>  	ret = twl4030_i2c_write(TWL4030_MODULE_RTC, alarm_data,
>  			REG_ALARM_SECONDS_REG, ALL_TIME_REGS);
>  	if (ret) {
> -		printk(KERN_ERR "twl4030: twl4030_i2c_write error.\n");
> +		dev_err(dev, "rtc_set_alarm error %d\n", ret);
>  		goto out;
>  	}
>  
> -	ret = twl4030_rtc_alarm_irq_set_state(dev, alm->enabled);
> +	if (alm->enabled)
> +		ret = twl4030_rtc_alarm_irq_set_state(1);
>  out:
>  	return ret;
>  }
>  
> -/*
> - * We will just handle setting the frequency and make use the framework for
> - * reading the periodic interupts.
> - * @freq: Current periodic IRQ freq
> - */
> -static int twl4030_rtc_irq_set_freq(struct device *dev, int freq)
> -{
> -	struct rtc_device *rtc = dev_get_drvdata(dev);
> -
> -	if (freq < 0 || freq > 3)
> -		return -EINVAL;
> -
> -	rtc->irq_freq = freq;
> -
> -	/* set rtc irq freq to user defined value */
> -	set_rtc_irq_bit(freq);
> -
> -	return 0;
> -}
> -
>  #ifdef	CONFIG_RTC_INTF_DEV
>  
>  static int twl4030_rtc_ioctl(struct device *dev, unsigned int cmd,
>  			     unsigned long arg)
>  {
> -
>  	switch (cmd) {
>  	case RTC_AIE_OFF:
> -		return twl4030_rtc_alarm_irq_set_state(dev, 0);
> +		return twl4030_rtc_alarm_irq_set_state(0);
>  	case RTC_AIE_ON:
> -		return twl4030_rtc_alarm_irq_set_state(dev, 1);
> -
> +		return twl4030_rtc_alarm_irq_set_state(1);
>  	case RTC_UIE_OFF:
> -		/* Fall Through */
> -	case RTC_PIE_OFF:
> -		/* Mask ints from RTC updates.	*/
> -		return twl4030_rtc_irq_set_state(dev, 0);
> +		return twl4030_rtc_irq_set_state(0);
>  	case RTC_UIE_ON:
> -		/* Fall Through */
> -	case RTC_PIE_ON:
> -		/* Allow ints for RTC updates.	*/
> -		return twl4030_rtc_irq_set_state(dev, 1);
> -
> -	case RTC_EPOCH_READ:
> -		return put_user(epoch, (unsigned long *)arg);
> -	case RTC_EPOCH_SET:
> -		/*
> -		 * There were no RTC clocks before 1900.
> -		 */
> -		if (arg < 1900)
> -			return -EINVAL;
> -
> -		if (!capable(CAP_SYS_TIME))
> -			return -EACCES;
> +		return twl4030_rtc_irq_set_state(1);
>  
> -		epoch = arg;
> -		return 0;
>  	default:
>  		return -ENOIOCTLCMD;
>  	}
> @@ -465,7 +341,6 @@ static struct rtc_class_ops twl4030_rtc_
>  	.set_time	= twl4030_rtc_set_time,
>  	.read_alarm	= twl4030_rtc_read_alarm,
>  	.set_alarm	= twl4030_rtc_set_alarm,
> -	.irq_set_freq	= twl4030_rtc_irq_set_freq,
>  };
>  
>  static int __devinit twl4030_rtc_probe(struct platform_device *pdev)
> @@ -491,9 +366,6 @@ static int __devinit twl4030_rtc_probe(s
>  
>  	}
>  
> -	/* Set the irq freq to every second */
> -	rtc->irq_freq = 0;
> -
>  	platform_set_drvdata(pdev, rtc);
>  
>  	ret = twl4030_rtc_read_u8(&rd_reg, REG_RTC_STATUS_REG);
> @@ -552,6 +424,11 @@ static int __devinit twl4030_rtc_probe(s
>  	if (ret < 0)
>  		goto out2;
>  
> +	/* init cached IRQ enable bits */
> +	ret = twl4030_rtc_read_u8(&rtc_irq_bits, REG_RTC_INTERRUPTS_REG);
> +	if (ret < 0)
> +		goto out2;
> +
>  	return ret;
>  
>  
> @@ -591,8 +468,8 @@ static int __devexit twl4030_rtc_remove(
>  
>  static void twl4030_rtc_shutdown(struct platform_device *pdev)
>  {
> -	twl4030_rtc_alarm_irq_set_state(&pdev->dev, 0);
> -	twl4030_rtc_irq_set_state(&pdev->dev, 0);
> +	mask_rtc_irq_bit(BIT_RTC_INTERRUPTS_REG_IT_TIMER_M |
> +			 BIT_RTC_INTERRUPTS_REG_IT_ALARM_M);
>  }
>  
>  #ifdef CONFIG_PM
> @@ -601,8 +478,9 @@ static unsigned char irqstat;
>  
>  static int twl4030_rtc_suspend(struct platform_device *pdev, pm_message_t state)
>  {
> -	get_rtc_irq_bit(&irqstat);
> +	irqstat = rtc_irq_bits;
>  
> +	/* REVISIT alarm may need to wake us from sleep */
>  	mask_rtc_irq_bit(BIT_RTC_INTERRUPTS_REG_IT_TIMER_M |
>  			 BIT_RTC_INTERRUPTS_REG_IT_ALARM_M);
>  	return 0;
> @@ -613,19 +491,21 @@ static int twl4030_rtc_resume(struct pla
>  	set_rtc_irq_bit(irqstat);
>  	return 0;
>  }
> +
>  #else
>  #define twl4030_rtc_suspend NULL
>  #define twl4030_rtc_resume  NULL
>  #endif
>  
>  MODULE_ALIAS("platform:twl4030_rtc");
> +
>  static struct platform_driver twl4030rtc_driver = {
> -	.probe 		= twl4030_rtc_probe,
> -	.remove 	= __devexit_p(twl4030_rtc_remove),
> -	.shutdown 	= twl4030_rtc_shutdown,
> -	.suspend 	= twl4030_rtc_suspend,
> -	.resume 	= twl4030_rtc_resume,
> -	.driver 	= {
> +	.probe		= twl4030_rtc_probe,
> +	.remove		= __devexit_p(twl4030_rtc_remove),
> +	.shutdown	= twl4030_rtc_shutdown,
> +	.suspend	= twl4030_rtc_suspend,
> +	.resume		= twl4030_rtc_resume,
> +	.driver		= {
>  		.owner	= THIS_MODULE,
>  		.name	= "twl4030_rtc",
>  	},
> @@ -635,15 +515,13 @@ static int __init twl4030_rtc_init(void)
>  {
>  	return platform_driver_register(&twl4030rtc_driver);
>  }
> +module_init(twl4030_rtc_init);
>  
>  static void __exit twl4030_rtc_exit(void)
>  {
>  	platform_driver_unregister(&twl4030rtc_driver);
>  }
> +module_exit(twl4030_rtc_exit);
>  
> -MODULE_ALIAS("platform:twl4030_rtc");
>  MODULE_AUTHOR("Texas Instruments, MontaVista Software");
> -MODULE_LICENSE("GPL");;
> -
> -module_init(twl4030_rtc_init);
> -module_exit(twl4030_rtc_exit);
> +MODULE_LICENSE("GPL");
> --- a/include/linux/i2c/twl4030-rtc.h
> +++ b/include/linux/i2c/twl4030-rtc.h
> @@ -164,64 +164,6 @@
>  #define BIT_RTC_COMP_MSB_REG_RTC_COMP_MSB        (0x000)
>  #define BIT_RTC_COMP_MSB_REG_RTC_COMP_MSB_M      (0x000000FF)
>  
> -/* ALARM_DAYS_REG Fields */
> -#define BIT_ALARM_DAYS_REG_ALARM_DAY1            (0x004)
> -#define BIT_ALARM_DAYS_REG_ALARM_DAY1_M          (0x00000030)
> -/* ALARM_MONTHS_REG Fields */
> -#define BIT_ALARM_MONTHS_REG_ALARM_MONTH0        (0x000)
> -#define BIT_ALARM_MONTHS_REG_ALARM_MONTH0_M      (0x0000000F)
> -#define BIT_ALARM_MONTHS_REG_ALARM_MONTH1        (0x004)
> -#define BIT_ALARM_MONTHS_REG_ALARM_MONTH1_M      (0x00000010)
> -/* ALARM_YEARS_REG Fields */
> -#define BIT_ALARM_YEARS_REG_ALARM_YEAR0          (0x000)
> -#define BIT_ALARM_YEARS_REG_ALARM_YEAR0_M        (0x0000000F)
> -#define BIT_ALARM_YEARS_REG_ALARM_YEAR1          (0x004)
> -#define BIT_ALARM_YEARS_REG_ALARM_YEAR1_M        (0x000000F0)
> -/* RTC_CTRL_REG Fields */
> -#define BIT_RTC_CTRL_REG_STOP_RTC                (0x000)
> -#define BIT_RTC_CTRL_REG_STOP_RTC_M              (0x00000001)
> -#define BIT_RTC_CTRL_REG_ROUND_30S               (0x001)
> -#define BIT_RTC_CTRL_REG_ROUND_30S_M             (0x00000002)
> -#define BIT_RTC_CTRL_REG_AUTO_COMP               (0x002)
> -#define BIT_RTC_CTRL_REG_AUTO_COMP_M             (0x00000004)
> -#define BIT_RTC_CTRL_REG_MODE_12_24              (0x003)
> -#define BIT_RTC_CTRL_REG_MODE_12_24_M            (0x00000008)
> -#define BIT_RTC_CTRL_REG_TEST_MODE               (0x004)
> -#define BIT_RTC_CTRL_REG_TEST_MODE_M             (0x00000010)
> -#define BIT_RTC_CTRL_REG_SET_32_COUNTER          (0x005)
> -#define BIT_RTC_CTRL_REG_SET_32_COUNTER_M        (0x00000020)
> -#define BIT_RTC_CTRL_REG_GET_TIME                (0x006)
> -#define BIT_RTC_CTRL_REG_GET_TIME_M              (0x00000040)
> -/* RTC_STATUS_REG Fields */
> -#define BIT_RTC_STATUS_REG_RUN                   (0x001)
> -#define BIT_RTC_STATUS_REG_RUN_M                 (0x00000002)
> -#define BIT_RTC_STATUS_REG_1S_EVENT              (0x002)
> -#define BIT_RTC_STATUS_REG_1S_EVENT_M            (0x00000004)
> -#define BIT_RTC_STATUS_REG_1M_EVENT              (0x003)
> -#define BIT_RTC_STATUS_REG_1M_EVENT_M            (0x00000008)
> -#define BIT_RTC_STATUS_REG_1H_EVENT              (0x004)
> -#define BIT_RTC_STATUS_REG_1H_EVENT_M            (0x00000010)
> -#define BIT_RTC_STATUS_REG_1D_EVENT              (0x005)
> -#define BIT_RTC_STATUS_REG_1D_EVENT_M            (0x00000020)
> -#define BIT_RTC_STATUS_REG_ALARM                 (0x006)
> -#define BIT_RTC_STATUS_REG_ALARM_M               (0x00000040)
> -#define BIT_RTC_STATUS_REG_POWER_UP              (0x007)
> -#define BIT_RTC_STATUS_REG_POWER_UP_M            (0x00000080)
> -/* RTC_INTERRUPTS_REG Fields */
> -#define BIT_RTC_INTERRUPTS_REG_EVERY             (0x000)
> -#define BIT_RTC_INTERRUPTS_REG_EVERY_M           (0x00000003)
> -#define BIT_RTC_INTERRUPTS_REG_IT_TIMER          (0x002)
> -#define BIT_RTC_INTERRUPTS_REG_IT_TIMER_M        (0x00000004)
> -#define BIT_RTC_INTERRUPTS_REG_IT_ALARM          (0x003)
> -#define BIT_RTC_INTERRUPTS_REG_IT_ALARM_M        (0x00000008)
> -/* RTC_COMP_LSB_REG Fields */
> -#define BIT_RTC_COMP_LSB_REG_RTC_COMP_LSB        (0x000)
> -#define BIT_RTC_COMP_LSB_REG_RTC_COMP_LSB_M      (0x000000FF)
> -/* RTC_COMP_MSB_REG Fields */
> -#define BIT_RTC_COMP_MSB_REG_RTC_COMP_MSB        (0x000)
> -#define BIT_RTC_COMP_MSB_REG_RTC_COMP_MSB_M      (0x000000FF)
> -
> -
>  struct twl4030rtc_platform_data {
>  	int (*init)(void);
>  	void (*exit)(void);
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux