From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753451AbdA3MuV (ORCPT ); Mon, 30 Jan 2017 07:50:21 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:24859 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753241AbdA3Mtp (ORCPT ); Mon, 30 Jan 2017 07:49:45 -0500 X-AuditID: cbfec7ef-f79d26d00000420c-d8-588f33d1ff43 From: Marek Szyprowski To: linux-gpio@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Marek Szyprowski , Sylwester Nawrocki , Krzysztof Kozlowski , Linus Walleij , Tomasz Figa , Lee Jones , Bartlomiej Zolnierkiewicz Subject: [PATCH v3 3/7] pinctrl: samsung: Add support for pad retention control for Exynos5433 SoCs Date: Mon, 30 Jan 2017 13:38:24 +0100 Message-id: <1485779908-32147-4-git-send-email-m.szyprowski@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1485779908-32147-1-git-send-email-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMIsWRmVeSWpSXmKPExsWy7djPc7oXjfsjDI73G1hsnLGe1eL8+Q3s Fve/HmW0mPJnOZPFpsfXWC02z//DaHF51xw2ixnn9zFZrD1yl93i8Jt2VotVu/4wOnB77Jx1 l91j06pONo871/aweWxeUu/Rt2UVo8fnTXIBbFFcNimpOZllqUX6dglcGS9OzWUqeGVUMWdr C2sD40ztLkZODgkBE4ldt1awQdhiEhfurQeyuTiEBJYxSvzre8EO4XxmlDh79TkTTMfRQ40s cFVPP92BchqYJGY0LgKbxSZgKNH1tgtslohAO6PE3b4OJhCHWWATk0TbkhPMIFXCAqkSl15+ YQWxWQRUJW6uegoW5xXwkOjfNIMVYp+cxMljk8FsTgFPiS1PDzGDDJIQmM4u0b36A9AKDiBH VmLTAWaIeheJx61n2SFsYYlXx7dA2TISnR0HoX7oZ5RoaoWGwAxGiXNveSFsa4nDxy+C7WIW 4JOYtG06M8R4XomONiGIEg+J3jOdUGMcJX5t/8UM8f0cRol5s34wT2CUWcDIsIpRJLW0ODc9 tdhQrzgxt7g0L10vOT93EyMw6k//O/5+B+PT5pBDjAIcjEo8vA2CfRFCrIllxZW5hxglOJiV RHhPqvZHCPGmJFZWpRblxxeV5qQWH2KU5mBREufdu+BKuJBAemJJanZqakFqEUyWiYNTqoGx fl6RuZpD5U3FK9/yY1pWOy1Yv1x1q/H7KVJl3uv7l0k9XDHbe9oBp5z+vVxBB44XZ0w8aCMo NNtx9rQg3pY/DiEtkh8mGoqIPL2S8SvYN5pnIierkoXS7m+sn6qSw/7zm255andv1sXMcuVH 34/xb1Of5cL5KKJw27ee7wJqVSGT3K71t15SYinOSDTUYi4qTgQArQxP6/YCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpmkeLIzCtJLcpLzFFi42I5/e/4VV1Bk/4Ig2dTzC02zljPanH+/AZ2 i/tfjzJaTPmznMli0+NrrBab5/9htLi8aw6bxYzz+5gs1h65y25x+E07q8WqXX8YHbg9ds66 y+6xaVUnm8eda3vYPDYvqffo27KK0ePzJrkAtig3m4zUxJTUIoXUvOT8lMy8dFul0BA3XQsl hbzE3FRbpQhd35AgJYWyxJxSIM/IAA04OAe4Byvp2yW4Zbw4NZep4JVRxZytLawNjDO1uxg5 OSQETCSOHmpkgbDFJC7cW8/WxcjFISSwhFHi8vdNUE4Tk8SVpYfAqtgEDCW63naBJUQE2hkl Xt++xgTiMAtsYZLo2nSRHaRKWCBV4srcz4wgNouAqsTNVU+ZQWxeAQ+J/k0zWCH2yUmcPDYZ zOYU8JTY8vQQWI0QUM35G/9ZJjDyLmBkWMUoklpanJueW2yoV5yYW1yal66XnJ+7iREYAduO /dy8g/HSxuBDjAIcjEo8vDeE+yKEWBPLiitzDzFKcDArifCeVO2PEOJNSaysSi3Kjy8qzUkt PsRoCnTURGYp0eR8YHTmlcQbmhiaWxoaGVtYmBsZKYnzlny4Ei4kkJ5YkpqdmlqQWgTTx8TB KdXAKPH3c8GNZRO+vX55pFVtawDHjuM33x0xCtDP+bNE70lg0f1926adSlT8c/me/PLVVv4z +KbN2N10NjpCZOee88IMkh76tcJLdT/KFHNHKnz9sOXlm+L3O7TKVlXzCXyeVKt0/daDjg/K nxdPrUy+UL4taRdPfkJU7zl/ru74tHrPN1tCD7B0v1JiKc5INNRiLipOBACxdx95lgIAAA== X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170130123838eucas1p1fdae7ffe2af981607ec389f27c46f689 X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 X-Local-Sender: =?UTF-8?B?TWFyZWsgU3p5cHJvd3NraRtTUlBPTC1LZXJuZWwgKFRQKRs=?= =?UTF-8?B?7IK87ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Global-Sender: =?UTF-8?B?TWFyZWsgU3p5cHJvd3NraRtTUlBPTC1LZXJuZWwgKFRQKRtT?= =?UTF-8?B?YW1zdW5nIEVsZWN0cm9uaWNzG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDAyQ0QwMjczOTI=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20170130123838eucas1p1fdae7ffe2af981607ec389f27c46f689 X-RootMTR: 20170130123838eucas1p1fdae7ffe2af981607ec389f27c46f689 References: <1485779908-32147-1-git-send-email-m.szyprowski@samsung.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Reviewed-by: Krzysztof Kozlowski --- drivers/pinctrl/samsung/pinctrl-exynos.c | 58 ++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.c b/drivers/pinctrl/samsung/pinctrl-exynos.c index fa3802970570..7b0e6cc35e04 100644 --- a/drivers/pinctrl/samsung/pinctrl-exynos.c +++ b/drivers/pinctrl/samsung/pinctrl-exynos.c @@ -1551,6 +1551,54 @@ static void exynos_retention_disable(struct samsung_pinctrl_drv_data *drvdata) EXYNOS5433_PIN_BANK_EINTG(3, 0x000, "gpj1", 0x00), }; +/* PMU pin retention groups registers for Exynos5433 (without audio & fsys) */ +static const u32 exynos5433_retention_regs[] = { + EXYNOS5433_PAD_RETENTION_TOP_OPTION, + EXYNOS5433_PAD_RETENTION_UART_OPTION, + EXYNOS5433_PAD_RETENTION_EBIA_OPTION, + EXYNOS5433_PAD_RETENTION_EBIB_OPTION, + EXYNOS5433_PAD_RETENTION_SPI_OPTION, + EXYNOS5433_PAD_RETENTION_MIF_OPTION, + EXYNOS5433_PAD_RETENTION_USBXTI_OPTION, + EXYNOS5433_PAD_RETENTION_BOOTLDO_OPTION, + EXYNOS5433_PAD_RETENTION_UFS_OPTION, + EXYNOS5433_PAD_RETENTION_FSYSGENIO_OPTION, +}; + +static const struct samsung_retention_data exynos5433_retention_data __initconst = { + .regs = exynos5433_retention_regs, + .nr_regs = ARRAY_SIZE(exynos5433_retention_regs), + .value = EXYNOS_WAKEUP_FROM_LOWPWR, + .refcnt = &exynos_shared_retention_refcnt, + .init = exynos_retention_init, +}; + +/* PMU retention control for audio pins can be tied to audio pin bank */ +static const u32 exynos5433_audio_retention_regs[] = { + EXYNOS5433_PAD_RETENTION_AUD_OPTION, +}; + +static const struct samsung_retention_data exynos5433_audio_retention_data __initconst = { + .regs = exynos5433_audio_retention_regs, + .nr_regs = ARRAY_SIZE(exynos5433_audio_retention_regs), + .value = EXYNOS_WAKEUP_FROM_LOWPWR, + .init = exynos_retention_init, +}; + +/* PMU retention control for mmc pins can be tied to fsys pin bank */ +static const u32 exynos5433_fsys_retention_regs[] = { + EXYNOS5433_PAD_RETENTION_MMC0_OPTION, + EXYNOS5433_PAD_RETENTION_MMC1_OPTION, + EXYNOS5433_PAD_RETENTION_MMC2_OPTION, +}; + +static const struct samsung_retention_data exynos5433_fsys_retention_data __initconst = { + .regs = exynos5433_fsys_retention_regs, + .nr_regs = ARRAY_SIZE(exynos5433_fsys_retention_regs), + .value = EXYNOS_WAKEUP_FROM_LOWPWR, + .init = exynos_retention_init, +}; + /* * Samsung pinctrl driver data for Exynos5433 SoC. Exynos5433 SoC includes * ten gpio/pin-mux/pinconfig controllers. @@ -1564,6 +1612,7 @@ static void exynos_retention_disable(struct samsung_pinctrl_drv_data *drvdata) .suspend = exynos_pinctrl_suspend, .resume = exynos_pinctrl_resume, .nr_ext_resources = 1, + .retention_data = &exynos5433_retention_data, }, { /* pin-controller instance 1 data */ .pin_banks = exynos5433_pin_banks1, @@ -1571,6 +1620,7 @@ static void exynos_retention_disable(struct samsung_pinctrl_drv_data *drvdata) .eint_gpio_init = exynos_eint_gpio_init, .suspend = exynos_pinctrl_suspend, .resume = exynos_pinctrl_resume, + .retention_data = &exynos5433_audio_retention_data, }, { /* pin-controller instance 2 data */ .pin_banks = exynos5433_pin_banks2, @@ -1578,6 +1628,7 @@ static void exynos_retention_disable(struct samsung_pinctrl_drv_data *drvdata) .eint_gpio_init = exynos_eint_gpio_init, .suspend = exynos_pinctrl_suspend, .resume = exynos_pinctrl_resume, + .retention_data = &exynos5433_retention_data, }, { /* pin-controller instance 3 data */ .pin_banks = exynos5433_pin_banks3, @@ -1585,6 +1636,7 @@ static void exynos_retention_disable(struct samsung_pinctrl_drv_data *drvdata) .eint_gpio_init = exynos_eint_gpio_init, .suspend = exynos_pinctrl_suspend, .resume = exynos_pinctrl_resume, + .retention_data = &exynos5433_retention_data, }, { /* pin-controller instance 4 data */ .pin_banks = exynos5433_pin_banks4, @@ -1592,6 +1644,7 @@ static void exynos_retention_disable(struct samsung_pinctrl_drv_data *drvdata) .eint_gpio_init = exynos_eint_gpio_init, .suspend = exynos_pinctrl_suspend, .resume = exynos_pinctrl_resume, + .retention_data = &exynos5433_retention_data, }, { /* pin-controller instance 5 data */ .pin_banks = exynos5433_pin_banks5, @@ -1599,6 +1652,7 @@ static void exynos_retention_disable(struct samsung_pinctrl_drv_data *drvdata) .eint_gpio_init = exynos_eint_gpio_init, .suspend = exynos_pinctrl_suspend, .resume = exynos_pinctrl_resume, + .retention_data = &exynos5433_fsys_retention_data, }, { /* pin-controller instance 6 data */ .pin_banks = exynos5433_pin_banks6, @@ -1606,6 +1660,7 @@ static void exynos_retention_disable(struct samsung_pinctrl_drv_data *drvdata) .eint_gpio_init = exynos_eint_gpio_init, .suspend = exynos_pinctrl_suspend, .resume = exynos_pinctrl_resume, + .retention_data = &exynos5433_retention_data, }, { /* pin-controller instance 7 data */ .pin_banks = exynos5433_pin_banks7, @@ -1613,6 +1668,7 @@ static void exynos_retention_disable(struct samsung_pinctrl_drv_data *drvdata) .eint_gpio_init = exynos_eint_gpio_init, .suspend = exynos_pinctrl_suspend, .resume = exynos_pinctrl_resume, + .retention_data = &exynos5433_retention_data, }, { /* pin-controller instance 8 data */ .pin_banks = exynos5433_pin_banks8, @@ -1620,6 +1676,7 @@ static void exynos_retention_disable(struct samsung_pinctrl_drv_data *drvdata) .eint_gpio_init = exynos_eint_gpio_init, .suspend = exynos_pinctrl_suspend, .resume = exynos_pinctrl_resume, + .retention_data = &exynos5433_retention_data, }, { /* pin-controller instance 9 data */ .pin_banks = exynos5433_pin_banks9, @@ -1627,6 +1684,7 @@ static void exynos_retention_disable(struct samsung_pinctrl_drv_data *drvdata) .eint_gpio_init = exynos_eint_gpio_init, .suspend = exynos_pinctrl_suspend, .resume = exynos_pinctrl_resume, + .retention_data = &exynos5433_retention_data, }, }; -- 1.9.1