Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 260703
b: refs/heads/master
c: cfb7a33
h: refs/heads/master
i:
  260701: 9f4b541
  260699: 33f7695
  260695: 5064553
  260687: 6a96eda
  260671: 578357a
v: v3
  • Loading branch information
Peter Ujfalusi committed Jul 7, 2011
1 parent 681a7f1 commit cb68c4d
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 25 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 753621c2155bd49bff7d5d3844b3ddc203e44a06
refs/heads/master: cfb7a33bea259d2d72a64adcb3de28532170dc25
26 changes: 13 additions & 13 deletions trunk/drivers/mfd/twl6040-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,8 @@ int twl6040_power(struct twl6040 *twl6040, int on)
goto out;
}
}
twl6040->pll = TWL6040_LPPLL_ID;
/* Default PLL configuration after power up */
twl6040->pll = TWL6040_SYSCLK_SEL_LPPLL;
twl6040->sysclk = 19200000;
} else {
/* already powered-down */
Expand All @@ -294,7 +295,6 @@ int twl6040_power(struct twl6040 *twl6040, int on)
/* use manual power-down sequence */
twl6040_power_down(twl6040);
}
twl6040->pll = TWL6040_NOPLL_ID;
twl6040->sysclk = 0;
}

Expand All @@ -304,7 +304,7 @@ int twl6040_power(struct twl6040 *twl6040, int on)
}
EXPORT_SYMBOL(twl6040_power);

int twl6040_set_pll(struct twl6040 *twl6040, enum twl6040_pll_id id,
int twl6040_set_pll(struct twl6040 *twl6040, int pll_id,
unsigned int freq_in, unsigned int freq_out)
{
u8 hppllctl, lppllctl;
Expand All @@ -315,8 +315,8 @@ int twl6040_set_pll(struct twl6040 *twl6040, enum twl6040_pll_id id,
hppllctl = twl6040_reg_read(twl6040, TWL6040_REG_HPPLLCTL);
lppllctl = twl6040_reg_read(twl6040, TWL6040_REG_LPPLLCTL);

switch (id) {
case TWL6040_LPPLL_ID:
switch (pll_id) {
case TWL6040_SYSCLK_SEL_LPPLL:
/* low-power PLL divider */
switch (freq_out) {
case 17640000:
Expand Down Expand Up @@ -352,10 +352,8 @@ int twl6040_set_pll(struct twl6040 *twl6040, enum twl6040_pll_id id,
ret = -EINVAL;
goto pll_out;
}

twl6040->pll = TWL6040_LPPLL_ID;
break;
case TWL6040_HPPLL_ID:
case TWL6040_SYSCLK_SEL_HPPLL:
/* high-performance PLL can provide only 19.2 MHz */
if (freq_out != 19200000) {
dev_err(&twl6040_dev->dev,
Expand Down Expand Up @@ -406,26 +404,28 @@ int twl6040_set_pll(struct twl6040 *twl6040, enum twl6040_pll_id id,
twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);
lppllctl &= ~TWL6040_LPLLENA;
twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl);

twl6040->pll = TWL6040_HPPLL_ID;
break;
default:
dev_err(&twl6040_dev->dev, "unknown pll id %d\n", id);
dev_err(&twl6040_dev->dev, "unknown pll id %d\n", pll_id);
ret = -EINVAL;
goto pll_out;
}

twl6040->sysclk = freq_out;
twl6040->pll = pll_id;

pll_out:
mutex_unlock(&twl6040->mutex);
return ret;
}
EXPORT_SYMBOL(twl6040_set_pll);

enum twl6040_pll_id twl6040_get_pll(struct twl6040 *twl6040)
int twl6040_get_pll(struct twl6040 *twl6040)
{
return twl6040->pll;
if (twl6040->power_count)
return twl6040->pll;
else
return -ENODEV;
}
EXPORT_SYMBOL(twl6040_get_pll);

Expand Down
17 changes: 6 additions & 11 deletions trunk/include/linux/mfd/twl6040.h
Original file line number Diff line number Diff line change
Expand Up @@ -165,9 +165,6 @@
#define TWL6040_RESETSPLIT 0x04
#define TWL6040_INTCLRMODE 0x08

#define TWL6040_SYSCLK_SEL_LPPLL 1
#define TWL6040_SYSCLK_SEL_HPPLL 2

/* STATUS (0x2E) fields */

#define TWL6040_PLUGCOMP 0x02
Expand All @@ -188,11 +185,9 @@
#define TWL6040_IRQ_VIB 4
#define TWL6040_IRQ_READY 5

enum twl6040_pll_id {
TWL6040_NOPLL_ID,
TWL6040_LPPLL_ID,
TWL6040_HPPLL_ID,
};
/* PLL selection */
#define TWL6040_SYSCLK_SEL_LPPLL 0
#define TWL6040_SYSCLK_SEL_HPPLL 1

struct twl6040 {
struct device *dev;
Expand All @@ -206,7 +201,7 @@ struct twl6040 {
int power_count;
int rev;

enum twl6040_pll_id pll;
int pll;
unsigned int sysclk;

unsigned int irq;
Expand All @@ -223,9 +218,9 @@ int twl6040_set_bits(struct twl6040 *twl6040, unsigned int reg,
int twl6040_clear_bits(struct twl6040 *twl6040, unsigned int reg,
u8 mask);
int twl6040_power(struct twl6040 *twl6040, int on);
int twl6040_set_pll(struct twl6040 *twl6040, enum twl6040_pll_id id,
int twl6040_set_pll(struct twl6040 *twl6040, int pll_id,
unsigned int freq_in, unsigned int freq_out);
enum twl6040_pll_id twl6040_get_pll(struct twl6040 *twl6040);
int twl6040_get_pll(struct twl6040 *twl6040);
unsigned int twl6040_get_sysclk(struct twl6040 *twl6040);
int twl6040_irq_init(struct twl6040 *twl6040);
void twl6040_irq_exit(struct twl6040 *twl6040);
Expand Down

0 comments on commit cb68c4d

Please sign in to comment.