#
# RTC class/drivers configuration
#

config RTC_LIB
	tristate

menuconfig RTC_CLASS
	tristate "Real Time Clock"
	default n
	depends on !S390
	select RTC_LIB
	help
	  Generic RTC class support. If you say yes here, you will
 	  be allowed to plug one or more RTCs to your system. You will
	  probably want to enable one or more of the interfaces below.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-class.

if RTC_CLASS

config RTC_HCTOSYS
	bool "Set system time from RTC on startup and resume"
	depends on RTC_CLASS = y
	default y
	help
	  If you say yes here, the system time (wall clock) will be set using
	  the value read from a specified RTC device. This is useful to avoid
	  unnecessary fsck runs at boot time, and to network better.

config RTC_HCTOSYS_DEVICE
	string "RTC used to set the system time"
	depends on RTC_HCTOSYS = y
	default "rtc0"
	help
	  The RTC device that will be used to (re)initialize the system
	  clock, usually rtc0.  Initialization is done when the system
	  starts up, and when it resumes from a low power state.  This
	  device should record time in UTC, since the kernel won't do
	  timezone correction.

	  The driver for this RTC device must be loaded before late_initcall
	  functions run, so it must usually be statically linked.

	  This clock should be battery-backed, so that it reads the correct
	  time when the system boots from a power-off state.  Otherwise, your
	  system will need an external clock source (like an NTP server).

	  If the clock you specify here is not battery backed, it may still
	  be useful to reinitialize system time when resuming from system
	  sleep states.  Do not specify an RTC here unless it stays powered
	  during all this system's supported sleep states.

config RTC_DEBUG
	bool "RTC debug support"
	depends on RTC_CLASS = y
	help
	  Say yes here to enable debugging support in the RTC framework
	  and individual RTC drivers.

comment "RTC interfaces"

config RTC_INTF_SYSFS
	boolean "/sys/class/rtc/rtcN (sysfs)"
	depends on SYSFS
	default RTC_CLASS
	help
	  Say yes here if you want to use your RTCs using sysfs interfaces,
	  /sys/class/rtc/rtc0 through /sys/.../rtcN.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-sysfs.

config RTC_INTF_PROC
	boolean "/proc/driver/rtc (procfs for rtc0)"
	depends on PROC_FS
	default RTC_CLASS
	help
	  Say yes here if you want to use your first RTC through the proc
	  interface, /proc/driver/rtc.  Other RTCs will not be available
	  through that API.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-proc.

config RTC_INTF_DEV
	boolean "/dev/rtcN (character devices)"
	default RTC_CLASS
	help
	  Say yes here if you want to use your RTCs using the /dev
	  interfaces, which "udev" sets up as /dev/rtc0 through
	  /dev/rtcN.  You may want to set up a symbolic link so one
	  of these can be accessed as /dev/rtc, which is a name
	  expected by "hwclock" and some other programs.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-dev.

config RTC_INTF_DEV_UIE_EMUL
	bool "RTC UIE emulation on dev interface"
	depends on RTC_INTF_DEV
	help
	  Provides an emulation for RTC_UIE if the underlying rtc chip
	  driver does not expose RTC_UIE ioctls.  Those requests generate
	  once-per-second update interrupts, used for synchronization.

config RTC_DRV_TEST
	tristate "Test driver/device"
	help
	  If you say yes here you get support for the
	  RTC test driver. It's a software RTC which can be
	  used to test the RTC subsystem APIs. It gets
	  the time from the system clock.
	  You want this driver only if you are doing development
	  on the RTC subsystem. Please read the source code
	  for further details.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-test.

comment "I2C RTC drivers"
	depends on I2C

if I2C

config RTC_DRV_DS1307
	tristate "Dallas/Maxim DS1307/37/38/39/40, ST M41T00"
	help
	  If you say yes here you get support for various compatible RTC
	  chips (often with battery backup) connected with I2C.  This driver
	  should handle DS1307, DS1337, DS1338, DS1339, DS1340, ST M41T00,
	  and probably other chips.  In some cases the RTC must already
	  have been initialized (by manufacturing or a bootloader).

	  The first seven registers on these chips hold an RTC, and other
	  registers may add features such as NVRAM, a trickle charger for
	  the RTC/NVRAM backup power, and alarms.  NVRAM is visible in
	  sysfs, but other chip features may not be available.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-ds1307.

config RTC_DRV_DS1374
	tristate "Maxim/Dallas Semiconductor DS1374 Real Time Clock"
	depends on RTC_CLASS && I2C
	help
	  If you say yes here you get support for Dallas Semiconductor
	  DS1374 real-time clock chips.  If an interrupt is associated
	  with the device, the alarm functionality is supported.

	  This driver can also be built as a module.  If so, the module
	  will be called rtc-ds1374.

config RTC_DRV_DS1672
	tristate "Dallas/Maxim DS1672"
	help
	  If you say yes here you get support for the
	  Dallas/Maxim DS1672 timekeeping chip.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-ds1672.

config RTC_DRV_MAX6900
	tristate "Maxim 6900"
	help
	  If you say yes here you will get support for the
	  Maxim MAX6900 I2C RTC chip.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-max6900.

config RTC_DRV_RS5C372
	tristate "Ricoh RS5C372A/B, RV5C386, RV5C387A"
	help
	  If you say yes here you get support for the
	  Ricoh RS5C372A, RS5C372B, RV5C386, and RV5C387A RTC chips.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-rs5c372.

config RTC_DRV_ISL1208
	tristate "Intersil 1208"
	help
	  If you say yes here you get support for the
	  Intersil 1208 RTC chip.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-isl1208.

config RTC_DRV_X1205
	tristate "Xicor/Intersil X1205"
	help
	  If you say yes here you get support for the
	  Xicor/Intersil X1205 RTC chip.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-x1205.

config RTC_DRV_PCF8563
	tristate "Philips PCF8563/Epson RTC8564"
	help
	  If you say yes here you get support for the
	  Philips PCF8563 RTC chip. The Epson RTC8564
	  should work as well.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-pcf8563.

config RTC_DRV_PCF8583
	tristate "Philips PCF8583"
	help
	  If you say yes here you get support for the Philips PCF8583
	  RTC chip found on Acorn RiscPCs. This driver supports the
	  platform specific method of retrieving the current year from
	  the RTC's SRAM. It will work on other platforms with the same
	  chip, but the year will probably have to be tweaked.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-pcf8583.

config RTC_DRV_M41T80
	tristate "ST M41T80 series RTC"
	help
	  If you say Y here you will get support for the
	  ST M41T80 RTC chips series. Currently following chips are
	  supported: M41T80, M41T81, M41T82, M41T83, M41ST84, M41ST85
	  and M41ST87.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-m41t80.

config RTC_DRV_M41T80_WDT
	bool "ST M41T80 series RTC watchdog timer"
	depends on RTC_DRV_M41T80
	help
	  If you say Y here you will get support for the
	  watchdog timer in ST M41T80 RTC chips series.

config RTC_DRV_TWL92330
	boolean "TI TWL92330/Menelaus"
	depends on MENELAUS
	help
	  If you say yes here you get support for the RTC on the
	  TWL92330 "Menelaus" power management chip, used with OMAP2
	  platforms.  The support is integrated with the rest of
	  the Menelaus driver; it's not separate module.

endif # I2C

comment "SPI RTC drivers"

if SPI_MASTER

config RTC_DRV_RS5C348
	tristate "Ricoh RS5C348A/B"
	help
	  If you say yes here you get support for the
	  Ricoh RS5C348A and RS5C348B RTC chips.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-rs5c348.

config RTC_DRV_MAX6902
	tristate "Maxim 6902"
	help
	  If you say yes here you will get support for the
	  Maxim MAX6902 SPI RTC chip.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-max6902.

endif # SPI_MASTER

comment "Platform RTC drivers"

# this 'CMOS' RTC driver is arch dependent because <asm-generic/rtc.h>
# requires <asm/mc146818rtc.h> defining CMOS_READ/CMOS_WRITE, and a
# global rtc_lock ... it's not yet just another platform_device.

config RTC_DRV_CMOS
	tristate "PC-style 'CMOS'"
	depends on X86 || ALPHA || ARM || M32R || ATARI || PPC || MIPS
	help
	  Say "yes" here to get direct support for the real time clock
	  found in every PC or ACPI-based system, and some other boards.
	  Specifically the original MC146818, compatibles like those in
	  PC south bridges, the DS12887 or M48T86, some multifunction
	  or LPC bus chips, and so on.

	  Your system will need to define the platform device used by
	  this driver, otherwise it won't be accessible.  This means
	  you can safely enable this driver if you don't know whether
	  or not your board has this kind of hardware.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-cmos.

config RTC_DRV_DS1216
	tristate "Dallas DS1216"
	depends on SNI_RM
	help
	  If you say yes here you get support for the Dallas DS1216 RTC chips.

config RTC_DRV_DS1553
	tristate "Dallas DS1553"
	help
	  If you say yes here you get support for the
	  Dallas DS1553 timekeeping chip.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-ds1553.

config RTC_DRV_STK17TA8
	tristate "Simtek STK17TA8"
	depends on RTC_CLASS
	help
	  If you say yes here you get support for the
	  Simtek STK17TA8 timekeeping chip.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-stk17ta8.

config RTC_DRV_DS1742
	tristate "Dallas DS1742/1743"
	help
	  If you say yes here you get support for the
	  Dallas DS1742/1743 timekeeping chip.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-ds1742.

config RTC_DRV_M48T86
	tristate "ST M48T86/Dallas DS12887"
	help
	  If you say Y here you will get support for the
	  ST M48T86 and Dallas DS12887 RTC chips.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-m48t86.

config RTC_DRV_M48T59
	tristate "ST M48T59"
	help
	  If you say Y here you will get support for the
	  ST M48T59 RTC chip.

	  This driver can also be built as a module, if so, the module
	  will be called "rtc-m48t59".

config RTC_DRV_V3020
	tristate "EM Microelectronic V3020"
	help
	  If you say yes here you will get support for the
	  EM Microelectronic v3020 RTC chip.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-v3020.

comment "on-CPU RTC drivers"

config RTC_DRV_OMAP
	tristate "TI OMAP1"
	depends on ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730
	help
	  Say "yes" here to support the real time clock on TI OMAP1 chips.
	  This driver can also be built as a module called rtc-omap.

config RTC_DRV_S3C
	tristate "Samsung S3C series SoC RTC"
	depends on ARCH_S3C2410
	help
	  RTC (Realtime Clock) driver for the clock inbuilt into the
	  Samsung S3C24XX series of SoCs. This can provide periodic
	  interrupt rates from 1Hz to 64Hz for user programs, and
	  wakeup from Alarm.

	  The driver currently supports the common features on all the
	  S3C24XX range, such as the S3C2410, S3C2412, S3C2413, S3C2440
	  and S3C2442.

	  This driver can also be build as a module. If so, the module
	  will be called rtc-s3c.

config RTC_DRV_EP93XX
	tristate "Cirrus Logic EP93XX"
	depends on ARCH_EP93XX
	help
	  If you say yes here you get support for the
	  RTC embedded in the Cirrus Logic EP93XX processors.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-ep93xx.

config RTC_DRV_SA1100
	tristate "SA11x0/PXA2xx"
	depends on ARCH_SA1100 || ARCH_PXA
	help
	  If you say Y here you will get access to the real time clock
	  built into your SA11x0 or PXA2xx CPU.

	  To compile this driver as a module, choose M here: the
	  module will be called rtc-sa1100.

config RTC_DRV_SH
	tristate "SuperH On-Chip RTC"
	depends on RTC_CLASS && SUPERH
	help
	  Say Y here to enable support for the on-chip RTC found in
	  most SuperH processors.

 	  To compile this driver as a module, choose M here: the
	  module will be called rtc-sh.

config RTC_DRV_VR41XX
	tristate "NEC VR41XX"
	depends on CPU_VR41XX
	help
	  If you say Y here you will get access to the real time clock
	  built into your NEC VR41XX CPU.

	  To compile this driver as a module, choose M here: the
	  module will be called rtc-vr41xx.

config RTC_DRV_PL031
	tristate "ARM AMBA PL031 RTC"
	depends on ARM_AMBA
	help
	  If you say Y here you will get access to ARM AMBA
	  PrimeCell PL031 RTC found on certain ARM SOCs.

	  To compile this driver as a module, choose M here: the
	  module will be called rtc-pl031.

config RTC_DRV_AT32AP700X
	tristate "AT32AP700X series RTC"
	depends on PLATFORM_AT32AP
	help
	  Driver for the internal RTC (Realtime Clock) on Atmel AVR32
	  AT32AP700x family processors.

config RTC_DRV_AT91RM9200
	tristate "AT91RM9200"
	depends on ARCH_AT91RM9200
	help
	  Driver for the Atmel AT91RM9200's internal RTC (Realtime Clock).

config RTC_DRV_BFIN
	tristate "Blackfin On-Chip RTC"
	depends on BLACKFIN
	help
	  If you say yes here you will get support for the
	  Blackfin On-Chip Real Time Clock.

	  This driver can also be built as a module. If so, the module
	  will be called rtc-bfin.

config RTC_DRV_RS5C313
	tristate "Ricoh RS5C313"
	depends on SH_LANDISK
	help
	  If you say yes here you get support for the Ricoh RS5C313 RTC chips.

endif # RTC_CLASS
