diff options
Diffstat (limited to 'drivers/pinctrl/mvebu/pinctrl-armada-cp110.c')
| -rw-r--r-- | drivers/pinctrl/mvebu/pinctrl-armada-cp110.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-cp110.c b/drivers/pinctrl/mvebu/pinctrl-armada-cp110.c index 7f85beb45482..9a250c491f33 100644 --- a/drivers/pinctrl/mvebu/pinctrl-armada-cp110.c +++ b/drivers/pinctrl/mvebu/pinctrl-armada-cp110.c @@ -1,14 +1,10 @@ +// SPDX-License-Identifier: GPL-2.0-or-later /* * Marvell Armada CP110 pinctrl driver based on mvebu pinctrl core * * Copyright (C) 2017 Marvell * * Hanna Hawa <hannah@marvell.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. */ #include <linux/err.h> @@ -16,9 +12,9 @@ #include <linux/io.h> #include <linux/mfd/syscon.h> #include <linux/of.h> -#include <linux/of_device.h> #include <linux/pinctrl/pinctrl.h> #include <linux/platform_device.h> +#include <linux/property.h> #include "pinctrl-mvebu.h" @@ -36,6 +32,7 @@ enum { V_ARMADA_7K = BIT(0), V_ARMADA_8K_CPM = BIT(1), V_ARMADA_8K_CPS = BIT(2), + V_CP115_STANDALONE = BIT(3), V_ARMADA_7K_8K_CPM = (V_ARMADA_7K | V_ARMADA_8K_CPM), V_ARMADA_7K_8K_CPS = (V_ARMADA_7K | V_ARMADA_8K_CPS), }; @@ -522,13 +519,13 @@ static struct mvebu_mpp_mode armada_cp110_mpp_modes[] = { MPP_FUNCTION(4, "synce1", "clk"), MPP_FUNCTION(8, "led", "data"), MPP_FUNCTION(10, "sdio", "hw_rst"), - MPP_FUNCTION(11, "sdio", "wr_protect")), + MPP_FUNCTION(11, "sdio_wp", "wr_protect")), MPP_MODE(55, MPP_FUNCTION(0, "gpio", NULL), MPP_FUNCTION(1, "ge1", "rxctl_rxdv"), MPP_FUNCTION(3, "ptp", "pulse"), MPP_FUNCTION(10, "sdio", "led"), - MPP_FUNCTION(11, "sdio", "card_detect")), + MPP_FUNCTION(11, "sdio_cd", "card_detect")), MPP_MODE(56, MPP_FUNCTION(0, "gpio", NULL), MPP_FUNCTION(4, "tdm", "drx"), @@ -601,7 +598,8 @@ static struct mvebu_mpp_mode armada_cp110_mpp_modes[] = { MPP_FUNCTION(7, "uart0", "rxd"), MPP_FUNCTION(8, "uart2", "rxd"), MPP_FUNCTION(9, "sata0", "present_act"), - MPP_FUNCTION(10, "ge", "mdc")), + MPP_FUNCTION(10, "ge", "mdc"), + MPP_FUNCTION(14, "sdio", "ds")), }; static const struct of_device_id armada_cp110_pinctrl_of_match[] = { @@ -617,6 +615,10 @@ static const struct of_device_id armada_cp110_pinctrl_of_match[] = { .compatible = "marvell,armada-8k-cps-pinctrl", .data = (void *) V_ARMADA_8K_CPS, }, + { + .compatible = "marvell,cp115-standalone-pinctrl", + .data = (void *) V_CP115_STANDALONE, + }, { }, }; @@ -636,8 +638,6 @@ static void mvebu_pinctrl_assign_variant(struct mvebu_mpp_mode *m, static int armada_cp110_pinctrl_probe(struct platform_device *pdev) { struct mvebu_pinctrl_soc_info *soc; - const struct of_device_id *match = - of_match_device(armada_cp110_pinctrl_of_match, &pdev->dev); int i; if (!pdev->dev.parent) @@ -648,7 +648,7 @@ static int armada_cp110_pinctrl_probe(struct platform_device *pdev) if (!soc) return -ENOMEM; - soc->variant = (unsigned long) match->data & 0xff; + soc->variant = (unsigned long)device_get_match_data(&pdev->dev) & 0xff; soc->controls = armada_cp110_mpp_controls; soc->ncontrols = ARRAY_SIZE(armada_cp110_mpp_controls); soc->modes = armada_cp110_mpp_modes; @@ -658,16 +658,20 @@ static int armada_cp110_pinctrl_probe(struct platform_device *pdev) switch (i) { case 0 ... 31: - mvebu_pinctrl_assign_variant(m, V_ARMADA_7K_8K_CPS); + mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPS | + V_CP115_STANDALONE)); break; case 32 ... 38: - mvebu_pinctrl_assign_variant(m, V_ARMADA_7K_8K_CPM); + mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPM | + V_CP115_STANDALONE)); break; case 39 ... 43: - mvebu_pinctrl_assign_variant(m, V_ARMADA_8K_CPM); + mvebu_pinctrl_assign_variant(m, (V_ARMADA_8K_CPM | + V_CP115_STANDALONE)); break; case 44 ... 62: - mvebu_pinctrl_assign_variant(m, V_ARMADA_7K_8K_CPM); + mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPM | + V_CP115_STANDALONE)); break; } } |
