1 /* 2 * MAX732x I2C Port Expander with 8/16 I/O 3 * 4 * Copyright (C) 2007 Marvell International Ltd. 5 * Copyright (C) 2008 Jack Ren <jack.ren@marvell.com> 6 * Copyright (C) 2008 Eric Miao <eric.miao@marvell.com> 7 * 8 * Derived from drivers/gpio/pca953x.c 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; version 2 of the License. 13 */ 14 15 #include <linux/module.h> 16 #include <linux/init.h> 17 #include <linux/slab.h> 18 #include <linux/string.h> 19 #include <linux/gpio.h> 20 #include <linux/interrupt.h> 21 #include <linux/irq.h> 22 #include <linux/i2c.h> 23 #include <linux/i2c/max732x.h> 24 25 26 /* 27 * Each port of MAX732x (including MAX7319) falls into one of the 28 * following three types: 29 * 30 * - Push Pull Output 31 * - Input 32 * - Open Drain I/O 33 * 34 * designated by 'O', 'I' and 'P' individually according to MAXIM's 35 * datasheets. 'I' and 'P' ports are interrupt capables, some with 36 * a dedicated interrupt mask. 37 * 38 * There are two groups of I/O ports, each group usually includes 39 * up to 8 I/O ports, and is accessed by a specific I2C address: 40 * 41 * - Group A : by I2C address 0b'110xxxx 42 * - Group B : by I2C address 0b'101xxxx 43 * 44 * where 'xxxx' is decided by the connections of pin AD2/AD0. The 45 * address used also affects the initial state of output signals. 46 * 47 * Within each group of ports, there are five known combinations of 48 * I/O ports: 4I4O, 4P4O, 8I, 8P, 8O, see the definitions below for 49 * the detailed organization of these ports. Only Goup A is interrupt 50 * capable. 51 * 52 * GPIO numbers start from 'gpio_base + 0' to 'gpio_base + 8/16', 53 * and GPIOs from GROUP_A are numbered before those from GROUP_B 54 * (if there are two groups). 55 * 56 * NOTE: MAX7328/MAX7329 are drop-in replacements for PCF8574/a, so 57 * they are not supported by this driver. 58 */ 59 60 #define PORT_NONE 0x0 /* '/' No Port */ 61 #define PORT_OUTPUT 0x1 /* 'O' Push-Pull, Output Only */ 62 #define PORT_INPUT 0x2 /* 'I' Input Only */ 63 #define PORT_OPENDRAIN 0x3 /* 'P' Open-Drain, I/O */ 64 65 #define IO_4I4O 0x5AA5 /* O7 O6 I5 I4 I3 I2 O1 O0 */ 66 #define IO_4P4O 0x5FF5 /* O7 O6 P5 P4 P3 P2 O1 O0 */ 67 #define IO_8I 0xAAAA /* I7 I6 I5 I4 I3 I2 I1 I0 */ 68 #define IO_8P 0xFFFF /* P7 P6 P5 P4 P3 P2 P1 P0 */ 69 #define IO_8O 0x5555 /* O7 O6 O5 O4 O3 O2 O1 O0 */ 70 71 #define GROUP_A(x) ((x) & 0xffff) /* I2C Addr: 0b'110xxxx */ 72 #define GROUP_B(x) ((x) << 16) /* I2C Addr: 0b'101xxxx */ 73 74 #define INT_NONE 0x0 /* No interrupt capability */ 75 #define INT_NO_MASK 0x1 /* Has interrupts, no mask */ 76 #define INT_INDEP_MASK 0x2 /* Has interrupts, independent mask */ 77 #define INT_MERGED_MASK 0x3 /* Has interrupts, merged mask */ 78 79 #define INT_CAPS(x) (((uint64_t)(x)) << 32) 80 81 enum { 82 MAX7319, 83 MAX7320, 84 MAX7321, 85 MAX7322, 86 MAX7323, 87 MAX7324, 88 MAX7325, 89 MAX7326, 90 MAX7327, 91 }; 92 93 static uint64_t max732x_features[] = { 94 [MAX7319] = GROUP_A(IO_8I) | INT_CAPS(INT_MERGED_MASK), 95 [MAX7320] = GROUP_B(IO_8O), 96 [MAX7321] = GROUP_A(IO_8P) | INT_CAPS(INT_NO_MASK), 97 [MAX7322] = GROUP_A(IO_4I4O) | INT_CAPS(INT_MERGED_MASK), 98 [MAX7323] = GROUP_A(IO_4P4O) | INT_CAPS(INT_INDEP_MASK), 99 [MAX7324] = GROUP_A(IO_8I) | GROUP_B(IO_8O) | INT_CAPS(INT_MERGED_MASK), 100 [MAX7325] = GROUP_A(IO_8P) | GROUP_B(IO_8O) | INT_CAPS(INT_NO_MASK), 101 [MAX7326] = GROUP_A(IO_4I4O) | GROUP_B(IO_8O) | INT_CAPS(INT_MERGED_MASK), 102 [MAX7327] = GROUP_A(IO_4P4O) | GROUP_B(IO_8O) | INT_CAPS(INT_NO_MASK), 103 }; 104 105 static const struct i2c_device_id max732x_id[] = { 106 { "max7319", MAX7319 }, 107 { "max7320", MAX7320 }, 108 { "max7321", MAX7321 }, 109 { "max7322", MAX7322 }, 110 { "max7323", MAX7323 }, 111 { "max7324", MAX7324 }, 112 { "max7325", MAX7325 }, 113 { "max7326", MAX7326 }, 114 { "max7327", MAX7327 }, 115 { }, 116 }; 117 MODULE_DEVICE_TABLE(i2c, max732x_id); 118 119 struct max732x_chip { 120 struct gpio_chip gpio_chip; 121 122 struct i2c_client *client; /* "main" client */ 123 struct i2c_client *client_dummy; 124 struct i2c_client *client_group_a; 125 struct i2c_client *client_group_b; 126 127 unsigned int mask_group_a; 128 unsigned int dir_input; 129 unsigned int dir_output; 130 131 struct mutex lock; 132 uint8_t reg_out[2]; 133 134 #ifdef CONFIG_GPIO_MAX732X_IRQ 135 struct mutex irq_lock; 136 int irq_base; 137 uint8_t irq_mask; 138 uint8_t irq_mask_cur; 139 uint8_t irq_trig_raise; 140 uint8_t irq_trig_fall; 141 uint8_t irq_features; 142 #endif 143 }; 144 145 static int max732x_writeb(struct max732x_chip *chip, int group_a, uint8_t val) 146 { 147 struct i2c_client *client; 148 int ret; 149 150 client = group_a ? chip->client_group_a : chip->client_group_b; 151 ret = i2c_smbus_write_byte(client, val); 152 if (ret < 0) { 153 dev_err(&client->dev, "failed writing\n"); 154 return ret; 155 } 156 157 return 0; 158 } 159 160 static int max732x_readb(struct max732x_chip *chip, int group_a, uint8_t *val) 161 { 162 struct i2c_client *client; 163 int ret; 164 165 client = group_a ? chip->client_group_a : chip->client_group_b; 166 ret = i2c_smbus_read_byte(client); 167 if (ret < 0) { 168 dev_err(&client->dev, "failed reading\n"); 169 return ret; 170 } 171 172 *val = (uint8_t)ret; 173 return 0; 174 } 175 176 static inline int is_group_a(struct max732x_chip *chip, unsigned off) 177 { 178 return (1u << off) & chip->mask_group_a; 179 } 180 181 static int max732x_gpio_get_value(struct gpio_chip *gc, unsigned off) 182 { 183 struct max732x_chip *chip; 184 uint8_t reg_val; 185 int ret; 186 187 chip = container_of(gc, struct max732x_chip, gpio_chip); 188 189 ret = max732x_readb(chip, is_group_a(chip, off), ®_val); 190 if (ret < 0) 191 return 0; 192 193 return reg_val & (1u << (off & 0x7)); 194 } 195 196 static void max732x_gpio_set_value(struct gpio_chip *gc, unsigned off, int val) 197 { 198 struct max732x_chip *chip; 199 uint8_t reg_out, mask = 1u << (off & 0x7); 200 int ret; 201 202 chip = container_of(gc, struct max732x_chip, gpio_chip); 203 204 mutex_lock(&chip->lock); 205 206 reg_out = (off > 7) ? chip->reg_out[1] : chip->reg_out[0]; 207 reg_out = (val) ? reg_out | mask : reg_out & ~mask; 208 209 ret = max732x_writeb(chip, is_group_a(chip, off), reg_out); 210 if (ret < 0) 211 goto out; 212 213 /* update the shadow register then */ 214 if (off > 7) 215 chip->reg_out[1] = reg_out; 216 else 217 chip->reg_out[0] = reg_out; 218 out: 219 mutex_unlock(&chip->lock); 220 } 221 222 static int max732x_gpio_direction_input(struct gpio_chip *gc, unsigned off) 223 { 224 struct max732x_chip *chip; 225 unsigned int mask = 1u << off; 226 227 chip = container_of(gc, struct max732x_chip, gpio_chip); 228 229 if ((mask & chip->dir_input) == 0) { 230 dev_dbg(&chip->client->dev, "%s port %d is output only\n", 231 chip->client->name, off); 232 return -EACCES; 233 } 234 235 /* 236 * Open-drain pins must be set to high impedance (which is 237 * equivalent to output-high) to be turned into an input. 238 */ 239 if ((mask & chip->dir_output)) 240 max732x_gpio_set_value(gc, off, 1); 241 242 return 0; 243 } 244 245 static int max732x_gpio_direction_output(struct gpio_chip *gc, 246 unsigned off, int val) 247 { 248 struct max732x_chip *chip; 249 unsigned int mask = 1u << off; 250 251 chip = container_of(gc, struct max732x_chip, gpio_chip); 252 253 if ((mask & chip->dir_output) == 0) { 254 dev_dbg(&chip->client->dev, "%s port %d is input only\n", 255 chip->client->name, off); 256 return -EACCES; 257 } 258 259 max732x_gpio_set_value(gc, off, val); 260 return 0; 261 } 262 263 #ifdef CONFIG_GPIO_MAX732X_IRQ 264 static int max732x_writew(struct max732x_chip *chip, uint16_t val) 265 { 266 int ret; 267 268 val = cpu_to_le16(val); 269 270 ret = i2c_master_send(chip->client_group_a, (char *)&val, 2); 271 if (ret < 0) { 272 dev_err(&chip->client_group_a->dev, "failed writing\n"); 273 return ret; 274 } 275 276 return 0; 277 } 278 279 static int max732x_readw(struct max732x_chip *chip, uint16_t *val) 280 { 281 int ret; 282 283 ret = i2c_master_recv(chip->client_group_a, (char *)val, 2); 284 if (ret < 0) { 285 dev_err(&chip->client_group_a->dev, "failed reading\n"); 286 return ret; 287 } 288 289 *val = le16_to_cpu(*val); 290 return 0; 291 } 292 293 static void max732x_irq_update_mask(struct max732x_chip *chip) 294 { 295 uint16_t msg; 296 297 if (chip->irq_mask == chip->irq_mask_cur) 298 return; 299 300 chip->irq_mask = chip->irq_mask_cur; 301 302 if (chip->irq_features == INT_NO_MASK) 303 return; 304 305 mutex_lock(&chip->lock); 306 307 switch (chip->irq_features) { 308 case INT_INDEP_MASK: 309 msg = (chip->irq_mask << 8) | chip->reg_out[0]; 310 max732x_writew(chip, msg); 311 break; 312 313 case INT_MERGED_MASK: 314 msg = chip->irq_mask | chip->reg_out[0]; 315 max732x_writeb(chip, 1, (uint8_t)msg); 316 break; 317 } 318 319 mutex_unlock(&chip->lock); 320 } 321 322 static int max732x_gpio_to_irq(struct gpio_chip *gc, unsigned off) 323 { 324 struct max732x_chip *chip; 325 326 chip = container_of(gc, struct max732x_chip, gpio_chip); 327 return chip->irq_base + off; 328 } 329 330 static void max732x_irq_mask(struct irq_data *d) 331 { 332 struct max732x_chip *chip = irq_data_get_irq_chip_data(d); 333 334 chip->irq_mask_cur &= ~(1 << (d->irq - chip->irq_base)); 335 } 336 337 static void max732x_irq_unmask(struct irq_data *d) 338 { 339 struct max732x_chip *chip = irq_data_get_irq_chip_data(d); 340 341 chip->irq_mask_cur |= 1 << (d->irq - chip->irq_base); 342 } 343 344 static void max732x_irq_bus_lock(struct irq_data *d) 345 { 346 struct max732x_chip *chip = irq_data_get_irq_chip_data(d); 347 348 mutex_lock(&chip->irq_lock); 349 chip->irq_mask_cur = chip->irq_mask; 350 } 351 352 static void max732x_irq_bus_sync_unlock(struct irq_data *d) 353 { 354 struct max732x_chip *chip = irq_data_get_irq_chip_data(d); 355 356 max732x_irq_update_mask(chip); 357 mutex_unlock(&chip->irq_lock); 358 } 359 360 static int max732x_irq_set_type(struct irq_data *d, unsigned int type) 361 { 362 struct max732x_chip *chip = irq_data_get_irq_chip_data(d); 363 uint16_t off = d->irq - chip->irq_base; 364 uint16_t mask = 1 << off; 365 366 if (!(mask & chip->dir_input)) { 367 dev_dbg(&chip->client->dev, "%s port %d is output only\n", 368 chip->client->name, off); 369 return -EACCES; 370 } 371 372 if (!(type & IRQ_TYPE_EDGE_BOTH)) { 373 dev_err(&chip->client->dev, "irq %d: unsupported type %d\n", 374 d->irq, type); 375 return -EINVAL; 376 } 377 378 if (type & IRQ_TYPE_EDGE_FALLING) 379 chip->irq_trig_fall |= mask; 380 else 381 chip->irq_trig_fall &= ~mask; 382 383 if (type & IRQ_TYPE_EDGE_RISING) 384 chip->irq_trig_raise |= mask; 385 else 386 chip->irq_trig_raise &= ~mask; 387 388 return max732x_gpio_direction_input(&chip->gpio_chip, off); 389 } 390 391 static struct irq_chip max732x_irq_chip = { 392 .name = "max732x", 393 .irq_mask = max732x_irq_mask, 394 .irq_unmask = max732x_irq_unmask, 395 .irq_bus_lock = max732x_irq_bus_lock, 396 .irq_bus_sync_unlock = max732x_irq_bus_sync_unlock, 397 .irq_set_type = max732x_irq_set_type, 398 }; 399 400 static uint8_t max732x_irq_pending(struct max732x_chip *chip) 401 { 402 uint8_t cur_stat; 403 uint8_t old_stat; 404 uint8_t trigger; 405 uint8_t pending; 406 uint16_t status; 407 int ret; 408 409 ret = max732x_readw(chip, &status); 410 if (ret) 411 return 0; 412 413 trigger = status >> 8; 414 trigger &= chip->irq_mask; 415 416 if (!trigger) 417 return 0; 418 419 cur_stat = status & 0xFF; 420 cur_stat &= chip->irq_mask; 421 422 old_stat = cur_stat ^ trigger; 423 424 pending = (old_stat & chip->irq_trig_fall) | 425 (cur_stat & chip->irq_trig_raise); 426 pending &= trigger; 427 428 return pending; 429 } 430 431 static irqreturn_t max732x_irq_handler(int irq, void *devid) 432 { 433 struct max732x_chip *chip = devid; 434 uint8_t pending; 435 uint8_t level; 436 437 pending = max732x_irq_pending(chip); 438 439 if (!pending) 440 return IRQ_HANDLED; 441 442 do { 443 level = __ffs(pending); 444 handle_nested_irq(level + chip->irq_base); 445 446 pending &= ~(1 << level); 447 } while (pending); 448 449 return IRQ_HANDLED; 450 } 451 452 static int max732x_irq_setup(struct max732x_chip *chip, 453 const struct i2c_device_id *id) 454 { 455 struct i2c_client *client = chip->client; 456 struct max732x_platform_data *pdata = dev_get_platdata(&client->dev); 457 int has_irq = max732x_features[id->driver_data] >> 32; 458 int ret; 459 460 if (pdata->irq_base && has_irq != INT_NONE) { 461 int lvl; 462 463 chip->irq_base = pdata->irq_base; 464 chip->irq_features = has_irq; 465 mutex_init(&chip->irq_lock); 466 467 for (lvl = 0; lvl < chip->gpio_chip.ngpio; lvl++) { 468 int irq = lvl + chip->irq_base; 469 470 if (!(chip->dir_input & (1 << lvl))) 471 continue; 472 473 irq_set_chip_data(irq, chip); 474 irq_set_chip_and_handler(irq, &max732x_irq_chip, 475 handle_edge_irq); 476 irq_set_nested_thread(irq, 1); 477 #ifdef CONFIG_ARM 478 set_irq_flags(irq, IRQF_VALID); 479 #else 480 irq_set_noprobe(irq); 481 #endif 482 } 483 484 ret = request_threaded_irq(client->irq, 485 NULL, 486 max732x_irq_handler, 487 IRQF_TRIGGER_FALLING | IRQF_ONESHOT, 488 dev_name(&client->dev), chip); 489 if (ret) { 490 dev_err(&client->dev, "failed to request irq %d\n", 491 client->irq); 492 goto out_failed; 493 } 494 495 chip->gpio_chip.to_irq = max732x_gpio_to_irq; 496 } 497 498 return 0; 499 500 out_failed: 501 chip->irq_base = 0; 502 return ret; 503 } 504 505 static void max732x_irq_teardown(struct max732x_chip *chip) 506 { 507 if (chip->irq_base) 508 free_irq(chip->client->irq, chip); 509 } 510 #else /* CONFIG_GPIO_MAX732X_IRQ */ 511 static int max732x_irq_setup(struct max732x_chip *chip, 512 const struct i2c_device_id *id) 513 { 514 struct i2c_client *client = chip->client; 515 struct max732x_platform_data *pdata = dev_get_platdata(&client->dev); 516 int has_irq = max732x_features[id->driver_data] >> 32; 517 518 if (pdata->irq_base && has_irq != INT_NONE) 519 dev_warn(&client->dev, "interrupt support not compiled in\n"); 520 521 return 0; 522 } 523 524 static void max732x_irq_teardown(struct max732x_chip *chip) 525 { 526 } 527 #endif 528 529 static int max732x_setup_gpio(struct max732x_chip *chip, 530 const struct i2c_device_id *id, 531 unsigned gpio_start) 532 { 533 struct gpio_chip *gc = &chip->gpio_chip; 534 uint32_t id_data = (uint32_t)max732x_features[id->driver_data]; 535 int i, port = 0; 536 537 for (i = 0; i < 16; i++, id_data >>= 2) { 538 unsigned int mask = 1 << port; 539 540 switch (id_data & 0x3) { 541 case PORT_OUTPUT: 542 chip->dir_output |= mask; 543 break; 544 case PORT_INPUT: 545 chip->dir_input |= mask; 546 break; 547 case PORT_OPENDRAIN: 548 chip->dir_output |= mask; 549 chip->dir_input |= mask; 550 break; 551 default: 552 continue; 553 } 554 555 if (i < 8) 556 chip->mask_group_a |= mask; 557 port++; 558 } 559 560 if (chip->dir_input) 561 gc->direction_input = max732x_gpio_direction_input; 562 if (chip->dir_output) { 563 gc->direction_output = max732x_gpio_direction_output; 564 gc->set = max732x_gpio_set_value; 565 } 566 gc->get = max732x_gpio_get_value; 567 gc->can_sleep = true; 568 569 gc->base = gpio_start; 570 gc->ngpio = port; 571 gc->label = chip->client->name; 572 gc->owner = THIS_MODULE; 573 574 return port; 575 } 576 577 static int max732x_probe(struct i2c_client *client, 578 const struct i2c_device_id *id) 579 { 580 struct max732x_platform_data *pdata; 581 struct max732x_chip *chip; 582 struct i2c_client *c; 583 uint16_t addr_a, addr_b; 584 int ret, nr_port; 585 586 pdata = dev_get_platdata(&client->dev); 587 if (pdata == NULL) { 588 dev_dbg(&client->dev, "no platform data\n"); 589 return -EINVAL; 590 } 591 592 chip = devm_kzalloc(&client->dev, sizeof(struct max732x_chip), 593 GFP_KERNEL); 594 if (chip == NULL) 595 return -ENOMEM; 596 chip->client = client; 597 598 nr_port = max732x_setup_gpio(chip, id, pdata->gpio_base); 599 600 addr_a = (client->addr & 0x0f) | 0x60; 601 addr_b = (client->addr & 0x0f) | 0x50; 602 603 switch (client->addr & 0x70) { 604 case 0x60: 605 chip->client_group_a = client; 606 if (nr_port > 8) { 607 c = i2c_new_dummy(client->adapter, addr_b); 608 chip->client_group_b = chip->client_dummy = c; 609 } 610 break; 611 case 0x50: 612 chip->client_group_b = client; 613 if (nr_port > 8) { 614 c = i2c_new_dummy(client->adapter, addr_a); 615 chip->client_group_a = chip->client_dummy = c; 616 } 617 break; 618 default: 619 dev_err(&client->dev, "invalid I2C address specified %02x\n", 620 client->addr); 621 ret = -EINVAL; 622 goto out_failed; 623 } 624 625 if (nr_port > 8 && !chip->client_dummy) { 626 dev_err(&client->dev, 627 "Failed to allocate second group I2C device\n"); 628 ret = -ENODEV; 629 goto out_failed; 630 } 631 632 mutex_init(&chip->lock); 633 634 max732x_readb(chip, is_group_a(chip, 0), &chip->reg_out[0]); 635 if (nr_port > 8) 636 max732x_readb(chip, is_group_a(chip, 8), &chip->reg_out[1]); 637 638 ret = max732x_irq_setup(chip, id); 639 if (ret) 640 goto out_failed; 641 642 ret = gpiochip_add(&chip->gpio_chip); 643 if (ret) 644 goto out_failed; 645 646 if (pdata->setup) { 647 ret = pdata->setup(client, chip->gpio_chip.base, 648 chip->gpio_chip.ngpio, pdata->context); 649 if (ret < 0) 650 dev_warn(&client->dev, "setup failed, %d\n", ret); 651 } 652 653 i2c_set_clientdata(client, chip); 654 return 0; 655 656 out_failed: 657 if (chip->client_dummy) 658 i2c_unregister_device(chip->client_dummy); 659 max732x_irq_teardown(chip); 660 return ret; 661 } 662 663 static int max732x_remove(struct i2c_client *client) 664 { 665 struct max732x_platform_data *pdata = dev_get_platdata(&client->dev); 666 struct max732x_chip *chip = i2c_get_clientdata(client); 667 int ret; 668 669 if (pdata->teardown) { 670 ret = pdata->teardown(client, chip->gpio_chip.base, 671 chip->gpio_chip.ngpio, pdata->context); 672 if (ret < 0) { 673 dev_err(&client->dev, "%s failed, %d\n", 674 "teardown", ret); 675 return ret; 676 } 677 } 678 679 ret = gpiochip_remove(&chip->gpio_chip); 680 if (ret) { 681 dev_err(&client->dev, "%s failed, %d\n", 682 "gpiochip_remove()", ret); 683 return ret; 684 } 685 686 max732x_irq_teardown(chip); 687 688 /* unregister any dummy i2c_client */ 689 if (chip->client_dummy) 690 i2c_unregister_device(chip->client_dummy); 691 692 return 0; 693 } 694 695 static struct i2c_driver max732x_driver = { 696 .driver = { 697 .name = "max732x", 698 .owner = THIS_MODULE, 699 }, 700 .probe = max732x_probe, 701 .remove = max732x_remove, 702 .id_table = max732x_id, 703 }; 704 705 static int __init max732x_init(void) 706 { 707 return i2c_add_driver(&max732x_driver); 708 } 709 /* register after i2c postcore initcall and before 710 * subsys initcalls that may rely on these GPIOs 711 */ 712 subsys_initcall(max732x_init); 713 714 static void __exit max732x_exit(void) 715 { 716 i2c_del_driver(&max732x_driver); 717 } 718 module_exit(max732x_exit); 719 720 MODULE_AUTHOR("Eric Miao <eric.miao@marvell.com>"); 721 MODULE_DESCRIPTION("GPIO expander driver for MAX732X"); 722 MODULE_LICENSE("GPL"); 723