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

pinctrl: tegra: remove redundant data table fields

Any SoC which supports the einput, odrain, lock, ioreset, or rcv_sel
options has the relevant HW register fields in the same register as the
mux function selection. Similarly, the drvtype option is always in the
drive register, if it is supported at all. Hence, we don't need to have
struct *_reg fields in the pin group table to define which register and
bank to use for those options. Delete this to save space in the driver's
data tables.

However, many of those options are not supported on all SoCs, or not
supported on some pingroups. We need a way to detect when they are
supported. Previously, this was indicated by setting the struct *_reg
field to -1. With the struct *_reg fields removed, we use the struct
*_bit fields for this purpose instead. The struct *_bit fields need to
be expanded from 5 to 6 bits in order to store a value outside the valid
HW bit range of 0..31.

Even without removing the struct *_reg fields, we still need to add code
to validate the struct *_bit fields, since some struct *_bit fields were
already being set to -1, without an option-specific struct *_reg field to
"guard" them. In other words, before this change, the pinmux driver might
allow some unsupported options to be written to HW.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

authored by

Stephen Warren and committed by
Linus Walleij
e53b7974 a16b81dc

+132 -197
+13 -13
drivers/pinctrl/pinctrl-tegra.c
··· 336 336 *width = 1; 337 337 break; 338 338 case TEGRA_PINCONF_PARAM_ENABLE_INPUT: 339 - *bank = g->einput_bank; 340 - *reg = g->einput_reg; 339 + *bank = g->mux_bank; 340 + *reg = g->mux_reg; 341 341 *bit = g->einput_bit; 342 342 *width = 1; 343 343 break; 344 344 case TEGRA_PINCONF_PARAM_OPEN_DRAIN: 345 - *bank = g->odrain_bank; 346 - *reg = g->odrain_reg; 345 + *bank = g->mux_bank; 346 + *reg = g->mux_reg; 347 347 *bit = g->odrain_bit; 348 348 *width = 1; 349 349 break; 350 350 case TEGRA_PINCONF_PARAM_LOCK: 351 - *bank = g->lock_bank; 352 - *reg = g->lock_reg; 351 + *bank = g->mux_bank; 352 + *reg = g->mux_reg; 353 353 *bit = g->lock_bit; 354 354 *width = 1; 355 355 break; 356 356 case TEGRA_PINCONF_PARAM_IORESET: 357 - *bank = g->ioreset_bank; 358 - *reg = g->ioreset_reg; 357 + *bank = g->mux_bank; 358 + *reg = g->mux_reg; 359 359 *bit = g->ioreset_bit; 360 360 *width = 1; 361 361 break; 362 362 case TEGRA_PINCONF_PARAM_RCV_SEL: 363 - *bank = g->rcv_sel_bank; 364 - *reg = g->rcv_sel_reg; 363 + *bank = g->mux_bank; 364 + *reg = g->mux_reg; 365 365 *bit = g->rcv_sel_bit; 366 366 *width = 1; 367 367 break; ··· 408 408 *width = g->slwr_width; 409 409 break; 410 410 case TEGRA_PINCONF_PARAM_DRIVE_TYPE: 411 - *bank = g->drvtype_bank; 412 - *reg = g->drvtype_reg; 411 + *bank = g->drv_bank; 412 + *reg = g->drv_reg; 413 413 *bit = g->drvtype_bit; 414 414 *width = 2; 415 415 break; ··· 418 418 return -ENOTSUPP; 419 419 } 420 420 421 - if (*reg < 0) { 421 + if (*reg < 0 || *bit > 31) { 422 422 if (report_err) 423 423 dev_err(pmx->dev, 424 424 "Config param %04x not supported on group %s\n",
+53 -71
drivers/pinctrl/pinctrl-tegra.h
··· 78 78 79 79 /** 80 80 * struct tegra_pingroup - Tegra pin group 81 - * @mux_reg: Mux register offset. -1 if unsupported. 82 - * @mux_bank: Mux register bank. 0 if unsupported. 83 - * @mux_bit: Mux register bit. 0 if unsupported. 84 - * @pupd_reg: Pull-up/down register offset. -1 if unsupported. 85 - * @pupd_bank: Pull-up/down register bank. 0 if unsupported. 86 - * @pupd_bit: Pull-up/down register bit. 0 if unsupported. 87 - * @tri_reg: Tri-state register offset. -1 if unsupported. 88 - * @tri_bank: Tri-state register bank. 0 if unsupported. 89 - * @tri_bit: Tri-state register bit. 0 if unsupported. 90 - * @einput_reg: Enable-input register offset. -1 if unsupported. 91 - * @einput_bank: Enable-input register bank. 0 if unsupported. 92 - * @einput_bit: Enable-input register bit. 0 if unsupported. 93 - * @odrain_reg: Open-drain register offset. -1 if unsupported. 94 - * @odrain_bank: Open-drain register bank. 0 if unsupported. 95 - * @odrain_bit: Open-drain register bit. 0 if unsupported. 96 - * @lock_reg: Lock register offset. -1 if unsupported. 97 - * @lock_bank: Lock register bank. 0 if unsupported. 98 - * @lock_bit: Lock register bit. 0 if unsupported. 99 - * @ioreset_reg: IO reset register offset. -1 if unsupported. 100 - * @ioreset_bank: IO reset register bank. 0 if unsupported. 101 - * @ioreset_bit: IO reset register bit. 0 if unsupported. 102 - * @rcv_sel_reg: Receiver select offset. -1 if unsupported. 103 - * @rcv_sel_bank: Receiver select bank. 0 if unsupported. 104 - * @rcv_sel_bit: Receiver select bit. 0 if unsupported. 105 - * @drv_reg: Drive fields register offset. -1 if unsupported. 106 - * This register contains the hsm, schmitt, lpmd, drvdn, 107 - * drvup, slwr, and slwf parameters. 108 - * @drv_bank: Drive fields register bank. 0 if unsupported. 109 - * @hsm_bit: High Speed Mode register bit. 0 if unsupported. 110 - * @schmitt_bit: Scmitt register bit. 0 if unsupported. 111 - * @lpmd_bit: Low Power Mode register bit. 0 if unsupported. 112 - * @drvdn_bit: Drive Down register bit. 0 if unsupported. 113 - * @drvdn_width: Drive Down field width. 0 if unsupported. 114 - * @drvup_bit: Drive Up register bit. 0 if unsupported. 115 - * @drvup_width: Drive Up field width. 0 if unsupported. 116 - * @slwr_bit: Slew Rising register bit. 0 if unsupported. 117 - * @slwr_width: Slew Rising field width. 0 if unsupported. 118 - * @slwf_bit: Slew Falling register bit. 0 if unsupported. 119 - * @slwf_width: Slew Falling field width. 0 if unsupported. 120 - * @drvtype_reg: Drive type fields register offset. -1 if unsupported. 121 - * @drvtype_bank: Drive type fields register bank. 0 if unsupported. 122 - * @drvtype_bit: Drive type register bit. 0 if unsupported. 81 + * @mux_reg: Mux register offset. 82 + * This register contains the mux, einput, odrain, lock, 83 + * ioreset, rcv_sel parameters. 84 + * @mux_bank: Mux register bank. 85 + * @mux_bit: Mux register bit. 86 + * @pupd_reg: Pull-up/down register offset. 87 + * @pupd_bank: Pull-up/down register bank. 88 + * @pupd_bit: Pull-up/down register bit. 89 + * @tri_reg: Tri-state register offset. 90 + * @tri_bank: Tri-state register bank. 91 + * @tri_bit: Tri-state register bit. 92 + * @einput_bit: Enable-input register bit. 93 + * @odrain_bit: Open-drain register bit. 94 + * @lock_bit: Lock register bit. 95 + * @ioreset_bit: IO reset register bit. 96 + * @rcv_sel_bit: Receiver select bit. 97 + * @drv_reg: Drive fields register offset. 98 + * This register contains hsm, schmitt, lpmd, drvdn, 99 + * drvup, slwr, slwf, and drvtype parameters. 100 + * @drv_bank: Drive fields register bank. 101 + * @hsm_bit: High Speed Mode register bit. 102 + * @schmitt_bit: Scmitt register bit. 103 + * @lpmd_bit: Low Power Mode register bit. 104 + * @drvdn_bit: Drive Down register bit. 105 + * @drvdn_width: Drive Down field width. 106 + * @drvup_bit: Drive Up register bit. 107 + * @drvup_width: Drive Up field width. 108 + * @slwr_bit: Slew Rising register bit. 109 + * @slwr_width: Slew Rising field width. 110 + * @slwf_bit: Slew Falling register bit. 111 + * @slwf_width: Slew Falling field width. 112 + * @drvtype_bit: Drive type register bit. 113 + * 114 + * -1 in a *_reg field means that feature is unsupported for this group. 115 + * *_bank and *_reg values are irrelevant when *_reg is -1. 116 + * When *_reg is valid, *_bit may be -1 to indicate an unsupported feature. 123 117 * 124 118 * A representation of a group of pins (possibly just one pin) in the Tegra 125 119 * pin controller. Each group allows some parameter or parameters to be 126 120 * configured. The most common is mux function selection. Many others exist 127 121 * such as pull-up/down, tri-state, etc. Tegra's pin controller is complex; 128 122 * certain groups may only support configuring certain parameters, hence 129 - * each parameter is optional, represented by a -1 "reg" value. 123 + * each parameter is optional. 130 124 */ 131 125 struct tegra_pingroup { 132 126 const char *name; ··· 131 137 s16 mux_reg; 132 138 s16 pupd_reg; 133 139 s16 tri_reg; 134 - s16 einput_reg; 135 - s16 odrain_reg; 136 - s16 lock_reg; 137 - s16 ioreset_reg; 138 - s16 rcv_sel_reg; 139 140 s16 drv_reg; 140 - s16 drvtype_reg; 141 141 u32 mux_bank:2; 142 142 u32 pupd_bank:2; 143 143 u32 tri_bank:2; 144 - u32 einput_bank:2; 145 - u32 odrain_bank:2; 146 - u32 ioreset_bank:2; 147 - u32 rcv_sel_bank:2; 148 - u32 lock_bank:2; 149 144 u32 drv_bank:2; 150 - u32 drvtype_bank:2; 151 - u32 mux_bit:5; 152 - u32 pupd_bit:5; 153 - u32 tri_bit:5; 154 - u32 einput_bit:5; 155 - u32 odrain_bit:5; 156 - u32 lock_bit:5; 157 - u32 ioreset_bit:5; 158 - u32 rcv_sel_bit:5; 159 - u32 hsm_bit:5; 160 - u32 schmitt_bit:5; 161 - u32 lpmd_bit:5; 162 - u32 drvdn_bit:5; 163 - u32 drvup_bit:5; 164 - u32 slwr_bit:5; 165 - u32 slwf_bit:5; 166 - u32 drvtype_bit:5; 145 + u32 mux_bit:6; 146 + u32 pupd_bit:6; 147 + u32 tri_bit:6; 148 + u32 einput_bit:6; 149 + u32 odrain_bit:6; 150 + u32 lock_bit:6; 151 + u32 ioreset_bit:6; 152 + u32 rcv_sel_bit:6; 153 + u32 hsm_bit:6; 154 + u32 schmitt_bit:6; 155 + u32 lpmd_bit:6; 156 + u32 drvdn_bit:6; 157 + u32 drvup_bit:6; 158 + u32 slwr_bit:6; 159 + u32 slwf_bit:6; 160 + u32 drvtype_bit:6; 167 161 u32 drvdn_width:6; 168 162 u32 drvup_width:6; 169 163 u32 slwr_width:6;
+20 -33
drivers/pinctrl/pinctrl-tegra114.c
··· 1547 1547 #define DRV_PINGROUP_REG_A 0x868 /* bank 0 */ 1548 1548 #define PINGROUP_REG_A 0x3000 /* bank 1 */ 1549 1549 1550 - #define PINGROUP_REG_Y(r) ((r) - PINGROUP_REG_A) 1551 - #define PINGROUP_REG_N(r) -1 1550 + #define PINGROUP_REG(r) ((r) - PINGROUP_REG_A) 1551 + 1552 + #define PINGROUP_BIT_Y(b) (b) 1553 + #define PINGROUP_BIT_N(b) (-1) 1552 1554 1553 1555 #define PINGROUP(pg_name, f0, f1, f2, f3, f_safe, r, od, ior, rcv_sel) \ 1554 1556 { \ ··· 1564 1562 TEGRA_MUX_##f3, \ 1565 1563 }, \ 1566 1564 .func_safe = TEGRA_MUX_##f_safe, \ 1567 - .mux_reg = PINGROUP_REG_Y(r), \ 1565 + .mux_reg = PINGROUP_REG(r), \ 1568 1566 .mux_bank = 1, \ 1569 1567 .mux_bit = 0, \ 1570 - .pupd_reg = PINGROUP_REG_Y(r), \ 1568 + .pupd_reg = PINGROUP_REG(r), \ 1571 1569 .pupd_bank = 1, \ 1572 1570 .pupd_bit = 2, \ 1573 - .tri_reg = PINGROUP_REG_Y(r), \ 1571 + .tri_reg = PINGROUP_REG(r), \ 1574 1572 .tri_bank = 1, \ 1575 1573 .tri_bit = 4, \ 1576 - .einput_reg = PINGROUP_REG_Y(r), \ 1577 - .einput_bank = 1, \ 1578 - .einput_bit = 5, \ 1579 - .odrain_reg = PINGROUP_REG_##od(r), \ 1580 - .odrain_bank = 1, \ 1581 - .odrain_bit = 6, \ 1582 - .lock_reg = PINGROUP_REG_Y(r), \ 1583 - .lock_bank = 1, \ 1584 - .lock_bit = 7, \ 1585 - .ioreset_reg = PINGROUP_REG_##ior(r), \ 1586 - .ioreset_bank = 1, \ 1587 - .ioreset_bit = 8, \ 1588 - .rcv_sel_reg = PINGROUP_REG_##rcv_sel(r), \ 1589 - .rcv_sel_bank = 1, \ 1590 - .rcv_sel_bit = 9, \ 1574 + .einput_bit = PINGROUP_BIT_Y(5), \ 1575 + .odrain_bit = PINGROUP_BIT_##od(6), \ 1576 + .lock_bit = PINGROUP_BIT_Y(7), \ 1577 + .ioreset_bit = PINGROUP_BIT_##ior(8), \ 1578 + .rcv_sel_bit = PINGROUP_BIT_##rcv_sel(9), \ 1591 1579 .drv_reg = -1, \ 1592 - .drvtype_reg = -1, \ 1593 1580 } 1594 1581 1595 - #define DRV_PINGROUP_REG_Y(r) ((r) - DRV_PINGROUP_REG_A) 1596 - #define DRV_PINGROUP_REG_N(r) -1 1597 - 1582 + #define DRV_PINGROUP_REG(r) ((r) - DRV_PINGROUP_REG_A) 1598 1583 1599 1584 #define DRV_PINGROUP(pg_name, r, hsm_b, schmitt_b, lpmd_b, \ 1600 1585 drvdn_b, drvdn_w, drvup_b, drvup_w, \ ··· 1594 1605 .mux_reg = -1, \ 1595 1606 .pupd_reg = -1, \ 1596 1607 .tri_reg = -1, \ 1597 - .einput_reg = -1, \ 1598 - .odrain_reg = -1, \ 1599 - .lock_reg = -1, \ 1600 - .ioreset_reg = -1, \ 1601 - .rcv_sel_reg = -1, \ 1602 - .drv_reg = DRV_PINGROUP_REG_Y(r), \ 1608 + .einput_bit = -1, \ 1609 + .odrain_bit = -1, \ 1610 + .lock_bit = -1, \ 1611 + .ioreset_bit = -1, \ 1612 + .rcv_sel_bit = -1, \ 1613 + .drv_reg = DRV_PINGROUP_REG(r), \ 1603 1614 .drv_bank = 0, \ 1604 1615 .hsm_bit = hsm_b, \ 1605 1616 .schmitt_bit = schmitt_b, \ ··· 1612 1623 .slwr_width = slwr_w, \ 1613 1624 .slwf_bit = slwf_b, \ 1614 1625 .slwf_width = slwf_w, \ 1615 - .drvtype_reg = DRV_PINGROUP_REG_##drvtype(r), \ 1616 - .drvtype_bank = 0, \ 1617 - .drvtype_bit = 6, \ 1626 + .drvtype_bit = PINGROUP_BIT_##drvtype(6), \ 1618 1627 } 1619 1628 1620 1629 static const struct tegra_pingroup tegra114_groups[] = {
+20 -33
drivers/pinctrl/pinctrl-tegra124.c
··· 1677 1677 #define DRV_PINGROUP_REG_A 0x868 /* bank 0 */ 1678 1678 #define PINGROUP_REG_A 0x3000 /* bank 1 */ 1679 1679 1680 - #define PINGROUP_REG_Y(r) ((r) - PINGROUP_REG_A) 1681 - #define PINGROUP_REG_N(r) -1 1680 + #define PINGROUP_REG(r) ((r) - PINGROUP_REG_A) 1681 + 1682 + #define PINGROUP_BIT_Y(b) (b) 1683 + #define PINGROUP_BIT_N(b) (-1) 1682 1684 1683 1685 #define PINGROUP(pg_name, f0, f1, f2, f3, f_safe, r, od, ior, rcv_sel) \ 1684 1686 { \ ··· 1694 1692 TEGRA_MUX_##f3, \ 1695 1693 }, \ 1696 1694 .func_safe = TEGRA_MUX_##f_safe, \ 1697 - .mux_reg = PINGROUP_REG_Y(r), \ 1695 + .mux_reg = PINGROUP_REG(r), \ 1698 1696 .mux_bank = 1, \ 1699 1697 .mux_bit = 0, \ 1700 - .pupd_reg = PINGROUP_REG_Y(r), \ 1698 + .pupd_reg = PINGROUP_REG(r), \ 1701 1699 .pupd_bank = 1, \ 1702 1700 .pupd_bit = 2, \ 1703 - .tri_reg = PINGROUP_REG_Y(r), \ 1701 + .tri_reg = PINGROUP_REG(r), \ 1704 1702 .tri_bank = 1, \ 1705 1703 .tri_bit = 4, \ 1706 - .einput_reg = PINGROUP_REG_Y(r), \ 1707 - .einput_bank = 1, \ 1708 - .einput_bit = 5, \ 1709 - .odrain_reg = PINGROUP_REG_##od(r), \ 1710 - .odrain_bank = 1, \ 1711 - .odrain_bit = 6, \ 1712 - .lock_reg = PINGROUP_REG_Y(r), \ 1713 - .lock_bank = 1, \ 1714 - .lock_bit = 7, \ 1715 - .ioreset_reg = PINGROUP_REG_##ior(r), \ 1716 - .ioreset_bank = 1, \ 1717 - .ioreset_bit = 8, \ 1718 - .rcv_sel_reg = PINGROUP_REG_##rcv_sel(r), \ 1719 - .rcv_sel_bank = 1, \ 1720 - .rcv_sel_bit = 9, \ 1704 + .einput_bit = PINGROUP_BIT_Y(5), \ 1705 + .odrain_bit = PINGROUP_BIT_##od(6), \ 1706 + .lock_bit = PINGROUP_BIT_Y(7), \ 1707 + .ioreset_bit = PINGROUP_BIT_##ior(8), \ 1708 + .rcv_sel_bit = PINGROUP_BIT_##rcv_sel(9), \ 1721 1709 .drv_reg = -1, \ 1722 - .drvtype_reg = -1, \ 1723 1710 } 1724 1711 1725 - #define DRV_PINGROUP_REG_Y(r) ((r) - DRV_PINGROUP_REG_A) 1726 - #define DRV_PINGROUP_REG_N(r) -1 1727 - 1712 + #define DRV_PINGROUP_REG(r) ((r) - DRV_PINGROUP_REG_A) 1728 1713 1729 1714 #define DRV_PINGROUP(pg_name, r, hsm_b, schmitt_b, lpmd_b, \ 1730 1715 drvdn_b, drvdn_w, drvup_b, drvup_w, \ ··· 1724 1735 .mux_reg = -1, \ 1725 1736 .pupd_reg = -1, \ 1726 1737 .tri_reg = -1, \ 1727 - .einput_reg = -1, \ 1728 - .odrain_reg = -1, \ 1729 - .lock_reg = -1, \ 1730 - .ioreset_reg = -1, \ 1731 - .rcv_sel_reg = -1, \ 1732 - .drv_reg = DRV_PINGROUP_REG_Y(r), \ 1738 + .einput_bit = -1, \ 1739 + .odrain_bit = -1, \ 1740 + .lock_bit = -1, \ 1741 + .ioreset_bit = -1, \ 1742 + .rcv_sel_bit = -1, \ 1743 + .drv_reg = DRV_PINGROUP_REG(r), \ 1733 1744 .drv_bank = 0, \ 1734 1745 .hsm_bit = hsm_b, \ 1735 1746 .schmitt_bit = schmitt_b, \ ··· 1742 1753 .slwr_width = slwr_w, \ 1743 1754 .slwf_bit = slwf_b, \ 1744 1755 .slwf_width = slwf_w, \ 1745 - .drvtype_reg = DRV_PINGROUP_REG_##drvtype(r), \ 1746 - .drvtype_bank = 0, \ 1747 - .drvtype_bit = 6, \ 1756 + .drvtype_bit = PINGROUP_BIT_##drvtype(6), \ 1748 1757 } 1749 1758 1750 1759 static const struct tegra_pingroup tegra124_groups[] = {
+6 -19
drivers/pinctrl/pinctrl-tegra20.c
··· 1995 1995 .tri_reg = ((tri_r) - TRISTATE_REG_A), \ 1996 1996 .tri_bank = 0, \ 1997 1997 .tri_bit = tri_b, \ 1998 - .einput_reg = -1, \ 1999 - .odrain_reg = -1, \ 2000 - .lock_reg = -1, \ 2001 - .ioreset_reg = -1, \ 2002 - .rcv_sel_reg = -1, \ 1998 + .einput_bit = -1, \ 1999 + .odrain_bit = -1, \ 2000 + .lock_bit = -1, \ 2001 + .ioreset_bit = -1, \ 2002 + .rcv_sel_bit = -1, \ 2003 2003 .drv_reg = -1, \ 2004 - .drvtype_reg = -1, \ 2005 2004 } 2006 2005 2007 2006 /* Pin groups with only pull up and pull down control */ ··· 2013 2014 .pupd_reg = ((pupd_r) - PULLUPDOWN_REG_A), \ 2014 2015 .pupd_bank = 2, \ 2015 2016 .pupd_bit = pupd_b, \ 2016 - .tri_reg = -1, \ 2017 - .einput_reg = -1, \ 2018 - .odrain_reg = -1, \ 2019 - .lock_reg = -1, \ 2020 - .ioreset_reg = -1, \ 2021 - .rcv_sel_reg = -1, \ 2022 2017 .drv_reg = -1, \ 2023 - .drvtype_reg = -1, \ 2024 2018 } 2025 2019 2026 2020 /* Pin groups for drive strength registers (configurable version) */ ··· 2027 2035 .mux_reg = -1, \ 2028 2036 .pupd_reg = -1, \ 2029 2037 .tri_reg = -1, \ 2030 - .einput_reg = -1, \ 2031 - .odrain_reg = -1, \ 2032 - .lock_reg = -1, \ 2033 - .ioreset_reg = -1, \ 2034 - .rcv_sel_reg = -1, \ 2035 2038 .drv_reg = ((r) - PINGROUP_REG_A), \ 2036 2039 .drv_bank = 3, \ 2037 2040 .hsm_bit = hsm_b, \ ··· 2040 2053 .slwr_width = slwr_w, \ 2041 2054 .slwf_bit = slwf_b, \ 2042 2055 .slwf_width = slwf_w, \ 2043 - .drvtype_reg = -1, \ 2056 + .drvtype_bit = -1, \ 2044 2057 } 2045 2058 2046 2059 /* Pin groups for drive strength registers (simple version) */
+20 -28
drivers/pinctrl/pinctrl-tegra30.c
··· 2108 2108 #define DRV_PINGROUP_REG_A 0x868 /* bank 0 */ 2109 2109 #define PINGROUP_REG_A 0x3000 /* bank 1 */ 2110 2110 2111 - #define PINGROUP_REG_Y(r) ((r) - PINGROUP_REG_A) 2112 - #define PINGROUP_REG_N(r) -1 2111 + #define PINGROUP_REG(r) ((r) - PINGROUP_REG_A) 2112 + 2113 + #define PINGROUP_BIT_Y(b) (b) 2114 + #define PINGROUP_BIT_N(b) (-1) 2113 2115 2114 2116 #define PINGROUP(pg_name, f0, f1, f2, f3, f_safe, r, od, ior) \ 2115 2117 { \ ··· 2125 2123 TEGRA_MUX_##f3, \ 2126 2124 }, \ 2127 2125 .func_safe = TEGRA_MUX_##f_safe, \ 2128 - .mux_reg = PINGROUP_REG_Y(r), \ 2126 + .mux_reg = PINGROUP_REG(r), \ 2129 2127 .mux_bank = 1, \ 2130 2128 .mux_bit = 0, \ 2131 - .pupd_reg = PINGROUP_REG_Y(r), \ 2129 + .pupd_reg = PINGROUP_REG(r), \ 2132 2130 .pupd_bank = 1, \ 2133 2131 .pupd_bit = 2, \ 2134 - .tri_reg = PINGROUP_REG_Y(r), \ 2132 + .tri_reg = PINGROUP_REG(r), \ 2135 2133 .tri_bank = 1, \ 2136 2134 .tri_bit = 4, \ 2137 - .einput_reg = PINGROUP_REG_Y(r), \ 2138 - .einput_bank = 1, \ 2139 - .einput_bit = 5, \ 2140 - .odrain_reg = PINGROUP_REG_##od(r), \ 2141 - .odrain_bank = 1, \ 2142 - .odrain_bit = 6, \ 2143 - .lock_reg = PINGROUP_REG_Y(r), \ 2144 - .lock_bank = 1, \ 2145 - .lock_bit = 7, \ 2146 - .ioreset_reg = PINGROUP_REG_##ior(r), \ 2147 - .ioreset_bank = 1, \ 2148 - .ioreset_bit = 8, \ 2149 - .rcv_sel_reg = -1, \ 2135 + .einput_bit = PINGROUP_BIT_Y(5), \ 2136 + .odrain_bit = PINGROUP_BIT_##od(6), \ 2137 + .lock_bit = PINGROUP_BIT_Y(7), \ 2138 + .ioreset_bit = PINGROUP_BIT_##ior(8), \ 2139 + .rcv_sel_bit = -1, \ 2150 2140 .drv_reg = -1, \ 2151 - .drvtype_reg = -1, \ 2152 2141 } 2153 2142 2154 - #define DRV_PINGROUP_REG_Y(r) ((r) - DRV_PINGROUP_REG_A) 2155 - #define DRV_PINGROUP_REG_N(r) -1 2143 + #define DRV_PINGROUP_REG(r) ((r) - DRV_PINGROUP_REG_A) 2156 2144 2157 2145 #define DRV_PINGROUP(pg_name, r, hsm_b, schmitt_b, lpmd_b, \ 2158 2146 drvdn_b, drvdn_w, drvup_b, drvup_w, \ ··· 2154 2162 .mux_reg = -1, \ 2155 2163 .pupd_reg = -1, \ 2156 2164 .tri_reg = -1, \ 2157 - .einput_reg = -1, \ 2158 - .odrain_reg = -1, \ 2159 - .lock_reg = -1, \ 2160 - .ioreset_reg = -1, \ 2161 - .rcv_sel_reg = -1, \ 2162 - .drv_reg = DRV_PINGROUP_REG_Y(r), \ 2165 + .einput_bit = -1, \ 2166 + .odrain_bit = -1, \ 2167 + .lock_bit = -1, \ 2168 + .ioreset_bit = -1, \ 2169 + .rcv_sel_bit = -1, \ 2170 + .drv_reg = DRV_PINGROUP_REG(r), \ 2163 2171 .drv_bank = 0, \ 2164 2172 .hsm_bit = hsm_b, \ 2165 2173 .schmitt_bit = schmitt_b, \ ··· 2172 2180 .slwr_width = slwr_w, \ 2173 2181 .slwf_bit = slwf_b, \ 2174 2182 .slwf_width = slwf_w, \ 2175 - .drvtype_reg = -1, \ 2183 + .drvtype_bit = -1, \ 2176 2184 } 2177 2185 2178 2186 static const struct tegra_pingroup tegra30_groups[] = {