Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 251928
b: refs/heads/master
c: ca972d1
h: refs/heads/master
v: v3
  • Loading branch information
Lesly A M authored and Samuel Ortiz committed May 26, 2011
1 parent 7d419ff commit 958872e
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 2 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: d7ac829fa30d44d6553a0ead41f47bb92ee4d73e
refs/heads/master: ca972d13382436530896e90591e2793e7a9e7eba
62 changes: 62 additions & 0 deletions trunk/drivers/mfd/twl-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,9 @@
/* is driver active, bound to a chip? */
static bool inuse;

/* TWL IDCODE Register value */
static u32 twl_idcode;

static unsigned int twl_id;
unsigned int twl_rev(void)
{
Expand Down Expand Up @@ -487,6 +490,58 @@ EXPORT_SYMBOL(twl_i2c_read_u8);

/*----------------------------------------------------------------------*/

/**
* twl_read_idcode_register - API to read the IDCODE register.
*
* Unlocks the IDCODE register and read the 32 bit value.
*/
static int twl_read_idcode_register(void)
{
int err;

err = twl_i2c_write_u8(TWL4030_MODULE_INTBR, TWL_EEPROM_R_UNLOCK,
REG_UNLOCK_TEST_REG);
if (err) {
pr_err("TWL4030 Unable to unlock IDCODE registers -%d\n", err);
goto fail;
}

err = twl_i2c_read(TWL4030_MODULE_INTBR, (u8 *)(&twl_idcode),
REG_IDCODE_7_0, 4);
if (err) {
pr_err("TWL4030: unable to read IDCODE -%d\n", err);
goto fail;
}

err = twl_i2c_write_u8(TWL4030_MODULE_INTBR, 0x0, REG_UNLOCK_TEST_REG);
if (err)
pr_err("TWL4030 Unable to relock IDCODE registers -%d\n", err);
fail:
return err;
}

/**
* twl_get_type - API to get TWL Si type.
*
* Api to get the TWL Si type from IDCODE value.
*/
int twl_get_type(void)
{
return TWL_SIL_TYPE(twl_idcode);
}
EXPORT_SYMBOL_GPL(twl_get_type);

/**
* twl_get_version - API to get TWL Si version.
*
* Api to get the TWL Si version from IDCODE value.
*/
int twl_get_version(void)
{
return TWL_SIL_REV(twl_idcode);
}
EXPORT_SYMBOL_GPL(twl_get_version);

static struct device *
add_numbered_child(unsigned chip, const char *name, int num,
void *pdata, unsigned pdata_len,
Expand Down Expand Up @@ -1014,6 +1069,7 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
unsigned i;
struct twl4030_platform_data *pdata = client->dev.platform_data;
u8 temp;
int ret = 0;

if (!pdata) {
dev_dbg(&client->dev, "no platform data?\n");
Expand Down Expand Up @@ -1060,6 +1116,12 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
/* setup clock framework */
clocks_init(&client->dev, pdata->clock);

/* read TWL IDCODE Register */
if (twl_id == TWL4030_CLASS_ID) {
ret = twl_read_idcode_register();
WARN(ret < 0, "Error: reading twl_idcode register value\n");
}

/* load power event scripts */
if (twl_has_power() && pdata->power)
twl4030_power_init(pdata->power);
Expand Down
17 changes: 16 additions & 1 deletion trunk/include/linux/i2c/twl.h
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,12 @@
#define MMC_PU (0x1 << 3)
#define MMC_PD (0x1 << 2)


#define TWL_SIL_TYPE(rev) ((rev) & 0x00FFFFFF)
#define TWL_SIL_REV(rev) ((rev) >> 24)
#define TWL_SIL_5030 0x09002F
#define TWL5030_REV_1_0 0x00
#define TWL5030_REV_1_1 0x10
#define TWL5030_REV_1_2 0x30

#define TWL4030_CLASS_ID 0x4030
#define TWL6030_CLASS_ID 0x6030
Expand Down Expand Up @@ -180,6 +185,9 @@ int twl_i2c_read_u8(u8 mod_no, u8 *val, u8 reg);
int twl_i2c_write(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);

int twl_get_type(void);
int twl_get_version(void);

int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
int twl6030_interrupt_mask(u8 bit_mask, u8 offset);

Expand Down Expand Up @@ -279,7 +287,12 @@ static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
*(Use TWL_4030_MODULE_INTBR)
*/

#define REG_IDCODE_7_0 0x00
#define REG_IDCODE_15_8 0x01
#define REG_IDCODE_16_23 0x02
#define REG_IDCODE_31_24 0x03
#define REG_GPPUPDCTR1 0x0F
#define REG_UNLOCK_TEST_REG 0x12

/*I2C1 and I2C4(SR) SDA/SCL pull-up control bits */

Expand All @@ -288,6 +301,8 @@ static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
#define SR_I2C_SCL_CTRL_PU BIT(4)
#define SR_I2C_SDA_CTRL_PU BIT(6)

#define TWL_EEPROM_R_UNLOCK 0x49

/*----------------------------------------------------------------------*/

/*
Expand Down

0 comments on commit 958872e

Please sign in to comment.