Linux Audio

Check our new training course

Loading...
v4.6
  1/*
  2 * Copyright (C) 2007-2010 ST-Ericsson
  3 * License terms: GNU General Public License (GPL) version 2
  4 * Low-level core for exclusive access to the AB3100 IC on the I2C bus
  5 * and some basic chip-configuration.
  6 * Author: Linus Walleij <linus.walleij@stericsson.com>
  7 */
  8
  9#include <linux/i2c.h>
 10#include <linux/mutex.h>
 11#include <linux/list.h>
 12#include <linux/notifier.h>
 13#include <linux/slab.h>
 14#include <linux/err.h>
 15#include <linux/module.h>
 16#include <linux/platform_device.h>
 17#include <linux/device.h>
 18#include <linux/interrupt.h>
 19#include <linux/random.h>
 20#include <linux/debugfs.h>
 21#include <linux/seq_file.h>
 22#include <linux/uaccess.h>
 23#include <linux/mfd/core.h>
 24#include <linux/mfd/ab3100.h>
 25#include <linux/mfd/abx500.h>
 26
 27/* These are the only registers inside AB3100 used in this main file */
 28
 29/* Interrupt event registers */
 30#define AB3100_EVENTA1		0x21
 31#define AB3100_EVENTA2		0x22
 32#define AB3100_EVENTA3		0x23
 33
 34/* AB3100 DAC converter registers */
 35#define AB3100_DIS		0x00
 36#define AB3100_D0C		0x01
 37#define AB3100_D1C		0x02
 38#define AB3100_D2C		0x03
 39#define AB3100_D3C		0x04
 40
 41/* Chip ID register */
 42#define AB3100_CID		0x20
 43
 44/* AB3100 interrupt registers */
 45#define AB3100_IMRA1		0x24
 46#define AB3100_IMRA2		0x25
 47#define AB3100_IMRA3		0x26
 48#define AB3100_IMRB1		0x2B
 49#define AB3100_IMRB2		0x2C
 50#define AB3100_IMRB3		0x2D
 51
 52/* System Power Monitoring and control registers */
 53#define AB3100_MCA		0x2E
 54#define AB3100_MCB		0x2F
 55
 56/* SIM power up */
 57#define AB3100_SUP		0x50
 58
 59/*
 60 * I2C communication
 61 *
 62 * The AB3100 is usually assigned address 0x48 (7-bit)
 63 * The chip is defined in the platform i2c_board_data section.
 64 */
 65static int ab3100_get_chip_id(struct device *dev)
 66{
 67	struct ab3100 *ab3100 = dev_get_drvdata(dev->parent);
 68
 69	return (int)ab3100->chip_id;
 70}
 71
 72static int ab3100_set_register_interruptible(struct ab3100 *ab3100,
 73	u8 reg, u8 regval)
 74{
 75	u8 regandval[2] = {reg, regval};
 76	int err;
 77
 78	err = mutex_lock_interruptible(&ab3100->access_mutex);
 79	if (err)
 80		return err;
 81
 82	/*
 83	 * A two-byte write message with the first byte containing the register
 84	 * number and the second byte containing the value to be written
 85	 * effectively sets a register in the AB3100.
 86	 */
 87	err = i2c_master_send(ab3100->i2c_client, regandval, 2);
 88	if (err < 0) {
 89		dev_err(ab3100->dev,
 90			"write error (write register): %d\n",
 91			err);
 92	} else if (err != 2) {
 93		dev_err(ab3100->dev,
 94			"write error (write register)\n"
 95			"  %d bytes transferred (expected 2)\n",
 96			err);
 97		err = -EIO;
 98	} else {
 99		/* All is well */
100		err = 0;
101	}
102	mutex_unlock(&ab3100->access_mutex);
103	return err;
104}
105
106static int set_register_interruptible(struct device *dev,
107	u8 bank, u8 reg, u8 value)
108{
109	struct ab3100 *ab3100 = dev_get_drvdata(dev->parent);
110
111	return ab3100_set_register_interruptible(ab3100, reg, value);
112}
113
114/*
115 * The test registers exist at an I2C bus address up one
116 * from the ordinary base. They are not supposed to be used
117 * in production code, but sometimes you have to do that
118 * anyway. It's currently only used from this file so declare
119 * it static and do not export.
120 */
121static int ab3100_set_test_register_interruptible(struct ab3100 *ab3100,
122				    u8 reg, u8 regval)
123{
124	u8 regandval[2] = {reg, regval};
125	int err;
126
127	err = mutex_lock_interruptible(&ab3100->access_mutex);
128	if (err)
129		return err;
130
131	err = i2c_master_send(ab3100->testreg_client, regandval, 2);
132	if (err < 0) {
133		dev_err(ab3100->dev,
134			"write error (write test register): %d\n",
135			err);
136	} else if (err != 2) {
137		dev_err(ab3100->dev,
138			"write error (write test register)\n"
139			"  %d bytes transferred (expected 2)\n",
140			err);
141		err = -EIO;
142	} else {
143		/* All is well */
144		err = 0;
145	}
146	mutex_unlock(&ab3100->access_mutex);
147
148	return err;
149}
150
151static int ab3100_get_register_interruptible(struct ab3100 *ab3100,
152					     u8 reg, u8 *regval)
153{
154	int err;
155
156	err = mutex_lock_interruptible(&ab3100->access_mutex);
157	if (err)
158		return err;
159
160	/*
161	 * AB3100 require an I2C "stop" command between each message, else
162	 * it will not work. The only way of achieveing this with the
163	 * message transport layer is to send the read and write messages
164	 * separately.
165	 */
166	err = i2c_master_send(ab3100->i2c_client, &reg, 1);
167	if (err < 0) {
168		dev_err(ab3100->dev,
169			"write error (send register address): %d\n",
170			err);
171		goto get_reg_out_unlock;
172	} else if (err != 1) {
173		dev_err(ab3100->dev,
174			"write error (send register address)\n"
175			"  %d bytes transferred (expected 1)\n",
176			err);
177		err = -EIO;
178		goto get_reg_out_unlock;
179	} else {
180		/* All is well */
181		err = 0;
182	}
183
184	err = i2c_master_recv(ab3100->i2c_client, regval, 1);
185	if (err < 0) {
186		dev_err(ab3100->dev,
187			"write error (read register): %d\n",
188			err);
189		goto get_reg_out_unlock;
190	} else if (err != 1) {
191		dev_err(ab3100->dev,
192			"write error (read register)\n"
193			"  %d bytes transferred (expected 1)\n",
194			err);
195		err = -EIO;
196		goto get_reg_out_unlock;
197	} else {
198		/* All is well */
199		err = 0;
200	}
201
202 get_reg_out_unlock:
203	mutex_unlock(&ab3100->access_mutex);
204	return err;
205}
206
207static int get_register_interruptible(struct device *dev, u8 bank, u8 reg,
208				      u8 *value)
209{
210	struct ab3100 *ab3100 = dev_get_drvdata(dev->parent);
211
212	return ab3100_get_register_interruptible(ab3100, reg, value);
213}
214
215static int ab3100_get_register_page_interruptible(struct ab3100 *ab3100,
216			     u8 first_reg, u8 *regvals, u8 numregs)
217{
218	int err;
219
220	if (ab3100->chip_id == 0xa0 ||
221	    ab3100->chip_id == 0xa1)
222		/* These don't support paged reads */
223		return -EIO;
224
225	err = mutex_lock_interruptible(&ab3100->access_mutex);
226	if (err)
227		return err;
228
229	/*
230	 * Paged read also require an I2C "stop" command.
231	 */
232	err = i2c_master_send(ab3100->i2c_client, &first_reg, 1);
233	if (err < 0) {
234		dev_err(ab3100->dev,
235			"write error (send first register address): %d\n",
236			err);
237		goto get_reg_page_out_unlock;
238	} else if (err != 1) {
239		dev_err(ab3100->dev,
240			"write error (send first register address)\n"
241			"  %d bytes transferred (expected 1)\n",
242			err);
243		err = -EIO;
244		goto get_reg_page_out_unlock;
245	}
246
247	err = i2c_master_recv(ab3100->i2c_client, regvals, numregs);
248	if (err < 0) {
249		dev_err(ab3100->dev,
250			"write error (read register page): %d\n",
251			err);
252		goto get_reg_page_out_unlock;
253	} else if (err != numregs) {
254		dev_err(ab3100->dev,
255			"write error (read register page)\n"
256			"  %d bytes transferred (expected %d)\n",
257			err, numregs);
258		err = -EIO;
259		goto get_reg_page_out_unlock;
260	}
261
262	/* All is well */
263	err = 0;
264
265 get_reg_page_out_unlock:
266	mutex_unlock(&ab3100->access_mutex);
267	return err;
268}
269
270static int get_register_page_interruptible(struct device *dev, u8 bank,
271	u8 first_reg, u8 *regvals, u8 numregs)
272{
273	struct ab3100 *ab3100 = dev_get_drvdata(dev->parent);
274
275	return ab3100_get_register_page_interruptible(ab3100,
276			first_reg, regvals, numregs);
277}
278
279static int ab3100_mask_and_set_register_interruptible(struct ab3100 *ab3100,
280				 u8 reg, u8 andmask, u8 ormask)
281{
282	u8 regandval[2] = {reg, 0};
283	int err;
284
285	err = mutex_lock_interruptible(&ab3100->access_mutex);
286	if (err)
287		return err;
288
289	/* First read out the target register */
290	err = i2c_master_send(ab3100->i2c_client, &reg, 1);
291	if (err < 0) {
292		dev_err(ab3100->dev,
293			"write error (maskset send address): %d\n",
294			err);
295		goto get_maskset_unlock;
296	} else if (err != 1) {
297		dev_err(ab3100->dev,
298			"write error (maskset send address)\n"
299			"  %d bytes transferred (expected 1)\n",
300			err);
301		err = -EIO;
302		goto get_maskset_unlock;
303	}
304
305	err = i2c_master_recv(ab3100->i2c_client, &regandval[1], 1);
306	if (err < 0) {
307		dev_err(ab3100->dev,
308			"write error (maskset read register): %d\n",
309			err);
310		goto get_maskset_unlock;
311	} else if (err != 1) {
312		dev_err(ab3100->dev,
313			"write error (maskset read register)\n"
314			"  %d bytes transferred (expected 1)\n",
315			err);
316		err = -EIO;
317		goto get_maskset_unlock;
318	}
319
320	/* Modify the register */
321	regandval[1] &= andmask;
322	regandval[1] |= ormask;
323
324	/* Write the register */
325	err = i2c_master_send(ab3100->i2c_client, regandval, 2);
326	if (err < 0) {
327		dev_err(ab3100->dev,
328			"write error (write register): %d\n",
329			err);
330		goto get_maskset_unlock;
331	} else if (err != 2) {
332		dev_err(ab3100->dev,
333			"write error (write register)\n"
334			"  %d bytes transferred (expected 2)\n",
335			err);
336		err = -EIO;
337		goto get_maskset_unlock;
338	}
339
340	/* All is well */
341	err = 0;
342
343 get_maskset_unlock:
344	mutex_unlock(&ab3100->access_mutex);
345	return err;
346}
347
348static int mask_and_set_register_interruptible(struct device *dev, u8 bank,
349	u8 reg, u8 bitmask, u8 bitvalues)
350{
351	struct ab3100 *ab3100 = dev_get_drvdata(dev->parent);
352
353	return ab3100_mask_and_set_register_interruptible(ab3100,
354			reg, bitmask, (bitmask & bitvalues));
355}
356
357/*
358 * Register a simple callback for handling any AB3100 events.
359 */
360int ab3100_event_register(struct ab3100 *ab3100,
361			  struct notifier_block *nb)
362{
363	return blocking_notifier_chain_register(&ab3100->event_subscribers,
364					       nb);
365}
366EXPORT_SYMBOL(ab3100_event_register);
367
368/*
369 * Remove a previously registered callback.
370 */
371int ab3100_event_unregister(struct ab3100 *ab3100,
372			    struct notifier_block *nb)
373{
374	return blocking_notifier_chain_unregister(&ab3100->event_subscribers,
375					    nb);
376}
377EXPORT_SYMBOL(ab3100_event_unregister);
378
379
380static int ab3100_event_registers_startup_state_get(struct device *dev,
381					     u8 *event)
382{
383	struct ab3100 *ab3100 = dev_get_drvdata(dev->parent);
384
385	if (!ab3100->startup_events_read)
386		return -EAGAIN; /* Try again later */
387	memcpy(event, ab3100->startup_events, 3);
388
389	return 0;
390}
391
392static struct abx500_ops ab3100_ops = {
393	.get_chip_id = ab3100_get_chip_id,
394	.set_register = set_register_interruptible,
395	.get_register = get_register_interruptible,
396	.get_register_page = get_register_page_interruptible,
397	.set_register_page = NULL,
398	.mask_and_set_register = mask_and_set_register_interruptible,
399	.event_registers_startup_state_get =
400		ab3100_event_registers_startup_state_get,
401	.startup_irq_enabled = NULL,
402};
403
404/*
405 * This is a threaded interrupt handler so we can make some
406 * I2C calls etc.
407 */
408static irqreturn_t ab3100_irq_handler(int irq, void *data)
409{
410	struct ab3100 *ab3100 = data;
411	u8 event_regs[3];
412	u32 fatevent;
413	int err;
414
415	err = ab3100_get_register_page_interruptible(ab3100, AB3100_EVENTA1,
416				       event_regs, 3);
417	if (err)
418		goto err_event;
419
420	fatevent = (event_regs[0] << 16) |
421		(event_regs[1] << 8) |
422		event_regs[2];
423
424	if (!ab3100->startup_events_read) {
425		ab3100->startup_events[0] = event_regs[0];
426		ab3100->startup_events[1] = event_regs[1];
427		ab3100->startup_events[2] = event_regs[2];
428		ab3100->startup_events_read = true;
429	}
430	/*
431	 * The notified parties will have to mask out the events
432	 * they're interested in and react to them. They will be
433	 * notified on all events, then they use the fatevent value
434	 * to determine if they're interested.
435	 */
436	blocking_notifier_call_chain(&ab3100->event_subscribers,
437				     fatevent, NULL);
438
439	dev_dbg(ab3100->dev,
440		"IRQ Event: 0x%08x\n", fatevent);
441
442	return IRQ_HANDLED;
443
444 err_event:
445	dev_dbg(ab3100->dev,
446		"error reading event status\n");
447	return IRQ_HANDLED;
448}
449
450#ifdef CONFIG_DEBUG_FS
451/*
452 * Some debugfs entries only exposed if we're using debug
453 */
454static int ab3100_registers_print(struct seq_file *s, void *p)
455{
456	struct ab3100 *ab3100 = s->private;
457	u8 value;
458	u8 reg;
459
460	seq_puts(s, "AB3100 registers:\n");
461
462	for (reg = 0; reg < 0xff; reg++) {
463		ab3100_get_register_interruptible(ab3100, reg, &value);
464		seq_printf(s, "[0x%x]:  0x%x\n", reg, value);
465	}
466	return 0;
467}
468
469static int ab3100_registers_open(struct inode *inode, struct file *file)
470{
471	return single_open(file, ab3100_registers_print, inode->i_private);
472}
473
474static const struct file_operations ab3100_registers_fops = {
475	.open = ab3100_registers_open,
476	.read = seq_read,
477	.llseek = seq_lseek,
478	.release = single_release,
479	.owner = THIS_MODULE,
480};
481
482struct ab3100_get_set_reg_priv {
483	struct ab3100 *ab3100;
484	bool mode;
485};
486
487static ssize_t ab3100_get_set_reg(struct file *file,
488				  const char __user *user_buf,
489				  size_t count, loff_t *ppos)
490{
491	struct ab3100_get_set_reg_priv *priv = file->private_data;
492	struct ab3100 *ab3100 = priv->ab3100;
493	char buf[32];
494	ssize_t buf_size;
495	int regp;
496	u8 user_reg;
497	int err;
498	int i = 0;
499
500	/* Get userspace string and assure termination */
501	buf_size = min(count, (sizeof(buf)-1));
502	if (copy_from_user(buf, user_buf, buf_size))
503		return -EFAULT;
504	buf[buf_size] = 0;
505
506	/*
507	 * The idea is here to parse a string which is either
508	 * "0xnn" for reading a register, or "0xaa 0xbb" for
509	 * writing 0xbb to the register 0xaa. First move past
510	 * whitespace and then begin to parse the register.
511	 */
512	while ((i < buf_size) && (buf[i] == ' '))
513		i++;
514	regp = i;
515
516	/*
517	 * Advance pointer to end of string then terminate
518	 * the register string. This is needed to satisfy
519	 * the kstrtou8() function.
520	 */
521	while ((i < buf_size) && (buf[i] != ' '))
522		i++;
523	buf[i] = '\0';
524
525	err = kstrtou8(&buf[regp], 16, &user_reg);
526	if (err)
527		return err;
 
 
528
529	/* Either we read or we write a register here */
530	if (!priv->mode) {
531		/* Reading */
 
532		u8 regvalue;
533
534		ab3100_get_register_interruptible(ab3100, user_reg, &regvalue);
535
536		dev_info(ab3100->dev,
537			 "debug read AB3100 reg[0x%02x]: 0x%02x\n",
538			 user_reg, regvalue);
539	} else {
540		int valp;
541		u8 user_value;
 
 
542		u8 regvalue;
543
544		/*
545		 * Writing, we need some value to write to
546		 * the register so keep parsing the string
547		 * from userspace.
548		 */
549		i++;
550		while ((i < buf_size) && (buf[i] == ' '))
551			i++;
552		valp = i;
553		while ((i < buf_size) && (buf[i] != ' '))
554			i++;
555		buf[i] = '\0';
556
557		err = kstrtou8(&buf[valp], 16, &user_value);
558		if (err)
559			return err;
 
 
560
561		ab3100_set_register_interruptible(ab3100, user_reg, user_value);
562		ab3100_get_register_interruptible(ab3100, user_reg, &regvalue);
 
563
564		dev_info(ab3100->dev,
565			 "debug write reg[0x%02x]\n"
566			 "  with 0x%02x, after readback: 0x%02x\n",
567			 user_reg, user_value, regvalue);
568	}
569	return buf_size;
570}
571
572static const struct file_operations ab3100_get_set_reg_fops = {
573	.open = simple_open,
574	.write = ab3100_get_set_reg,
575	.llseek = noop_llseek,
576};
577
578static struct dentry *ab3100_dir;
579static struct dentry *ab3100_reg_file;
580static struct ab3100_get_set_reg_priv ab3100_get_priv;
581static struct dentry *ab3100_get_reg_file;
582static struct ab3100_get_set_reg_priv ab3100_set_priv;
583static struct dentry *ab3100_set_reg_file;
584
585static void ab3100_setup_debugfs(struct ab3100 *ab3100)
586{
587	int err;
588
589	ab3100_dir = debugfs_create_dir("ab3100", NULL);
590	if (!ab3100_dir)
591		goto exit_no_debugfs;
592
593	ab3100_reg_file = debugfs_create_file("registers",
594				S_IRUGO, ab3100_dir, ab3100,
595				&ab3100_registers_fops);
596	if (!ab3100_reg_file) {
597		err = -ENOMEM;
598		goto exit_destroy_dir;
599	}
600
601	ab3100_get_priv.ab3100 = ab3100;
602	ab3100_get_priv.mode = false;
603	ab3100_get_reg_file = debugfs_create_file("get_reg",
604				S_IWUSR, ab3100_dir, &ab3100_get_priv,
605				&ab3100_get_set_reg_fops);
606	if (!ab3100_get_reg_file) {
607		err = -ENOMEM;
608		goto exit_destroy_reg;
609	}
610
611	ab3100_set_priv.ab3100 = ab3100;
612	ab3100_set_priv.mode = true;
613	ab3100_set_reg_file = debugfs_create_file("set_reg",
614				S_IWUSR, ab3100_dir, &ab3100_set_priv,
615				&ab3100_get_set_reg_fops);
616	if (!ab3100_set_reg_file) {
617		err = -ENOMEM;
618		goto exit_destroy_get_reg;
619	}
620	return;
621
622 exit_destroy_get_reg:
623	debugfs_remove(ab3100_get_reg_file);
624 exit_destroy_reg:
625	debugfs_remove(ab3100_reg_file);
626 exit_destroy_dir:
627	debugfs_remove(ab3100_dir);
628 exit_no_debugfs:
629	return;
630}
631static inline void ab3100_remove_debugfs(void)
632{
633	debugfs_remove(ab3100_set_reg_file);
634	debugfs_remove(ab3100_get_reg_file);
635	debugfs_remove(ab3100_reg_file);
636	debugfs_remove(ab3100_dir);
637}
638#else
639static inline void ab3100_setup_debugfs(struct ab3100 *ab3100)
640{
641}
642static inline void ab3100_remove_debugfs(void)
643{
644}
645#endif
646
647/*
648 * Basic set-up, datastructure creation/destruction and I2C interface.
649 * This sets up a default config in the AB3100 chip so that it
650 * will work as expected.
651 */
652
653struct ab3100_init_setting {
654	u8 abreg;
655	u8 setting;
656};
657
658static const struct ab3100_init_setting ab3100_init_settings[] = {
 
659	{
660		.abreg = AB3100_MCA,
661		.setting = 0x01
662	}, {
663		.abreg = AB3100_MCB,
664		.setting = 0x30
665	}, {
666		.abreg = AB3100_IMRA1,
667		.setting = 0x00
668	}, {
669		.abreg = AB3100_IMRA2,
670		.setting = 0xFF
671	}, {
672		.abreg = AB3100_IMRA3,
673		.setting = 0x01
674	}, {
675		.abreg = AB3100_IMRB1,
676		.setting = 0xBF
677	}, {
678		.abreg = AB3100_IMRB2,
679		.setting = 0xFF
680	}, {
681		.abreg = AB3100_IMRB3,
682		.setting = 0xFF
683	}, {
684		.abreg = AB3100_SUP,
685		.setting = 0x00
686	}, {
687		.abreg = AB3100_DIS,
688		.setting = 0xF0
689	}, {
690		.abreg = AB3100_D0C,
691		.setting = 0x00
692	}, {
693		.abreg = AB3100_D1C,
694		.setting = 0x00
695	}, {
696		.abreg = AB3100_D2C,
697		.setting = 0x00
698	}, {
699		.abreg = AB3100_D3C,
700		.setting = 0x00
701	},
702};
703
704static int ab3100_setup(struct ab3100 *ab3100)
705{
706	int err = 0;
707	int i;
708
709	for (i = 0; i < ARRAY_SIZE(ab3100_init_settings); i++) {
710		err = ab3100_set_register_interruptible(ab3100,
711					  ab3100_init_settings[i].abreg,
712					  ab3100_init_settings[i].setting);
713		if (err)
714			goto exit_no_setup;
715	}
716
717	/*
718	 * Special trick to make the AB3100 use the 32kHz clock (RTC)
719	 * bit 3 in test register 0x02 is a special, undocumented test
720	 * register bit that only exist in AB3100 P1E
721	 */
722	if (ab3100->chip_id == 0xc4) {
723		dev_warn(ab3100->dev,
724			 "AB3100 P1E variant detected forcing chip to 32KHz\n");
 
725		err = ab3100_set_test_register_interruptible(ab3100,
726			0x02, 0x08);
727	}
728
729 exit_no_setup:
730	return err;
731}
732
733/* The subdevices of the AB3100 */
734static struct mfd_cell ab3100_devs[] = {
735	{
736		.name = "ab3100-dac",
737		.id = -1,
738	},
739	{
740		.name = "ab3100-leds",
741		.id = -1,
742	},
743	{
744		.name = "ab3100-power",
745		.id = -1,
746	},
747	{
748		.name = "ab3100-regulators",
749		.of_compatible = "stericsson,ab3100-regulators",
750		.id = -1,
751	},
752	{
753		.name = "ab3100-sim",
754		.id = -1,
755	},
756	{
757		.name = "ab3100-uart",
758		.id = -1,
759	},
760	{
761		.name = "ab3100-rtc",
762		.id = -1,
763	},
764	{
765		.name = "ab3100-charger",
766		.id = -1,
767	},
768	{
769		.name = "ab3100-boost",
770		.id = -1,
771	},
772	{
773		.name = "ab3100-adc",
774		.id = -1,
775	},
776	{
777		.name = "ab3100-fuelgauge",
778		.id = -1,
779	},
780	{
781		.name = "ab3100-vibrator",
782		.id = -1,
783	},
784	{
785		.name = "ab3100-otp",
786		.id = -1,
787	},
788	{
789		.name = "ab3100-codec",
790		.id = -1,
791	},
792};
793
794struct ab_family_id {
795	u8	id;
796	char	*name;
797};
798
799static const struct ab_family_id ids[] = {
800	/* AB3100 */
801	{
802		.id = 0xc0,
803		.name = "P1A"
804	}, {
805		.id = 0xc1,
806		.name = "P1B"
807	}, {
808		.id = 0xc2,
809		.name = "P1C"
810	}, {
811		.id = 0xc3,
812		.name = "P1D"
813	}, {
814		.id = 0xc4,
815		.name = "P1E"
816	}, {
817		.id = 0xc5,
818		.name = "P1F/R1A"
819	}, {
820		.id = 0xc6,
821		.name = "P1G/R1A"
822	}, {
823		.id = 0xc7,
824		.name = "P2A/R2A"
825	}, {
826		.id = 0xc8,
827		.name = "P2B/R2B"
828	},
829	/* AB3000 variants, not supported */
830	{
831		.id = 0xa0
832	}, {
833		.id = 0xa1
834	}, {
835		.id = 0xa2
836	}, {
837		.id = 0xa3
838	}, {
839		.id = 0xa4
840	}, {
841		.id = 0xa5
842	}, {
843		.id = 0xa6
844	}, {
845		.id = 0xa7
846	},
847	/* Terminator */
848	{
849		.id = 0x00,
850	},
851};
852
853static int ab3100_probe(struct i2c_client *client,
854				  const struct i2c_device_id *id)
855{
856	struct ab3100 *ab3100;
857	struct ab3100_platform_data *ab3100_plf_data =
858		dev_get_platdata(&client->dev);
859	int err;
860	int i;
861
862	ab3100 = devm_kzalloc(&client->dev, sizeof(struct ab3100), GFP_KERNEL);
863	if (!ab3100)
 
864		return -ENOMEM;
 
865
866	/* Initialize data structure */
867	mutex_init(&ab3100->access_mutex);
868	BLOCKING_INIT_NOTIFIER_HEAD(&ab3100->event_subscribers);
869
870	ab3100->i2c_client = client;
871	ab3100->dev = &ab3100->i2c_client->dev;
872
873	i2c_set_clientdata(client, ab3100);
874
875	/* Read chip ID register */
876	err = ab3100_get_register_interruptible(ab3100, AB3100_CID,
877						&ab3100->chip_id);
878	if (err) {
879		dev_err(&client->dev,
880			"failed to communicate with AB3100 chip\n");
 
881		goto exit_no_detect;
882	}
883
884	for (i = 0; ids[i].id != 0x0; i++) {
885		if (ids[i].id == ab3100->chip_id) {
886			if (ids[i].name)
 
 
 
 
887				break;
888
889			dev_err(&client->dev, "AB3000 is not supported\n");
890			goto exit_no_detect;
 
 
891		}
892	}
893
894	snprintf(&ab3100->chip_name[0],
895		 sizeof(ab3100->chip_name) - 1, "AB3100 %s", ids[i].name);
896
897	if (ids[i].id == 0x0) {
898		dev_err(&client->dev, "unknown analog baseband chip id: 0x%x\n",
899			ab3100->chip_id);
900		dev_err(&client->dev,
901			"accepting it anyway. Please update the driver.\n");
902		goto exit_no_detect;
903	}
904
905	dev_info(&client->dev, "Detected chip: %s\n",
906		 &ab3100->chip_name[0]);
907
908	/* Attach a second dummy i2c_client to the test register address */
909	ab3100->testreg_client = i2c_new_dummy(client->adapter,
910					       client->addr + 1);
911	if (!ab3100->testreg_client) {
912		err = -ENOMEM;
913		goto exit_no_testreg_client;
914	}
915
916	err = ab3100_setup(ab3100);
917	if (err)
918		goto exit_no_setup;
919
920	err = devm_request_threaded_irq(&client->dev,
921					client->irq, NULL, ab3100_irq_handler,
922					IRQF_ONESHOT, "ab3100-core", ab3100);
923	if (err)
924		goto exit_no_irq;
925
926	err = abx500_register_ops(&client->dev, &ab3100_ops);
927	if (err)
928		goto exit_no_ops;
929
930	/* Set up and register the platform devices. */
931	for (i = 0; i < ARRAY_SIZE(ab3100_devs); i++) {
932		ab3100_devs[i].platform_data = ab3100_plf_data;
933		ab3100_devs[i].pdata_size = sizeof(struct ab3100_platform_data);
934	}
935
936	err = mfd_add_devices(&client->dev, 0, ab3100_devs,
937			      ARRAY_SIZE(ab3100_devs), NULL, 0, NULL);
938
939	ab3100_setup_debugfs(ab3100);
940
941	return 0;
942
943 exit_no_ops:
944 exit_no_irq:
945 exit_no_setup:
946	i2c_unregister_device(ab3100->testreg_client);
947 exit_no_testreg_client:
948 exit_no_detect:
 
949	return err;
950}
951
952static int ab3100_remove(struct i2c_client *client)
953{
954	struct ab3100 *ab3100 = i2c_get_clientdata(client);
955
956	/* Unregister subdevices */
957	mfd_remove_devices(&client->dev);
 
958	ab3100_remove_debugfs();
959	i2c_unregister_device(ab3100->testreg_client);
 
 
 
 
 
 
 
960	return 0;
961}
962
963static const struct i2c_device_id ab3100_id[] = {
964	{ "ab3100", 0 },
965	{ }
966};
967MODULE_DEVICE_TABLE(i2c, ab3100_id);
968
969static struct i2c_driver ab3100_driver = {
970	.driver = {
971		.name	= "ab3100",
 
972	},
973	.id_table	= ab3100_id,
974	.probe		= ab3100_probe,
975	.remove		= ab3100_remove,
976};
977
978static int __init ab3100_i2c_init(void)
979{
980	return i2c_add_driver(&ab3100_driver);
981}
982
983static void __exit ab3100_i2c_exit(void)
984{
985	i2c_del_driver(&ab3100_driver);
986}
987
988subsys_initcall(ab3100_i2c_init);
989module_exit(ab3100_i2c_exit);
990
991MODULE_AUTHOR("Linus Walleij <linus.walleij@stericsson.com>");
992MODULE_DESCRIPTION("AB3100 core driver");
993MODULE_LICENSE("GPL");
v3.5.6
   1/*
   2 * Copyright (C) 2007-2010 ST-Ericsson
   3 * License terms: GNU General Public License (GPL) version 2
   4 * Low-level core for exclusive access to the AB3100 IC on the I2C bus
   5 * and some basic chip-configuration.
   6 * Author: Linus Walleij <linus.walleij@stericsson.com>
   7 */
   8
   9#include <linux/i2c.h>
  10#include <linux/mutex.h>
  11#include <linux/list.h>
  12#include <linux/notifier.h>
  13#include <linux/slab.h>
  14#include <linux/err.h>
  15#include <linux/module.h>
  16#include <linux/platform_device.h>
  17#include <linux/device.h>
  18#include <linux/interrupt.h>
  19#include <linux/random.h>
  20#include <linux/debugfs.h>
  21#include <linux/seq_file.h>
  22#include <linux/uaccess.h>
  23#include <linux/mfd/core.h>
 
  24#include <linux/mfd/abx500.h>
  25
  26/* These are the only registers inside AB3100 used in this main file */
  27
  28/* Interrupt event registers */
  29#define AB3100_EVENTA1		0x21
  30#define AB3100_EVENTA2		0x22
  31#define AB3100_EVENTA3		0x23
  32
  33/* AB3100 DAC converter registers */
  34#define AB3100_DIS		0x00
  35#define AB3100_D0C		0x01
  36#define AB3100_D1C		0x02
  37#define AB3100_D2C		0x03
  38#define AB3100_D3C		0x04
  39
  40/* Chip ID register */
  41#define AB3100_CID		0x20
  42
  43/* AB3100 interrupt registers */
  44#define AB3100_IMRA1		0x24
  45#define AB3100_IMRA2		0x25
  46#define AB3100_IMRA3		0x26
  47#define AB3100_IMRB1		0x2B
  48#define AB3100_IMRB2		0x2C
  49#define AB3100_IMRB3		0x2D
  50
  51/* System Power Monitoring and control registers */
  52#define AB3100_MCA		0x2E
  53#define AB3100_MCB		0x2F
  54
  55/* SIM power up */
  56#define AB3100_SUP		0x50
  57
  58/*
  59 * I2C communication
  60 *
  61 * The AB3100 is usually assigned address 0x48 (7-bit)
  62 * The chip is defined in the platform i2c_board_data section.
  63 */
  64static int ab3100_get_chip_id(struct device *dev)
  65{
  66	struct ab3100 *ab3100 = dev_get_drvdata(dev->parent);
  67
  68	return (int)ab3100->chip_id;
  69}
  70
  71static int ab3100_set_register_interruptible(struct ab3100 *ab3100,
  72	u8 reg, u8 regval)
  73{
  74	u8 regandval[2] = {reg, regval};
  75	int err;
  76
  77	err = mutex_lock_interruptible(&ab3100->access_mutex);
  78	if (err)
  79		return err;
  80
  81	/*
  82	 * A two-byte write message with the first byte containing the register
  83	 * number and the second byte containing the value to be written
  84	 * effectively sets a register in the AB3100.
  85	 */
  86	err = i2c_master_send(ab3100->i2c_client, regandval, 2);
  87	if (err < 0) {
  88		dev_err(ab3100->dev,
  89			"write error (write register): %d\n",
  90			err);
  91	} else if (err != 2) {
  92		dev_err(ab3100->dev,
  93			"write error (write register) "
  94			"%d bytes transferred (expected 2)\n",
  95			err);
  96		err = -EIO;
  97	} else {
  98		/* All is well */
  99		err = 0;
 100	}
 101	mutex_unlock(&ab3100->access_mutex);
 102	return err;
 103}
 104
 105static int set_register_interruptible(struct device *dev,
 106	u8 bank, u8 reg, u8 value)
 107{
 108	struct ab3100 *ab3100 = dev_get_drvdata(dev->parent);
 109
 110	return ab3100_set_register_interruptible(ab3100, reg, value);
 111}
 112
 113/*
 114 * The test registers exist at an I2C bus address up one
 115 * from the ordinary base. They are not supposed to be used
 116 * in production code, but sometimes you have to do that
 117 * anyway. It's currently only used from this file so declare
 118 * it static and do not export.
 119 */
 120static int ab3100_set_test_register_interruptible(struct ab3100 *ab3100,
 121				    u8 reg, u8 regval)
 122{
 123	u8 regandval[2] = {reg, regval};
 124	int err;
 125
 126	err = mutex_lock_interruptible(&ab3100->access_mutex);
 127	if (err)
 128		return err;
 129
 130	err = i2c_master_send(ab3100->testreg_client, regandval, 2);
 131	if (err < 0) {
 132		dev_err(ab3100->dev,
 133			"write error (write test register): %d\n",
 134			err);
 135	} else if (err != 2) {
 136		dev_err(ab3100->dev,
 137			"write error (write test register) "
 138			"%d bytes transferred (expected 2)\n",
 139			err);
 140		err = -EIO;
 141	} else {
 142		/* All is well */
 143		err = 0;
 144	}
 145	mutex_unlock(&ab3100->access_mutex);
 146
 147	return err;
 148}
 149
 150static int ab3100_get_register_interruptible(struct ab3100 *ab3100,
 151					     u8 reg, u8 *regval)
 152{
 153	int err;
 154
 155	err = mutex_lock_interruptible(&ab3100->access_mutex);
 156	if (err)
 157		return err;
 158
 159	/*
 160	 * AB3100 require an I2C "stop" command between each message, else
 161	 * it will not work. The only way of achieveing this with the
 162	 * message transport layer is to send the read and write messages
 163	 * separately.
 164	 */
 165	err = i2c_master_send(ab3100->i2c_client, &reg, 1);
 166	if (err < 0) {
 167		dev_err(ab3100->dev,
 168			"write error (send register address): %d\n",
 169			err);
 170		goto get_reg_out_unlock;
 171	} else if (err != 1) {
 172		dev_err(ab3100->dev,
 173			"write error (send register address) "
 174			"%d bytes transferred (expected 1)\n",
 175			err);
 176		err = -EIO;
 177		goto get_reg_out_unlock;
 178	} else {
 179		/* All is well */
 180		err = 0;
 181	}
 182
 183	err = i2c_master_recv(ab3100->i2c_client, regval, 1);
 184	if (err < 0) {
 185		dev_err(ab3100->dev,
 186			"write error (read register): %d\n",
 187			err);
 188		goto get_reg_out_unlock;
 189	} else if (err != 1) {
 190		dev_err(ab3100->dev,
 191			"write error (read register) "
 192			"%d bytes transferred (expected 1)\n",
 193			err);
 194		err = -EIO;
 195		goto get_reg_out_unlock;
 196	} else {
 197		/* All is well */
 198		err = 0;
 199	}
 200
 201 get_reg_out_unlock:
 202	mutex_unlock(&ab3100->access_mutex);
 203	return err;
 204}
 205
 206static int get_register_interruptible(struct device *dev, u8 bank, u8 reg,
 207				      u8 *value)
 208{
 209	struct ab3100 *ab3100 = dev_get_drvdata(dev->parent);
 210
 211	return ab3100_get_register_interruptible(ab3100, reg, value);
 212}
 213
 214static int ab3100_get_register_page_interruptible(struct ab3100 *ab3100,
 215			     u8 first_reg, u8 *regvals, u8 numregs)
 216{
 217	int err;
 218
 219	if (ab3100->chip_id == 0xa0 ||
 220	    ab3100->chip_id == 0xa1)
 221		/* These don't support paged reads */
 222		return -EIO;
 223
 224	err = mutex_lock_interruptible(&ab3100->access_mutex);
 225	if (err)
 226		return err;
 227
 228	/*
 229	 * Paged read also require an I2C "stop" command.
 230	 */
 231	err = i2c_master_send(ab3100->i2c_client, &first_reg, 1);
 232	if (err < 0) {
 233		dev_err(ab3100->dev,
 234			"write error (send first register address): %d\n",
 235			err);
 236		goto get_reg_page_out_unlock;
 237	} else if (err != 1) {
 238		dev_err(ab3100->dev,
 239			"write error (send first register address) "
 240			"%d bytes transferred (expected 1)\n",
 241			err);
 242		err = -EIO;
 243		goto get_reg_page_out_unlock;
 244	}
 245
 246	err = i2c_master_recv(ab3100->i2c_client, regvals, numregs);
 247	if (err < 0) {
 248		dev_err(ab3100->dev,
 249			"write error (read register page): %d\n",
 250			err);
 251		goto get_reg_page_out_unlock;
 252	} else if (err != numregs) {
 253		dev_err(ab3100->dev,
 254			"write error (read register page) "
 255			"%d bytes transferred (expected %d)\n",
 256			err, numregs);
 257		err = -EIO;
 258		goto get_reg_page_out_unlock;
 259	}
 260
 261	/* All is well */
 262	err = 0;
 263
 264 get_reg_page_out_unlock:
 265	mutex_unlock(&ab3100->access_mutex);
 266	return err;
 267}
 268
 269static int get_register_page_interruptible(struct device *dev, u8 bank,
 270	u8 first_reg, u8 *regvals, u8 numregs)
 271{
 272	struct ab3100 *ab3100 = dev_get_drvdata(dev->parent);
 273
 274	return ab3100_get_register_page_interruptible(ab3100,
 275			first_reg, regvals, numregs);
 276}
 277
 278static int ab3100_mask_and_set_register_interruptible(struct ab3100 *ab3100,
 279				 u8 reg, u8 andmask, u8 ormask)
 280{
 281	u8 regandval[2] = {reg, 0};
 282	int err;
 283
 284	err = mutex_lock_interruptible(&ab3100->access_mutex);
 285	if (err)
 286		return err;
 287
 288	/* First read out the target register */
 289	err = i2c_master_send(ab3100->i2c_client, &reg, 1);
 290	if (err < 0) {
 291		dev_err(ab3100->dev,
 292			"write error (maskset send address): %d\n",
 293			err);
 294		goto get_maskset_unlock;
 295	} else if (err != 1) {
 296		dev_err(ab3100->dev,
 297			"write error (maskset send address) "
 298			"%d bytes transferred (expected 1)\n",
 299			err);
 300		err = -EIO;
 301		goto get_maskset_unlock;
 302	}
 303
 304	err = i2c_master_recv(ab3100->i2c_client, &regandval[1], 1);
 305	if (err < 0) {
 306		dev_err(ab3100->dev,
 307			"write error (maskset read register): %d\n",
 308			err);
 309		goto get_maskset_unlock;
 310	} else if (err != 1) {
 311		dev_err(ab3100->dev,
 312			"write error (maskset read register) "
 313			"%d bytes transferred (expected 1)\n",
 314			err);
 315		err = -EIO;
 316		goto get_maskset_unlock;
 317	}
 318
 319	/* Modify the register */
 320	regandval[1] &= andmask;
 321	regandval[1] |= ormask;
 322
 323	/* Write the register */
 324	err = i2c_master_send(ab3100->i2c_client, regandval, 2);
 325	if (err < 0) {
 326		dev_err(ab3100->dev,
 327			"write error (write register): %d\n",
 328			err);
 329		goto get_maskset_unlock;
 330	} else if (err != 2) {
 331		dev_err(ab3100->dev,
 332			"write error (write register) "
 333			"%d bytes transferred (expected 2)\n",
 334			err);
 335		err = -EIO;
 336		goto get_maskset_unlock;
 337	}
 338
 339	/* All is well */
 340	err = 0;
 341
 342 get_maskset_unlock:
 343	mutex_unlock(&ab3100->access_mutex);
 344	return err;
 345}
 346
 347static int mask_and_set_register_interruptible(struct device *dev, u8 bank,
 348	u8 reg, u8 bitmask, u8 bitvalues)
 349{
 350	struct ab3100 *ab3100 = dev_get_drvdata(dev->parent);
 351
 352	return ab3100_mask_and_set_register_interruptible(ab3100,
 353			reg, bitmask, (bitmask & bitvalues));
 354}
 355
 356/*
 357 * Register a simple callback for handling any AB3100 events.
 358 */
 359int ab3100_event_register(struct ab3100 *ab3100,
 360			  struct notifier_block *nb)
 361{
 362	return blocking_notifier_chain_register(&ab3100->event_subscribers,
 363					       nb);
 364}
 365EXPORT_SYMBOL(ab3100_event_register);
 366
 367/*
 368 * Remove a previously registered callback.
 369 */
 370int ab3100_event_unregister(struct ab3100 *ab3100,
 371			    struct notifier_block *nb)
 372{
 373  return blocking_notifier_chain_unregister(&ab3100->event_subscribers,
 374					    nb);
 375}
 376EXPORT_SYMBOL(ab3100_event_unregister);
 377
 378
 379static int ab3100_event_registers_startup_state_get(struct device *dev,
 380					     u8 *event)
 381{
 382	struct ab3100 *ab3100 = dev_get_drvdata(dev->parent);
 
 383	if (!ab3100->startup_events_read)
 384		return -EAGAIN; /* Try again later */
 385	memcpy(event, ab3100->startup_events, 3);
 
 386	return 0;
 387}
 388
 389static struct abx500_ops ab3100_ops = {
 390	.get_chip_id = ab3100_get_chip_id,
 391	.set_register = set_register_interruptible,
 392	.get_register = get_register_interruptible,
 393	.get_register_page = get_register_page_interruptible,
 394	.set_register_page = NULL,
 395	.mask_and_set_register = mask_and_set_register_interruptible,
 396	.event_registers_startup_state_get =
 397		ab3100_event_registers_startup_state_get,
 398	.startup_irq_enabled = NULL,
 399};
 400
 401/*
 402 * This is a threaded interrupt handler so we can make some
 403 * I2C calls etc.
 404 */
 405static irqreturn_t ab3100_irq_handler(int irq, void *data)
 406{
 407	struct ab3100 *ab3100 = data;
 408	u8 event_regs[3];
 409	u32 fatevent;
 410	int err;
 411
 412	err = ab3100_get_register_page_interruptible(ab3100, AB3100_EVENTA1,
 413				       event_regs, 3);
 414	if (err)
 415		goto err_event;
 416
 417	fatevent = (event_regs[0] << 16) |
 418		(event_regs[1] << 8) |
 419		event_regs[2];
 420
 421	if (!ab3100->startup_events_read) {
 422		ab3100->startup_events[0] = event_regs[0];
 423		ab3100->startup_events[1] = event_regs[1];
 424		ab3100->startup_events[2] = event_regs[2];
 425		ab3100->startup_events_read = true;
 426	}
 427	/*
 428	 * The notified parties will have to mask out the events
 429	 * they're interested in and react to them. They will be
 430	 * notified on all events, then they use the fatevent value
 431	 * to determine if they're interested.
 432	 */
 433	blocking_notifier_call_chain(&ab3100->event_subscribers,
 434				     fatevent, NULL);
 435
 436	dev_dbg(ab3100->dev,
 437		"IRQ Event: 0x%08x\n", fatevent);
 438
 439	return IRQ_HANDLED;
 440
 441 err_event:
 442	dev_dbg(ab3100->dev,
 443		"error reading event status\n");
 444	return IRQ_HANDLED;
 445}
 446
 447#ifdef CONFIG_DEBUG_FS
 448/*
 449 * Some debugfs entries only exposed if we're using debug
 450 */
 451static int ab3100_registers_print(struct seq_file *s, void *p)
 452{
 453	struct ab3100 *ab3100 = s->private;
 454	u8 value;
 455	u8 reg;
 456
 457	seq_printf(s, "AB3100 registers:\n");
 458
 459	for (reg = 0; reg < 0xff; reg++) {
 460		ab3100_get_register_interruptible(ab3100, reg, &value);
 461		seq_printf(s, "[0x%x]:  0x%x\n", reg, value);
 462	}
 463	return 0;
 464}
 465
 466static int ab3100_registers_open(struct inode *inode, struct file *file)
 467{
 468	return single_open(file, ab3100_registers_print, inode->i_private);
 469}
 470
 471static const struct file_operations ab3100_registers_fops = {
 472	.open = ab3100_registers_open,
 473	.read = seq_read,
 474	.llseek = seq_lseek,
 475	.release = single_release,
 476	.owner = THIS_MODULE,
 477};
 478
 479struct ab3100_get_set_reg_priv {
 480	struct ab3100 *ab3100;
 481	bool mode;
 482};
 483
 484static ssize_t ab3100_get_set_reg(struct file *file,
 485				  const char __user *user_buf,
 486				  size_t count, loff_t *ppos)
 487{
 488	struct ab3100_get_set_reg_priv *priv = file->private_data;
 489	struct ab3100 *ab3100 = priv->ab3100;
 490	char buf[32];
 491	ssize_t buf_size;
 492	int regp;
 493	unsigned long user_reg;
 494	int err;
 495	int i = 0;
 496
 497	/* Get userspace string and assure termination */
 498	buf_size = min(count, (sizeof(buf)-1));
 499	if (copy_from_user(buf, user_buf, buf_size))
 500		return -EFAULT;
 501	buf[buf_size] = 0;
 502
 503	/*
 504	 * The idea is here to parse a string which is either
 505	 * "0xnn" for reading a register, or "0xaa 0xbb" for
 506	 * writing 0xbb to the register 0xaa. First move past
 507	 * whitespace and then begin to parse the register.
 508	 */
 509	while ((i < buf_size) && (buf[i] == ' '))
 510		i++;
 511	regp = i;
 512
 513	/*
 514	 * Advance pointer to end of string then terminate
 515	 * the register string. This is needed to satisfy
 516	 * the strict_strtoul() function.
 517	 */
 518	while ((i < buf_size) && (buf[i] != ' '))
 519		i++;
 520	buf[i] = '\0';
 521
 522	err = strict_strtoul(&buf[regp], 16, &user_reg);
 523	if (err)
 524		return err;
 525	if (user_reg > 0xff)
 526		return -EINVAL;
 527
 528	/* Either we read or we write a register here */
 529	if (!priv->mode) {
 530		/* Reading */
 531		u8 reg = (u8) user_reg;
 532		u8 regvalue;
 533
 534		ab3100_get_register_interruptible(ab3100, reg, &regvalue);
 535
 536		dev_info(ab3100->dev,
 537			 "debug read AB3100 reg[0x%02x]: 0x%02x\n",
 538			 reg, regvalue);
 539	} else {
 540		int valp;
 541		unsigned long user_value;
 542		u8 reg = (u8) user_reg;
 543		u8 value;
 544		u8 regvalue;
 545
 546		/*
 547		 * Writing, we need some value to write to
 548		 * the register so keep parsing the string
 549		 * from userspace.
 550		 */
 551		i++;
 552		while ((i < buf_size) && (buf[i] == ' '))
 553			i++;
 554		valp = i;
 555		while ((i < buf_size) && (buf[i] != ' '))
 556			i++;
 557		buf[i] = '\0';
 558
 559		err = strict_strtoul(&buf[valp], 16, &user_value);
 560		if (err)
 561			return err;
 562		if (user_reg > 0xff)
 563			return -EINVAL;
 564
 565		value = (u8) user_value;
 566		ab3100_set_register_interruptible(ab3100, reg, value);
 567		ab3100_get_register_interruptible(ab3100, reg, &regvalue);
 568
 569		dev_info(ab3100->dev,
 570			 "debug write reg[0x%02x] with 0x%02x, "
 571			 "after readback: 0x%02x\n",
 572			 reg, value, regvalue);
 573	}
 574	return buf_size;
 575}
 576
 577static const struct file_operations ab3100_get_set_reg_fops = {
 578	.open = simple_open,
 579	.write = ab3100_get_set_reg,
 580	.llseek = noop_llseek,
 581};
 582
 583static struct dentry *ab3100_dir;
 584static struct dentry *ab3100_reg_file;
 585static struct ab3100_get_set_reg_priv ab3100_get_priv;
 586static struct dentry *ab3100_get_reg_file;
 587static struct ab3100_get_set_reg_priv ab3100_set_priv;
 588static struct dentry *ab3100_set_reg_file;
 589
 590static void ab3100_setup_debugfs(struct ab3100 *ab3100)
 591{
 592	int err;
 593
 594	ab3100_dir = debugfs_create_dir("ab3100", NULL);
 595	if (!ab3100_dir)
 596		goto exit_no_debugfs;
 597
 598	ab3100_reg_file = debugfs_create_file("registers",
 599				S_IRUGO, ab3100_dir, ab3100,
 600				&ab3100_registers_fops);
 601	if (!ab3100_reg_file) {
 602		err = -ENOMEM;
 603		goto exit_destroy_dir;
 604	}
 605
 606	ab3100_get_priv.ab3100 = ab3100;
 607	ab3100_get_priv.mode = false;
 608	ab3100_get_reg_file = debugfs_create_file("get_reg",
 609				S_IWUSR, ab3100_dir, &ab3100_get_priv,
 610				&ab3100_get_set_reg_fops);
 611	if (!ab3100_get_reg_file) {
 612		err = -ENOMEM;
 613		goto exit_destroy_reg;
 614	}
 615
 616	ab3100_set_priv.ab3100 = ab3100;
 617	ab3100_set_priv.mode = true;
 618	ab3100_set_reg_file = debugfs_create_file("set_reg",
 619				S_IWUSR, ab3100_dir, &ab3100_set_priv,
 620				&ab3100_get_set_reg_fops);
 621	if (!ab3100_set_reg_file) {
 622		err = -ENOMEM;
 623		goto exit_destroy_get_reg;
 624	}
 625	return;
 626
 627 exit_destroy_get_reg:
 628	debugfs_remove(ab3100_get_reg_file);
 629 exit_destroy_reg:
 630	debugfs_remove(ab3100_reg_file);
 631 exit_destroy_dir:
 632	debugfs_remove(ab3100_dir);
 633 exit_no_debugfs:
 634	return;
 635}
 636static inline void ab3100_remove_debugfs(void)
 637{
 638	debugfs_remove(ab3100_set_reg_file);
 639	debugfs_remove(ab3100_get_reg_file);
 640	debugfs_remove(ab3100_reg_file);
 641	debugfs_remove(ab3100_dir);
 642}
 643#else
 644static inline void ab3100_setup_debugfs(struct ab3100 *ab3100)
 645{
 646}
 647static inline void ab3100_remove_debugfs(void)
 648{
 649}
 650#endif
 651
 652/*
 653 * Basic set-up, datastructure creation/destruction and I2C interface.
 654 * This sets up a default config in the AB3100 chip so that it
 655 * will work as expected.
 656 */
 657
 658struct ab3100_init_setting {
 659	u8 abreg;
 660	u8 setting;
 661};
 662
 663static const struct ab3100_init_setting __devinitconst
 664ab3100_init_settings[] = {
 665	{
 666		.abreg = AB3100_MCA,
 667		.setting = 0x01
 668	}, {
 669		.abreg = AB3100_MCB,
 670		.setting = 0x30
 671	}, {
 672		.abreg = AB3100_IMRA1,
 673		.setting = 0x00
 674	}, {
 675		.abreg = AB3100_IMRA2,
 676		.setting = 0xFF
 677	}, {
 678		.abreg = AB3100_IMRA3,
 679		.setting = 0x01
 680	}, {
 681		.abreg = AB3100_IMRB1,
 682		.setting = 0xBF
 683	}, {
 684		.abreg = AB3100_IMRB2,
 685		.setting = 0xFF
 686	}, {
 687		.abreg = AB3100_IMRB3,
 688		.setting = 0xFF
 689	}, {
 690		.abreg = AB3100_SUP,
 691		.setting = 0x00
 692	}, {
 693		.abreg = AB3100_DIS,
 694		.setting = 0xF0
 695	}, {
 696		.abreg = AB3100_D0C,
 697		.setting = 0x00
 698	}, {
 699		.abreg = AB3100_D1C,
 700		.setting = 0x00
 701	}, {
 702		.abreg = AB3100_D2C,
 703		.setting = 0x00
 704	}, {
 705		.abreg = AB3100_D3C,
 706		.setting = 0x00
 707	},
 708};
 709
 710static int __devinit ab3100_setup(struct ab3100 *ab3100)
 711{
 712	int err = 0;
 713	int i;
 714
 715	for (i = 0; i < ARRAY_SIZE(ab3100_init_settings); i++) {
 716		err = ab3100_set_register_interruptible(ab3100,
 717					  ab3100_init_settings[i].abreg,
 718					  ab3100_init_settings[i].setting);
 719		if (err)
 720			goto exit_no_setup;
 721	}
 722
 723	/*
 724	 * Special trick to make the AB3100 use the 32kHz clock (RTC)
 725	 * bit 3 in test register 0x02 is a special, undocumented test
 726	 * register bit that only exist in AB3100 P1E
 727	 */
 728	if (ab3100->chip_id == 0xc4) {
 729		dev_warn(ab3100->dev,
 730			 "AB3100 P1E variant detected, "
 731			 "forcing chip to 32KHz\n");
 732		err = ab3100_set_test_register_interruptible(ab3100,
 733			0x02, 0x08);
 734	}
 735
 736 exit_no_setup:
 737	return err;
 738}
 739
 740/* The subdevices of the AB3100 */
 741static struct mfd_cell ab3100_devs[] = {
 742	{
 743		.name = "ab3100-dac",
 744		.id = -1,
 745	},
 746	{
 747		.name = "ab3100-leds",
 748		.id = -1,
 749	},
 750	{
 751		.name = "ab3100-power",
 752		.id = -1,
 753	},
 754	{
 755		.name = "ab3100-regulators",
 
 756		.id = -1,
 757	},
 758	{
 759		.name = "ab3100-sim",
 760		.id = -1,
 761	},
 762	{
 763		.name = "ab3100-uart",
 764		.id = -1,
 765	},
 766	{
 767		.name = "ab3100-rtc",
 768		.id = -1,
 769	},
 770	{
 771		.name = "ab3100-charger",
 772		.id = -1,
 773	},
 774	{
 775		.name = "ab3100-boost",
 776		.id = -1,
 777	},
 778	{
 779		.name = "ab3100-adc",
 780		.id = -1,
 781	},
 782	{
 783		.name = "ab3100-fuelgauge",
 784		.id = -1,
 785	},
 786	{
 787		.name = "ab3100-vibrator",
 788		.id = -1,
 789	},
 790	{
 791		.name = "ab3100-otp",
 792		.id = -1,
 793	},
 794	{
 795		.name = "ab3100-codec",
 796		.id = -1,
 797	},
 798};
 799
 800struct ab_family_id {
 801	u8	id;
 802	char	*name;
 803};
 804
 805static const struct ab_family_id ids[] __devinitconst = {
 806	/* AB3100 */
 807	{
 808		.id = 0xc0,
 809		.name = "P1A"
 810	}, {
 811		.id = 0xc1,
 812		.name = "P1B"
 813	}, {
 814		.id = 0xc2,
 815		.name = "P1C"
 816	}, {
 817		.id = 0xc3,
 818		.name = "P1D"
 819	}, {
 820		.id = 0xc4,
 821		.name = "P1E"
 822	}, {
 823		.id = 0xc5,
 824		.name = "P1F/R1A"
 825	}, {
 826		.id = 0xc6,
 827		.name = "P1G/R1A"
 828	}, {
 829		.id = 0xc7,
 830		.name = "P2A/R2A"
 831	}, {
 832		.id = 0xc8,
 833		.name = "P2B/R2B"
 834	},
 835	/* AB3000 variants, not supported */
 836	{
 837		.id = 0xa0
 838	}, {
 839		.id = 0xa1
 840	}, {
 841		.id = 0xa2
 842	}, {
 843		.id = 0xa3
 844	}, {
 845		.id = 0xa4
 846	}, {
 847		.id = 0xa5
 848	}, {
 849		.id = 0xa6
 850	}, {
 851		.id = 0xa7
 852	},
 853	/* Terminator */
 854	{
 855		.id = 0x00,
 856	},
 857};
 858
 859static int __devinit ab3100_probe(struct i2c_client *client,
 860				  const struct i2c_device_id *id)
 861{
 862	struct ab3100 *ab3100;
 863	struct ab3100_platform_data *ab3100_plf_data =
 864		client->dev.platform_data;
 865	int err;
 866	int i;
 867
 868	ab3100 = kzalloc(sizeof(struct ab3100), GFP_KERNEL);
 869	if (!ab3100) {
 870		dev_err(&client->dev, "could not allocate AB3100 device\n");
 871		return -ENOMEM;
 872	}
 873
 874	/* Initialize data structure */
 875	mutex_init(&ab3100->access_mutex);
 876	BLOCKING_INIT_NOTIFIER_HEAD(&ab3100->event_subscribers);
 877
 878	ab3100->i2c_client = client;
 879	ab3100->dev = &ab3100->i2c_client->dev;
 880
 881	i2c_set_clientdata(client, ab3100);
 882
 883	/* Read chip ID register */
 884	err = ab3100_get_register_interruptible(ab3100, AB3100_CID,
 885						&ab3100->chip_id);
 886	if (err) {
 887		dev_err(&client->dev,
 888			"could not communicate with the AB3100 analog "
 889			"baseband chip\n");
 890		goto exit_no_detect;
 891	}
 892
 893	for (i = 0; ids[i].id != 0x0; i++) {
 894		if (ids[i].id == ab3100->chip_id) {
 895			if (ids[i].name != NULL) {
 896				snprintf(&ab3100->chip_name[0],
 897					 sizeof(ab3100->chip_name) - 1,
 898					 "AB3100 %s",
 899					 ids[i].name);
 900				break;
 901			} else {
 902				dev_err(&client->dev,
 903					"AB3000 is not supported\n");
 904				goto exit_no_detect;
 905			}
 906		}
 907	}
 908
 
 
 
 909	if (ids[i].id == 0x0) {
 910		dev_err(&client->dev, "unknown analog baseband chip id: 0x%x\n",
 911			ab3100->chip_id);
 912		dev_err(&client->dev, "accepting it anyway. Please update "
 913			"the driver.\n");
 914		goto exit_no_detect;
 915	}
 916
 917	dev_info(&client->dev, "Detected chip: %s\n",
 918		 &ab3100->chip_name[0]);
 919
 920	/* Attach a second dummy i2c_client to the test register address */
 921	ab3100->testreg_client = i2c_new_dummy(client->adapter,
 922						     client->addr + 1);
 923	if (!ab3100->testreg_client) {
 924		err = -ENOMEM;
 925		goto exit_no_testreg_client;
 926	}
 927
 928	err = ab3100_setup(ab3100);
 929	if (err)
 930		goto exit_no_setup;
 931
 932	err = request_threaded_irq(client->irq, NULL, ab3100_irq_handler,
 933				IRQF_ONESHOT, "ab3100-core", ab3100);
 
 934	if (err)
 935		goto exit_no_irq;
 936
 937	err = abx500_register_ops(&client->dev, &ab3100_ops);
 938	if (err)
 939		goto exit_no_ops;
 940
 941	/* Set up and register the platform devices. */
 942	for (i = 0; i < ARRAY_SIZE(ab3100_devs); i++) {
 943		ab3100_devs[i].platform_data = ab3100_plf_data;
 944		ab3100_devs[i].pdata_size = sizeof(struct ab3100_platform_data);
 945	}
 946
 947	err = mfd_add_devices(&client->dev, 0, ab3100_devs,
 948		ARRAY_SIZE(ab3100_devs), NULL, 0);
 949
 950	ab3100_setup_debugfs(ab3100);
 951
 952	return 0;
 953
 954 exit_no_ops:
 955 exit_no_irq:
 956 exit_no_setup:
 957	i2c_unregister_device(ab3100->testreg_client);
 958 exit_no_testreg_client:
 959 exit_no_detect:
 960	kfree(ab3100);
 961	return err;
 962}
 963
 964static int __devexit ab3100_remove(struct i2c_client *client)
 965{
 966	struct ab3100 *ab3100 = i2c_get_clientdata(client);
 967
 968	/* Unregister subdevices */
 969	mfd_remove_devices(&client->dev);
 970
 971	ab3100_remove_debugfs();
 972	i2c_unregister_device(ab3100->testreg_client);
 973
 974	/*
 975	 * At this point, all subscribers should have unregistered
 976	 * their notifiers so deactivate IRQ
 977	 */
 978	free_irq(client->irq, ab3100);
 979	kfree(ab3100);
 980	return 0;
 981}
 982
 983static const struct i2c_device_id ab3100_id[] = {
 984	{ "ab3100", 0 },
 985	{ }
 986};
 987MODULE_DEVICE_TABLE(i2c, ab3100_id);
 988
 989static struct i2c_driver ab3100_driver = {
 990	.driver = {
 991		.name	= "ab3100",
 992		.owner	= THIS_MODULE,
 993	},
 994	.id_table	= ab3100_id,
 995	.probe		= ab3100_probe,
 996	.remove		= __devexit_p(ab3100_remove),
 997};
 998
 999static int __init ab3100_i2c_init(void)
1000{
1001	return i2c_add_driver(&ab3100_driver);
1002}
1003
1004static void __exit ab3100_i2c_exit(void)
1005{
1006	i2c_del_driver(&ab3100_driver);
1007}
1008
1009subsys_initcall(ab3100_i2c_init);
1010module_exit(ab3100_i2c_exit);
1011
1012MODULE_AUTHOR("Linus Walleij <linus.walleij@stericsson.com>");
1013MODULE_DESCRIPTION("AB3100 core driver");
1014MODULE_LICENSE("GPL");