#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/mfd/core.h>
#include <linux/mfd/tmio.h>
#include <linux/mfd/tc6393xb.h>
#include <linux/gpio/driver.h>
#define SCR_GPI_SR(i) (0x64 + (i))
#define SCR_GPI_IMR(i) (0x68 + (i))
#define SCR_GPI_EDER(i) (0x6c + (i))
#define SCR_GPI_LIR(i) (0x70 + (i))
#define SCR_GPO_DSR(i) (0x78 + (i))
#define SCR_GPO_DOECR(i) (0x7c + (i))
#define SCR_GP_IARCR(i) (0x80 + (i))
#define SCR_GP_IARLCR(i) (0x84 + (i))
#define SCR_GPI_BCR(i) (0x88 + (i))
#define SCR_GPA_IARCR 0x8c
#define SCR_GPA_IARLCR 0x90
#define SCR_CCR_CK32K BIT(0)
#define SCR_CCR_USBCK BIT(1)
#define SCR_CCR_UNK1 BIT(4)
#define SCR_CCR_MCLK_MASK (7 << 8)
#define SCR_CCR_MCLK_OFF (0 << 8)
#define SCR_CCR_MCLK_12 (1 << 8)
#define SCR_CCR_MCLK_24 (2 << 8)
#define SCR_CCR_MCLK_48 (3 << 8)
#define SCR_CCR_HCLK_MASK (3 << 12)
#define SCR_CCR_HCLK_24 (0 << 12)
#define SCR_CCR_HCLK_48 (1 << 12)
#define SCR_FER_USBEN BIT(0)
#define SCR_FER_LCDCVEN BIT(1)
#define SCR_FER_SLCDEN BIT(2)
#define SCR_MCR_RDY_MASK (3 << 0)
#define SCR_MCR_RDY_OPENDRAIN (0 << 0)
#define SCR_MCR_RDY_TRISTATE (1 << 0)
#define SCR_MCR_RDY_PUSHPULL (2 << 0)
#define SCR_MCR_RDY_UNK BIT(2)
#define SCR_MCR_RDY_EN BIT(3)
#define SCR_MCR_INT_MASK (3 << 4)
#define SCR_MCR_INT_OPENDRAIN (0 << 4)
#define SCR_MCR_INT_TRISTATE (1 << 4)
#define SCR_MCR_INT_PUSHPULL (2 << 4)
#define SCR_MCR_INT_UNK BIT(6)
#define SCR_MCR_INT_EN BIT(7)
#define TC_GPIO_BIT(i) (1 << (i & 0x7))