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 AB3550 IC on the I2C bus
5
* and some basic chip-configuration.
6
* Author: Bengt Jonsson <bengt.g.jonsson@stericsson.com>
7
* Author: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
8
* Author: Mattias Wallin <mattias.wallin@stericsson.com>
9
* Author: Rickard Andersson <rickard.andersson@stericsson.com>
12
#include <linux/i2c.h>
13
#include <linux/mutex.h>
14
#include <linux/err.h>
15
#include <linux/platform_device.h>
16
#include <linux/slab.h>
17
#include <linux/device.h>
18
#include <linux/irq.h>
19
#include <linux/interrupt.h>
20
#include <linux/random.h>
21
#include <linux/workqueue.h>
22
#include <linux/debugfs.h>
23
#include <linux/seq_file.h>
24
#include <linux/uaccess.h>
25
#include <linux/mfd/abx500.h>
26
#include <linux/list.h>
27
#include <linux/bitops.h>
28
#include <linux/spinlock.h>
29
#include <linux/mfd/core.h>
31
#define AB3550_NAME_STRING "ab3550"
32
#define AB3550_ID_FORMAT_STRING "AB3550 %s"
33
#define AB3550_NUM_BANKS 2
34
#define AB3550_NUM_EVENT_REG 5
36
/* These are the only registers inside AB3550 used in this main file */
38
/* Chip ID register */
39
#define AB3550_CID_REG 0x20
41
/* Interrupt event registers */
42
#define AB3550_EVENT_BANK 0
43
#define AB3550_EVENT_REG 0x22
45
/* Read/write operation values. */
46
#define AB3550_PERM_RD (0x01)
47
#define AB3550_PERM_WR (0x02)
49
/* Read/write permissions. */
50
#define AB3550_PERM_RO (AB3550_PERM_RD)
51
#define AB3550_PERM_RW (AB3550_PERM_RD | AB3550_PERM_WR)
55
* @access_mutex: lock out concurrent accesses to the AB registers
56
* @i2c_client: I2C client for this chip
57
* @chip_name: name of this chip variant
58
* @chip_id: 8 bit chip ID for this chip variant
59
* @mask_work: a worker for writing to mask registers
60
* @event_lock: a lock to protect the event_mask
61
* @event_mask: a local copy of the mask event registers
62
* @startup_events: a copy of the first reading of the event registers
63
* @startup_events_read: whether the first events have been read
66
struct mutex access_mutex;
67
struct i2c_client *i2c_client[AB3550_NUM_BANKS];
70
struct work_struct mask_work;
71
spinlock_t event_lock;
72
u8 event_mask[AB3550_NUM_EVENT_REG];
73
u8 startup_events[AB3550_NUM_EVENT_REG];
74
bool startup_events_read;
75
#ifdef CONFIG_DEBUG_FS
76
unsigned int debug_bank;
77
unsigned int debug_address;
82
* struct ab3550_reg_range
83
* @first: the first address of the range
84
* @last: the last address of the range
85
* @perm: access permissions for the range
87
struct ab3550_reg_range {
94
* struct ab3550_reg_ranges
95
* @count: the number of ranges in the list
96
* @range: the list of register ranges
98
struct ab3550_reg_ranges {
100
const struct ab3550_reg_range *range;
104
* Permissible register ranges for reading and writing per device and bank.
106
* The ranges must be listed in increasing address order, and no overlaps are
107
* allowed. It is assumed that write permission implies read permission
108
* (i.e. only RO and RW permissions should be used). Ranges with write
109
* permission must not be split up.
112
#define NO_RANGE {.count = 0, .range = NULL,}
115
ab3550_reg_ranges ab3550_reg_ranges[AB3550_NUM_DEVICES][AB3550_NUM_BANKS] = {
116
[AB3550_DEVID_DAC] = {
120
.range = (struct ab3550_reg_range[]) {
124
.perm = AB3550_PERM_RW,
129
.perm = AB3550_PERM_RW,
134
[AB3550_DEVID_LEDS] = {
138
.range = (struct ab3550_reg_range[]) {
142
.perm = AB3550_PERM_RW,
147
.perm = AB3550_PERM_RW,
152
[AB3550_DEVID_POWER] = {
155
.range = (struct ab3550_reg_range[]) {
159
.perm = AB3550_PERM_RO,
165
[AB3550_DEVID_REGULATORS] = {
168
.range = (struct ab3550_reg_range[]) {
172
.perm = AB3550_PERM_RW,
178
.range = (struct ab3550_reg_range[]) {
182
.perm = AB3550_PERM_RW,
187
[AB3550_DEVID_SIM] = {
190
.range = (struct ab3550_reg_range[]) {
194
.perm = AB3550_PERM_RO,
200
.range = (struct ab3550_reg_range[]) {
204
.perm = AB3550_PERM_RW,
210
[AB3550_DEVID_UART] = {
214
[AB3550_DEVID_RTC] = {
217
.range = (struct ab3550_reg_range[]) {
221
.perm = AB3550_PERM_RW,
227
[AB3550_DEVID_CHARGER] = {
230
.range = (struct ab3550_reg_range[]) {
234
.perm = AB3550_PERM_RW,
239
.perm = AB3550_PERM_RO,
245
[AB3550_DEVID_ADC] = {
249
.range = (struct ab3550_reg_range[]) {
253
.perm = AB3550_PERM_RW,
259
[AB3550_DEVID_FUELGAUGE] = {
262
.range = (struct ab3550_reg_range[]) {
266
.perm = AB3550_PERM_RO,
272
.range = (struct ab3550_reg_range[]) {
276
.perm = AB3550_PERM_RW,
281
[AB3550_DEVID_VIBRATOR] = {
285
.range = (struct ab3550_reg_range[]) {
289
.perm = AB3550_PERM_RW,
295
[AB3550_DEVID_CODEC] = {
298
.range = (struct ab3550_reg_range[]) {
302
.perm = AB3550_PERM_RW,
307
.perm = AB3550_PERM_RW,
315
static struct mfd_cell ab3550_devs[AB3550_NUM_DEVICES] = {
316
[AB3550_DEVID_DAC] = {
317
.name = "ab3550-dac",
318
.id = AB3550_DEVID_DAC,
321
[AB3550_DEVID_LEDS] = {
322
.name = "ab3550-leds",
323
.id = AB3550_DEVID_LEDS,
325
[AB3550_DEVID_POWER] = {
326
.name = "ab3550-power",
327
.id = AB3550_DEVID_POWER,
329
[AB3550_DEVID_REGULATORS] = {
330
.name = "ab3550-regulators",
331
.id = AB3550_DEVID_REGULATORS,
333
[AB3550_DEVID_SIM] = {
334
.name = "ab3550-sim",
335
.id = AB3550_DEVID_SIM,
337
[AB3550_DEVID_UART] = {
338
.name = "ab3550-uart",
339
.id = AB3550_DEVID_UART,
341
[AB3550_DEVID_RTC] = {
342
.name = "ab3550-rtc",
343
.id = AB3550_DEVID_RTC,
345
[AB3550_DEVID_CHARGER] = {
346
.name = "ab3550-charger",
347
.id = AB3550_DEVID_CHARGER,
349
[AB3550_DEVID_ADC] = {
350
.name = "ab3550-adc",
351
.id = AB3550_DEVID_ADC,
353
.resources = (struct resource[]) {
356
.flags = IORESOURCE_IRQ,
362
.flags = IORESOURCE_IRQ,
368
.flags = IORESOURCE_IRQ,
374
.flags = IORESOURCE_IRQ,
380
.flags = IORESOURCE_IRQ,
386
.flags = IORESOURCE_IRQ,
392
.flags = IORESOURCE_IRQ,
398
.flags = IORESOURCE_IRQ,
403
.name = "TRIGGER-VBAT-TXON",
404
.flags = IORESOURCE_IRQ,
409
.name = "TRIGGER-VBAT",
410
.flags = IORESOURCE_IRQ,
416
[AB3550_DEVID_FUELGAUGE] = {
417
.name = "ab3550-fuelgauge",
418
.id = AB3550_DEVID_FUELGAUGE,
420
[AB3550_DEVID_VIBRATOR] = {
421
.name = "ab3550-vibrator",
422
.id = AB3550_DEVID_VIBRATOR,
424
[AB3550_DEVID_CODEC] = {
425
.name = "ab3550-codec",
426
.id = AB3550_DEVID_CODEC,
431
* I2C transactions with error messages.
433
static int ab3550_i2c_master_send(struct ab3550 *ab, u8 bank, u8 *data,
438
err = i2c_master_send(ab->i2c_client[bank], data, count);
440
dev_err(&ab->i2c_client[0]->dev, "send error: %d\n", err);
446
static int ab3550_i2c_master_recv(struct ab3550 *ab, u8 bank, u8 *data,
451
err = i2c_master_recv(ab->i2c_client[bank], data, count);
453
dev_err(&ab->i2c_client[0]->dev, "receive error: %d\n", err);
460
* Functionality for getting/setting register values.
462
static int get_register_interruptible(struct ab3550 *ab, u8 bank, u8 reg,
467
err = mutex_lock_interruptible(&ab->access_mutex);
471
err = ab3550_i2c_master_send(ab, bank, ®, 1);
473
err = ab3550_i2c_master_recv(ab, bank, value, 1);
475
mutex_unlock(&ab->access_mutex);
479
static int get_register_page_interruptible(struct ab3550 *ab, u8 bank,
480
u8 first_reg, u8 *regvals, u8 numregs)
484
err = mutex_lock_interruptible(&ab->access_mutex);
488
err = ab3550_i2c_master_send(ab, bank, &first_reg, 1);
490
err = ab3550_i2c_master_recv(ab, bank, regvals, numregs);
492
mutex_unlock(&ab->access_mutex);
496
static int mask_and_set_register_interruptible(struct ab3550 *ab, u8 bank,
497
u8 reg, u8 bitmask, u8 bitvalues)
501
if (likely(bitmask)) {
502
u8 reg_bits[2] = {reg, 0};
504
err = mutex_lock_interruptible(&ab->access_mutex);
508
if (bitmask == 0xFF) /* No need to read in this case. */
509
reg_bits[1] = bitvalues;
510
else { /* Read and modify the register value. */
513
err = ab3550_i2c_master_send(ab, bank, ®, 1);
515
goto unlock_and_return;
516
err = ab3550_i2c_master_recv(ab, bank, &bits, 1);
518
goto unlock_and_return;
519
reg_bits[1] = ((~bitmask & bits) |
520
(bitmask & bitvalues));
522
/* Write the new value. */
523
err = ab3550_i2c_master_send(ab, bank, reg_bits, 2);
525
mutex_unlock(&ab->access_mutex);
531
* Read/write permission checking functions.
533
static bool page_write_allowed(const struct ab3550_reg_ranges *ranges,
534
u8 first_reg, u8 last_reg)
538
if (last_reg < first_reg)
541
for (i = 0; i < ranges->count; i++) {
542
if (first_reg < ranges->range[i].first)
544
if ((last_reg <= ranges->range[i].last) &&
545
(ranges->range[i].perm & AB3550_PERM_WR))
551
static bool reg_write_allowed(const struct ab3550_reg_ranges *ranges, u8 reg)
553
return page_write_allowed(ranges, reg, reg);
556
static bool page_read_allowed(const struct ab3550_reg_ranges *ranges,
557
u8 first_reg, u8 last_reg)
561
if (last_reg < first_reg)
563
/* Find the range (if it exists in the list) that includes first_reg. */
564
for (i = 0; i < ranges->count; i++) {
565
if (first_reg < ranges->range[i].first)
567
if (first_reg <= ranges->range[i].last)
570
/* Make sure that the entire range up to and including last_reg is
571
* readable. This may span several of the ranges in the list.
573
while ((i < ranges->count) &&
574
(ranges->range[i].perm & AB3550_PERM_RD)) {
575
if (last_reg <= ranges->range[i].last)
577
if ((++i >= ranges->count) ||
578
(ranges->range[i].first !=
579
(ranges->range[i - 1].last + 1))) {
586
static bool reg_read_allowed(const struct ab3550_reg_ranges *ranges, u8 reg)
588
return page_read_allowed(ranges, reg, reg);
592
* The register access functionality.
594
static int ab3550_get_chip_id(struct device *dev)
596
struct ab3550 *ab = dev_get_drvdata(dev->parent);
597
return (int)ab->chip_id;
600
static int ab3550_mask_and_set_register_interruptible(struct device *dev,
601
u8 bank, u8 reg, u8 bitmask, u8 bitvalues)
604
struct platform_device *pdev = to_platform_device(dev);
606
if ((AB3550_NUM_BANKS <= bank) ||
607
!reg_write_allowed(&ab3550_reg_ranges[pdev->id][bank], reg))
610
ab = dev_get_drvdata(dev->parent);
611
return mask_and_set_register_interruptible(ab, bank, reg,
615
static int ab3550_set_register_interruptible(struct device *dev, u8 bank,
618
return ab3550_mask_and_set_register_interruptible(dev, bank, reg, 0xFF,
622
static int ab3550_get_register_interruptible(struct device *dev, u8 bank,
626
struct platform_device *pdev = to_platform_device(dev);
628
if ((AB3550_NUM_BANKS <= bank) ||
629
!reg_read_allowed(&ab3550_reg_ranges[pdev->id][bank], reg))
632
ab = dev_get_drvdata(dev->parent);
633
return get_register_interruptible(ab, bank, reg, value);
636
static int ab3550_get_register_page_interruptible(struct device *dev, u8 bank,
637
u8 first_reg, u8 *regvals, u8 numregs)
640
struct platform_device *pdev = to_platform_device(dev);
642
if ((AB3550_NUM_BANKS <= bank) ||
643
!page_read_allowed(&ab3550_reg_ranges[pdev->id][bank],
644
first_reg, (first_reg + numregs - 1)))
647
ab = dev_get_drvdata(dev->parent);
648
return get_register_page_interruptible(ab, bank, first_reg, regvals,
652
static int ab3550_event_registers_startup_state_get(struct device *dev,
657
ab = dev_get_drvdata(dev->parent);
658
if (!ab->startup_events_read)
659
return -EAGAIN; /* Try again later */
661
memcpy(event, ab->startup_events, AB3550_NUM_EVENT_REG);
665
static int ab3550_startup_irq_enabled(struct device *dev, unsigned int irq)
668
struct ab3550_platform_data *plf_data;
671
ab = irq_get_chip_data(irq);
672
plf_data = ab->i2c_client[0]->dev.platform_data;
673
irq -= plf_data->irq.base;
674
val = ((ab->startup_events[irq / 8] & BIT(irq % 8)) != 0);
679
static struct abx500_ops ab3550_ops = {
680
.get_chip_id = ab3550_get_chip_id,
681
.get_register = ab3550_get_register_interruptible,
682
.set_register = ab3550_set_register_interruptible,
683
.get_register_page = ab3550_get_register_page_interruptible,
684
.set_register_page = NULL,
685
.mask_and_set_register = ab3550_mask_and_set_register_interruptible,
686
.event_registers_startup_state_get =
687
ab3550_event_registers_startup_state_get,
688
.startup_irq_enabled = ab3550_startup_irq_enabled,
691
static irqreturn_t ab3550_irq_handler(int irq, void *data)
693
struct ab3550 *ab = data;
696
u8 e[AB3550_NUM_EVENT_REG];
700
events = (ab->startup_events_read ? e : ab->startup_events);
702
err = get_register_page_interruptible(ab, AB3550_EVENT_BANK,
703
AB3550_EVENT_REG, events, AB3550_NUM_EVENT_REG);
707
if (!ab->startup_events_read) {
708
dev_info(&ab->i2c_client[0]->dev,
709
"startup events 0x%x,0x%x,0x%x,0x%x,0x%x\n",
710
ab->startup_events[0], ab->startup_events[1],
711
ab->startup_events[2], ab->startup_events[3],
712
ab->startup_events[4]);
713
ab->startup_events_read = true;
717
/* The two highest bits in event[4] are not used. */
720
spin_lock_irqsave(&ab->event_lock, flags);
721
for (i = 0; i < AB3550_NUM_EVENT_REG; i++)
722
events[i] &= ~ab->event_mask[i];
723
spin_unlock_irqrestore(&ab->event_lock, flags);
725
for (i = 0; i < AB3550_NUM_EVENT_REG; i++) {
729
dev_dbg(&ab->i2c_client[0]->dev, "IRQ Event[%d]: 0x%2x\n",
732
event_reg = events[i];
733
for (bit = 0; event_reg; bit++, event_reg /= 2) {
736
struct ab3550_platform_data *plf_data;
738
plf_data = ab->i2c_client[0]->dev.platform_data;
739
irq = plf_data->irq.base + (i * 8) + bit;
740
handle_nested_irq(irq);
748
dev_dbg(&ab->i2c_client[0]->dev, "error reading event registers\n");
752
#ifdef CONFIG_DEBUG_FS
753
static struct ab3550_reg_ranges debug_ranges[AB3550_NUM_BANKS] = {
756
.range = (struct ab3550_reg_range[]) {
785
.range = (struct ab3550_reg_range[]) {
822
static int ab3550_registers_print(struct seq_file *s, void *p)
824
struct ab3550 *ab = s->private;
827
seq_printf(s, AB3550_NAME_STRING " register values:\n");
829
for (bank = 0; bank < AB3550_NUM_BANKS; bank++) {
832
seq_printf(s, " bank %d:\n", bank);
833
for (i = 0; i < debug_ranges[bank].count; i++) {
836
for (reg = debug_ranges[bank].range[i].first;
837
reg <= debug_ranges[bank].range[i].last;
841
get_register_interruptible(ab, bank, reg,
843
seq_printf(s, " [%d/0x%02X]: 0x%02X\n", bank,
851
static int ab3550_registers_open(struct inode *inode, struct file *file)
853
return single_open(file, ab3550_registers_print, inode->i_private);
856
static const struct file_operations ab3550_registers_fops = {
857
.open = ab3550_registers_open,
860
.release = single_release,
861
.owner = THIS_MODULE,
864
static int ab3550_bank_print(struct seq_file *s, void *p)
866
struct ab3550 *ab = s->private;
868
seq_printf(s, "%d\n", ab->debug_bank);
872
static int ab3550_bank_open(struct inode *inode, struct file *file)
874
return single_open(file, ab3550_bank_print, inode->i_private);
877
static ssize_t ab3550_bank_write(struct file *file,
878
const char __user *user_buf,
879
size_t count, loff_t *ppos)
881
struct ab3550 *ab = ((struct seq_file *)(file->private_data))->private;
884
unsigned long user_bank;
887
/* Get userspace string and assure termination */
888
buf_size = min(count, (sizeof(buf) - 1));
889
if (copy_from_user(buf, user_buf, buf_size))
893
err = strict_strtoul(buf, 0, &user_bank);
897
if (user_bank >= AB3550_NUM_BANKS) {
898
dev_err(&ab->i2c_client[0]->dev,
899
"debugfs error input > number of banks\n");
903
ab->debug_bank = user_bank;
908
static int ab3550_address_print(struct seq_file *s, void *p)
910
struct ab3550 *ab = s->private;
912
seq_printf(s, "0x%02X\n", ab->debug_address);
916
static int ab3550_address_open(struct inode *inode, struct file *file)
918
return single_open(file, ab3550_address_print, inode->i_private);
921
static ssize_t ab3550_address_write(struct file *file,
922
const char __user *user_buf,
923
size_t count, loff_t *ppos)
925
struct ab3550 *ab = ((struct seq_file *)(file->private_data))->private;
928
unsigned long user_address;
931
/* Get userspace string and assure termination */
932
buf_size = min(count, (sizeof(buf) - 1));
933
if (copy_from_user(buf, user_buf, buf_size))
937
err = strict_strtoul(buf, 0, &user_address);
940
if (user_address > 0xff) {
941
dev_err(&ab->i2c_client[0]->dev,
942
"debugfs error input > 0xff\n");
945
ab->debug_address = user_address;
949
static int ab3550_val_print(struct seq_file *s, void *p)
951
struct ab3550 *ab = s->private;
955
err = get_register_interruptible(ab, (u8)ab->debug_bank,
956
(u8)ab->debug_address, ®value);
959
seq_printf(s, "0x%02X\n", regvalue);
964
static int ab3550_val_open(struct inode *inode, struct file *file)
966
return single_open(file, ab3550_val_print, inode->i_private);
969
static ssize_t ab3550_val_write(struct file *file,
970
const char __user *user_buf,
971
size_t count, loff_t *ppos)
973
struct ab3550 *ab = ((struct seq_file *)(file->private_data))->private;
976
unsigned long user_val;
980
/* Get userspace string and assure termination */
981
buf_size = min(count, (sizeof(buf)-1));
982
if (copy_from_user(buf, user_buf, buf_size))
986
err = strict_strtoul(buf, 0, &user_val);
989
if (user_val > 0xff) {
990
dev_err(&ab->i2c_client[0]->dev,
991
"debugfs error input > 0xff\n");
994
err = mask_and_set_register_interruptible(
995
ab, (u8)ab->debug_bank,
996
(u8)ab->debug_address, 0xFF, (u8)user_val);
1000
get_register_interruptible(ab, (u8)ab->debug_bank,
1001
(u8)ab->debug_address, ®value);
1008
static const struct file_operations ab3550_bank_fops = {
1009
.open = ab3550_bank_open,
1010
.write = ab3550_bank_write,
1012
.llseek = seq_lseek,
1013
.release = single_release,
1014
.owner = THIS_MODULE,
1017
static const struct file_operations ab3550_address_fops = {
1018
.open = ab3550_address_open,
1019
.write = ab3550_address_write,
1021
.llseek = seq_lseek,
1022
.release = single_release,
1023
.owner = THIS_MODULE,
1026
static const struct file_operations ab3550_val_fops = {
1027
.open = ab3550_val_open,
1028
.write = ab3550_val_write,
1030
.llseek = seq_lseek,
1031
.release = single_release,
1032
.owner = THIS_MODULE,
1035
static struct dentry *ab3550_dir;
1036
static struct dentry *ab3550_reg_file;
1037
static struct dentry *ab3550_bank_file;
1038
static struct dentry *ab3550_address_file;
1039
static struct dentry *ab3550_val_file;
1041
static inline void ab3550_setup_debugfs(struct ab3550 *ab)
1044
ab->debug_address = 0x00;
1046
ab3550_dir = debugfs_create_dir(AB3550_NAME_STRING, NULL);
1048
goto exit_no_debugfs;
1050
ab3550_reg_file = debugfs_create_file("all-registers",
1051
S_IRUGO, ab3550_dir, ab, &ab3550_registers_fops);
1052
if (!ab3550_reg_file)
1053
goto exit_destroy_dir;
1055
ab3550_bank_file = debugfs_create_file("register-bank",
1056
(S_IRUGO | S_IWUSR), ab3550_dir, ab, &ab3550_bank_fops);
1057
if (!ab3550_bank_file)
1058
goto exit_destroy_reg;
1060
ab3550_address_file = debugfs_create_file("register-address",
1061
(S_IRUGO | S_IWUSR), ab3550_dir, ab, &ab3550_address_fops);
1062
if (!ab3550_address_file)
1063
goto exit_destroy_bank;
1065
ab3550_val_file = debugfs_create_file("register-value",
1066
(S_IRUGO | S_IWUSR), ab3550_dir, ab, &ab3550_val_fops);
1067
if (!ab3550_val_file)
1068
goto exit_destroy_address;
1072
exit_destroy_address:
1073
debugfs_remove(ab3550_address_file);
1075
debugfs_remove(ab3550_bank_file);
1077
debugfs_remove(ab3550_reg_file);
1079
debugfs_remove(ab3550_dir);
1081
dev_err(&ab->i2c_client[0]->dev, "failed to create debugfs entries.\n");
1085
static inline void ab3550_remove_debugfs(void)
1087
debugfs_remove(ab3550_val_file);
1088
debugfs_remove(ab3550_address_file);
1089
debugfs_remove(ab3550_bank_file);
1090
debugfs_remove(ab3550_reg_file);
1091
debugfs_remove(ab3550_dir);
1094
#else /* !CONFIG_DEBUG_FS */
1095
static inline void ab3550_setup_debugfs(struct ab3550 *ab)
1098
static inline void ab3550_remove_debugfs(void)
1104
* Basic set-up, datastructure creation/destruction and I2C interface.
1105
* This sets up a default config in the AB3550 chip so that it
1106
* will work as expected.
1108
static int __init ab3550_setup(struct ab3550 *ab)
1112
struct ab3550_platform_data *plf_data;
1113
struct abx500_init_settings *settings;
1115
plf_data = ab->i2c_client[0]->dev.platform_data;
1116
settings = plf_data->init_settings;
1118
for (i = 0; i < plf_data->init_settings_sz; i++) {
1119
err = mask_and_set_register_interruptible(ab,
1122
0xFF, settings[i].setting);
1126
/* If event mask register update the event mask in ab3550 */
1127
if ((settings[i].bank == 0) &&
1128
(AB3550_IMR1 <= settings[i].reg) &&
1129
(settings[i].reg <= AB3550_IMR5)) {
1130
ab->event_mask[settings[i].reg - AB3550_IMR1] =
1131
settings[i].setting;
1138
static void ab3550_mask_work(struct work_struct *work)
1140
struct ab3550 *ab = container_of(work, struct ab3550, mask_work);
1142
unsigned long flags;
1143
u8 mask[AB3550_NUM_EVENT_REG];
1145
spin_lock_irqsave(&ab->event_lock, flags);
1146
for (i = 0; i < AB3550_NUM_EVENT_REG; i++)
1147
mask[i] = ab->event_mask[i];
1148
spin_unlock_irqrestore(&ab->event_lock, flags);
1150
for (i = 0; i < AB3550_NUM_EVENT_REG; i++) {
1153
err = mask_and_set_register_interruptible(ab, 0,
1154
(AB3550_IMR1 + i), ~0, mask[i]);
1156
dev_err(&ab->i2c_client[0]->dev,
1157
"ab3550_mask_work failed 0x%x,0x%x\n",
1158
(AB3550_IMR1 + i), mask[i]);
1162
static void ab3550_mask(struct irq_data *data)
1164
unsigned long flags;
1166
struct ab3550_platform_data *plf_data;
1169
ab = irq_data_get_irq_chip_data(data);
1170
plf_data = ab->i2c_client[0]->dev.platform_data;
1171
irq = data->irq - plf_data->irq.base;
1173
spin_lock_irqsave(&ab->event_lock, flags);
1174
ab->event_mask[irq / 8] |= BIT(irq % 8);
1175
spin_unlock_irqrestore(&ab->event_lock, flags);
1177
schedule_work(&ab->mask_work);
1180
static void ab3550_unmask(struct irq_data *data)
1182
unsigned long flags;
1184
struct ab3550_platform_data *plf_data;
1187
ab = irq_data_get_irq_chip_data(data);
1188
plf_data = ab->i2c_client[0]->dev.platform_data;
1189
irq = data->irq - plf_data->irq.base;
1191
spin_lock_irqsave(&ab->event_lock, flags);
1192
ab->event_mask[irq / 8] &= ~BIT(irq % 8);
1193
spin_unlock_irqrestore(&ab->event_lock, flags);
1195
schedule_work(&ab->mask_work);
1198
static void noop(struct irq_data *data)
1202
static struct irq_chip ab3550_irq_chip = {
1203
.name = "ab3550-core", /* Keep the same name as the request */
1204
.irq_disable = ab3550_mask, /* No default to mask in chip.c */
1206
.irq_mask = ab3550_mask,
1207
.irq_unmask = ab3550_unmask,
1210
struct ab_family_id {
1215
static const struct ab_family_id ids[] __initdata = {
1227
static int __init ab3550_probe(struct i2c_client *client,
1228
const struct i2c_device_id *id)
1231
struct ab3550_platform_data *ab3550_plf_data =
1232
client->dev.platform_data;
1235
int num_i2c_clients = 0;
1237
ab = kzalloc(sizeof(struct ab3550), GFP_KERNEL);
1239
dev_err(&client->dev,
1240
"could not allocate " AB3550_NAME_STRING " device\n");
1244
/* Initialize data structure */
1245
mutex_init(&ab->access_mutex);
1246
spin_lock_init(&ab->event_lock);
1247
ab->i2c_client[0] = client;
1249
i2c_set_clientdata(client, ab);
1251
/* Read chip ID register */
1252
err = get_register_interruptible(ab, 0, AB3550_CID_REG, &ab->chip_id);
1254
dev_err(&client->dev, "could not communicate with the analog "
1256
goto exit_no_detect;
1259
for (i = 0; ids[i].id != 0x0; i++) {
1260
if (ids[i].id == ab->chip_id) {
1261
snprintf(&ab->chip_name[0], sizeof(ab->chip_name) - 1,
1262
AB3550_ID_FORMAT_STRING, ids[i].name);
1267
if (ids[i].id == 0x0) {
1268
dev_err(&client->dev, "unknown analog baseband chip id: 0x%x\n",
1270
dev_err(&client->dev, "driver not started!\n");
1271
goto exit_no_detect;
1274
dev_info(&client->dev, "detected AB chip: %s\n", &ab->chip_name[0]);
1276
/* Attach other dummy I2C clients. */
1277
while (++num_i2c_clients < AB3550_NUM_BANKS) {
1278
ab->i2c_client[num_i2c_clients] =
1279
i2c_new_dummy(client->adapter,
1280
(client->addr + num_i2c_clients));
1281
if (!ab->i2c_client[num_i2c_clients]) {
1283
goto exit_no_dummy_client;
1285
strlcpy(ab->i2c_client[num_i2c_clients]->name, id->name,
1286
sizeof(ab->i2c_client[num_i2c_clients]->name));
1289
err = ab3550_setup(ab);
1293
INIT_WORK(&ab->mask_work, ab3550_mask_work);
1295
for (i = 0; i < ab3550_plf_data->irq.count; i++) {
1298
irq = ab3550_plf_data->irq.base + i;
1299
irq_set_chip_data(irq, ab);
1300
irq_set_chip_and_handler(irq, &ab3550_irq_chip,
1302
irq_set_nested_thread(irq, 1);
1304
set_irq_flags(irq, IRQF_VALID);
1306
irq_set_noprobe(irq);
1310
err = request_threaded_irq(client->irq, NULL, ab3550_irq_handler,
1311
IRQF_ONESHOT, "ab3550-core", ab);
1312
/* This real unpredictable IRQ is of course sampled for entropy */
1313
rand_initialize_irq(client->irq);
1318
err = abx500_register_ops(&client->dev, &ab3550_ops);
1322
/* Set up and register the platform devices. */
1323
for (i = 0; i < AB3550_NUM_DEVICES; i++) {
1324
ab3550_devs[i].platform_data = ab3550_plf_data->dev_data[i];
1325
ab3550_devs[i].pdata_size = ab3550_plf_data->dev_data_sz[i];
1328
err = mfd_add_devices(&client->dev, 0, ab3550_devs,
1329
ARRAY_SIZE(ab3550_devs), NULL,
1330
ab3550_plf_data->irq.base);
1332
ab3550_setup_debugfs(ab);
1339
exit_no_dummy_client:
1340
/* Unregister the dummy i2c clients. */
1341
while (--num_i2c_clients)
1342
i2c_unregister_device(ab->i2c_client[num_i2c_clients]);
1348
static int __exit ab3550_remove(struct i2c_client *client)
1350
struct ab3550 *ab = i2c_get_clientdata(client);
1351
int num_i2c_clients = AB3550_NUM_BANKS;
1353
mfd_remove_devices(&client->dev);
1354
ab3550_remove_debugfs();
1356
while (--num_i2c_clients)
1357
i2c_unregister_device(ab->i2c_client[num_i2c_clients]);
1360
* At this point, all subscribers should have unregistered
1361
* their notifiers so deactivate IRQ
1363
free_irq(client->irq, ab);
1368
static const struct i2c_device_id ab3550_id[] = {
1369
{AB3550_NAME_STRING, 0},
1372
MODULE_DEVICE_TABLE(i2c, ab3550_id);
1374
static struct i2c_driver ab3550_driver = {
1376
.name = AB3550_NAME_STRING,
1377
.owner = THIS_MODULE,
1379
.id_table = ab3550_id,
1380
.probe = ab3550_probe,
1381
.remove = __exit_p(ab3550_remove),
1384
static int __init ab3550_i2c_init(void)
1386
return i2c_add_driver(&ab3550_driver);
1389
static void __exit ab3550_i2c_exit(void)
1391
i2c_del_driver(&ab3550_driver);
1394
subsys_initcall(ab3550_i2c_init);
1395
module_exit(ab3550_i2c_exit);
1397
MODULE_AUTHOR("Mattias Wallin <mattias.wallin@stericsson.com>");
1398
MODULE_DESCRIPTION("AB3550 core driver");
1399
MODULE_LICENSE("GPL");