[PATCH v5 2/3] omap_twl: Prevent SR to enable for am3517/am3505 devices

Koyamangalath, Abhilash abhilash.kv at ti.com
Tue Oct 11 03:59:01 EDT 2011


hi Kevin,
Apologies for the delayed response, I was on vacation.

On October 01, 2011 4:57 AM, Hilman, Kevin wrote:
>
> Abhilash,
>
> Kevin Hilman <khilman at ti.com> writes:
>
>> Abhilash K V <abhilash.kv at ti.com> writes:
>>
>>> From: Abhilash K V <abhilash.kv at ti.com>
>>>
>>> In case of AM3517 & AM3505, SmartReflex is not applicable so
>>> we must not enable it. So omap3_twl_init() is now not called
>>> when the processor does not support SR.
>>
>> This still isn't right.
>>
>> The reason to skip the TWL PMIC init is not because SR is not available
>> (TWL PMICs are quite usable without SR).  The reason to skip TWL PMIC
>> init is because the PMIC is not present.
[Abhilash K V] yes, I understand now.
>>
>> Instead, we need to fix up the TWL/PMIC init so that TWL-specifics are
>> only registered if a TWL driver is registered.
>>
>
> Below is a test patch that is a first pass at implementing what I
> suggested above.  I tested this (along with your patch 3/3) on a
> 3430/n900 after removing the omap_pmic_init() call frome the board file.
[Abhilash K V] I'll re-submit the patch with this change (i,e. if you've not already
pulled it into your branch).
>
> Can you let me know if this solves the problem you're seeing on
> platforms that don't have TWL PMICs?
[Abhilash K V] It should, I have validated on  am3517_evm
>
> After digging into this more, I'm increasingly aware that the way we're
> managing the init of PMIC stuff is a mess.  Guess I need another round
> of voltage layer cleanups to fix that up.
[Abhilash K V] True, and to add to this, the changes required to support only 
ONE voltage-domain for am35xx would be too many, I believe.
>
>
> Kevin
>
> From 1cd49077829a262155b96f8fdcdcdd6c54d83ed5 Mon Sep 17 00:00:00 2001
> From: Kevin Hilman <khilman at ti.com>
> Date: Fri, 30 Sep 2011 11:24:04 -0700
> Subject: [PATCH] ARM: OMAP2+: PM: only register TWL with voltage layer when
>  device is present
>
> Current code registers voltage layer details for TWL PMIC even when a TWL
> has not been registered.  Fix this to only register the TWL with voltage
> layer when the TWL PMIC is initialized by board-level code.
>
> Signed-off-by: Kevin Hilman <khilman at ti.com>
> ---
>  arch/arm/mach-omap2/pm.c         |    6 ++----
>  arch/arm/mach-omap2/twl-common.c |   11 +++++++++++
>  arch/arm/mach-omap2/twl-common.h |    3 +++
>  3 files changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c
> index d34fc52..602fc66 100644
> --- a/arch/arm/mach-omap2/pm.c
> +++ b/arch/arm/mach-omap2/pm.c
> @@ -23,6 +23,7 @@
>  #include "powerdomain.h"
>  #include "clockdomain.h"
>  #include "pm.h"
> +#include "twl-common.h"
>
>  static struct omap_device_pm_latency *pm_lats;
>
> @@ -251,11 +252,8 @@ postcore_initcall(omap2_common_pm_init);
>
>  static int __init omap2_common_pm_late_init(void)
>  {
> -       /* Init the OMAP TWL parameters */
> -       omap3_twl_init();
> -       omap4_twl_init();
> -
>        /* Init the voltage layer */
> +       omap_pmic_late_init();
>        omap_voltage_late_init();
>
>        /* Initialize the voltages */
> diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c
> index daa056e..47133fa 100644
> --- a/arch/arm/mach-omap2/twl-common.c
> +++ b/arch/arm/mach-omap2/twl-common.c
> @@ -30,6 +30,7 @@
>  #include <plat/usb.h>
>
>  #include "twl-common.h"
> +#include "pm.h"
>
>  static struct i2c_board_info __initdata pmic_i2c_board_info = {
>        .addr           = 0x48,
> @@ -48,6 +49,16 @@ void __init omap_pmic_init(int bus, u32 clkrate,
>        omap_register_i2c_bus(bus, clkrate, &pmic_i2c_board_info, 1);
>  }
>
> +void __init omap_pmic_late_init(void)
> +{
> +       /* Init the OMAP TWL parameters (if PMIC has been registerd) */
> +       if (!pmic_i2c_board_info.irq)
> +               return;
> +
> +       omap3_twl_init();
> +       omap4_twl_init();
> +}
> +
>  #if defined(CONFIG_ARCH_OMAP3)
>  static struct twl4030_usb_data omap3_usb_pdata = {
>        .usb_mode       = T2_USB_MODE_ULPI,
> diff --git a/arch/arm/mach-omap2/twl-common.h b/arch/arm/mach-omap2/twl-common.h
> index 5e83a5b..275dde8 100644
> --- a/arch/arm/mach-omap2/twl-common.h
> +++ b/arch/arm/mach-omap2/twl-common.h
> @@ -1,6 +1,8 @@
>  #ifndef __OMAP_PMIC_COMMON__
>  #define __OMAP_PMIC_COMMON__
>
> +#include <plat/irqs.h>
> +
>  #define TWL_COMMON_PDATA_USB           (1 << 0)
>  #define TWL_COMMON_PDATA_BCI           (1 << 1)
>  #define TWL_COMMON_PDATA_MADC          (1 << 2)
> @@ -30,6 +32,7 @@ struct twl4030_platform_data;
>
>  void omap_pmic_init(int bus, u32 clkrate, const char *pmic_type, int pmic_irq,
>                    struct twl4030_platform_data *pmic_data);
> +void omap_pmic_late_init(void);
>
>  static inline void omap2_pmic_init(const char *pmic_type,
>                                   struct twl4030_platform_data *pmic_data)
> --
> 1.7.6
>
>




More information about the linux-arm-kernel mailing list