Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 308759
b: refs/heads/master
c: b09530e
h: refs/heads/master
i:
  308757: efd4da9
  308755: c40292f
  308751: 4ac7fde
v: v3
  • Loading branch information
Richard Zhao authored and Samuel Ortiz committed May 20, 2012
1 parent faf5102 commit 1989160
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 37 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: 08b4c118af35d4d67eca2052aaa8d4a5f7d0aecb
refs/heads/master: b09530ef844f0bf29ed3677080c02b179be84818
35 changes: 11 additions & 24 deletions trunk/drivers/mfd/anatop-mfd.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,39 +41,26 @@
#include <linux/of_address.h>
#include <linux/mfd/anatop.h>

u32 anatop_get_bits(struct anatop *adata, u32 addr, int bit_shift,
int bit_width)
u32 anatop_read_reg(struct anatop *adata, u32 addr)
{
u32 val, mask;

if (bit_width == 32)
mask = ~0;
else
mask = (1 << bit_width) - 1;

val = readl(adata->ioreg + addr);
val = (val >> bit_shift) & mask;

return val;
return readl(adata->ioreg + addr);
}
EXPORT_SYMBOL_GPL(anatop_get_bits);
EXPORT_SYMBOL_GPL(anatop_read_reg);

void anatop_set_bits(struct anatop *adata, u32 addr, int bit_shift,
int bit_width, u32 data)
void anatop_write_reg(struct anatop *adata, u32 addr, u32 data, u32 mask)
{
u32 val, mask;
u32 val;

if (bit_width == 32)
mask = ~0;
else
mask = (1 << bit_width) - 1;
data &= mask;

spin_lock(&adata->reglock);
val = readl(adata->ioreg + addr) & ~(mask << bit_shift);
writel((data << bit_shift) | val, adata->ioreg + addr);
val = readl(adata->ioreg + addr);
val &= ~mask;
val |= data;
writel(val, adata->ioreg + addr);
spin_unlock(&adata->reglock);
}
EXPORT_SYMBOL_GPL(anatop_set_bits);
EXPORT_SYMBOL_GPL(anatop_write_reg);

static const struct of_device_id of_anatop_match[] = {
{ .compatible = "fsl,imx6q-anatop", },
Expand Down
18 changes: 8 additions & 10 deletions trunk/drivers/regulator/anatop-regulator.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ static int anatop_set_voltage(struct regulator_dev *reg, int min_uV,
int max_uV, unsigned *selector)
{
struct anatop_regulator *anatop_reg = rdev_get_drvdata(reg);
u32 val, sel;
u32 val, sel, mask;
int uv;

uv = min_uV;
Expand All @@ -71,11 +71,10 @@ static int anatop_set_voltage(struct regulator_dev *reg, int min_uV,
val = anatop_reg->min_bit_val + sel;
*selector = sel;
dev_dbg(&reg->dev, "%s: calculated val %d\n", __func__, val);
anatop_set_bits(anatop_reg->mfd,
anatop_reg->control_reg,
anatop_reg->vol_bit_shift,
anatop_reg->vol_bit_width,
val);
mask = ((1 << anatop_reg->vol_bit_width) - 1) <<
anatop_reg->vol_bit_shift;
val <<= anatop_reg->vol_bit_shift;
anatop_write_reg(anatop_reg->mfd, anatop_reg->control_reg, val, mask);

return 0;
}
Expand All @@ -88,10 +87,9 @@ static int anatop_get_voltage_sel(struct regulator_dev *reg)
if (!anatop_reg->control_reg)
return -ENOTSUPP;

val = anatop_get_bits(anatop_reg->mfd,
anatop_reg->control_reg,
anatop_reg->vol_bit_shift,
anatop_reg->vol_bit_width);
val = anatop_read_reg(anatop_reg->mfd, anatop_reg->control_reg);
val = (val & ((1 << anatop_reg->vol_bit_width) - 1)) >>
anatop_reg->vol_bit_shift;

return val - anatop_reg->min_bit_val;
}
Expand Down
4 changes: 2 additions & 2 deletions trunk/include/linux/mfd/anatop.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ struct anatop {
spinlock_t reglock;
};

extern u32 anatop_get_bits(struct anatop *, u32, int, int);
extern void anatop_set_bits(struct anatop *, u32, int, int, u32);
extern u32 anatop_read_reg(struct anatop *, u32);
extern void anatop_write_reg(struct anatop *, u32, u32, u32);

#endif /* __LINUX_MFD_ANATOP_H */

0 comments on commit 1989160

Please sign in to comment.