aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@ti.com>2011-07-04 03:28:28 -0400
committerPeter Ujfalusi <peter.ujfalusi@ti.com>2011-07-07 07:23:46 -0400
commitcfb7a33bea259d2d72a64adcb3de28532170dc25 (patch)
treec7faae49b5bf6f5396207591ffde2dd1f3d724e8
parent753621c2155bd49bff7d5d3844b3ddc203e44a06 (diff)
MFD: twl6040: Remove enum for PLL tracking
There is no need to have two different types for tracking the selected PLL. Use only the defines, when dealing with the PLLs. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Acked-by: Samuel Ortiz <sameo@linux.intel.com>
-rw-r--r--drivers/mfd/twl6040-core.c26
-rw-r--r--include/linux/mfd/twl6040.h17
2 files changed, 19 insertions, 24 deletions
diff --git a/drivers/mfd/twl6040-core.c b/drivers/mfd/twl6040-core.c
index 6843977f4e87..24d436c2fe4a 100644
--- a/drivers/mfd/twl6040-core.c
+++ b/drivers/mfd/twl6040-core.c
@@ -270,7 +270,8 @@ int twl6040_power(struct twl6040 *twl6040, int on)
270 goto out; 270 goto out;
271 } 271 }
272 } 272 }
273 twl6040->pll = TWL6040_LPPLL_ID; 273 /* Default PLL configuration after power up */
274 twl6040->pll = TWL6040_SYSCLK_SEL_LPPLL;
274 twl6040->sysclk = 19200000; 275 twl6040->sysclk = 19200000;
275 } else { 276 } else {
276 /* already powered-down */ 277 /* already powered-down */
@@ -294,7 +295,6 @@ int twl6040_power(struct twl6040 *twl6040, int on)
294 /* use manual power-down sequence */ 295 /* use manual power-down sequence */
295 twl6040_power_down(twl6040); 296 twl6040_power_down(twl6040);
296 } 297 }
297 twl6040->pll = TWL6040_NOPLL_ID;
298 twl6040->sysclk = 0; 298 twl6040->sysclk = 0;
299 } 299 }
300 300
@@ -304,7 +304,7 @@ out:
304} 304}
305EXPORT_SYMBOL(twl6040_power); 305EXPORT_SYMBOL(twl6040_power);
306 306
307int twl6040_set_pll(struct twl6040 *twl6040, enum twl6040_pll_id id, 307int twl6040_set_pll(struct twl6040 *twl6040, int pll_id,
308 unsigned int freq_in, unsigned int freq_out) 308 unsigned int freq_in, unsigned int freq_out)
309{ 309{
310 u8 hppllctl, lppllctl; 310 u8 hppllctl, lppllctl;
@@ -315,8 +315,8 @@ int twl6040_set_pll(struct twl6040 *twl6040, enum twl6040_pll_id id,
315 hppllctl = twl6040_reg_read(twl6040, TWL6040_REG_HPPLLCTL); 315 hppllctl = twl6040_reg_read(twl6040, TWL6040_REG_HPPLLCTL);
316 lppllctl = twl6040_reg_read(twl6040, TWL6040_REG_LPPLLCTL); 316 lppllctl = twl6040_reg_read(twl6040, TWL6040_REG_LPPLLCTL);
317 317
318 switch (id) { 318 switch (pll_id) {
319 case TWL6040_LPPLL_ID: 319 case TWL6040_SYSCLK_SEL_LPPLL:
320 /* low-power PLL divider */ 320 /* low-power PLL divider */
321 switch (freq_out) { 321 switch (freq_out) {
322 case 17640000: 322 case 17640000:
@@ -352,10 +352,8 @@ int twl6040_set_pll(struct twl6040 *twl6040, enum twl6040_pll_id id,
352 ret = -EINVAL; 352 ret = -EINVAL;
353 goto pll_out; 353 goto pll_out;
354 } 354 }
355
356 twl6040->pll = TWL6040_LPPLL_ID;
357 break; 355 break;
358 case TWL6040_HPPLL_ID: 356 case TWL6040_SYSCLK_SEL_HPPLL:
359 /* high-performance PLL can provide only 19.2 MHz */ 357 /* high-performance PLL can provide only 19.2 MHz */
360 if (freq_out != 19200000) { 358 if (freq_out != 19200000) {
361 dev_err(&twl6040_dev->dev, 359 dev_err(&twl6040_dev->dev,
@@ -406,16 +404,15 @@ int twl6040_set_pll(struct twl6040 *twl6040, enum twl6040_pll_id id,
406 twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl); 404 twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);
407 lppllctl &= ~TWL6040_LPLLENA; 405 lppllctl &= ~TWL6040_LPLLENA;
408 twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl); 406 twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);
409
410 twl6040->pll = TWL6040_HPPLL_ID;
411 break; 407 break;
412 default: 408 default:
413 dev_err(&twl6040_dev->dev, "unknown pll id %d\n", id); 409 dev_err(&twl6040_dev->dev, "unknown pll id %d\n", pll_id);
414 ret = -EINVAL; 410 ret = -EINVAL;
415 goto pll_out; 411 goto pll_out;
416 } 412 }
417 413
418 twl6040->sysclk = freq_out; 414 twl6040->sysclk = freq_out;
415 twl6040->pll = pll_id;
419 416
420pll_out: 417pll_out:
421 mutex_unlock(&twl6040->mutex); 418 mutex_unlock(&twl6040->mutex);
@@ -423,9 +420,12 @@ pll_out:
423} 420}
424EXPORT_SYMBOL(twl6040_set_pll); 421EXPORT_SYMBOL(twl6040_set_pll);
425 422
426enum twl6040_pll_id twl6040_get_pll(struct twl6040 *twl6040) 423int twl6040_get_pll(struct twl6040 *twl6040)
427{ 424{
428 return twl6040->pll; 425 if (twl6040->power_count)
426 return twl6040->pll;
427 else
428 return -ENODEV;
429} 429}
430EXPORT_SYMBOL(twl6040_get_pll); 430EXPORT_SYMBOL(twl6040_get_pll);
431 431
diff --git a/include/linux/mfd/twl6040.h b/include/linux/mfd/twl6040.h
index df890a247c36..4c806f6d663e 100644
--- a/include/linux/mfd/twl6040.h
+++ b/include/linux/mfd/twl6040.h
@@ -165,9 +165,6 @@
165#define TWL6040_RESETSPLIT 0x04 165#define TWL6040_RESETSPLIT 0x04
166#define TWL6040_INTCLRMODE 0x08 166#define TWL6040_INTCLRMODE 0x08
167 167
168#define TWL6040_SYSCLK_SEL_LPPLL 1
169#define TWL6040_SYSCLK_SEL_HPPLL 2
170
171/* STATUS (0x2E) fields */ 168/* STATUS (0x2E) fields */
172 169
173#define TWL6040_PLUGCOMP 0x02 170#define TWL6040_PLUGCOMP 0x02
@@ -188,11 +185,9 @@
188#define TWL6040_IRQ_VIB 4 185#define TWL6040_IRQ_VIB 4
189#define TWL6040_IRQ_READY 5 186#define TWL6040_IRQ_READY 5
190 187
191enum twl6040_pll_id { 188/* PLL selection */
192 TWL6040_NOPLL_ID, 189#define TWL6040_SYSCLK_SEL_LPPLL 0
193 TWL6040_LPPLL_ID, 190#define TWL6040_SYSCLK_SEL_HPPLL 1
194 TWL6040_HPPLL_ID,
195};
196 191
197struct twl6040 { 192struct twl6040 {
198 struct device *dev; 193 struct device *dev;
@@ -206,7 +201,7 @@ struct twl6040 {
206 int power_count; 201 int power_count;
207 int rev; 202 int rev;
208 203
209 enum twl6040_pll_id pll; 204 int pll;
210 unsigned int sysclk; 205 unsigned int sysclk;
211 206
212 unsigned int irq; 207 unsigned int irq;
@@ -223,9 +218,9 @@ int twl6040_set_bits(struct twl6040 *twl6040, unsigned int reg,
223int twl6040_clear_bits(struct twl6040 *twl6040, unsigned int reg, 218int twl6040_clear_bits(struct twl6040 *twl6040, unsigned int reg,
224 u8 mask); 219 u8 mask);
225int twl6040_power(struct twl6040 *twl6040, int on); 220int twl6040_power(struct twl6040 *twl6040, int on);
226int twl6040_set_pll(struct twl6040 *twl6040, enum twl6040_pll_id id, 221int twl6040_set_pll(struct twl6040 *twl6040, int pll_id,
227 unsigned int freq_in, unsigned int freq_out); 222 unsigned int freq_in, unsigned int freq_out);
228enum twl6040_pll_id twl6040_get_pll(struct twl6040 *twl6040); 223int twl6040_get_pll(struct twl6040 *twl6040);
229unsigned int twl6040_get_sysclk(struct twl6040 *twl6040); 224unsigned int twl6040_get_sysclk(struct twl6040 *twl6040);
230int twl6040_irq_init(struct twl6040 *twl6040); 225int twl6040_irq_init(struct twl6040 *twl6040);
231void twl6040_irq_exit(struct twl6040 *twl6040); 226void twl6040_irq_exit(struct twl6040 *twl6040);