#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <linux/completion.h>
#include <linux/mfd/wm831x/core.h>
#include <linux/platform_device.h>
#include <linux/random.h>
#define WM831X_RTC_WR_CNT_MASK 0xFFFF
#define WM831X_RTC_WR_CNT_SHIFT 0
#define WM831X_RTC_WR_CNT_WIDTH 16
#define WM831X_RTC_TIME_MASK 0xFFFF
#define WM831X_RTC_TIME_SHIFT 0
#define WM831X_RTC_TIME_WIDTH 16
#define WM831X_RTC_TIME_MASK 0xFFFF
#define WM831X_RTC_TIME_SHIFT 0
#define WM831X_RTC_TIME_WIDTH 16
#define WM831X_RTC_ALM_MASK 0xFFFF
#define WM831X_RTC_ALM_SHIFT 0
#define WM831X_RTC_ALM_WIDTH 16
#define WM831X_RTC_ALM_MASK 0xFFFF
#define WM831X_RTC_ALM_SHIFT 0
#define WM831X_RTC_ALM_WIDTH 16
#define WM831X_RTC_VALID 0x8000
#define WM831X_RTC_VALID_MASK 0x8000
#define WM831X_RTC_VALID_SHIFT 15
#define WM831X_RTC_VALID_WIDTH 1
#define WM831X_RTC_SYNC_BUSY 0x4000
#define WM831X_RTC_SYNC_BUSY_MASK 0x4000
#define WM831X_RTC_SYNC_BUSY_SHIFT 14
#define WM831X_RTC_SYNC_BUSY_WIDTH 1
#define WM831X_RTC_ALM_ENA 0x0400
#define WM831X_RTC_ALM_ENA_MASK 0x0400
#define WM831X_RTC_ALM_ENA_SHIFT 10
#define WM831X_RTC_ALM_ENA_WIDTH 1
#define WM831X_RTC_PINT_FREQ_MASK 0x0070
#define WM831X_RTC_PINT_FREQ_SHIFT 4
#define WM831X_RTC_PINT_FREQ_WIDTH 3
#define WM831X_RTC_TRIM_MASK 0x03FF
#define WM831X_RTC_TRIM_SHIFT 0
#define WM831X_RTC_TRIM_WIDTH 10
#define WM831X_SET_TIME_RETRIES 5
#define WM831X_GET_TIME_RETRIES 5