Skip to contentSkip to conversation

pinctrl: dove: Fix dove_audio1_ctrl_set when BIT(0|1|2|3) of config is clear

PATCH In review Axel Lin 2 participants 7 messages Nov 11, 2012 – Nov 17, 2012

Subsystems (2)
lore
Share & tools
lore

Axel Lin

author
#0 lore raw

PATCH 1/2 pinctrl: dove: Fix dove_audio1_ctrl_set when BIT(0|1|2|3) of config is clear

Current implementation in dove_audio1_ctrl_set() does not clear corresponding register bit if BIT(0|1|2|3) of config is clear. Fix it.

---
Hi,
I don't have this hardware.
I'd appreciate if someone can review and test this patch.

This resend also CC Sebastian Hesselbarth and linux-arm-kernel. Thanks,
Axel

 drivers/pinctrl/mvebu/pinctrl-dove.c |   11 +++++++++++
 1 file changed, 11 insertions(+)
drivers/pinctrl/mvebu/pinctrl-dove.c +11 -0
index ffe74b2..e5cc694 100644
@@ -236,12 +236,23 @@ static int dove_audio1_ctrl_set(struct mvebu_mpp_ctrl *ctrl,
 
 	if (config & BIT(0))
 		gcfg2 |= DOVE_TWSI_OPTION3_GPIO;
+	else
+		gcfg2 &= ~DOVE_TWSI_OPTION3_GPIO;
+
 	if (config & BIT(1))
 		gmpp |= DOVE_AU1_SPDIFO_GPIO_EN;
+	else
+		gmpp &= ~DOVE_AU1_SPDIFO_GPIO_EN;
+
 	if (config & BIT(2))
 		sspc1 |= DOVE_SSP_ON_AU1;
+	else
+		sspc1 &= ~DOVE_SSP_ON_AU1;
+
 	if (config & BIT(3))
 		mpp4 |= DOVE_AU1_GPIO_SEL;
+	else
+		mpp4 &= ~DOVE_AU1_GPIO_SEL;
 
 	writel(mpp4, DOVE_MPP_CTRL4_VIRT_BASE);
 	writel(sspc1, DOVE_SSP_CTRL_STATUS_1);
Signature · 1 line
1.7.9.5
author
#1 lore raw

PATCH 2/2 pinctrl: dove: Checking valid config in dove_audio1_ctrl_set

Move the code checking valid config to dove_audio1_ctrl_set(), this ensures we always set valid config. And then dove_audio1_ctrl_get() always returns correct config.

---
 drivers/pinctrl/mvebu/pinctrl-dove.c |   13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)
drivers/pinctrl/mvebu/pinctrl-dove.c +7 -6
index e5cc694..a393790 100644
@@ -217,12 +217,6 @@ static int dove_audio1_ctrl_get(struct mvebu_mpp_ctrl *ctrl,
 	if (gcfg2 & DOVE_TWSI_OPTION3_GPIO)
 		*config |= BIT(0);
 
-	/* SSP/TWSI only if I2S1 not set*/
-	if ((*config & BIT(3)) == 0)
-		*config &= ~(BIT(2) | BIT(0));
-	/* TWSI only if SPDIFO not set*/
-	if ((*config & BIT(1)) == 0)
-		*config &= ~BIT(0);
 	return 0;
 }
 
@@ -234,6 +228,13 @@ static int dove_audio1_ctrl_set(struct mvebu_mpp_ctrl *ctrl,
 	unsigned long gmpp = readl(DOVE_MPP_GENERAL_VIRT_BASE);
 	unsigned long gcfg2 = readl(DOVE_GLOBAL_CONFIG_2);
 
+	/* SSP/TWSI only if I2S1 not set*/
+	if ((config & BIT(3)) == 0)
+		config &= ~(BIT(2) | BIT(0));
+	/* TWSI only if SPDIFO not set*/
+	if ((config & BIT(1)) == 0)
+		config &= ~BIT(0);
+
 	if (config & BIT(0))
 		gcfg2 |= DOVE_TWSI_OPTION3_GPIO;
 	else
Signature · 1 line
1.7.9.5
#2 lore raw

Re: [PATCH RFT 2/2] pinctrl: dove: Checking valid config in dove_audio1_ctrl_set

Quoted 5 lines · Axel Lin

Move the code checking valid config to dove_audio1_ctrl_set(), this ensures we always set valid config. And then dove_audio1_ctrl_get() always returns correct config.

Axel,

although correct in a software point-of-view, I don't think we should move this from _get to _set because the hardware allows to set these bits without changing the actual function. There are some dominant bits in this settings so the masking is done to not have ~5 different values for the same function here.

The pinctrl driver will set one of the (software) supported values anyway but on reset there could be one of the values mentioned above written into the registers.

Sebastian

#3 lore raw
In reply to Axel Lin
Quoted 4 lines · Axel Lin

Current implementation in dove_audio1_ctrl_set() does not clear corresponding register bit if BIT(0|1|2|3) of config is clear. Fix it.

Axel,

thanks for the hint on not clearing the audio1 bits before setting them. I will test this tonight and guess you should prepare a real patch for this one.

Sebastian

author
#4 lore raw

2012/11/12 Sebastian Hesselbarth <[email protected]>:

Quoted 6 lines · Axel Lin
Quoted 5 lines

Current implementation in dove_audio1_ctrl_set() does not clear corresponding
register bit if BIT(0|1|2|3) of config is clear. Fix it.

Quoted 8 lines
Quoted 1 line

Axel,

thanks for the hint on not clearing the audio1 bits before setting them. I will test this tonight and guess you should prepare a real patch for this one.

Hi Sebastian,
Does this patch work for you?
May I have your Acked-and-Tested-by if you think this patch is ok.

Thanks,
Axel

#5 lore raw
Quoted 12 lines · Axel Lin

2012/11/12 Sebastian Hesselbarth<[email protected]>:

Quoted 11 lines · Axel Lin
Quoted 6 lines

Current implementation in dove_audio1_ctrl_set() does not clear corresponding
register bit if BIT(0|1|2|3) of config is clear. Fix it.

Axel,

Quoted 7 lines
Quoted 3 lines

thanks for the hint on not clearing the audio1 bits before setting them. I will test this tonight and guess you should prepare a real patch for this one.

Hi Sebastian,
Does this patch work for you?
May I have your Acked-and-Tested-by if you think this patch is ok.

Axel,

pinctrl for Dove will not be enabled before DT clock support for Dove, which will hopefully make it into 3.8. If you agree, I will test and push it with the related patches for enabling pinctrl.

Sebastian

author
#6 lore raw
Quoted 3 lines

pinctrl for Dove will not be enabled before DT clock support for Dove, which will hopefully make it into 3.8. If you agree, I will test and push it with the related patches for enabling pinctrl.

Ok. Thanks.

Axel