Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.1-rc9 1380 lines 31 kB view raw
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 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> 10 */ 11 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> 30 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 35 36/* These are the only registers inside AB3550 used in this main file */ 37 38/* Chip ID register */ 39#define AB3550_CID_REG 0x20 40 41/* Interrupt event registers */ 42#define AB3550_EVENT_BANK 0 43#define AB3550_EVENT_REG 0x22 44 45/* Read/write operation values. */ 46#define AB3550_PERM_RD (0x01) 47#define AB3550_PERM_WR (0x02) 48 49/* Read/write permissions. */ 50#define AB3550_PERM_RO (AB3550_PERM_RD) 51#define AB3550_PERM_RW (AB3550_PERM_RD | AB3550_PERM_WR) 52 53/** 54 * struct ab3550 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 64 */ 65struct ab3550 { 66 struct mutex access_mutex; 67 struct i2c_client *i2c_client[AB3550_NUM_BANKS]; 68 char chip_name[32]; 69 u8 chip_id; 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; 78#endif 79}; 80 81/** 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 86 */ 87struct ab3550_reg_range { 88 u8 first; 89 u8 last; 90 u8 perm; 91}; 92 93/** 94 * struct ab3550_reg_ranges 95 * @count: the number of ranges in the list 96 * @range: the list of register ranges 97 */ 98struct ab3550_reg_ranges { 99 u8 count; 100 const struct ab3550_reg_range *range; 101}; 102 103/* 104 * Permissible register ranges for reading and writing per device and bank. 105 * 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. 110 */ 111 112#define NO_RANGE {.count = 0, .range = NULL,} 113 114static struct 115ab3550_reg_ranges ab3550_reg_ranges[AB3550_NUM_DEVICES][AB3550_NUM_BANKS] = { 116 [AB3550_DEVID_DAC] = { 117 NO_RANGE, 118 { 119 .count = 2, 120 .range = (struct ab3550_reg_range[]) { 121 { 122 .first = 0xb0, 123 .last = 0xba, 124 .perm = AB3550_PERM_RW, 125 }, 126 { 127 .first = 0xbc, 128 .last = 0xc3, 129 .perm = AB3550_PERM_RW, 130 }, 131 }, 132 }, 133 }, 134 [AB3550_DEVID_LEDS] = { 135 NO_RANGE, 136 { 137 .count = 2, 138 .range = (struct ab3550_reg_range[]) { 139 { 140 .first = 0x5a, 141 .last = 0x88, 142 .perm = AB3550_PERM_RW, 143 }, 144 { 145 .first = 0x8a, 146 .last = 0xad, 147 .perm = AB3550_PERM_RW, 148 }, 149 } 150 }, 151 }, 152 [AB3550_DEVID_POWER] = { 153 { 154 .count = 1, 155 .range = (struct ab3550_reg_range[]) { 156 { 157 .first = 0x21, 158 .last = 0x21, 159 .perm = AB3550_PERM_RO, 160 }, 161 } 162 }, 163 NO_RANGE, 164 }, 165 [AB3550_DEVID_REGULATORS] = { 166 { 167 .count = 1, 168 .range = (struct ab3550_reg_range[]) { 169 { 170 .first = 0x69, 171 .last = 0xa3, 172 .perm = AB3550_PERM_RW, 173 }, 174 } 175 }, 176 { 177 .count = 1, 178 .range = (struct ab3550_reg_range[]) { 179 { 180 .first = 0x14, 181 .last = 0x16, 182 .perm = AB3550_PERM_RW, 183 }, 184 } 185 }, 186 }, 187 [AB3550_DEVID_SIM] = { 188 { 189 .count = 1, 190 .range = (struct ab3550_reg_range[]) { 191 { 192 .first = 0x21, 193 .last = 0x21, 194 .perm = AB3550_PERM_RO, 195 }, 196 } 197 }, 198 { 199 .count = 1, 200 .range = (struct ab3550_reg_range[]) { 201 { 202 .first = 0x14, 203 .last = 0x17, 204 .perm = AB3550_PERM_RW, 205 }, 206 } 207 208 }, 209 }, 210 [AB3550_DEVID_UART] = { 211 NO_RANGE, 212 NO_RANGE, 213 }, 214 [AB3550_DEVID_RTC] = { 215 { 216 .count = 1, 217 .range = (struct ab3550_reg_range[]) { 218 { 219 .first = 0x00, 220 .last = 0x0c, 221 .perm = AB3550_PERM_RW, 222 }, 223 } 224 }, 225 NO_RANGE, 226 }, 227 [AB3550_DEVID_CHARGER] = { 228 { 229 .count = 2, 230 .range = (struct ab3550_reg_range[]) { 231 { 232 .first = 0x10, 233 .last = 0x1a, 234 .perm = AB3550_PERM_RW, 235 }, 236 { 237 .first = 0x21, 238 .last = 0x21, 239 .perm = AB3550_PERM_RO, 240 }, 241 } 242 }, 243 NO_RANGE, 244 }, 245 [AB3550_DEVID_ADC] = { 246 NO_RANGE, 247 { 248 .count = 1, 249 .range = (struct ab3550_reg_range[]) { 250 { 251 .first = 0x20, 252 .last = 0x56, 253 .perm = AB3550_PERM_RW, 254 }, 255 256 } 257 }, 258 }, 259 [AB3550_DEVID_FUELGAUGE] = { 260 { 261 .count = 1, 262 .range = (struct ab3550_reg_range[]) { 263 { 264 .first = 0x21, 265 .last = 0x21, 266 .perm = AB3550_PERM_RO, 267 }, 268 } 269 }, 270 { 271 .count = 1, 272 .range = (struct ab3550_reg_range[]) { 273 { 274 .first = 0x00, 275 .last = 0x0e, 276 .perm = AB3550_PERM_RW, 277 }, 278 } 279 }, 280 }, 281 [AB3550_DEVID_VIBRATOR] = { 282 NO_RANGE, 283 { 284 .count = 1, 285 .range = (struct ab3550_reg_range[]) { 286 { 287 .first = 0x10, 288 .last = 0x13, 289 .perm = AB3550_PERM_RW, 290 }, 291 292 } 293 }, 294 }, 295 [AB3550_DEVID_CODEC] = { 296 { 297 .count = 2, 298 .range = (struct ab3550_reg_range[]) { 299 { 300 .first = 0x31, 301 .last = 0x63, 302 .perm = AB3550_PERM_RW, 303 }, 304 { 305 .first = 0x65, 306 .last = 0x68, 307 .perm = AB3550_PERM_RW, 308 }, 309 } 310 }, 311 NO_RANGE, 312 }, 313}; 314 315static struct mfd_cell ab3550_devs[AB3550_NUM_DEVICES] = { 316 [AB3550_DEVID_DAC] = { 317 .name = "ab3550-dac", 318 .id = AB3550_DEVID_DAC, 319 .num_resources = 0, 320 }, 321 [AB3550_DEVID_LEDS] = { 322 .name = "ab3550-leds", 323 .id = AB3550_DEVID_LEDS, 324 }, 325 [AB3550_DEVID_POWER] = { 326 .name = "ab3550-power", 327 .id = AB3550_DEVID_POWER, 328 }, 329 [AB3550_DEVID_REGULATORS] = { 330 .name = "ab3550-regulators", 331 .id = AB3550_DEVID_REGULATORS, 332 }, 333 [AB3550_DEVID_SIM] = { 334 .name = "ab3550-sim", 335 .id = AB3550_DEVID_SIM, 336 }, 337 [AB3550_DEVID_UART] = { 338 .name = "ab3550-uart", 339 .id = AB3550_DEVID_UART, 340 }, 341 [AB3550_DEVID_RTC] = { 342 .name = "ab3550-rtc", 343 .id = AB3550_DEVID_RTC, 344 }, 345 [AB3550_DEVID_CHARGER] = { 346 .name = "ab3550-charger", 347 .id = AB3550_DEVID_CHARGER, 348 }, 349 [AB3550_DEVID_ADC] = { 350 .name = "ab3550-adc", 351 .id = AB3550_DEVID_ADC, 352 .num_resources = 10, 353 .resources = (struct resource[]) { 354 { 355 .name = "TRIGGER-0", 356 .flags = IORESOURCE_IRQ, 357 .start = 16, 358 .end = 16, 359 }, 360 { 361 .name = "TRIGGER-1", 362 .flags = IORESOURCE_IRQ, 363 .start = 17, 364 .end = 17, 365 }, 366 { 367 .name = "TRIGGER-2", 368 .flags = IORESOURCE_IRQ, 369 .start = 18, 370 .end = 18, 371 }, 372 { 373 .name = "TRIGGER-3", 374 .flags = IORESOURCE_IRQ, 375 .start = 19, 376 .end = 19, 377 }, 378 { 379 .name = "TRIGGER-4", 380 .flags = IORESOURCE_IRQ, 381 .start = 20, 382 .end = 20, 383 }, 384 { 385 .name = "TRIGGER-5", 386 .flags = IORESOURCE_IRQ, 387 .start = 21, 388 .end = 21, 389 }, 390 { 391 .name = "TRIGGER-6", 392 .flags = IORESOURCE_IRQ, 393 .start = 22, 394 .end = 22, 395 }, 396 { 397 .name = "TRIGGER-7", 398 .flags = IORESOURCE_IRQ, 399 .start = 23, 400 .end = 23, 401 }, 402 { 403 .name = "TRIGGER-VBAT-TXON", 404 .flags = IORESOURCE_IRQ, 405 .start = 13, 406 .end = 13, 407 }, 408 { 409 .name = "TRIGGER-VBAT", 410 .flags = IORESOURCE_IRQ, 411 .start = 12, 412 .end = 12, 413 }, 414 }, 415 }, 416 [AB3550_DEVID_FUELGAUGE] = { 417 .name = "ab3550-fuelgauge", 418 .id = AB3550_DEVID_FUELGAUGE, 419 }, 420 [AB3550_DEVID_VIBRATOR] = { 421 .name = "ab3550-vibrator", 422 .id = AB3550_DEVID_VIBRATOR, 423 }, 424 [AB3550_DEVID_CODEC] = { 425 .name = "ab3550-codec", 426 .id = AB3550_DEVID_CODEC, 427 }, 428}; 429 430/* 431 * I2C transactions with error messages. 432 */ 433static int ab3550_i2c_master_send(struct ab3550 *ab, u8 bank, u8 *data, 434 u8 count) 435{ 436 int err; 437 438 err = i2c_master_send(ab->i2c_client[bank], data, count); 439 if (err < 0) { 440 dev_err(&ab->i2c_client[0]->dev, "send error: %d\n", err); 441 return err; 442 } 443 return 0; 444} 445 446static int ab3550_i2c_master_recv(struct ab3550 *ab, u8 bank, u8 *data, 447 u8 count) 448{ 449 int err; 450 451 err = i2c_master_recv(ab->i2c_client[bank], data, count); 452 if (err < 0) { 453 dev_err(&ab->i2c_client[0]->dev, "receive error: %d\n", err); 454 return err; 455 } 456 return 0; 457} 458 459/* 460 * Functionality for getting/setting register values. 461 */ 462static int get_register_interruptible(struct ab3550 *ab, u8 bank, u8 reg, 463 u8 *value) 464{ 465 int err; 466 467 err = mutex_lock_interruptible(&ab->access_mutex); 468 if (err) 469 return err; 470 471 err = ab3550_i2c_master_send(ab, bank, &reg, 1); 472 if (!err) 473 err = ab3550_i2c_master_recv(ab, bank, value, 1); 474 475 mutex_unlock(&ab->access_mutex); 476 return err; 477} 478 479static int get_register_page_interruptible(struct ab3550 *ab, u8 bank, 480 u8 first_reg, u8 *regvals, u8 numregs) 481{ 482 int err; 483 484 err = mutex_lock_interruptible(&ab->access_mutex); 485 if (err) 486 return err; 487 488 err = ab3550_i2c_master_send(ab, bank, &first_reg, 1); 489 if (!err) 490 err = ab3550_i2c_master_recv(ab, bank, regvals, numregs); 491 492 mutex_unlock(&ab->access_mutex); 493 return err; 494} 495 496static int mask_and_set_register_interruptible(struct ab3550 *ab, u8 bank, 497 u8 reg, u8 bitmask, u8 bitvalues) 498{ 499 int err = 0; 500 501 if (likely(bitmask)) { 502 u8 reg_bits[2] = {reg, 0}; 503 504 err = mutex_lock_interruptible(&ab->access_mutex); 505 if (err) 506 return err; 507 508 if (bitmask == 0xFF) /* No need to read in this case. */ 509 reg_bits[1] = bitvalues; 510 else { /* Read and modify the register value. */ 511 u8 bits; 512 513 err = ab3550_i2c_master_send(ab, bank, &reg, 1); 514 if (err) 515 goto unlock_and_return; 516 err = ab3550_i2c_master_recv(ab, bank, &bits, 1); 517 if (err) 518 goto unlock_and_return; 519 reg_bits[1] = ((~bitmask & bits) | 520 (bitmask & bitvalues)); 521 } 522 /* Write the new value. */ 523 err = ab3550_i2c_master_send(ab, bank, reg_bits, 2); 524unlock_and_return: 525 mutex_unlock(&ab->access_mutex); 526 } 527 return err; 528} 529 530/* 531 * Read/write permission checking functions. 532 */ 533static bool page_write_allowed(const struct ab3550_reg_ranges *ranges, 534 u8 first_reg, u8 last_reg) 535{ 536 u8 i; 537 538 if (last_reg < first_reg) 539 return false; 540 541 for (i = 0; i < ranges->count; i++) { 542 if (first_reg < ranges->range[i].first) 543 break; 544 if ((last_reg <= ranges->range[i].last) && 545 (ranges->range[i].perm & AB3550_PERM_WR)) 546 return true; 547 } 548 return false; 549} 550 551static bool reg_write_allowed(const struct ab3550_reg_ranges *ranges, u8 reg) 552{ 553 return page_write_allowed(ranges, reg, reg); 554} 555 556static bool page_read_allowed(const struct ab3550_reg_ranges *ranges, 557 u8 first_reg, u8 last_reg) 558{ 559 u8 i; 560 561 if (last_reg < first_reg) 562 return false; 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) 566 return false; 567 if (first_reg <= ranges->range[i].last) 568 break; 569 } 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. 572 */ 573 while ((i < ranges->count) && 574 (ranges->range[i].perm & AB3550_PERM_RD)) { 575 if (last_reg <= ranges->range[i].last) 576 return true; 577 if ((++i >= ranges->count) || 578 (ranges->range[i].first != 579 (ranges->range[i - 1].last + 1))) { 580 break; 581 } 582 } 583 return false; 584} 585 586static bool reg_read_allowed(const struct ab3550_reg_ranges *ranges, u8 reg) 587{ 588 return page_read_allowed(ranges, reg, reg); 589} 590 591/* 592 * The register access functionality. 593 */ 594static int ab3550_get_chip_id(struct device *dev) 595{ 596 struct ab3550 *ab = dev_get_drvdata(dev->parent); 597 return (int)ab->chip_id; 598} 599 600static int ab3550_mask_and_set_register_interruptible(struct device *dev, 601 u8 bank, u8 reg, u8 bitmask, u8 bitvalues) 602{ 603 struct ab3550 *ab; 604 struct platform_device *pdev = to_platform_device(dev); 605 606 if ((AB3550_NUM_BANKS <= bank) || 607 !reg_write_allowed(&ab3550_reg_ranges[pdev->id][bank], reg)) 608 return -EINVAL; 609 610 ab = dev_get_drvdata(dev->parent); 611 return mask_and_set_register_interruptible(ab, bank, reg, 612 bitmask, bitvalues); 613} 614 615static int ab3550_set_register_interruptible(struct device *dev, u8 bank, 616 u8 reg, u8 value) 617{ 618 return ab3550_mask_and_set_register_interruptible(dev, bank, reg, 0xFF, 619 value); 620} 621 622static int ab3550_get_register_interruptible(struct device *dev, u8 bank, 623 u8 reg, u8 *value) 624{ 625 struct ab3550 *ab; 626 struct platform_device *pdev = to_platform_device(dev); 627 628 if ((AB3550_NUM_BANKS <= bank) || 629 !reg_read_allowed(&ab3550_reg_ranges[pdev->id][bank], reg)) 630 return -EINVAL; 631 632 ab = dev_get_drvdata(dev->parent); 633 return get_register_interruptible(ab, bank, reg, value); 634} 635 636static int ab3550_get_register_page_interruptible(struct device *dev, u8 bank, 637 u8 first_reg, u8 *regvals, u8 numregs) 638{ 639 struct ab3550 *ab; 640 struct platform_device *pdev = to_platform_device(dev); 641 642 if ((AB3550_NUM_BANKS <= bank) || 643 !page_read_allowed(&ab3550_reg_ranges[pdev->id][bank], 644 first_reg, (first_reg + numregs - 1))) 645 return -EINVAL; 646 647 ab = dev_get_drvdata(dev->parent); 648 return get_register_page_interruptible(ab, bank, first_reg, regvals, 649 numregs); 650} 651 652static int ab3550_event_registers_startup_state_get(struct device *dev, 653 u8 *event) 654{ 655 struct ab3550 *ab; 656 657 ab = dev_get_drvdata(dev->parent); 658 if (!ab->startup_events_read) 659 return -EAGAIN; /* Try again later */ 660 661 memcpy(event, ab->startup_events, AB3550_NUM_EVENT_REG); 662 return 0; 663} 664 665static int ab3550_startup_irq_enabled(struct device *dev, unsigned int irq) 666{ 667 struct ab3550 *ab; 668 struct ab3550_platform_data *plf_data; 669 bool val; 670 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); 675 676 return val; 677} 678 679static 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, 689}; 690 691static irqreturn_t ab3550_irq_handler(int irq, void *data) 692{ 693 struct ab3550 *ab = data; 694 int err; 695 unsigned int i; 696 u8 e[AB3550_NUM_EVENT_REG]; 697 u8 *events; 698 unsigned long flags; 699 700 events = (ab->startup_events_read ? e : ab->startup_events); 701 702 err = get_register_page_interruptible(ab, AB3550_EVENT_BANK, 703 AB3550_EVENT_REG, events, AB3550_NUM_EVENT_REG); 704 if (err) 705 goto err_event_rd; 706 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; 714 goto out; 715 } 716 717 /* The two highest bits in event[4] are not used. */ 718 events[4] &= 0x3f; 719 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); 724 725 for (i = 0; i < AB3550_NUM_EVENT_REG; i++) { 726 u8 bit; 727 u8 event_reg; 728 729 dev_dbg(&ab->i2c_client[0]->dev, "IRQ Event[%d]: 0x%2x\n", 730 i, events[i]); 731 732 event_reg = events[i]; 733 for (bit = 0; event_reg; bit++, event_reg /= 2) { 734 if (event_reg % 2) { 735 unsigned int irq; 736 struct ab3550_platform_data *plf_data; 737 738 plf_data = ab->i2c_client[0]->dev.platform_data; 739 irq = plf_data->irq.base + (i * 8) + bit; 740 handle_nested_irq(irq); 741 } 742 } 743 } 744out: 745 return IRQ_HANDLED; 746 747err_event_rd: 748 dev_dbg(&ab->i2c_client[0]->dev, "error reading event registers\n"); 749 return IRQ_HANDLED; 750} 751 752#ifdef CONFIG_DEBUG_FS 753static struct ab3550_reg_ranges debug_ranges[AB3550_NUM_BANKS] = { 754 { 755 .count = 6, 756 .range = (struct ab3550_reg_range[]) { 757 { 758 .first = 0x00, 759 .last = 0x0e, 760 }, 761 { 762 .first = 0x10, 763 .last = 0x1a, 764 }, 765 { 766 .first = 0x1e, 767 .last = 0x4f, 768 }, 769 { 770 .first = 0x51, 771 .last = 0x63, 772 }, 773 { 774 .first = 0x65, 775 .last = 0xa3, 776 }, 777 { 778 .first = 0xa5, 779 .last = 0xa8, 780 }, 781 } 782 }, 783 { 784 .count = 8, 785 .range = (struct ab3550_reg_range[]) { 786 { 787 .first = 0x00, 788 .last = 0x0e, 789 }, 790 { 791 .first = 0x10, 792 .last = 0x17, 793 }, 794 { 795 .first = 0x1a, 796 .last = 0x1c, 797 }, 798 { 799 .first = 0x20, 800 .last = 0x56, 801 }, 802 { 803 .first = 0x5a, 804 .last = 0x88, 805 }, 806 { 807 .first = 0x8a, 808 .last = 0xad, 809 }, 810 { 811 .first = 0xb0, 812 .last = 0xba, 813 }, 814 { 815 .first = 0xbc, 816 .last = 0xc3, 817 }, 818 } 819 }, 820}; 821 822static int ab3550_registers_print(struct seq_file *s, void *p) 823{ 824 struct ab3550 *ab = s->private; 825 int bank; 826 827 seq_printf(s, AB3550_NAME_STRING " register values:\n"); 828 829 for (bank = 0; bank < AB3550_NUM_BANKS; bank++) { 830 unsigned int i; 831 832 seq_printf(s, " bank %d:\n", bank); 833 for (i = 0; i < debug_ranges[bank].count; i++) { 834 u8 reg; 835 836 for (reg = debug_ranges[bank].range[i].first; 837 reg <= debug_ranges[bank].range[i].last; 838 reg++) { 839 u8 value; 840 841 get_register_interruptible(ab, bank, reg, 842 &value); 843 seq_printf(s, " [%d/0x%02X]: 0x%02X\n", bank, 844 reg, value); 845 } 846 } 847 } 848 return 0; 849} 850 851static int ab3550_registers_open(struct inode *inode, struct file *file) 852{ 853 return single_open(file, ab3550_registers_print, inode->i_private); 854} 855 856static const struct file_operations ab3550_registers_fops = { 857 .open = ab3550_registers_open, 858 .read = seq_read, 859 .llseek = seq_lseek, 860 .release = single_release, 861 .owner = THIS_MODULE, 862}; 863 864static int ab3550_bank_print(struct seq_file *s, void *p) 865{ 866 struct ab3550 *ab = s->private; 867 868 seq_printf(s, "%d\n", ab->debug_bank); 869 return 0; 870} 871 872static int ab3550_bank_open(struct inode *inode, struct file *file) 873{ 874 return single_open(file, ab3550_bank_print, inode->i_private); 875} 876 877static ssize_t ab3550_bank_write(struct file *file, 878 const char __user *user_buf, 879 size_t count, loff_t *ppos) 880{ 881 struct ab3550 *ab = ((struct seq_file *)(file->private_data))->private; 882 unsigned long user_bank; 883 int err; 884 885 /* Get userspace string and assure termination */ 886 err = kstrtoul_from_user(user_buf, count, 0, &user_bank); 887 if (err) 888 return err; 889 890 if (user_bank >= AB3550_NUM_BANKS) { 891 dev_err(&ab->i2c_client[0]->dev, 892 "debugfs error input > number of banks\n"); 893 return -EINVAL; 894 } 895 896 ab->debug_bank = user_bank; 897 898 return count; 899} 900 901static int ab3550_address_print(struct seq_file *s, void *p) 902{ 903 struct ab3550 *ab = s->private; 904 905 seq_printf(s, "0x%02X\n", ab->debug_address); 906 return 0; 907} 908 909static int ab3550_address_open(struct inode *inode, struct file *file) 910{ 911 return single_open(file, ab3550_address_print, inode->i_private); 912} 913 914static ssize_t ab3550_address_write(struct file *file, 915 const char __user *user_buf, 916 size_t count, loff_t *ppos) 917{ 918 struct ab3550 *ab = ((struct seq_file *)(file->private_data))->private; 919 unsigned long user_address; 920 int err; 921 922 /* Get userspace string and assure termination */ 923 err = kstrtoul_from_user(user_buf, count, 0, &user_address); 924 if (err) 925 return err; 926 927 if (user_address > 0xff) { 928 dev_err(&ab->i2c_client[0]->dev, 929 "debugfs error input > 0xff\n"); 930 return -EINVAL; 931 } 932 ab->debug_address = user_address; 933 return count; 934} 935 936static int ab3550_val_print(struct seq_file *s, void *p) 937{ 938 struct ab3550 *ab = s->private; 939 int err; 940 u8 regvalue; 941 942 err = get_register_interruptible(ab, (u8)ab->debug_bank, 943 (u8)ab->debug_address, &regvalue); 944 if (err) 945 return -EINVAL; 946 seq_printf(s, "0x%02X\n", regvalue); 947 948 return 0; 949} 950 951static int ab3550_val_open(struct inode *inode, struct file *file) 952{ 953 return single_open(file, ab3550_val_print, inode->i_private); 954} 955 956static ssize_t ab3550_val_write(struct file *file, 957 const char __user *user_buf, 958 size_t count, loff_t *ppos) 959{ 960 struct ab3550 *ab = ((struct seq_file *)(file->private_data))->private; 961 unsigned long user_val; 962 int err; 963 u8 regvalue; 964 965 /* Get userspace string and assure termination */ 966 err = kstrtoul_from_user(user_buf, count, 0, &user_val); 967 if (err) 968 return err; 969 970 if (user_val > 0xff) { 971 dev_err(&ab->i2c_client[0]->dev, 972 "debugfs error input > 0xff\n"); 973 return -EINVAL; 974 } 975 err = mask_and_set_register_interruptible( 976 ab, (u8)ab->debug_bank, 977 (u8)ab->debug_address, 0xFF, (u8)user_val); 978 if (err) 979 return -EINVAL; 980 981 get_register_interruptible(ab, (u8)ab->debug_bank, 982 (u8)ab->debug_address, &regvalue); 983 if (err) 984 return -EINVAL; 985 986 return count; 987} 988 989static const struct file_operations ab3550_bank_fops = { 990 .open = ab3550_bank_open, 991 .write = ab3550_bank_write, 992 .read = seq_read, 993 .llseek = seq_lseek, 994 .release = single_release, 995 .owner = THIS_MODULE, 996}; 997 998static const struct file_operations ab3550_address_fops = { 999 .open = ab3550_address_open, 1000 .write = ab3550_address_write, 1001 .read = seq_read, 1002 .llseek = seq_lseek, 1003 .release = single_release, 1004 .owner = THIS_MODULE, 1005}; 1006 1007static const struct file_operations ab3550_val_fops = { 1008 .open = ab3550_val_open, 1009 .write = ab3550_val_write, 1010 .read = seq_read, 1011 .llseek = seq_lseek, 1012 .release = single_release, 1013 .owner = THIS_MODULE, 1014}; 1015 1016static struct dentry *ab3550_dir; 1017static struct dentry *ab3550_reg_file; 1018static struct dentry *ab3550_bank_file; 1019static struct dentry *ab3550_address_file; 1020static struct dentry *ab3550_val_file; 1021 1022static inline void ab3550_setup_debugfs(struct ab3550 *ab) 1023{ 1024 ab->debug_bank = 0; 1025 ab->debug_address = 0x00; 1026 1027 ab3550_dir = debugfs_create_dir(AB3550_NAME_STRING, NULL); 1028 if (!ab3550_dir) 1029 goto exit_no_debugfs; 1030 1031 ab3550_reg_file = debugfs_create_file("all-registers", 1032 S_IRUGO, ab3550_dir, ab, &ab3550_registers_fops); 1033 if (!ab3550_reg_file) 1034 goto exit_destroy_dir; 1035 1036 ab3550_bank_file = debugfs_create_file("register-bank", 1037 (S_IRUGO | S_IWUSR), ab3550_dir, ab, &ab3550_bank_fops); 1038 if (!ab3550_bank_file) 1039 goto exit_destroy_reg; 1040 1041 ab3550_address_file = debugfs_create_file("register-address", 1042 (S_IRUGO | S_IWUSR), ab3550_dir, ab, &ab3550_address_fops); 1043 if (!ab3550_address_file) 1044 goto exit_destroy_bank; 1045 1046 ab3550_val_file = debugfs_create_file("register-value", 1047 (S_IRUGO | S_IWUSR), ab3550_dir, ab, &ab3550_val_fops); 1048 if (!ab3550_val_file) 1049 goto exit_destroy_address; 1050 1051 return; 1052 1053exit_destroy_address: 1054 debugfs_remove(ab3550_address_file); 1055exit_destroy_bank: 1056 debugfs_remove(ab3550_bank_file); 1057exit_destroy_reg: 1058 debugfs_remove(ab3550_reg_file); 1059exit_destroy_dir: 1060 debugfs_remove(ab3550_dir); 1061exit_no_debugfs: 1062 dev_err(&ab->i2c_client[0]->dev, "failed to create debugfs entries.\n"); 1063 return; 1064} 1065 1066static inline void ab3550_remove_debugfs(void) 1067{ 1068 debugfs_remove(ab3550_val_file); 1069 debugfs_remove(ab3550_address_file); 1070 debugfs_remove(ab3550_bank_file); 1071 debugfs_remove(ab3550_reg_file); 1072 debugfs_remove(ab3550_dir); 1073} 1074 1075#else /* !CONFIG_DEBUG_FS */ 1076static inline void ab3550_setup_debugfs(struct ab3550 *ab) 1077{ 1078} 1079static inline void ab3550_remove_debugfs(void) 1080{ 1081} 1082#endif 1083 1084/* 1085 * Basic set-up, datastructure creation/destruction and I2C interface. 1086 * This sets up a default config in the AB3550 chip so that it 1087 * will work as expected. 1088 */ 1089static int __init ab3550_setup(struct ab3550 *ab) 1090{ 1091 int err = 0; 1092 int i; 1093 struct ab3550_platform_data *plf_data; 1094 struct abx500_init_settings *settings; 1095 1096 plf_data = ab->i2c_client[0]->dev.platform_data; 1097 settings = plf_data->init_settings; 1098 1099 for (i = 0; i < plf_data->init_settings_sz; i++) { 1100 err = mask_and_set_register_interruptible(ab, 1101 settings[i].bank, 1102 settings[i].reg, 1103 0xFF, settings[i].setting); 1104 if (err) 1105 goto exit_no_setup; 1106 1107 /* If event mask register update the event mask in ab3550 */ 1108 if ((settings[i].bank == 0) && 1109 (AB3550_IMR1 <= settings[i].reg) && 1110 (settings[i].reg <= AB3550_IMR5)) { 1111 ab->event_mask[settings[i].reg - AB3550_IMR1] = 1112 settings[i].setting; 1113 } 1114 } 1115exit_no_setup: 1116 return err; 1117} 1118 1119static void ab3550_mask_work(struct work_struct *work) 1120{ 1121 struct ab3550 *ab = container_of(work, struct ab3550, mask_work); 1122 int i; 1123 unsigned long flags; 1124 u8 mask[AB3550_NUM_EVENT_REG]; 1125 1126 spin_lock_irqsave(&ab->event_lock, flags); 1127 for (i = 0; i < AB3550_NUM_EVENT_REG; i++) 1128 mask[i] = ab->event_mask[i]; 1129 spin_unlock_irqrestore(&ab->event_lock, flags); 1130 1131 for (i = 0; i < AB3550_NUM_EVENT_REG; i++) { 1132 int err; 1133 1134 err = mask_and_set_register_interruptible(ab, 0, 1135 (AB3550_IMR1 + i), ~0, mask[i]); 1136 if (err) 1137 dev_err(&ab->i2c_client[0]->dev, 1138 "ab3550_mask_work failed 0x%x,0x%x\n", 1139 (AB3550_IMR1 + i), mask[i]); 1140 } 1141} 1142 1143static void ab3550_mask(struct irq_data *data) 1144{ 1145 unsigned long flags; 1146 struct ab3550 *ab; 1147 struct ab3550_platform_data *plf_data; 1148 int irq; 1149 1150 ab = irq_data_get_irq_chip_data(data); 1151 plf_data = ab->i2c_client[0]->dev.platform_data; 1152 irq = data->irq - plf_data->irq.base; 1153 1154 spin_lock_irqsave(&ab->event_lock, flags); 1155 ab->event_mask[irq / 8] |= BIT(irq % 8); 1156 spin_unlock_irqrestore(&ab->event_lock, flags); 1157 1158 schedule_work(&ab->mask_work); 1159} 1160 1161static void ab3550_unmask(struct irq_data *data) 1162{ 1163 unsigned long flags; 1164 struct ab3550 *ab; 1165 struct ab3550_platform_data *plf_data; 1166 int irq; 1167 1168 ab = irq_data_get_irq_chip_data(data); 1169 plf_data = ab->i2c_client[0]->dev.platform_data; 1170 irq = data->irq - plf_data->irq.base; 1171 1172 spin_lock_irqsave(&ab->event_lock, flags); 1173 ab->event_mask[irq / 8] &= ~BIT(irq % 8); 1174 spin_unlock_irqrestore(&ab->event_lock, flags); 1175 1176 schedule_work(&ab->mask_work); 1177} 1178 1179static void noop(struct irq_data *data) 1180{ 1181} 1182 1183static struct irq_chip ab3550_irq_chip = { 1184 .name = "ab3550-core", /* Keep the same name as the request */ 1185 .irq_disable = ab3550_mask, /* No default to mask in chip.c */ 1186 .irq_ack = noop, 1187 .irq_mask = ab3550_mask, 1188 .irq_unmask = ab3550_unmask, 1189}; 1190 1191struct ab_family_id { 1192 u8 id; 1193 char *name; 1194}; 1195 1196static const struct ab_family_id ids[] __initdata = { 1197 /* AB3550 */ 1198 { 1199 .id = AB3550_P1A, 1200 .name = "P1A" 1201 }, 1202 /* Terminator */ 1203 { 1204 .id = 0x00, 1205 } 1206}; 1207 1208static int __init ab3550_probe(struct i2c_client *client, 1209 const struct i2c_device_id *id) 1210{ 1211 struct ab3550 *ab; 1212 struct ab3550_platform_data *ab3550_plf_data = 1213 client->dev.platform_data; 1214 int err; 1215 int i; 1216 int num_i2c_clients = 0; 1217 1218 ab = kzalloc(sizeof(struct ab3550), GFP_KERNEL); 1219 if (!ab) { 1220 dev_err(&client->dev, 1221 "could not allocate " AB3550_NAME_STRING " device\n"); 1222 return -ENOMEM; 1223 } 1224 1225 /* Initialize data structure */ 1226 mutex_init(&ab->access_mutex); 1227 spin_lock_init(&ab->event_lock); 1228 ab->i2c_client[0] = client; 1229 1230 i2c_set_clientdata(client, ab); 1231 1232 /* Read chip ID register */ 1233 err = get_register_interruptible(ab, 0, AB3550_CID_REG, &ab->chip_id); 1234 if (err) { 1235 dev_err(&client->dev, "could not communicate with the analog " 1236 "baseband chip\n"); 1237 goto exit_no_detect; 1238 } 1239 1240 for (i = 0; ids[i].id != 0x0; i++) { 1241 if (ids[i].id == ab->chip_id) { 1242 snprintf(&ab->chip_name[0], sizeof(ab->chip_name) - 1, 1243 AB3550_ID_FORMAT_STRING, ids[i].name); 1244 break; 1245 } 1246 } 1247 1248 if (ids[i].id == 0x0) { 1249 dev_err(&client->dev, "unknown analog baseband chip id: 0x%x\n", 1250 ab->chip_id); 1251 dev_err(&client->dev, "driver not started!\n"); 1252 goto exit_no_detect; 1253 } 1254 1255 dev_info(&client->dev, "detected AB chip: %s\n", &ab->chip_name[0]); 1256 1257 /* Attach other dummy I2C clients. */ 1258 while (++num_i2c_clients < AB3550_NUM_BANKS) { 1259 ab->i2c_client[num_i2c_clients] = 1260 i2c_new_dummy(client->adapter, 1261 (client->addr + num_i2c_clients)); 1262 if (!ab->i2c_client[num_i2c_clients]) { 1263 err = -ENOMEM; 1264 goto exit_no_dummy_client; 1265 } 1266 strlcpy(ab->i2c_client[num_i2c_clients]->name, id->name, 1267 sizeof(ab->i2c_client[num_i2c_clients]->name)); 1268 } 1269 1270 err = ab3550_setup(ab); 1271 if (err) 1272 goto exit_no_setup; 1273 1274 INIT_WORK(&ab->mask_work, ab3550_mask_work); 1275 1276 for (i = 0; i < ab3550_plf_data->irq.count; i++) { 1277 unsigned int irq; 1278 1279 irq = ab3550_plf_data->irq.base + i; 1280 irq_set_chip_data(irq, ab); 1281 irq_set_chip_and_handler(irq, &ab3550_irq_chip, 1282 handle_simple_irq); 1283 irq_set_nested_thread(irq, 1); 1284#ifdef CONFIG_ARM 1285 set_irq_flags(irq, IRQF_VALID); 1286#else 1287 irq_set_noprobe(irq); 1288#endif 1289 } 1290 1291 err = request_threaded_irq(client->irq, NULL, ab3550_irq_handler, 1292 IRQF_ONESHOT, "ab3550-core", ab); 1293 /* This real unpredictable IRQ is of course sampled for entropy */ 1294 rand_initialize_irq(client->irq); 1295 1296 if (err) 1297 goto exit_no_irq; 1298 1299 err = abx500_register_ops(&client->dev, &ab3550_ops); 1300 if (err) 1301 goto exit_no_ops; 1302 1303 /* Set up and register the platform devices. */ 1304 for (i = 0; i < AB3550_NUM_DEVICES; i++) { 1305 ab3550_devs[i].platform_data = ab3550_plf_data->dev_data[i]; 1306 ab3550_devs[i].pdata_size = ab3550_plf_data->dev_data_sz[i]; 1307 } 1308 1309 err = mfd_add_devices(&client->dev, 0, ab3550_devs, 1310 ARRAY_SIZE(ab3550_devs), NULL, 1311 ab3550_plf_data->irq.base); 1312 1313 ab3550_setup_debugfs(ab); 1314 1315 return 0; 1316 1317exit_no_ops: 1318exit_no_irq: 1319exit_no_setup: 1320exit_no_dummy_client: 1321 /* Unregister the dummy i2c clients. */ 1322 while (--num_i2c_clients) 1323 i2c_unregister_device(ab->i2c_client[num_i2c_clients]); 1324exit_no_detect: 1325 kfree(ab); 1326 return err; 1327} 1328 1329static int __exit ab3550_remove(struct i2c_client *client) 1330{ 1331 struct ab3550 *ab = i2c_get_clientdata(client); 1332 int num_i2c_clients = AB3550_NUM_BANKS; 1333 1334 mfd_remove_devices(&client->dev); 1335 ab3550_remove_debugfs(); 1336 1337 while (--num_i2c_clients) 1338 i2c_unregister_device(ab->i2c_client[num_i2c_clients]); 1339 1340 /* 1341 * At this point, all subscribers should have unregistered 1342 * their notifiers so deactivate IRQ 1343 */ 1344 free_irq(client->irq, ab); 1345 kfree(ab); 1346 return 0; 1347} 1348 1349static const struct i2c_device_id ab3550_id[] = { 1350 {AB3550_NAME_STRING, 0}, 1351 {} 1352}; 1353MODULE_DEVICE_TABLE(i2c, ab3550_id); 1354 1355static struct i2c_driver ab3550_driver = { 1356 .driver = { 1357 .name = AB3550_NAME_STRING, 1358 .owner = THIS_MODULE, 1359 }, 1360 .id_table = ab3550_id, 1361 .probe = ab3550_probe, 1362 .remove = __exit_p(ab3550_remove), 1363}; 1364 1365static int __init ab3550_i2c_init(void) 1366{ 1367 return i2c_add_driver(&ab3550_driver); 1368} 1369 1370static void __exit ab3550_i2c_exit(void) 1371{ 1372 i2c_del_driver(&ab3550_driver); 1373} 1374 1375subsys_initcall(ab3550_i2c_init); 1376module_exit(ab3550_i2c_exit); 1377 1378MODULE_AUTHOR("Mattias Wallin <mattias.wallin@stericsson.com>"); 1379MODULE_DESCRIPTION("AB3550 core driver"); 1380MODULE_LICENSE("GPL");