Re: [PATCH v8 4/7] omap3: pm: TWL5030 version checking

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



$subject - OMAP3: pm? this is mfd twl-core rt?

On Wed, Mar 2, 2011 at 19:00, Lesly A M <leslyam@xxxxxx> wrote:
>
> Added api to get the TWL5030 Si version from the IDCODE register.
Does this work for 4030 and TPS variants as well? since this is
twl-core - how about the impact to 6030?

> It is used for enabling the workaround for TWL errata 27.
>
> Signed-off-by: Lesly A M <leslyam@xxxxxx>
> Cc: Nishanth Menon <nm@xxxxxx>
> Cc: David Derrick <dderrick@xxxxxx>
> Cc: Samuel Ortiz <sameo@xxxxxxxxxxxxxxx>
> ---
>  drivers/mfd/twl-core.c  |   61 +++++++++++++++++++++++++++++++++++++++++++++++
>  include/linux/i2c/twl.h |   17 ++++++++++++-
>  2 files changed, 77 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
> index a35fa7d..5e706d7 100644
> --- a/drivers/mfd/twl-core.c
> +++ b/drivers/mfd/twl-core.c
> @@ -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)
>  {
> @@ -487,6 +490,61 @@ EXPORT_SYMBOL(twl_i2c_read_u8);
>
>  /*----------------------------------------------------------------------*/
>
> +/**
> + * twl_read_idcode_register - api to read the IDCODE register.
s/api/API ?
> + * @value: returns 32 bit IDCODE register value.
 Warning(drivers/mfd/twl-core.c:500): Excess function parameter
'value' description in 'twl_read_idcode_register'
please run scripts/kernel-doc on file when you add documentation to
ensure the documentation is in sync
> + *
> + * Unlocks the IDCODE register and read the 32 bit value.
> + */
> +int twl_read_idcode_register(void)
as previously mentioned:
drivers/mfd/twl-core.c:499:5: warning: symbol
'twl_read_idcode_register' was not declared. Should it be static?

> +{
> +       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\n");
> +               goto fail;
> +       }
Do you want to be consistent everywhere and provide err value in print as well?


> +
> +       err = twl_i2c_read(TWL4030_MODULE_INTBR, (u8 *)(&twl_idcode),
Why should I cast this if I read only u8, why not make twl_idcode as u8?
Also modify twl_get_si_type, twl_get_si_version to return appropriately?

> +                                               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\n");
> +               goto fail;
why goto fail here?
> +       }
> +fail:
> +       return err;
> +}
> +
> +/**
> + * twl_get_si_type - api to get TWL Si type.
> + *
> + * Api to get the TWL Si type from IDCODE value.
> + */
> +int twl_get_si_type(void)
> +{
> +       return TWL_SIL_TYPE(twl_idcode);
> +}
> +EXPORT_SYMBOL(twl_get_si_type);
EXPORT_SYMBOL_GPL instead?
> +
> +/**
> + * twl_get_si_version - api to get TWL Si version.
> + *
> + * Api to get the TWL Si version from IDCODE value.
> + */
> +int twl_get_si_version(void)
> +{
> +       return TWL_SIL_REV(twl_idcode);
> +}
> +EXPORT_SYMBOL(twl_get_si_version);
^^^^ here as well.
> +
>  static struct device *
>  add_numbered_child(unsigned chip, const char *name, int num,
>                void *pdata, unsigned pdata_len,
> @@ -1056,6 +1114,9 @@ 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 */
> +       twl_read_idcode_register();
> +
as already mentioned, what do we do when this fails?

>        /* load power event scripts */
>        if (twl_has_power() && pdata->power)
>                twl4030_power_init(pdata->power);
> diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
> index f4bd475..d3cc2ac 100644
> --- a/include/linux/i2c/twl.h
> +++ b/include/linux/i2c/twl.h
> @@ -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
how about 4030 and 6030?

>
>  #define TWL4030_CLASS_ID               0x4030
>  #define TWL6030_CLASS_ID               0x6030
> @@ -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_si_type(void);
> +int twl_get_si_version(void);
Please change the names of these APIs - what is Si?

> +
>  int twl6030_interrupt_unmask(u8 bit_mask, u8 offset);
>  int twl6030_interrupt_mask(u8 bit_mask, u8 offset);
>
> @@ -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 */
>
> @@ -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
rest of the file seems to have a convention:
REG_NAME why is this register with a different convention?




Regards,
Nishanth Menon
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux