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 81enum { 82 MAX7319, 83 MAX7320, 84 MAX7321, 85 MAX7322, 86 MAX7323, 87 MAX7324, 88 MAX7325, 89 MAX7326, 90 MAX7327, 91}; 92 93static 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 105static 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}; 117MODULE_DEVICE_TABLE(i2c, max732x_id); 118 119struct 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 145static 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 160static 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 176static inline int is_group_a(struct max732x_chip *chip, unsigned off) 177{ 178 return (1u << off) & chip->mask_group_a; 179} 180 181static 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 196static 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; 218out: 219 mutex_unlock(&chip->lock); 220} 221 222static 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 245static 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 264static 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 279static 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 293static 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 322static 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 330static 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 337static 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 344static 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 352static 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 360static 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 391static 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 400static 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 431static 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 452static 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 500out_failed: 501 chip->irq_base = 0; 502 return ret; 503} 504 505static 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 */ 511static 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 524static void max732x_irq_teardown(struct max732x_chip *chip) 525{ 526} 527#endif 528 529static 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 577static 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 656out_failed: 657 if (chip->client_dummy) 658 i2c_unregister_device(chip->client_dummy); 659 max732x_irq_teardown(chip); 660 return ret; 661} 662 663static 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 gpiochip_remove(&chip->gpio_chip); 680 681 max732x_irq_teardown(chip); 682 683 /* unregister any dummy i2c_client */ 684 if (chip->client_dummy) 685 i2c_unregister_device(chip->client_dummy); 686 687 return 0; 688} 689 690static struct i2c_driver max732x_driver = { 691 .driver = { 692 .name = "max732x", 693 .owner = THIS_MODULE, 694 }, 695 .probe = max732x_probe, 696 .remove = max732x_remove, 697 .id_table = max732x_id, 698}; 699 700static int __init max732x_init(void) 701{ 702 return i2c_add_driver(&max732x_driver); 703} 704/* register after i2c postcore initcall and before 705 * subsys initcalls that may rely on these GPIOs 706 */ 707subsys_initcall(max732x_init); 708 709static void __exit max732x_exit(void) 710{ 711 i2c_del_driver(&max732x_driver); 712} 713module_exit(max732x_exit); 714 715MODULE_AUTHOR("Eric Miao <eric.miao@marvell.com>"); 716MODULE_DESCRIPTION("GPIO expander driver for MAX732X"); 717MODULE_LICENSE("GPL"); 718