* [RESEND 0/2] MFD: twl6040-codec: avoid reconfiguring the PLL
@ 2012-01-14 19:58 Peter Ujfalusi
2012-01-14 19:58 ` [RESEND 1/2] MFD: twl6040-codec: Store mclk configuration Peter Ujfalusi
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Peter Ujfalusi @ 2012-01-14 19:58 UTC (permalink / raw)
To: Samuel Ortiz; +Cc: linux-kernel
Hello Samual,
This series somehow got lost (the original series has been sent back in
November).
It might be too late for 3.3 :(
The following two patch will optimize the PLL configuration code for the
twl6040, so if the requested configuration is the same as the current we simply
skip configuring the PLL (since no change needed).
We can save considerable amount of time in this way (due to avoiding i2c
accesses, and delays dictated by the configuration protocol).
Regards,
Peter
---
Peter Ujfalusi (2):
MFD: twl6040-codec: Store mclk configuration
MFD: twl6040-codec: Avoid PLL reconfiguration when not needed
drivers/mfd/twl6040-core.c | 128 ++++++++++++++++++++++++++-----------------
include/linux/mfd/twl6040.h | 2 +
2 files changed, 79 insertions(+), 51 deletions(-)
--
1.7.8.3
^ permalink raw reply [flat|nested] 4+ messages in thread
* [RESEND 1/2] MFD: twl6040-codec: Store mclk configuration
2012-01-14 19:58 [RESEND 0/2] MFD: twl6040-codec: avoid reconfiguring the PLL Peter Ujfalusi
@ 2012-01-14 19:58 ` Peter Ujfalusi
2012-01-14 19:58 ` [RESEND 2/2] MFD: twl6040-codec: Avoid PLL reconfiguration when not needed Peter Ujfalusi
2012-01-24 10:09 ` [RESEND 0/2] MFD: twl6040-codec: avoid reconfiguring the PLL Samuel Ortiz
2 siblings, 0 replies; 4+ messages in thread
From: Peter Ujfalusi @ 2012-01-14 19:58 UTC (permalink / raw)
To: Samuel Ortiz; +Cc: linux-kernel
Store the last used mclk configuration for the PLL.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
---
drivers/mfd/twl6040-core.c | 3 +++
include/linux/mfd/twl6040.h | 2 ++
2 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/drivers/mfd/twl6040-core.c b/drivers/mfd/twl6040-core.c
index dda8629..c2088f4 100644
--- a/drivers/mfd/twl6040-core.c
+++ b/drivers/mfd/twl6040-core.c
@@ -282,6 +282,7 @@ int twl6040_power(struct twl6040 *twl6040, int on)
/* Default PLL configuration after power up */
twl6040->pll = TWL6040_SYSCLK_SEL_LPPLL;
twl6040->sysclk = 19200000;
+ twl6040->mclk = 32768;
} else {
/* already powered-down */
if (!twl6040->power_count) {
@@ -305,6 +306,7 @@ int twl6040_power(struct twl6040 *twl6040, int on)
twl6040_power_down(twl6040);
}
twl6040->sysclk = 0;
+ twl6040->mclk = 0;
}
out:
@@ -421,6 +423,7 @@ int twl6040_set_pll(struct twl6040 *twl6040, int pll_id,
}
twl6040->sysclk = freq_out;
+ twl6040->mclk = freq_in;
twl6040->pll = pll_id;
pll_out:
diff --git a/include/linux/mfd/twl6040.h b/include/linux/mfd/twl6040.h
index 2463c261..9bc9ac6 100644
--- a/include/linux/mfd/twl6040.h
+++ b/include/linux/mfd/twl6040.h
@@ -187,8 +187,10 @@ struct twl6040 {
int rev;
u8 vibra_ctrl_cache[2];
+ /* PLL configuration */
int pll;
unsigned int sysclk;
+ unsigned int mclk;
unsigned int irq;
unsigned int irq_base;
--
1.7.8.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [RESEND 2/2] MFD: twl6040-codec: Avoid PLL reconfiguration when not needed
2012-01-14 19:58 [RESEND 0/2] MFD: twl6040-codec: avoid reconfiguring the PLL Peter Ujfalusi
2012-01-14 19:58 ` [RESEND 1/2] MFD: twl6040-codec: Store mclk configuration Peter Ujfalusi
@ 2012-01-14 19:58 ` Peter Ujfalusi
2012-01-24 10:09 ` [RESEND 0/2] MFD: twl6040-codec: avoid reconfiguring the PLL Samuel Ortiz
2 siblings, 0 replies; 4+ messages in thread
From: Peter Ujfalusi @ 2012-01-14 19:58 UTC (permalink / raw)
To: Samuel Ortiz; +Cc: linux-kernel
Do not reconfigure the PLL in case it has been configured already
with the requested parameters.
In case of different PLL configuration do only the needed changes.
This can save considerable amount of time since we can avoid the
defined protocol (with delays) for the PLL configuration.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
---
drivers/mfd/twl6040-core.c | 125 ++++++++++++++++++++++++++------------------
1 files changed, 74 insertions(+), 51 deletions(-)
diff --git a/drivers/mfd/twl6040-core.c b/drivers/mfd/twl6040-core.c
index c2088f4..b2d8e51 100644
--- a/drivers/mfd/twl6040-core.c
+++ b/drivers/mfd/twl6040-core.c
@@ -326,23 +326,38 @@ int twl6040_set_pll(struct twl6040 *twl6040, int pll_id,
hppllctl = twl6040_reg_read(twl6040, TWL6040_REG_HPPLLCTL);
lppllctl = twl6040_reg_read(twl6040, TWL6040_REG_LPPLLCTL);
+ /* Force full reconfiguration when switching between PLL */
+ if (pll_id != twl6040->pll) {
+ twl6040->sysclk = 0;
+ twl6040->mclk = 0;
+ }
+
switch (pll_id) {
case TWL6040_SYSCLK_SEL_LPPLL:
/* low-power PLL divider */
- switch (freq_out) {
- case 17640000:
- lppllctl |= TWL6040_LPLLFIN;
- break;
- case 19200000:
- lppllctl &= ~TWL6040_LPLLFIN;
- break;
- default:
- dev_err(twl6040->dev,
- "freq_out %d not supported\n", freq_out);
- ret = -EINVAL;
- goto pll_out;
+ /* Change the sysclk configuration only if it has been canged */
+ if (twl6040->sysclk != freq_out) {
+ switch (freq_out) {
+ case 17640000:
+ lppllctl |= TWL6040_LPLLFIN;
+ break;
+ case 19200000:
+ lppllctl &= ~TWL6040_LPLLFIN;
+ break;
+ default:
+ dev_err(twl6040->dev,
+ "freq_out %d not supported\n",
+ freq_out);
+ ret = -EINVAL;
+ goto pll_out;
+ }
+ twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL,
+ lppllctl);
}
- twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);
+
+ /* The PLL in use has not been change, we can exit */
+ if (twl6040->pll == pll_id)
+ break;
switch (freq_in) {
case 32768:
@@ -373,48 +388,56 @@ int twl6040_set_pll(struct twl6040 *twl6040, int pll_id,
goto pll_out;
}
- hppllctl &= ~TWL6040_MCLK_MSK;
+ if (twl6040->mclk != freq_in) {
+ hppllctl &= ~TWL6040_MCLK_MSK;
+
+ switch (freq_in) {
+ case 12000000:
+ /* PLL enabled, active mode */
+ hppllctl |= TWL6040_MCLK_12000KHZ |
+ TWL6040_HPLLENA;
+ break;
+ case 19200000:
+ /*
+ * PLL disabled
+ * (enable PLL if MCLK jitter quality
+ * doesn't meet specification)
+ */
+ hppllctl |= TWL6040_MCLK_19200KHZ;
+ break;
+ case 26000000:
+ /* PLL enabled, active mode */
+ hppllctl |= TWL6040_MCLK_26000KHZ |
+ TWL6040_HPLLENA;
+ break;
+ case 38400000:
+ /* PLL enabled, active mode */
+ hppllctl |= TWL6040_MCLK_38400KHZ |
+ TWL6040_HPLLENA;
+ break;
+ default:
+ dev_err(twl6040->dev,
+ "freq_in %d not supported\n", freq_in);
+ ret = -EINVAL;
+ goto pll_out;
+ }
- switch (freq_in) {
- case 12000000:
- /* PLL enabled, active mode */
- hppllctl |= TWL6040_MCLK_12000KHZ |
- TWL6040_HPLLENA;
- break;
- case 19200000:
/*
- * PLL disabled
- * (enable PLL if MCLK jitter quality
- * doesn't meet specification)
+ * enable clock slicer to ensure input waveform is
+ * square
*/
- hppllctl |= TWL6040_MCLK_19200KHZ;
- break;
- case 26000000:
- /* PLL enabled, active mode */
- hppllctl |= TWL6040_MCLK_26000KHZ |
- TWL6040_HPLLENA;
- break;
- case 38400000:
- /* PLL enabled, active mode */
- hppllctl |= TWL6040_MCLK_38400KHZ |
- TWL6040_HPLLENA;
- break;
- default:
- dev_err(twl6040->dev,
- "freq_in %d not supported\n", freq_in);
- ret = -EINVAL;
- goto pll_out;
- }
+ hppllctl |= TWL6040_HPLLSQRENA;
- /* enable clock slicer to ensure input waveform is square */
- hppllctl |= TWL6040_HPLLSQRENA;
-
- twl6040_reg_write(twl6040, TWL6040_REG_HPPLLCTL, hppllctl);
- usleep_range(500, 700);
- lppllctl |= TWL6040_HPLLSEL;
- twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);
- lppllctl &= ~TWL6040_LPLLENA;
- twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);
+ twl6040_reg_write(twl6040, TWL6040_REG_HPPLLCTL,
+ hppllctl);
+ usleep_range(500, 700);
+ lppllctl |= TWL6040_HPLLSEL;
+ twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL,
+ lppllctl);
+ lppllctl &= ~TWL6040_LPLLENA;
+ twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL,
+ lppllctl);
+ }
break;
default:
dev_err(twl6040->dev, "unknown pll id %d\n", pll_id);
--
1.7.8.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [RESEND 0/2] MFD: twl6040-codec: avoid reconfiguring the PLL
2012-01-14 19:58 [RESEND 0/2] MFD: twl6040-codec: avoid reconfiguring the PLL Peter Ujfalusi
2012-01-14 19:58 ` [RESEND 1/2] MFD: twl6040-codec: Store mclk configuration Peter Ujfalusi
2012-01-14 19:58 ` [RESEND 2/2] MFD: twl6040-codec: Avoid PLL reconfiguration when not needed Peter Ujfalusi
@ 2012-01-24 10:09 ` Samuel Ortiz
2 siblings, 0 replies; 4+ messages in thread
From: Samuel Ortiz @ 2012-01-24 10:09 UTC (permalink / raw)
To: Peter Ujfalusi; +Cc: linux-kernel
Hi Peter,
On Sat, Jan 14, 2012 at 08:58:42PM +0100, Peter Ujfalusi wrote:
> Hello Samual,
>
> This series somehow got lost (the original series has been sent back in
> November).
My bad, sorry. Could you please use my sameo@linux.intel.com email address for
MFD patches ?
> It might be too late for 3.3 :(
I will try to send those 2 to Linus in a few days, let's see if he still takes
it or not.
Cheers,
Samuel.
--
Intel Open Source Technology Centre
http://oss.intel.com/
---------------------------------------------------------------------
Intel Corporation SAS (French simplified joint stock company)
Registered headquarters: "Les Montalets"- 2, rue de Paris,
92196 Meudon Cedex, France
Registration Number: 302 456 199 R.C.S. NANTERRE
Capital: 4,572,000 Euros
This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-01-24 10:02 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-01-14 19:58 [RESEND 0/2] MFD: twl6040-codec: avoid reconfiguring the PLL Peter Ujfalusi
2012-01-14 19:58 ` [RESEND 1/2] MFD: twl6040-codec: Store mclk configuration Peter Ujfalusi
2012-01-14 19:58 ` [RESEND 2/2] MFD: twl6040-codec: Avoid PLL reconfiguration when not needed Peter Ujfalusi
2012-01-24 10:09 ` [RESEND 0/2] MFD: twl6040-codec: avoid reconfiguring the PLL Samuel Ortiz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox