/* * include/linux/mfd/acx00/core.h -- Core interface for ACX00 * * Copyright 2009 Wolfson Microelectronics PLC. * * Author: Mark Brown * * 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. * */ #ifndef __MFD_ACX00_CORE_H__ #define __MFD_ACX00_CORE_H__ #include #include /* GPIOs in the chip are numbered from 1-11 */ #define ACX00_IRQ_GPIO(x) (x + ACX00_IRQ_TEMP_WARN) #define SYS_VERSION 0x0000 #define SYS_CONTROL 0x0002 #define SYS_IRQ_ENABLE 0x0004 #define SYS_IRQ_STATUS 0x0006 /*#define SYS_CLK_CTL 0x0008*/ #define SYS_DLDO_OSC_CTL 0x000a #define SYS_PLL_CTL0 0x000c #define SYS_PLL_CTL1 0x000e #define SYS_AUDIO_CTL0 0x0010 #define SYS_AUDIO_CTL1 0x0012 #define SYS_EPHY_CTL0 0x0014 #define SYS_EPHY_CTL1 0x0016 #define SYS_TVE_CTL0 0x0018 #define SYS_TVE_CTL1 0x001a /*SYS_VERSION:0x0000*/ #define CHIP_PACKAGE 14 #define CHIP_VERSION 0 /*SYS_CONTROL:0x0002*/ #define CIHP_RESET 0 /*SYS_IRQ_ENABLE:0x0004*/ #define INTB_OUTPUT_ENABLE 15 #define INTB_OUTPUT_CFG 14 #define RTC_IRQ_ENABLE 12 #define EPHY_IRQ_ENABLE 8 #define TVE_IRQ_ENABLE 4 /*SYS_IRQ_STATUS:0x0006*/ #define RTC_IRQ_STATUS 12 #define EPHY_IRQ_STATUS 8 #define TVE_IRQ_STATUS 4 /*SYS_CLK_CTL:0x0008*/ #define EFUSE_CLK_SEL 5 #define SYS_CLK_SEL 4 #define CKI_24M_ENABLE 2 #define CKO_RTC_ENABLE 1 #define CKO_32K_ENABLE 0 /*SYS_DLDO_OSC_CTL:0x000a*/ #define DLDOEN 15 #define DLDOVOL 12 #define ENBG 11 #define RESBYPS 10 #define OSCEN 3 #define OSCSEL 0 /*SYS_PLL_CTL0:0x000c*/ #define PLL_ENABLE 15 #define PLL_BIAS_EN 14 #define PLL_LDO1_EN 11 #define PLL_LDO_EN 10 #define PLL_POST_DIV 9 #define PLL_PRE_DIV_M 0 /*SYS_PLL_CTL1:0x000e*/ #define PLL_CS 10 #define PLL_VCO_S 5 #define PLL_CP_S 0 /*SYS_AUDIO_CTL0:0x0010*/ #define AC_MCLK_GATING 1 #define AC_RESET_INVALID 0 /*SYS_AUDIO_CTL1:0x0012*/ #define AC_I2S_IO_EN 0 /*SYS_EPHY_CTL0:0x0014*/ #define EPHY_SYSCLK_GATING 1 #define EPHY_RESET_INVALID 0 /*SYS_EPHY_CTL1:0x0016*/ #define EPHY_MII_IO_FOR_I2S 15 #define EPHY_MII_IO_FOR_PLL 14 #define E_DPX_LED_IO_EN 3 #define E_SPD_LED_IO_EN 2 #define E_LNK_LED_IO_EN 1 #define EPHY_MII_IO_EN 0 /*SYS_TVE_CTL0:0x0018*/ #define TVE_SYSCLK_GATING 3 #define TVE_SCLK_GATING 2 #define TVE_DCLK_GATING 1 #define TVE_RESET_INVALID 0 /*SYS_TVE_CTL1:0x001a*/ #define TVE_CCIR_CLK_IO_EN 1 #define TVE_CCIR_SYNC_DATA_IO_EN 0 struct acx00 { struct mutex lock; struct device *dev; struct regmap *regmap; struct pwm_device *pwm_ac200; struct work_struct init_work; int irq; }; /* Device I/O API */ int acx00_reg_read(struct acx00 *acx00, unsigned short reg); int acx00_reg_write(struct acx00 *acx00, unsigned short reg, unsigned short val); int acx00_enable(void); int acx00_set_bits(struct acx00 *acx00, unsigned short reg, unsigned short mask, unsigned short val); #endif