aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorArun Murthy <arun.murthy@stericsson.com>2011-05-26 16:35:34 +0530
committersaid m bagheri <ebgheri@steludxu2848.(none)>2011-06-29 10:30:31 +0200
commit659068b0e2319caa829914d52d793500aaceda35 (patch)
tree125c91b9731a7d3b65d906ef80cadfe087c53d50 /drivers
parent0e3168c5c215461411de8ac04358fc8054f12afe (diff)
mfd: ab5500 - update with battery driver related stuff
Add charger, fuel gauge, battery temperature as clients of ab5500. Update the registers access privilege to each of the above mentioned and also the interrupts being used. ST-Ericsson Linux next: Not Tested ST-Ericsson ID: WP256401 ST-Ericsson FOSS-OUT ID: Trivial Change-Id: Ied7a7bc876459c3b96a62cda1ce29354f70c8573 Signed-off-by: Arun Murthy <arun.murthy@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/23148 Reviewed-by: QATEST Reviewed-by: Karl KOMIEROWSKI <karl.komierowski@stericsson.com> Reviewed-by: Johan PALSSON <johan.palsson@stericsson.com> Reviewed-by: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
Diffstat (limited to 'drivers')
-rwxr-xr-xdrivers/mfd/ab5500-core.c341
1 files changed, 330 insertions, 11 deletions
diff --git a/drivers/mfd/ab5500-core.c b/drivers/mfd/ab5500-core.c
index b50da3c5a76..c69d089597b 100755
--- a/drivers/mfd/ab5500-core.c
+++ b/drivers/mfd/ab5500-core.c
@@ -207,7 +207,7 @@ static struct ab5500_i2c_banks ab5500_bank_ranges[AB5500_NUM_DEVICES] = {
{
.first = 0x1F,
.last = 0x22,
- .perm = AB5500_PERM_RO,
+ .perm = AB5500_PERM_RW,
},
{
.first = 0x23,
@@ -445,15 +445,15 @@ static struct ab5500_i2c_banks ab5500_bank_ranges[AB5500_NUM_DEVICES] = {
},
},
[AB5500_DEVID_CHARGER] = {
- .nbanks = 1,
- .bank = (struct ab5500_i2c_ranges []) {
+ .nbanks = 4,
+ .bank = (struct ab5500_i2c_ranges[]) {
{
.bankid = AB5500_BANK_CHG,
.nranges = 2,
.range = (struct ab5500_reg_range[]) {
{
.first = 0x11,
- .last = 0x11,
+ .last = 0x12,
.perm = AB5500_PERM_RO,
},
{
@@ -463,9 +463,128 @@ static struct ab5500_i2c_banks ab5500_bank_ranges[AB5500_NUM_DEVICES] = {
},
},
},
+ {
+ .bankid = AB5500_BANK_USB,
+ .nranges = 13,
+ .range = (struct ab5500_reg_range[]) {
+ {
+ .first = 0x01,
+ .last = 0x01,
+ .perm = AB5500_PERM_RW,
+ },
+ {
+ .first = 0x80,
+ .last = 0x83,
+ .perm = AB5500_PERM_RW,
+ },
+ {
+ .first = 0x87,
+ .last = 0x8B,
+ .perm = AB5500_PERM_RW,
+ },
+ {
+ .first = 0x91,
+ .last = 0x94,
+ .perm = AB5500_PERM_RW,
+ },
+ {
+ .first = 0xA8,
+ .last = 0xB0,
+ .perm = AB5500_PERM_RW,
+ },
+ {
+ .first = 0xB2,
+ .last = 0xB2,
+ .perm = AB5500_PERM_RW,
+ },
+ {
+ .first = 0xB4,
+ .last = 0xBC,
+ .perm = AB5500_PERM_RW,
+ },
+ {
+ .first = 0xBF,
+ .last = 0xBF,
+ .perm = AB5500_PERM_RW,
+ },
+ {
+ .first = 0xC1,
+ .last = 0xC6,
+ .perm = AB5500_PERM_RW,
+ },
+ {
+ .first = 0xCD,
+ .last = 0xCD,
+ .perm = AB5500_PERM_RW,
+ },
+ {
+ .first = 0xD6,
+ .last = 0xDA,
+ .perm = AB5500_PERM_RW,
+ },
+ {
+ .first = 0xDC,
+ .last = 0xDC,
+ .perm = AB5500_PERM_RW,
+ },
+ {
+ .first = 0xE0,
+ .last = 0xE4,
+ .perm = AB5500_PERM_RW,
+ },
+ },
+ },
+ {
+ .bankid = AB5500_BANK_IT,
+ .nranges = 2,
+ .range = (struct ab5500_reg_range[]) {
+ {
+ .first = 0x00,
+ .last = 0x02,
+ .perm = AB5500_PERM_RO,
+ },
+ {
+ .first = 0x20,
+ .last = 0x36,
+ .perm = AB5500_PERM_RO,
+ },
+ },
+ },
+ {
+ .bankid = AB5500_BANK_STARTUP,
+ .nranges = 1,
+ .range = (struct ab5500_reg_range[]) {
+ {
+ .first = 0x2F,
+ .last = 0x30,
+ .perm = AB5500_PERM_RW,
+ },
+ },
+ },
+ },
+ },
+ [AB5500_DEVID_BTEMP] = {
+ .nbanks = 1,
+ .bank = (struct ab5500_i2c_ranges []) {
+ {
+ .bankid = AB5500_BANK_FG_BATTCOM_ACC,
+ .nranges = 2,
+ .range = (struct ab5500_reg_range[]) {
+ {
+ .first = 0x00,
+ .last = 0x0B,
+ .perm = AB5500_PERM_RO,
+ },
+ {
+ .first = 0x0C,
+ .last = 0x24,
+ .perm = AB5500_PERM_RW,
+ },
+ },
+ },
},
},
- [AB5500_DEVID_FUELGAUGE] = {
+ [AB5500_DEVID_FG] = {
.nbanks = 1,
.bank = (struct ab5500_i2c_ranges []) {
{
@@ -479,7 +598,7 @@ static struct ab5500_i2c_banks ab5500_bank_ranges[AB5500_NUM_DEVICES] = {
},
{
.first = 0x0C,
- .last = 0x10,
+ .last = 0x24,
.perm = AB5500_PERM_RW,
},
},
@@ -603,6 +722,206 @@ static struct mfd_cell ab5500_devs[AB5500_NUM_DEVICES] = {
[AB5500_DEVID_CHARGER] = {
.name = "ab5500-charger",
.id = AB5500_DEVID_CHARGER,
+ .num_resources = 29,
+ .resources = (struct resource[]) {
+ {
+ .name = "VBAT_INSERT",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(2, 4),
+ .end = AB5500_IRQ(2, 4),
+ },
+ {
+ .name = "TEMP_ASIC_ALARM",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(2, 2),
+ .end = AB5500_IRQ(2, 2),
+ },
+ {
+ .name = "BATT_REMOVAL",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(7, 6),
+ .end = AB5500_IRQ(7, 6),
+ },
+ {
+ .name = "BATT_ATTACH",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(7, 5),
+ .end = AB5500_IRQ(7, 5),
+ },
+ {
+ .name = "CGSTATE_10_PCVBUS_CHG",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(8, 7),
+ .end = AB5500_IRQ(8, 7),
+ },
+ {
+ .name = "VBUS_FALLING",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(8, 6),
+ .end = AB5500_IRQ(8, 6),
+ },
+ {
+ .name = "VBUS_RISING",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(8, 5),
+ .end = AB5500_IRQ(8, 5),
+ },
+ {
+ .name = "UART_RDY_TX",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(8, 2),
+ .end = AB5500_IRQ(8, 2),
+ },
+ {
+ .name = "UART_RDY_RX",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(8, 1),
+ .end = AB5500_IRQ(8, 1),
+ },
+ {
+ .name = "UART_OVERRUN",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(8, 0),
+ .end = AB5500_IRQ(8, 0),
+ },
+ {
+ .name = "VBUS_IMEAS_MAX_CHANGE_RISING",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(9, 7),
+ .end = AB5500_IRQ(9, 7),
+ },
+ {
+ .name = "USB_SUSPEND",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(9, 3),
+ .end = AB5500_IRQ(9, 3),
+ },
+ {
+ .name = "USB_CHAR_DET_DONE",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(9, 1),
+ .end = AB5500_IRQ(9, 1),
+ },
+ {
+ .name = "VBUS_IMEAS_MAX_CHANGE_FALLING",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(10, 0),
+ .end = AB5500_IRQ(10, 0),
+ },
+ {
+ .name = "OVV",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(14, 5),
+ .end = AB5500_IRQ(14, 5),
+ },
+ {
+ .name = "BSI_INDICATOR",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(14, 4),
+ .end = AB5500_IRQ(14, 4),
+ },
+ {
+ .name = "USB_CH_TH_PROTECTION",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(15, 4),
+ .end = AB5500_IRQ(15, 4),
+ },
+ {
+ .name = "USB_CH_NOT_OK",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(15, 3),
+ .end = AB5500_IRQ(15, 3),
+ },
+ {
+ .name = "CHAR_TEMP_WINDOW_OK_RISING",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(17, 7),
+ .end = AB5500_IRQ(17, 7),
+ },
+ {
+ .name = "CHARGING_STOPPED_BY_TEMP",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(18, 6),
+ .end = AB5500_IRQ(18, 6),
+ },
+ {
+ .name = "VBUS_DROP_FALLING",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(18, 4),
+ .end = AB5500_IRQ(18, 4),
+ },
+ {
+ .name = "VBUS_DROP_RISING",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(18, 3),
+ .end = AB5500_IRQ(18, 3),
+ },
+ {
+ .name = "CHAR_TEMP_WINDOW_OK_FALLING",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(18, 0),
+ .end = AB5500_IRQ(18, 0),
+ },
+ {
+ .name = "CHG_STATE_13_COMP_VBUS",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(21, 3),
+ .end = AB5500_IRQ(21, 3),
+ },
+ {
+ .name = "CHG_STATE_12_COMP_VBUS",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(21, 2),
+ .end = AB5500_IRQ(21, 2),
+ },
+ {
+ .name = "CHG_STATE_11_SAFE_MODE_VBUS",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(21, 1),
+ .end = AB5500_IRQ(21, 1),
+ },
+ {
+ .name = "USB_LINK_UPDATE",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(22, 1),
+ .end = AB5500_IRQ(22, 1),
+ },
+ {
+ .name = "CHG_SW_TIMER_OUT",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(23, 7),
+ .end = AB5500_IRQ(23, 7),
+ },
+ {
+ .name = "CHG_HW_TIMER_OUT",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(23, 6),
+ .end = AB5500_IRQ(23, 6),
+ },
+ },
+ },
+ [AB5500_DEVID_CHARGALG] = {
+ .name = "abx500-chargalg",
+ .id = AB5500_DEVID_CHARGALG,
+ },
+ [AB5500_DEVID_BTEMP] = {
+ .name = "ab5500-btemp",
+ .id = AB5500_DEVID_BTEMP,
+ .num_resources = 2,
+ .resources = (struct resource[]) {
+ {
+ .name = "BATT_ATTACH",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(7, 5),
+ .end = AB5500_IRQ(7, 5),
+ },
+ {
+ .name = "BATT_REMOVAL",
+ .flags = IORESOURCE_IRQ,
+ .start = AB5500_IRQ(7, 6),
+ .end = AB5500_IRQ(7, 6),
+ },
+ },
},
[AB5500_DEVID_ADC] = {
.name = "ab5500-adc",
@@ -671,9 +990,9 @@ static struct mfd_cell ab5500_devs[AB5500_NUM_DEVICES] = {
},
},
},
- [AB5500_DEVID_FUELGAUGE] = {
- .name = "ab5500-fuelgauge",
- .id = AB5500_DEVID_FUELGAUGE,
+ [AB5500_DEVID_FG] = {
+ .name = "ab5500-fg",
+ .id = AB5500_DEVID_FG,
.num_resources = 6,
.resources = (struct resource[]) {
{
@@ -1401,7 +1720,7 @@ static struct ab5500_i2c_ranges ab5500_reg_ranges[AB5500_NUM_BANKS] = {
{
.first = 0x1F,
.last = 0x22,
- .perm = AB5500_PERM_RO,
+ .perm = AB5500_PERM_RW,
},
{
.first = 0x23,
@@ -1560,7 +1879,7 @@ static struct ab5500_i2c_ranges ab5500_reg_ranges[AB5500_NUM_BANKS] = {
},
{
.first = 0x0C,
- .last = 0x10,
+ .last = 0x24,
.perm = AB5500_PERM_RW,
},
},