xref: /openbmc/linux/drivers/mfd/twl-core.c (revision 3b64b188)
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? */
230 static bool inuse;
231 
232 /* TWL IDCODE Register value */
233 static u32 twl_idcode;
234 
235 static unsigned int twl_id;
236 unsigned int twl_rev(void)
237 {
238 	return twl_id;
239 }
240 EXPORT_SYMBOL(twl_rev);
241 
242 /* Structure for each TWL4030/TWL6030 Slave */
243 struct 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 
254 static struct twl_client twl_modules[TWL_NUM_SLAVES];
255 
256 /* mapping the module id to slave id and base address */
257 struct twl_mapping {
258 	unsigned char sid;	/* Slave ID */
259 	unsigned char base;	/* base address */
260 };
261 static struct twl_mapping *twl_map;
262 
263 static 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 
299 static 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  */
352 int 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 }
402 EXPORT_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  */
413 int 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 }
466 EXPORT_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  */
476 int 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 }
485 EXPORT_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  */
495 int twl_i2c_read_u8(u8 mod_no, u8 *value, u8 reg)
496 {
497 	return twl_i2c_read(mod_no, value, reg, 1);
498 }
499 EXPORT_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  */
508 static 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);
529 fail:
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  */
538 int twl_get_type(void)
539 {
540 	return TWL_SIL_TYPE(twl_idcode);
541 }
542 EXPORT_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  */
549 int twl_get_version(void)
550 {
551 	return TWL_SIL_REV(twl_idcode);
552 }
553 EXPORT_SYMBOL_GPL(twl_get_version);
554 
555 static struct device *
556 add_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 
598 err:
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 
607 static 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 
615 static struct device *
616 add_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 
652 static struct device *
653 add_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 
665 static int
666 add_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  */
1104 static 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 
1113 static 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 
1127 static 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 	osc = clk_get(dev, "fck");
1136 	if (IS_ERR(osc)) {
1137 		printk(KERN_WARNING "Skipping twl internal clock init and "
1138 				"using bootloader value (unknown osc rate)\n");
1139 		return;
1140 	}
1141 
1142 	rate = clk_get_rate(osc);
1143 	clk_put(osc);
1144 
1145 	switch (rate) {
1146 	case 19200000:
1147 		ctrl = HFCLK_FREQ_19p2_MHZ;
1148 		break;
1149 	case 26000000:
1150 		ctrl = HFCLK_FREQ_26_MHZ;
1151 		break;
1152 	case 38400000:
1153 		ctrl = HFCLK_FREQ_38p4_MHZ;
1154 		break;
1155 	}
1156 
1157 	ctrl |= HIGH_PERF_SQ;
1158 	if (clock && clock->ck32k_lowpwr_enable)
1159 		ctrl |= CK32K_LOWPWR_EN;
1160 
1161 	e |= unprotect_pm_master();
1162 	/* effect->MADC+USB ck en */
1163 	e |= twl_i2c_write_u8(TWL_MODULE_PM_MASTER, ctrl, R_CFG_BOOT);
1164 	e |= protect_pm_master();
1165 
1166 	if (e < 0)
1167 		pr_err("%s: clock init err [%d]\n", DRIVER_NAME, e);
1168 }
1169 
1170 /*----------------------------------------------------------------------*/
1171 
1172 
1173 static int twl_remove(struct i2c_client *client)
1174 {
1175 	unsigned i, num_slaves;
1176 	int status;
1177 
1178 	if (twl_class_is_4030()) {
1179 		status = twl4030_exit_irq();
1180 		num_slaves = TWL_NUM_SLAVES;
1181 	} else {
1182 		status = twl6030_exit_irq();
1183 		num_slaves = TWL_NUM_SLAVES - 1;
1184 	}
1185 
1186 	if (status < 0)
1187 		return status;
1188 
1189 	for (i = 0; i < num_slaves; i++) {
1190 		struct twl_client	*twl = &twl_modules[i];
1191 
1192 		if (twl->client && twl->client != client)
1193 			i2c_unregister_device(twl->client);
1194 		twl_modules[i].client = NULL;
1195 	}
1196 	inuse = false;
1197 	return 0;
1198 }
1199 
1200 /* NOTE: This driver only handles a single twl4030/tps659x0 chip */
1201 static int __devinit
1202 twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
1203 {
1204 	struct twl4030_platform_data	*pdata = client->dev.platform_data;
1205 	struct device_node		*node = client->dev.of_node;
1206 	struct platform_device		*pdev;
1207 	int				irq_base = 0;
1208 	int				status;
1209 	unsigned			i, num_slaves;
1210 
1211 	pdev = platform_device_alloc(DRIVER_NAME, -1);
1212 	if (!pdev) {
1213 		dev_err(&client->dev, "can't alloc pdev\n");
1214 		return -ENOMEM;
1215 	}
1216 
1217 	status = platform_device_add(pdev);
1218 	if (status) {
1219 		platform_device_put(pdev);
1220 		return status;
1221 	}
1222 
1223 	if (node && !pdata) {
1224 		/*
1225 		 * XXX: Temporary pdata until the information is correctly
1226 		 * retrieved by every TWL modules from DT.
1227 		 */
1228 		pdata = devm_kzalloc(&client->dev,
1229 				     sizeof(struct twl4030_platform_data),
1230 				     GFP_KERNEL);
1231 		if (!pdata) {
1232 			status = -ENOMEM;
1233 			goto free;
1234 		}
1235 	}
1236 
1237 	if (!pdata) {
1238 		dev_dbg(&client->dev, "no platform data?\n");
1239 		status = -EINVAL;
1240 		goto free;
1241 	}
1242 
1243 	platform_set_drvdata(pdev, pdata);
1244 
1245 	if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C) == 0) {
1246 		dev_dbg(&client->dev, "can't talk I2C?\n");
1247 		status = -EIO;
1248 		goto free;
1249 	}
1250 
1251 	if (inuse) {
1252 		dev_dbg(&client->dev, "driver is already in use\n");
1253 		status = -EBUSY;
1254 		goto free;
1255 	}
1256 
1257 	if ((id->driver_data) & TWL6030_CLASS) {
1258 		twl_id = TWL6030_CLASS_ID;
1259 		twl_map = &twl6030_map[0];
1260 		num_slaves = TWL_NUM_SLAVES - 1;
1261 	} else {
1262 		twl_id = TWL4030_CLASS_ID;
1263 		twl_map = &twl4030_map[0];
1264 		num_slaves = TWL_NUM_SLAVES;
1265 	}
1266 
1267 	for (i = 0; i < num_slaves; i++) {
1268 		struct twl_client *twl = &twl_modules[i];
1269 
1270 		twl->address = client->addr + i;
1271 		if (i == 0) {
1272 			twl->client = client;
1273 		} else {
1274 			twl->client = i2c_new_dummy(client->adapter,
1275 					twl->address);
1276 			if (!twl->client) {
1277 				dev_err(&client->dev,
1278 					"can't attach client %d\n", i);
1279 				status = -ENOMEM;
1280 				goto fail;
1281 			}
1282 		}
1283 		mutex_init(&twl->xfer_lock);
1284 	}
1285 
1286 	inuse = true;
1287 
1288 	/* setup clock framework */
1289 	clocks_init(&pdev->dev, pdata->clock);
1290 
1291 	/* read TWL IDCODE Register */
1292 	if (twl_id == TWL4030_CLASS_ID) {
1293 		status = twl_read_idcode_register();
1294 		WARN(status < 0, "Error: reading twl_idcode register value\n");
1295 	}
1296 
1297 	/* load power event scripts */
1298 	if (twl_has_power() && pdata->power)
1299 		twl4030_power_init(pdata->power);
1300 
1301 	/* Maybe init the T2 Interrupt subsystem */
1302 	if (client->irq) {
1303 		if (twl_class_is_4030()) {
1304 			twl4030_init_chip_irq(id->name);
1305 			irq_base = twl4030_init_irq(&client->dev, client->irq);
1306 		} else {
1307 			irq_base = twl6030_init_irq(&client->dev, client->irq);
1308 		}
1309 
1310 		if (irq_base < 0) {
1311 			status = irq_base;
1312 			goto fail;
1313 		}
1314 	}
1315 
1316 	/*
1317 	 * Disable TWL4030/TWL5030 I2C Pull-up on I2C1 and I2C4(SR) interface.
1318 	 * Program I2C_SCL_CTRL_PU(bit 0)=0, I2C_SDA_CTRL_PU (bit 2)=0,
1319 	 * SR_I2C_SCL_CTRL_PU(bit 4)=0 and SR_I2C_SDA_CTRL_PU(bit 6)=0.
1320 	 */
1321 	if (twl_class_is_4030()) {
1322 		u8 temp;
1323 
1324 		twl_i2c_read_u8(TWL4030_MODULE_INTBR, &temp, REG_GPPUPDCTR1);
1325 		temp &= ~(SR_I2C_SDA_CTRL_PU | SR_I2C_SCL_CTRL_PU | \
1326 			I2C_SDA_CTRL_PU | I2C_SCL_CTRL_PU);
1327 		twl_i2c_write_u8(TWL4030_MODULE_INTBR, temp, REG_GPPUPDCTR1);
1328 	}
1329 
1330 	status = -ENODEV;
1331 	if (node)
1332 		status = of_platform_populate(node, NULL, NULL, &client->dev);
1333 	if (status)
1334 		status = add_children(pdata, irq_base, id->driver_data);
1335 
1336 fail:
1337 	if (status < 0)
1338 		twl_remove(client);
1339 free:
1340 	if (status < 0)
1341 		platform_device_unregister(pdev);
1342 
1343 	return status;
1344 }
1345 
1346 static const struct i2c_device_id twl_ids[] = {
1347 	{ "twl4030", TWL4030_VAUX2 },	/* "Triton 2" */
1348 	{ "twl5030", 0 },		/* T2 updated */
1349 	{ "twl5031", TWL5031 },		/* TWL5030 updated */
1350 	{ "tps65950", 0 },		/* catalog version of twl5030 */
1351 	{ "tps65930", TPS_SUBSET },	/* fewer LDOs and DACs; no charger */
1352 	{ "tps65920", TPS_SUBSET },	/* fewer LDOs; no codec or charger */
1353 	{ "tps65921", TPS_SUBSET },	/* fewer LDOs; no codec, no LED
1354 					   and vibrator. Charger in USB module*/
1355 	{ "twl6030", TWL6030_CLASS },	/* "Phoenix power chip" */
1356 	{ "twl6025", TWL6030_CLASS | TWL6025_SUBCLASS }, /* "Phoenix lite" */
1357 	{ /* end of list */ },
1358 };
1359 MODULE_DEVICE_TABLE(i2c, twl_ids);
1360 
1361 /* One Client Driver , 4 Clients */
1362 static struct i2c_driver twl_driver = {
1363 	.driver.name	= DRIVER_NAME,
1364 	.id_table	= twl_ids,
1365 	.probe		= twl_probe,
1366 	.remove		= twl_remove,
1367 };
1368 
1369 static int __init twl_init(void)
1370 {
1371 	return i2c_add_driver(&twl_driver);
1372 }
1373 subsys_initcall(twl_init);
1374 
1375 static void __exit twl_exit(void)
1376 {
1377 	i2c_del_driver(&twl_driver);
1378 }
1379 module_exit(twl_exit);
1380 
1381 MODULE_AUTHOR("Texas Instruments, Inc.");
1382 MODULE_DESCRIPTION("I2C Core interface for TWL");
1383 MODULE_LICENSE("GPL");
1384