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.

powerpc/8xx: Drop legacy-of-mm-gpiochip.h header

Remove legacy-of-mm-gpiochip.h header file. The above mentioned
file provides an OF API that's deprecated. There is no agnostic
alternatives to it and we have to open code the logic which was
hidden behind of_mm_gpiochip_add_data(). Note, most of the GPIO
drivers are using their own labeling schemas and resource retrieval
that only a few may gain of the code deduplication, so whenever
alternative is appear we can move drivers again to use that one.

As a side effect this change fixes a potential memory leak on
an error path, if of_mm_gpiochip_add_data() fails.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Acked-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Link: https://patch.msgid.link/20241118123254.620519-1-andriy.shevchenko@linux.intel.com

authored by

Andy Shevchenko and committed by
Madhavan Srinivasan
34064c82 f1170515

+60 -59
+60 -59
arch/powerpc/platforms/8xx/cpm1.c
··· 45 45 #include <sysdev/fsl_soc.h> 46 46 47 47 #ifdef CONFIG_8xx_GPIO 48 - #include <linux/gpio/legacy-of-mm-gpiochip.h> 48 + #include <linux/gpio/driver.h> 49 49 #endif 50 50 51 51 #define CPM_MAP_SIZE (0x4000) ··· 376 376 #ifdef CONFIG_8xx_GPIO 377 377 378 378 struct cpm1_gpio16_chip { 379 - struct of_mm_gpio_chip mm_gc; 379 + struct gpio_chip gc; 380 + void __iomem *regs; 380 381 spinlock_t lock; 381 382 382 383 /* shadowed data register to clear/set bits safely */ ··· 387 386 int irq[16]; 388 387 }; 389 388 390 - static void cpm1_gpio16_save_regs(struct of_mm_gpio_chip *mm_gc) 389 + static void cpm1_gpio16_save_regs(struct cpm1_gpio16_chip *cpm1_gc) 391 390 { 392 - struct cpm1_gpio16_chip *cpm1_gc = 393 - container_of(mm_gc, struct cpm1_gpio16_chip, mm_gc); 394 - struct cpm_ioport16 __iomem *iop = mm_gc->regs; 391 + struct cpm_ioport16 __iomem *iop = cpm1_gc->regs; 395 392 396 393 cpm1_gc->cpdata = in_be16(&iop->dat); 397 394 } 398 395 399 396 static int cpm1_gpio16_get(struct gpio_chip *gc, unsigned int gpio) 400 397 { 401 - struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); 402 - struct cpm_ioport16 __iomem *iop = mm_gc->regs; 398 + struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(gc); 399 + struct cpm_ioport16 __iomem *iop = cpm1_gc->regs; 403 400 u16 pin_mask; 404 401 405 402 pin_mask = 1 << (15 - gpio); ··· 405 406 return !!(in_be16(&iop->dat) & pin_mask); 406 407 } 407 408 408 - static void __cpm1_gpio16_set(struct of_mm_gpio_chip *mm_gc, u16 pin_mask, 409 - int value) 409 + static void __cpm1_gpio16_set(struct cpm1_gpio16_chip *cpm1_gc, u16 pin_mask, int value) 410 410 { 411 - struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc); 412 - struct cpm_ioport16 __iomem *iop = mm_gc->regs; 411 + struct cpm_ioport16 __iomem *iop = cpm1_gc->regs; 413 412 414 413 if (value) 415 414 cpm1_gc->cpdata |= pin_mask; ··· 419 422 420 423 static void cpm1_gpio16_set(struct gpio_chip *gc, unsigned int gpio, int value) 421 424 { 422 - struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); 423 - struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc); 425 + struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(gc); 424 426 unsigned long flags; 425 427 u16 pin_mask = 1 << (15 - gpio); 426 428 427 429 spin_lock_irqsave(&cpm1_gc->lock, flags); 428 430 429 - __cpm1_gpio16_set(mm_gc, pin_mask, value); 431 + __cpm1_gpio16_set(cpm1_gc, pin_mask, value); 430 432 431 433 spin_unlock_irqrestore(&cpm1_gc->lock, flags); 432 434 } 433 435 434 436 static int cpm1_gpio16_to_irq(struct gpio_chip *gc, unsigned int gpio) 435 437 { 436 - struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); 437 - struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc); 438 + struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(gc); 438 439 439 440 return cpm1_gc->irq[gpio] ? : -ENXIO; 440 441 } 441 442 442 443 static int cpm1_gpio16_dir_out(struct gpio_chip *gc, unsigned int gpio, int val) 443 444 { 444 - struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); 445 - struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc); 446 - struct cpm_ioport16 __iomem *iop = mm_gc->regs; 445 + struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(gc); 446 + struct cpm_ioport16 __iomem *iop = cpm1_gc->regs; 447 447 unsigned long flags; 448 448 u16 pin_mask = 1 << (15 - gpio); 449 449 450 450 spin_lock_irqsave(&cpm1_gc->lock, flags); 451 451 452 452 setbits16(&iop->dir, pin_mask); 453 - __cpm1_gpio16_set(mm_gc, pin_mask, val); 453 + __cpm1_gpio16_set(cpm1_gc, pin_mask, val); 454 454 455 455 spin_unlock_irqrestore(&cpm1_gc->lock, flags); 456 456 ··· 456 462 457 463 static int cpm1_gpio16_dir_in(struct gpio_chip *gc, unsigned int gpio) 458 464 { 459 - struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); 460 - struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc); 461 - struct cpm_ioport16 __iomem *iop = mm_gc->regs; 465 + struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(gc); 466 + struct cpm_ioport16 __iomem *iop = cpm1_gc->regs; 462 467 unsigned long flags; 463 468 u16 pin_mask = 1 << (15 - gpio); 464 469 ··· 474 481 { 475 482 struct device_node *np = dev->of_node; 476 483 struct cpm1_gpio16_chip *cpm1_gc; 477 - struct of_mm_gpio_chip *mm_gc; 478 484 struct gpio_chip *gc; 479 485 u16 mask; 480 486 481 - cpm1_gc = kzalloc(sizeof(*cpm1_gc), GFP_KERNEL); 487 + cpm1_gc = devm_kzalloc(dev, sizeof(*cpm1_gc), GFP_KERNEL); 482 488 if (!cpm1_gc) 483 489 return -ENOMEM; 484 490 ··· 491 499 cpm1_gc->irq[i] = irq_of_parse_and_map(np, j++); 492 500 } 493 501 494 - mm_gc = &cpm1_gc->mm_gc; 495 - gc = &mm_gc->gc; 496 - 497 - mm_gc->save_regs = cpm1_gpio16_save_regs; 502 + gc = &cpm1_gc->gc; 503 + gc->base = -1; 498 504 gc->ngpio = 16; 499 505 gc->direction_input = cpm1_gpio16_dir_in; 500 506 gc->direction_output = cpm1_gpio16_dir_out; ··· 502 512 gc->parent = dev; 503 513 gc->owner = THIS_MODULE; 504 514 505 - return of_mm_gpiochip_add_data(np, mm_gc, cpm1_gc); 515 + gc->label = devm_kasprintf(dev, GFP_KERNEL, "%pOF", np); 516 + if (!gc->label) 517 + return -ENOMEM; 518 + 519 + cpm1_gc->regs = devm_of_iomap(dev, np, 0, NULL); 520 + if (IS_ERR(cpm1_gc->regs)) 521 + return PTR_ERR(cpm1_gc->regs); 522 + 523 + cpm1_gpio16_save_regs(cpm1_gc); 524 + 525 + return devm_gpiochip_add_data(dev, gc, cpm1_gc); 506 526 } 507 527 508 528 struct cpm1_gpio32_chip { 509 - struct of_mm_gpio_chip mm_gc; 529 + struct gpio_chip gc; 530 + void __iomem *regs; 510 531 spinlock_t lock; 511 532 512 533 /* shadowed data register to clear/set bits safely */ 513 534 u32 cpdata; 514 535 }; 515 536 516 - static void cpm1_gpio32_save_regs(struct of_mm_gpio_chip *mm_gc) 537 + static void cpm1_gpio32_save_regs(struct cpm1_gpio32_chip *cpm1_gc) 517 538 { 518 - struct cpm1_gpio32_chip *cpm1_gc = 519 - container_of(mm_gc, struct cpm1_gpio32_chip, mm_gc); 520 - struct cpm_ioport32b __iomem *iop = mm_gc->regs; 539 + struct cpm_ioport32b __iomem *iop = cpm1_gc->regs; 521 540 522 541 cpm1_gc->cpdata = in_be32(&iop->dat); 523 542 } 524 543 525 544 static int cpm1_gpio32_get(struct gpio_chip *gc, unsigned int gpio) 526 545 { 527 - struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); 528 - struct cpm_ioport32b __iomem *iop = mm_gc->regs; 546 + struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(gc); 547 + struct cpm_ioport32b __iomem *iop = cpm1_gc->regs; 529 548 u32 pin_mask; 530 549 531 550 pin_mask = 1 << (31 - gpio); ··· 542 543 return !!(in_be32(&iop->dat) & pin_mask); 543 544 } 544 545 545 - static void __cpm1_gpio32_set(struct of_mm_gpio_chip *mm_gc, u32 pin_mask, 546 - int value) 546 + static void __cpm1_gpio32_set(struct cpm1_gpio32_chip *cpm1_gc, u32 pin_mask, int value) 547 547 { 548 - struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc); 549 - struct cpm_ioport32b __iomem *iop = mm_gc->regs; 548 + struct cpm_ioport32b __iomem *iop = cpm1_gc->regs; 550 549 551 550 if (value) 552 551 cpm1_gc->cpdata |= pin_mask; ··· 556 559 557 560 static void cpm1_gpio32_set(struct gpio_chip *gc, unsigned int gpio, int value) 558 561 { 559 - struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); 560 - struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc); 562 + struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(gc); 561 563 unsigned long flags; 562 564 u32 pin_mask = 1 << (31 - gpio); 563 565 564 566 spin_lock_irqsave(&cpm1_gc->lock, flags); 565 567 566 - __cpm1_gpio32_set(mm_gc, pin_mask, value); 568 + __cpm1_gpio32_set(cpm1_gc, pin_mask, value); 567 569 568 570 spin_unlock_irqrestore(&cpm1_gc->lock, flags); 569 571 } 570 572 571 573 static int cpm1_gpio32_dir_out(struct gpio_chip *gc, unsigned int gpio, int val) 572 574 { 573 - struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); 574 - struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc); 575 - struct cpm_ioport32b __iomem *iop = mm_gc->regs; 575 + struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(gc); 576 + struct cpm_ioport32b __iomem *iop = cpm1_gc->regs; 576 577 unsigned long flags; 577 578 u32 pin_mask = 1 << (31 - gpio); 578 579 579 580 spin_lock_irqsave(&cpm1_gc->lock, flags); 580 581 581 582 setbits32(&iop->dir, pin_mask); 582 - __cpm1_gpio32_set(mm_gc, pin_mask, val); 583 + __cpm1_gpio32_set(cpm1_gc, pin_mask, val); 583 584 584 585 spin_unlock_irqrestore(&cpm1_gc->lock, flags); 585 586 ··· 586 591 587 592 static int cpm1_gpio32_dir_in(struct gpio_chip *gc, unsigned int gpio) 588 593 { 589 - struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); 590 - struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc); 591 - struct cpm_ioport32b __iomem *iop = mm_gc->regs; 594 + struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(gc); 595 + struct cpm_ioport32b __iomem *iop = cpm1_gc->regs; 592 596 unsigned long flags; 593 597 u32 pin_mask = 1 << (31 - gpio); 594 598 ··· 604 610 { 605 611 struct device_node *np = dev->of_node; 606 612 struct cpm1_gpio32_chip *cpm1_gc; 607 - struct of_mm_gpio_chip *mm_gc; 608 613 struct gpio_chip *gc; 609 614 610 - cpm1_gc = kzalloc(sizeof(*cpm1_gc), GFP_KERNEL); 615 + cpm1_gc = devm_kzalloc(dev, sizeof(*cpm1_gc), GFP_KERNEL); 611 616 if (!cpm1_gc) 612 617 return -ENOMEM; 613 618 614 619 spin_lock_init(&cpm1_gc->lock); 615 620 616 - mm_gc = &cpm1_gc->mm_gc; 617 - gc = &mm_gc->gc; 618 - 619 - mm_gc->save_regs = cpm1_gpio32_save_regs; 621 + gc = &cpm1_gc->gc; 622 + gc->base = -1; 620 623 gc->ngpio = 32; 621 624 gc->direction_input = cpm1_gpio32_dir_in; 622 625 gc->direction_output = cpm1_gpio32_dir_out; ··· 622 631 gc->parent = dev; 623 632 gc->owner = THIS_MODULE; 624 633 625 - return of_mm_gpiochip_add_data(np, mm_gc, cpm1_gc); 634 + gc->label = devm_kasprintf(dev, GFP_KERNEL, "%pOF", np); 635 + if (!gc->label) 636 + return -ENOMEM; 637 + 638 + cpm1_gc->regs = devm_of_iomap(dev, np, 0, NULL); 639 + if (IS_ERR(cpm1_gc->regs)) 640 + return PTR_ERR(cpm1_gc->regs); 641 + 642 + cpm1_gpio32_save_regs(cpm1_gc); 643 + 644 + return devm_gpiochip_add_data(dev, gc, cpm1_gc); 626 645 } 627 646 628 647 #endif /* CONFIG_8xx_GPIO */