linux/drivers/mfd/ab3550-core.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2007-2010 ST-Ericsson
   3 * License terms: GNU General Public License (GPL) version 2
   4 * Low-level core for exclusive access to the AB3550 IC on the I2C bus
   5 * and some basic chip-configuration.
   6 * Author: Bengt Jonsson <bengt.g.jonsson@stericsson.com>
   7 * Author: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
   8 * Author: Mattias Wallin <mattias.wallin@stericsson.com>
   9 * Author: Rickard Andersson <rickard.andersson@stericsson.com>
  10 */
  11
  12#include <linux/i2c.h>
  13#include <linux/mutex.h>
  14#include <linux/err.h>
  15#include <linux/platform_device.h>
  16#include <linux/slab.h>
  17#include <linux/device.h>
  18#include <linux/irq.h>
  19#include <linux/interrupt.h>
  20#include <linux/random.h>
  21#include <linux/workqueue.h>
  22#include <linux/debugfs.h>
  23#include <linux/seq_file.h>
  24#include <linux/uaccess.h>
  25#include <linux/mfd/abx500.h>
  26#include <linux/list.h>
  27#include <linux/bitops.h>
  28#include <linux/spinlock.h>
  29#include <linux/mfd/core.h>
  30
  31#define AB3550_NAME_STRING "ab3550"
  32#define AB3550_ID_FORMAT_STRING "AB3550 %s"
  33#define AB3550_NUM_BANKS 2
  34#define AB3550_NUM_EVENT_REG 5
  35
  36/* These are the only registers inside AB3550 used in this main file */
  37
  38/* Chip ID register */
  39#define AB3550_CID_REG           0x20
  40
  41/* Interrupt event registers */
  42#define AB3550_EVENT_BANK        0
  43#define AB3550_EVENT_REG         0x22
  44
  45/* Read/write operation values. */
  46#define AB3550_PERM_RD (0x01)
  47#define AB3550_PERM_WR (0x02)
  48
  49/* Read/write permissions. */
  50#define AB3550_PERM_RO (AB3550_PERM_RD)
  51#define AB3550_PERM_RW (AB3550_PERM_RD | AB3550_PERM_WR)
  52
  53/**
  54 * struct ab3550
  55 * @access_mutex: lock out concurrent accesses to the AB registers
  56 * @i2c_client: I2C client for this chip
  57 * @chip_name: name of this chip variant
  58 * @chip_id: 8 bit chip ID for this chip variant
  59 * @mask_work: a worker for writing to mask registers
  60 * @event_lock: a lock to protect the event_mask
  61 * @event_mask: a local copy of the mask event registers
  62 * @startup_events: a copy of the first reading of the event registers
  63 * @startup_events_read: whether the first events have been read
  64 */
  65struct ab3550 {
  66        struct mutex access_mutex;
  67        struct i2c_client *i2c_client[AB3550_NUM_BANKS];
  68        char chip_name[32];
  69        u8 chip_id;
  70        struct work_struct mask_work;
  71        spinlock_t event_lock;
  72        u8 event_mask[AB3550_NUM_EVENT_REG];
  73        u8 startup_events[AB3550_NUM_EVENT_REG];
  74        bool startup_events_read;
  75#ifdef CONFIG_DEBUG_FS
  76        unsigned int debug_bank;
  77        unsigned int debug_address;
  78#endif
  79};
  80
  81/**
  82 * struct ab3550_reg_range
  83 * @first: the first address of the range
  84 * @last: the last address of the range
  85 * @perm: access permissions for the range
  86 */
  87struct ab3550_reg_range {
  88        u8 first;
  89        u8 last;
  90        u8 perm;
  91};
  92
  93/**
  94 * struct ab3550_reg_ranges
  95 * @count: the number of ranges in the list
  96 * @range: the list of register ranges
  97 */
  98struct ab3550_reg_ranges {
  99        u8 count;
 100        const struct ab3550_reg_range *range;
 101};
 102
 103/*
 104 * Permissible register ranges for reading and writing per device and bank.
 105 *
 106 * The ranges must be listed in increasing address order, and no overlaps are
 107 * allowed. It is assumed that write permission implies read permission
 108 * (i.e. only RO and RW permissions should be used).  Ranges with write
 109 * permission must not be split up.
 110 */
 111
 112#define NO_RANGE {.count = 0, .range = NULL,}
 113
 114static struct
 115ab3550_reg_ranges ab3550_reg_ranges[AB3550_NUM_DEVICES][AB3550_NUM_BANKS] = {
 116        [AB3550_DEVID_DAC] = {
 117                NO_RANGE,
 118                {
 119                        .count = 2,
 120                        .range = (struct ab3550_reg_range[]) {
 121                                {
 122                                        .first = 0xb0,
 123                                        .last = 0xba,
 124                                        .perm = AB3550_PERM_RW,
 125                                },
 126                                {
 127                                        .first = 0xbc,
 128                                        .last = 0xc3,
 129                                        .perm = AB3550_PERM_RW,
 130                                },
 131                        },
 132                },
 133        },
 134        [AB3550_DEVID_LEDS] = {
 135                NO_RANGE,
 136                {
 137                        .count = 2,
 138                        .range = (struct ab3550_reg_range[]) {
 139                                {
 140                                        .first = 0x5a,
 141                                        .last = 0x88,
 142                                        .perm = AB3550_PERM_RW,
 143                                },
 144                                {
 145                                        .first = 0x8a,
 146                                        .last = 0xad,
 147                                        .perm = AB3550_PERM_RW,
 148                                },
 149                        }
 150                },
 151        },
 152        [AB3550_DEVID_POWER] = {
 153                {
 154                        .count = 1,
 155                        .range = (struct ab3550_reg_range[]) {
 156                                {
 157                                        .first = 0x21,
 158                                        .last = 0x21,
 159                                        .perm = AB3550_PERM_RO,
 160                                },
 161                        }
 162                },
 163                NO_RANGE,
 164        },
 165        [AB3550_DEVID_REGULATORS] = {
 166                {
 167                        .count = 1,
 168                        .range = (struct ab3550_reg_range[]) {
 169                                {
 170                                        .first = 0x69,
 171                                        .last = 0xa3,
 172                                        .perm = AB3550_PERM_RW,
 173                                },
 174                        }
 175                },
 176                {
 177                        .count = 1,
 178                        .range = (struct ab3550_reg_range[]) {
 179                                {
 180                                        .first = 0x14,
 181                                        .last = 0x16,
 182                                        .perm = AB3550_PERM_RW,
 183                                },
 184                        }
 185                },
 186        },
 187        [AB3550_DEVID_SIM] = {
 188                {
 189                        .count = 1,
 190                        .range = (struct ab3550_reg_range[]) {
 191                                {
 192                                        .first = 0x21,
 193                                        .last = 0x21,
 194                                        .perm = AB3550_PERM_RO,
 195                                },
 196                        }
 197                },
 198                {
 199                        .count = 1,
 200                        .range = (struct ab3550_reg_range[]) {
 201                                {
 202                                        .first = 0x14,
 203                                        .last = 0x17,
 204                                        .perm = AB3550_PERM_RW,
 205                                },
 206                        }
 207
 208                },
 209        },
 210        [AB3550_DEVID_UART] = {
 211                NO_RANGE,
 212                NO_RANGE,
 213        },
 214        [AB3550_DEVID_RTC] = {
 215                {
 216                        .count = 1,
 217                        .range = (struct ab3550_reg_range[]) {
 218                                {
 219                                        .first = 0x00,
 220                                        .last = 0x0c,
 221                                        .perm = AB3550_PERM_RW,
 222                                },
 223                        }
 224                },
 225                NO_RANGE,
 226        },
 227        [AB3550_DEVID_CHARGER] = {
 228                {
 229                        .count = 2,
 230                        .range = (struct ab3550_reg_range[]) {
 231                                {
 232                                        .first = 0x10,
 233                                        .last = 0x1a,
 234                                        .perm = AB3550_PERM_RW,
 235                                },
 236                                {
 237                                        .first = 0x21,
 238                                        .last = 0x21,
 239                                        .perm = AB3550_PERM_RO,
 240                                },
 241                        }
 242                },
 243                NO_RANGE,
 244        },
 245        [AB3550_DEVID_ADC] = {
 246                NO_RANGE,
 247                {
 248                        .count = 1,
 249                        .range = (struct ab3550_reg_range[]) {
 250                                {
 251                                        .first = 0x20,
 252                                        .last = 0x56,
 253                                        .perm = AB3550_PERM_RW,
 254                                },
 255
 256                        }
 257                },
 258        },
 259        [AB3550_DEVID_FUELGAUGE] = {
 260                {
 261                        .count = 1,
 262                        .range = (struct ab3550_reg_range[]) {
 263                                {
 264                                        .first = 0x21,
 265                                        .last = 0x21,
 266                                        .perm = AB3550_PERM_RO,
 267                                },
 268                        }
 269                },
 270                {
 271                        .count = 1,
 272                        .range = (struct ab3550_reg_range[]) {
 273                                {
 274                                        .first = 0x00,
 275                                        .last = 0x0e,
 276                                        .perm = AB3550_PERM_RW,
 277                                },
 278                        }
 279                },
 280        },
 281        [AB3550_DEVID_VIBRATOR] = {
 282                NO_RANGE,
 283                {
 284                        .count = 1,
 285                        .range = (struct ab3550_reg_range[]) {
 286                                {
 287                                        .first = 0x10,
 288                                        .last = 0x13,
 289                                        .perm = AB3550_PERM_RW,
 290                                },
 291
 292                        }
 293                },
 294        },
 295        [AB3550_DEVID_CODEC] = {
 296                {
 297                        .count = 2,
 298                        .range = (struct ab3550_reg_range[]) {
 299                                {
 300                                        .first = 0x31,
 301                                        .last = 0x63,
 302                                        .perm = AB3550_PERM_RW,
 303                                },
 304                                {
 305                                        .first = 0x65,
 306                                        .last = 0x68,
 307                                        .perm = AB3550_PERM_RW,
 308                                },
 309                        }
 310                },
 311                NO_RANGE,
 312        },
 313};
 314
 315static struct mfd_cell ab3550_devs[AB3550_NUM_DEVICES] = {
 316        [AB3550_DEVID_DAC] = {
 317                .name = "ab3550-dac",
 318                .id = AB3550_DEVID_DAC,
 319                .num_resources = 0,
 320        },
 321        [AB3550_DEVID_LEDS] = {
 322                .name = "ab3550-leds",
 323                .id = AB3550_DEVID_LEDS,
 324        },
 325        [AB3550_DEVID_POWER] = {
 326                .name = "ab3550-power",
 327                .id = AB3550_DEVID_POWER,
 328        },
 329        [AB3550_DEVID_REGULATORS] = {
 330                .name = "ab3550-regulators",
 331                .id = AB3550_DEVID_REGULATORS,
 332        },
 333        [AB3550_DEVID_SIM] = {
 334                .name = "ab3550-sim",
 335                .id = AB3550_DEVID_SIM,
 336        },
 337        [AB3550_DEVID_UART] = {
 338                .name = "ab3550-uart",
 339                .id = AB3550_DEVID_UART,
 340        },
 341        [AB3550_DEVID_RTC] = {
 342                .name = "ab3550-rtc",
 343                .id = AB3550_DEVID_RTC,
 344        },
 345        [AB3550_DEVID_CHARGER] = {
 346                .name = "ab3550-charger",
 347                .id = AB3550_DEVID_CHARGER,
 348        },
 349        [AB3550_DEVID_ADC] = {
 350                .name = "ab3550-adc",
 351                .id = AB3550_DEVID_ADC,
 352                .num_resources = 10,
 353                .resources = (struct resource[]) {
 354                        {
 355                                .name = "TRIGGER-0",
 356                                .flags = IORESOURCE_IRQ,
 357                                .start = 16,
 358                                .end = 16,
 359                        },
 360                        {
 361                                .name = "TRIGGER-1",
 362                                .flags = IORESOURCE_IRQ,
 363                                .start = 17,
 364                                .end = 17,
 365                        },
 366                        {
 367                                .name = "TRIGGER-2",
 368                                .flags = IORESOURCE_IRQ,
 369                                .start = 18,
 370                                .end = 18,
 371                        },
 372                        {
 373                                .name = "TRIGGER-3",
 374                                .flags = IORESOURCE_IRQ,
 375                                .start = 19,
 376                                .end = 19,
 377                        },
 378                        {
 379                                .name = "TRIGGER-4",
 380                                .flags = IORESOURCE_IRQ,
 381                                .start = 20,
 382                                .end = 20,
 383                        },
 384                        {
 385                                .name = "TRIGGER-5",
 386                                .flags = IORESOURCE_IRQ,
 387                                .start = 21,
 388                                .end = 21,
 389                        },
 390                        {
 391                                .name = "TRIGGER-6",
 392                                .flags = IORESOURCE_IRQ,
 393                                .start = 22,
 394                                .end = 22,
 395                        },
 396                        {
 397                                .name = "TRIGGER-7",
 398                                .flags = IORESOURCE_IRQ,
 399                                .start = 23,
 400                                .end = 23,
 401                        },
 402                        {
 403                                .name = "TRIGGER-VBAT-TXON",
 404                                .flags = IORESOURCE_IRQ,
 405                                .start = 13,
 406                                .end = 13,
 407                        },
 408                        {
 409                                .name = "TRIGGER-VBAT",
 410                                .flags = IORESOURCE_IRQ,
 411                                .start = 12,
 412                                .end = 12,
 413                        },
 414                },
 415        },
 416        [AB3550_DEVID_FUELGAUGE] = {
 417                .name = "ab3550-fuelgauge",
 418                .id = AB3550_DEVID_FUELGAUGE,
 419        },
 420        [AB3550_DEVID_VIBRATOR] = {
 421                .name = "ab3550-vibrator",
 422                .id = AB3550_DEVID_VIBRATOR,
 423        },
 424        [AB3550_DEVID_CODEC] = {
 425                .name = "ab3550-codec",
 426                .id = AB3550_DEVID_CODEC,
 427        },
 428};
 429
 430/*
 431 * I2C transactions with error messages.
 432 */
 433static int ab3550_i2c_master_send(struct ab3550 *ab, u8 bank, u8 *data,
 434        u8 count)
 435{
 436        int err;
 437
 438        err = i2c_master_send(ab->i2c_client[bank], data, count);
 439        if (err < 0) {
 440                dev_err(&ab->i2c_client[0]->dev, "send error: %d\n", err);
 441                return err;
 442        }
 443        return 0;
 444}
 445
 446static int ab3550_i2c_master_recv(struct ab3550 *ab, u8 bank, u8 *data,
 447        u8 count)
 448{
 449        int err;
 450
 451        err = i2c_master_recv(ab->i2c_client[bank], data, count);
 452        if (err < 0) {
 453                dev_err(&ab->i2c_client[0]->dev, "receive error: %d\n", err);
 454                return err;
 455        }
 456        return 0;
 457}
 458
 459/*
 460 * Functionality for getting/setting register values.
 461 */
 462static int get_register_interruptible(struct ab3550 *ab, u8 bank, u8 reg,
 463        u8 *value)
 464{
 465        int err;
 466
 467        err = mutex_lock_interruptible(&ab->access_mutex);
 468        if (err)
 469                return err;
 470
 471        err = ab3550_i2c_master_send(ab, bank, &reg, 1);
 472        if (!err)
 473                err = ab3550_i2c_master_recv(ab, bank, value, 1);
 474
 475        mutex_unlock(&ab->access_mutex);
 476        return err;
 477}
 478
 479static int get_register_page_interruptible(struct ab3550 *ab, u8 bank,
 480        u8 first_reg, u8 *regvals, u8 numregs)
 481{
 482        int err;
 483
 484        err = mutex_lock_interruptible(&ab->access_mutex);
 485        if (err)
 486                return err;
 487
 488        err = ab3550_i2c_master_send(ab, bank, &first_reg, 1);
 489        if (!err)
 490                err = ab3550_i2c_master_recv(ab, bank, regvals, numregs);
 491
 492        mutex_unlock(&ab->access_mutex);
 493        return err;
 494}
 495
 496static int mask_and_set_register_interruptible(struct ab3550 *ab, u8 bank,
 497        u8 reg, u8 bitmask, u8 bitvalues)
 498{
 499        int err = 0;
 500
 501        if (likely(bitmask)) {
 502                u8 reg_bits[2] = {reg, 0};
 503
 504                err = mutex_lock_interruptible(&ab->access_mutex);
 505                if (err)
 506                        return err;
 507
 508                if (bitmask == 0xFF) /* No need to read in this case. */
 509                        reg_bits[1] = bitvalues;
 510                else { /* Read and modify the register value. */
 511                        u8 bits;
 512
 513                        err = ab3550_i2c_master_send(ab, bank, &reg, 1);
 514                        if (err)
 515                                goto unlock_and_return;
 516                        err = ab3550_i2c_master_recv(ab, bank, &bits, 1);
 517                        if (err)
 518                                goto unlock_and_return;
 519                        reg_bits[1] = ((~bitmask & bits) |
 520                                (bitmask & bitvalues));
 521                }
 522                /* Write the new value. */
 523                err = ab3550_i2c_master_send(ab, bank, reg_bits, 2);
 524unlock_and_return:
 525                mutex_unlock(&ab->access_mutex);
 526        }
 527        return err;
 528}
 529
 530/*
 531 * Read/write permission checking functions.
 532 */
 533static bool page_write_allowed(const struct ab3550_reg_ranges *ranges,
 534        u8 first_reg, u8 last_reg)
 535{
 536        u8 i;
 537
 538        if (last_reg < first_reg)
 539                return false;
 540
 541        for (i = 0; i < ranges->count; i++) {
 542                if (first_reg < ranges->range[i].first)
 543                        break;
 544                if ((last_reg <= ranges->range[i].last) &&
 545                        (ranges->range[i].perm & AB3550_PERM_WR))
 546                        return true;
 547        }
 548        return false;
 549}
 550
 551static bool reg_write_allowed(const struct ab3550_reg_ranges *ranges, u8 reg)
 552{
 553        return page_write_allowed(ranges, reg, reg);
 554}
 555
 556static bool page_read_allowed(const struct ab3550_reg_ranges *ranges,
 557        u8 first_reg, u8 last_reg)
 558{
 559        u8 i;
 560
 561        if (last_reg < first_reg)
 562                return false;
 563        /* Find the range (if it exists in the list) that includes first_reg. */
 564        for (i = 0; i < ranges->count; i++) {
 565                if (first_reg < ranges->range[i].first)
 566                        return false;
 567                if (first_reg <= ranges->range[i].last)
 568                        break;
 569        }
 570        /* Make sure that the entire range up to and including last_reg is
 571         * readable. This may span several of the ranges in the list.
 572         */
 573        while ((i < ranges->count) &&
 574                (ranges->range[i].perm & AB3550_PERM_RD)) {
 575                if (last_reg <= ranges->range[i].last)
 576                        return true;
 577                if ((++i >= ranges->count) ||
 578                        (ranges->range[i].first !=
 579                         (ranges->range[i - 1].last + 1))) {
 580                        break;
 581                }
 582        }
 583        return false;
 584}
 585
 586static bool reg_read_allowed(const struct ab3550_reg_ranges *ranges, u8 reg)
 587{
 588        return page_read_allowed(ranges, reg, reg);
 589}
 590
 591/*
 592 * The register access functionality.
 593 */
 594static int ab3550_get_chip_id(struct device *dev)
 595{
 596        struct ab3550 *ab = dev_get_drvdata(dev->parent);
 597        return (int)ab->chip_id;
 598}
 599
 600static int ab3550_mask_and_set_register_interruptible(struct device *dev,
 601        u8 bank, u8 reg, u8 bitmask, u8 bitvalues)
 602{
 603        struct ab3550 *ab;
 604        struct platform_device *pdev = to_platform_device(dev);
 605
 606        if ((AB3550_NUM_BANKS <= bank) ||
 607                !reg_write_allowed(&ab3550_reg_ranges[pdev->id][bank], reg))
 608                return -EINVAL;
 609
 610        ab = dev_get_drvdata(dev->parent);
 611        return mask_and_set_register_interruptible(ab, bank, reg,
 612                bitmask, bitvalues);
 613}
 614
 615static int ab3550_set_register_interruptible(struct device *dev, u8 bank,
 616        u8 reg, u8 value)
 617{
 618        return ab3550_mask_and_set_register_interruptible(dev, bank, reg, 0xFF,
 619                value);
 620}
 621
 622static int ab3550_get_register_interruptible(struct device *dev, u8 bank,
 623        u8 reg, u8 *value)
 624{
 625        struct ab3550 *ab;
 626        struct platform_device *pdev = to_platform_device(dev);
 627
 628        if ((AB3550_NUM_BANKS <= bank) ||
 629                !reg_read_allowed(&ab3550_reg_ranges[pdev->id][bank], reg))
 630                return -EINVAL;
 631
 632        ab = dev_get_drvdata(dev->parent);
 633        return get_register_interruptible(ab, bank, reg, value);
 634}
 635
 636static int ab3550_get_register_page_interruptible(struct device *dev, u8 bank,
 637        u8 first_reg, u8 *regvals, u8 numregs)
 638{
 639        struct ab3550 *ab;
 640        struct platform_device *pdev = to_platform_device(dev);
 641
 642        if ((AB3550_NUM_BANKS <= bank) ||
 643                !page_read_allowed(&ab3550_reg_ranges[pdev->id][bank],
 644                        first_reg, (first_reg + numregs - 1)))
 645                return -EINVAL;
 646
 647        ab = dev_get_drvdata(dev->parent);
 648        return get_register_page_interruptible(ab, bank, first_reg, regvals,
 649                numregs);
 650}
 651
 652static int ab3550_event_registers_startup_state_get(struct device *dev,
 653        u8 *event)
 654{
 655        struct ab3550 *ab;
 656
 657        ab = dev_get_drvdata(dev->parent);
 658        if (!ab->startup_events_read)
 659                return -EAGAIN; /* Try again later */
 660
 661        memcpy(event, ab->startup_events, AB3550_NUM_EVENT_REG);
 662        return 0;
 663}
 664
 665static int ab3550_startup_irq_enabled(struct device *dev, unsigned int irq)
 666{
 667        struct ab3550 *ab;
 668        struct ab3550_platform_data *plf_data;
 669        bool val;
 670
 671        ab = irq_get_chip_data(irq);
 672        plf_data = ab->i2c_client[0]->dev.platform_data;
 673        irq -= plf_data->irq.base;
 674        val = ((ab->startup_events[irq / 8] & BIT(irq % 8)) != 0);
 675
 676        return val;
 677}
 678
 679static struct abx500_ops ab3550_ops = {
 680        .get_chip_id = ab3550_get_chip_id,
 681        .get_register = ab3550_get_register_interruptible,
 682        .set_register = ab3550_set_register_interruptible,
 683        .get_register_page = ab3550_get_register_page_interruptible,
 684        .set_register_page = NULL,
 685        .mask_and_set_register = ab3550_mask_and_set_register_interruptible,
 686        .event_registers_startup_state_get =
 687                ab3550_event_registers_startup_state_get,
 688        .startup_irq_enabled = ab3550_startup_irq_enabled,
 689};
 690
 691static irqreturn_t ab3550_irq_handler(int irq, void *data)
 692{
 693        struct ab3550 *ab = data;
 694        int err;
 695        unsigned int i;
 696        u8 e[AB3550_NUM_EVENT_REG];
 697        u8 *events;
 698        unsigned long flags;
 699
 700        events = (ab->startup_events_read ? e : ab->startup_events);
 701
 702        err = get_register_page_interruptible(ab, AB3550_EVENT_BANK,
 703                AB3550_EVENT_REG, events, AB3550_NUM_EVENT_REG);
 704        if (err)
 705                goto err_event_rd;
 706
 707        if (!ab->startup_events_read) {
 708                dev_info(&ab->i2c_client[0]->dev,
 709                        "startup events 0x%x,0x%x,0x%x,0x%x,0x%x\n",
 710                        ab->startup_events[0], ab->startup_events[1],
 711                        ab->startup_events[2], ab->startup_events[3],
 712                        ab->startup_events[4]);
 713                ab->startup_events_read = true;
 714                goto out;
 715        }
 716
 717        /* The two highest bits in event[4] are not used. */
 718        events[4] &= 0x3f;
 719
 720        spin_lock_irqsave(&ab->event_lock, flags);
 721        for (i = 0; i < AB3550_NUM_EVENT_REG; i++)
 722                events[i] &= ~ab->event_mask[i];
 723        spin_unlock_irqrestore(&ab->event_lock, flags);
 724
 725        for (i = 0; i < AB3550_NUM_EVENT_REG; i++) {
 726                u8 bit;
 727                u8 event_reg;
 728
 729                dev_dbg(&ab->i2c_client[0]->dev, "IRQ Event[%d]: 0x%2x\n",
 730                        i, events[i]);
 731
 732                event_reg = events[i];
 733                for (bit = 0; event_reg; bit++, event_reg /= 2) {
 734                        if (event_reg % 2) {
 735                                unsigned int irq;
 736                                struct ab3550_platform_data *plf_data;
 737
 738                                plf_data = ab->i2c_client[0]->dev.platform_data;
 739                                irq = plf_data->irq.base + (i * 8) + bit;
 740                                handle_nested_irq(irq);
 741                        }
 742                }
 743        }
 744out:
 745        return IRQ_HANDLED;
 746
 747err_event_rd:
 748        dev_dbg(&ab->i2c_client[0]->dev, "error reading event registers\n");
 749        return IRQ_HANDLED;
 750}
 751
 752#ifdef CONFIG_DEBUG_FS
 753static struct ab3550_reg_ranges debug_ranges[AB3550_NUM_BANKS] = {
 754        {
 755                .count = 6,
 756                .range = (struct ab3550_reg_range[]) {
 757                        {
 758                                .first = 0x00,
 759                                .last = 0x0e,
 760                        },
 761                        {
 762                                .first = 0x10,
 763                                .last = 0x1a,
 764                        },
 765                        {
 766                                .first = 0x1e,
 767                                .last = 0x4f,
 768                        },
 769                        {
 770                                .first = 0x51,
 771                                .last = 0x63,
 772                        },
 773                        {
 774                                .first = 0x65,
 775                                .last = 0xa3,
 776                        },
 777                        {
 778                                .first = 0xa5,
 779                                .last = 0xa8,
 780                        },
 781                }
 782        },
 783        {
 784                .count = 8,
 785                .range = (struct ab3550_reg_range[]) {
 786                        {
 787                                .first = 0x00,
 788                                .last = 0x0e,
 789                        },
 790                        {
 791                                .first = 0x10,
 792                                .last = 0x17,
 793                        },
 794                        {
 795                                .first = 0x1a,
 796                                .last = 0x1c,
 797                        },
 798                        {
 799                                .first = 0x20,
 800                                .last = 0x56,
 801                        },
 802                        {
 803                                .first = 0x5a,
 804                                .last = 0x88,
 805                        },
 806                        {
 807                                .first = 0x8a,
 808                                .last = 0xad,
 809                        },
 810                        {
 811                                .first = 0xb0,
 812                                .last = 0xba,
 813                        },
 814                        {
 815                                .first = 0xbc,
 816                                .last = 0xc3,
 817                        },
 818                }
 819        },
 820};
 821
 822static int ab3550_registers_print(struct seq_file *s, void *p)
 823{
 824        struct ab3550 *ab = s->private;
 825        int bank;
 826
 827        seq_printf(s, AB3550_NAME_STRING " register values:\n");
 828
 829        for (bank = 0; bank < AB3550_NUM_BANKS; bank++) {
 830                unsigned int i;
 831
 832                seq_printf(s, " bank %d:\n", bank);
 833                for (i = 0; i < debug_ranges[bank].count; i++) {
 834                        u8 reg;
 835
 836                        for (reg = debug_ranges[bank].range[i].first;
 837                                reg <= debug_ranges[bank].range[i].last;
 838                                reg++) {
 839                                u8 value;
 840
 841                                get_register_interruptible(ab, bank, reg,
 842                                        &value);
 843                                seq_printf(s, "  [%d/0x%02X]: 0x%02X\n", bank,
 844                                        reg, value);
 845                        }
 846                }
 847        }
 848        return 0;
 849}
 850
 851static int ab3550_registers_open(struct inode *inode, struct file *file)
 852{
 853        return single_open(file, ab3550_registers_print, inode->i_private);
 854}
 855
 856static const struct file_operations ab3550_registers_fops = {
 857        .open = ab3550_registers_open,
 858        .read = seq_read,
 859        .llseek = seq_lseek,
 860        .release = single_release,
 861        .owner = THIS_MODULE,
 862};
 863
 864static int ab3550_bank_print(struct seq_file *s, void *p)
 865{
 866        struct ab3550 *ab = s->private;
 867
 868        seq_printf(s, "%d\n", ab->debug_bank);
 869        return 0;
 870}
 871
 872static int ab3550_bank_open(struct inode *inode, struct file *file)
 873{
 874        return single_open(file, ab3550_bank_print, inode->i_private);
 875}
 876
 877static ssize_t ab3550_bank_write(struct file *file,
 878        const char __user *user_buf,
 879        size_t count, loff_t *ppos)
 880{
 881        struct ab3550 *ab = ((struct seq_file *)(file->private_data))->private;
 882        unsigned long user_bank;
 883        int err;
 884
 885        /* Get userspace string and assure termination */
 886        err = kstrtoul_from_user(user_buf, count, 0, &user_bank);
 887        if (err)
 888                return err;
 889
 890        if (user_bank >= AB3550_NUM_BANKS) {
 891                dev_err(&ab->i2c_client[0]->dev,
 892                        "debugfs error input > number of banks\n");
 893                return -EINVAL;
 894        }
 895
 896        ab->debug_bank = user_bank;
 897
 898        return count;
 899}
 900
 901static int ab3550_address_print(struct seq_file *s, void *p)
 902{
 903        struct ab3550 *ab = s->private;
 904
 905        seq_printf(s, "0x%02X\n", ab->debug_address);
 906        return 0;
 907}
 908
 909static int ab3550_address_open(struct inode *inode, struct file *file)
 910{
 911        return single_open(file, ab3550_address_print, inode->i_private);
 912}
 913
 914static ssize_t ab3550_address_write(struct file *file,
 915        const char __user *user_buf,
 916        size_t count, loff_t *ppos)
 917{
 918        struct ab3550 *ab = ((struct seq_file *)(file->private_data))->private;
 919        unsigned long user_address;
 920        int err;
 921
 922        /* Get userspace string and assure termination */
 923        err = kstrtoul_from_user(user_buf, count, 0, &user_address);
 924        if (err)
 925                return err;
 926
 927        if (user_address > 0xff) {
 928                dev_err(&ab->i2c_client[0]->dev,
 929                        "debugfs error input > 0xff\n");
 930                return -EINVAL;
 931        }
 932        ab->debug_address = user_address;
 933        return count;
 934}
 935
 936static int ab3550_val_print(struct seq_file *s, void *p)
 937{
 938        struct ab3550 *ab = s->private;
 939        int err;
 940        u8 regvalue;
 941
 942        err = get_register_interruptible(ab, (u8)ab->debug_bank,
 943                (u8)ab->debug_address, &regvalue);
 944        if (err)
 945                return -EINVAL;
 946        seq_printf(s, "0x%02X\n", regvalue);
 947
 948        return 0;
 949}
 950
 951static int ab3550_val_open(struct inode *inode, struct file *file)
 952{
 953        return single_open(file, ab3550_val_print, inode->i_private);
 954}
 955
 956static ssize_t ab3550_val_write(struct file *file,
 957        const char __user *user_buf,
 958        size_t count, loff_t *ppos)
 959{
 960        struct ab3550 *ab = ((struct seq_file *)(file->private_data))->private;
 961        unsigned long user_val;
 962        int err;
 963        u8 regvalue;
 964
 965        /* Get userspace string and assure termination */
 966        err = kstrtoul_from_user(user_buf, count, 0, &user_val);
 967        if (err)
 968                return err;
 969
 970        if (user_val > 0xff) {
 971                dev_err(&ab->i2c_client[0]->dev,
 972                        "debugfs error input > 0xff\n");
 973                return -EINVAL;
 974        }
 975        err = mask_and_set_register_interruptible(
 976                ab, (u8)ab->debug_bank,
 977                (u8)ab->debug_address, 0xFF, (u8)user_val);
 978        if (err)
 979                return -EINVAL;
 980
 981        get_register_interruptible(ab, (u8)ab->debug_bank,
 982                (u8)ab->debug_address, &regvalue);
 983        if (err)
 984                return -EINVAL;
 985
 986        return count;
 987}
 988
 989static const struct file_operations ab3550_bank_fops = {
 990        .open = ab3550_bank_open,
 991        .write = ab3550_bank_write,
 992        .read = seq_read,
 993        .llseek = seq_lseek,
 994        .release = single_release,
 995        .owner = THIS_MODULE,
 996};
 997
 998static const struct file_operations ab3550_address_fops = {
 999        .open = ab3550_address_open,
1000        .write = ab3550_address_write,
1001        .read = seq_read,
1002        .llseek = seq_lseek,
1003        .release = single_release,
1004        .owner = THIS_MODULE,
1005};
1006
1007static const struct file_operations ab3550_val_fops = {
1008        .open = ab3550_val_open,
1009        .write = ab3550_val_write,
1010        .read = seq_read,
1011        .llseek = seq_lseek,
1012        .release = single_release,
1013        .owner = THIS_MODULE,
1014};
1015
1016static struct dentry *ab3550_dir;
1017static struct dentry *ab3550_reg_file;
1018static struct dentry *ab3550_bank_file;
1019static struct dentry *ab3550_address_file;
1020static struct dentry *ab3550_val_file;
1021
1022static inline void ab3550_setup_debugfs(struct ab3550 *ab)
1023{
1024        ab->debug_bank = 0;
1025        ab->debug_address = 0x00;
1026
1027        ab3550_dir = debugfs_create_dir(AB3550_NAME_STRING, NULL);
1028        if (!ab3550_dir)
1029                goto exit_no_debugfs;
1030
1031        ab3550_reg_file = debugfs_create_file("all-registers",
1032                S_IRUGO, ab3550_dir, ab, &ab3550_registers_fops);
1033        if (!ab3550_reg_file)
1034                goto exit_destroy_dir;
1035
1036        ab3550_bank_file = debugfs_create_file("register-bank",
1037                (S_IRUGO | S_IWUSR), ab3550_dir, ab, &ab3550_bank_fops);
1038        if (!ab3550_bank_file)
1039                goto exit_destroy_reg;
1040
1041        ab3550_address_file = debugfs_create_file("register-address",
1042                (S_IRUGO | S_IWUSR), ab3550_dir, ab, &ab3550_address_fops);
1043        if (!ab3550_address_file)
1044                goto exit_destroy_bank;
1045
1046        ab3550_val_file = debugfs_create_file("register-value",
1047                (S_IRUGO | S_IWUSR), ab3550_dir, ab, &ab3550_val_fops);
1048        if (!ab3550_val_file)
1049                goto exit_destroy_address;
1050
1051        return;
1052
1053exit_destroy_address:
1054        debugfs_remove(ab3550_address_file);
1055exit_destroy_bank:
1056        debugfs_remove(ab3550_bank_file);
1057exit_destroy_reg:
1058        debugfs_remove(ab3550_reg_file);
1059exit_destroy_dir:
1060        debugfs_remove(ab3550_dir);
1061exit_no_debugfs:
1062        dev_err(&ab->i2c_client[0]->dev, "failed to create debugfs entries.\n");
1063        return;
1064}
1065
1066static inline void ab3550_remove_debugfs(void)
1067{
1068        debugfs_remove(ab3550_val_file);
1069        debugfs_remove(ab3550_address_file);
1070        debugfs_remove(ab3550_bank_file);
1071        debugfs_remove(ab3550_reg_file);
1072        debugfs_remove(ab3550_dir);
1073}
1074
1075#else /* !CONFIG_DEBUG_FS */
1076static inline void ab3550_setup_debugfs(struct ab3550 *ab)
1077{
1078}
1079static inline void ab3550_remove_debugfs(void)
1080{
1081}
1082#endif
1083
1084/*
1085 * Basic set-up, datastructure creation/destruction and I2C interface.
1086 * This sets up a default config in the AB3550 chip so that it
1087 * will work as expected.
1088 */
1089static int __init ab3550_setup(struct ab3550 *ab)
1090{
1091        int err = 0;
1092        int i;
1093        struct ab3550_platform_data *plf_data;
1094        struct abx500_init_settings *settings;
1095
1096        plf_data = ab->i2c_client[0]->dev.platform_data;
1097        settings = plf_data->init_settings;
1098
1099        for (i = 0; i < plf_data->init_settings_sz; i++) {
1100                err = mask_and_set_register_interruptible(ab,
1101                        settings[i].bank,
1102                        settings[i].reg,
1103                        0xFF, settings[i].setting);
1104                if (err)
1105                        goto exit_no_setup;
1106
1107                /* If event mask register update the event mask in ab3550 */
1108                if ((settings[i].bank == 0) &&
1109                        (AB3550_IMR1 <= settings[i].reg) &&
1110                        (settings[i].reg <= AB3550_IMR5)) {
1111                        ab->event_mask[settings[i].reg - AB3550_IMR1] =
1112                                settings[i].setting;
1113                }
1114        }
1115exit_no_setup:
1116        return err;
1117}
1118
1119static void ab3550_mask_work(struct work_struct *work)
1120{
1121        struct ab3550 *ab = container_of(work, struct ab3550, mask_work);
1122        int i;
1123        unsigned long flags;
1124        u8 mask[AB3550_NUM_EVENT_REG];
1125
1126        spin_lock_irqsave(&ab->event_lock, flags);
1127        for (i = 0; i < AB3550_NUM_EVENT_REG; i++)
1128                mask[i] = ab->event_mask[i];
1129        spin_unlock_irqrestore(&ab->event_lock, flags);
1130
1131        for (i = 0; i < AB3550_NUM_EVENT_REG; i++) {
1132                int err;
1133
1134                err = mask_and_set_register_interruptible(ab, 0,
1135                        (AB3550_IMR1 + i), ~0, mask[i]);
1136                if (err)
1137                        dev_err(&ab->i2c_client[0]->dev,
1138                                "ab3550_mask_work failed 0x%x,0x%x\n",
1139                                (AB3550_IMR1 + i), mask[i]);
1140        }
1141}
1142
1143static void ab3550_mask(struct irq_data *data)
1144{
1145        unsigned long flags;
1146        struct ab3550 *ab;
1147        struct ab3550_platform_data *plf_data;
1148        int irq;
1149
1150        ab = irq_data_get_irq_chip_data(data);
1151        plf_data = ab->i2c_client[0]->dev.platform_data;
1152        irq = data->irq - plf_data->irq.base;
1153
1154        spin_lock_irqsave(&ab->event_lock, flags);
1155        ab->event_mask[irq / 8] |= BIT(irq % 8);
1156        spin_unlock_irqrestore(&ab->event_lock, flags);
1157
1158        schedule_work(&ab->mask_work);
1159}
1160
1161static void ab3550_unmask(struct irq_data *data)
1162{
1163        unsigned long flags;
1164        struct ab3550 *ab;
1165        struct ab3550_platform_data *plf_data;
1166        int irq;
1167
1168        ab = irq_data_get_irq_chip_data(data);
1169        plf_data = ab->i2c_client[0]->dev.platform_data;
1170        irq = data->irq - plf_data->irq.base;
1171
1172        spin_lock_irqsave(&ab->event_lock, flags);
1173        ab->event_mask[irq / 8] &= ~BIT(irq % 8);
1174        spin_unlock_irqrestore(&ab->event_lock, flags);
1175
1176        schedule_work(&ab->mask_work);
1177}
1178
1179static void noop(struct irq_data *data)
1180{
1181}
1182
1183static struct irq_chip ab3550_irq_chip = {
1184        .name           = "ab3550-core", /* Keep the same name as the request */
1185        .irq_disable    = ab3550_mask, /* No default to mask in chip.c */
1186        .irq_ack        = noop,
1187        .irq_mask       = ab3550_mask,
1188        .irq_unmask     = ab3550_unmask,
1189};
1190
1191struct ab_family_id {
1192        u8      id;
1193        char    *name;
1194};
1195
1196static const struct ab_family_id ids[] __initdata = {
1197        /* AB3550 */
1198        {
1199                .id = AB3550_P1A,
1200                .name = "P1A"
1201        },
1202        /* Terminator */
1203        {
1204                .id = 0x00,
1205        }
1206};
1207
1208static int __init ab3550_probe(struct i2c_client *client,
1209        const struct i2c_device_id *id)
1210{
1211        struct ab3550 *ab;
1212        struct ab3550_platform_data *ab3550_plf_data =
1213                client->dev.platform_data;
1214        int err;
1215        int i;
1216        int num_i2c_clients = 0;
1217
1218        ab = kzalloc(sizeof(struct ab3550), GFP_KERNEL);
1219        if (!ab) {
1220                dev_err(&client->dev,
1221                        "could not allocate " AB3550_NAME_STRING " device\n");
1222                return -ENOMEM;
1223        }
1224
1225        /* Initialize data structure */
1226        mutex_init(&ab->access_mutex);
1227        spin_lock_init(&ab->event_lock);
1228        ab->i2c_client[0] = client;
1229
1230        i2c_set_clientdata(client, ab);
1231
1232        /* Read chip ID register */
1233        err = get_register_interruptible(ab, 0, AB3550_CID_REG, &ab->chip_id);
1234        if (err) {
1235                dev_err(&client->dev, "could not communicate with the analog "
1236                        "baseband chip\n");
1237                goto exit_no_detect;
1238        }
1239
1240        for (i = 0; ids[i].id != 0x0; i++) {
1241                if (ids[i].id == ab->chip_id) {
1242                        snprintf(&ab->chip_name[0], sizeof(ab->chip_name) - 1,
1243                                AB3550_ID_FORMAT_STRING, ids[i].name);
1244                        break;
1245                }
1246        }
1247
1248        if (ids[i].id == 0x0) {
1249                dev_err(&client->dev, "unknown analog baseband chip id: 0x%x\n",
1250                        ab->chip_id);
1251                dev_err(&client->dev, "driver not started!\n");
1252                goto exit_no_detect;
1253        }
1254
1255        dev_info(&client->dev, "detected AB chip: %s\n", &ab->chip_name[0]);
1256
1257        /* Attach other dummy I2C clients. */
1258        while (++num_i2c_clients < AB3550_NUM_BANKS) {
1259                ab->i2c_client[num_i2c_clients] =
1260                        i2c_new_dummy(client->adapter,
1261                                (client->addr + num_i2c_clients));
1262                if (!ab->i2c_client[num_i2c_clients]) {
1263                        err = -ENOMEM;
1264                        goto exit_no_dummy_client;
1265                }
1266                strlcpy(ab->i2c_client[num_i2c_clients]->name, id->name,
1267                        sizeof(ab->i2c_client[num_i2c_clients]->name));
1268        }
1269
1270        err = ab3550_setup(ab);
1271        if (err)
1272                goto exit_no_setup;
1273
1274        INIT_WORK(&ab->mask_work, ab3550_mask_work);
1275
1276        for (i = 0; i < ab3550_plf_data->irq.count; i++) {
1277                unsigned int irq;
1278
1279                irq = ab3550_plf_data->irq.base + i;
1280                irq_set_chip_data(irq, ab);
1281                irq_set_chip_and_handler(irq, &ab3550_irq_chip,
1282                                         handle_simple_irq);
1283                irq_set_nested_thread(irq, 1);
1284#ifdef CONFIG_ARM
1285                set_irq_flags(irq, IRQF_VALID);
1286#else
1287                irq_set_noprobe(irq);
1288#endif
1289        }
1290
1291        err = request_threaded_irq(client->irq, NULL, ab3550_irq_handler,
1292                IRQF_ONESHOT, "ab3550-core", ab);
1293        /* This real unpredictable IRQ is of course sampled for entropy */
1294        rand_initialize_irq(client->irq);
1295
1296        if (err)
1297                goto exit_no_irq;
1298
1299        err = abx500_register_ops(&client->dev, &ab3550_ops);
1300        if (err)
1301                goto exit_no_ops;
1302
1303        /* Set up and register the platform devices. */
1304        for (i = 0; i < AB3550_NUM_DEVICES; i++) {
1305                ab3550_devs[i].platform_data = ab3550_plf_data->dev_data[i];
1306                ab3550_devs[i].pdata_size = ab3550_plf_data->dev_data_sz[i];
1307        }
1308
1309        err = mfd_add_devices(&client->dev, 0, ab3550_devs,
1310                ARRAY_SIZE(ab3550_devs), NULL,
1311                ab3550_plf_data->irq.base);
1312
1313        ab3550_setup_debugfs(ab);
1314
1315        return 0;
1316
1317exit_no_ops:
1318exit_no_irq:
1319exit_no_setup:
1320exit_no_dummy_client:
1321        /* Unregister the dummy i2c clients. */
1322        while (--num_i2c_clients)
1323                i2c_unregister_device(ab->i2c_client[num_i2c_clients]);
1324exit_no_detect:
1325        kfree(ab);
1326        return err;
1327}
1328
1329static int __exit ab3550_remove(struct i2c_client *client)
1330{
1331        struct ab3550 *ab = i2c_get_clientdata(client);
1332        int num_i2c_clients = AB3550_NUM_BANKS;
1333
1334        mfd_remove_devices(&client->dev);
1335        ab3550_remove_debugfs();
1336
1337        while (--num_i2c_clients)
1338                i2c_unregister_device(ab->i2c_client[num_i2c_clients]);
1339
1340        /*
1341         * At this point, all subscribers should have unregistered
1342         * their notifiers so deactivate IRQ
1343         */
1344        free_irq(client->irq, ab);
1345        kfree(ab);
1346        return 0;
1347}
1348
1349static const struct i2c_device_id ab3550_id[] = {
1350        {AB3550_NAME_STRING, 0},
1351        {}
1352};
1353MODULE_DEVICE_TABLE(i2c, ab3550_id);
1354
1355static struct i2c_driver ab3550_driver = {
1356        .driver = {
1357                .name   = AB3550_NAME_STRING,
1358                .owner  = THIS_MODULE,
1359        },
1360        .id_table       = ab3550_id,
1361        .probe          = ab3550_probe,
1362        .remove         = __exit_p(ab3550_remove),
1363};
1364
1365static int __init ab3550_i2c_init(void)
1366{
1367        return i2c_add_driver(&ab3550_driver);
1368}
1369
1370static void __exit ab3550_i2c_exit(void)
1371{
1372        i2c_del_driver(&ab3550_driver);
1373}
1374
1375subsys_initcall(ab3550_i2c_init);
1376module_exit(ab3550_i2c_exit);
1377
1378MODULE_AUTHOR("Mattias Wallin <mattias.wallin@stericsson.com>");
1379MODULE_DESCRIPTION("AB3550 core driver");
1380MODULE_LICENSE("GPL");
1381