linux/drivers/mfd/ab8500-core.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) ST-Ericsson SA 2010
   3 *
   4 * License Terms: GNU General Public License v2
   5 * Author: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
   6 * Author: Rabin Vincent <rabin.vincent@stericsson.com>
   7 * Author: Mattias Wallin <mattias.wallin@stericsson.com>
   8 */
   9
  10#include <linux/kernel.h>
  11#include <linux/slab.h>
  12#include <linux/init.h>
  13#include <linux/irq.h>
  14#include <linux/irqdomain.h>
  15#include <linux/delay.h>
  16#include <linux/interrupt.h>
  17#include <linux/module.h>
  18#include <linux/platform_device.h>
  19#include <linux/mfd/core.h>
  20#include <linux/mfd/abx500.h>
  21#include <linux/mfd/abx500/ab8500.h>
  22#include <linux/mfd/abx500/ab8500-bm.h>
  23#include <linux/mfd/dbx500-prcmu.h>
  24#include <linux/regulator/ab8500.h>
  25#include <linux/of.h>
  26#include <linux/of_device.h>
  27
  28/*
  29 * Interrupt register offsets
  30 * Bank : 0x0E
  31 */
  32#define AB8500_IT_SOURCE1_REG           0x00
  33#define AB8500_IT_SOURCE2_REG           0x01
  34#define AB8500_IT_SOURCE3_REG           0x02
  35#define AB8500_IT_SOURCE4_REG           0x03
  36#define AB8500_IT_SOURCE5_REG           0x04
  37#define AB8500_IT_SOURCE6_REG           0x05
  38#define AB8500_IT_SOURCE7_REG           0x06
  39#define AB8500_IT_SOURCE8_REG           0x07
  40#define AB9540_IT_SOURCE13_REG          0x0C
  41#define AB8500_IT_SOURCE19_REG          0x12
  42#define AB8500_IT_SOURCE20_REG          0x13
  43#define AB8500_IT_SOURCE21_REG          0x14
  44#define AB8500_IT_SOURCE22_REG          0x15
  45#define AB8500_IT_SOURCE23_REG          0x16
  46#define AB8500_IT_SOURCE24_REG          0x17
  47
  48/*
  49 * latch registers
  50 */
  51#define AB8500_IT_LATCH1_REG            0x20
  52#define AB8500_IT_LATCH2_REG            0x21
  53#define AB8500_IT_LATCH3_REG            0x22
  54#define AB8500_IT_LATCH4_REG            0x23
  55#define AB8500_IT_LATCH5_REG            0x24
  56#define AB8500_IT_LATCH6_REG            0x25
  57#define AB8500_IT_LATCH7_REG            0x26
  58#define AB8500_IT_LATCH8_REG            0x27
  59#define AB8500_IT_LATCH9_REG            0x28
  60#define AB8500_IT_LATCH10_REG           0x29
  61#define AB8500_IT_LATCH12_REG           0x2B
  62#define AB9540_IT_LATCH13_REG           0x2C
  63#define AB8500_IT_LATCH19_REG           0x32
  64#define AB8500_IT_LATCH20_REG           0x33
  65#define AB8500_IT_LATCH21_REG           0x34
  66#define AB8500_IT_LATCH22_REG           0x35
  67#define AB8500_IT_LATCH23_REG           0x36
  68#define AB8500_IT_LATCH24_REG           0x37
  69
  70/*
  71 * mask registers
  72 */
  73
  74#define AB8500_IT_MASK1_REG             0x40
  75#define AB8500_IT_MASK2_REG             0x41
  76#define AB8500_IT_MASK3_REG             0x42
  77#define AB8500_IT_MASK4_REG             0x43
  78#define AB8500_IT_MASK5_REG             0x44
  79#define AB8500_IT_MASK6_REG             0x45
  80#define AB8500_IT_MASK7_REG             0x46
  81#define AB8500_IT_MASK8_REG             0x47
  82#define AB8500_IT_MASK9_REG             0x48
  83#define AB8500_IT_MASK10_REG            0x49
  84#define AB8500_IT_MASK11_REG            0x4A
  85#define AB8500_IT_MASK12_REG            0x4B
  86#define AB8500_IT_MASK13_REG            0x4C
  87#define AB8500_IT_MASK14_REG            0x4D
  88#define AB8500_IT_MASK15_REG            0x4E
  89#define AB8500_IT_MASK16_REG            0x4F
  90#define AB8500_IT_MASK17_REG            0x50
  91#define AB8500_IT_MASK18_REG            0x51
  92#define AB8500_IT_MASK19_REG            0x52
  93#define AB8500_IT_MASK20_REG            0x53
  94#define AB8500_IT_MASK21_REG            0x54
  95#define AB8500_IT_MASK22_REG            0x55
  96#define AB8500_IT_MASK23_REG            0x56
  97#define AB8500_IT_MASK24_REG            0x57
  98#define AB8500_IT_MASK25_REG            0x58
  99
 100/*
 101 * latch hierarchy registers
 102 */
 103#define AB8500_IT_LATCHHIER1_REG        0x60
 104#define AB8500_IT_LATCHHIER2_REG        0x61
 105#define AB8500_IT_LATCHHIER3_REG        0x62
 106#define AB8540_IT_LATCHHIER4_REG        0x63
 107
 108#define AB8500_IT_LATCHHIER_NUM         3
 109#define AB8540_IT_LATCHHIER_NUM         4
 110
 111#define AB8500_REV_REG                  0x80
 112#define AB8500_IC_NAME_REG              0x82
 113#define AB8500_SWITCH_OFF_STATUS        0x00
 114
 115#define AB8500_TURN_ON_STATUS           0x00
 116#define AB8505_TURN_ON_STATUS_2         0x04
 117
 118#define AB8500_CH_USBCH_STAT1_REG       0x02
 119#define VBUS_DET_DBNC100                0x02
 120#define VBUS_DET_DBNC1                  0x01
 121
 122static DEFINE_SPINLOCK(on_stat_lock);
 123static u8 turn_on_stat_mask = 0xFF;
 124static u8 turn_on_stat_set;
 125static bool no_bm; /* No battery management */
 126module_param(no_bm, bool, S_IRUGO);
 127
 128#define AB9540_MODEM_CTRL2_REG                  0x23
 129#define AB9540_MODEM_CTRL2_SWDBBRSTN_BIT        BIT(2)
 130
 131/*
 132 * Map interrupt numbers to the LATCH and MASK register offsets, Interrupt
 133 * numbers are indexed into this array with (num / 8). The interupts are
 134 * defined in linux/mfd/ab8500.h
 135 *
 136 * This is one off from the register names, i.e. AB8500_IT_MASK1_REG is at
 137 * offset 0.
 138 */
 139/* AB8500 support */
 140static const int ab8500_irq_regoffset[AB8500_NUM_IRQ_REGS] = {
 141        0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 18, 19, 20, 21,
 142};
 143
 144/* AB9540 / AB8505 support */
 145static const int ab9540_irq_regoffset[AB9540_NUM_IRQ_REGS] = {
 146        0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 18, 19, 20, 21, 12, 13, 24, 5, 22, 23
 147};
 148
 149/* AB8540 support */
 150static const int ab8540_irq_regoffset[AB8540_NUM_IRQ_REGS] = {
 151        0, 1, 2, 3, 4, -1, -1, -1, -1, 11, 18, 19, 20, 21, 12, 13, 24, 5, 22,
 152        23, 25, 26, 27, 28, 29, 30, 31,
 153};
 154
 155static const char ab8500_version_str[][7] = {
 156        [AB8500_VERSION_AB8500] = "AB8500",
 157        [AB8500_VERSION_AB8505] = "AB8505",
 158        [AB8500_VERSION_AB9540] = "AB9540",
 159        [AB8500_VERSION_AB8540] = "AB8540",
 160};
 161
 162static int ab8500_prcmu_write(struct ab8500 *ab8500, u16 addr, u8 data)
 163{
 164        int ret;
 165
 166        ret = prcmu_abb_write((u8)(addr >> 8), (u8)(addr & 0xFF), &data, 1);
 167        if (ret < 0)
 168                dev_err(ab8500->dev, "prcmu i2c error %d\n", ret);
 169        return ret;
 170}
 171
 172static int ab8500_prcmu_write_masked(struct ab8500 *ab8500, u16 addr, u8 mask,
 173        u8 data)
 174{
 175        int ret;
 176
 177        ret = prcmu_abb_write_masked((u8)(addr >> 8), (u8)(addr & 0xFF), &data,
 178                &mask, 1);
 179        if (ret < 0)
 180                dev_err(ab8500->dev, "prcmu i2c error %d\n", ret);
 181        return ret;
 182}
 183
 184static int ab8500_prcmu_read(struct ab8500 *ab8500, u16 addr)
 185{
 186        int ret;
 187        u8 data;
 188
 189        ret = prcmu_abb_read((u8)(addr >> 8), (u8)(addr & 0xFF), &data, 1);
 190        if (ret < 0) {
 191                dev_err(ab8500->dev, "prcmu i2c error %d\n", ret);
 192                return ret;
 193        }
 194        return (int)data;
 195}
 196
 197static int ab8500_get_chip_id(struct device *dev)
 198{
 199        struct ab8500 *ab8500;
 200
 201        if (!dev)
 202                return -EINVAL;
 203        ab8500 = dev_get_drvdata(dev->parent);
 204        return ab8500 ? (int)ab8500->chip_id : -EINVAL;
 205}
 206
 207static int set_register_interruptible(struct ab8500 *ab8500, u8 bank,
 208        u8 reg, u8 data)
 209{
 210        int ret;
 211        /*
 212         * Put the u8 bank and u8 register together into a an u16.
 213         * The bank on higher 8 bits and register in lower 8 bits.
 214         */
 215        u16 addr = ((u16)bank) << 8 | reg;
 216
 217        dev_vdbg(ab8500->dev, "wr: addr %#x <= %#x\n", addr, data);
 218
 219        mutex_lock(&ab8500->lock);
 220
 221        ret = ab8500->write(ab8500, addr, data);
 222        if (ret < 0)
 223                dev_err(ab8500->dev, "failed to write reg %#x: %d\n",
 224                        addr, ret);
 225        mutex_unlock(&ab8500->lock);
 226
 227        return ret;
 228}
 229
 230static int ab8500_set_register(struct device *dev, u8 bank,
 231        u8 reg, u8 value)
 232{
 233        int ret;
 234        struct ab8500 *ab8500 = dev_get_drvdata(dev->parent);
 235
 236        atomic_inc(&ab8500->transfer_ongoing);
 237        ret = set_register_interruptible(ab8500, bank, reg, value);
 238        atomic_dec(&ab8500->transfer_ongoing);
 239        return ret;
 240}
 241
 242static int get_register_interruptible(struct ab8500 *ab8500, u8 bank,
 243        u8 reg, u8 *value)
 244{
 245        int ret;
 246        u16 addr = ((u16)bank) << 8 | reg;
 247
 248        mutex_lock(&ab8500->lock);
 249
 250        ret = ab8500->read(ab8500, addr);
 251        if (ret < 0)
 252                dev_err(ab8500->dev, "failed to read reg %#x: %d\n",
 253                        addr, ret);
 254        else
 255                *value = ret;
 256
 257        mutex_unlock(&ab8500->lock);
 258        dev_vdbg(ab8500->dev, "rd: addr %#x => data %#x\n", addr, ret);
 259
 260        return ret;
 261}
 262
 263static int ab8500_get_register(struct device *dev, u8 bank,
 264        u8 reg, u8 *value)
 265{
 266        int ret;
 267        struct ab8500 *ab8500 = dev_get_drvdata(dev->parent);
 268
 269        atomic_inc(&ab8500->transfer_ongoing);
 270        ret = get_register_interruptible(ab8500, bank, reg, value);
 271        atomic_dec(&ab8500->transfer_ongoing);
 272        return ret;
 273}
 274
 275static int mask_and_set_register_interruptible(struct ab8500 *ab8500, u8 bank,
 276        u8 reg, u8 bitmask, u8 bitvalues)
 277{
 278        int ret;
 279        u16 addr = ((u16)bank) << 8 | reg;
 280
 281        mutex_lock(&ab8500->lock);
 282
 283        if (ab8500->write_masked == NULL) {
 284                u8 data;
 285
 286                ret = ab8500->read(ab8500, addr);
 287                if (ret < 0) {
 288                        dev_err(ab8500->dev, "failed to read reg %#x: %d\n",
 289                                addr, ret);
 290                        goto out;
 291                }
 292
 293                data = (u8)ret;
 294                data = (~bitmask & data) | (bitmask & bitvalues);
 295
 296                ret = ab8500->write(ab8500, addr, data);
 297                if (ret < 0)
 298                        dev_err(ab8500->dev, "failed to write reg %#x: %d\n",
 299                                addr, ret);
 300
 301                dev_vdbg(ab8500->dev, "mask: addr %#x => data %#x\n", addr,
 302                        data);
 303                goto out;
 304        }
 305        ret = ab8500->write_masked(ab8500, addr, bitmask, bitvalues);
 306        if (ret < 0)
 307                dev_err(ab8500->dev, "failed to modify reg %#x: %d\n", addr,
 308                        ret);
 309out:
 310        mutex_unlock(&ab8500->lock);
 311        return ret;
 312}
 313
 314static int ab8500_mask_and_set_register(struct device *dev,
 315        u8 bank, u8 reg, u8 bitmask, u8 bitvalues)
 316{
 317        int ret;
 318        struct ab8500 *ab8500 = dev_get_drvdata(dev->parent);
 319
 320        atomic_inc(&ab8500->transfer_ongoing);
 321        ret = mask_and_set_register_interruptible(ab8500, bank, reg,
 322                                                 bitmask, bitvalues);
 323        atomic_dec(&ab8500->transfer_ongoing);
 324        return ret;
 325}
 326
 327static struct abx500_ops ab8500_ops = {
 328        .get_chip_id = ab8500_get_chip_id,
 329        .get_register = ab8500_get_register,
 330        .set_register = ab8500_set_register,
 331        .get_register_page = NULL,
 332        .set_register_page = NULL,
 333        .mask_and_set_register = ab8500_mask_and_set_register,
 334        .event_registers_startup_state_get = NULL,
 335        .startup_irq_enabled = NULL,
 336        .dump_all_banks = ab8500_dump_all_banks,
 337};
 338
 339static void ab8500_irq_lock(struct irq_data *data)
 340{
 341        struct ab8500 *ab8500 = irq_data_get_irq_chip_data(data);
 342
 343        mutex_lock(&ab8500->irq_lock);
 344        atomic_inc(&ab8500->transfer_ongoing);
 345}
 346
 347static void ab8500_irq_sync_unlock(struct irq_data *data)
 348{
 349        struct ab8500 *ab8500 = irq_data_get_irq_chip_data(data);
 350        int i;
 351
 352        for (i = 0; i < ab8500->mask_size; i++) {
 353                u8 old = ab8500->oldmask[i];
 354                u8 new = ab8500->mask[i];
 355                int reg;
 356
 357                if (new == old)
 358                        continue;
 359
 360                /*
 361                 * Interrupt register 12 doesn't exist prior to AB8500 version
 362                 * 2.0
 363                 */
 364                if (ab8500->irq_reg_offset[i] == 11 &&
 365                        is_ab8500_1p1_or_earlier(ab8500))
 366                        continue;
 367
 368                if (ab8500->irq_reg_offset[i] < 0)
 369                        continue;
 370
 371                ab8500->oldmask[i] = new;
 372
 373                reg = AB8500_IT_MASK1_REG + ab8500->irq_reg_offset[i];
 374                set_register_interruptible(ab8500, AB8500_INTERRUPT, reg, new);
 375        }
 376        atomic_dec(&ab8500->transfer_ongoing);
 377        mutex_unlock(&ab8500->irq_lock);
 378}
 379
 380static void ab8500_irq_mask(struct irq_data *data)
 381{
 382        struct ab8500 *ab8500 = irq_data_get_irq_chip_data(data);
 383        int offset = data->hwirq;
 384        int index = offset / 8;
 385        int mask = 1 << (offset % 8);
 386
 387        ab8500->mask[index] |= mask;
 388
 389        /* The AB8500 GPIOs have two interrupts each (rising & falling). */
 390        if (offset >= AB8500_INT_GPIO6R && offset <= AB8500_INT_GPIO41R)
 391                ab8500->mask[index + 2] |= mask;
 392        if (offset >= AB9540_INT_GPIO50R && offset <= AB9540_INT_GPIO54R)
 393                ab8500->mask[index + 1] |= mask;
 394        if (offset == AB8540_INT_GPIO43R || offset == AB8540_INT_GPIO44R)
 395                /* Here the falling IRQ is one bit lower */
 396                ab8500->mask[index] |= (mask << 1);
 397}
 398
 399static void ab8500_irq_unmask(struct irq_data *data)
 400{
 401        struct ab8500 *ab8500 = irq_data_get_irq_chip_data(data);
 402        unsigned int type = irqd_get_trigger_type(data);
 403        int offset = data->hwirq;
 404        int index = offset / 8;
 405        int mask = 1 << (offset % 8);
 406
 407        if (type & IRQ_TYPE_EDGE_RISING)
 408                ab8500->mask[index] &= ~mask;
 409
 410        /* The AB8500 GPIOs have two interrupts each (rising & falling). */
 411        if (type & IRQ_TYPE_EDGE_FALLING) {
 412                if (offset >= AB8500_INT_GPIO6R && offset <= AB8500_INT_GPIO41R)
 413                        ab8500->mask[index + 2] &= ~mask;
 414                else if (offset >= AB9540_INT_GPIO50R &&
 415                         offset <= AB9540_INT_GPIO54R)
 416                        ab8500->mask[index + 1] &= ~mask;
 417                else if (offset == AB8540_INT_GPIO43R ||
 418                         offset == AB8540_INT_GPIO44R)
 419                        /* Here the falling IRQ is one bit lower */
 420                        ab8500->mask[index] &= ~(mask << 1);
 421                else
 422                        ab8500->mask[index] &= ~mask;
 423        } else {
 424                /* Satisfies the case where type is not set. */
 425                ab8500->mask[index] &= ~mask;
 426        }
 427}
 428
 429static int ab8500_irq_set_type(struct irq_data *data, unsigned int type)
 430{
 431        return 0;
 432}
 433
 434static struct irq_chip ab8500_irq_chip = {
 435        .name                   = "ab8500",
 436        .irq_bus_lock           = ab8500_irq_lock,
 437        .irq_bus_sync_unlock    = ab8500_irq_sync_unlock,
 438        .irq_mask               = ab8500_irq_mask,
 439        .irq_disable            = ab8500_irq_mask,
 440        .irq_unmask             = ab8500_irq_unmask,
 441        .irq_set_type           = ab8500_irq_set_type,
 442};
 443
 444static void update_latch_offset(u8 *offset, int i)
 445{
 446        /* Fix inconsistent ITFromLatch25 bit mapping... */
 447        if (unlikely(*offset == 17))
 448                *offset = 24;
 449        /* Fix inconsistent ab8540 bit mapping... */
 450        if (unlikely(*offset == 16))
 451                *offset = 25;
 452        if ((i == 3) && (*offset >= 24))
 453                *offset += 2;
 454}
 455
 456static int ab8500_handle_hierarchical_line(struct ab8500 *ab8500,
 457                                        int latch_offset, u8 latch_val)
 458{
 459        int int_bit, line, i;
 460
 461        for (i = 0; i < ab8500->mask_size; i++)
 462                if (ab8500->irq_reg_offset[i] == latch_offset)
 463                        break;
 464
 465        if (i >= ab8500->mask_size) {
 466                dev_err(ab8500->dev, "Register offset 0x%2x not declared\n",
 467                                latch_offset);
 468                return -ENXIO;
 469        }
 470
 471        /* ignore masked out interrupts */
 472        latch_val &= ~ab8500->mask[i];
 473
 474        while (latch_val) {
 475                int_bit = __ffs(latch_val);
 476                line = (i << 3) + int_bit;
 477                latch_val &= ~(1 << int_bit);
 478
 479                /*
 480                 * This handles the falling edge hwirqs from the GPIO
 481                 * lines. Route them back to the line registered for the
 482                 * rising IRQ, as this is merely a flag for the same IRQ
 483                 * in linux terms.
 484                 */
 485                if (line >= AB8500_INT_GPIO6F && line <= AB8500_INT_GPIO41F)
 486                        line -= 16;
 487                if (line >= AB9540_INT_GPIO50F && line <= AB9540_INT_GPIO54F)
 488                        line -= 8;
 489                if (line == AB8540_INT_GPIO43F || line == AB8540_INT_GPIO44F)
 490                        line += 1;
 491
 492                handle_nested_irq(irq_create_mapping(ab8500->domain, line));
 493        }
 494
 495        return 0;
 496}
 497
 498static int ab8500_handle_hierarchical_latch(struct ab8500 *ab8500,
 499                                        int hier_offset, u8 hier_val)
 500{
 501        int latch_bit, status;
 502        u8 latch_offset, latch_val;
 503
 504        do {
 505                latch_bit = __ffs(hier_val);
 506                latch_offset = (hier_offset << 3) + latch_bit;
 507
 508                update_latch_offset(&latch_offset, hier_offset);
 509
 510                status = get_register_interruptible(ab8500,
 511                                AB8500_INTERRUPT,
 512                                AB8500_IT_LATCH1_REG + latch_offset,
 513                                &latch_val);
 514                if (status < 0 || latch_val == 0)
 515                        goto discard;
 516
 517                status = ab8500_handle_hierarchical_line(ab8500,
 518                                latch_offset, latch_val);
 519                if (status < 0)
 520                        return status;
 521discard:
 522                hier_val &= ~(1 << latch_bit);
 523        } while (hier_val);
 524
 525        return 0;
 526}
 527
 528static irqreturn_t ab8500_hierarchical_irq(int irq, void *dev)
 529{
 530        struct ab8500 *ab8500 = dev;
 531        u8 i;
 532
 533        dev_vdbg(ab8500->dev, "interrupt\n");
 534
 535        /*  Hierarchical interrupt version */
 536        for (i = 0; i < (ab8500->it_latchhier_num); i++) {
 537                int status;
 538                u8 hier_val;
 539
 540                status = get_register_interruptible(ab8500, AB8500_INTERRUPT,
 541                        AB8500_IT_LATCHHIER1_REG + i, &hier_val);
 542                if (status < 0 || hier_val == 0)
 543                        continue;
 544
 545                status = ab8500_handle_hierarchical_latch(ab8500, i, hier_val);
 546                if (status < 0)
 547                        break;
 548        }
 549        return IRQ_HANDLED;
 550}
 551
 552static int ab8500_irq_map(struct irq_domain *d, unsigned int virq,
 553                                irq_hw_number_t hwirq)
 554{
 555        struct ab8500 *ab8500 = d->host_data;
 556
 557        if (!ab8500)
 558                return -EINVAL;
 559
 560        irq_set_chip_data(virq, ab8500);
 561        irq_set_chip_and_handler(virq, &ab8500_irq_chip,
 562                                handle_simple_irq);
 563        irq_set_nested_thread(virq, 1);
 564        irq_set_noprobe(virq);
 565
 566        return 0;
 567}
 568
 569static const struct irq_domain_ops ab8500_irq_ops = {
 570        .map    = ab8500_irq_map,
 571        .xlate  = irq_domain_xlate_twocell,
 572};
 573
 574static int ab8500_irq_init(struct ab8500 *ab8500, struct device_node *np)
 575{
 576        int num_irqs;
 577
 578        if (is_ab8540(ab8500))
 579                num_irqs = AB8540_NR_IRQS;
 580        else if (is_ab9540(ab8500))
 581                num_irqs = AB9540_NR_IRQS;
 582        else if (is_ab8505(ab8500))
 583                num_irqs = AB8505_NR_IRQS;
 584        else
 585                num_irqs = AB8500_NR_IRQS;
 586
 587        /* If ->irq_base is zero this will give a linear mapping */
 588        ab8500->domain = irq_domain_add_simple(ab8500->dev->of_node,
 589                                               num_irqs, 0,
 590                                               &ab8500_irq_ops, ab8500);
 591
 592        if (!ab8500->domain) {
 593                dev_err(ab8500->dev, "Failed to create irqdomain\n");
 594                return -ENODEV;
 595        }
 596
 597        return 0;
 598}
 599
 600int ab8500_suspend(struct ab8500 *ab8500)
 601{
 602        if (atomic_read(&ab8500->transfer_ongoing))
 603                return -EINVAL;
 604
 605        return 0;
 606}
 607
 608static const struct mfd_cell ab8500_bm_devs[] = {
 609        {
 610                .name = "ab8500-charger",
 611                .of_compatible = "stericsson,ab8500-charger",
 612                .platform_data = &ab8500_bm_data,
 613                .pdata_size = sizeof(ab8500_bm_data),
 614        },
 615        {
 616                .name = "ab8500-btemp",
 617                .of_compatible = "stericsson,ab8500-btemp",
 618                .platform_data = &ab8500_bm_data,
 619                .pdata_size = sizeof(ab8500_bm_data),
 620        },
 621        {
 622                .name = "ab8500-fg",
 623                .of_compatible = "stericsson,ab8500-fg",
 624                .platform_data = &ab8500_bm_data,
 625                .pdata_size = sizeof(ab8500_bm_data),
 626        },
 627        {
 628                .name = "ab8500-chargalg",
 629                .of_compatible = "stericsson,ab8500-chargalg",
 630                .platform_data = &ab8500_bm_data,
 631                .pdata_size = sizeof(ab8500_bm_data),
 632        },
 633};
 634
 635static const struct mfd_cell ab8500_devs[] = {
 636#ifdef CONFIG_DEBUG_FS
 637        {
 638                .name = "ab8500-debug",
 639                .of_compatible = "stericsson,ab8500-debug",
 640        },
 641#endif
 642        {
 643                .name = "ab8500-sysctrl",
 644                .of_compatible = "stericsson,ab8500-sysctrl",
 645        },
 646        {
 647                .name = "ab8500-ext-regulator",
 648                .of_compatible = "stericsson,ab8500-ext-regulator",
 649        },
 650        {
 651                .name = "ab8500-regulator",
 652                .of_compatible = "stericsson,ab8500-regulator",
 653        },
 654        {
 655                .name = "abx500-clk",
 656                .of_compatible = "stericsson,abx500-clk",
 657        },
 658        {
 659                .name = "ab8500-gpadc",
 660                .of_compatible = "stericsson,ab8500-gpadc",
 661        },
 662        {
 663                .name = "ab8500-rtc",
 664                .of_compatible = "stericsson,ab8500-rtc",
 665        },
 666        {
 667                .name = "ab8500-acc-det",
 668                .of_compatible = "stericsson,ab8500-acc-det",
 669        },
 670        {
 671
 672                .name = "ab8500-poweron-key",
 673                .of_compatible = "stericsson,ab8500-poweron-key",
 674        },
 675        {
 676                .name = "ab8500-pwm",
 677                .of_compatible = "stericsson,ab8500-pwm",
 678                .id = 1,
 679        },
 680        {
 681                .name = "ab8500-pwm",
 682                .of_compatible = "stericsson,ab8500-pwm",
 683                .id = 2,
 684        },
 685        {
 686                .name = "ab8500-pwm",
 687                .of_compatible = "stericsson,ab8500-pwm",
 688                .id = 3,
 689        },
 690        {
 691                .name = "ab8500-denc",
 692                .of_compatible = "stericsson,ab8500-denc",
 693        },
 694        {
 695                .name = "pinctrl-ab8500",
 696                .of_compatible = "stericsson,ab8500-gpio",
 697        },
 698        {
 699                .name = "abx500-temp",
 700                .of_compatible = "stericsson,abx500-temp",
 701        },
 702        {
 703                .name = "ab8500-usb",
 704                .of_compatible = "stericsson,ab8500-usb",
 705        },
 706        {
 707                .name = "ab8500-codec",
 708                .of_compatible = "stericsson,ab8500-codec",
 709        },
 710};
 711
 712static const struct mfd_cell ab9540_devs[] = {
 713#ifdef CONFIG_DEBUG_FS
 714        {
 715                .name = "ab8500-debug",
 716        },
 717#endif
 718        {
 719                .name = "ab8500-sysctrl",
 720        },
 721        {
 722                .name = "ab8500-ext-regulator",
 723        },
 724        {
 725                .name = "ab8500-regulator",
 726        },
 727        {
 728                .name = "abx500-clk",
 729                .of_compatible = "stericsson,abx500-clk",
 730        },
 731        {
 732                .name = "ab8500-gpadc",
 733                .of_compatible = "stericsson,ab8500-gpadc",
 734        },
 735        {
 736                .name = "ab8500-rtc",
 737        },
 738        {
 739                .name = "ab8500-acc-det",
 740        },
 741        {
 742                .name = "ab8500-poweron-key",
 743        },
 744        {
 745                .name = "ab8500-pwm",
 746                .id = 1,
 747        },
 748        {
 749                .name = "abx500-temp",
 750        },
 751        {
 752                .name = "pinctrl-ab9540",
 753                .of_compatible = "stericsson,ab9540-gpio",
 754        },
 755        {
 756                .name = "ab9540-usb",
 757        },
 758        {
 759                .name = "ab9540-codec",
 760        },
 761        {
 762                .name = "ab-iddet",
 763        },
 764};
 765
 766/* Device list for ab8505  */
 767static const struct mfd_cell ab8505_devs[] = {
 768#ifdef CONFIG_DEBUG_FS
 769        {
 770                .name = "ab8500-debug",
 771        },
 772#endif
 773        {
 774                .name = "ab8500-sysctrl",
 775        },
 776        {
 777                .name = "ab8500-regulator",
 778        },
 779        {
 780                .name = "abx500-clk",
 781                .of_compatible = "stericsson,abx500-clk",
 782        },
 783        {
 784                .name = "ab8500-gpadc",
 785                .of_compatible = "stericsson,ab8500-gpadc",
 786        },
 787        {
 788                .name = "ab8500-rtc",
 789        },
 790        {
 791                .name = "ab8500-acc-det",
 792        },
 793        {
 794                .name = "ab8500-poweron-key",
 795        },
 796        {
 797                .name = "ab8500-pwm",
 798                .id = 1,
 799        },
 800        {
 801                .name = "pinctrl-ab8505",
 802        },
 803        {
 804                .name = "ab8500-usb",
 805        },
 806        {
 807                .name = "ab8500-codec",
 808        },
 809        {
 810                .name = "ab-iddet",
 811        },
 812};
 813
 814static const struct mfd_cell ab8540_devs[] = {
 815#ifdef CONFIG_DEBUG_FS
 816        {
 817                .name = "ab8500-debug",
 818        },
 819#endif
 820        {
 821                .name = "ab8500-sysctrl",
 822        },
 823        {
 824                .name = "ab8500-ext-regulator",
 825        },
 826        {
 827                .name = "ab8500-regulator",
 828        },
 829        {
 830                .name = "abx500-clk",
 831                .of_compatible = "stericsson,abx500-clk",
 832        },
 833        {
 834                .name = "ab8500-gpadc",
 835                .of_compatible = "stericsson,ab8500-gpadc",
 836        },
 837        {
 838                .name = "ab8500-acc-det",
 839        },
 840        {
 841                .name = "ab8500-poweron-key",
 842        },
 843        {
 844                .name = "ab8500-pwm",
 845                .id = 1,
 846        },
 847        {
 848                .name = "abx500-temp",
 849        },
 850        {
 851                .name = "pinctrl-ab8540",
 852        },
 853        {
 854                .name = "ab8540-usb",
 855        },
 856        {
 857                .name = "ab8540-codec",
 858        },
 859        {
 860                .name = "ab-iddet",
 861        },
 862};
 863
 864static const struct mfd_cell ab8540_cut1_devs[] = {
 865        {
 866                .name = "ab8500-rtc",
 867                .of_compatible = "stericsson,ab8500-rtc",
 868        },
 869};
 870
 871static const struct mfd_cell ab8540_cut2_devs[] = {
 872        {
 873                .name = "ab8540-rtc",
 874                .of_compatible = "stericsson,ab8540-rtc",
 875        },
 876};
 877
 878static ssize_t show_chip_id(struct device *dev,
 879                                struct device_attribute *attr, char *buf)
 880{
 881        struct ab8500 *ab8500;
 882
 883        ab8500 = dev_get_drvdata(dev);
 884
 885        return sprintf(buf, "%#x\n", ab8500 ? ab8500->chip_id : -EINVAL);
 886}
 887
 888/*
 889 * ab8500 has switched off due to (SWITCH_OFF_STATUS):
 890 * 0x01 Swoff bit programming
 891 * 0x02 Thermal protection activation
 892 * 0x04 Vbat lower then BattOk falling threshold
 893 * 0x08 Watchdog expired
 894 * 0x10 Non presence of 32kHz clock
 895 * 0x20 Battery level lower than power on reset threshold
 896 * 0x40 Power on key 1 pressed longer than 10 seconds
 897 * 0x80 DB8500 thermal shutdown
 898 */
 899static ssize_t show_switch_off_status(struct device *dev,
 900                                struct device_attribute *attr, char *buf)
 901{
 902        int ret;
 903        u8 value;
 904        struct ab8500 *ab8500;
 905
 906        ab8500 = dev_get_drvdata(dev);
 907        ret = get_register_interruptible(ab8500, AB8500_RTC,
 908                AB8500_SWITCH_OFF_STATUS, &value);
 909        if (ret < 0)
 910                return ret;
 911        return sprintf(buf, "%#x\n", value);
 912}
 913
 914/* use mask and set to override the register turn_on_stat value */
 915void ab8500_override_turn_on_stat(u8 mask, u8 set)
 916{
 917        spin_lock(&on_stat_lock);
 918        turn_on_stat_mask = mask;
 919        turn_on_stat_set = set;
 920        spin_unlock(&on_stat_lock);
 921}
 922
 923/*
 924 * ab8500 has turned on due to (TURN_ON_STATUS):
 925 * 0x01 PORnVbat
 926 * 0x02 PonKey1dbF
 927 * 0x04 PonKey2dbF
 928 * 0x08 RTCAlarm
 929 * 0x10 MainChDet
 930 * 0x20 VbusDet
 931 * 0x40 UsbIDDetect
 932 * 0x80 Reserved
 933 */
 934static ssize_t show_turn_on_status(struct device *dev,
 935                                struct device_attribute *attr, char *buf)
 936{
 937        int ret;
 938        u8 value;
 939        struct ab8500 *ab8500;
 940
 941        ab8500 = dev_get_drvdata(dev);
 942        ret = get_register_interruptible(ab8500, AB8500_SYS_CTRL1_BLOCK,
 943                AB8500_TURN_ON_STATUS, &value);
 944        if (ret < 0)
 945                return ret;
 946
 947        /*
 948         * In L9540, turn_on_status register is not updated correctly if
 949         * the device is rebooted with AC/USB charger connected. Due to
 950         * this, the device boots android instead of entering into charge
 951         * only mode. Read the AC/USB status register to detect the charger
 952         * presence and update the turn on status manually.
 953         */
 954        if (is_ab9540(ab8500)) {
 955                spin_lock(&on_stat_lock);
 956                value = (value & turn_on_stat_mask) | turn_on_stat_set;
 957                spin_unlock(&on_stat_lock);
 958        }
 959
 960        return sprintf(buf, "%#x\n", value);
 961}
 962
 963static ssize_t show_turn_on_status_2(struct device *dev,
 964                                struct device_attribute *attr, char *buf)
 965{
 966        int ret;
 967        u8 value;
 968        struct ab8500 *ab8500;
 969
 970        ab8500 = dev_get_drvdata(dev);
 971        ret = get_register_interruptible(ab8500, AB8500_SYS_CTRL1_BLOCK,
 972                AB8505_TURN_ON_STATUS_2, &value);
 973        if (ret < 0)
 974                return ret;
 975        return sprintf(buf, "%#x\n", (value & 0x1));
 976}
 977
 978static ssize_t show_ab9540_dbbrstn(struct device *dev,
 979                                struct device_attribute *attr, char *buf)
 980{
 981        struct ab8500 *ab8500;
 982        int ret;
 983        u8 value;
 984
 985        ab8500 = dev_get_drvdata(dev);
 986
 987        ret = get_register_interruptible(ab8500, AB8500_REGU_CTRL2,
 988                AB9540_MODEM_CTRL2_REG, &value);
 989        if (ret < 0)
 990                return ret;
 991
 992        return sprintf(buf, "%d\n",
 993                        (value & AB9540_MODEM_CTRL2_SWDBBRSTN_BIT) ? 1 : 0);
 994}
 995
 996static ssize_t store_ab9540_dbbrstn(struct device *dev,
 997        struct device_attribute *attr, const char *buf, size_t count)
 998{
 999        struct ab8500 *ab8500;
1000        int ret = count;
1001        int err;
1002        u8 bitvalues;
1003
1004        ab8500 = dev_get_drvdata(dev);
1005
1006        if (count > 0) {
1007                switch (buf[0]) {
1008                case '0':
1009                        bitvalues = 0;
1010                        break;
1011                case '1':
1012                        bitvalues = AB9540_MODEM_CTRL2_SWDBBRSTN_BIT;
1013                        break;
1014                default:
1015                        goto exit;
1016                }
1017
1018                err = mask_and_set_register_interruptible(ab8500,
1019                        AB8500_REGU_CTRL2, AB9540_MODEM_CTRL2_REG,
1020                        AB9540_MODEM_CTRL2_SWDBBRSTN_BIT, bitvalues);
1021                if (err)
1022                        dev_info(ab8500->dev,
1023                                "Failed to set DBBRSTN %c, err %#x\n",
1024                                buf[0], err);
1025        }
1026
1027exit:
1028        return ret;
1029}
1030
1031static DEVICE_ATTR(chip_id, S_IRUGO, show_chip_id, NULL);
1032static DEVICE_ATTR(switch_off_status, S_IRUGO, show_switch_off_status, NULL);
1033static DEVICE_ATTR(turn_on_status, S_IRUGO, show_turn_on_status, NULL);
1034static DEVICE_ATTR(turn_on_status_2, S_IRUGO, show_turn_on_status_2, NULL);
1035static DEVICE_ATTR(dbbrstn, S_IRUGO | S_IWUSR,
1036                        show_ab9540_dbbrstn, store_ab9540_dbbrstn);
1037
1038static struct attribute *ab8500_sysfs_entries[] = {
1039        &dev_attr_chip_id.attr,
1040        &dev_attr_switch_off_status.attr,
1041        &dev_attr_turn_on_status.attr,
1042        NULL,
1043};
1044
1045static struct attribute *ab8505_sysfs_entries[] = {
1046        &dev_attr_turn_on_status_2.attr,
1047        NULL,
1048};
1049
1050static struct attribute *ab9540_sysfs_entries[] = {
1051        &dev_attr_chip_id.attr,
1052        &dev_attr_switch_off_status.attr,
1053        &dev_attr_turn_on_status.attr,
1054        &dev_attr_dbbrstn.attr,
1055        NULL,
1056};
1057
1058static struct attribute_group ab8500_attr_group = {
1059        .attrs  = ab8500_sysfs_entries,
1060};
1061
1062static struct attribute_group ab8505_attr_group = {
1063        .attrs  = ab8505_sysfs_entries,
1064};
1065
1066static struct attribute_group ab9540_attr_group = {
1067        .attrs  = ab9540_sysfs_entries,
1068};
1069
1070static int ab8500_probe(struct platform_device *pdev)
1071{
1072        static const char * const switch_off_status[] = {
1073                "Swoff bit programming",
1074                "Thermal protection activation",
1075                "Vbat lower then BattOk falling threshold",
1076                "Watchdog expired",
1077                "Non presence of 32kHz clock",
1078                "Battery level lower than power on reset threshold",
1079                "Power on key 1 pressed longer than 10 seconds",
1080                "DB8500 thermal shutdown"};
1081        static const char * const turn_on_status[] = {
1082                "Battery rising (Vbat)",
1083                "Power On Key 1 dbF",
1084                "Power On Key 2 dbF",
1085                "RTC Alarm",
1086                "Main Charger Detect",
1087                "Vbus Detect (USB)",
1088                "USB ID Detect",
1089                "UART Factory Mode Detect"};
1090        const struct platform_device_id *platid = platform_get_device_id(pdev);
1091        enum ab8500_version version = AB8500_VERSION_UNDEFINED;
1092        struct device_node *np = pdev->dev.of_node;
1093        struct ab8500 *ab8500;
1094        struct resource *resource;
1095        int ret;
1096        int i;
1097        u8 value;
1098
1099        ab8500 = devm_kzalloc(&pdev->dev, sizeof(*ab8500), GFP_KERNEL);
1100        if (!ab8500)
1101                return -ENOMEM;
1102
1103        ab8500->dev = &pdev->dev;
1104
1105        resource = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1106        if (!resource) {
1107                dev_err(&pdev->dev, "no IRQ resource\n");
1108                return -ENODEV;
1109        }
1110
1111        ab8500->irq = resource->start;
1112
1113        ab8500->read = ab8500_prcmu_read;
1114        ab8500->write = ab8500_prcmu_write;
1115        ab8500->write_masked = ab8500_prcmu_write_masked;
1116
1117        mutex_init(&ab8500->lock);
1118        mutex_init(&ab8500->irq_lock);
1119        atomic_set(&ab8500->transfer_ongoing, 0);
1120
1121        platform_set_drvdata(pdev, ab8500);
1122
1123        if (platid)
1124                version = platid->driver_data;
1125
1126        if (version != AB8500_VERSION_UNDEFINED)
1127                ab8500->version = version;
1128        else {
1129                ret = get_register_interruptible(ab8500, AB8500_MISC,
1130                        AB8500_IC_NAME_REG, &value);
1131                if (ret < 0) {
1132                        dev_err(&pdev->dev, "could not probe HW\n");
1133                        return ret;
1134                }
1135
1136                ab8500->version = value;
1137        }
1138
1139        ret = get_register_interruptible(ab8500, AB8500_MISC,
1140                AB8500_REV_REG, &value);
1141        if (ret < 0)
1142                return ret;
1143
1144        ab8500->chip_id = value;
1145
1146        dev_info(ab8500->dev, "detected chip, %s rev. %1x.%1x\n",
1147                        ab8500_version_str[ab8500->version],
1148                        ab8500->chip_id >> 4,
1149                        ab8500->chip_id & 0x0F);
1150
1151        /* Configure AB8540 */
1152        if (is_ab8540(ab8500)) {
1153                ab8500->mask_size = AB8540_NUM_IRQ_REGS;
1154                ab8500->irq_reg_offset = ab8540_irq_regoffset;
1155                ab8500->it_latchhier_num = AB8540_IT_LATCHHIER_NUM;
1156        } /* Configure AB8500 or AB9540 IRQ */
1157        else if (is_ab9540(ab8500) || is_ab8505(ab8500)) {
1158                ab8500->mask_size = AB9540_NUM_IRQ_REGS;
1159                ab8500->irq_reg_offset = ab9540_irq_regoffset;
1160                ab8500->it_latchhier_num = AB8500_IT_LATCHHIER_NUM;
1161        } else {
1162                ab8500->mask_size = AB8500_NUM_IRQ_REGS;
1163                ab8500->irq_reg_offset = ab8500_irq_regoffset;
1164                ab8500->it_latchhier_num = AB8500_IT_LATCHHIER_NUM;
1165        }
1166        ab8500->mask = devm_kzalloc(&pdev->dev, ab8500->mask_size,
1167                                    GFP_KERNEL);
1168        if (!ab8500->mask)
1169                return -ENOMEM;
1170        ab8500->oldmask = devm_kzalloc(&pdev->dev, ab8500->mask_size,
1171                                       GFP_KERNEL);
1172        if (!ab8500->oldmask)
1173                return -ENOMEM;
1174
1175        /*
1176         * ab8500 has switched off due to (SWITCH_OFF_STATUS):
1177         * 0x01 Swoff bit programming
1178         * 0x02 Thermal protection activation
1179         * 0x04 Vbat lower then BattOk falling threshold
1180         * 0x08 Watchdog expired
1181         * 0x10 Non presence of 32kHz clock
1182         * 0x20 Battery level lower than power on reset threshold
1183         * 0x40 Power on key 1 pressed longer than 10 seconds
1184         * 0x80 DB8500 thermal shutdown
1185         */
1186
1187        ret = get_register_interruptible(ab8500, AB8500_RTC,
1188                AB8500_SWITCH_OFF_STATUS, &value);
1189        if (ret < 0)
1190                return ret;
1191        dev_info(ab8500->dev, "switch off cause(s) (%#x): ", value);
1192
1193        if (value) {
1194                for (i = 0; i < ARRAY_SIZE(switch_off_status); i++) {
1195                        if (value & 1)
1196                                pr_cont(" \"%s\"", switch_off_status[i]);
1197                        value = value >> 1;
1198
1199                }
1200                pr_cont("\n");
1201        } else {
1202                pr_cont(" None\n");
1203        }
1204        ret = get_register_interruptible(ab8500, AB8500_SYS_CTRL1_BLOCK,
1205                AB8500_TURN_ON_STATUS, &value);
1206        if (ret < 0)
1207                return ret;
1208        dev_info(ab8500->dev, "turn on reason(s) (%#x): ", value);
1209
1210        if (value) {
1211                for (i = 0; i < ARRAY_SIZE(turn_on_status); i++) {
1212                        if (value & 1)
1213                                pr_cont("\"%s\" ", turn_on_status[i]);
1214                        value = value >> 1;
1215                }
1216                pr_cont("\n");
1217        } else {
1218                pr_cont("None\n");
1219        }
1220
1221        if (is_ab9540(ab8500)) {
1222                ret = get_register_interruptible(ab8500, AB8500_CHARGER,
1223                        AB8500_CH_USBCH_STAT1_REG, &value);
1224                if (ret < 0)
1225                        return ret;
1226                if ((value & VBUS_DET_DBNC1) && (value & VBUS_DET_DBNC100))
1227                        ab8500_override_turn_on_stat(~AB8500_POW_KEY_1_ON,
1228                                                     AB8500_VBUS_DET);
1229        }
1230
1231        /* Clear and mask all interrupts */
1232        for (i = 0; i < ab8500->mask_size; i++) {
1233                /*
1234                 * Interrupt register 12 doesn't exist prior to AB8500 version
1235                 * 2.0
1236                 */
1237                if (ab8500->irq_reg_offset[i] == 11 &&
1238                                is_ab8500_1p1_or_earlier(ab8500))
1239                        continue;
1240
1241                if (ab8500->irq_reg_offset[i] < 0)
1242                        continue;
1243
1244                get_register_interruptible(ab8500, AB8500_INTERRUPT,
1245                        AB8500_IT_LATCH1_REG + ab8500->irq_reg_offset[i],
1246                        &value);
1247                set_register_interruptible(ab8500, AB8500_INTERRUPT,
1248                        AB8500_IT_MASK1_REG + ab8500->irq_reg_offset[i], 0xff);
1249        }
1250
1251        ret = abx500_register_ops(ab8500->dev, &ab8500_ops);
1252        if (ret)
1253                return ret;
1254
1255        for (i = 0; i < ab8500->mask_size; i++)
1256                ab8500->mask[i] = ab8500->oldmask[i] = 0xff;
1257
1258        ret = ab8500_irq_init(ab8500, np);
1259        if (ret)
1260                return ret;
1261
1262        ret = devm_request_threaded_irq(&pdev->dev, ab8500->irq, NULL,
1263                        ab8500_hierarchical_irq,
1264                        IRQF_ONESHOT | IRQF_NO_SUSPEND,
1265                        "ab8500", ab8500);
1266        if (ret)
1267                return ret;
1268
1269        if (is_ab9540(ab8500))
1270                ret = mfd_add_devices(ab8500->dev, 0, ab9540_devs,
1271                                ARRAY_SIZE(ab9540_devs), NULL,
1272                                0, ab8500->domain);
1273        else if (is_ab8540(ab8500)) {
1274                ret = mfd_add_devices(ab8500->dev, 0, ab8540_devs,
1275                              ARRAY_SIZE(ab8540_devs), NULL,
1276                              0, ab8500->domain);
1277                if (ret)
1278                        return ret;
1279
1280                if (is_ab8540_1p2_or_earlier(ab8500))
1281                        ret = mfd_add_devices(ab8500->dev, 0, ab8540_cut1_devs,
1282                              ARRAY_SIZE(ab8540_cut1_devs), NULL,
1283                              0, ab8500->domain);
1284                else /* ab8540 >= cut2 */
1285                        ret = mfd_add_devices(ab8500->dev, 0, ab8540_cut2_devs,
1286                              ARRAY_SIZE(ab8540_cut2_devs), NULL,
1287                              0, ab8500->domain);
1288        } else if (is_ab8505(ab8500))
1289                ret = mfd_add_devices(ab8500->dev, 0, ab8505_devs,
1290                              ARRAY_SIZE(ab8505_devs), NULL,
1291                              0, ab8500->domain);
1292        else
1293                ret = mfd_add_devices(ab8500->dev, 0, ab8500_devs,
1294                                ARRAY_SIZE(ab8500_devs), NULL,
1295                                0, ab8500->domain);
1296        if (ret)
1297                return ret;
1298
1299        if (!no_bm) {
1300                /* Add battery management devices */
1301                ret = mfd_add_devices(ab8500->dev, 0, ab8500_bm_devs,
1302                                      ARRAY_SIZE(ab8500_bm_devs), NULL,
1303                                      0, ab8500->domain);
1304                if (ret)
1305                        dev_err(ab8500->dev, "error adding bm devices\n");
1306        }
1307
1308        if (((is_ab8505(ab8500) || is_ab9540(ab8500)) &&
1309                        ab8500->chip_id >= AB8500_CUT2P0) || is_ab8540(ab8500))
1310                ret = sysfs_create_group(&ab8500->dev->kobj,
1311                                        &ab9540_attr_group);
1312        else
1313                ret = sysfs_create_group(&ab8500->dev->kobj,
1314                                        &ab8500_attr_group);
1315
1316        if ((is_ab8505(ab8500) || is_ab9540(ab8500)) &&
1317                        ab8500->chip_id >= AB8500_CUT2P0)
1318                ret = sysfs_create_group(&ab8500->dev->kobj,
1319                                         &ab8505_attr_group);
1320
1321        if (ret)
1322                dev_err(ab8500->dev, "error creating sysfs entries\n");
1323
1324        return ret;
1325}
1326
1327static int ab8500_remove(struct platform_device *pdev)
1328{
1329        struct ab8500 *ab8500 = platform_get_drvdata(pdev);
1330
1331        if (((is_ab8505(ab8500) || is_ab9540(ab8500)) &&
1332                        ab8500->chip_id >= AB8500_CUT2P0) || is_ab8540(ab8500))
1333                sysfs_remove_group(&ab8500->dev->kobj, &ab9540_attr_group);
1334        else
1335                sysfs_remove_group(&ab8500->dev->kobj, &ab8500_attr_group);
1336
1337        if ((is_ab8505(ab8500) || is_ab9540(ab8500)) &&
1338                        ab8500->chip_id >= AB8500_CUT2P0)
1339                sysfs_remove_group(&ab8500->dev->kobj, &ab8505_attr_group);
1340
1341        mfd_remove_devices(ab8500->dev);
1342
1343        return 0;
1344}
1345
1346static const struct platform_device_id ab8500_id[] = {
1347        { "ab8500-core", AB8500_VERSION_AB8500 },
1348        { "ab8505-i2c", AB8500_VERSION_AB8505 },
1349        { "ab9540-i2c", AB8500_VERSION_AB9540 },
1350        { "ab8540-i2c", AB8500_VERSION_AB8540 },
1351        { }
1352};
1353
1354static struct platform_driver ab8500_core_driver = {
1355        .driver = {
1356                .name = "ab8500-core",
1357        },
1358        .probe  = ab8500_probe,
1359        .remove = ab8500_remove,
1360        .id_table = ab8500_id,
1361};
1362
1363static int __init ab8500_core_init(void)
1364{
1365        return platform_driver_register(&ab8500_core_driver);
1366}
1367
1368static void __exit ab8500_core_exit(void)
1369{
1370        platform_driver_unregister(&ab8500_core_driver);
1371}
1372core_initcall(ab8500_core_init);
1373module_exit(ab8500_core_exit);
1374
1375MODULE_AUTHOR("Mattias Wallin, Srinidhi Kasagar, Rabin Vincent");
1376MODULE_DESCRIPTION("AB8500 MFD core");
1377MODULE_LICENSE("GPL v2");
1378