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

Merge tag 'samsung-pinctrl-6.13' of https://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/samsung into devel

Samsung pinctrl drivers changes for v6.13

1. Add new pin controller drivers for new Samsung SoCs: Exynos8895,
Exynos9810, Exynos990.

2. Correct the condition when applying further interrupt constraints on
certain Samsung pin controllers. The condition was simply not
effective.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

+468 -8
+15 -8
Documentation/devicetree/bindings/pinctrl/samsung,pinctrl-wakeup-interrupt.yaml
··· 42 42 - samsung,exynos5433-wakeup-eint 43 43 - samsung,exynos7885-wakeup-eint 44 44 - samsung,exynos850-wakeup-eint 45 + - samsung,exynos8895-wakeup-eint 45 46 - const: samsung,exynos7-wakeup-eint 46 47 - items: 47 48 - enum: 48 49 - google,gs101-wakeup-eint 50 + - samsung,exynos9810-wakeup-eint 51 + - samsung,exynos990-wakeup-eint 49 52 - samsung,exynosautov9-wakeup-eint 50 53 - const: samsung,exynos850-wakeup-eint 51 54 - const: samsung,exynos7-wakeup-eint ··· 94 91 - if: 95 92 properties: 96 93 compatible: 97 - # Match without "contains", to skip newer variants which are still 98 - # compatible with samsung,exynos7-wakeup-eint 99 - enum: 100 - - samsung,s5pv210-wakeup-eint 101 - - samsung,exynos4210-wakeup-eint 102 - - samsung,exynos5433-wakeup-eint 103 - - samsung,exynos7-wakeup-eint 104 - - samsung,exynos7885-wakeup-eint 94 + oneOf: 95 + # Match without "contains", to skip newer variants which are still 96 + # compatible with samsung,exynos7-wakeup-eint 97 + - enum: 98 + - samsung,exynos4210-wakeup-eint 99 + - samsung,exynos7-wakeup-eint 100 + - samsung,s5pv210-wakeup-eint 101 + - contains: 102 + enum: 103 + - samsung,exynos5433-wakeup-eint 104 + - samsung,exynos7885-wakeup-eint 105 + - samsung,exynos8895-wakeup-eint 105 106 then: 106 107 properties: 107 108 interrupts:
+3
Documentation/devicetree/bindings/pinctrl/samsung,pinctrl.yaml
··· 53 53 - samsung,exynos7-pinctrl 54 54 - samsung,exynos7885-pinctrl 55 55 - samsung,exynos850-pinctrl 56 + - samsung,exynos8895-pinctrl 57 + - samsung,exynos9810-pinctrl 58 + - samsung,exynos990-pinctrl 56 59 - samsung,exynosautov9-pinctrl 57 60 - samsung,exynosautov920-pinctrl 58 61 - tesla,fsd-pinctrl
+431
drivers/pinctrl/samsung/pinctrl-exynos-arm64.c
··· 58 58 .reg_offset = { 0x00, 0x04, 0x08, 0x0c, }, 59 59 }; 60 60 61 + /* 62 + * Bank type for non-alive type. Bit fields: 63 + * CON: 4, DAT: 1, PUD: 2, DRV: 3, CONPDN: 2, PUDPDN: 2 64 + */ 65 + static const struct samsung_pin_bank_type exynos8895_bank_type_off = { 66 + .fld_width = { 4, 1, 2, 3, 2, 2, }, 67 + .reg_offset = { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, }, 68 + }; 69 + 61 70 /* Pad retention control code for accessing PMU regmap */ 62 71 static atomic_t exynos_shared_retention_refcnt; 63 72 ··· 627 618 .num_ctrl = ARRAY_SIZE(exynos850_pin_ctrl), 628 619 }; 629 620 621 + /* pin banks of exynos990 pin-controller 0 (ALIVE) */ 622 + static struct samsung_pin_bank_data exynos990_pin_banks0[] = { 623 + /* Must start with EINTG banks, ordered by EINT group number. */ 624 + EXYNOS850_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00), 625 + EXYNOS850_PIN_BANK_EINTW(8, 0x020, "gpa1", 0x04), 626 + EXYNOS850_PIN_BANK_EINTW(8, 0x040, "gpa2", 0x08), 627 + EXYNOS850_PIN_BANK_EINTW(8, 0x060, "gpa3", 0x0c), 628 + EXYNOS850_PIN_BANK_EINTW(2, 0x080, "gpa4", 0x10), 629 + EXYNOS850_PIN_BANK_EINTN(7, 0x0A0, "gpq0"), 630 + }; 631 + 632 + /* pin banks of exynos990 pin-controller 1 (CMGP) */ 633 + static struct samsung_pin_bank_data exynos990_pin_banks1[] = { 634 + /* Must start with EINTG banks, ordered by EINT group number. */ 635 + EXYNOS850_PIN_BANK_EINTN(1, 0x000, "gpm0"), 636 + EXYNOS850_PIN_BANK_EINTN(1, 0x020, "gpm1"), 637 + EXYNOS850_PIN_BANK_EINTN(1, 0x040, "gpm2"), 638 + EXYNOS850_PIN_BANK_EINTN(1, 0x060, "gpm3"), 639 + EXYNOS850_PIN_BANK_EINTW(1, 0x080, "gpm4", 0x00), 640 + EXYNOS850_PIN_BANK_EINTW(1, 0x0A0, "gpm5", 0x04), 641 + EXYNOS850_PIN_BANK_EINTW(1, 0x0C0, "gpm6", 0x08), 642 + EXYNOS850_PIN_BANK_EINTW(1, 0x0E0, "gpm7", 0x0c), 643 + EXYNOS850_PIN_BANK_EINTW(1, 0x100, "gpm8", 0x10), 644 + EXYNOS850_PIN_BANK_EINTW(1, 0x120, "gpm9", 0x14), 645 + EXYNOS850_PIN_BANK_EINTW(1, 0x140, "gpm10", 0x18), 646 + EXYNOS850_PIN_BANK_EINTW(1, 0x160, "gpm11", 0x1c), 647 + EXYNOS850_PIN_BANK_EINTW(1, 0x180, "gpm12", 0x20), 648 + EXYNOS850_PIN_BANK_EINTW(1, 0x1A0, "gpm13", 0x24), 649 + EXYNOS850_PIN_BANK_EINTW(1, 0x1C0, "gpm14", 0x28), 650 + EXYNOS850_PIN_BANK_EINTW(1, 0x1E0, "gpm15", 0x2c), 651 + EXYNOS850_PIN_BANK_EINTW(1, 0x200, "gpm16", 0x30), 652 + EXYNOS850_PIN_BANK_EINTW(1, 0x220, "gpm17", 0x34), 653 + EXYNOS850_PIN_BANK_EINTW(1, 0x240, "gpm18", 0x38), 654 + EXYNOS850_PIN_BANK_EINTW(1, 0x260, "gpm19", 0x3c), 655 + EXYNOS850_PIN_BANK_EINTW(1, 0x280, "gpm20", 0x40), 656 + EXYNOS850_PIN_BANK_EINTW(1, 0x2A0, "gpm21", 0x44), 657 + EXYNOS850_PIN_BANK_EINTW(1, 0x2C0, "gpm22", 0x48), 658 + EXYNOS850_PIN_BANK_EINTW(1, 0x2E0, "gpm23", 0x4c), 659 + EXYNOS850_PIN_BANK_EINTW(1, 0x300, "gpm24", 0x50), 660 + EXYNOS850_PIN_BANK_EINTW(1, 0x320, "gpm25", 0x54), 661 + EXYNOS850_PIN_BANK_EINTW(1, 0x340, "gpm26", 0x58), 662 + EXYNOS850_PIN_BANK_EINTW(1, 0x360, "gpm27", 0x5c), 663 + EXYNOS850_PIN_BANK_EINTW(1, 0x380, "gpm28", 0x60), 664 + EXYNOS850_PIN_BANK_EINTW(1, 0x3A0, "gpm29", 0x64), 665 + EXYNOS850_PIN_BANK_EINTW(1, 0x3C0, "gpm30", 0x68), 666 + EXYNOS850_PIN_BANK_EINTW(1, 0x3E0, "gpm31", 0x6c), 667 + EXYNOS850_PIN_BANK_EINTW(1, 0x400, "gpm32", 0x70), 668 + EXYNOS850_PIN_BANK_EINTW(1, 0x420, "gpm33", 0x74), 669 + 670 + }; 671 + 672 + /* pin banks of exynos990 pin-controller 2 (HSI1) */ 673 + static struct samsung_pin_bank_data exynos990_pin_banks2[] = { 674 + /* Must start with EINTG banks, ordered by EINT group number. */ 675 + EXYNOS850_PIN_BANK_EINTG(4, 0x000, "gpf0", 0x00), 676 + EXYNOS850_PIN_BANK_EINTG(6, 0x020, "gpf1", 0x04), 677 + EXYNOS850_PIN_BANK_EINTG(3, 0x040, "gpf2", 0x08), 678 + }; 679 + 680 + /* pin banks of exynos990 pin-controller 3 (HSI2) */ 681 + static struct samsung_pin_bank_data exynos990_pin_banks3[] = { 682 + /* Must start with EINTG banks, ordered by EINT group number. */ 683 + EXYNOS850_PIN_BANK_EINTG(2, 0x000, "gpf3", 0x00), 684 + }; 685 + 686 + /* pin banks of exynos990 pin-controller 4 (PERIC0) */ 687 + static struct samsung_pin_bank_data exynos990_pin_banks4[] = { 688 + /* Must start with EINTG banks, ordered by EINT group number. */ 689 + EXYNOS850_PIN_BANK_EINTG(8, 0x000, "gpp0", 0x00), 690 + EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpp1", 0x04), 691 + EXYNOS850_PIN_BANK_EINTG(8, 0x040, "gpp2", 0x08), 692 + EXYNOS850_PIN_BANK_EINTG(8, 0x060, "gpp3", 0x0C), 693 + EXYNOS850_PIN_BANK_EINTG(8, 0x080, "gpp4", 0x10), 694 + EXYNOS850_PIN_BANK_EINTG(2, 0x0A0, "gpg0", 0x14), 695 + }; 696 + 697 + /* pin banks of exynos990 pin-controller 5 (PERIC1) */ 698 + static struct samsung_pin_bank_data exynos990_pin_banks5[] = { 699 + /* Must start with EINTG banks, ordered by EINT group number. */ 700 + EXYNOS850_PIN_BANK_EINTG(8, 0x000, "gpp5", 0x00), 701 + EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpp6", 0x04), 702 + EXYNOS850_PIN_BANK_EINTG(8, 0x040, "gpp7", 0x08), 703 + EXYNOS850_PIN_BANK_EINTG(8, 0x060, "gpp8", 0x0C), 704 + EXYNOS850_PIN_BANK_EINTG(8, 0x080, "gpp9", 0x10), 705 + EXYNOS850_PIN_BANK_EINTG(6, 0x0A0, "gpc0", 0x14), 706 + EXYNOS850_PIN_BANK_EINTG(4, 0x0C0, "gpg1", 0x18), 707 + EXYNOS850_PIN_BANK_EINTG(8, 0x0E0, "gpb0", 0x1C), 708 + EXYNOS850_PIN_BANK_EINTG(8, 0x100, "gpb1", 0x20), 709 + EXYNOS850_PIN_BANK_EINTG(8, 0x120, "gpb2", 0x24), 710 + }; 711 + 712 + /* pin banks of exynos990 pin-controller 6 (VTS) */ 713 + static struct samsung_pin_bank_data exynos990_pin_banks6[] = { 714 + /* Must start with EINTG banks, ordered by EINT group number. */ 715 + EXYNOS850_PIN_BANK_EINTG(7, 0x000, "gpv0", 0x00), 716 + }; 717 + 718 + static const struct samsung_pin_ctrl exynos990_pin_ctrl[] __initconst = { 719 + { 720 + /* pin-controller instance 0 ALIVE data */ 721 + .pin_banks = exynos990_pin_banks0, 722 + .nr_banks = ARRAY_SIZE(exynos990_pin_banks0), 723 + .eint_wkup_init = exynos_eint_wkup_init, 724 + }, { 725 + /* pin-controller instance 1 CMGP data */ 726 + .pin_banks = exynos990_pin_banks1, 727 + .nr_banks = ARRAY_SIZE(exynos990_pin_banks1), 728 + .eint_wkup_init = exynos_eint_wkup_init, 729 + }, { 730 + /* pin-controller instance 2 HSI1 data */ 731 + .pin_banks = exynos990_pin_banks2, 732 + .nr_banks = ARRAY_SIZE(exynos990_pin_banks2), 733 + .eint_gpio_init = exynos_eint_gpio_init, 734 + }, { 735 + /* pin-controller instance 3 HSI2 data */ 736 + .pin_banks = exynos990_pin_banks3, 737 + .nr_banks = ARRAY_SIZE(exynos990_pin_banks3), 738 + .eint_gpio_init = exynos_eint_gpio_init, 739 + }, { 740 + /* pin-controller instance 4 PERIC0 data */ 741 + .pin_banks = exynos990_pin_banks4, 742 + .nr_banks = ARRAY_SIZE(exynos990_pin_banks4), 743 + .eint_gpio_init = exynos_eint_gpio_init, 744 + }, { 745 + /* pin-controller instance 5 PERIC1 data */ 746 + .pin_banks = exynos990_pin_banks5, 747 + .nr_banks = ARRAY_SIZE(exynos990_pin_banks5), 748 + .eint_gpio_init = exynos_eint_gpio_init, 749 + }, { 750 + /* pin-controller instance 6 VTS data */ 751 + .pin_banks = exynos990_pin_banks6, 752 + .nr_banks = ARRAY_SIZE(exynos990_pin_banks6), 753 + }, 754 + }; 755 + 756 + const struct samsung_pinctrl_of_match_data exynos990_of_data __initconst = { 757 + .ctrl = exynos990_pin_ctrl, 758 + .num_ctrl = ARRAY_SIZE(exynos990_pin_ctrl), 759 + }; 760 + 761 + /* pin banks of exynos9810 pin-controller 0 (ALIVE) */ 762 + static const struct samsung_pin_bank_data exynos9810_pin_banks0[] __initconst = { 763 + EXYNOS850_PIN_BANK_EINTN(6, 0x000, "etc1"), 764 + EXYNOS850_PIN_BANK_EINTW(8, 0x020, "gpa0", 0x00), 765 + EXYNOS850_PIN_BANK_EINTW(8, 0x040, "gpa1", 0x04), 766 + EXYNOS850_PIN_BANK_EINTW(8, 0x060, "gpa2", 0x08), 767 + EXYNOS850_PIN_BANK_EINTW(8, 0x080, "gpa3", 0x0c), 768 + EXYNOS850_PIN_BANK_EINTN(6, 0x0A0, "gpq0"), 769 + EXYNOS850_PIN_BANK_EINTW(2, 0x0C0, "gpa4", 0x10), 770 + }; 771 + 772 + /* pin banks of exynos9810 pin-controller 1 (AUD) */ 773 + static const struct samsung_pin_bank_data exynos9810_pin_banks1[] __initconst = { 774 + EXYNOS850_PIN_BANK_EINTG(5, 0x000, "gpb0", 0x00), 775 + EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpb1", 0x04), 776 + EXYNOS850_PIN_BANK_EINTG(4, 0x040, "gpb2", 0x08), 777 + }; 778 + 779 + /* pin banks of exynos9810 pin-controller 2 (CHUB) */ 780 + static const struct samsung_pin_bank_data exynos9810_pin_banks2[] __initconst = { 781 + EXYNOS850_PIN_BANK_EINTG(8, 0x000, "gph0", 0x00), 782 + EXYNOS850_PIN_BANK_EINTG(5, 0x020, "gph1", 0x04), 783 + }; 784 + 785 + /* pin banks of exynos9810 pin-controller 3 (CMGP) */ 786 + static const struct samsung_pin_bank_data exynos9810_pin_banks3[] __initconst = { 787 + EXYNOS850_PIN_BANK_EINTW(1, 0x000, "gpm0", 0x00), 788 + EXYNOS850_PIN_BANK_EINTW(1, 0x020, "gpm1", 0x04), 789 + EXYNOS850_PIN_BANK_EINTW(1, 0x040, "gpm2", 0x08), 790 + EXYNOS850_PIN_BANK_EINTW(1, 0x060, "gpm3", 0x0C), 791 + EXYNOS850_PIN_BANK_EINTW(1, 0x080, "gpm4", 0x10), 792 + EXYNOS850_PIN_BANK_EINTW(1, 0x0A0, "gpm5", 0x14), 793 + EXYNOS850_PIN_BANK_EINTW(1, 0x0C0, "gpm6", 0x18), 794 + EXYNOS850_PIN_BANK_EINTW(1, 0x0E0, "gpm7", 0x1C), 795 + EXYNOS850_PIN_BANK_EINTW(1, 0x100, "gpm10", 0x20), 796 + EXYNOS850_PIN_BANK_EINTW(1, 0x120, "gpm11", 0x24), 797 + EXYNOS850_PIN_BANK_EINTW(1, 0x140, "gpm12", 0x28), 798 + EXYNOS850_PIN_BANK_EINTW(1, 0x160, "gpm13", 0x2C), 799 + EXYNOS850_PIN_BANK_EINTW(1, 0x180, "gpm14", 0x30), 800 + EXYNOS850_PIN_BANK_EINTW(1, 0x1A0, "gpm15", 0x34), 801 + EXYNOS850_PIN_BANK_EINTW(1, 0x1C0, "gpm16", 0x38), 802 + EXYNOS850_PIN_BANK_EINTW(1, 0x1E0, "gpm17", 0x3C), 803 + EXYNOS850_PIN_BANK_EINTW(1, 0x200, "gpm40", 0x40), 804 + EXYNOS850_PIN_BANK_EINTW(1, 0x220, "gpm41", 0x44), 805 + EXYNOS850_PIN_BANK_EINTW(1, 0x240, "gpm42", 0x48), 806 + EXYNOS850_PIN_BANK_EINTW(1, 0x260, "gpm43", 0x4C), 807 + }; 808 + 809 + /* pin banks of exynos9810 pin-controller 4 (FSYS0) */ 810 + static const struct samsung_pin_bank_data exynos9810_pin_banks4[] __initconst = { 811 + EXYNOS850_PIN_BANK_EINTG(2, 0x000, "gpf0", 0x00), 812 + }; 813 + 814 + /* pin banks of exynos9810 pin-controller 5 (FSYS1) */ 815 + static const struct samsung_pin_bank_data exynos9810_pin_banks5[] __initconst = { 816 + EXYNOS850_PIN_BANK_EINTG(7, 0x000, "gpf1", 0x00), 817 + EXYNOS850_PIN_BANK_EINTG(6, 0x020, "gpf2", 0x04), 818 + }; 819 + 820 + /* pin banks of exynos9810 pin-controller 6 (PERIC0) */ 821 + static const struct samsung_pin_bank_data exynos9810_pin_banks6[] __initconst = { 822 + EXYNOS850_PIN_BANK_EINTG(8, 0x000, "gpp0", 0x00), 823 + EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpp1", 0x04), 824 + EXYNOS850_PIN_BANK_EINTG(8, 0x040, "gpp2", 0x08), 825 + EXYNOS850_PIN_BANK_EINTG(4, 0x060, "gpp3", 0x0C), 826 + EXYNOS850_PIN_BANK_EINTG(8, 0x080, "gpg0", 0x10), 827 + EXYNOS850_PIN_BANK_EINTG(8, 0x0A0, "gpg1", 0x14), 828 + EXYNOS850_PIN_BANK_EINTG(8, 0x0C0, "gpg2", 0x18), 829 + }; 830 + 831 + /* pin banks of exynos9810 pin-controller 7 (PERIC1) */ 832 + static const struct samsung_pin_bank_data exynos9810_pin_banks7[] __initconst = { 833 + EXYNOS850_PIN_BANK_EINTG(8, 0x000, "gpp4", 0x00), 834 + EXYNOS850_PIN_BANK_EINTG(8, 0x020, "gpp5", 0x04), 835 + EXYNOS850_PIN_BANK_EINTG(4, 0x040, "gpp6", 0x08), 836 + EXYNOS850_PIN_BANK_EINTG(8, 0x060, "gpc0", 0x0C), 837 + EXYNOS850_PIN_BANK_EINTG(8, 0x080, "gpc1", 0x10), 838 + EXYNOS850_PIN_BANK_EINTG(4, 0x0A0, "gpd0", 0x14), 839 + EXYNOS850_PIN_BANK_EINTG(7, 0x0C0, "gpg3", 0x18), 840 + }; 841 + 842 + /* pin banks of exynos9810 pin-controller 8 (VTS) */ 843 + static const struct samsung_pin_bank_data exynos9810_pin_banks8[] __initconst = { 844 + EXYNOS850_PIN_BANK_EINTG(3, 0x000, "gpt0", 0x00), 845 + }; 846 + 847 + static const struct samsung_pin_ctrl exynos9810_pin_ctrl[] __initconst = { 848 + { 849 + /* pin-controller instance 0 ALIVE data */ 850 + .pin_banks = exynos9810_pin_banks0, 851 + .nr_banks = ARRAY_SIZE(exynos9810_pin_banks0), 852 + .eint_wkup_init = exynos_eint_wkup_init, 853 + .eint_gpio_init = exynos_eint_gpio_init, 854 + .suspend = exynos_pinctrl_suspend, 855 + .resume = exynos_pinctrl_resume, 856 + }, { 857 + /* pin-controller instance 1 AUD data */ 858 + .pin_banks = exynos9810_pin_banks1, 859 + .nr_banks = ARRAY_SIZE(exynos9810_pin_banks1), 860 + }, { 861 + /* pin-controller instance 2 CHUB data */ 862 + .pin_banks = exynos9810_pin_banks2, 863 + .nr_banks = ARRAY_SIZE(exynos9810_pin_banks2), 864 + .eint_gpio_init = exynos_eint_gpio_init, 865 + .suspend = exynos_pinctrl_suspend, 866 + .resume = exynos_pinctrl_resume, 867 + }, { 868 + /* pin-controller instance 3 CMGP data */ 869 + .pin_banks = exynos9810_pin_banks3, 870 + .nr_banks = ARRAY_SIZE(exynos9810_pin_banks3), 871 + .eint_wkup_init = exynos_eint_wkup_init, 872 + .eint_gpio_init = exynos_eint_gpio_init, 873 + .suspend = exynos_pinctrl_suspend, 874 + .resume = exynos_pinctrl_resume, 875 + }, { 876 + /* pin-controller instance 4 FSYS0 data */ 877 + .pin_banks = exynos9810_pin_banks4, 878 + .nr_banks = ARRAY_SIZE(exynos9810_pin_banks4), 879 + .eint_gpio_init = exynos_eint_gpio_init, 880 + .suspend = exynos_pinctrl_suspend, 881 + .resume = exynos_pinctrl_resume, 882 + }, { 883 + /* pin-controller instance 5 FSYS1 data */ 884 + .pin_banks = exynos9810_pin_banks5, 885 + .nr_banks = ARRAY_SIZE(exynos9810_pin_banks5), 886 + .eint_gpio_init = exynos_eint_gpio_init, 887 + .suspend = exynos_pinctrl_suspend, 888 + .resume = exynos_pinctrl_resume, 889 + }, { 890 + /* pin-controller instance 6 PERIC0 data */ 891 + .pin_banks = exynos9810_pin_banks6, 892 + .nr_banks = ARRAY_SIZE(exynos9810_pin_banks6), 893 + .eint_gpio_init = exynos_eint_gpio_init, 894 + .suspend = exynos_pinctrl_suspend, 895 + .resume = exynos_pinctrl_resume, 896 + }, { 897 + /* pin-controller instance 7 PERIC1 data */ 898 + .pin_banks = exynos9810_pin_banks7, 899 + .nr_banks = ARRAY_SIZE(exynos9810_pin_banks7), 900 + .eint_gpio_init = exynos_eint_gpio_init, 901 + .suspend = exynos_pinctrl_suspend, 902 + .resume = exynos_pinctrl_resume, 903 + }, { 904 + /* pin-controller instance 8 VTS data */ 905 + .pin_banks = exynos9810_pin_banks8, 906 + .nr_banks = ARRAY_SIZE(exynos9810_pin_banks8), 907 + }, 908 + }; 909 + 910 + const struct samsung_pinctrl_of_match_data exynos9810_of_data __initconst = { 911 + .ctrl = exynos9810_pin_ctrl, 912 + .num_ctrl = ARRAY_SIZE(exynos9810_pin_ctrl), 913 + }; 914 + 630 915 /* pin banks of exynosautov9 pin-controller 0 (ALIVE) */ 631 916 static const struct samsung_pin_bank_data exynosautov9_pin_banks0[] __initconst = { 632 917 EXYNOS850_PIN_BANK_EINTW(8, 0x000, "gpa0", 0x00), ··· 1167 864 const struct samsung_pinctrl_of_match_data exynosautov920_of_data __initconst = { 1168 865 .ctrl = exynosautov920_pin_ctrl, 1169 866 .num_ctrl = ARRAY_SIZE(exynosautov920_pin_ctrl), 867 + }; 868 + 869 + /* pin banks of exynos8895 pin-controller 0 (ALIVE) */ 870 + static const struct samsung_pin_bank_data exynos8895_pin_banks0[] __initconst = { 871 + EXYNOS_PIN_BANK_EINTW(8, 0x020, "gpa0", 0x00), 872 + EXYNOS_PIN_BANK_EINTW(8, 0x040, "gpa1", 0x04), 873 + EXYNOS_PIN_BANK_EINTW(8, 0x060, "gpa2", 0x08), 874 + EXYNOS_PIN_BANK_EINTW(8, 0x080, "gpa3", 0x0c), 875 + EXYNOS_PIN_BANK_EINTW(7, 0x0a0, "gpa4", 0x24), 876 + }; 877 + 878 + /* pin banks of exynos8895 pin-controller 1 (ABOX) */ 879 + static const struct samsung_pin_bank_data exynos8895_pin_banks1[] __initconst = { 880 + EXYNOS_PIN_BANK_EINTG(8, 0x000, "gph0", 0x00), 881 + EXYNOS_PIN_BANK_EINTG(7, 0x020, "gph1", 0x04), 882 + EXYNOS_PIN_BANK_EINTG(4, 0x040, "gph3", 0x08), 883 + }; 884 + 885 + /* pin banks of exynos8895 pin-controller 2 (VTS) */ 886 + static const struct samsung_pin_bank_data exynos8895_pin_banks2[] __initconst = { 887 + EXYNOS_PIN_BANK_EINTG(3, 0x000, "gph2", 0x00), 888 + }; 889 + 890 + /* pin banks of exynos8895 pin-controller 3 (FSYS0) */ 891 + static const struct samsung_pin_bank_data exynos8895_pin_banks3[] __initconst = { 892 + EXYNOS8895_PIN_BANK_EINTG(3, 0x000, "gpi0", 0x00), 893 + EXYNOS8895_PIN_BANK_EINTG(8, 0x020, "gpi1", 0x04), 894 + }; 895 + 896 + /* pin banks of exynos8895 pin-controller 4 (FSYS1) */ 897 + static const struct samsung_pin_bank_data exynos8895_pin_banks4[] __initconst = { 898 + EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpj1", 0x00), 899 + EXYNOS_PIN_BANK_EINTG(7, 0x020, "gpj0", 0x04), 900 + }; 901 + 902 + /* pin banks of exynos8895 pin-controller 5 (BUSC) */ 903 + static const struct samsung_pin_bank_data exynos8895_pin_banks5[] __initconst = { 904 + EXYNOS_PIN_BANK_EINTG(2, 0x000, "gpb2", 0x00), 905 + }; 906 + 907 + /* pin banks of exynos8895 pin-controller 6 (PERIC0) */ 908 + static const struct samsung_pin_bank_data exynos8895_pin_banks6[] __initconst = { 909 + EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpd0", 0x00), 910 + EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpd1", 0x04), 911 + EXYNOS_PIN_BANK_EINTG(4, 0x040, "gpd2", 0x08), 912 + EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpd3", 0x0C), 913 + EXYNOS_PIN_BANK_EINTG(4, 0x080, "gpb1", 0x10), 914 + EXYNOS_PIN_BANK_EINTG(8, 0x0a0, "gpe7", 0x14), 915 + EXYNOS_PIN_BANK_EINTG(8, 0x0c0, "gpf1", 0x18), 916 + }; 917 + 918 + /* pin banks of exynos8895 pin-controller 7 (PERIC1) */ 919 + static const struct samsung_pin_bank_data exynos8895_pin_banks7[] __initconst = { 920 + EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpb0", 0x00), 921 + EXYNOS_PIN_BANK_EINTG(5, 0x020, "gpc0", 0x04), 922 + EXYNOS_PIN_BANK_EINTG(5, 0x040, "gpc1", 0x08), 923 + EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpc2", 0x0C), 924 + EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpc3", 0x10), 925 + EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpk0", 0x14), 926 + EXYNOS_PIN_BANK_EINTG(8, 0x0c0, "gpe5", 0x18), 927 + EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpe6", 0x1C), 928 + EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpe2", 0x20), 929 + EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpe3", 0x24), 930 + EXYNOS_PIN_BANK_EINTG(8, 0x140, "gpe4", 0x28), 931 + EXYNOS_PIN_BANK_EINTG(4, 0x160, "gpf0", 0x2C), 932 + EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpe1", 0x30), 933 + EXYNOS_PIN_BANK_EINTG(2, 0x1a0, "gpg0", 0x34), 934 + }; 935 + 936 + static const struct samsung_pin_ctrl exynos8895_pin_ctrl[] __initconst = { 937 + { 938 + /* pin-controller instance 0 ALIVE data */ 939 + .pin_banks = exynos8895_pin_banks0, 940 + .nr_banks = ARRAY_SIZE(exynos8895_pin_banks0), 941 + .eint_gpio_init = exynos_eint_gpio_init, 942 + .eint_wkup_init = exynos_eint_wkup_init, 943 + .suspend = exynos_pinctrl_suspend, 944 + .resume = exynos_pinctrl_resume, 945 + }, { 946 + /* pin-controller instance 1 ABOX data */ 947 + .pin_banks = exynos8895_pin_banks1, 948 + .nr_banks = ARRAY_SIZE(exynos8895_pin_banks1), 949 + }, { 950 + /* pin-controller instance 2 VTS data */ 951 + .pin_banks = exynos8895_pin_banks2, 952 + .nr_banks = ARRAY_SIZE(exynos8895_pin_banks2), 953 + .eint_gpio_init = exynos_eint_gpio_init, 954 + }, { 955 + /* pin-controller instance 3 FSYS0 data */ 956 + .pin_banks = exynos8895_pin_banks3, 957 + .nr_banks = ARRAY_SIZE(exynos8895_pin_banks3), 958 + .eint_gpio_init = exynos_eint_gpio_init, 959 + .suspend = exynos_pinctrl_suspend, 960 + .resume = exynos_pinctrl_resume, 961 + }, { 962 + /* pin-controller instance 4 FSYS1 data */ 963 + .pin_banks = exynos8895_pin_banks4, 964 + .nr_banks = ARRAY_SIZE(exynos8895_pin_banks4), 965 + .eint_gpio_init = exynos_eint_gpio_init, 966 + .suspend = exynos_pinctrl_suspend, 967 + .resume = exynos_pinctrl_resume, 968 + }, { 969 + /* pin-controller instance 5 BUSC data */ 970 + .pin_banks = exynos8895_pin_banks5, 971 + .nr_banks = ARRAY_SIZE(exynos8895_pin_banks5), 972 + .eint_gpio_init = exynos_eint_gpio_init, 973 + .suspend = exynos_pinctrl_suspend, 974 + .resume = exynos_pinctrl_resume, 975 + }, { 976 + /* pin-controller instance 6 PERIC0 data */ 977 + .pin_banks = exynos8895_pin_banks6, 978 + .nr_banks = ARRAY_SIZE(exynos8895_pin_banks6), 979 + .eint_gpio_init = exynos_eint_gpio_init, 980 + .suspend = exynos_pinctrl_suspend, 981 + .resume = exynos_pinctrl_resume, 982 + }, { 983 + /* pin-controller instance 7 PERIC1 data */ 984 + .pin_banks = exynos8895_pin_banks7, 985 + .nr_banks = ARRAY_SIZE(exynos8895_pin_banks7), 986 + .eint_gpio_init = exynos_eint_gpio_init, 987 + .suspend = exynos_pinctrl_suspend, 988 + .resume = exynos_pinctrl_resume, 989 + }, 990 + }; 991 + 992 + const struct samsung_pinctrl_of_match_data exynos8895_of_data __initconst = { 993 + .ctrl = exynos8895_pin_ctrl, 994 + .num_ctrl = ARRAY_SIZE(exynos8895_pin_ctrl), 1170 995 }; 1171 996 1172 997 /*
+10
drivers/pinctrl/samsung/pinctrl-exynos.h
··· 141 141 .name = id \ 142 142 } 143 143 144 + #define EXYNOS8895_PIN_BANK_EINTG(pins, reg, id, offs) \ 145 + { \ 146 + .type = &exynos8895_bank_type_off, \ 147 + .pctl_offset = reg, \ 148 + .nr_pins = pins, \ 149 + .eint_type = EINT_TYPE_GPIO, \ 150 + .eint_offset = offs, \ 151 + .name = id \ 152 + } 153 + 144 154 #define EXYNOSV920_PIN_BANK_EINTG(pins, reg, id, con_offs, mask_offs, pend_offs) \ 145 155 { \ 146 156 .type = &exynos850_bank_type_off, \
+6
drivers/pinctrl/samsung/pinctrl-samsung.c
··· 1477 1477 .data = &exynos7885_of_data }, 1478 1478 { .compatible = "samsung,exynos850-pinctrl", 1479 1479 .data = &exynos850_of_data }, 1480 + { .compatible = "samsung,exynos8895-pinctrl", 1481 + .data = &exynos8895_of_data }, 1482 + { .compatible = "samsung,exynos9810-pinctrl", 1483 + .data = &exynos9810_of_data }, 1484 + { .compatible = "samsung,exynos990-pinctrl", 1485 + .data = &exynos990_of_data }, 1480 1486 { .compatible = "samsung,exynosautov9-pinctrl", 1481 1487 .data = &exynosautov9_of_data }, 1482 1488 { .compatible = "samsung,exynosautov920-pinctrl",
+3
drivers/pinctrl/samsung/pinctrl-samsung.h
··· 384 384 extern const struct samsung_pinctrl_of_match_data exynos7_of_data; 385 385 extern const struct samsung_pinctrl_of_match_data exynos7885_of_data; 386 386 extern const struct samsung_pinctrl_of_match_data exynos850_of_data; 387 + extern const struct samsung_pinctrl_of_match_data exynos8895_of_data; 388 + extern const struct samsung_pinctrl_of_match_data exynos9810_of_data; 389 + extern const struct samsung_pinctrl_of_match_data exynos990_of_data; 387 390 extern const struct samsung_pinctrl_of_match_data exynosautov9_of_data; 388 391 extern const struct samsung_pinctrl_of_match_data exynosautov920_of_data; 389 392 extern const struct samsung_pinctrl_of_match_data fsd_of_data;