forked from luck/tmp_suning_uos_patched
mfd: ab5500 chip register access
The analog baseband chip ab5500 is a multi functional chip containing regulators, charging, gpio, USB and accessory detect. It also contain various multimedia functionalities like digital encoder and audio codec. The core driver added with this patch provides register access via i2c via PRCMU. Event handling implemented as irq_chip will come in future patches since it depends on PRCMU functionality not yet implemented. Signed-off-by: Mattias Wallin <mattias.wallin@stericsson.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
677df0c901
commit
3d5e2cabf1
@ -563,6 +563,15 @@ config EZX_PCAP
|
||||
This enables the PCAP ASIC present on EZX Phones. This is
|
||||
needed for MMC, TouchScreen, Sound, USB, etc..
|
||||
|
||||
config AB5500_CORE
|
||||
bool "ST-Ericsson AB5500 Mixed Signal Power Management chip"
|
||||
depends on ABX500_CORE && MFD_DB5500_PRCMU
|
||||
select MFD_CORE
|
||||
help
|
||||
Select this option to enable access to AB5500 power management
|
||||
chip. This connects to the db5500 chip via the I2C bus via PRCMU.
|
||||
This chip embeds various other multimedia funtionalities as well.
|
||||
|
||||
config AB8500_CORE
|
||||
bool "ST-Ericsson AB8500 Mixed Signal Power Management chip"
|
||||
depends on GENERIC_HARDIRQS && ABX500_CORE
|
||||
|
@ -80,6 +80,7 @@ obj-$(CONFIG_ABX500_CORE) += abx500-core.o
|
||||
obj-$(CONFIG_AB3100_CORE) += ab3100-core.o
|
||||
obj-$(CONFIG_AB3100_OTP) += ab3100-otp.o
|
||||
obj-$(CONFIG_AB3550_CORE) += ab3550-core.o
|
||||
obj-$(CONFIG_AB5500_CORE) += ab5500-core.o
|
||||
obj-$(CONFIG_AB8500_CORE) += ab8500-core.o ab8500-sysctrl.o
|
||||
obj-$(CONFIG_AB8500_DEBUG) += ab8500-debugfs.o
|
||||
obj-$(CONFIG_AB8500_GPADC) += ab8500-gpadc.o
|
||||
|
2312
drivers/mfd/ab5500-core.c
Normal file
2312
drivers/mfd/ab5500-core.c
Normal file
File diff suppressed because it is too large
Load Diff
140
include/linux/mfd/ab5500/ab5500.h
Normal file
140
include/linux/mfd/ab5500/ab5500.h
Normal file
@ -0,0 +1,140 @@
|
||||
/*
|
||||
* 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 */
|
@ -31,8 +31,8 @@
|
||||
#define AB3100_R2B 0xc8
|
||||
#define AB3550_P1A 0x10
|
||||
#define AB5500_1_0 0x20
|
||||
#define AB5500_2_0 0x21
|
||||
#define AB5500_2_1 0x22
|
||||
#define AB5500_1_1 0x21
|
||||
#define AB5500_2_0 0x24
|
||||
|
||||
/* AB8500 CIDs*/
|
||||
#define AB8500_CUTEARLY 0x00
|
||||
|
Loading…
Reference in New Issue
Block a user