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: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> Acked-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
18e6f28e9c
commit
6da67cab4b
1 changed files with 58 additions and 66 deletions
|
@ -30,21 +30,6 @@
|
||||||
#define PMU_REGS_OFFS 0xd802c
|
#define PMU_REGS_OFFS 0xd802c
|
||||||
#define GC_REGS_OFFS 0xe802c
|
#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 */
|
/* MPP Base registers */
|
||||||
#define PMU_MPP_GENERAL_CTRL 0x10
|
#define PMU_MPP_GENERAL_CTRL 0x10
|
||||||
#define AU0_AC97_SEL BIT(16)
|
#define AU0_AC97_SEL BIT(16)
|
||||||
|
@ -61,6 +46,19 @@
|
||||||
#define PMU_SIGNAL_SELECT_0 0x00
|
#define PMU_SIGNAL_SELECT_0 0x00
|
||||||
#define PMU_SIGNAL_SELECT_1 0x04
|
#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)
|
#define CONFIG_PMU BIT(4)
|
||||||
|
|
||||||
static void __iomem *mpp_base;
|
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)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dove_nand_ctrl_set(unsigned pid, unsigned long config)
|
static int dove_nand_ctrl_set(unsigned pid, unsigned long config)
|
||||||
{
|
{
|
||||||
unsigned long gmpp = readl(DOVE_MPP_GENERAL_VIRT_BASE);
|
regmap_update_bits(gconfmap, MPP_GENERAL_CONFIG,
|
||||||
|
NAND_GPIO_EN,
|
||||||
gmpp &= ~DOVE_NAND_GPIO_EN;
|
(config) ? NAND_GPIO_EN : 0);
|
||||||
if (config)
|
|
||||||
gmpp |= DOVE_NAND_GPIO_EN;
|
|
||||||
|
|
||||||
writel(gmpp, DOVE_MPP_GENERAL_VIRT_BASE);
|
|
||||||
|
|
||||||
return 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)
|
static int dove_audio1_ctrl_get(unsigned pid, unsigned long *config)
|
||||||
{
|
{
|
||||||
unsigned int mpp4 = readl(mpp4_base);
|
unsigned int mpp4 = readl(mpp4_base);
|
||||||
unsigned long sspc1 = readl(DOVE_SSP_CTRL_STATUS_1);
|
unsigned int sspc1;
|
||||||
unsigned long gmpp = readl(DOVE_MPP_GENERAL_VIRT_BASE);
|
unsigned int gmpp;
|
||||||
unsigned long gcfg2 = readl(DOVE_GLOBAL_CONFIG_2);
|
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;
|
*config = 0;
|
||||||
if (mpp4 & AU1_GPIO_SEL)
|
if (mpp4 & AU1_GPIO_SEL)
|
||||||
*config |= BIT(3);
|
*config |= BIT(3);
|
||||||
if (sspc1 & DOVE_SSP_ON_AU1)
|
if (sspc1 & SSP_ON_AU1)
|
||||||
*config |= BIT(2);
|
*config |= BIT(2);
|
||||||
if (gmpp & DOVE_AU1_SPDIFO_GPIO_EN)
|
if (gmpp & AU1_SPDIFO_GPIO_EN)
|
||||||
*config |= BIT(1);
|
*config |= BIT(1);
|
||||||
if (gcfg2 & DOVE_TWSI_OPTION3_GPIO)
|
if (gcfg2 & TWSI_OPTION3_GPIO)
|
||||||
*config |= BIT(0);
|
*config |= BIT(0);
|
||||||
|
|
||||||
/* SSP/TWSI only if I2S1 not set*/
|
/* 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)
|
static int dove_audio1_ctrl_set(unsigned pid, unsigned long config)
|
||||||
{
|
{
|
||||||
unsigned int mpp4 = readl(mpp4_base);
|
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;
|
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))
|
if (config & BIT(3))
|
||||||
mpp4 |= AU1_GPIO_SEL;
|
mpp4 |= AU1_GPIO_SEL;
|
||||||
|
|
||||||
writel(mpp4, mpp4_base);
|
writel(mpp4, mpp4_base);
|
||||||
writel(sspc1, DOVE_SSP_CTRL_STATUS_1);
|
|
||||||
writel(gmpp, DOVE_MPP_GENERAL_VIRT_BASE);
|
regmap_update_bits(gconfmap, SSP_CTRL_STATUS_1,
|
||||||
writel(gcfg2, DOVE_GLOBAL_CONFIG_2);
|
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;
|
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)
|
static int dove_twsi_ctrl_get(unsigned pid, unsigned long *config)
|
||||||
{
|
{
|
||||||
unsigned long gcfg1 = readl(DOVE_GLOBAL_CONFIG_1);
|
unsigned int gcfg1;
|
||||||
unsigned long gcfg2 = readl(DOVE_GLOBAL_CONFIG_2);
|
unsigned int gcfg2;
|
||||||
|
|
||||||
|
regmap_read(gconfmap, GLOBAL_CONFIG_1, &gcfg1);
|
||||||
|
regmap_read(gconfmap, GLOBAL_CONFIG_2, &gcfg2);
|
||||||
|
|
||||||
*config = 0;
|
*config = 0;
|
||||||
if (gcfg1 & DOVE_TWSI_ENABLE_OPTION1)
|
if (gcfg1 & TWSI_ENABLE_OPTION1)
|
||||||
*config = 1;
|
*config = 1;
|
||||||
else if (gcfg2 & DOVE_TWSI_ENABLE_OPTION2)
|
else if (gcfg2 & TWSI_ENABLE_OPTION2)
|
||||||
*config = 2;
|
*config = 2;
|
||||||
else if (gcfg2 & DOVE_TWSI_ENABLE_OPTION3)
|
else if (gcfg2 & TWSI_ENABLE_OPTION3)
|
||||||
*config = 3;
|
*config = 3;
|
||||||
|
|
||||||
return 0;
|
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)
|
static int dove_twsi_ctrl_set(unsigned pid, unsigned long config)
|
||||||
{
|
{
|
||||||
unsigned long gcfg1 = readl(DOVE_GLOBAL_CONFIG_1);
|
unsigned int gcfg1 = 0;
|
||||||
unsigned long gcfg2 = readl(DOVE_GLOBAL_CONFIG_2);
|
unsigned int gcfg2 = 0;
|
||||||
|
|
||||||
gcfg1 &= ~DOVE_TWSI_ENABLE_OPTION1;
|
|
||||||
gcfg2 &= ~(DOVE_TWSI_ENABLE_OPTION2 | DOVE_TWSI_ENABLE_OPTION3);
|
|
||||||
|
|
||||||
switch (config) {
|
switch (config) {
|
||||||
case 1:
|
case 1:
|
||||||
gcfg1 |= DOVE_TWSI_ENABLE_OPTION1;
|
gcfg1 = TWSI_ENABLE_OPTION1;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
gcfg2 |= DOVE_TWSI_ENABLE_OPTION2;
|
gcfg2 = TWSI_ENABLE_OPTION2;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
gcfg2 |= DOVE_TWSI_ENABLE_OPTION3;
|
gcfg2 = TWSI_ENABLE_OPTION3;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
writel(gcfg1, DOVE_GLOBAL_CONFIG_1);
|
regmap_update_bits(gconfmap, GLOBAL_CONFIG_1,
|
||||||
writel(gcfg2, DOVE_GLOBAL_CONFIG_2);
|
TWSI_ENABLE_OPTION1,
|
||||||
|
gcfg1);
|
||||||
|
regmap_update_bits(gconfmap, GLOBAL_CONFIG_2,
|
||||||
|
TWSI_ENABLE_OPTION2 | TWSI_ENABLE_OPTION3,
|
||||||
|
gcfg2);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue