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