Thara Gopinath <[email protected]> writes:
> This patch adds support in the twl4030 driver to hook up
> the API enabling smartreflex support on PMIC side with the
> smartreflex driver. Without this the OMAP smartreflex modules
> will not function.
>
> Signed-off-by: Thara Gopinath <[email protected]>
This one should be a separate patch with a subject something like
mfd: twl4030: add SmartReflex support
and the changelog should indicate its dependency on this SR/voltage
series.
Kevin
> ---
> drivers/mfd/twl-core.c | 7 +++++--
> drivers/mfd/twl4030-power.c | 29 +++++++++++++++++++++++++++++
> include/linux/i2c/twl.h | 1 +
> 3 files changed, 35 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
> index 720e099..677b903 100644
> --- a/drivers/mfd/twl-core.c
> +++ b/drivers/mfd/twl-core.c
> @@ -1009,8 +1009,11 @@ twl_probe(struct i2c_client *client, const struct
> i2c_device_id *id)
> clocks_init(&client->dev, pdata->clock);
>
> /* load power event scripts */
> - if (twl_has_power() && pdata->power)
> - twl4030_power_init(pdata->power);
> + if (twl_has_power()) {
> + twl4030_power_sr_init();
> + if (pdata->power)
> + twl4030_power_init(pdata->power);
> + }
>
> /* Maybe init the T2 Interrupt subsystem */
> if (client->irq
> diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
> index 7efa878..6d0ad2d 100644
> --- a/drivers/mfd/twl4030-power.c
> +++ b/drivers/mfd/twl4030-power.c
> @@ -31,6 +31,8 @@
>
> #include <asm/mach-types.h>
>
> +#include <plat/smartreflex.h>
> +
> static u8 twl4030_start_script_address = 0x2b;
>
> #define PWR_P1_SW_EVENTS 0x10
> @@ -63,6 +65,10 @@ static u8 twl4030_start_script_address = 0x2b;
> #define R_MEMORY_ADDRESS PHY_TO_OFF_PM_MASTER(0x59)
> #define R_MEMORY_DATA PHY_TO_OFF_PM_MASTER(0x5a)
>
> +/* Smartreflex Control */
> +#define R_DCDC_GLOBAL_CFG PHY_TO_OFF_PM_RECEIVER(0x61)
> +#define CFG_ENABLE_SRFLX 0x08
> +
> #define R_PROTECT_KEY 0x0E
> #define R_KEY_1 0xC0
> #define R_KEY_2 0x0C
> @@ -511,6 +517,29 @@ int twl4030_remove_script(u8 flags)
> return err;
> }
>
> +/* API to enable smrtreflex on Triton side */
> +static void twl4030_smartreflex_init(void)
> +{
> + int ret = 0;
> + u8 read_val;
> +
> + ret = twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &read_val,
> + R_DCDC_GLOBAL_CFG);
> + read_val |= CFG_ENABLE_SRFLX;
> + ret |= twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, read_val,
> + R_DCDC_GLOBAL_CFG);
> +}
> +
> +struct omap_smartreflex_pmic_data twl4030_sr_data = {
> + .sr_pmic_init = twl4030_smartreflex_init,
> +};
> +
> +void __init twl4030_power_sr_init()
> +{
> + /* Register the SR init API with the Smartreflex driver */
> + omap_sr_register_pmic(&twl4030_sr_data);
> +}
> +
> void __init twl4030_power_init(struct twl4030_power_data *twl4030_scripts)
> {
> int err = 0;
> diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
> index 6de90bf..b02011e 100644
> --- a/include/linux/i2c/twl.h
> +++ b/include/linux/i2c/twl.h
> @@ -550,6 +550,7 @@ struct twl4030_power_data {
> };
>
> extern void twl4030_power_init(struct twl4030_power_data *triton2_scripts);
> +extern void twl4030_power_sr_init(void);
> extern int twl4030_remove_script(u8 flags);
>
> struct twl4030_codec_audio_data {
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html