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

Commit 6da67cab authored by Sebastian Hesselbarth's avatar Sebastian Hesselbarth
Browse files

pinctrl: mvebu: dove: use global register regmap



Now that we have a regmap for global registers, get rid of the last
remaining hardcoded physical addresses. While at it, also remove
DOVE_ prefix from those macros.

Signed-off-by: default avatarSebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 18e6f28e
Loading
Loading
Loading
Loading
+58 −66
Original line number Diff line number Diff line
@@ -30,21 +30,6 @@
#define PMU_REGS_OFFS		0xd802c
#define GC_REGS_OFFS		0xe802c

#define DOVE_SB_REGS_VIRT_BASE		IOMEM(0xfde00000)
#define DOVE_GLOBAL_CONFIG_1		(DOVE_SB_REGS_VIRT_BASE + 0xe802C)
#define DOVE_GLOBAL_CONFIG_1		(DOVE_SB_REGS_VIRT_BASE + 0xe802C)
#define  DOVE_TWSI_ENABLE_OPTION1	BIT(7)
#define DOVE_GLOBAL_CONFIG_2		(DOVE_SB_REGS_VIRT_BASE + 0xe8030)
#define  DOVE_TWSI_ENABLE_OPTION2	BIT(20)
#define  DOVE_TWSI_ENABLE_OPTION3	BIT(21)
#define  DOVE_TWSI_OPTION3_GPIO		BIT(22)
#define DOVE_SSP_CTRL_STATUS_1		(DOVE_SB_REGS_VIRT_BASE + 0xe8034)
#define  DOVE_SSP_ON_AU1		BIT(0)
#define DOVE_MPP_GENERAL_VIRT_BASE	(DOVE_SB_REGS_VIRT_BASE + 0xe803c)
#define  DOVE_AU1_SPDIFO_GPIO_EN	BIT(1)
#define  DOVE_NAND_GPIO_EN		BIT(0)
#define DOVE_GPIO_LO_VIRT_BASE		(DOVE_SB_REGS_VIRT_BASE + 0xd0400)

/* MPP Base registers */
#define PMU_MPP_GENERAL_CTRL	0x10
#define  AU0_AC97_SEL		BIT(16)
@@ -61,6 +46,19 @@
#define PMU_SIGNAL_SELECT_0	0x00
#define PMU_SIGNAL_SELECT_1	0x04

/* Global Config regmap registers */
#define GLOBAL_CONFIG_1		0x00
#define  TWSI_ENABLE_OPTION1	BIT(7)
#define GLOBAL_CONFIG_2		0x04
#define  TWSI_ENABLE_OPTION2	BIT(20)
#define  TWSI_ENABLE_OPTION3	BIT(21)
#define  TWSI_OPTION3_GPIO	BIT(22)
#define SSP_CTRL_STATUS_1	0x08
#define  SSP_ON_AU1		BIT(0)
#define MPP_GENERAL_CONFIG	0x10
#define  AU1_SPDIFO_GPIO_EN	BIT(1)
#define  NAND_GPIO_EN		BIT(0)

#define CONFIG_PMU	BIT(4)

static void __iomem *mpp_base;
@@ -182,23 +180,19 @@ static int dove_mpp4_ctrl_set(unsigned pid, unsigned long config)

static int dove_nand_ctrl_get(unsigned pid, unsigned long *config)
{
	unsigned long gmpp = readl(DOVE_MPP_GENERAL_VIRT_BASE);
	unsigned int gmpp;

	*config = ((gmpp & DOVE_NAND_GPIO_EN) != 0);
	regmap_read(gconfmap, MPP_GENERAL_CONFIG, &gmpp);
	*config = ((gmpp & NAND_GPIO_EN) != 0);

	return 0;
}

static int dove_nand_ctrl_set(unsigned pid, unsigned long config)
{
	unsigned long gmpp = readl(DOVE_MPP_GENERAL_VIRT_BASE);

	gmpp &= ~DOVE_NAND_GPIO_EN;
	if (config)
		gmpp |= DOVE_NAND_GPIO_EN;

	writel(gmpp, DOVE_MPP_GENERAL_VIRT_BASE);

	regmap_update_bits(gconfmap, MPP_GENERAL_CONFIG,
			   NAND_GPIO_EN,
			   (config) ? NAND_GPIO_EN : 0);
	return 0;
}

@@ -226,18 +220,22 @@ static int dove_audio0_ctrl_set(unsigned pid, unsigned long config)
static int dove_audio1_ctrl_get(unsigned pid, unsigned long *config)
{
	unsigned int mpp4 = readl(mpp4_base);
	unsigned long sspc1 = readl(DOVE_SSP_CTRL_STATUS_1);
	unsigned long gmpp = readl(DOVE_MPP_GENERAL_VIRT_BASE);
	unsigned long gcfg2 = readl(DOVE_GLOBAL_CONFIG_2);
	unsigned int sspc1;
	unsigned int gmpp;
	unsigned int gcfg2;

	regmap_read(gconfmap, SSP_CTRL_STATUS_1, &sspc1);
	regmap_read(gconfmap, MPP_GENERAL_CONFIG, &gmpp);
	regmap_read(gconfmap, GLOBAL_CONFIG_2, &gcfg2);

	*config = 0;
	if (mpp4 & AU1_GPIO_SEL)
		*config |= BIT(3);
	if (sspc1 & DOVE_SSP_ON_AU1)
	if (sspc1 & SSP_ON_AU1)
		*config |= BIT(2);
	if (gmpp & DOVE_AU1_SPDIFO_GPIO_EN)
	if (gmpp & AU1_SPDIFO_GPIO_EN)
		*config |= BIT(1);
	if (gcfg2 & DOVE_TWSI_OPTION3_GPIO)
	if (gcfg2 & TWSI_OPTION3_GPIO)
		*config |= BIT(0);

	/* SSP/TWSI only if I2S1 not set*/
@@ -252,31 +250,21 @@ static int dove_audio1_ctrl_get(unsigned pid, unsigned long *config)
static int dove_audio1_ctrl_set(unsigned pid, unsigned long config)
{
	unsigned int mpp4 = readl(mpp4_base);
	unsigned long sspc1 = readl(DOVE_SSP_CTRL_STATUS_1);
	unsigned long gmpp = readl(DOVE_MPP_GENERAL_VIRT_BASE);
	unsigned long gcfg2 = readl(DOVE_GLOBAL_CONFIG_2);

	/*
	 * clear all audio1 related bits before configure
	 */
	gcfg2 &= ~DOVE_TWSI_OPTION3_GPIO;
	gmpp &= ~DOVE_AU1_SPDIFO_GPIO_EN;
	sspc1 &= ~DOVE_SSP_ON_AU1;
	mpp4 &= ~AU1_GPIO_SEL;

	if (config & BIT(0))
		gcfg2 |= DOVE_TWSI_OPTION3_GPIO;
	if (config & BIT(1))
		gmpp |= DOVE_AU1_SPDIFO_GPIO_EN;
	if (config & BIT(2))
		sspc1 |= DOVE_SSP_ON_AU1;
	if (config & BIT(3))
		mpp4 |= AU1_GPIO_SEL;

	writel(mpp4, mpp4_base);
	writel(sspc1, DOVE_SSP_CTRL_STATUS_1);
	writel(gmpp, DOVE_MPP_GENERAL_VIRT_BASE);
	writel(gcfg2, DOVE_GLOBAL_CONFIG_2);

	regmap_update_bits(gconfmap, SSP_CTRL_STATUS_1,
			   SSP_ON_AU1,
			   (config & BIT(2)) ? SSP_ON_AU1 : 0);
	regmap_update_bits(gconfmap, MPP_GENERAL_CONFIG,
			   AU1_SPDIFO_GPIO_EN,
			   (config & BIT(1)) ? AU1_SPDIFO_GPIO_EN : 0);
	regmap_update_bits(gconfmap, GLOBAL_CONFIG_2,
			   TWSI_OPTION3_GPIO,
			   (config & BIT(0)) ? TWSI_OPTION3_GPIO : 0);

	return 0;
}
@@ -322,15 +310,18 @@ static int dove_audio1_ctrl_gpio_dir(unsigned pid, bool input)

static int dove_twsi_ctrl_get(unsigned pid, unsigned long *config)
{
	unsigned long gcfg1 = readl(DOVE_GLOBAL_CONFIG_1);
	unsigned long gcfg2 = readl(DOVE_GLOBAL_CONFIG_2);
	unsigned int gcfg1;
	unsigned int gcfg2;

	regmap_read(gconfmap, GLOBAL_CONFIG_1, &gcfg1);
	regmap_read(gconfmap, GLOBAL_CONFIG_2, &gcfg2);

	*config = 0;
	if (gcfg1 & DOVE_TWSI_ENABLE_OPTION1)
	if (gcfg1 & TWSI_ENABLE_OPTION1)
		*config = 1;
	else if (gcfg2 & DOVE_TWSI_ENABLE_OPTION2)
	else if (gcfg2 & TWSI_ENABLE_OPTION2)
		*config = 2;
	else if (gcfg2 & DOVE_TWSI_ENABLE_OPTION3)
	else if (gcfg2 & TWSI_ENABLE_OPTION3)
		*config = 3;

	return 0;
@@ -338,26 +329,27 @@ static int dove_twsi_ctrl_get(unsigned pid, unsigned long *config)

static int dove_twsi_ctrl_set(unsigned pid, unsigned long config)
{
	unsigned long gcfg1 = readl(DOVE_GLOBAL_CONFIG_1);
	unsigned long gcfg2 = readl(DOVE_GLOBAL_CONFIG_2);

	gcfg1 &= ~DOVE_TWSI_ENABLE_OPTION1;
	gcfg2 &= ~(DOVE_TWSI_ENABLE_OPTION2 | DOVE_TWSI_ENABLE_OPTION3);
	unsigned int gcfg1 = 0;
	unsigned int gcfg2 = 0;

	switch (config) {
	case 1:
		gcfg1 |= DOVE_TWSI_ENABLE_OPTION1;
		gcfg1 = TWSI_ENABLE_OPTION1;
		break;
	case 2:
		gcfg2 |= DOVE_TWSI_ENABLE_OPTION2;
		gcfg2 = TWSI_ENABLE_OPTION2;
		break;
	case 3:
		gcfg2 |= DOVE_TWSI_ENABLE_OPTION3;
		gcfg2 = TWSI_ENABLE_OPTION3;
		break;
	}

	writel(gcfg1, DOVE_GLOBAL_CONFIG_1);
	writel(gcfg2, DOVE_GLOBAL_CONFIG_2);
	regmap_update_bits(gconfmap, GLOBAL_CONFIG_1,
			   TWSI_ENABLE_OPTION1,
			   gcfg1);
	regmap_update_bits(gconfmap, GLOBAL_CONFIG_2,
			   TWSI_ENABLE_OPTION2 | TWSI_ENABLE_OPTION3,
			   gcfg2);

	return 0;
}