On Mon, 04 May 2015, Tony Lindgren wrote:
> * Tony Lindgren <t...@atomide.com> [150330 10:41]:
> > I noticed the PMIC configuration on 37xx-evm won't actually shut down
> > the voltages during off-idle. Turns out 37xx-evm needs the AC charger
> > state transitions disabled like we are doing for SDP and LDP in the
> > legacy booting case.
> > 
> > Let's fix this for device tree based booting by setting up the quirk
> > flag based on the compatible flag. And let's also use the existing
> > define for STARTON_CHG.
> > 
> > Note that SDP and EVM do not have the PMIC clken wired to gate the
> > the oscillator while LDP has.
> 
> Looks like this fix is still pending?

Applied now, thanks.

> Seems to require a minor update for the const changes, updated
> version below.
> 
> Regards,
> 
> Tony
> 
> 8< ------------------------
> From: Tony Lindgren <t...@atomide.com>
> Date: Mon, 27 Apr 2015 10:18:14 -0700
> Subject: [PATCH] mfd: twl4030-power: Fix pmic for boards that need AC charger
>  disabled
> 
> I noticed the PMIC configuration on 37xx-evm won't actually shut down
> the voltages during off-idle. Turns out 37xx-evm needs the AC charger
> state transitions disabled like we are doing for SDP and LDP in the
> legacy booting case.
> 
> Let's fix this for device tree based booting by setting up the quirk
> flag based on the compatible flag. And let's also use the existing
> define for STARTON_CHG.
> 
> Note that SDP and EVM do not have the PMIC clken wired to gate the
> the oscillator while LDP has.
> 
> Signed-off-by: Tony Lindgren <t...@atomide.com>
> 
> --- a/drivers/mfd/twl4030-power.c
> +++ b/drivers/mfd/twl4030-power.c
> @@ -264,7 +264,9 @@ out:
>       return err;
>  }
>  
> -static int twl4030_config_wakeup12_sequence(u8 address)
> +static int
> +twl4030_config_wakeup12_sequence(const struct twl4030_power_data *pdata,
> +                              u8 address)
>  {
>       int err = 0;
>       u8 data;
> @@ -293,13 +295,14 @@ static int twl4030_config_wakeup12_sequence(u8 address)
>       if (err)
>               goto out;
>  
> -     if (machine_is_omap_3430sdp() || machine_is_omap_ldp()) {
> +     if (pdata->ac_charger_quirk || machine_is_omap_3430sdp() ||
> +         machine_is_omap_ldp()) {
>               /* Disabling AC charger effect on sleep-active transitions */
>               err = twl_i2c_read_u8(TWL_MODULE_PM_MASTER, &data,
>                                     R_CFG_P1_TRANSITION);
>               if (err)
>                       goto out;
> -             data &= ~(1<<1);
> +             data &= ~STARTON_CHG;
>               err = twl_i2c_write_u8(TWL_MODULE_PM_MASTER, data,
>                                      R_CFG_P1_TRANSITION);
>               if (err)
> @@ -459,8 +462,9 @@ static int twl4030_configure_resource(struct 
> twl4030_resconfig *rconfig)
>       return 0;
>  }
>  
> -static int load_twl4030_script(struct twl4030_script *tscript,
> -            u8 address)
> +static int load_twl4030_script(const struct twl4030_power_data *pdata,
> +                            struct twl4030_script *tscript,
> +                            u8 address)
>  {
>       int err;
>       static int order;
> @@ -487,7 +491,7 @@ static int load_twl4030_script(struct twl4030_script 
> *tscript,
>               if (err)
>                       goto out;
>  
> -             err = twl4030_config_wakeup12_sequence(address);
> +             err = twl4030_config_wakeup12_sequence(pdata, address);
>               if (err)
>                       goto out;
>               order = 1;
> @@ -567,7 +571,7 @@ twl4030_power_configure_scripts(const struct 
> twl4030_power_data *pdata)
>       u8 address = twl4030_start_script_address;
>  
>       for (i = 0; i < pdata->num; i++) {
> -             err = load_twl4030_script(pdata->scripts[i], address);
> +             err = load_twl4030_script(pdata, pdata->scripts[i], address);
>               if (err)
>                       return err;
>               address += pdata->scripts[i]->size;
> @@ -829,6 +833,21 @@ static struct twl4030_power_data osc_off_idle = {
>       .board_config           = osc_off_rconfig,
>  };
>  
> +static struct twl4030_power_data omap3_idle_ac_quirk = {
> +     .scripts                = omap3_idle_scripts,
> +     .num                    = ARRAY_SIZE(omap3_idle_scripts),
> +     .resource_config        = omap3_idle_rconfig,
> +     .ac_charger_quirk       = true,
> +};
> +
> +static struct twl4030_power_data omap3_idle_ac_quirk_osc_off = {
> +     .scripts                = omap3_idle_scripts,
> +     .num                    = ARRAY_SIZE(omap3_idle_scripts),
> +     .resource_config        = omap3_idle_rconfig,
> +     .board_config           = osc_off_rconfig,
> +     .ac_charger_quirk       = true,
> +};
> +
>  static const struct of_device_id twl4030_power_of_match[] = {
>       {
>               .compatible = "ti,twl4030-power",
> @@ -845,6 +864,18 @@ static const struct of_device_id 
> twl4030_power_of_match[] = {
>               .compatible = "ti,twl4030-power-idle-osc-off",
>               .data = &osc_off_idle,
>       },
> +     {
> +             .compatible = "ti,twl4030-power-omap3-sdp",
> +             .data = &omap3_idle_ac_quirk,
> +     },
> +     {
> +             .compatible = "ti,twl4030-power-omap3-ldp",
> +             .data = &omap3_idle_ac_quirk_osc_off,
> +     },
> +     {
> +             .compatible = "ti,twl4030-power-omap3-evm",
> +             .data = &omap3_idle_ac_quirk,
> +     },
>       { },
>  };
>  MODULE_DEVICE_TABLE(of, twl4030_power_of_match);
> --- a/include/linux/i2c/twl.h
> +++ b/include/linux/i2c/twl.h
> @@ -675,6 +675,7 @@ struct twl4030_power_data {
>       struct twl4030_resconfig *board_config;
>  #define TWL4030_RESCONFIG_UNDEF      ((u8)-1)
>       bool use_poweroff;      /* Board is wired for TWL poweroff */
> +     bool ac_charger_quirk;  /* Disable AC charger on board */
>  };
>  
>  extern int twl4030_remove_script(u8 flags);

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to