Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ad9ec4ec authored by Russell King's avatar Russell King Committed by Linus Walleij
Browse files

pinctrl: mvebu: switch drivers to generic simple mmio



Move the mvebu pinctrl drivers over to the generic simple mmio
implementation, saving a substantial number of lines of code in
the process.

Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 44aa9d06
Loading
Loading
Loading
Loading
+2 −22
Original line number Diff line number Diff line
@@ -23,20 +23,6 @@

#include "pinctrl-mvebu.h"

static void __iomem *mpp_base;

static int armada_370_mpp_ctrl_get(struct mvebu_mpp_ctrl_data *data,
				   unsigned pid, unsigned long *config)
{
	return default_mpp_ctrl_get(mpp_base, pid, config);
}

static int armada_370_mpp_ctrl_set(struct mvebu_mpp_ctrl_data *data,
				   unsigned pid, unsigned long config)
{
	return default_mpp_ctrl_set(mpp_base, pid, config);
}

static struct mvebu_mpp_mode mv88f6710_mpp_modes[] = {
	MPP_MODE(0,
	   MPP_FUNCTION(0x0, "gpio", NULL),
@@ -387,7 +373,7 @@ static const struct of_device_id armada_370_pinctrl_of_match[] = {
};

static const struct mvebu_mpp_ctrl mv88f6710_mpp_controls[] = {
	MPP_FUNC_CTRL(0, 65, NULL, armada_370_mpp_ctrl),
	MPP_FUNC_CTRL(0, 65, NULL, mvebu_mmio_mpp_ctrl),
};

static struct pinctrl_gpio_range mv88f6710_mpp_gpio_ranges[] = {
@@ -399,12 +385,6 @@ static struct pinctrl_gpio_range mv88f6710_mpp_gpio_ranges[] = {
static int armada_370_pinctrl_probe(struct platform_device *pdev)
{
	struct mvebu_pinctrl_soc_info *soc = &armada_370_pinctrl_info;
	struct resource *res;

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	mpp_base = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(mpp_base))
		return PTR_ERR(mpp_base);

	soc->variant = 0; /* no variants for Armada 370 */
	soc->controls = mv88f6710_mpp_controls;
@@ -416,7 +396,7 @@ static int armada_370_pinctrl_probe(struct platform_device *pdev)

	pdev->dev.platform_data = soc;

	return mvebu_pinctrl_probe(pdev);
	return mvebu_pinctrl_simple_mmio_probe(pdev);
}

static struct platform_driver armada_370_pinctrl_driver = {
+2 −22
Original line number Diff line number Diff line
@@ -23,20 +23,6 @@

#include "pinctrl-mvebu.h"

static void __iomem *mpp_base;

static int armada_375_mpp_ctrl_get(struct mvebu_mpp_ctrl_data *data,
				   unsigned pid, unsigned long *config)
{
	return default_mpp_ctrl_get(mpp_base, pid, config);
}

static int armada_375_mpp_ctrl_set(struct mvebu_mpp_ctrl_data *data,
				   unsigned pid, unsigned long config)
{
	return default_mpp_ctrl_set(mpp_base, pid, config);
}

static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
	MPP_MODE(0,
		 MPP_FUNCTION(0x0, "gpio", NULL),
@@ -405,7 +391,7 @@ static const struct of_device_id armada_375_pinctrl_of_match[] = {
};

static const struct mvebu_mpp_ctrl mv88f6720_mpp_controls[] = {
	MPP_FUNC_CTRL(0, 69, NULL, armada_375_mpp_ctrl),
	MPP_FUNC_CTRL(0, 69, NULL, mvebu_mmio_mpp_ctrl),
};

static struct pinctrl_gpio_range mv88f6720_mpp_gpio_ranges[] = {
@@ -417,12 +403,6 @@ static struct pinctrl_gpio_range mv88f6720_mpp_gpio_ranges[] = {
static int armada_375_pinctrl_probe(struct platform_device *pdev)
{
	struct mvebu_pinctrl_soc_info *soc = &armada_375_pinctrl_info;
	struct resource *res;

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	mpp_base = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(mpp_base))
		return PTR_ERR(mpp_base);

	soc->variant = 0; /* no variants for Armada 375 */
	soc->controls = mv88f6720_mpp_controls;
@@ -434,7 +414,7 @@ static int armada_375_pinctrl_probe(struct platform_device *pdev)

	pdev->dev.platform_data = soc;

	return mvebu_pinctrl_probe(pdev);
	return mvebu_pinctrl_simple_mmio_probe(pdev);
}

static struct platform_driver armada_375_pinctrl_driver = {
+2 −22
Original line number Diff line number Diff line
@@ -22,20 +22,6 @@

#include "pinctrl-mvebu.h"

static void __iomem *mpp_base;

static int armada_38x_mpp_ctrl_get(struct mvebu_mpp_ctrl_data *data,
				   unsigned pid, unsigned long *config)
{
	return default_mpp_ctrl_get(mpp_base, pid, config);
}

static int armada_38x_mpp_ctrl_set(struct mvebu_mpp_ctrl_data *data,
				   unsigned pid, unsigned long config)
{
	return default_mpp_ctrl_set(mpp_base, pid, config);
}

enum {
	V_88F6810 = BIT(0),
	V_88F6820 = BIT(1),
@@ -412,7 +398,7 @@ static const struct of_device_id armada_38x_pinctrl_of_match[] = {
};

static const struct mvebu_mpp_ctrl armada_38x_mpp_controls[] = {
	MPP_FUNC_CTRL(0, 59, NULL, armada_38x_mpp_ctrl),
	MPP_FUNC_CTRL(0, 59, NULL, mvebu_mmio_mpp_ctrl),
};

static struct pinctrl_gpio_range armada_38x_mpp_gpio_ranges[] = {
@@ -425,16 +411,10 @@ static int armada_38x_pinctrl_probe(struct platform_device *pdev)
	struct mvebu_pinctrl_soc_info *soc = &armada_38x_pinctrl_info;
	const struct of_device_id *match =
		of_match_device(armada_38x_pinctrl_of_match, &pdev->dev);
	struct resource *res;

	if (!match)
		return -ENODEV;

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	mpp_base = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(mpp_base))
		return PTR_ERR(mpp_base);

	soc->variant = (unsigned) match->data & 0xff;
	soc->controls = armada_38x_mpp_controls;
	soc->ncontrols = ARRAY_SIZE(armada_38x_mpp_controls);
@@ -445,7 +425,7 @@ static int armada_38x_pinctrl_probe(struct platform_device *pdev)

	pdev->dev.platform_data = soc;

	return mvebu_pinctrl_probe(pdev);
	return mvebu_pinctrl_simple_mmio_probe(pdev);
}

static struct platform_driver armada_38x_pinctrl_driver = {
+2 −22
Original line number Diff line number Diff line
@@ -22,20 +22,6 @@

#include "pinctrl-mvebu.h"

static void __iomem *mpp_base;

static int armada_39x_mpp_ctrl_get(struct mvebu_mpp_ctrl_data *data,
				   unsigned pid, unsigned long *config)
{
	return default_mpp_ctrl_get(mpp_base, pid, config);
}

static int armada_39x_mpp_ctrl_set(struct mvebu_mpp_ctrl_data *data,
				   unsigned pid, unsigned long config)
{
	return default_mpp_ctrl_set(mpp_base, pid, config);
}

enum {
	V_88F6920 = BIT(0),
	V_88F6925 = BIT(1),
@@ -394,7 +380,7 @@ static const struct of_device_id armada_39x_pinctrl_of_match[] = {
};

static const struct mvebu_mpp_ctrl armada_39x_mpp_controls[] = {
	MPP_FUNC_CTRL(0, 59, NULL, armada_39x_mpp_ctrl),
	MPP_FUNC_CTRL(0, 59, NULL, mvebu_mmio_mpp_ctrl),
};

static struct pinctrl_gpio_range armada_39x_mpp_gpio_ranges[] = {
@@ -407,16 +393,10 @@ static int armada_39x_pinctrl_probe(struct platform_device *pdev)
	struct mvebu_pinctrl_soc_info *soc = &armada_39x_pinctrl_info;
	const struct of_device_id *match =
		of_match_device(armada_39x_pinctrl_of_match, &pdev->dev);
	struct resource *res;

	if (!match)
		return -ENODEV;

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	mpp_base = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(mpp_base))
		return PTR_ERR(mpp_base);

	soc->variant = (unsigned) match->data & 0xff;
	soc->controls = armada_39x_mpp_controls;
	soc->ncontrols = ARRAY_SIZE(armada_39x_mpp_controls);
@@ -427,7 +407,7 @@ static int armada_39x_pinctrl_probe(struct platform_device *pdev)

	pdev->dev.platform_data = soc;

	return mvebu_pinctrl_probe(pdev);
	return mvebu_pinctrl_simple_mmio_probe(pdev);
}

static struct platform_driver armada_39x_pinctrl_driver = {
+6 −25
Original line number Diff line number Diff line
@@ -30,21 +30,8 @@

#include "pinctrl-mvebu.h"

static void __iomem *mpp_base;
static u32 *mpp_saved_regs;

static int armada_xp_mpp_ctrl_get(struct mvebu_mpp_ctrl_data *data,
				  unsigned pid, unsigned long *config)
{
	return default_mpp_ctrl_get(mpp_base, pid, config);
}

static int armada_xp_mpp_ctrl_set(struct mvebu_mpp_ctrl_data *data,
				  unsigned pid, unsigned long config)
{
	return default_mpp_ctrl_set(mpp_base, pid, config);
}

enum armada_xp_variant {
	V_MV78230	= BIT(0),
	V_MV78260	= BIT(1),
@@ -381,7 +368,7 @@ static const struct of_device_id armada_xp_pinctrl_of_match[] = {
};

static const struct mvebu_mpp_ctrl mv78230_mpp_controls[] = {
	MPP_FUNC_CTRL(0, 48, NULL, armada_xp_mpp_ctrl),
	MPP_FUNC_CTRL(0, 48, NULL, mvebu_mmio_mpp_ctrl),
};

static struct pinctrl_gpio_range mv78230_mpp_gpio_ranges[] = {
@@ -390,7 +377,7 @@ static struct pinctrl_gpio_range mv78230_mpp_gpio_ranges[] = {
};

static const struct mvebu_mpp_ctrl mv78260_mpp_controls[] = {
	MPP_FUNC_CTRL(0, 66, NULL, armada_xp_mpp_ctrl),
	MPP_FUNC_CTRL(0, 66, NULL, mvebu_mmio_mpp_ctrl),
};

static struct pinctrl_gpio_range mv78260_mpp_gpio_ranges[] = {
@@ -400,7 +387,7 @@ static struct pinctrl_gpio_range mv78260_mpp_gpio_ranges[] = {
};

static const struct mvebu_mpp_ctrl mv78460_mpp_controls[] = {
	MPP_FUNC_CTRL(0, 66, NULL, armada_xp_mpp_ctrl),
	MPP_FUNC_CTRL(0, 66, NULL, mvebu_mmio_mpp_ctrl),
};

static struct pinctrl_gpio_range mv78460_mpp_gpio_ranges[] = {
@@ -419,7 +406,7 @@ static int armada_xp_pinctrl_suspend(struct platform_device *pdev,
	nregs = DIV_ROUND_UP(soc->nmodes, MVEBU_MPPS_PER_REG);

	for (i = 0; i < nregs; i++)
		mpp_saved_regs[i] = readl(mpp_base + i * 4);
		mpp_saved_regs[i] = readl(soc->control_data[0].base + i * 4);

	return 0;
}
@@ -433,7 +420,7 @@ static int armada_xp_pinctrl_resume(struct platform_device *pdev)
	nregs = DIV_ROUND_UP(soc->nmodes, MVEBU_MPPS_PER_REG);

	for (i = 0; i < nregs; i++)
		writel(mpp_saved_regs[i], mpp_base + i * 4);
		writel(mpp_saved_regs[i], soc->control_data[0].base + i * 4);

	return 0;
}
@@ -443,17 +430,11 @@ static int armada_xp_pinctrl_probe(struct platform_device *pdev)
	struct mvebu_pinctrl_soc_info *soc = &armada_xp_pinctrl_info;
	const struct of_device_id *match =
		of_match_device(armada_xp_pinctrl_of_match, &pdev->dev);
	struct resource *res;
	int nregs;

	if (!match)
		return -ENODEV;

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	mpp_base = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(mpp_base))
		return PTR_ERR(mpp_base);

	soc->variant = (unsigned) match->data & 0xff;

	switch (soc->variant) {
@@ -501,7 +482,7 @@ static int armada_xp_pinctrl_probe(struct platform_device *pdev)

	pdev->dev.platform_data = soc;

	return mvebu_pinctrl_probe(pdev);
	return mvebu_pinctrl_simple_mmio_probe(pdev);
}

static struct platform_driver armada_xp_pinctrl_driver = {
Loading