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

pinctrl: lynxpoint: Simplify code with cleanup helpers

Use macros defined in linux/cleanup.h to automate resource lifetime
control in the driver.

Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

+21 -51
+21 -51
drivers/pinctrl/intel/pinctrl-lynxpoint.c
··· 10 10 #include <linux/acpi.h> 11 11 #include <linux/array_size.h> 12 12 #include <linux/bitops.h> 13 + #include <linux/cleanup.h> 13 14 #include <linux/gpio/driver.h> 14 15 #include <linux/interrupt.h> 15 16 #include <linux/io.h> ··· 292 291 { 293 292 struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev); 294 293 const struct intel_pingroup *grp = &lg->soc->groups[group]; 295 - unsigned long flags; 296 294 int i; 297 295 298 - raw_spin_lock_irqsave(&lg->lock, flags); 296 + guard(raw_spinlock_irqsave)(&lg->lock); 299 297 300 298 /* Now enable the mux setting for each pin in the group */ 301 299 for (i = 0; i < grp->grp.npins; i++) { ··· 311 311 312 312 iowrite32(value, reg); 313 313 } 314 - 315 - raw_spin_unlock_irqrestore(&lg->lock, flags); 316 314 317 315 return 0; 318 316 } ··· 332 334 struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev); 333 335 void __iomem *reg = lp_gpio_reg(&lg->chip, pin, LP_CONFIG1); 334 336 void __iomem *conf2 = lp_gpio_reg(&lg->chip, pin, LP_CONFIG2); 335 - unsigned long flags; 336 337 u32 value; 337 338 338 - raw_spin_lock_irqsave(&lg->lock, flags); 339 + guard(raw_spinlock_irqsave)(&lg->lock); 339 340 340 341 /* 341 342 * Reconfigure pin to GPIO mode if needed and issue a warning, ··· 349 352 /* Enable input sensing */ 350 353 lp_gpio_enable_input(conf2); 351 354 352 - raw_spin_unlock_irqrestore(&lg->lock, flags); 353 - 354 355 return 0; 355 356 } 356 357 ··· 358 363 { 359 364 struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev); 360 365 void __iomem *conf2 = lp_gpio_reg(&lg->chip, pin, LP_CONFIG2); 361 - unsigned long flags; 362 366 363 - raw_spin_lock_irqsave(&lg->lock, flags); 367 + guard(raw_spinlock_irqsave)(&lg->lock); 364 368 365 369 /* Disable input sensing */ 366 370 lp_gpio_disable_input(conf2); 367 - 368 - raw_spin_unlock_irqrestore(&lg->lock, flags); 369 371 } 370 372 371 373 static int lp_gpio_set_direction(struct pinctrl_dev *pctldev, ··· 371 379 { 372 380 struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev); 373 381 void __iomem *reg = lp_gpio_reg(&lg->chip, pin, LP_CONFIG1); 374 - unsigned long flags; 375 382 u32 value; 376 383 377 - raw_spin_lock_irqsave(&lg->lock, flags); 384 + guard(raw_spinlock_irqsave)(&lg->lock); 378 385 379 386 value = ioread32(reg); 380 387 value &= ~DIR_BIT; ··· 390 399 "Potential Error: Setting GPIO to output with IOxAPIC redirection"); 391 400 } 392 401 iowrite32(value, reg); 393 - 394 - raw_spin_unlock_irqrestore(&lg->lock, flags); 395 402 396 403 return 0; 397 404 } ··· 410 421 struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev); 411 422 void __iomem *conf2 = lp_gpio_reg(&lg->chip, pin, LP_CONFIG2); 412 423 enum pin_config_param param = pinconf_to_config_param(*config); 413 - unsigned long flags; 414 424 u32 value, pull; 415 425 u16 arg; 416 426 417 - raw_spin_lock_irqsave(&lg->lock, flags); 418 - value = ioread32(conf2); 419 - raw_spin_unlock_irqrestore(&lg->lock, flags); 427 + scoped_guard(raw_spinlock_irqsave, &lg->lock) 428 + value = ioread32(conf2); 420 429 421 430 pull = value & GPIWP_MASK; 422 431 ··· 451 464 struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev); 452 465 void __iomem *conf2 = lp_gpio_reg(&lg->chip, pin, LP_CONFIG2); 453 466 enum pin_config_param param; 454 - unsigned long flags; 455 - int i, ret = 0; 467 + unsigned int i; 456 468 u32 value; 457 469 458 - raw_spin_lock_irqsave(&lg->lock, flags); 470 + guard(raw_spinlock_irqsave)(&lg->lock); 459 471 460 472 value = ioread32(conf2); 461 473 ··· 475 489 value |= GPIWP_UP; 476 490 break; 477 491 default: 478 - ret = -ENOTSUPP; 492 + return -ENOTSUPP; 479 493 } 480 - 481 - if (ret) 482 - break; 483 494 } 484 495 485 - if (!ret) 486 - iowrite32(value, conf2); 496 + iowrite32(value, conf2); 487 497 488 - raw_spin_unlock_irqrestore(&lg->lock, flags); 489 - 490 - return ret; 498 + return 0; 491 499 } 492 500 493 501 static const struct pinconf_ops lptlp_pinconf_ops = { ··· 507 527 { 508 528 struct intel_pinctrl *lg = gpiochip_get_data(chip); 509 529 void __iomem *reg = lp_gpio_reg(chip, offset, LP_CONFIG1); 510 - unsigned long flags; 511 530 512 - raw_spin_lock_irqsave(&lg->lock, flags); 531 + guard(raw_spinlock_irqsave)(&lg->lock); 513 532 514 533 if (value) 515 534 iowrite32(ioread32(reg) | OUT_LVL_BIT, reg); 516 535 else 517 536 iowrite32(ioread32(reg) & ~OUT_LVL_BIT, reg); 518 - 519 - raw_spin_unlock_irqrestore(&lg->lock, flags); 520 537 } 521 538 522 539 static int lp_gpio_direction_input(struct gpio_chip *chip, unsigned int offset) ··· 569 592 struct intel_pinctrl *lg = gpiochip_get_data(gc); 570 593 irq_hw_number_t hwirq = irqd_to_hwirq(d); 571 594 void __iomem *reg = lp_gpio_reg(&lg->chip, hwirq, LP_INT_STAT); 572 - unsigned long flags; 573 595 574 - raw_spin_lock_irqsave(&lg->lock, flags); 596 + guard(raw_spinlock_irqsave)(&lg->lock); 597 + 575 598 iowrite32(BIT(hwirq % 32), reg); 576 - raw_spin_unlock_irqrestore(&lg->lock, flags); 577 599 } 578 600 579 601 static void lp_irq_unmask(struct irq_data *d) ··· 589 613 struct intel_pinctrl *lg = gpiochip_get_data(gc); 590 614 irq_hw_number_t hwirq = irqd_to_hwirq(d); 591 615 void __iomem *reg = lp_gpio_reg(&lg->chip, hwirq, LP_INT_ENABLE); 592 - unsigned long flags; 593 616 594 617 gpiochip_enable_irq(gc, hwirq); 595 618 596 - raw_spin_lock_irqsave(&lg->lock, flags); 597 - iowrite32(ioread32(reg) | BIT(hwirq % 32), reg); 598 - raw_spin_unlock_irqrestore(&lg->lock, flags); 619 + scoped_guard(raw_spinlock_irqsave, &lg->lock) 620 + iowrite32(ioread32(reg) | BIT(hwirq % 32), reg); 599 621 } 600 622 601 623 static void lp_irq_disable(struct irq_data *d) ··· 602 628 struct intel_pinctrl *lg = gpiochip_get_data(gc); 603 629 irq_hw_number_t hwirq = irqd_to_hwirq(d); 604 630 void __iomem *reg = lp_gpio_reg(&lg->chip, hwirq, LP_INT_ENABLE); 605 - unsigned long flags; 606 631 607 - raw_spin_lock_irqsave(&lg->lock, flags); 608 - iowrite32(ioread32(reg) & ~BIT(hwirq % 32), reg); 609 - raw_spin_unlock_irqrestore(&lg->lock, flags); 632 + scoped_guard(raw_spinlock_irqsave, &lg->lock) 633 + iowrite32(ioread32(reg) & ~BIT(hwirq % 32), reg); 610 634 611 635 gpiochip_disable_irq(gc, hwirq); 612 636 } ··· 614 642 struct gpio_chip *gc = irq_data_get_irq_chip_data(d); 615 643 struct intel_pinctrl *lg = gpiochip_get_data(gc); 616 644 irq_hw_number_t hwirq = irqd_to_hwirq(d); 617 - unsigned long flags; 618 645 void __iomem *reg; 619 646 u32 value; 620 647 ··· 627 656 return -EBUSY; 628 657 } 629 658 630 - raw_spin_lock_irqsave(&lg->lock, flags); 659 + guard(raw_spinlock_irqsave)(&lg->lock); 660 + 631 661 value = ioread32(reg); 632 662 633 663 /* set both TRIG_SEL and INV bits to 0 for rising edge */ ··· 653 681 irq_set_handler_locked(d, handle_edge_irq); 654 682 else if (type & IRQ_TYPE_LEVEL_MASK) 655 683 irq_set_handler_locked(d, handle_level_irq); 656 - 657 - raw_spin_unlock_irqrestore(&lg->lock, flags); 658 684 659 685 return 0; 660 686 }