diff options
Diffstat (limited to 'drivers/mfd/ab3100-core.c')
-rw-r--r-- | drivers/mfd/ab3100-core.c | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/drivers/mfd/ab3100-core.c b/drivers/mfd/ab3100-core.c index 8ff10cb77cac..ffe4b6415465 100644 --- a/drivers/mfd/ab3100-core.c +++ b/drivers/mfd/ab3100-core.c | |||
@@ -77,7 +77,7 @@ u8 ab3100_get_chip_type(struct ab3100 *ab3100) | |||
77 | } | 77 | } |
78 | EXPORT_SYMBOL(ab3100_get_chip_type); | 78 | EXPORT_SYMBOL(ab3100_get_chip_type); |
79 | 79 | ||
80 | int ab3100_set_register(struct ab3100 *ab3100, u8 reg, u8 regval) | 80 | int ab3100_set_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 regval) |
81 | { | 81 | { |
82 | u8 regandval[2] = {reg, regval}; | 82 | u8 regandval[2] = {reg, regval}; |
83 | int err; | 83 | int err; |
@@ -109,7 +109,8 @@ int ab3100_set_register(struct ab3100 *ab3100, u8 reg, u8 regval) | |||
109 | mutex_unlock(&ab3100->access_mutex); | 109 | mutex_unlock(&ab3100->access_mutex); |
110 | return 0; | 110 | return 0; |
111 | } | 111 | } |
112 | EXPORT_SYMBOL(ab3100_set_register); | 112 | EXPORT_SYMBOL(ab3100_set_register_interruptible); |
113 | |||
113 | 114 | ||
114 | /* | 115 | /* |
115 | * The test registers exist at an I2C bus address up one | 116 | * The test registers exist at an I2C bus address up one |
@@ -118,7 +119,7 @@ EXPORT_SYMBOL(ab3100_set_register); | |||
118 | * anyway. It's currently only used from this file so declare | 119 | * anyway. It's currently only used from this file so declare |
119 | * it static and do not export. | 120 | * it static and do not export. |
120 | */ | 121 | */ |
121 | static int ab3100_set_test_register(struct ab3100 *ab3100, | 122 | static int ab3100_set_test_register_interruptible(struct ab3100 *ab3100, |
122 | u8 reg, u8 regval) | 123 | u8 reg, u8 regval) |
123 | { | 124 | { |
124 | u8 regandval[2] = {reg, regval}; | 125 | u8 regandval[2] = {reg, regval}; |
@@ -148,7 +149,8 @@ static int ab3100_set_test_register(struct ab3100 *ab3100, | |||
148 | return err; | 149 | return err; |
149 | } | 150 | } |
150 | 151 | ||
151 | int ab3100_get_register(struct ab3100 *ab3100, u8 reg, u8 *regval) | 152 | |
153 | int ab3100_get_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 *regval) | ||
152 | { | 154 | { |
153 | int err; | 155 | int err; |
154 | 156 | ||
@@ -202,9 +204,10 @@ int ab3100_get_register(struct ab3100 *ab3100, u8 reg, u8 *regval) | |||
202 | mutex_unlock(&ab3100->access_mutex); | 204 | mutex_unlock(&ab3100->access_mutex); |
203 | return err; | 205 | return err; |
204 | } | 206 | } |
205 | EXPORT_SYMBOL(ab3100_get_register); | 207 | EXPORT_SYMBOL(ab3100_get_register_interruptible); |
208 | |||
206 | 209 | ||
207 | int ab3100_get_register_page(struct ab3100 *ab3100, | 210 | int ab3100_get_register_page_interruptible(struct ab3100 *ab3100, |
208 | u8 first_reg, u8 *regvals, u8 numregs) | 211 | u8 first_reg, u8 *regvals, u8 numregs) |
209 | { | 212 | { |
210 | int err; | 213 | int err; |
@@ -258,9 +261,10 @@ int ab3100_get_register_page(struct ab3100 *ab3100, | |||
258 | mutex_unlock(&ab3100->access_mutex); | 261 | mutex_unlock(&ab3100->access_mutex); |
259 | return err; | 262 | return err; |
260 | } | 263 | } |
261 | EXPORT_SYMBOL(ab3100_get_register_page); | 264 | EXPORT_SYMBOL(ab3100_get_register_page_interruptible); |
262 | 265 | ||
263 | int ab3100_mask_and_set_register(struct ab3100 *ab3100, | 266 | |
267 | int ab3100_mask_and_set_register_interruptible(struct ab3100 *ab3100, | ||
264 | u8 reg, u8 andmask, u8 ormask) | 268 | u8 reg, u8 andmask, u8 ormask) |
265 | { | 269 | { |
266 | u8 regandval[2] = {reg, 0}; | 270 | u8 regandval[2] = {reg, 0}; |
@@ -328,7 +332,8 @@ int ab3100_mask_and_set_register(struct ab3100 *ab3100, | |||
328 | mutex_unlock(&ab3100->access_mutex); | 332 | mutex_unlock(&ab3100->access_mutex); |
329 | return err; | 333 | return err; |
330 | } | 334 | } |
331 | EXPORT_SYMBOL(ab3100_mask_and_set_register); | 335 | EXPORT_SYMBOL(ab3100_mask_and_set_register_interruptible); |
336 | |||
332 | 337 | ||
333 | /* | 338 | /* |
334 | * Register a simple callback for handling any AB3100 events. | 339 | * Register a simple callback for handling any AB3100 events. |
@@ -371,7 +376,7 @@ static void ab3100_work(struct work_struct *work) | |||
371 | u32 fatevent; | 376 | u32 fatevent; |
372 | int err; | 377 | int err; |
373 | 378 | ||
374 | err = ab3100_get_register_page(ab3100, AB3100_EVENTA1, | 379 | err = ab3100_get_register_page_interruptible(ab3100, AB3100_EVENTA1, |
375 | event_regs, 3); | 380 | event_regs, 3); |
376 | if (err) | 381 | if (err) |
377 | goto err_event_wq; | 382 | goto err_event_wq; |
@@ -435,7 +440,7 @@ static int ab3100_registers_print(struct seq_file *s, void *p) | |||
435 | seq_printf(s, "AB3100 registers:\n"); | 440 | seq_printf(s, "AB3100 registers:\n"); |
436 | 441 | ||
437 | for (reg = 0; reg < 0xff; reg++) { | 442 | for (reg = 0; reg < 0xff; reg++) { |
438 | ab3100_get_register(ab3100, reg, &value); | 443 | ab3100_get_register_interruptible(ab3100, reg, &value); |
439 | seq_printf(s, "[0x%x]: 0x%x\n", reg, value); | 444 | seq_printf(s, "[0x%x]: 0x%x\n", reg, value); |
440 | } | 445 | } |
441 | return 0; | 446 | return 0; |
@@ -515,7 +520,7 @@ static ssize_t ab3100_get_set_reg(struct file *file, | |||
515 | u8 reg = (u8) user_reg; | 520 | u8 reg = (u8) user_reg; |
516 | u8 regvalue; | 521 | u8 regvalue; |
517 | 522 | ||
518 | ab3100_get_register(ab3100, reg, ®value); | 523 | ab3100_get_register_interruptible(ab3100, reg, ®value); |
519 | 524 | ||
520 | dev_info(ab3100->dev, | 525 | dev_info(ab3100->dev, |
521 | "debug read AB3100 reg[0x%02x]: 0x%02x\n", | 526 | "debug read AB3100 reg[0x%02x]: 0x%02x\n", |
@@ -547,8 +552,8 @@ static ssize_t ab3100_get_set_reg(struct file *file, | |||
547 | return -EINVAL; | 552 | return -EINVAL; |
548 | 553 | ||
549 | value = (u8) user_value; | 554 | value = (u8) user_value; |
550 | ab3100_set_register(ab3100, reg, value); | 555 | ab3100_set_register_interruptible(ab3100, reg, value); |
551 | ab3100_get_register(ab3100, reg, ®value); | 556 | ab3100_get_register_interruptible(ab3100, reg, ®value); |
552 | 557 | ||
553 | dev_info(ab3100->dev, | 558 | dev_info(ab3100->dev, |
554 | "debug write reg[0x%02x] with 0x%02x, " | 559 | "debug write reg[0x%02x] with 0x%02x, " |
@@ -696,7 +701,7 @@ static int __init ab3100_setup(struct ab3100 *ab3100) | |||
696 | int i; | 701 | int i; |
697 | 702 | ||
698 | for (i = 0; i < ARRAY_SIZE(ab3100_init_settings); i++) { | 703 | for (i = 0; i < ARRAY_SIZE(ab3100_init_settings); i++) { |
699 | err = ab3100_set_register(ab3100, | 704 | err = ab3100_set_register_interruptible(ab3100, |
700 | ab3100_init_settings[i].abreg, | 705 | ab3100_init_settings[i].abreg, |
701 | ab3100_init_settings[i].setting); | 706 | ab3100_init_settings[i].setting); |
702 | if (err) | 707 | if (err) |
@@ -705,14 +710,14 @@ static int __init ab3100_setup(struct ab3100 *ab3100) | |||
705 | 710 | ||
706 | /* | 711 | /* |
707 | * Special trick to make the AB3100 use the 32kHz clock (RTC) | 712 | * Special trick to make the AB3100 use the 32kHz clock (RTC) |
708 | * bit 3 in test registe 0x02 is a special, undocumented test | 713 | * bit 3 in test register 0x02 is a special, undocumented test |
709 | * register bit that only exist in AB3100 P1E | 714 | * register bit that only exist in AB3100 P1E |
710 | */ | 715 | */ |
711 | if (ab3100->chip_id == 0xc4) { | 716 | if (ab3100->chip_id == 0xc4) { |
712 | dev_warn(ab3100->dev, | 717 | dev_warn(ab3100->dev, |
713 | "AB3100 P1E variant detected, " | 718 | "AB3100 P1E variant detected, " |
714 | "forcing chip to 32KHz\n"); | 719 | "forcing chip to 32KHz\n"); |
715 | err = ab3100_set_test_register(ab3100, 0x02, 0x08); | 720 | err = ab3100_set_test_register_interruptible(ab3100, 0x02, 0x08); |
716 | } | 721 | } |
717 | 722 | ||
718 | exit_no_setup: | 723 | exit_no_setup: |
@@ -852,8 +857,8 @@ static int __init ab3100_probe(struct i2c_client *client, | |||
852 | i2c_set_clientdata(client, ab3100); | 857 | i2c_set_clientdata(client, ab3100); |
853 | 858 | ||
854 | /* Read chip ID register */ | 859 | /* Read chip ID register */ |
855 | err = ab3100_get_register(ab3100, AB3100_CID, | 860 | err = ab3100_get_register_interruptible(ab3100, AB3100_CID, |
856 | &ab3100->chip_id); | 861 | &ab3100->chip_id); |
857 | if (err) { | 862 | if (err) { |
858 | dev_err(&client->dev, | 863 | dev_err(&client->dev, |
859 | "could not communicate with the AB3100 analog " | 864 | "could not communicate with the AB3100 analog " |