| /* |
| * Copyright (C) ST-Ericsson 2011 |
| * |
| * License Terms: GNU General Public License v2 |
| */ |
| #ifndef MFD_AB5500_H |
| #define MFD_AB5500_H |
| |
| #include <linux/device.h> |
| |
| enum ab5500_devid { |
| AB5500_DEVID_ADC, |
| AB5500_DEVID_LEDS, |
| AB5500_DEVID_POWER, |
| AB5500_DEVID_REGULATORS, |
| AB5500_DEVID_SIM, |
| AB5500_DEVID_RTC, |
| AB5500_DEVID_CHARGER, |
| AB5500_DEVID_FUELGAUGE, |
| AB5500_DEVID_VIBRATOR, |
| AB5500_DEVID_CODEC, |
| AB5500_DEVID_USB, |
| AB5500_DEVID_OTP, |
| AB5500_DEVID_VIDEO, |
| AB5500_DEVID_DBIECI, |
| AB5500_DEVID_ONSWA, |
| AB5500_NUM_DEVICES, |
| }; |
| |
| enum ab5500_banks { |
| AB5500_BANK_VIT_IO_I2C_CLK_TST_OTP = 0, |
| AB5500_BANK_VDDDIG_IO_I2C_CLK_TST = 1, |
| AB5500_BANK_VDENC = 2, |
| AB5500_BANK_SIM_USBSIM = 3, |
| AB5500_BANK_LED = 4, |
| AB5500_BANK_ADC = 5, |
| AB5500_BANK_RTC = 6, |
| AB5500_BANK_STARTUP = 7, |
| AB5500_BANK_DBI_ECI = 8, |
| AB5500_BANK_CHG = 9, |
| AB5500_BANK_FG_BATTCOM_ACC = 10, |
| AB5500_BANK_USB = 11, |
| AB5500_BANK_IT = 12, |
| AB5500_BANK_VIBRA = 13, |
| AB5500_BANK_AUDIO_HEADSETUSB = 14, |
| AB5500_NUM_BANKS = 15, |
| }; |
| |
| enum ab5500_banks_addr { |
| AB5500_ADDR_VIT_IO_I2C_CLK_TST_OTP = 0x4A, |
| AB5500_ADDR_VDDDIG_IO_I2C_CLK_TST = 0x4B, |
| AB5500_ADDR_VDENC = 0x06, |
| AB5500_ADDR_SIM_USBSIM = 0x04, |
| AB5500_ADDR_LED = 0x10, |
| AB5500_ADDR_ADC = 0x0A, |
| AB5500_ADDR_RTC = 0x0F, |
| AB5500_ADDR_STARTUP = 0x03, |
| AB5500_ADDR_DBI_ECI = 0x07, |
| AB5500_ADDR_CHG = 0x0B, |
| AB5500_ADDR_FG_BATTCOM_ACC = 0x0C, |
| AB5500_ADDR_USB = 0x05, |
| AB5500_ADDR_IT = 0x0E, |
| AB5500_ADDR_VIBRA = 0x02, |
| AB5500_ADDR_AUDIO_HEADSETUSB = 0x0D, |
| }; |
| |
| /* |
| * Interrupt register offsets |
| * Bank : 0x0E |
| */ |
| #define AB5500_IT_SOURCE0_REG 0x20 |
| #define AB5500_IT_SOURCE1_REG 0x21 |
| #define AB5500_IT_SOURCE2_REG 0x22 |
| #define AB5500_IT_SOURCE3_REG 0x23 |
| #define AB5500_IT_SOURCE4_REG 0x24 |
| #define AB5500_IT_SOURCE5_REG 0x25 |
| #define AB5500_IT_SOURCE6_REG 0x26 |
| #define AB5500_IT_SOURCE7_REG 0x27 |
| #define AB5500_IT_SOURCE8_REG 0x28 |
| #define AB5500_IT_SOURCE9_REG 0x29 |
| #define AB5500_IT_SOURCE10_REG 0x2A |
| #define AB5500_IT_SOURCE11_REG 0x2B |
| #define AB5500_IT_SOURCE12_REG 0x2C |
| #define AB5500_IT_SOURCE13_REG 0x2D |
| #define AB5500_IT_SOURCE14_REG 0x2E |
| #define AB5500_IT_SOURCE15_REG 0x2F |
| #define AB5500_IT_SOURCE16_REG 0x30 |
| #define AB5500_IT_SOURCE17_REG 0x31 |
| #define AB5500_IT_SOURCE18_REG 0x32 |
| #define AB5500_IT_SOURCE19_REG 0x33 |
| #define AB5500_IT_SOURCE20_REG 0x34 |
| #define AB5500_IT_SOURCE21_REG 0x35 |
| #define AB5500_IT_SOURCE22_REG 0x36 |
| #define AB5500_IT_SOURCE23_REG 0x37 |
| |
| #define AB5500_NUM_IRQ_REGS 23 |
| |
| /** |
| * struct ab5500 |
| * @access_mutex: lock out concurrent accesses to the AB registers |
| * @dev: a pointer to the device struct for this chip driver |
| * @ab5500_irq: the analog baseband irq |
| * @irq_base: the platform configuration irq base for subdevices |
| * @chip_name: name of this chip variant |
| * @chip_id: 8 bit chip ID for this chip variant |
| * @irq_lock: a lock to protect the mask |
| * @abb_events: a local bit mask of the prcmu wakeup events |
| * @event_mask: a local copy of the mask event registers |
| * @last_event_mask: a copy of the last event_mask written to hardware |
| * @startup_events: a copy of the first reading of the event registers |
| * @startup_events_read: whether the first events have been read |
| */ |
| struct ab5500 { |
| struct mutex access_mutex; |
| struct device *dev; |
| unsigned int ab5500_irq; |
| unsigned int irq_base; |
| char chip_name[32]; |
| u8 chip_id; |
| struct mutex irq_lock; |
| u32 abb_events; |
| u8 mask[AB5500_NUM_IRQ_REGS]; |
| u8 oldmask[AB5500_NUM_IRQ_REGS]; |
| u8 startup_events[AB5500_NUM_IRQ_REGS]; |
| bool startup_events_read; |
| #ifdef CONFIG_DEBUG_FS |
| unsigned int debug_bank; |
| unsigned int debug_address; |
| #endif |
| }; |
| |
| struct ab5500_platform_data { |
| struct {unsigned int base; unsigned int count; } irq; |
| void *dev_data[AB5500_NUM_DEVICES]; |
| struct abx500_init_settings *init_settings; |
| unsigned int init_settings_sz; |
| bool pm_power_off; |
| }; |
| |
| #endif /* MFD_AB5500_H */ |