aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Szyprowski <m.szyprowski@samsung.com>2017-03-23 04:03:23 -0400
committerKrzysztof Kozlowski <krzk@kernel.org>2017-03-23 15:07:02 -0400
commite1d7eb0c8fc9c33ef60ac31172fb0fbb78c24271 (patch)
tree9f375594cb1cbeda95ba86ba393b550713cf0217
parent8fe9bf074268323353c4e44d6fdfff10204e14ba (diff)
pinctrl: samsung: Add support for pad retention control for Exynos5433 SoCs
This patch adds support for retention control for Exynos5433 SoCs. Three groups of pins has been defined for retention control: common shared group for ALIVE, CPIF, eSE, FINGER, IMEM, NFC, PERIC, TOUCH pin banks and separate control for FSYS and AUD pin banks, for which PMU retention registers match whole banks. Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
-rw-r--r--drivers/pinctrl/samsung/pinctrl-exynos.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.c b/drivers/pinctrl/samsung/pinctrl-exynos.c
index fa8bdd9ae198..c0dfd31c0fa2 100644
--- a/drivers/pinctrl/samsung/pinctrl-exynos.c
+++ b/drivers/pinctrl/samsung/pinctrl-exynos.c
@@ -1551,6 +1551,54 @@ static const struct samsung_pin_bank_data exynos5433_pin_banks9[] __initconst =
1551 EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00), 1551 EXYNOS_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00),
1552}; 1552};
1553 1553
1554/* PMU pin retention groups registers for Exynos5433 (without audio & fsys) */
1555static const u32 exynos5433_retention_regs[] = {
1556 EXYNOS5433_PAD_RETENTION_TOP_OPTION,
1557 EXYNOS5433_PAD_RETENTION_UART_OPTION,
1558 EXYNOS5433_PAD_RETENTION_EBIA_OPTION,
1559 EXYNOS5433_PAD_RETENTION_EBIB_OPTION,
1560 EXYNOS5433_PAD_RETENTION_SPI_OPTION,
1561 EXYNOS5433_PAD_RETENTION_MIF_OPTION,
1562 EXYNOS5433_PAD_RETENTION_USBXTI_OPTION,
1563 EXYNOS5433_PAD_RETENTION_BOOTLDO_OPTION,
1564 EXYNOS5433_PAD_RETENTION_UFS_OPTION,
1565 EXYNOS5433_PAD_RETENTION_FSYSGENIO_OPTION,
1566};
1567
1568static const struct samsung_retention_data exynos5433_retention_data __initconst = {
1569 .regs = exynos5433_retention_regs,
1570 .nr_regs = ARRAY_SIZE(exynos5433_retention_regs),
1571 .value = EXYNOS_WAKEUP_FROM_LOWPWR,
1572 .refcnt = &exynos_shared_retention_refcnt,
1573 .init = exynos_retention_init,
1574};
1575
1576/* PMU retention control for audio pins can be tied to audio pin bank */
1577static const u32 exynos5433_audio_retention_regs[] = {
1578 EXYNOS5433_PAD_RETENTION_AUD_OPTION,
1579};
1580
1581static const struct samsung_retention_data exynos5433_audio_retention_data __initconst = {
1582 .regs = exynos5433_audio_retention_regs,
1583 .nr_regs = ARRAY_SIZE(exynos5433_audio_retention_regs),
1584 .value = EXYNOS_WAKEUP_FROM_LOWPWR,
1585 .init = exynos_retention_init,
1586};
1587
1588/* PMU retention control for mmc pins can be tied to fsys pin bank */
1589static const u32 exynos5433_fsys_retention_regs[] = {
1590 EXYNOS5433_PAD_RETENTION_MMC0_OPTION,
1591 EXYNOS5433_PAD_RETENTION_MMC1_OPTION,
1592 EXYNOS5433_PAD_RETENTION_MMC2_OPTION,
1593};
1594
1595static const struct samsung_retention_data exynos5433_fsys_retention_data __initconst = {
1596 .regs = exynos5433_fsys_retention_regs,
1597 .nr_regs = ARRAY_SIZE(exynos5433_fsys_retention_regs),
1598 .value = EXYNOS_WAKEUP_FROM_LOWPWR,
1599 .init = exynos_retention_init,
1600};
1601
1554/* 1602/*
1555 * Samsung pinctrl driver data for Exynos5433 SoC. Exynos5433 SoC includes 1603 * Samsung pinctrl driver data for Exynos5433 SoC. Exynos5433 SoC includes
1556 * ten gpio/pin-mux/pinconfig controllers. 1604 * ten gpio/pin-mux/pinconfig controllers.
@@ -1564,6 +1612,7 @@ const struct samsung_pin_ctrl exynos5433_pin_ctrl[] __initconst = {
1564 .suspend = exynos_pinctrl_suspend, 1612 .suspend = exynos_pinctrl_suspend,
1565 .resume = exynos_pinctrl_resume, 1613 .resume = exynos_pinctrl_resume,
1566 .nr_ext_resources = 1, 1614 .nr_ext_resources = 1,
1615 .retention_data = &exynos5433_retention_data,
1567 }, { 1616 }, {
1568 /* pin-controller instance 1 data */ 1617 /* pin-controller instance 1 data */
1569 .pin_banks = exynos5433_pin_banks1, 1618 .pin_banks = exynos5433_pin_banks1,
@@ -1571,6 +1620,7 @@ const struct samsung_pin_ctrl exynos5433_pin_ctrl[] __initconst = {
1571 .eint_gpio_init = exynos_eint_gpio_init, 1620 .eint_gpio_init = exynos_eint_gpio_init,
1572 .suspend = exynos_pinctrl_suspend, 1621 .suspend = exynos_pinctrl_suspend,
1573 .resume = exynos_pinctrl_resume, 1622 .resume = exynos_pinctrl_resume,
1623 .retention_data = &exynos5433_audio_retention_data,
1574 }, { 1624 }, {
1575 /* pin-controller instance 2 data */ 1625 /* pin-controller instance 2 data */
1576 .pin_banks = exynos5433_pin_banks2, 1626 .pin_banks = exynos5433_pin_banks2,
@@ -1578,6 +1628,7 @@ const struct samsung_pin_ctrl exynos5433_pin_ctrl[] __initconst = {
1578 .eint_gpio_init = exynos_eint_gpio_init, 1628 .eint_gpio_init = exynos_eint_gpio_init,
1579 .suspend = exynos_pinctrl_suspend, 1629 .suspend = exynos_pinctrl_suspend,
1580 .resume = exynos_pinctrl_resume, 1630 .resume = exynos_pinctrl_resume,
1631 .retention_data = &exynos5433_retention_data,
1581 }, { 1632 }, {
1582 /* pin-controller instance 3 data */ 1633 /* pin-controller instance 3 data */
1583 .pin_banks = exynos5433_pin_banks3, 1634 .pin_banks = exynos5433_pin_banks3,
@@ -1585,6 +1636,7 @@ const struct samsung_pin_ctrl exynos5433_pin_ctrl[] __initconst = {
1585 .eint_gpio_init = exynos_eint_gpio_init, 1636 .eint_gpio_init = exynos_eint_gpio_init,
1586 .suspend = exynos_pinctrl_suspend, 1637 .suspend = exynos_pinctrl_suspend,
1587 .resume = exynos_pinctrl_resume, 1638 .resume = exynos_pinctrl_resume,
1639 .retention_data = &exynos5433_retention_data,
1588 }, { 1640 }, {
1589 /* pin-controller instance 4 data */ 1641 /* pin-controller instance 4 data */
1590 .pin_banks = exynos5433_pin_banks4, 1642 .pin_banks = exynos5433_pin_banks4,
@@ -1592,6 +1644,7 @@ const struct samsung_pin_ctrl exynos5433_pin_ctrl[] __initconst = {
1592 .eint_gpio_init = exynos_eint_gpio_init, 1644 .eint_gpio_init = exynos_eint_gpio_init,
1593 .suspend = exynos_pinctrl_suspend, 1645 .suspend = exynos_pinctrl_suspend,
1594 .resume = exynos_pinctrl_resume, 1646 .resume = exynos_pinctrl_resume,
1647 .retention_data = &exynos5433_retention_data,
1595 }, { 1648 }, {
1596 /* pin-controller instance 5 data */ 1649 /* pin-controller instance 5 data */
1597 .pin_banks = exynos5433_pin_banks5, 1650 .pin_banks = exynos5433_pin_banks5,
@@ -1599,6 +1652,7 @@ const struct samsung_pin_ctrl exynos5433_pin_ctrl[] __initconst = {
1599 .eint_gpio_init = exynos_eint_gpio_init, 1652 .eint_gpio_init = exynos_eint_gpio_init,
1600 .suspend = exynos_pinctrl_suspend, 1653 .suspend = exynos_pinctrl_suspend,
1601 .resume = exynos_pinctrl_resume, 1654 .resume = exynos_pinctrl_resume,
1655 .retention_data = &exynos5433_fsys_retention_data,
1602 }, { 1656 }, {
1603 /* pin-controller instance 6 data */ 1657 /* pin-controller instance 6 data */
1604 .pin_banks = exynos5433_pin_banks6, 1658 .pin_banks = exynos5433_pin_banks6,
@@ -1606,6 +1660,7 @@ const struct samsung_pin_ctrl exynos5433_pin_ctrl[] __initconst = {
1606 .eint_gpio_init = exynos_eint_gpio_init, 1660 .eint_gpio_init = exynos_eint_gpio_init,
1607 .suspend = exynos_pinctrl_suspend, 1661 .suspend = exynos_pinctrl_suspend,
1608 .resume = exynos_pinctrl_resume, 1662 .resume = exynos_pinctrl_resume,
1663 .retention_data = &exynos5433_retention_data,
1609 }, { 1664 }, {
1610 /* pin-controller instance 7 data */ 1665 /* pin-controller instance 7 data */
1611 .pin_banks = exynos5433_pin_banks7, 1666 .pin_banks = exynos5433_pin_banks7,
@@ -1613,6 +1668,7 @@ const struct samsung_pin_ctrl exynos5433_pin_ctrl[] __initconst = {
1613 .eint_gpio_init = exynos_eint_gpio_init, 1668 .eint_gpio_init = exynos_eint_gpio_init,
1614 .suspend = exynos_pinctrl_suspend, 1669 .suspend = exynos_pinctrl_suspend,
1615 .resume = exynos_pinctrl_resume, 1670 .resume = exynos_pinctrl_resume,
1671 .retention_data = &exynos5433_retention_data,
1616 }, { 1672 }, {
1617 /* pin-controller instance 8 data */ 1673 /* pin-controller instance 8 data */
1618 .pin_banks = exynos5433_pin_banks8, 1674 .pin_banks = exynos5433_pin_banks8,
@@ -1620,6 +1676,7 @@ const struct samsung_pin_ctrl exynos5433_pin_ctrl[] __initconst = {
1620 .eint_gpio_init = exynos_eint_gpio_init, 1676 .eint_gpio_init = exynos_eint_gpio_init,
1621 .suspend = exynos_pinctrl_suspend, 1677 .suspend = exynos_pinctrl_suspend,
1622 .resume = exynos_pinctrl_resume, 1678 .resume = exynos_pinctrl_resume,
1679 .retention_data = &exynos5433_retention_data,
1623 }, { 1680 }, {
1624 /* pin-controller instance 9 data */ 1681 /* pin-controller instance 9 data */
1625 .pin_banks = exynos5433_pin_banks9, 1682 .pin_banks = exynos5433_pin_banks9,
@@ -1627,6 +1684,7 @@ const struct samsung_pin_ctrl exynos5433_pin_ctrl[] __initconst = {
1627 .eint_gpio_init = exynos_eint_gpio_init, 1684 .eint_gpio_init = exynos_eint_gpio_init,
1628 .suspend = exynos_pinctrl_suspend, 1685 .suspend = exynos_pinctrl_suspend,
1629 .resume = exynos_pinctrl_resume, 1686 .resume = exynos_pinctrl_resume,
1687 .retention_data = &exynos5433_retention_data,
1630 }, 1688 },
1631}; 1689};
1632 1690