linux/drivers/mfd/twl-core.c
<<
>>
Prefs
   1/*
   2 * twl_core.c - driver for TWL4030/TWL5030/TWL60X0/TPS659x0 PM
   3 * and audio CODEC devices
   4 *
   5 * Copyright (C) 2005-2006 Texas Instruments, Inc.
   6 *
   7 * Modifications to defer interrupt handling to a kernel thread:
   8 * Copyright (C) 2006 MontaVista Software, Inc.
   9 *
  10 * Based on tlv320aic23.c:
  11 * Copyright (c) by Kai Svahn <kai.svahn@nokia.com>
  12 *
  13 * Code cleanup and modifications to IRQ handler.
  14 * by syed khasim <x0khasim@ti.com>
  15 *
  16 * This program is free software; you can redistribute it and/or modify
  17 * it under the terms of the GNU General Public License as published by
  18 * the Free Software Foundation; either version 2 of the License, or
  19 * (at your option) any later version.
  20 *
  21 * This program is distributed in the hope that it will be useful,
  22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  24 * GNU General Public License for more details.
  25 *
  26 * You should have received a copy of the GNU General Public License
  27 * along with this program; if not, write to the Free Software
  28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  29 */
  30
  31#include <linux/init.h>
  32#include <linux/mutex.h>
  33#include <linux/module.h>
  34#include <linux/platform_device.h>
  35#include <linux/clk.h>
  36#include <linux/err.h>
  37#include <linux/device.h>
  38#include <linux/of.h>
  39#include <linux/of_irq.h>
  40#include <linux/of_platform.h>
  41#include <linux/irq.h>
  42#include <linux/irqdomain.h>
  43
  44#include <linux/regulator/machine.h>
  45
  46#include <linux/i2c.h>
  47#include <linux/i2c/twl.h>
  48
  49#include "twl-core.h"
  50
  51/*
  52 * The TWL4030 "Triton 2" is one of a family of a multi-function "Power
  53 * Management and System Companion Device" chips originally designed for
  54 * use in OMAP2 and OMAP 3 based systems.  Its control interfaces use I2C,
  55 * often at around 3 Mbit/sec, including for interrupt handling.
  56 *
  57 * This driver core provides genirq support for the interrupts emitted,
  58 * by the various modules, and exports register access primitives.
  59 *
  60 * FIXME this driver currently requires use of the first interrupt line
  61 * (and associated registers).
  62 */
  63
  64#define DRIVER_NAME                     "twl"
  65
  66#if defined(CONFIG_KEYBOARD_TWL4030) || defined(CONFIG_KEYBOARD_TWL4030_MODULE)
  67#define twl_has_keypad()        true
  68#else
  69#define twl_has_keypad()        false
  70#endif
  71
  72#if defined(CONFIG_GPIO_TWL4030) || defined(CONFIG_GPIO_TWL4030_MODULE)
  73#define twl_has_gpio()  true
  74#else
  75#define twl_has_gpio()  false
  76#endif
  77
  78#if defined(CONFIG_REGULATOR_TWL4030) \
  79        || defined(CONFIG_REGULATOR_TWL4030_MODULE)
  80#define twl_has_regulator()     true
  81#else
  82#define twl_has_regulator()     false
  83#endif
  84
  85#if defined(CONFIG_TWL4030_MADC) || defined(CONFIG_TWL4030_MADC_MODULE)
  86#define twl_has_madc()  true
  87#else
  88#define twl_has_madc()  false
  89#endif
  90
  91#ifdef CONFIG_TWL4030_POWER
  92#define twl_has_power()        true
  93#else
  94#define twl_has_power()        false
  95#endif
  96
  97#if defined(CONFIG_RTC_DRV_TWL4030) || defined(CONFIG_RTC_DRV_TWL4030_MODULE)
  98#define twl_has_rtc()   true
  99#else
 100#define twl_has_rtc()   false
 101#endif
 102
 103#if defined(CONFIG_TWL4030_USB) || defined(CONFIG_TWL4030_USB_MODULE) ||\
 104        defined(CONFIG_TWL6030_USB) || defined(CONFIG_TWL6030_USB_MODULE)
 105#define twl_has_usb()   true
 106#else
 107#define twl_has_usb()   false
 108#endif
 109
 110#if defined(CONFIG_TWL4030_WATCHDOG) || \
 111        defined(CONFIG_TWL4030_WATCHDOG_MODULE)
 112#define twl_has_watchdog()        true
 113#else
 114#define twl_has_watchdog()        false
 115#endif
 116
 117#if defined(CONFIG_MFD_TWL4030_AUDIO) || \
 118        defined(CONFIG_MFD_TWL4030_AUDIO_MODULE)
 119#define twl_has_codec() true
 120#else
 121#define twl_has_codec() false
 122#endif
 123
 124#if defined(CONFIG_CHARGER_TWL4030) || defined(CONFIG_CHARGER_TWL4030_MODULE)
 125#define twl_has_bci()   true
 126#else
 127#define twl_has_bci()   false
 128#endif
 129
 130/* Triton Core internal information (BEGIN) */
 131
 132/* Last - for index max*/
 133#define TWL4030_MODULE_LAST             TWL4030_MODULE_SECURED_REG
 134
 135#define TWL_NUM_SLAVES          4
 136
 137#if defined(CONFIG_INPUT_TWL4030_PWRBUTTON) \
 138        || defined(CONFIG_INPUT_TWL4030_PWRBUTTON_MODULE)
 139#define twl_has_pwrbutton()     true
 140#else
 141#define twl_has_pwrbutton()     false
 142#endif
 143
 144#define SUB_CHIP_ID0 0
 145#define SUB_CHIP_ID1 1
 146#define SUB_CHIP_ID2 2
 147#define SUB_CHIP_ID3 3
 148#define SUB_CHIP_ID_INVAL 0xff
 149
 150#define TWL_MODULE_LAST TWL4030_MODULE_LAST
 151
 152/* Base Address defns for twl4030_map[] */
 153
 154/* subchip/slave 0 - USB ID */
 155#define TWL4030_BASEADD_USB             0x0000
 156
 157/* subchip/slave 1 - AUD ID */
 158#define TWL4030_BASEADD_AUDIO_VOICE     0x0000
 159#define TWL4030_BASEADD_GPIO            0x0098
 160#define TWL4030_BASEADD_INTBR           0x0085
 161#define TWL4030_BASEADD_PIH             0x0080
 162#define TWL4030_BASEADD_TEST            0x004C
 163
 164/* subchip/slave 2 - AUX ID */
 165#define TWL4030_BASEADD_INTERRUPTS      0x00B9
 166#define TWL4030_BASEADD_LED             0x00EE
 167#define TWL4030_BASEADD_MADC            0x0000
 168#define TWL4030_BASEADD_MAIN_CHARGE     0x0074
 169#define TWL4030_BASEADD_PRECHARGE       0x00AA
 170#define TWL4030_BASEADD_PWM0            0x00F8
 171#define TWL4030_BASEADD_PWM1            0x00FB
 172#define TWL4030_BASEADD_PWMA            0x00EF
 173#define TWL4030_BASEADD_PWMB            0x00F1
 174#define TWL4030_BASEADD_KEYPAD          0x00D2
 175
 176#define TWL5031_BASEADD_ACCESSORY       0x0074 /* Replaces Main Charge */
 177#define TWL5031_BASEADD_INTERRUPTS      0x00B9 /* Different than TWL4030's
 178                                                  one */
 179
 180/* subchip/slave 3 - POWER ID */
 181#define TWL4030_BASEADD_BACKUP          0x0014
 182#define TWL4030_BASEADD_INT             0x002E
 183#define TWL4030_BASEADD_PM_MASTER       0x0036
 184#define TWL4030_BASEADD_PM_RECEIVER     0x005B
 185#define TWL4030_BASEADD_RTC             0x001C
 186#define TWL4030_BASEADD_SECURED_REG     0x0000
 187
 188/* Triton Core internal information (END) */
 189
 190
 191/* subchip/slave 0 0x48 - POWER */
 192#define TWL6030_BASEADD_RTC             0x0000
 193#define TWL6030_BASEADD_MEM             0x0017
 194#define TWL6030_BASEADD_PM_MASTER       0x001F
 195#define TWL6030_BASEADD_PM_SLAVE_MISC   0x0030 /* PM_RECEIVER */
 196#define TWL6030_BASEADD_PM_MISC         0x00E2
 197#define TWL6030_BASEADD_PM_PUPD         0x00F0
 198
 199/* subchip/slave 1 0x49 - FEATURE */
 200#define TWL6030_BASEADD_USB             0x0000
 201#define TWL6030_BASEADD_GPADC_CTRL      0x002E
 202#define TWL6030_BASEADD_AUX             0x0090
 203#define TWL6030_BASEADD_PWM             0x00BA
 204#define TWL6030_BASEADD_GASGAUGE        0x00C0
 205#define TWL6030_BASEADD_PIH             0x00D0
 206#define TWL6030_BASEADD_CHARGER         0x00E0
 207#define TWL6025_BASEADD_CHARGER         0x00DA
 208
 209/* subchip/slave 2 0x4A - DFT */
 210#define TWL6030_BASEADD_DIEID           0x00C0
 211
 212/* subchip/slave 3 0x4B - AUDIO */
 213#define TWL6030_BASEADD_AUDIO           0x0000
 214#define TWL6030_BASEADD_RSV             0x0000
 215#define TWL6030_BASEADD_ZERO            0x0000
 216
 217/* Few power values */
 218#define R_CFG_BOOT                      0x05
 219
 220/* some fields in R_CFG_BOOT */
 221#define HFCLK_FREQ_19p2_MHZ             (1 << 0)
 222#define HFCLK_FREQ_26_MHZ               (2 << 0)
 223#define HFCLK_FREQ_38p4_MHZ             (3 << 0)
 224#define HIGH_PERF_SQ                    (1 << 3)
 225#define CK32K_LOWPWR_EN                 (1 << 7)
 226
 227/*----------------------------------------------------------------------*/
 228
 229/* is driver active, bound to a chip? */
 230static bool inuse;
 231
 232/* TWL IDCODE Register value */
 233static u32 twl_idcode;
 234
 235static unsigned int twl_id;
 236unsigned int twl_rev(void)
 237{
 238        return twl_id;
 239}
 240EXPORT_SYMBOL(twl_rev);
 241
 242/* Structure for each TWL4030/TWL6030 Slave */
 243struct twl_client {
 244        struct i2c_client *client;
 245        u8 address;
 246
 247        /* max numb of i2c_msg required is for read =2 */
 248        struct i2c_msg xfer_msg[2];
 249
 250        /* To lock access to xfer_msg */
 251        struct mutex xfer_lock;
 252};
 253
 254static struct twl_client twl_modules[TWL_NUM_SLAVES];
 255
 256/* mapping the module id to slave id and base address */
 257struct twl_mapping {
 258        unsigned char sid;      /* Slave ID */
 259        unsigned char base;     /* base address */
 260};
 261static struct twl_mapping *twl_map;
 262
 263static struct twl_mapping twl4030_map[TWL4030_MODULE_LAST + 1] = {
 264        /*
 265         * NOTE:  don't change this table without updating the
 266         * <linux/i2c/twl.h> defines for TWL4030_MODULE_*
 267         * so they continue to match the order in this table.
 268         */
 269
 270        { 0, TWL4030_BASEADD_USB },
 271
 272        { 1, TWL4030_BASEADD_AUDIO_VOICE },
 273        { 1, TWL4030_BASEADD_GPIO },
 274        { 1, TWL4030_BASEADD_INTBR },
 275        { 1, TWL4030_BASEADD_PIH },
 276        { 1, TWL4030_BASEADD_TEST },
 277
 278        { 2, TWL4030_BASEADD_KEYPAD },
 279        { 2, TWL4030_BASEADD_MADC },
 280        { 2, TWL4030_BASEADD_INTERRUPTS },
 281        { 2, TWL4030_BASEADD_LED },
 282        { 2, TWL4030_BASEADD_MAIN_CHARGE },
 283        { 2, TWL4030_BASEADD_PRECHARGE },
 284        { 2, TWL4030_BASEADD_PWM0 },
 285        { 2, TWL4030_BASEADD_PWM1 },
 286        { 2, TWL4030_BASEADD_PWMA },
 287        { 2, TWL4030_BASEADD_PWMB },
 288        { 2, TWL5031_BASEADD_ACCESSORY },
 289        { 2, TWL5031_BASEADD_INTERRUPTS },
 290
 291        { 3, TWL4030_BASEADD_BACKUP },
 292        { 3, TWL4030_BASEADD_INT },
 293        { 3, TWL4030_BASEADD_PM_MASTER },
 294        { 3, TWL4030_BASEADD_PM_RECEIVER },
 295        { 3, TWL4030_BASEADD_RTC },
 296        { 3, TWL4030_BASEADD_SECURED_REG },
 297};
 298
 299static struct twl_mapping twl6030_map[] = {
 300        /*
 301         * NOTE:  don't change this table without updating the
 302         * <linux/i2c/twl.h> defines for TWL4030_MODULE_*
 303         * so they continue to match the order in this table.
 304         */
 305        { SUB_CHIP_ID1, TWL6030_BASEADD_USB },
 306        { SUB_CHIP_ID_INVAL, TWL6030_BASEADD_AUDIO },
 307        { SUB_CHIP_ID2, TWL6030_BASEADD_DIEID },
 308        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 309        { SUB_CHIP_ID1, TWL6030_BASEADD_PIH },
 310
 311        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 312        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 313        { SUB_CHIP_ID1, TWL6030_BASEADD_GPADC_CTRL },
 314        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 315        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 316
 317        { SUB_CHIP_ID1, TWL6030_BASEADD_CHARGER },
 318        { SUB_CHIP_ID1, TWL6030_BASEADD_GASGAUGE },
 319        { SUB_CHIP_ID1, TWL6030_BASEADD_PWM },
 320        { SUB_CHIP_ID0, TWL6030_BASEADD_ZERO },
 321        { SUB_CHIP_ID1, TWL6030_BASEADD_ZERO },
 322
 323        { SUB_CHIP_ID2, TWL6030_BASEADD_ZERO },
 324        { SUB_CHIP_ID2, TWL6030_BASEADD_ZERO },
 325        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 326        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 327        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 328        { SUB_CHIP_ID0, TWL6030_BASEADD_PM_MASTER },
 329        { SUB_CHIP_ID0, TWL6030_BASEADD_PM_SLAVE_MISC },
 330
 331        { SUB_CHIP_ID0, TWL6030_BASEADD_RTC },
 332        { SUB_CHIP_ID0, TWL6030_BASEADD_MEM },
 333        { SUB_CHIP_ID1, TWL6025_BASEADD_CHARGER },
 334};
 335
 336/*----------------------------------------------------------------------*/
 337
 338/* Exported Functions */
 339
 340/**
 341 * twl_i2c_write - Writes a n bit register in TWL4030/TWL5030/TWL60X0
 342 * @mod_no: module number
 343 * @value: an array of num_bytes+1 containing data to write
 344 * @reg: register address (just offset will do)
 345 * @num_bytes: number of bytes to transfer
 346 *
 347 * IMPORTANT: for 'value' parameter: Allocate value num_bytes+1 and
 348 * valid data starts at Offset 1.
 349 *
 350 * Returns the result of operation - 0 is success
 351 */
 352int twl_i2c_write(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes)
 353{
 354        int ret;
 355        int sid;
 356        struct twl_client *twl;
 357        struct i2c_msg *msg;
 358
 359        if (unlikely(mod_no > TWL_MODULE_LAST)) {
 360                pr_err("%s: invalid module number %d\n", DRIVER_NAME, mod_no);
 361                return -EPERM;
 362        }
 363        if (unlikely(!inuse)) {
 364                pr_err("%s: not initialized\n", DRIVER_NAME);
 365                return -EPERM;
 366        }
 367        sid = twl_map[mod_no].sid;
 368        if (unlikely(sid == SUB_CHIP_ID_INVAL)) {
 369                pr_err("%s: module %d is not part of the pmic\n",
 370                       DRIVER_NAME, mod_no);
 371                return -EINVAL;
 372        }
 373        twl = &twl_modules[sid];
 374
 375        mutex_lock(&twl->xfer_lock);
 376        /*
 377         * [MSG1]: fill the register address data
 378         * fill the data Tx buffer
 379         */
 380        msg = &twl->xfer_msg[0];
 381        msg->addr = twl->address;
 382        msg->len = num_bytes + 1;
 383        msg->flags = 0;
 384        msg->buf = value;
 385        /* over write the first byte of buffer with the register address */
 386        *value = twl_map[mod_no].base + reg;
 387        ret = i2c_transfer(twl->client->adapter, twl->xfer_msg, 1);
 388        mutex_unlock(&twl->xfer_lock);
 389
 390        /* i2c_transfer returns number of messages transferred */
 391        if (ret != 1) {
 392                pr_err("%s: i2c_write failed to transfer all messages\n",
 393                        DRIVER_NAME);
 394                if (ret < 0)
 395                        return ret;
 396                else
 397                        return -EIO;
 398        } else {
 399                return 0;
 400        }
 401}
 402EXPORT_SYMBOL(twl_i2c_write);
 403
 404/**
 405 * twl_i2c_read - Reads a n bit register in TWL4030/TWL5030/TWL60X0
 406 * @mod_no: module number
 407 * @value: an array of num_bytes containing data to be read
 408 * @reg: register address (just offset will do)
 409 * @num_bytes: number of bytes to transfer
 410 *
 411 * Returns result of operation - num_bytes is success else failure.
 412 */
 413int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes)
 414{
 415        int ret;
 416        u8 val;
 417        int sid;
 418        struct twl_client *twl;
 419        struct i2c_msg *msg;
 420
 421        if (unlikely(mod_no > TWL_MODULE_LAST)) {
 422                pr_err("%s: invalid module number %d\n", DRIVER_NAME, mod_no);
 423                return -EPERM;
 424        }
 425        if (unlikely(!inuse)) {
 426                pr_err("%s: not initialized\n", DRIVER_NAME);
 427                return -EPERM;
 428        }
 429        sid = twl_map[mod_no].sid;
 430        if (unlikely(sid == SUB_CHIP_ID_INVAL)) {
 431                pr_err("%s: module %d is not part of the pmic\n",
 432                       DRIVER_NAME, mod_no);
 433                return -EINVAL;
 434        }
 435        twl = &twl_modules[sid];
 436
 437        mutex_lock(&twl->xfer_lock);
 438        /* [MSG1] fill the register address data */
 439        msg = &twl->xfer_msg[0];
 440        msg->addr = twl->address;
 441        msg->len = 1;
 442        msg->flags = 0; /* Read the register value */
 443        val = twl_map[mod_no].base + reg;
 444        msg->buf = &val;
 445        /* [MSG2] fill the data rx buffer */
 446        msg = &twl->xfer_msg[1];
 447        msg->addr = twl->address;
 448        msg->flags = I2C_M_RD;  /* Read the register value */
 449        msg->len = num_bytes;   /* only n bytes */
 450        msg->buf = value;
 451        ret = i2c_transfer(twl->client->adapter, twl->xfer_msg, 2);
 452        mutex_unlock(&twl->xfer_lock);
 453
 454        /* i2c_transfer returns number of messages transferred */
 455        if (ret != 2) {
 456                pr_err("%s: i2c_read failed to transfer all messages\n",
 457                        DRIVER_NAME);
 458                if (ret < 0)
 459                        return ret;
 460                else
 461                        return -EIO;
 462        } else {
 463                return 0;
 464        }
 465}
 466EXPORT_SYMBOL(twl_i2c_read);
 467
 468/**
 469 * twl_i2c_write_u8 - Writes a 8 bit register in TWL4030/TWL5030/TWL60X0
 470 * @mod_no: module number
 471 * @value: the value to be written 8 bit
 472 * @reg: register address (just offset will do)
 473 *
 474 * Returns result of operation - 0 is success
 475 */
 476int twl_i2c_write_u8(u8 mod_no, u8 value, u8 reg)
 477{
 478
 479        /* 2 bytes offset 1 contains the data offset 0 is used by i2c_write */
 480        u8 temp_buffer[2] = { 0 };
 481        /* offset 1 contains the data */
 482        temp_buffer[1] = value;
 483        return twl_i2c_write(mod_no, temp_buffer, reg, 1);
 484}
 485EXPORT_SYMBOL(twl_i2c_write_u8);
 486
 487/**
 488 * twl_i2c_read_u8 - Reads a 8 bit register from TWL4030/TWL5030/TWL60X0
 489 * @mod_no: module number
 490 * @value: the value read 8 bit
 491 * @reg: register address (just offset will do)
 492 *
 493 * Returns result of operation - 0 is success
 494 */
 495int twl_i2c_read_u8(u8 mod_no, u8 *value, u8 reg)
 496{
 497        return twl_i2c_read(mod_no, value, reg, 1);
 498}
 499EXPORT_SYMBOL(twl_i2c_read_u8);
 500
 501/*----------------------------------------------------------------------*/
 502
 503/**
 504 * twl_read_idcode_register - API to read the IDCODE register.
 505 *
 506 * Unlocks the IDCODE register and read the 32 bit value.
 507 */
 508static int twl_read_idcode_register(void)
 509{
 510        int err;
 511
 512        err = twl_i2c_write_u8(TWL4030_MODULE_INTBR, TWL_EEPROM_R_UNLOCK,
 513                                                REG_UNLOCK_TEST_REG);
 514        if (err) {
 515                pr_err("TWL4030 Unable to unlock IDCODE registers -%d\n", err);
 516                goto fail;
 517        }
 518
 519        err = twl_i2c_read(TWL4030_MODULE_INTBR, (u8 *)(&twl_idcode),
 520                                                REG_IDCODE_7_0, 4);
 521        if (err) {
 522                pr_err("TWL4030: unable to read IDCODE -%d\n", err);
 523                goto fail;
 524        }
 525
 526        err = twl_i2c_write_u8(TWL4030_MODULE_INTBR, 0x0, REG_UNLOCK_TEST_REG);
 527        if (err)
 528                pr_err("TWL4030 Unable to relock IDCODE registers -%d\n", err);
 529fail:
 530        return err;
 531}
 532
 533/**
 534 * twl_get_type - API to get TWL Si type.
 535 *
 536 * Api to get the TWL Si type from IDCODE value.
 537 */
 538int twl_get_type(void)
 539{
 540        return TWL_SIL_TYPE(twl_idcode);
 541}
 542EXPORT_SYMBOL_GPL(twl_get_type);
 543
 544/**
 545 * twl_get_version - API to get TWL Si version.
 546 *
 547 * Api to get the TWL Si version from IDCODE value.
 548 */
 549int twl_get_version(void)
 550{
 551        return TWL_SIL_REV(twl_idcode);
 552}
 553EXPORT_SYMBOL_GPL(twl_get_version);
 554
 555static struct device *
 556add_numbered_child(unsigned chip, const char *name, int num,
 557                void *pdata, unsigned pdata_len,
 558                bool can_wakeup, int irq0, int irq1)
 559{
 560        struct platform_device  *pdev;
 561        struct twl_client       *twl = &twl_modules[chip];
 562        int                     status;
 563
 564        pdev = platform_device_alloc(name, num);
 565        if (!pdev) {
 566                dev_dbg(&twl->client->dev, "can't alloc dev\n");
 567                status = -ENOMEM;
 568                goto err;
 569        }
 570
 571        pdev->dev.parent = &twl->client->dev;
 572
 573        if (pdata) {
 574                status = platform_device_add_data(pdev, pdata, pdata_len);
 575                if (status < 0) {
 576                        dev_dbg(&pdev->dev, "can't add platform_data\n");
 577                        goto err;
 578                }
 579        }
 580
 581        if (irq0) {
 582                struct resource r[2] = {
 583                        { .start = irq0, .flags = IORESOURCE_IRQ, },
 584                        { .start = irq1, .flags = IORESOURCE_IRQ, },
 585                };
 586
 587                status = platform_device_add_resources(pdev, r, irq1 ? 2 : 1);
 588                if (status < 0) {
 589                        dev_dbg(&pdev->dev, "can't add irqs\n");
 590                        goto err;
 591                }
 592        }
 593
 594        status = platform_device_add(pdev);
 595        if (status == 0)
 596                device_init_wakeup(&pdev->dev, can_wakeup);
 597
 598err:
 599        if (status < 0) {
 600                platform_device_put(pdev);
 601                dev_err(&twl->client->dev, "can't add %s dev\n", name);
 602                return ERR_PTR(status);
 603        }
 604        return &pdev->dev;
 605}
 606
 607static inline struct device *add_child(unsigned chip, const char *name,
 608                void *pdata, unsigned pdata_len,
 609                bool can_wakeup, int irq0, int irq1)
 610{
 611        return add_numbered_child(chip, name, -1, pdata, pdata_len,
 612                can_wakeup, irq0, irq1);
 613}
 614
 615static struct device *
 616add_regulator_linked(int num, struct regulator_init_data *pdata,
 617                struct regulator_consumer_supply *consumers,
 618                unsigned num_consumers, unsigned long features)
 619{
 620        unsigned sub_chip_id;
 621        struct twl_regulator_driver_data drv_data;
 622
 623        /* regulator framework demands init_data ... */
 624        if (!pdata)
 625                return NULL;
 626
 627        if (consumers) {
 628                pdata->consumer_supplies = consumers;
 629                pdata->num_consumer_supplies = num_consumers;
 630        }
 631
 632        if (pdata->driver_data) {
 633                /* If we have existing drv_data, just add the flags */
 634                struct twl_regulator_driver_data *tmp;
 635                tmp = pdata->driver_data;
 636                tmp->features |= features;
 637        } else {
 638                /* add new driver data struct, used only during init */
 639                drv_data.features = features;
 640                drv_data.set_voltage = NULL;
 641                drv_data.get_voltage = NULL;
 642                drv_data.data = NULL;
 643                pdata->driver_data = &drv_data;
 644        }
 645
 646        /* NOTE:  we currently ignore regulator IRQs, e.g. for short circuits */
 647        sub_chip_id = twl_map[TWL_MODULE_PM_MASTER].sid;
 648        return add_numbered_child(sub_chip_id, "twl_reg", num,
 649                pdata, sizeof(*pdata), false, 0, 0);
 650}
 651
 652static struct device *
 653add_regulator(int num, struct regulator_init_data *pdata,
 654                unsigned long features)
 655{
 656        return add_regulator_linked(num, pdata, NULL, 0, features);
 657}
 658
 659/*
 660 * NOTE:  We know the first 8 IRQs after pdata->base_irq are
 661 * for the PIH, and the next are for the PWR_INT SIH, since
 662 * that's how twl_init_irq() sets things up.
 663 */
 664
 665static int
 666add_children(struct twl4030_platform_data *pdata, unsigned irq_base,
 667                unsigned long features)
 668{
 669        struct device   *child;
 670        unsigned sub_chip_id;
 671
 672        if (twl_has_gpio() && pdata->gpio) {
 673                child = add_child(SUB_CHIP_ID1, "twl4030_gpio",
 674                                pdata->gpio, sizeof(*pdata->gpio),
 675                                false, irq_base + GPIO_INTR_OFFSET, 0);
 676                if (IS_ERR(child))
 677                        return PTR_ERR(child);
 678        }
 679
 680        if (twl_has_keypad() && pdata->keypad) {
 681                child = add_child(SUB_CHIP_ID2, "twl4030_keypad",
 682                                pdata->keypad, sizeof(*pdata->keypad),
 683                                true, irq_base + KEYPAD_INTR_OFFSET, 0);
 684                if (IS_ERR(child))
 685                        return PTR_ERR(child);
 686        }
 687
 688        if (twl_has_madc() && pdata->madc) {
 689                child = add_child(2, "twl4030_madc",
 690                                pdata->madc, sizeof(*pdata->madc),
 691                                true, irq_base + MADC_INTR_OFFSET, 0);
 692                if (IS_ERR(child))
 693                        return PTR_ERR(child);
 694        }
 695
 696        if (twl_has_rtc()) {
 697                /*
 698                 * REVISIT platform_data here currently might expose the
 699                 * "msecure" line ... but for now we just expect board
 700                 * setup to tell the chip "it's always ok to SET_TIME".
 701                 * Eventually, Linux might become more aware of such
 702                 * HW security concerns, and "least privilege".
 703                 */
 704                sub_chip_id = twl_map[TWL_MODULE_RTC].sid;
 705                child = add_child(sub_chip_id, "twl_rtc",
 706                                NULL, 0,
 707                                true, irq_base + RTC_INTR_OFFSET, 0);
 708                if (IS_ERR(child))
 709                        return PTR_ERR(child);
 710        }
 711
 712        if (twl_has_usb() && pdata->usb && twl_class_is_4030()) {
 713
 714                static struct regulator_consumer_supply usb1v5 = {
 715                        .supply =       "usb1v5",
 716                };
 717                static struct regulator_consumer_supply usb1v8 = {
 718                        .supply =       "usb1v8",
 719                };
 720                static struct regulator_consumer_supply usb3v1[] = {
 721                        { .supply =     "usb3v1" },
 722                        { .supply =     "bci3v1" },
 723                };
 724
 725        /* First add the regulators so that they can be used by transceiver */
 726                if (twl_has_regulator()) {
 727                        /* this is a template that gets copied */
 728                        struct regulator_init_data usb_fixed = {
 729                                .constraints.valid_modes_mask =
 730                                        REGULATOR_MODE_NORMAL
 731                                        | REGULATOR_MODE_STANDBY,
 732                                .constraints.valid_ops_mask =
 733                                        REGULATOR_CHANGE_MODE
 734                                        | REGULATOR_CHANGE_STATUS,
 735                        };
 736
 737                        child = add_regulator_linked(TWL4030_REG_VUSB1V5,
 738                                                      &usb_fixed, &usb1v5, 1,
 739                                                      features);
 740                        if (IS_ERR(child))
 741                                return PTR_ERR(child);
 742
 743                        child = add_regulator_linked(TWL4030_REG_VUSB1V8,
 744                                                      &usb_fixed, &usb1v8, 1,
 745                                                      features);
 746                        if (IS_ERR(child))
 747                                return PTR_ERR(child);
 748
 749                        child = add_regulator_linked(TWL4030_REG_VUSB3V1,
 750                                                      &usb_fixed, usb3v1, 2,
 751                                                      features);
 752                        if (IS_ERR(child))
 753                                return PTR_ERR(child);
 754
 755                }
 756
 757                child = add_child(0, "twl4030_usb",
 758                                pdata->usb, sizeof(*pdata->usb),
 759                                true,
 760                                /* irq0 = USB_PRES, irq1 = USB */
 761                                irq_base + USB_PRES_INTR_OFFSET,
 762                                irq_base + USB_INTR_OFFSET);
 763
 764                if (IS_ERR(child))
 765                        return PTR_ERR(child);
 766
 767                /* we need to connect regulators to this transceiver */
 768                if (twl_has_regulator() && child) {
 769                        usb1v5.dev_name = dev_name(child);
 770                        usb1v8.dev_name = dev_name(child);
 771                        usb3v1[0].dev_name = dev_name(child);
 772                }
 773        }
 774        if (twl_has_usb() && pdata->usb && twl_class_is_6030()) {
 775
 776                static struct regulator_consumer_supply usb3v3;
 777                int regulator;
 778
 779                if (twl_has_regulator()) {
 780                        /* this is a template that gets copied */
 781                        struct regulator_init_data usb_fixed = {
 782                                .constraints.valid_modes_mask =
 783                                        REGULATOR_MODE_NORMAL
 784                                        | REGULATOR_MODE_STANDBY,
 785                                .constraints.valid_ops_mask =
 786                                        REGULATOR_CHANGE_MODE
 787                                        | REGULATOR_CHANGE_STATUS,
 788                        };
 789
 790                        if (features & TWL6025_SUBCLASS) {
 791                                usb3v3.supply = "ldousb";
 792                                regulator = TWL6025_REG_LDOUSB;
 793                        } else {
 794                                usb3v3.supply = "vusb";
 795                                regulator = TWL6030_REG_VUSB;
 796                        }
 797                        child = add_regulator_linked(regulator, &usb_fixed,
 798                                                        &usb3v3, 1,
 799                                                        features);
 800                        if (IS_ERR(child))
 801                                return PTR_ERR(child);
 802                }
 803
 804                pdata->usb->features = features;
 805
 806                child = add_child(0, "twl6030_usb",
 807                        pdata->usb, sizeof(*pdata->usb),
 808                        true,
 809                        /* irq1 = VBUS_PRES, irq0 = USB ID */
 810                        irq_base + USBOTG_INTR_OFFSET,
 811                        irq_base + USB_PRES_INTR_OFFSET);
 812
 813                if (IS_ERR(child))
 814                        return PTR_ERR(child);
 815                /* we need to connect regulators to this transceiver */
 816                if (twl_has_regulator() && child)
 817                        usb3v3.dev_name = dev_name(child);
 818        } else if (twl_has_regulator() && twl_class_is_6030()) {
 819                if (features & TWL6025_SUBCLASS)
 820                        child = add_regulator(TWL6025_REG_LDOUSB,
 821                                                pdata->ldousb, features);
 822                else
 823                        child = add_regulator(TWL6030_REG_VUSB,
 824                                                pdata->vusb, features);
 825
 826                        if (IS_ERR(child))
 827                                        return PTR_ERR(child);
 828        }
 829
 830        if (twl_has_watchdog() && twl_class_is_4030()) {
 831                child = add_child(0, "twl4030_wdt", NULL, 0, false, 0, 0);
 832                if (IS_ERR(child))
 833                        return PTR_ERR(child);
 834        }
 835
 836        if (twl_has_pwrbutton() && twl_class_is_4030()) {
 837                child = add_child(1, "twl4030_pwrbutton",
 838                                NULL, 0, true, irq_base + 8 + 0, 0);
 839                if (IS_ERR(child))
 840                        return PTR_ERR(child);
 841        }
 842
 843        if (twl_has_codec() && pdata->audio && twl_class_is_4030()) {
 844                sub_chip_id = twl_map[TWL_MODULE_AUDIO_VOICE].sid;
 845                child = add_child(sub_chip_id, "twl4030-audio",
 846                                pdata->audio, sizeof(*pdata->audio),
 847                                false, 0, 0);
 848                if (IS_ERR(child))
 849                        return PTR_ERR(child);
 850        }
 851
 852        /* twl4030 regulators */
 853        if (twl_has_regulator() && twl_class_is_4030()) {
 854                child = add_regulator(TWL4030_REG_VPLL1, pdata->vpll1,
 855                                        features);
 856                if (IS_ERR(child))
 857                        return PTR_ERR(child);
 858
 859                child = add_regulator(TWL4030_REG_VIO, pdata->vio,
 860                                        features);
 861                if (IS_ERR(child))
 862                        return PTR_ERR(child);
 863
 864                child = add_regulator(TWL4030_REG_VDD1, pdata->vdd1,
 865                                        features);
 866                if (IS_ERR(child))
 867                        return PTR_ERR(child);
 868
 869                child = add_regulator(TWL4030_REG_VDD2, pdata->vdd2,
 870                                        features);
 871                if (IS_ERR(child))
 872                        return PTR_ERR(child);
 873
 874                child = add_regulator(TWL4030_REG_VMMC1, pdata->vmmc1,
 875                                        features);
 876                if (IS_ERR(child))
 877                        return PTR_ERR(child);
 878
 879                child = add_regulator(TWL4030_REG_VDAC, pdata->vdac,
 880                                        features);
 881                if (IS_ERR(child))
 882                        return PTR_ERR(child);
 883
 884                child = add_regulator((features & TWL4030_VAUX2)
 885                                        ? TWL4030_REG_VAUX2_4030
 886                                        : TWL4030_REG_VAUX2,
 887                                pdata->vaux2, features);
 888                if (IS_ERR(child))
 889                        return PTR_ERR(child);
 890
 891                child = add_regulator(TWL4030_REG_VINTANA1, pdata->vintana1,
 892                                        features);
 893                if (IS_ERR(child))
 894                        return PTR_ERR(child);
 895
 896                child = add_regulator(TWL4030_REG_VINTANA2, pdata->vintana2,
 897                                        features);
 898                if (IS_ERR(child))
 899                        return PTR_ERR(child);
 900
 901                child = add_regulator(TWL4030_REG_VINTDIG, pdata->vintdig,
 902                                        features);
 903                if (IS_ERR(child))
 904                        return PTR_ERR(child);
 905        }
 906
 907        /* maybe add LDOs that are omitted on cost-reduced parts */
 908        if (twl_has_regulator() && !(features & TPS_SUBSET)
 909          && twl_class_is_4030()) {
 910                child = add_regulator(TWL4030_REG_VPLL2, pdata->vpll2,
 911                                        features);
 912                if (IS_ERR(child))
 913                        return PTR_ERR(child);
 914
 915                child = add_regulator(TWL4030_REG_VMMC2, pdata->vmmc2,
 916                                        features);
 917                if (IS_ERR(child))
 918                        return PTR_ERR(child);
 919
 920                child = add_regulator(TWL4030_REG_VSIM, pdata->vsim,
 921                                        features);
 922                if (IS_ERR(child))
 923                        return PTR_ERR(child);
 924
 925                child = add_regulator(TWL4030_REG_VAUX1, pdata->vaux1,
 926                                        features);
 927                if (IS_ERR(child))
 928                        return PTR_ERR(child);
 929
 930                child = add_regulator(TWL4030_REG_VAUX3, pdata->vaux3,
 931                                        features);
 932                if (IS_ERR(child))
 933                        return PTR_ERR(child);
 934
 935                child = add_regulator(TWL4030_REG_VAUX4, pdata->vaux4,
 936                                        features);
 937                if (IS_ERR(child))
 938                        return PTR_ERR(child);
 939        }
 940
 941        /* twl6030 regulators */
 942        if (twl_has_regulator() && twl_class_is_6030() &&
 943                        !(features & TWL6025_SUBCLASS)) {
 944                child = add_regulator(TWL6030_REG_VDD1, pdata->vdd1,
 945                                        features);
 946                if (IS_ERR(child))
 947                        return PTR_ERR(child);
 948
 949                child = add_regulator(TWL6030_REG_VDD2, pdata->vdd2,
 950                                        features);
 951                if (IS_ERR(child))
 952                        return PTR_ERR(child);
 953
 954                child = add_regulator(TWL6030_REG_VDD3, pdata->vdd3,
 955                                        features);
 956                if (IS_ERR(child))
 957                        return PTR_ERR(child);
 958
 959                child = add_regulator(TWL6030_REG_V1V8, pdata->v1v8,
 960                                        features);
 961                if (IS_ERR(child))
 962                        return PTR_ERR(child);
 963
 964                child = add_regulator(TWL6030_REG_V2V1, pdata->v2v1,
 965                                        features);
 966                if (IS_ERR(child))
 967                        return PTR_ERR(child);
 968
 969                child = add_regulator(TWL6030_REG_VMMC, pdata->vmmc,
 970                                        features);
 971                if (IS_ERR(child))
 972                        return PTR_ERR(child);
 973
 974                child = add_regulator(TWL6030_REG_VPP, pdata->vpp,
 975                                        features);
 976                if (IS_ERR(child))
 977                        return PTR_ERR(child);
 978
 979                child = add_regulator(TWL6030_REG_VUSIM, pdata->vusim,
 980                                        features);
 981                if (IS_ERR(child))
 982                        return PTR_ERR(child);
 983
 984                child = add_regulator(TWL6030_REG_VCXIO, pdata->vcxio,
 985                                        features);
 986                if (IS_ERR(child))
 987                        return PTR_ERR(child);
 988
 989                child = add_regulator(TWL6030_REG_VDAC, pdata->vdac,
 990                                        features);
 991                if (IS_ERR(child))
 992                        return PTR_ERR(child);
 993
 994                child = add_regulator(TWL6030_REG_VAUX1_6030, pdata->vaux1,
 995                                        features);
 996                if (IS_ERR(child))
 997                        return PTR_ERR(child);
 998
 999                child = add_regulator(TWL6030_REG_VAUX2_6030, pdata->vaux2,
1000                                        features);
1001                if (IS_ERR(child))
1002                        return PTR_ERR(child);
1003
1004                child = add_regulator(TWL6030_REG_VAUX3_6030, pdata->vaux3,
1005                                        features);
1006                if (IS_ERR(child))
1007                        return PTR_ERR(child);
1008
1009                child = add_regulator(TWL6030_REG_CLK32KG, pdata->clk32kg,
1010                                        features);
1011                if (IS_ERR(child))
1012                        return PTR_ERR(child);
1013        }
1014
1015        /* 6030 and 6025 share this regulator */
1016        if (twl_has_regulator() && twl_class_is_6030()) {
1017                child = add_regulator(TWL6030_REG_VANA, pdata->vana,
1018                                        features);
1019                if (IS_ERR(child))
1020                        return PTR_ERR(child);
1021        }
1022
1023        /* twl6025 regulators */
1024        if (twl_has_regulator() && twl_class_is_6030() &&
1025                        (features & TWL6025_SUBCLASS)) {
1026                child = add_regulator(TWL6025_REG_LDO5, pdata->ldo5,
1027                                        features);
1028                if (IS_ERR(child))
1029                        return PTR_ERR(child);
1030
1031                child = add_regulator(TWL6025_REG_LDO1, pdata->ldo1,
1032                                        features);
1033                if (IS_ERR(child))
1034                        return PTR_ERR(child);
1035
1036                child = add_regulator(TWL6025_REG_LDO7, pdata->ldo7,
1037                                        features);
1038                if (IS_ERR(child))
1039                        return PTR_ERR(child);
1040
1041                child = add_regulator(TWL6025_REG_LDO6, pdata->ldo6,
1042                                        features);
1043                if (IS_ERR(child))
1044                        return PTR_ERR(child);
1045
1046                child = add_regulator(TWL6025_REG_LDOLN, pdata->ldoln,
1047                                        features);
1048                if (IS_ERR(child))
1049                        return PTR_ERR(child);
1050
1051                child = add_regulator(TWL6025_REG_LDO2, pdata->ldo2,
1052                                        features);
1053                if (IS_ERR(child))
1054                        return PTR_ERR(child);
1055
1056                child = add_regulator(TWL6025_REG_LDO4, pdata->ldo4,
1057                                        features);
1058                if (IS_ERR(child))
1059                        return PTR_ERR(child);
1060
1061                child = add_regulator(TWL6025_REG_LDO3, pdata->ldo3,
1062                                        features);
1063                if (IS_ERR(child))
1064                        return PTR_ERR(child);
1065
1066                child = add_regulator(TWL6025_REG_SMPS3, pdata->smps3,
1067                                        features);
1068                if (IS_ERR(child))
1069                        return PTR_ERR(child);
1070
1071                child = add_regulator(TWL6025_REG_SMPS4, pdata->smps4,
1072                                        features);
1073                if (IS_ERR(child))
1074                        return PTR_ERR(child);
1075
1076                child = add_regulator(TWL6025_REG_VIO, pdata->vio6025,
1077                                        features);
1078                if (IS_ERR(child))
1079                        return PTR_ERR(child);
1080
1081        }
1082
1083        if (twl_has_bci() && pdata->bci &&
1084                        !(features & (TPS_SUBSET | TWL5031))) {
1085                child = add_child(3, "twl4030_bci",
1086                                pdata->bci, sizeof(*pdata->bci), false,
1087                                /* irq0 = CHG_PRES, irq1 = BCI */
1088                                irq_base + BCI_PRES_INTR_OFFSET,
1089                                irq_base + BCI_INTR_OFFSET);
1090                if (IS_ERR(child))
1091                        return PTR_ERR(child);
1092        }
1093
1094        return 0;
1095}
1096
1097/*----------------------------------------------------------------------*/
1098
1099/*
1100 * These three functions initialize the on-chip clock framework,
1101 * letting it generate the right frequencies for USB, MADC, and
1102 * other purposes.
1103 */
1104static inline int __init protect_pm_master(void)
1105{
1106        int e = 0;
1107
1108        e = twl_i2c_write_u8(TWL4030_MODULE_PM_MASTER, 0,
1109                        TWL4030_PM_MASTER_PROTECT_KEY);
1110        return e;
1111}
1112
1113static inline int __init unprotect_pm_master(void)
1114{
1115        int e = 0;
1116
1117        e |= twl_i2c_write_u8(TWL4030_MODULE_PM_MASTER,
1118                        TWL4030_PM_MASTER_KEY_CFG1,
1119                        TWL4030_PM_MASTER_PROTECT_KEY);
1120        e |= twl_i2c_write_u8(TWL4030_MODULE_PM_MASTER,
1121                        TWL4030_PM_MASTER_KEY_CFG2,
1122                        TWL4030_PM_MASTER_PROTECT_KEY);
1123
1124        return e;
1125}
1126
1127static void clocks_init(struct device *dev,
1128                        struct twl4030_clock_init_data *clock)
1129{
1130        int e = 0;
1131        struct clk *osc;
1132        u32 rate;
1133        u8 ctrl = HFCLK_FREQ_26_MHZ;
1134
1135#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
1136        if (cpu_is_omap2430())
1137                osc = clk_get(dev, "osc_ck");
1138        else
1139                osc = clk_get(dev, "osc_sys_ck");
1140
1141        if (IS_ERR(osc)) {
1142                printk(KERN_WARNING "Skipping twl internal clock init and "
1143                                "using bootloader value (unknown osc rate)\n");
1144                return;
1145        }
1146
1147        rate = clk_get_rate(osc);
1148        clk_put(osc);
1149
1150#else
1151        /* REVISIT for non-OMAP systems, pass the clock rate from
1152         * board init code, using platform_data.
1153         */
1154        osc = ERR_PTR(-EIO);
1155
1156        printk(KERN_WARNING "Skipping twl internal clock init and "
1157               "using bootloader value (unknown osc rate)\n");
1158
1159        return;
1160#endif
1161
1162        switch (rate) {
1163        case 19200000:
1164                ctrl = HFCLK_FREQ_19p2_MHZ;
1165                break;
1166        case 26000000:
1167                ctrl = HFCLK_FREQ_26_MHZ;
1168                break;
1169        case 38400000:
1170                ctrl = HFCLK_FREQ_38p4_MHZ;
1171                break;
1172        }
1173
1174        ctrl |= HIGH_PERF_SQ;
1175        if (clock && clock->ck32k_lowpwr_enable)
1176                ctrl |= CK32K_LOWPWR_EN;
1177
1178        e |= unprotect_pm_master();
1179        /* effect->MADC+USB ck en */
1180        e |= twl_i2c_write_u8(TWL_MODULE_PM_MASTER, ctrl, R_CFG_BOOT);
1181        e |= protect_pm_master();
1182
1183        if (e < 0)
1184                pr_err("%s: clock init err [%d]\n", DRIVER_NAME, e);
1185}
1186
1187/*----------------------------------------------------------------------*/
1188
1189
1190static int twl_remove(struct i2c_client *client)
1191{
1192        unsigned i, num_slaves;
1193        int status;
1194
1195        if (twl_class_is_4030()) {
1196                status = twl4030_exit_irq();
1197                num_slaves = TWL_NUM_SLAVES;
1198        } else {
1199                status = twl6030_exit_irq();
1200                num_slaves = TWL_NUM_SLAVES - 1;
1201        }
1202
1203        if (status < 0)
1204                return status;
1205
1206        for (i = 0; i < num_slaves; i++) {
1207                struct twl_client       *twl = &twl_modules[i];
1208
1209                if (twl->client && twl->client != client)
1210                        i2c_unregister_device(twl->client);
1211                twl_modules[i].client = NULL;
1212        }
1213        inuse = false;
1214        return 0;
1215}
1216
1217/* NOTE: This driver only handles a single twl4030/tps659x0 chip */
1218static int __devinit
1219twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
1220{
1221        struct twl4030_platform_data    *pdata = client->dev.platform_data;
1222        struct device_node              *node = client->dev.of_node;
1223        int                             irq_base = 0;
1224        int                             status;
1225        unsigned                        i, num_slaves;
1226
1227        if (node && !pdata) {
1228                /*
1229                 * XXX: Temporary pdata until the information is correctly
1230                 * retrieved by every TWL modules from DT.
1231                 */
1232                pdata = devm_kzalloc(&client->dev,
1233                                     sizeof(struct twl4030_platform_data),
1234                                     GFP_KERNEL);
1235                if (!pdata)
1236                        return -ENOMEM;
1237        }
1238
1239        if (!pdata) {
1240                dev_dbg(&client->dev, "no platform data?\n");
1241                return -EINVAL;
1242        }
1243
1244        if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C) == 0) {
1245                dev_dbg(&client->dev, "can't talk I2C?\n");
1246                return -EIO;
1247        }
1248
1249        if (inuse) {
1250                dev_dbg(&client->dev, "driver is already in use\n");
1251                return -EBUSY;
1252        }
1253
1254        if ((id->driver_data) & TWL6030_CLASS) {
1255                twl_id = TWL6030_CLASS_ID;
1256                twl_map = &twl6030_map[0];
1257                num_slaves = TWL_NUM_SLAVES - 1;
1258        } else {
1259                twl_id = TWL4030_CLASS_ID;
1260                twl_map = &twl4030_map[0];
1261                num_slaves = TWL_NUM_SLAVES;
1262        }
1263
1264        for (i = 0; i < num_slaves; i++) {
1265                struct twl_client *twl = &twl_modules[i];
1266
1267                twl->address = client->addr + i;
1268                if (i == 0) {
1269                        twl->client = client;
1270                } else {
1271                        twl->client = i2c_new_dummy(client->adapter,
1272                                        twl->address);
1273                        if (!twl->client) {
1274                                dev_err(&client->dev,
1275                                        "can't attach client %d\n", i);
1276                                status = -ENOMEM;
1277                                goto fail;
1278                        }
1279                }
1280                mutex_init(&twl->xfer_lock);
1281        }
1282
1283        inuse = true;
1284
1285        /* setup clock framework */
1286        clocks_init(&client->dev, pdata->clock);
1287
1288        /* read TWL IDCODE Register */
1289        if (twl_id == TWL4030_CLASS_ID) {
1290                status = twl_read_idcode_register();
1291                WARN(status < 0, "Error: reading twl_idcode register value\n");
1292        }
1293
1294        /* load power event scripts */
1295        if (twl_has_power() && pdata->power)
1296                twl4030_power_init(pdata->power);
1297
1298        /* Maybe init the T2 Interrupt subsystem */
1299        if (client->irq) {
1300                if (twl_class_is_4030()) {
1301                        twl4030_init_chip_irq(id->name);
1302                        irq_base = twl4030_init_irq(&client->dev, client->irq);
1303                } else {
1304                        irq_base = twl6030_init_irq(&client->dev, client->irq);
1305                }
1306
1307                if (irq_base < 0) {
1308                        status = irq_base;
1309                        goto fail;
1310                }
1311        }
1312
1313        /*
1314         * Disable TWL4030/TWL5030 I2C Pull-up on I2C1 and I2C4(SR) interface.
1315         * Program I2C_SCL_CTRL_PU(bit 0)=0, I2C_SDA_CTRL_PU (bit 2)=0,
1316         * SR_I2C_SCL_CTRL_PU(bit 4)=0 and SR_I2C_SDA_CTRL_PU(bit 6)=0.
1317         */
1318        if (twl_class_is_4030()) {
1319                u8 temp;
1320
1321                twl_i2c_read_u8(TWL4030_MODULE_INTBR, &temp, REG_GPPUPDCTR1);
1322                temp &= ~(SR_I2C_SDA_CTRL_PU | SR_I2C_SCL_CTRL_PU | \
1323                        I2C_SDA_CTRL_PU | I2C_SCL_CTRL_PU);
1324                twl_i2c_write_u8(TWL4030_MODULE_INTBR, temp, REG_GPPUPDCTR1);
1325        }
1326
1327        status = -ENODEV;
1328        if (node)
1329                status = of_platform_populate(node, NULL, NULL, &client->dev);
1330        if (status)
1331                status = add_children(pdata, irq_base, id->driver_data);
1332
1333fail:
1334        if (status < 0)
1335                twl_remove(client);
1336
1337        return status;
1338}
1339
1340static const struct i2c_device_id twl_ids[] = {
1341        { "twl4030", TWL4030_VAUX2 },   /* "Triton 2" */
1342        { "twl5030", 0 },               /* T2 updated */
1343        { "twl5031", TWL5031 },         /* TWL5030 updated */
1344        { "tps65950", 0 },              /* catalog version of twl5030 */
1345        { "tps65930", TPS_SUBSET },     /* fewer LDOs and DACs; no charger */
1346        { "tps65920", TPS_SUBSET },     /* fewer LDOs; no codec or charger */
1347        { "tps65921", TPS_SUBSET },     /* fewer LDOs; no codec, no LED
1348                                           and vibrator. Charger in USB module*/
1349        { "twl6030", TWL6030_CLASS },   /* "Phoenix power chip" */
1350        { "twl6025", TWL6030_CLASS | TWL6025_SUBCLASS }, /* "Phoenix lite" */
1351        { /* end of list */ },
1352};
1353MODULE_DEVICE_TABLE(i2c, twl_ids);
1354
1355/* One Client Driver , 4 Clients */
1356static struct i2c_driver twl_driver = {
1357        .driver.name    = DRIVER_NAME,
1358        .id_table       = twl_ids,
1359        .probe          = twl_probe,
1360        .remove         = twl_remove,
1361};
1362
1363static int __init twl_init(void)
1364{
1365        return i2c_add_driver(&twl_driver);
1366}
1367subsys_initcall(twl_init);
1368
1369static void __exit twl_exit(void)
1370{
1371        i2c_del_driver(&twl_driver);
1372}
1373module_exit(twl_exit);
1374
1375MODULE_AUTHOR("Texas Instruments, Inc.");
1376MODULE_DESCRIPTION("I2C Core interface for TWL");
1377MODULE_LICENSE("GPL");
1378
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.