Commit b09530ef authored by Richard Zhao's avatar Richard Zhao Committed by Samuel Ortiz

mfd: Make anatop register accessor more flexible and rename meaningfully

 - rename to anatop_read_reg and anatop_write_reg
 - anatop_read_reg directly return reg value
 - anatop_write_reg write reg with mask
Signed-off-by: default avatarRichard Zhao <richard.zhao@freescale.com>
Reviewed-by: default avatarYing-Chun Liu (PaulLiu) <paul.liu@linaro.org>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 08b4c118
...@@ -41,39 +41,26 @@ ...@@ -41,39 +41,26 @@
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/mfd/anatop.h> #include <linux/mfd/anatop.h>
u32 anatop_get_bits(struct anatop *adata, u32 addr, int bit_shift, u32 anatop_read_reg(struct anatop *adata, u32 addr)
int bit_width)
{ {
u32 val, mask; return readl(adata->ioreg + addr);
if (bit_width == 32)
mask = ~0;
else
mask = (1 << bit_width) - 1;
val = readl(adata->ioreg + addr);
val = (val >> bit_shift) & mask;
return val;
} }
EXPORT_SYMBOL_GPL(anatop_get_bits); EXPORT_SYMBOL_GPL(anatop_read_reg);
void anatop_set_bits(struct anatop *adata, u32 addr, int bit_shift, void anatop_write_reg(struct anatop *adata, u32 addr, u32 data, u32 mask)
int bit_width, u32 data)
{ {
u32 val, mask; u32 val;
if (bit_width == 32) data &= mask;
mask = ~0;
else
mask = (1 << bit_width) - 1;
spin_lock(&adata->reglock); spin_lock(&adata->reglock);
val = readl(adata->ioreg + addr) & ~(mask << bit_shift); val = readl(adata->ioreg + addr);
writel((data << bit_shift) | val, adata->ioreg + addr); val &= ~mask;
val |= data;
writel(val, adata->ioreg + addr);
spin_unlock(&adata->reglock); 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[] = { static const struct of_device_id of_anatop_match[] = {
{ .compatible = "fsl,imx6q-anatop", }, { .compatible = "fsl,imx6q-anatop", },
......
...@@ -47,7 +47,7 @@ static int anatop_set_voltage(struct regulator_dev *reg, int min_uV, ...@@ -47,7 +47,7 @@ static int anatop_set_voltage(struct regulator_dev *reg, int min_uV,
int max_uV, unsigned *selector) int max_uV, unsigned *selector)
{ {
struct anatop_regulator *anatop_reg = rdev_get_drvdata(reg); struct anatop_regulator *anatop_reg = rdev_get_drvdata(reg);
u32 val, sel; u32 val, sel, mask;
int uv; int uv;
uv = min_uV; uv = min_uV;
...@@ -71,11 +71,10 @@ static int anatop_set_voltage(struct regulator_dev *reg, int min_uV, ...@@ -71,11 +71,10 @@ static int anatop_set_voltage(struct regulator_dev *reg, int min_uV,
val = anatop_reg->min_bit_val + sel; val = anatop_reg->min_bit_val + sel;
*selector = sel; *selector = sel;
dev_dbg(&reg->dev, "%s: calculated val %d\n", __func__, val); dev_dbg(&reg->dev, "%s: calculated val %d\n", __func__, val);
anatop_set_bits(anatop_reg->mfd, mask = ((1 << anatop_reg->vol_bit_width) - 1) <<
anatop_reg->control_reg, anatop_reg->vol_bit_shift;
anatop_reg->vol_bit_shift, val <<= anatop_reg->vol_bit_shift;
anatop_reg->vol_bit_width, anatop_write_reg(anatop_reg->mfd, anatop_reg->control_reg, val, mask);
val);
return 0; return 0;
} }
...@@ -88,10 +87,9 @@ static int anatop_get_voltage_sel(struct regulator_dev *reg) ...@@ -88,10 +87,9 @@ static int anatop_get_voltage_sel(struct regulator_dev *reg)
if (!anatop_reg->control_reg) if (!anatop_reg->control_reg)
return -ENOTSUPP; return -ENOTSUPP;
val = anatop_get_bits(anatop_reg->mfd, val = anatop_read_reg(anatop_reg->mfd, anatop_reg->control_reg);
anatop_reg->control_reg, val = (val & ((1 << anatop_reg->vol_bit_width) - 1)) >>
anatop_reg->vol_bit_shift, anatop_reg->vol_bit_shift;
anatop_reg->vol_bit_width);
return val - anatop_reg->min_bit_val; return val - anatop_reg->min_bit_val;
} }
......
...@@ -34,7 +34,7 @@ struct anatop { ...@@ -34,7 +34,7 @@ struct anatop {
spinlock_t reglock; spinlock_t reglock;
}; };
extern u32 anatop_get_bits(struct anatop *, u32, int, int); extern u32 anatop_read_reg(struct anatop *, u32);
extern void anatop_set_bits(struct anatop *, u32, int, int, u32); extern void anatop_write_reg(struct anatop *, u32, u32, u32);
#endif /* __LINUX_MFD_ANATOP_H */ #endif /* __LINUX_MFD_ANATOP_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment