~ubuntu-branches/debian/wheezy/linux-2.6/wheezy

« back to all changes in this revision

Viewing changes to drivers/mfd/twl-core.c

  • Committer: Bazaar Package Importer
  • Author(s): Ben Hutchings, Ben Hutchings, Aurelien Jarno, Martin Michlmayr
  • Date: 2011-04-06 13:53:30 UTC
  • mfrom: (43.1.5 sid)
  • Revision ID: james.westby@ubuntu.com-20110406135330-wjufxhd0tvn3zx4z
Tags: 2.6.38-3
[ Ben Hutchings ]
* [ppc64] Add to linux-tools package architectures (Closes: #620124)
* [amd64] Save cr4 to mmu_cr4_features at boot time (Closes: #620284)
* appletalk: Fix bugs introduced when removing use of BKL
* ALSA: Fix yet another race in disconnection
* cciss: Fix lost command issue
* ath9k: Fix kernel panic in AR2427
* ses: Avoid kernel panic when lun 0 is not mapped
* PCI/ACPI: Report ASPM support to BIOS if not disabled from command line

[ Aurelien Jarno ]
* rtlwifi: fix build when PCI is not enabled.

[ Martin Michlmayr ]
* rtlwifi: Eliminate udelay calls with too large values (Closes: #620204)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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/platform_device.h>
 
34
#include <linux/clk.h>
 
35
#include <linux/err.h>
 
36
 
 
37
#include <linux/regulator/machine.h>
 
38
 
 
39
#include <linux/i2c.h>
 
40
#include <linux/i2c/twl.h>
 
41
 
 
42
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
 
43
#include <plat/cpu.h>
 
44
#endif
 
45
 
 
46
/*
 
47
 * The TWL4030 "Triton 2" is one of a family of a multi-function "Power
 
48
 * Management and System Companion Device" chips originally designed for
 
49
 * use in OMAP2 and OMAP 3 based systems.  Its control interfaces use I2C,
 
50
 * often at around 3 Mbit/sec, including for interrupt handling.
 
51
 *
 
52
 * This driver core provides genirq support for the interrupts emitted,
 
53
 * by the various modules, and exports register access primitives.
 
54
 *
 
55
 * FIXME this driver currently requires use of the first interrupt line
 
56
 * (and associated registers).
 
57
 */
 
58
 
 
59
#define DRIVER_NAME                     "twl"
 
60
 
 
61
#if defined(CONFIG_KEYBOARD_TWL4030) || defined(CONFIG_KEYBOARD_TWL4030_MODULE)
 
62
#define twl_has_keypad()        true
 
63
#else
 
64
#define twl_has_keypad()        false
 
65
#endif
 
66
 
 
67
#if defined(CONFIG_GPIO_TWL4030) || defined(CONFIG_GPIO_TWL4030_MODULE)
 
68
#define twl_has_gpio()  true
 
69
#else
 
70
#define twl_has_gpio()  false
 
71
#endif
 
72
 
 
73
#if defined(CONFIG_REGULATOR_TWL4030) \
 
74
        || defined(CONFIG_REGULATOR_TWL4030_MODULE)
 
75
#define twl_has_regulator()     true
 
76
#else
 
77
#define twl_has_regulator()     false
 
78
#endif
 
79
 
 
80
#if defined(CONFIG_TWL4030_MADC) || defined(CONFIG_TWL4030_MADC_MODULE)
 
81
#define twl_has_madc()  true
 
82
#else
 
83
#define twl_has_madc()  false
 
84
#endif
 
85
 
 
86
#ifdef CONFIG_TWL4030_POWER
 
87
#define twl_has_power()        true
 
88
#else
 
89
#define twl_has_power()        false
 
90
#endif
 
91
 
 
92
#if defined(CONFIG_RTC_DRV_TWL4030) || defined(CONFIG_RTC_DRV_TWL4030_MODULE)
 
93
#define twl_has_rtc()   true
 
94
#else
 
95
#define twl_has_rtc()   false
 
96
#endif
 
97
 
 
98
#if defined(CONFIG_TWL4030_USB) || defined(CONFIG_TWL4030_USB_MODULE) ||\
 
99
        defined(CONFIG_TWL6030_USB) || defined(CONFIG_TWL6030_USB_MODULE)
 
100
#define twl_has_usb()   true
 
101
#else
 
102
#define twl_has_usb()   false
 
103
#endif
 
104
 
 
105
#if defined(CONFIG_TWL4030_WATCHDOG) || \
 
106
        defined(CONFIG_TWL4030_WATCHDOG_MODULE)
 
107
#define twl_has_watchdog()        true
 
108
#else
 
109
#define twl_has_watchdog()        false
 
110
#endif
 
111
 
 
112
#if defined(CONFIG_TWL4030_CODEC) || defined(CONFIG_TWL4030_CODEC_MODULE) ||\
 
113
        defined(CONFIG_SND_SOC_TWL6040) || defined(CONFIG_SND_SOC_TWL6040_MODULE)
 
114
#define twl_has_codec() true
 
115
#else
 
116
#define twl_has_codec() false
 
117
#endif
 
118
 
 
119
#if defined(CONFIG_CHARGER_TWL4030) || defined(CONFIG_CHARGER_TWL4030_MODULE)
 
120
#define twl_has_bci()   true
 
121
#else
 
122
#define twl_has_bci()   false
 
123
#endif
 
124
 
 
125
/* Triton Core internal information (BEGIN) */
 
126
 
 
127
/* Last - for index max*/
 
128
#define TWL4030_MODULE_LAST             TWL4030_MODULE_SECURED_REG
 
129
 
 
130
#define TWL_NUM_SLAVES          4
 
131
 
 
132
#if defined(CONFIG_INPUT_TWL4030_PWRBUTTON) \
 
133
        || defined(CONFIG_INPUT_TWL4030_PWRBUTTON_MODULE)
 
134
#define twl_has_pwrbutton()     true
 
135
#else
 
136
#define twl_has_pwrbutton()     false
 
137
#endif
 
138
 
 
139
#define SUB_CHIP_ID0 0
 
140
#define SUB_CHIP_ID1 1
 
141
#define SUB_CHIP_ID2 2
 
142
#define SUB_CHIP_ID3 3
 
143
 
 
144
#define TWL_MODULE_LAST TWL4030_MODULE_LAST
 
145
 
 
146
/* Base Address defns for twl4030_map[] */
 
147
 
 
148
/* subchip/slave 0 - USB ID */
 
149
#define TWL4030_BASEADD_USB             0x0000
 
150
 
 
151
/* subchip/slave 1 - AUD ID */
 
152
#define TWL4030_BASEADD_AUDIO_VOICE     0x0000
 
153
#define TWL4030_BASEADD_GPIO            0x0098
 
154
#define TWL4030_BASEADD_INTBR           0x0085
 
155
#define TWL4030_BASEADD_PIH             0x0080
 
156
#define TWL4030_BASEADD_TEST            0x004C
 
157
 
 
158
/* subchip/slave 2 - AUX ID */
 
159
#define TWL4030_BASEADD_INTERRUPTS      0x00B9
 
160
#define TWL4030_BASEADD_LED             0x00EE
 
161
#define TWL4030_BASEADD_MADC            0x0000
 
162
#define TWL4030_BASEADD_MAIN_CHARGE     0x0074
 
163
#define TWL4030_BASEADD_PRECHARGE       0x00AA
 
164
#define TWL4030_BASEADD_PWM0            0x00F8
 
165
#define TWL4030_BASEADD_PWM1            0x00FB
 
166
#define TWL4030_BASEADD_PWMA            0x00EF
 
167
#define TWL4030_BASEADD_PWMB            0x00F1
 
168
#define TWL4030_BASEADD_KEYPAD          0x00D2
 
169
 
 
170
#define TWL5031_BASEADD_ACCESSORY       0x0074 /* Replaces Main Charge */
 
171
#define TWL5031_BASEADD_INTERRUPTS      0x00B9 /* Different than TWL4030's
 
172
                                                  one */
 
173
 
 
174
/* subchip/slave 3 - POWER ID */
 
175
#define TWL4030_BASEADD_BACKUP          0x0014
 
176
#define TWL4030_BASEADD_INT             0x002E
 
177
#define TWL4030_BASEADD_PM_MASTER       0x0036
 
178
#define TWL4030_BASEADD_PM_RECEIVER     0x005B
 
179
#define TWL4030_BASEADD_RTC             0x001C
 
180
#define TWL4030_BASEADD_SECURED_REG     0x0000
 
181
 
 
182
/* Triton Core internal information (END) */
 
183
 
 
184
 
 
185
/* subchip/slave 0 0x48 - POWER */
 
186
#define TWL6030_BASEADD_RTC             0x0000
 
187
#define TWL6030_BASEADD_MEM             0x0017
 
188
#define TWL6030_BASEADD_PM_MASTER       0x001F
 
189
#define TWL6030_BASEADD_PM_SLAVE_MISC   0x0030 /* PM_RECEIVER */
 
190
#define TWL6030_BASEADD_PM_MISC         0x00E2
 
191
#define TWL6030_BASEADD_PM_PUPD         0x00F0
 
192
 
 
193
/* subchip/slave 1 0x49 - FEATURE */
 
194
#define TWL6030_BASEADD_USB             0x0000
 
195
#define TWL6030_BASEADD_GPADC_CTRL      0x002E
 
196
#define TWL6030_BASEADD_AUX             0x0090
 
197
#define TWL6030_BASEADD_PWM             0x00BA
 
198
#define TWL6030_BASEADD_GASGAUGE        0x00C0
 
199
#define TWL6030_BASEADD_PIH             0x00D0
 
200
#define TWL6030_BASEADD_CHARGER         0x00E0
 
201
 
 
202
/* subchip/slave 2 0x4A - DFT */
 
203
#define TWL6030_BASEADD_DIEID           0x00C0
 
204
 
 
205
/* subchip/slave 3 0x4B - AUDIO */
 
206
#define TWL6030_BASEADD_AUDIO           0x0000
 
207
#define TWL6030_BASEADD_RSV             0x0000
 
208
#define TWL6030_BASEADD_ZERO            0x0000
 
209
 
 
210
/* Few power values */
 
211
#define R_CFG_BOOT                      0x05
 
212
 
 
213
/* some fields in R_CFG_BOOT */
 
214
#define HFCLK_FREQ_19p2_MHZ             (1 << 0)
 
215
#define HFCLK_FREQ_26_MHZ               (2 << 0)
 
216
#define HFCLK_FREQ_38p4_MHZ             (3 << 0)
 
217
#define HIGH_PERF_SQ                    (1 << 3)
 
218
#define CK32K_LOWPWR_EN                 (1 << 7)
 
219
 
 
220
 
 
221
/* chip-specific feature flags, for i2c_device_id.driver_data */
 
222
#define TWL4030_VAUX2           BIT(0)  /* pre-5030 voltage ranges */
 
223
#define TPS_SUBSET              BIT(1)  /* tps659[23]0 have fewer LDOs */
 
224
#define TWL5031                 BIT(2)  /* twl5031 has different registers */
 
225
#define TWL6030_CLASS           BIT(3)  /* TWL6030 class */
 
226
 
 
227
/*----------------------------------------------------------------------*/
 
228
 
 
229
/* is driver active, bound to a chip? */
 
230
static bool inuse;
 
231
 
 
232
static unsigned int twl_id;
 
233
unsigned int twl_rev(void)
 
234
{
 
235
        return twl_id;
 
236
}
 
237
EXPORT_SYMBOL(twl_rev);
 
238
 
 
239
/* Structure for each TWL4030/TWL6030 Slave */
 
240
struct twl_client {
 
241
        struct i2c_client *client;
 
242
        u8 address;
 
243
 
 
244
        /* max numb of i2c_msg required is for read =2 */
 
245
        struct i2c_msg xfer_msg[2];
 
246
 
 
247
        /* To lock access to xfer_msg */
 
248
        struct mutex xfer_lock;
 
249
};
 
250
 
 
251
static struct twl_client twl_modules[TWL_NUM_SLAVES];
 
252
 
 
253
 
 
254
/* mapping the module id to slave id and base address */
 
255
struct twl_mapping {
 
256
        unsigned char sid;      /* Slave ID */
 
257
        unsigned char base;     /* base address */
 
258
};
 
259
static struct twl_mapping *twl_map;
 
260
 
 
261
static struct twl_mapping twl4030_map[TWL4030_MODULE_LAST + 1] = {
 
262
        /*
 
263
         * NOTE:  don't change this table without updating the
 
264
         * <linux/i2c/twl.h> defines for TWL4030_MODULE_*
 
265
         * so they continue to match the order in this table.
 
266
         */
 
267
 
 
268
        { 0, TWL4030_BASEADD_USB },
 
269
 
 
270
        { 1, TWL4030_BASEADD_AUDIO_VOICE },
 
271
        { 1, TWL4030_BASEADD_GPIO },
 
272
        { 1, TWL4030_BASEADD_INTBR },
 
273
        { 1, TWL4030_BASEADD_PIH },
 
274
        { 1, TWL4030_BASEADD_TEST },
 
275
 
 
276
        { 2, TWL4030_BASEADD_KEYPAD },
 
277
        { 2, TWL4030_BASEADD_MADC },
 
278
        { 2, TWL4030_BASEADD_INTERRUPTS },
 
279
        { 2, TWL4030_BASEADD_LED },
 
280
        { 2, TWL4030_BASEADD_MAIN_CHARGE },
 
281
        { 2, TWL4030_BASEADD_PRECHARGE },
 
282
        { 2, TWL4030_BASEADD_PWM0 },
 
283
        { 2, TWL4030_BASEADD_PWM1 },
 
284
        { 2, TWL4030_BASEADD_PWMA },
 
285
        { 2, TWL4030_BASEADD_PWMB },
 
286
        { 2, TWL5031_BASEADD_ACCESSORY },
 
287
        { 2, TWL5031_BASEADD_INTERRUPTS },
 
288
 
 
289
        { 3, TWL4030_BASEADD_BACKUP },
 
290
        { 3, TWL4030_BASEADD_INT },
 
291
        { 3, TWL4030_BASEADD_PM_MASTER },
 
292
        { 3, TWL4030_BASEADD_PM_RECEIVER },
 
293
        { 3, TWL4030_BASEADD_RTC },
 
294
        { 3, TWL4030_BASEADD_SECURED_REG },
 
295
};
 
296
 
 
297
static struct twl_mapping twl6030_map[] = {
 
298
        /*
 
299
         * NOTE:  don't change this table without updating the
 
300
         * <linux/i2c/twl.h> defines for TWL4030_MODULE_*
 
301
         * so they continue to match the order in this table.
 
302
         */
 
303
        { SUB_CHIP_ID1, TWL6030_BASEADD_USB },
 
304
        { SUB_CHIP_ID3, TWL6030_BASEADD_AUDIO },
 
305
        { SUB_CHIP_ID2, TWL6030_BASEADD_DIEID },
 
306
        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 
307
        { SUB_CHIP_ID1, TWL6030_BASEADD_PIH },
 
308
 
 
309
        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 
310
        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 
311
        { SUB_CHIP_ID1, TWL6030_BASEADD_GPADC_CTRL },
 
312
        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 
313
        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 
314
 
 
315
        { SUB_CHIP_ID1, TWL6030_BASEADD_CHARGER },
 
316
        { SUB_CHIP_ID1, TWL6030_BASEADD_GASGAUGE },
 
317
        { SUB_CHIP_ID1, TWL6030_BASEADD_PWM },
 
318
        { SUB_CHIP_ID0, TWL6030_BASEADD_ZERO },
 
319
        { SUB_CHIP_ID1, TWL6030_BASEADD_ZERO },
 
320
 
 
321
        { SUB_CHIP_ID2, TWL6030_BASEADD_ZERO },
 
322
        { SUB_CHIP_ID2, TWL6030_BASEADD_ZERO },
 
323
        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 
324
        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 
325
        { SUB_CHIP_ID2, TWL6030_BASEADD_RSV },
 
326
        { SUB_CHIP_ID0, TWL6030_BASEADD_PM_MASTER },
 
327
        { SUB_CHIP_ID0, TWL6030_BASEADD_PM_SLAVE_MISC },
 
328
 
 
329
        { SUB_CHIP_ID0, TWL6030_BASEADD_RTC },
 
330
        { SUB_CHIP_ID0, TWL6030_BASEADD_MEM },
 
331
};
 
332
 
 
333
/*----------------------------------------------------------------------*/
 
334
 
 
335
/* Exported Functions */
 
336
 
 
337
/**
 
338
 * twl_i2c_write - Writes a n bit register in TWL4030/TWL5030/TWL60X0
 
339
 * @mod_no: module number
 
340
 * @value: an array of num_bytes+1 containing data to write
 
341
 * @reg: register address (just offset will do)
 
342
 * @num_bytes: number of bytes to transfer
 
343
 *
 
344
 * IMPORTANT: for 'value' parameter: Allocate value num_bytes+1 and
 
345
 * valid data starts at Offset 1.
 
346
 *
 
347
 * Returns the result of operation - 0 is success
 
348
 */
 
349
int twl_i2c_write(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes)
 
350
{
 
351
        int ret;
 
352
        int sid;
 
353
        struct twl_client *twl;
 
354
        struct i2c_msg *msg;
 
355
 
 
356
        if (unlikely(mod_no > TWL_MODULE_LAST)) {
 
357
                pr_err("%s: invalid module number %d\n", DRIVER_NAME, mod_no);
 
358
                return -EPERM;
 
359
        }
 
360
        sid = twl_map[mod_no].sid;
 
361
        twl = &twl_modules[sid];
 
362
 
 
363
        if (unlikely(!inuse)) {
 
364
                pr_err("%s: client %d is not initialized\n", DRIVER_NAME, sid);
 
365
                return -EPERM;
 
366
        }
 
367
        mutex_lock(&twl->xfer_lock);
 
368
        /*
 
369
         * [MSG1]: fill the register address data
 
370
         * fill the data Tx buffer
 
371
         */
 
372
        msg = &twl->xfer_msg[0];
 
373
        msg->addr = twl->address;
 
374
        msg->len = num_bytes + 1;
 
375
        msg->flags = 0;
 
376
        msg->buf = value;
 
377
        /* over write the first byte of buffer with the register address */
 
378
        *value = twl_map[mod_no].base + reg;
 
379
        ret = i2c_transfer(twl->client->adapter, twl->xfer_msg, 1);
 
380
        mutex_unlock(&twl->xfer_lock);
 
381
 
 
382
        /* i2c_transfer returns number of messages transferred */
 
383
        if (ret != 1) {
 
384
                pr_err("%s: i2c_write failed to transfer all messages\n",
 
385
                        DRIVER_NAME);
 
386
                if (ret < 0)
 
387
                        return ret;
 
388
                else
 
389
                        return -EIO;
 
390
        } else {
 
391
                return 0;
 
392
        }
 
393
}
 
394
EXPORT_SYMBOL(twl_i2c_write);
 
395
 
 
396
/**
 
397
 * twl_i2c_read - Reads a n bit register in TWL4030/TWL5030/TWL60X0
 
398
 * @mod_no: module number
 
399
 * @value: an array of num_bytes containing data to be read
 
400
 * @reg: register address (just offset will do)
 
401
 * @num_bytes: number of bytes to transfer
 
402
 *
 
403
 * Returns result of operation - num_bytes is success else failure.
 
404
 */
 
405
int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes)
 
406
{
 
407
        int ret;
 
408
        u8 val;
 
409
        int sid;
 
410
        struct twl_client *twl;
 
411
        struct i2c_msg *msg;
 
412
 
 
413
        if (unlikely(mod_no > TWL_MODULE_LAST)) {
 
414
                pr_err("%s: invalid module number %d\n", DRIVER_NAME, mod_no);
 
415
                return -EPERM;
 
416
        }
 
417
        sid = twl_map[mod_no].sid;
 
418
        twl = &twl_modules[sid];
 
419
 
 
420
        if (unlikely(!inuse)) {
 
421
                pr_err("%s: client %d is not initialized\n", DRIVER_NAME, sid);
 
422
                return -EPERM;
 
423
        }
 
424
        mutex_lock(&twl->xfer_lock);
 
425
        /* [MSG1] fill the register address data */
 
426
        msg = &twl->xfer_msg[0];
 
427
        msg->addr = twl->address;
 
428
        msg->len = 1;
 
429
        msg->flags = 0; /* Read the register value */
 
430
        val = twl_map[mod_no].base + reg;
 
431
        msg->buf = &val;
 
432
        /* [MSG2] fill the data rx buffer */
 
433
        msg = &twl->xfer_msg[1];
 
434
        msg->addr = twl->address;
 
435
        msg->flags = I2C_M_RD;  /* Read the register value */
 
436
        msg->len = num_bytes;   /* only n bytes */
 
437
        msg->buf = value;
 
438
        ret = i2c_transfer(twl->client->adapter, twl->xfer_msg, 2);
 
439
        mutex_unlock(&twl->xfer_lock);
 
440
 
 
441
        /* i2c_transfer returns number of messages transferred */
 
442
        if (ret != 2) {
 
443
                pr_err("%s: i2c_read failed to transfer all messages\n",
 
444
                        DRIVER_NAME);
 
445
                if (ret < 0)
 
446
                        return ret;
 
447
                else
 
448
                        return -EIO;
 
449
        } else {
 
450
                return 0;
 
451
        }
 
452
}
 
453
EXPORT_SYMBOL(twl_i2c_read);
 
454
 
 
455
/**
 
456
 * twl_i2c_write_u8 - Writes a 8 bit register in TWL4030/TWL5030/TWL60X0
 
457
 * @mod_no: module number
 
458
 * @value: the value to be written 8 bit
 
459
 * @reg: register address (just offset will do)
 
460
 *
 
461
 * Returns result of operation - 0 is success
 
462
 */
 
463
int twl_i2c_write_u8(u8 mod_no, u8 value, u8 reg)
 
464
{
 
465
 
 
466
        /* 2 bytes offset 1 contains the data offset 0 is used by i2c_write */
 
467
        u8 temp_buffer[2] = { 0 };
 
468
        /* offset 1 contains the data */
 
469
        temp_buffer[1] = value;
 
470
        return twl_i2c_write(mod_no, temp_buffer, reg, 1);
 
471
}
 
472
EXPORT_SYMBOL(twl_i2c_write_u8);
 
473
 
 
474
/**
 
475
 * twl_i2c_read_u8 - Reads a 8 bit register from TWL4030/TWL5030/TWL60X0
 
476
 * @mod_no: module number
 
477
 * @value: the value read 8 bit
 
478
 * @reg: register address (just offset will do)
 
479
 *
 
480
 * Returns result of operation - 0 is success
 
481
 */
 
482
int twl_i2c_read_u8(u8 mod_no, u8 *value, u8 reg)
 
483
{
 
484
        return twl_i2c_read(mod_no, value, reg, 1);
 
485
}
 
486
EXPORT_SYMBOL(twl_i2c_read_u8);
 
487
 
 
488
/*----------------------------------------------------------------------*/
 
489
 
 
490
static struct device *
 
491
add_numbered_child(unsigned chip, const char *name, int num,
 
492
                void *pdata, unsigned pdata_len,
 
493
                bool can_wakeup, int irq0, int irq1)
 
494
{
 
495
        struct platform_device  *pdev;
 
496
        struct twl_client       *twl = &twl_modules[chip];
 
497
        int                     status;
 
498
 
 
499
        pdev = platform_device_alloc(name, num);
 
500
        if (!pdev) {
 
501
                dev_dbg(&twl->client->dev, "can't alloc dev\n");
 
502
                status = -ENOMEM;
 
503
                goto err;
 
504
        }
 
505
 
 
506
        device_init_wakeup(&pdev->dev, can_wakeup);
 
507
        pdev->dev.parent = &twl->client->dev;
 
508
 
 
509
        if (pdata) {
 
510
                status = platform_device_add_data(pdev, pdata, pdata_len);
 
511
                if (status < 0) {
 
512
                        dev_dbg(&pdev->dev, "can't add platform_data\n");
 
513
                        goto err;
 
514
                }
 
515
        }
 
516
 
 
517
        if (irq0) {
 
518
                struct resource r[2] = {
 
519
                        { .start = irq0, .flags = IORESOURCE_IRQ, },
 
520
                        { .start = irq1, .flags = IORESOURCE_IRQ, },
 
521
                };
 
522
 
 
523
                status = platform_device_add_resources(pdev, r, irq1 ? 2 : 1);
 
524
                if (status < 0) {
 
525
                        dev_dbg(&pdev->dev, "can't add irqs\n");
 
526
                        goto err;
 
527
                }
 
528
        }
 
529
 
 
530
        status = platform_device_add(pdev);
 
531
 
 
532
err:
 
533
        if (status < 0) {
 
534
                platform_device_put(pdev);
 
535
                dev_err(&twl->client->dev, "can't add %s dev\n", name);
 
536
                return ERR_PTR(status);
 
537
        }
 
538
        return &pdev->dev;
 
539
}
 
540
 
 
541
static inline struct device *add_child(unsigned chip, const char *name,
 
542
                void *pdata, unsigned pdata_len,
 
543
                bool can_wakeup, int irq0, int irq1)
 
544
{
 
545
        return add_numbered_child(chip, name, -1, pdata, pdata_len,
 
546
                can_wakeup, irq0, irq1);
 
547
}
 
548
 
 
549
static struct device *
 
550
add_regulator_linked(int num, struct regulator_init_data *pdata,
 
551
                struct regulator_consumer_supply *consumers,
 
552
                unsigned num_consumers)
 
553
{
 
554
        unsigned sub_chip_id;
 
555
        /* regulator framework demands init_data ... */
 
556
        if (!pdata)
 
557
                return NULL;
 
558
 
 
559
        if (consumers) {
 
560
                pdata->consumer_supplies = consumers;
 
561
                pdata->num_consumer_supplies = num_consumers;
 
562
        }
 
563
 
 
564
        /* NOTE:  we currently ignore regulator IRQs, e.g. for short circuits */
 
565
        sub_chip_id = twl_map[TWL_MODULE_PM_MASTER].sid;
 
566
        return add_numbered_child(sub_chip_id, "twl_reg", num,
 
567
                pdata, sizeof(*pdata), false, 0, 0);
 
568
}
 
569
 
 
570
static struct device *
 
571
add_regulator(int num, struct regulator_init_data *pdata)
 
572
{
 
573
        return add_regulator_linked(num, pdata, NULL, 0);
 
574
}
 
575
 
 
576
/*
 
577
 * NOTE:  We know the first 8 IRQs after pdata->base_irq are
 
578
 * for the PIH, and the next are for the PWR_INT SIH, since
 
579
 * that's how twl_init_irq() sets things up.
 
580
 */
 
581
 
 
582
static int
 
583
add_children(struct twl4030_platform_data *pdata, unsigned long features)
 
584
{
 
585
        struct device   *child;
 
586
        unsigned sub_chip_id;
 
587
 
 
588
        if (twl_has_gpio() && pdata->gpio) {
 
589
                child = add_child(SUB_CHIP_ID1, "twl4030_gpio",
 
590
                                pdata->gpio, sizeof(*pdata->gpio),
 
591
                                false, pdata->irq_base + GPIO_INTR_OFFSET, 0);
 
592
                if (IS_ERR(child))
 
593
                        return PTR_ERR(child);
 
594
        }
 
595
 
 
596
        if (twl_has_keypad() && pdata->keypad) {
 
597
                child = add_child(SUB_CHIP_ID2, "twl4030_keypad",
 
598
                                pdata->keypad, sizeof(*pdata->keypad),
 
599
                                true, pdata->irq_base + KEYPAD_INTR_OFFSET, 0);
 
600
                if (IS_ERR(child))
 
601
                        return PTR_ERR(child);
 
602
        }
 
603
 
 
604
        if (twl_has_madc() && pdata->madc) {
 
605
                child = add_child(2, "twl4030_madc",
 
606
                                pdata->madc, sizeof(*pdata->madc),
 
607
                                true, pdata->irq_base + MADC_INTR_OFFSET, 0);
 
608
                if (IS_ERR(child))
 
609
                        return PTR_ERR(child);
 
610
        }
 
611
 
 
612
        if (twl_has_rtc()) {
 
613
                /*
 
614
                 * REVISIT platform_data here currently might expose the
 
615
                 * "msecure" line ... but for now we just expect board
 
616
                 * setup to tell the chip "it's always ok to SET_TIME".
 
617
                 * Eventually, Linux might become more aware of such
 
618
                 * HW security concerns, and "least privilege".
 
619
                 */
 
620
                sub_chip_id = twl_map[TWL_MODULE_RTC].sid;
 
621
                child = add_child(sub_chip_id, "twl_rtc",
 
622
                                NULL, 0,
 
623
                                true, pdata->irq_base + RTC_INTR_OFFSET, 0);
 
624
                if (IS_ERR(child))
 
625
                        return PTR_ERR(child);
 
626
        }
 
627
 
 
628
        if (twl_has_usb() && pdata->usb && twl_class_is_4030()) {
 
629
 
 
630
                static struct regulator_consumer_supply usb1v5 = {
 
631
                        .supply =       "usb1v5",
 
632
                };
 
633
                static struct regulator_consumer_supply usb1v8 = {
 
634
                        .supply =       "usb1v8",
 
635
                };
 
636
                static struct regulator_consumer_supply usb3v1 = {
 
637
                        .supply =       "usb3v1",
 
638
                };
 
639
 
 
640
        /* First add the regulators so that they can be used by transceiver */
 
641
                if (twl_has_regulator()) {
 
642
                        /* this is a template that gets copied */
 
643
                        struct regulator_init_data usb_fixed = {
 
644
                                .constraints.valid_modes_mask =
 
645
                                        REGULATOR_MODE_NORMAL
 
646
                                        | REGULATOR_MODE_STANDBY,
 
647
                                .constraints.valid_ops_mask =
 
648
                                        REGULATOR_CHANGE_MODE
 
649
                                        | REGULATOR_CHANGE_STATUS,
 
650
                        };
 
651
 
 
652
                        child = add_regulator_linked(TWL4030_REG_VUSB1V5,
 
653
                                                      &usb_fixed, &usb1v5, 1);
 
654
                        if (IS_ERR(child))
 
655
                                return PTR_ERR(child);
 
656
 
 
657
                        child = add_regulator_linked(TWL4030_REG_VUSB1V8,
 
658
                                                      &usb_fixed, &usb1v8, 1);
 
659
                        if (IS_ERR(child))
 
660
                                return PTR_ERR(child);
 
661
 
 
662
                        child = add_regulator_linked(TWL4030_REG_VUSB3V1,
 
663
                                                      &usb_fixed, &usb3v1, 1);
 
664
                        if (IS_ERR(child))
 
665
                                return PTR_ERR(child);
 
666
 
 
667
                }
 
668
 
 
669
                child = add_child(0, "twl4030_usb",
 
670
                                pdata->usb, sizeof(*pdata->usb),
 
671
                                true,
 
672
                                /* irq0 = USB_PRES, irq1 = USB */
 
673
                                pdata->irq_base + USB_PRES_INTR_OFFSET,
 
674
                                pdata->irq_base + USB_INTR_OFFSET);
 
675
 
 
676
                if (IS_ERR(child))
 
677
                        return PTR_ERR(child);
 
678
 
 
679
                /* we need to connect regulators to this transceiver */
 
680
                if (twl_has_regulator() && child) {
 
681
                        usb1v5.dev = child;
 
682
                        usb1v8.dev = child;
 
683
                        usb3v1.dev = child;
 
684
                }
 
685
        }
 
686
        if (twl_has_usb() && pdata->usb && twl_class_is_6030()) {
 
687
 
 
688
                static struct regulator_consumer_supply usb3v3 = {
 
689
                        .supply =       "vusb",
 
690
                };
 
691
 
 
692
                if (twl_has_regulator()) {
 
693
                        /* this is a template that gets copied */
 
694
                        struct regulator_init_data usb_fixed = {
 
695
                                .constraints.valid_modes_mask =
 
696
                                        REGULATOR_MODE_NORMAL
 
697
                                        | REGULATOR_MODE_STANDBY,
 
698
                                .constraints.valid_ops_mask =
 
699
                                        REGULATOR_CHANGE_MODE
 
700
                                        | REGULATOR_CHANGE_STATUS,
 
701
                        };
 
702
 
 
703
                        child = add_regulator_linked(TWL6030_REG_VUSB,
 
704
                                                      &usb_fixed, &usb3v3, 1);
 
705
                        if (IS_ERR(child))
 
706
                                return PTR_ERR(child);
 
707
                }
 
708
 
 
709
                child = add_child(0, "twl6030_usb",
 
710
                        pdata->usb, sizeof(*pdata->usb),
 
711
                        true,
 
712
                        /* irq1 = VBUS_PRES, irq0 = USB ID */
 
713
                        pdata->irq_base + USBOTG_INTR_OFFSET,
 
714
                        pdata->irq_base + USB_PRES_INTR_OFFSET);
 
715
 
 
716
                if (IS_ERR(child))
 
717
                        return PTR_ERR(child);
 
718
                /* we need to connect regulators to this transceiver */
 
719
                if (twl_has_regulator() && child)
 
720
                        usb3v3.dev = child;
 
721
 
 
722
        }
 
723
 
 
724
        if (twl_has_watchdog()) {
 
725
                child = add_child(0, "twl4030_wdt", NULL, 0, false, 0, 0);
 
726
                if (IS_ERR(child))
 
727
                        return PTR_ERR(child);
 
728
        }
 
729
 
 
730
        if (twl_has_pwrbutton()) {
 
731
                child = add_child(1, "twl4030_pwrbutton",
 
732
                                NULL, 0, true, pdata->irq_base + 8 + 0, 0);
 
733
                if (IS_ERR(child))
 
734
                        return PTR_ERR(child);
 
735
        }
 
736
 
 
737
        if (twl_has_codec() && pdata->codec && twl_class_is_4030()) {
 
738
                sub_chip_id = twl_map[TWL_MODULE_AUDIO_VOICE].sid;
 
739
                child = add_child(sub_chip_id, "twl4030-audio",
 
740
                                pdata->codec, sizeof(*pdata->codec),
 
741
                                false, 0, 0);
 
742
                if (IS_ERR(child))
 
743
                        return PTR_ERR(child);
 
744
        }
 
745
 
 
746
        /* Phoenix codec driver is probed directly atm */
 
747
        if (twl_has_codec() && pdata->codec && twl_class_is_6030()) {
 
748
                sub_chip_id = twl_map[TWL_MODULE_AUDIO_VOICE].sid;
 
749
                child = add_child(sub_chip_id, "twl6040-codec",
 
750
                                pdata->codec, sizeof(*pdata->codec),
 
751
                                false, 0, 0);
 
752
                if (IS_ERR(child))
 
753
                        return PTR_ERR(child);
 
754
        }
 
755
 
 
756
        /* twl4030 regulators */
 
757
        if (twl_has_regulator() && twl_class_is_4030()) {
 
758
                child = add_regulator(TWL4030_REG_VPLL1, pdata->vpll1);
 
759
                if (IS_ERR(child))
 
760
                        return PTR_ERR(child);
 
761
 
 
762
                child = add_regulator(TWL4030_REG_VIO, pdata->vio);
 
763
                if (IS_ERR(child))
 
764
                        return PTR_ERR(child);
 
765
 
 
766
                child = add_regulator(TWL4030_REG_VDD1, pdata->vdd1);
 
767
                if (IS_ERR(child))
 
768
                        return PTR_ERR(child);
 
769
 
 
770
                child = add_regulator(TWL4030_REG_VDD2, pdata->vdd2);
 
771
                if (IS_ERR(child))
 
772
                        return PTR_ERR(child);
 
773
 
 
774
                child = add_regulator(TWL4030_REG_VMMC1, pdata->vmmc1);
 
775
                if (IS_ERR(child))
 
776
                        return PTR_ERR(child);
 
777
 
 
778
                child = add_regulator(TWL4030_REG_VDAC, pdata->vdac);
 
779
                if (IS_ERR(child))
 
780
                        return PTR_ERR(child);
 
781
 
 
782
                child = add_regulator((features & TWL4030_VAUX2)
 
783
                                        ? TWL4030_REG_VAUX2_4030
 
784
                                        : TWL4030_REG_VAUX2,
 
785
                                pdata->vaux2);
 
786
                if (IS_ERR(child))
 
787
                        return PTR_ERR(child);
 
788
 
 
789
                child = add_regulator(TWL4030_REG_VINTANA1, pdata->vintana1);
 
790
                if (IS_ERR(child))
 
791
                        return PTR_ERR(child);
 
792
 
 
793
                child = add_regulator(TWL4030_REG_VINTANA2, pdata->vintana2);
 
794
                if (IS_ERR(child))
 
795
                        return PTR_ERR(child);
 
796
 
 
797
                child = add_regulator(TWL4030_REG_VINTDIG, pdata->vintdig);
 
798
                if (IS_ERR(child))
 
799
                        return PTR_ERR(child);
 
800
        }
 
801
 
 
802
        /* maybe add LDOs that are omitted on cost-reduced parts */
 
803
        if (twl_has_regulator() && !(features & TPS_SUBSET)
 
804
          && twl_class_is_4030()) {
 
805
                child = add_regulator(TWL4030_REG_VPLL2, pdata->vpll2);
 
806
                if (IS_ERR(child))
 
807
                        return PTR_ERR(child);
 
808
 
 
809
                child = add_regulator(TWL4030_REG_VMMC2, pdata->vmmc2);
 
810
                if (IS_ERR(child))
 
811
                        return PTR_ERR(child);
 
812
 
 
813
                child = add_regulator(TWL4030_REG_VSIM, pdata->vsim);
 
814
                if (IS_ERR(child))
 
815
                        return PTR_ERR(child);
 
816
 
 
817
                child = add_regulator(TWL4030_REG_VAUX1, pdata->vaux1);
 
818
                if (IS_ERR(child))
 
819
                        return PTR_ERR(child);
 
820
 
 
821
                child = add_regulator(TWL4030_REG_VAUX3, pdata->vaux3);
 
822
                if (IS_ERR(child))
 
823
                        return PTR_ERR(child);
 
824
 
 
825
                child = add_regulator(TWL4030_REG_VAUX4, pdata->vaux4);
 
826
                if (IS_ERR(child))
 
827
                        return PTR_ERR(child);
 
828
        }
 
829
 
 
830
        /* twl6030 regulators */
 
831
        if (twl_has_regulator() && twl_class_is_6030()) {
 
832
                child = add_regulator(TWL6030_REG_VMMC, pdata->vmmc);
 
833
                if (IS_ERR(child))
 
834
                        return PTR_ERR(child);
 
835
 
 
836
                child = add_regulator(TWL6030_REG_VPP, pdata->vpp);
 
837
                if (IS_ERR(child))
 
838
                        return PTR_ERR(child);
 
839
 
 
840
                child = add_regulator(TWL6030_REG_VUSIM, pdata->vusim);
 
841
                if (IS_ERR(child))
 
842
                        return PTR_ERR(child);
 
843
 
 
844
                child = add_regulator(TWL6030_REG_VANA, pdata->vana);
 
845
                if (IS_ERR(child))
 
846
                        return PTR_ERR(child);
 
847
 
 
848
                child = add_regulator(TWL6030_REG_VCXIO, pdata->vcxio);
 
849
                if (IS_ERR(child))
 
850
                        return PTR_ERR(child);
 
851
 
 
852
                child = add_regulator(TWL6030_REG_VDAC, pdata->vdac);
 
853
                if (IS_ERR(child))
 
854
                        return PTR_ERR(child);
 
855
 
 
856
                child = add_regulator(TWL6030_REG_VAUX1_6030, pdata->vaux1);
 
857
                if (IS_ERR(child))
 
858
                        return PTR_ERR(child);
 
859
 
 
860
                child = add_regulator(TWL6030_REG_VAUX2_6030, pdata->vaux2);
 
861
                if (IS_ERR(child))
 
862
                        return PTR_ERR(child);
 
863
 
 
864
                child = add_regulator(TWL6030_REG_VAUX3_6030, pdata->vaux3);
 
865
                if (IS_ERR(child))
 
866
                        return PTR_ERR(child);
 
867
        }
 
868
 
 
869
        if (twl_has_bci() && pdata->bci &&
 
870
                        !(features & (TPS_SUBSET | TWL5031))) {
 
871
                child = add_child(3, "twl4030_bci",
 
872
                                pdata->bci, sizeof(*pdata->bci), false,
 
873
                                /* irq0 = CHG_PRES, irq1 = BCI */
 
874
                                pdata->irq_base + BCI_PRES_INTR_OFFSET,
 
875
                                pdata->irq_base + BCI_INTR_OFFSET);
 
876
                if (IS_ERR(child))
 
877
                        return PTR_ERR(child);
 
878
        }
 
879
 
 
880
        return 0;
 
881
}
 
882
 
 
883
/*----------------------------------------------------------------------*/
 
884
 
 
885
/*
 
886
 * These three functions initialize the on-chip clock framework,
 
887
 * letting it generate the right frequencies for USB, MADC, and
 
888
 * other purposes.
 
889
 */
 
890
static inline int __init protect_pm_master(void)
 
891
{
 
892
        int e = 0;
 
893
 
 
894
        e = twl_i2c_write_u8(TWL4030_MODULE_PM_MASTER, 0,
 
895
                        TWL4030_PM_MASTER_PROTECT_KEY);
 
896
        return e;
 
897
}
 
898
 
 
899
static inline int __init unprotect_pm_master(void)
 
900
{
 
901
        int e = 0;
 
902
 
 
903
        e |= twl_i2c_write_u8(TWL4030_MODULE_PM_MASTER,
 
904
                        TWL4030_PM_MASTER_KEY_CFG1,
 
905
                        TWL4030_PM_MASTER_PROTECT_KEY);
 
906
        e |= twl_i2c_write_u8(TWL4030_MODULE_PM_MASTER,
 
907
                        TWL4030_PM_MASTER_KEY_CFG2,
 
908
                        TWL4030_PM_MASTER_PROTECT_KEY);
 
909
 
 
910
        return e;
 
911
}
 
912
 
 
913
static void clocks_init(struct device *dev,
 
914
                        struct twl4030_clock_init_data *clock)
 
915
{
 
916
        int e = 0;
 
917
        struct clk *osc;
 
918
        u32 rate;
 
919
        u8 ctrl = HFCLK_FREQ_26_MHZ;
 
920
 
 
921
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
 
922
        if (cpu_is_omap2430())
 
923
                osc = clk_get(dev, "osc_ck");
 
924
        else
 
925
                osc = clk_get(dev, "osc_sys_ck");
 
926
 
 
927
        if (IS_ERR(osc)) {
 
928
                printk(KERN_WARNING "Skipping twl internal clock init and "
 
929
                                "using bootloader value (unknown osc rate)\n");
 
930
                return;
 
931
        }
 
932
 
 
933
        rate = clk_get_rate(osc);
 
934
        clk_put(osc);
 
935
 
 
936
#else
 
937
        /* REVISIT for non-OMAP systems, pass the clock rate from
 
938
         * board init code, using platform_data.
 
939
         */
 
940
        osc = ERR_PTR(-EIO);
 
941
 
 
942
        printk(KERN_WARNING "Skipping twl internal clock init and "
 
943
               "using bootloader value (unknown osc rate)\n");
 
944
 
 
945
        return;
 
946
#endif
 
947
 
 
948
        switch (rate) {
 
949
        case 19200000:
 
950
                ctrl = HFCLK_FREQ_19p2_MHZ;
 
951
                break;
 
952
        case 26000000:
 
953
                ctrl = HFCLK_FREQ_26_MHZ;
 
954
                break;
 
955
        case 38400000:
 
956
                ctrl = HFCLK_FREQ_38p4_MHZ;
 
957
                break;
 
958
        }
 
959
 
 
960
        ctrl |= HIGH_PERF_SQ;
 
961
        if (clock && clock->ck32k_lowpwr_enable)
 
962
                ctrl |= CK32K_LOWPWR_EN;
 
963
 
 
964
        e |= unprotect_pm_master();
 
965
        /* effect->MADC+USB ck en */
 
966
        e |= twl_i2c_write_u8(TWL_MODULE_PM_MASTER, ctrl, R_CFG_BOOT);
 
967
        e |= protect_pm_master();
 
968
 
 
969
        if (e < 0)
 
970
                pr_err("%s: clock init err [%d]\n", DRIVER_NAME, e);
 
971
}
 
972
 
 
973
/*----------------------------------------------------------------------*/
 
974
 
 
975
int twl4030_init_irq(int irq_num, unsigned irq_base, unsigned irq_end);
 
976
int twl4030_exit_irq(void);
 
977
int twl4030_init_chip_irq(const char *chip);
 
978
int twl6030_init_irq(int irq_num, unsigned irq_base, unsigned irq_end);
 
979
int twl6030_exit_irq(void);
 
980
 
 
981
static int twl_remove(struct i2c_client *client)
 
982
{
 
983
        unsigned i;
 
984
        int status;
 
985
 
 
986
        if (twl_class_is_4030())
 
987
                status = twl4030_exit_irq();
 
988
        else
 
989
                status = twl6030_exit_irq();
 
990
 
 
991
        if (status < 0)
 
992
                return status;
 
993
 
 
994
        for (i = 0; i < TWL_NUM_SLAVES; i++) {
 
995
                struct twl_client       *twl = &twl_modules[i];
 
996
 
 
997
                if (twl->client && twl->client != client)
 
998
                        i2c_unregister_device(twl->client);
 
999
                twl_modules[i].client = NULL;
 
1000
        }
 
1001
        inuse = false;
 
1002
        return 0;
 
1003
}
 
1004
 
 
1005
/* NOTE:  this driver only handles a single twl4030/tps659x0 chip */
 
1006
static int __devinit
 
1007
twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
 
1008
{
 
1009
        int                             status;
 
1010
        unsigned                        i;
 
1011
        struct twl4030_platform_data    *pdata = client->dev.platform_data;
 
1012
        u8 temp;
 
1013
 
 
1014
        if (!pdata) {
 
1015
                dev_dbg(&client->dev, "no platform data?\n");
 
1016
                return -EINVAL;
 
1017
        }
 
1018
 
 
1019
        if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C) == 0) {
 
1020
                dev_dbg(&client->dev, "can't talk I2C?\n");
 
1021
                return -EIO;
 
1022
        }
 
1023
 
 
1024
        if (inuse) {
 
1025
                dev_dbg(&client->dev, "driver is already in use\n");
 
1026
                return -EBUSY;
 
1027
        }
 
1028
 
 
1029
        for (i = 0; i < TWL_NUM_SLAVES; i++) {
 
1030
                struct twl_client       *twl = &twl_modules[i];
 
1031
 
 
1032
                twl->address = client->addr + i;
 
1033
                if (i == 0)
 
1034
                        twl->client = client;
 
1035
                else {
 
1036
                        twl->client = i2c_new_dummy(client->adapter,
 
1037
                                        twl->address);
 
1038
                        if (!twl->client) {
 
1039
                                dev_err(&client->dev,
 
1040
                                        "can't attach client %d\n", i);
 
1041
                                status = -ENOMEM;
 
1042
                                goto fail;
 
1043
                        }
 
1044
                }
 
1045
                mutex_init(&twl->xfer_lock);
 
1046
        }
 
1047
        inuse = true;
 
1048
        if ((id->driver_data) & TWL6030_CLASS) {
 
1049
                twl_id = TWL6030_CLASS_ID;
 
1050
                twl_map = &twl6030_map[0];
 
1051
        } else {
 
1052
                twl_id = TWL4030_CLASS_ID;
 
1053
                twl_map = &twl4030_map[0];
 
1054
        }
 
1055
 
 
1056
        /* setup clock framework */
 
1057
        clocks_init(&client->dev, pdata->clock);
 
1058
 
 
1059
        /* load power event scripts */
 
1060
        if (twl_has_power() && pdata->power)
 
1061
                twl4030_power_init(pdata->power);
 
1062
 
 
1063
        /* Maybe init the T2 Interrupt subsystem */
 
1064
        if (client->irq
 
1065
                        && pdata->irq_base
 
1066
                        && pdata->irq_end > pdata->irq_base) {
 
1067
                if (twl_class_is_4030()) {
 
1068
                        twl4030_init_chip_irq(id->name);
 
1069
                        status = twl4030_init_irq(client->irq, pdata->irq_base,
 
1070
                        pdata->irq_end);
 
1071
                } else {
 
1072
                        status = twl6030_init_irq(client->irq, pdata->irq_base,
 
1073
                        pdata->irq_end);
 
1074
                }
 
1075
 
 
1076
                if (status < 0)
 
1077
                        goto fail;
 
1078
        }
 
1079
 
 
1080
        /* Disable TWL4030/TWL5030 I2C Pull-up on I2C1 and I2C4(SR) interface.
 
1081
         * Program I2C_SCL_CTRL_PU(bit 0)=0, I2C_SDA_CTRL_PU (bit 2)=0,
 
1082
         * SR_I2C_SCL_CTRL_PU(bit 4)=0 and SR_I2C_SDA_CTRL_PU(bit 6)=0.
 
1083
         */
 
1084
 
 
1085
        if (twl_class_is_4030()) {
 
1086
                twl_i2c_read_u8(TWL4030_MODULE_INTBR, &temp, REG_GPPUPDCTR1);
 
1087
                temp &= ~(SR_I2C_SDA_CTRL_PU | SR_I2C_SCL_CTRL_PU | \
 
1088
                I2C_SDA_CTRL_PU | I2C_SCL_CTRL_PU);
 
1089
                twl_i2c_write_u8(TWL4030_MODULE_INTBR, temp, REG_GPPUPDCTR1);
 
1090
        }
 
1091
 
 
1092
        status = add_children(pdata, id->driver_data);
 
1093
fail:
 
1094
        if (status < 0)
 
1095
                twl_remove(client);
 
1096
        return status;
 
1097
}
 
1098
 
 
1099
static const struct i2c_device_id twl_ids[] = {
 
1100
        { "twl4030", TWL4030_VAUX2 },   /* "Triton 2" */
 
1101
        { "twl5030", 0 },               /* T2 updated */
 
1102
        { "twl5031", TWL5031 },         /* TWL5030 updated */
 
1103
        { "tps65950", 0 },              /* catalog version of twl5030 */
 
1104
        { "tps65930", TPS_SUBSET },     /* fewer LDOs and DACs; no charger */
 
1105
        { "tps65920", TPS_SUBSET },     /* fewer LDOs; no codec or charger */
 
1106
        { "twl6030", TWL6030_CLASS },   /* "Phoenix power chip" */
 
1107
        { /* end of list */ },
 
1108
};
 
1109
MODULE_DEVICE_TABLE(i2c, twl_ids);
 
1110
 
 
1111
/* One Client Driver , 4 Clients */
 
1112
static struct i2c_driver twl_driver = {
 
1113
        .driver.name    = DRIVER_NAME,
 
1114
        .id_table       = twl_ids,
 
1115
        .probe          = twl_probe,
 
1116
        .remove         = twl_remove,
 
1117
};
 
1118
 
 
1119
static int __init twl_init(void)
 
1120
{
 
1121
        return i2c_add_driver(&twl_driver);
 
1122
}
 
1123
subsys_initcall(twl_init);
 
1124
 
 
1125
static void __exit twl_exit(void)
 
1126
{
 
1127
        i2c_del_driver(&twl_driver);
 
1128
}
 
1129
module_exit(twl_exit);
 
1130
 
 
1131
MODULE_AUTHOR("Texas Instruments, Inc.");
 
1132
MODULE_DESCRIPTION("I2C Core interface for TWL");
 
1133
MODULE_LICENSE("GPL");