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