Skip to content

Commit

Permalink
Merge branch 'topic/for-asoc'
Browse files Browse the repository at this point in the history
  • Loading branch information
Samuel Ortiz committed Sep 2, 2013
2 parents 6228218 + c6f3925 commit f4388ca
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 24 deletions.
23 changes: 13 additions & 10 deletions drivers/mfd/davinci_voicecodec.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,16 @@
#include <linux/delay.h>
#include <linux/io.h>
#include <linux/clk.h>
#include <linux/regmap.h>

#include <sound/pcm.h>

#include <linux/mfd/davinci_voicecodec.h>

u32 davinci_vc_read(struct davinci_vc *davinci_vc, int reg)
{
return __raw_readl(davinci_vc->base + reg);
}

void davinci_vc_write(struct davinci_vc *davinci_vc,
int reg, u32 val)
{
__raw_writel(val, davinci_vc->base + reg);
}
static struct regmap_config davinci_vc_regmap = {
.reg_bits = 32,
.val_bits = 32,
};

static int __init davinci_vc_probe(struct platform_device *pdev)
{
Expand Down Expand Up @@ -74,6 +69,14 @@ static int __init davinci_vc_probe(struct platform_device *pdev)
goto fail;
}

davinci_vc->regmap = devm_regmap_init_mmio(&pdev->dev,
davinci_vc->base,
&davinci_vc_regmap);
if (IS_ERR(davinci_vc->regmap)) {
ret = PTR_ERR(davinci_vc->regmap);
goto fail;
}

res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
if (!res) {
dev_err(&pdev->dev, "no DMA resource\n");
Expand Down
43 changes: 30 additions & 13 deletions drivers/mfd/twl6040.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,9 @@ int twl6040_reg_read(struct twl6040 *twl6040, unsigned int reg)
int ret;
unsigned int val;

/* Vibra control registers from cache */
if (unlikely(reg == TWL6040_REG_VIBCTLL ||
reg == TWL6040_REG_VIBCTLR)) {
val = twl6040->vibra_ctrl_cache[VIBRACTRL_MEMBER(reg)];
} else {
ret = regmap_read(twl6040->regmap, reg, &val);
if (ret < 0)
return ret;
}
ret = regmap_read(twl6040->regmap, reg, &val);
if (ret < 0)
return ret;

return val;
}
Expand All @@ -77,9 +71,6 @@ int twl6040_reg_write(struct twl6040 *twl6040, unsigned int reg, u8 val)
int ret;

ret = regmap_write(twl6040->regmap, reg, val);
/* Cache the vibra control registers */
if (reg == TWL6040_REG_VIBCTLL || reg == TWL6040_REG_VIBCTLR)
twl6040->vibra_ctrl_cache[VIBRACTRL_MEMBER(reg)] = val;

return ret;
}
Expand Down Expand Up @@ -456,9 +447,20 @@ EXPORT_SYMBOL(twl6040_get_sysclk);
/* Get the combined status of the vibra control register */
int twl6040_get_vibralr_status(struct twl6040 *twl6040)
{
unsigned int reg;
int ret;
u8 status;

status = twl6040->vibra_ctrl_cache[0] | twl6040->vibra_ctrl_cache[1];
ret = regmap_read(twl6040->regmap, TWL6040_REG_VIBCTLL, &reg);
if (ret != 0)
return ret;
status = reg;

ret = regmap_read(twl6040->regmap, TWL6040_REG_VIBCTLR, &reg);
if (ret != 0)
return ret;
status |= reg;

status &= (TWL6040_VIBENA | TWL6040_VIBSEL);

return status;
Expand All @@ -485,12 +487,27 @@ static bool twl6040_readable_reg(struct device *dev, unsigned int reg)
return true;
}

static bool twl6040_volatile_reg(struct device *dev, unsigned int reg)
{
switch (reg) {
case TWL6040_REG_VIBCTLL:
case TWL6040_REG_VIBCTLR:
case TWL6040_REG_INTMR:
return false;
default:
return true;
}
}

static struct regmap_config twl6040_regmap_config = {
.reg_bits = 8,
.val_bits = 8,
.max_register = TWL6040_REG_STATUS, /* 0x2e */

.readable_reg = twl6040_readable_reg,
.volatile_reg = twl6040_volatile_reg,

.cache_type = REGCACHE_RBTREE,
};

static const struct regmap_irq twl6040_irqs[] = {
Expand Down
3 changes: 3 additions & 0 deletions include/linux/mfd/davinci_voicecodec.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@

#include <mach/hardware.h>

struct regmap;

/*
* Register values.
*/
Expand Down Expand Up @@ -113,6 +115,7 @@ struct davinci_vc {

/* Memory resources */
void __iomem *base;
struct regmap *regmap;

/* MFD cells */
struct mfd_cell cells[DAVINCI_VC_CELLS];
Expand Down
1 change: 0 additions & 1 deletion include/linux/mfd/twl6040.h
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,6 @@ struct twl6040 {
int audpwron;
int power_count;
int rev;
u8 vibra_ctrl_cache[2];

/* PLL configuration */
int pll;
Expand Down

0 comments on commit f4388ca

Please sign in to comment.