All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27
@ 2011-05-06 13:17 Lesly A M
  2011-05-06 13:17 ` [PATCH v10 1/7] MFD: TWL4030: Fix for the TWL4030 sleep/wakeup sequence Lesly A M
                   ` (8 more replies)
  0 siblings, 9 replies; 28+ messages in thread
From: Lesly A M @ 2011-05-06 13:17 UTC (permalink / raw)
  To: linux-omap; +Cc: Lesly A M, Nishanth Menon, David Derrick, Samuel Ortiz

Patch series for TWL4030 power scripts for OMAP3 boards and
workaround for TWL erratum 27.

Changes for implementing TWL4030 power scripts recommended by hardware team.
Introduced a new TWL4030 power script file, which can be used by different
OMAP3 board with the power companion chip TWL4030.

Updated the changes for TWL4030 errata 27 & 28, and modified
the TWL4030 power script.
Workaround for TWL4030 erratum 27 is required for Si version less than or
equal to TWL5030 ES1.1.

TWL4030 script changes re-based on Kevin's PM tree in pm branch.

This patch series have a dependency with the patch:
	http://www.spinics.net/lists/linux-omap/msg50547.html

Changes in v7:
	changes to fix Nishanth Menon's comments
		i) Added the workaround for TWL4030 Erratum 27
  
	split the first patch in v6
		i)  fix for twl4030 script load
		ii) correct the warning print during script loading

	Added new patch files
		i) changing sys_off signal polarity

Changes in v8:
	updated the change logs
	moving the TWL IDCODE checking to twl-core.c

Changes in V9:
	changes to fix David Derrick's comments
		i) turn OFF the NRES_PWRON resource in warm reset sequence
		ii) optimize the i2c writes during resource configuration

Changes in V10:
	changes for Tony's comments
		i) making the TWL4030 power scripts loadable module

Since the voltage layer is evolving to a new design, the voltage dependant
changes required for the TWL4030 script are not incorporated in the patch series.
So this TWL4030 script patch series can be tested with a separate patch for
voltage layer changes.

	link: http://pastebin.mozilla.org/1219625

This changes are tested on OMAP3430 & OMAP3630 SDP with off mode enabled in suspend path.
	Tested with suspend/resume script, which will test system suspend in a loop.
	Tested for more than 1000 iterations.
	Also tested the reboot with WRM_RST button & reboot command.

Cc: Nishanth Menon <nm@ti.com>
Cc: David Derrick <dderrick@ti.com>
Cc: Samuel Ortiz <sameo@linux.intel.com>
---
Lesly A M (7):
  MFD: TWL4030: Fix for the TWL4030 sleep/wakeup sequence
  MFD: TWL4030: Correct the warning print during script loading
  MFD: TWL4030: Modifying the macro name Main_Ref to all caps
  MFD: TWL4030: power scripts for OMAP3 boards
  MFD: TWL4030: TWL version checking
  MFD: TWL4030: workaround changes for Erratum 27
  MFD: TWL4030: optimizing resource configuration

 arch/arm/configs/omap2plus_defconfig         |    1 +
 arch/arm/mach-omap2/board-rx51-peripherals.c |    2 +-
 arch/arm/mach-omap2/devices.c                |   15 +
 drivers/mfd/Kconfig                          |   11 +
 drivers/mfd/Makefile                         |    1 +
 drivers/mfd/twl-core.c                       |   62 +++
 drivers/mfd/twl4030-power.c                  |  241 +++++++++----
 drivers/mfd/twl4030-script-omap.c            |  523 ++++++++++++++++++++++++++
 include/linux/i2c/twl.h                      |   61 +++-
 9 files changed, 839 insertions(+), 78 deletions(-)
 create mode 100644 drivers/mfd/twl4030-script-omap.c


^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PATCH v10 1/7] MFD: TWL4030: Fix for the TWL4030 sleep/wakeup sequence
  2011-05-06 13:17 [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Lesly A M
@ 2011-05-06 13:17 ` Lesly A M
  2011-05-13 12:40   ` Kevin Hilman
  2011-05-13 17:14   ` Samuel Ortiz
  2011-05-06 13:17 ` [PATCH v10 2/7] MFD: TWL4030: Correct the warning print during script loading Lesly A M
                   ` (7 subsequent siblings)
  8 siblings, 2 replies; 28+ messages in thread
From: Lesly A M @ 2011-05-06 13:17 UTC (permalink / raw)
  To: linux-omap; +Cc: Lesly A M, Nishanth Menon, David Derrick, Samuel Ortiz

Only configure sleep script when the flag is TWL4030_SLEEP_SCRIPT.

Adding the missing brackets for fixing the issue.

Signed-off-by: Lesly A M <leslyam@ti.com>
Cc: Nishanth Menon <nm@ti.com>
Cc: David Derrick <dderrick@ti.com>
Cc: Samuel Ortiz <sameo@linux.intel.com>
---
 drivers/mfd/twl4030-power.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
index 6fed964..97f54ce 100644
--- a/drivers/mfd/twl4030-power.c
+++ b/drivers/mfd/twl4030-power.c
@@ -447,12 +447,13 @@ static int __init load_twl4030_script(struct twl4030_script *tscript,
 		if (err)
 			goto out;
 	}
-	if (tscript->flags & TWL4030_SLEEP_SCRIPT)
+	if (tscript->flags & TWL4030_SLEEP_SCRIPT) {
 		if (order)
 			pr_warning("TWL4030: Bad order of scripts (sleep "\
 					"script before wakeup) Leads to boot"\
 					"failure on some boards\n");
 		err = twl4030_config_sleep_sequence(address);
+	}
 out:
 	return err;
 }
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v10 2/7] MFD: TWL4030: Correct the warning print during script loading
  2011-05-06 13:17 [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Lesly A M
  2011-05-06 13:17 ` [PATCH v10 1/7] MFD: TWL4030: Fix for the TWL4030 sleep/wakeup sequence Lesly A M
@ 2011-05-06 13:17 ` Lesly A M
  2011-05-13 17:19   ` Samuel Ortiz
  2011-05-06 13:17 ` [PATCH v10 3/7] MFD: TWL4030: Modifying the macro name Main_Ref to all caps Lesly A M
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 28+ messages in thread
From: Lesly A M @ 2011-05-06 13:17 UTC (permalink / raw)
  To: linux-omap; +Cc: Lesly A M, Nishanth Menon, David Derrick, Samuel Ortiz

Correcting the if condition check for printing the warning,
if wakeup script is not updated before updating the sleep script.

Since the flag 'order' is set to '1' while updating the wakeup script for P1P2,
the condition checking for printing the warning should be if(!order)
(ie: print the warning if wakeup script is not updated before updating the sleep script)

Signed-off-by: Lesly A M <leslyam@ti.com>
Cc: Nishanth Menon <nm@ti.com>
Cc: David Derrick <dderrick@ti.com>
Cc: Samuel Ortiz <sameo@linux.intel.com>
---
 drivers/mfd/twl4030-power.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
index 97f54ce..12ab2a6 100644
--- a/drivers/mfd/twl4030-power.c
+++ b/drivers/mfd/twl4030-power.c
@@ -448,7 +448,7 @@ static int __init load_twl4030_script(struct twl4030_script *tscript,
 			goto out;
 	}
 	if (tscript->flags & TWL4030_SLEEP_SCRIPT) {
-		if (order)
+		if (!order)
 			pr_warning("TWL4030: Bad order of scripts (sleep "\
 					"script before wakeup) Leads to boot"\
 					"failure on some boards\n");
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v10 3/7] MFD: TWL4030: Modifying the macro name Main_Ref to all caps
  2011-05-06 13:17 [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Lesly A M
  2011-05-06 13:17 ` [PATCH v10 1/7] MFD: TWL4030: Fix for the TWL4030 sleep/wakeup sequence Lesly A M
  2011-05-06 13:17 ` [PATCH v10 2/7] MFD: TWL4030: Correct the warning print during script loading Lesly A M
@ 2011-05-06 13:17 ` Lesly A M
  2011-05-12 10:42   ` Tony Lindgren
  2011-05-13 17:20   ` Samuel Ortiz
  2011-05-06 13:17 ` [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards Lesly A M
                   ` (5 subsequent siblings)
  8 siblings, 2 replies; 28+ messages in thread
From: Lesly A M @ 2011-05-06 13:17 UTC (permalink / raw)
  To: linux-omap; +Cc: Lesly A M, Nishanth Menon, David Derrick, Samuel Ortiz

Modifying the macro name Main_Ref to all caps(MAIN_REF).

Suggested by Nishanth Menon <nm@ti.com>

Signed-off-by: Lesly A M <leslyam@ti.com>
Cc: Nishanth Menon <nm@ti.com>
Cc: David Derrick <dderrick@ti.com>
Cc: Samuel Ortiz <sameo@linux.intel.com>
---
 arch/arm/mach-omap2/board-rx51-peripherals.c |    2 +-
 drivers/mfd/twl4030-power.c                  |    2 +-
 include/linux/i2c/twl.h                      |    2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
index bbcb677..01ee0a1 100644
--- a/arch/arm/mach-omap2/board-rx51-peripherals.c
+++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
@@ -730,7 +730,7 @@ static struct twl4030_resconfig twl4030_rconfig[] __initdata = {
 	{ .resource = RES_RESET, .devgroup = -1,
 	  .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
 	},
-	{ .resource = RES_Main_Ref, .devgroup = -1,
+	{ .resource = RES_MAIN_REF, .devgroup = -1,
 	  .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
 	},
 	{ 0, 0},
diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
index 12ab2a6..a764676 100644
--- a/drivers/mfd/twl4030-power.c
+++ b/drivers/mfd/twl4030-power.c
@@ -120,7 +120,7 @@ static u8 res_config_addrs[] = {
 	[RES_HFCLKOUT]	= 0x8b,
 	[RES_32KCLKOUT]	= 0x8e,
 	[RES_RESET]	= 0x91,
-	[RES_Main_Ref]	= 0x94,
+	[RES_MAIN_REF]	= 0x94,
 };
 
 static int __init twl4030_write_script_byte(u8 address, u8 byte)
diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
index 0c0d1ae..4ebd7c3 100644
--- a/include/linux/i2c/twl.h
+++ b/include/linux/i2c/twl.h
@@ -501,7 +501,7 @@ static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
 #define RES_32KCLKOUT           26
 #define RES_RESET               27
 /* Power Reference */
-#define RES_Main_Ref            28
+#define RES_MAIN_REF            28
 
 #define TOTAL_RESOURCES		28
 /*
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards
  2011-05-06 13:17 [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Lesly A M
                   ` (2 preceding siblings ...)
  2011-05-06 13:17 ` [PATCH v10 3/7] MFD: TWL4030: Modifying the macro name Main_Ref to all caps Lesly A M
@ 2011-05-06 13:17 ` Lesly A M
  2011-05-12 10:56   ` Tony Lindgren
                     ` (2 more replies)
  2011-05-06 13:17 ` [PATCH v10 5/7] MFD: TWL4030: TWL version checking Lesly A M
                   ` (4 subsequent siblings)
  8 siblings, 3 replies; 28+ messages in thread
From: Lesly A M @ 2011-05-06 13:17 UTC (permalink / raw)
  To: linux-omap; +Cc: Lesly A M, Nishanth Menon, David Derrick, Samuel Ortiz

Power bus message sequence for TWL4030 to enter sleep/wakeup/warm_reset.

TWL4030 power scripts which can be used by different OMAP3 boards
with the power companion chip (TWL4030 series).

The twl4030 generic script can be used by any board file to update
the power data in twl4030_platform_data.

Since the TWL4030 power script has dependency with APIs in twl4030-power.c
removing the __init for these APIs.

For more information please see:
	http://omapedia.org/wiki/TWL4030_power_scripts

Signed-off-by: Lesly A M <leslyam@ti.com>
Cc: Nishanth Menon <nm@ti.com>
Cc: David Derrick <dderrick@ti.com>
Cc: Samuel Ortiz <sameo@linux.intel.com>
---
 arch/arm/configs/omap2plus_defconfig |    1 +
 arch/arm/mach-omap2/devices.c        |   15 ++
 drivers/mfd/Kconfig                  |   11 +
 drivers/mfd/Makefile                 |    1 +
 drivers/mfd/twl4030-power.c          |   31 ++--
 drivers/mfd/twl4030-script-omap.c    |  373 ++++++++++++++++++++++++++++++++++
 include/linux/i2c/twl.h              |   41 ++++-
 7 files changed, 454 insertions(+), 19 deletions(-)
 create mode 100644 drivers/mfd/twl4030-script-omap.c

diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig
index 076db52..d9b9858 100644
--- a/arch/arm/configs/omap2plus_defconfig
+++ b/arch/arm/configs/omap2plus_defconfig
@@ -184,6 +184,7 @@ CONFIG_TWL4030_WATCHDOG=y
 CONFIG_MENELAUS=y
 CONFIG_TWL4030_CORE=y
 CONFIG_TWL4030_POWER=y
+CONFIG_TWL4030_SCRIPT=m
 CONFIG_REGULATOR=y
 CONFIG_REGULATOR_TWL4030=y
 CONFIG_REGULATOR_TPS65023=y
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
index 7b85585..7653329 100644
--- a/arch/arm/mach-omap2/devices.c
+++ b/arch/arm/mach-omap2/devices.c
@@ -329,6 +329,20 @@ static void omap_init_audio(void)
 static inline void omap_init_audio(void) {}
 #endif
 
+#ifdef CONFIG_ARCH_OMAP3
+static struct platform_device omap_twl4030_script = {
+	.name	= "twl4030_script",
+	.id	= -1,
+};
+
+static void omap_init_twl4030_script(void)
+{
+	platform_device_register(&omap_twl4030_script);
+}
+#else
+static inline void omap_init_twl4030_script(void) {}
+#endif
+
 #if defined(CONFIG_SPI_OMAP24XX) || defined(CONFIG_SPI_OMAP24XX_MODULE)
 
 #include <plat/mcspi.h>
@@ -691,6 +705,7 @@ static int __init omap2_init_devices(void)
 	omap_init_sham();
 	omap_init_aes();
 	omap_init_vout();
+	omap_init_twl4030_script();
 
 	return 0;
 }
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 3ed3ff0..bed88ce 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -204,6 +204,17 @@ config TWL4030_POWER
 	  and load scripts controlling which resources are switched off/on
 	  or reset when a sleep, wakeup or warm reset event occurs.
 
+config TWL4030_SCRIPT
+	tristate "Support TWL4030 script for OMAP3 boards"
+	depends on TWL4030_CORE && TWL4030_POWER
+	help
+	  Say yes here if you want to use the twl4030 power scripts
+	  for OMAP3 boards. Power bus message sequence for
+	  TWL4030 to enter sleep/wakeup/warm_reset.
+
+	  TWL4030 power scripts which can be used by different
+	  OMAP3 boards with the power companion chip (TWL4030 series).
+
 config TWL4030_CODEC
 	bool
 	depends on TWL4030_CORE
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 419caa9..53ada21 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -42,6 +42,7 @@ obj-$(CONFIG_TWL4030_MADC)      += twl4030-madc.o
 obj-$(CONFIG_TWL4030_POWER)    += twl4030-power.o
 obj-$(CONFIG_TWL4030_CODEC)	+= twl4030-codec.o
 obj-$(CONFIG_TWL6030_PWM)	+= twl6030-pwm.o
+obj-$(CONFIG_TWL4030_SCRIPT)    += twl4030-script-omap.o
 
 obj-$(CONFIG_MFD_MC13XXX)	+= mc13xxx-core.o
 
diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
index a764676..88195e2 100644
--- a/drivers/mfd/twl4030-power.c
+++ b/drivers/mfd/twl4030-power.c
@@ -123,7 +123,7 @@ static u8 res_config_addrs[] = {
 	[RES_MAIN_REF]	= 0x94,
 };
 
-static int __init twl4030_write_script_byte(u8 address, u8 byte)
+static int twl4030_write_script_byte(u8 address, u8 byte)
 {
 	int err;
 
@@ -137,7 +137,7 @@ out:
 	return err;
 }
 
-static int __init twl4030_write_script_ins(u8 address, u16 pmb_message,
+static int twl4030_write_script_ins(u8 address, u16 pmb_message,
 					   u8 delay, u8 next)
 {
 	int err;
@@ -157,7 +157,7 @@ out:
 	return err;
 }
 
-static int __init twl4030_write_script(u8 address, struct twl4030_ins *script,
+static int twl4030_write_script(u8 address, struct twl4030_ins *script,
 				       int len)
 {
 	int err;
@@ -182,7 +182,7 @@ static int __init twl4030_write_script(u8 address, struct twl4030_ins *script,
 	return err;
 }
 
-static int __init twl4030_config_wakeup3_sequence(u8 address)
+static int twl4030_config_wakeup3_sequence(u8 address)
 {
 	int err;
 	u8 data;
@@ -207,7 +207,7 @@ out:
 	return err;
 }
 
-static int __init twl4030_config_wakeup12_sequence(u8 address)
+static int twl4030_config_wakeup12_sequence(u8 address)
 {
 	int err = 0;
 	u8 data;
@@ -261,7 +261,7 @@ out:
 	return err;
 }
 
-static int __init twl4030_config_sleep_sequence(u8 address)
+static int twl4030_config_sleep_sequence(u8 address)
 {
 	int err;
 
@@ -275,7 +275,7 @@ static int __init twl4030_config_sleep_sequence(u8 address)
 	return err;
 }
 
-static int __init twl4030_config_warmreset_sequence(u8 address)
+static int twl4030_config_warmreset_sequence(u8 address)
 {
 	int err;
 	u8 rd_data;
@@ -323,7 +323,7 @@ out:
 	return err;
 }
 
-static int __init twl4030_configure_resource(struct twl4030_resconfig *rconfig)
+static int twl4030_configure_resource(struct twl4030_resconfig *rconfig)
 {
 	int rconfig_addr;
 	int err;
@@ -415,7 +415,7 @@ static int __init twl4030_configure_resource(struct twl4030_resconfig *rconfig)
 	return 0;
 }
 
-static int __init load_twl4030_script(struct twl4030_script *tscript,
+static int load_twl4030_script(struct twl4030_script *tscript,
 	       u8 address)
 {
 	int err;
@@ -510,8 +510,9 @@ int twl4030_remove_script(u8 flags)
 
 	return err;
 }
+EXPORT_SYMBOL_GPL(twl4030_remove_script);
 
-void __init twl4030_power_init(struct twl4030_power_data *twl4030_scripts)
+int twl4030_power_init(struct twl4030_power_data *twl4030_scripts)
 {
 	int err = 0;
 	int i;
@@ -529,7 +530,6 @@ void __init twl4030_power_init(struct twl4030_power_data *twl4030_scripts)
 			TWL4030_PM_MASTER_PROTECT_KEY);
 	if (err)
 		goto unlock;
-
 	for (i = 0; i < twl4030_scripts->num; i++) {
 		err = load_twl4030_script(twl4030_scripts->scripts[i], address);
 		if (err)
@@ -552,18 +552,19 @@ void __init twl4030_power_init(struct twl4030_power_data *twl4030_scripts)
 			TWL4030_PM_MASTER_PROTECT_KEY);
 	if (err)
 		pr_err("TWL4030 Unable to relock registers\n");
-	return;
+	return err;
 
 unlock:
 	if (err)
 		pr_err("TWL4030 Unable to unlock registers\n");
-	return;
+	return err;
 load:
 	if (err)
 		pr_err("TWL4030 failed to load scripts\n");
-	return;
+	return err;
 resource:
 	if (err)
 		pr_err("TWL4030 failed to configure resource\n");
-	return;
+	return err;
 }
+EXPORT_SYMBOL_GPL(twl4030_power_init);
diff --git a/drivers/mfd/twl4030-script-omap.c b/drivers/mfd/twl4030-script-omap.c
new file mode 100644
index 0000000..867a442
--- /dev/null
+++ b/drivers/mfd/twl4030-script-omap.c
@@ -0,0 +1,373 @@
+/*
+ * OMAP power script for PMIC TWL4030
+ *
+ * Author: Lesly A M <leslyam@ti.com>
+ *
+ * Copyright (C) 2010 Texas Instruments, Inc.
+ * Lesly A M <leslyam@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+
+#include <linux/i2c/twl.h>
+
+/*
+ * power management signal connections for OMAP3430 with TWL5030
+ *
+ *                          TWL5030                             OMAP3430
+ *                     ______________________             _____________________
+ *                    |                      |           |                     |
+ *                    |          (P1) NSLEEP1|<----------|SYS_OFFMODE          |
+ *                    |              NRESWARM|<----------|NWARMRESET           |
+ *                    |          (P2) NSLEEP2|---|       |                     |
+ *                    |                      |  ===      |                     |
+ *                    |                      |   -       |                     |
+ *                    |                      |           |                     |
+ *                    |                 VDD1 |---------->| VDD1                |
+ *                    |                 VDD2 |---------->| VDD2                |
+ *                    |                  VIO |---------->| VDDS                |
+ *  ________          |                VAUX1 |           |                     |
+ * |        |         |                 ...  |           |                     |
+ * |  ENABLE|<--------|CLKEN           CLKREQ|<----------|SYS_CLKREQ           |
+ * |  CLKOUT|-------->|HFCLKIN  (P3) HFCLKOUT|---------->|XTALIN               |
+ * |________|         |______________________|           |_____________________|
+ *
+ *
+ *	Signal descriptions:
+ *
+ * SYS_OFFMODE - OMAP drives this signal low only when the OMAP is in the
+ *	OFF idle mode. It is driven high when a wake up event is detected.
+ *	This signal should control the P1 device group in the PMIC.
+ *
+ * SYS_CLKREQ - OMAP should drive this signal low when the OMAP goes into
+ *	any idle mode. This signal should control the P3 device group
+ *	in the PMIC. It is used to notify PMIC when XTALIN is no longer needed.
+ *
+ * NSLEEP1(P1) - When this signal goes low the P1 sleep sequence is executed
+ *	in the PMIC turning off certain resources. When this signal goes high
+ *	the P1 active sequence is executed turning back on certain resources.
+ *
+ * NSLEEP2(P2) - This signal controls the P2 device group of the PMIC.
+ *	It is not used in this setup and should be tied to ground.
+ *	This can be used for connecting a different processor or MODEM chip.
+ *
+ * CLKREQ(P3) - When this signal goes low the P3 sleep sequence is executed
+ *	in the PMIC turning off HFCLKOUT. When this signal goes high
+ *	the P3 active sequence is executed turning back on HFCLKOUT and other
+ *	resources.
+ *
+ * CLKEN - Enable signal for oscillator. Should only go low when OMAP is
+ *	in the OFF idle mode due to long oscillator startup times.
+ *
+ * HFCLKIN - Oscillator output clock into PMIC.
+ *
+ * HFCLKOUT - System clock output from PMIC to OMAP.
+ *
+ * XTALIN - OMAP system clock input(HFCLKOUT).
+ */
+
+/*
+ * Recommended sleep and active sequences for TWL5030 when connected to OMAP3
+ *
+ * WARNING: If the board is using NSLEEP2(P2), should modify this script and
+ * setuptime values accordingly.
+ *
+ * Chip Retention/Off (using i2c for scaling voltage):
+ *	When OMAP de-assert the SYS_CLKREQ signal, only HFCLKOUT is affected
+ *	since it is the only resource assigned to P3 only.
+ *
+ * Sysoff (using sys_off signal):
+ *	When OMAP de-assert the SYS_OFFMODE signal A2S(active to sleep sequence)
+ *	on the PMIC is executed. This will put resources of TYPE2=1 and TYPE2=2
+ *	into sleep. At this point only resources assigned to P1 only will be
+ *	affected (VDD1, VDD2 & VPLL1).
+ *
+ *	Next the OMAP will lower SYS_CLKREQ which will allow the A2S sequence
+ *	in PMIC to execute again. This will put resources of TYPE2=1 and TYPE2=2
+ *	into sleep but will affect resources that are assigned to P3(HFCLKOUT)
+ *	only or assigned to P1 and P3.
+ *
+ *	On wakeup event OMAP goes active and pulls the SYS_CLKREQ high,
+ *	which will execute the P3 S2A sequence on the PMIC. This will turn on
+ *	resources assigned to P3 or assigned to P1 and P3 and of TYPE2=2.
+ *
+ *	Next the OMAP will wait the PRM_VOLTOFFSET time and then de-assert
+ *	the SYS_OFFMODE pin allowing the PMIC to execute the P1 S2A active
+ *	sequence. This will turn on resources assigned to P1 or assigned to
+ *	P1 and P3 and of TYPE2=1.
+ *
+ *	Timing diagram for OMAP wakeup from OFFMODE using sys_off signal
+ *                 _____________________________________________________________
+ * OMAP active  __/
+ *                       |<--------------------PRM_CLKSETP-------------------->|
+ *                        ______________________________________________________
+ * SYS_CLKREQ   _________/
+ *                           ___________________________________________________
+ * CLKEN        ____________/
+ *
+ * HFCLKIN      _______________________________________________/////////////////
+ *
+ * HFCLKOUT     __________________________________________________//////////////
+ *                       |<---PRM_VOLTOFFSET-->|
+ *                                              ________________________________
+ * SYS_OFFMODE  _______________________________/
+ *                                             |<--------PRM_VOLTSETUP2------->|
+ *                                                                   ___________
+ * VPLL1        ____________________________________________________/
+ *                                                                            __
+ * VDD1         _____________________________________________________________/
+ *                                                                            __
+ * VDD2         _____________________________________________________________/
+ *
+ *	Other resources which are not handled by this script should be
+ *	controlled by the respective drivers using them (VAUX1, VAUX2, VAUX3,
+ *	VAUX4, VMMC1, VMMC2, VPLL2, VSIM, VDAC, VUSB1V5, VUSB1V8 & VUSB3V1).
+ *
+ * More info:
+ *	http://omapedia.org/wiki/TWL4030_power_scripts
+ */
+
+/**
+ * DOC: Sleep to active sequence for P1/P2
+ *
+ * Sequence to control the TWL4030 Power resources,
+ * when the system wakeup from sleep.
+ * Executed upon P1_P2 transition for wakeup
+ * (sys_offmode signal de-asserted on OMAP).
+ */
+static struct twl4030_ins wakeup_p12_seq[] __initdata = {
+	/*
+	 * Broadcast message to put resources to active
+	 *
+	 * Since we are not using TYPE, resources which have TYPE2 configured
+	 * as 1 will be targeted (VPLL1, VDD1, VDD2, REGEN, NRES_PWRON, SYSEN).
+	 */
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R1,
+							RES_STATE_ACTIVE), 2},
+};
+
+static struct twl4030_script wakeup_p12_script __initdata = {
+	.script	= wakeup_p12_seq,
+	.size	= ARRAY_SIZE(wakeup_p12_seq),
+	.flags	= TWL4030_WAKEUP12_SCRIPT,
+};
+
+/**
+ * DOC: Sleep to active sequence for P3
+ *
+ * Sequence to control the TWL4030 Power resources,
+ * when the system wakeup from sleep.
+ * Executed upon P3 transition for wakeup
+ * (clkreq signal asserted on OMAP).
+ */
+static struct twl4030_ins wakeup_p3_seq[] __initdata = {
+	/*
+	 * Broadcast message to put resources to active
+	 *
+	 * Since we are not using TYPE, resources which have TYPE2 configured
+	 * as 2 will be targeted
+	 * (VINTANA1, VINTANA2, VINTDIG, VIO, CLKEN, HFCLKOUT).
+	 */
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R2,
+							RES_STATE_ACTIVE), 2},
+};
+
+static struct twl4030_script wakeup_p3_script __initdata = {
+	.script = wakeup_p3_seq,
+	.size   = ARRAY_SIZE(wakeup_p3_seq),
+	.flags  = TWL4030_WAKEUP3_SCRIPT,
+};
+
+/**
+ * DOC: Active to sleep sequence for P1/P2/P3
+ *
+ * Sequence to control the TWL4030 Power resources,
+ * when the system goes into sleep.
+ * Executed upon P1_P2/P3 transition for sleep.
+ * (sys_offmode signal asserted/clkreq de-asserted on OMAP).
+ */
+static struct twl4030_ins sleep_on_seq[] __initdata = {
+	/* Broadcast message to put res to sleep (TYPE2 = 1, 2) */
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R1,
+							RES_STATE_SLEEP), 2},
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R2,
+							RES_STATE_SLEEP), 2},
+};
+
+static struct twl4030_script sleep_on_script __initdata = {
+	.script	= sleep_on_seq,
+	.size	= ARRAY_SIZE(sleep_on_seq),
+	.flags	= TWL4030_SLEEP_SCRIPT,
+};
+
+/**
+ * DOC: Warm reset sequence
+ *
+ * Sequence to reset the TWL4030 Power resources,
+ * when the system gets warm reset.
+ * Executed upon warm reset signal.
+ *
+ * First the device is put in reset, then the system clock is requested to
+ * the external oscillator, and default ON power reference and power providers
+ * are enabled. Next some additional resources which are software controlled
+ * are enabled. Finally sequence is ended by the release of TWL5030 reset.
+ */
+static struct twl4030_ins wrst_seq[] __initdata = {
+	/*
+	 * As a workaround for OMAP Erratum  (ID: i537 - OMAP HS devices are
+	 * not recovering from warm reset while in OFF mode)
+	 * NRESPWRON is toggled to force a power on reset condition to OMAP
+	 */
+	/* Trun OFF NRES_PWRON */
+	{MSG_SINGULAR(DEV_GRP_NULL, RES_NRES_PWRON, RES_STATE_OFF), 2},
+	/* Reset twl4030 */
+	{MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_OFF), 2},
+	/* Reset MAIN_REF */
+	{MSG_SINGULAR(DEV_GRP_NULL, RES_MAIN_REF, RES_STATE_WRST), 2},
+	/* Reset All type2_group2 */
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R2,
+							RES_STATE_WRST), 2},
+	/* Reset VUSB_3v1 */
+	{MSG_SINGULAR(DEV_GRP_NULL, RES_VUSB_3V1, RES_STATE_WRST), 2},
+	/* Reset All type2_group1 */
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R1,
+							RES_STATE_WRST), 2},
+	/* Reset the Reset & Contorl_signals */
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_RC, RES_TYPE_ALL, RES_TYPE2_R0,
+							RES_STATE_WRST), 2},
+	/* Re-enable twl4030 */
+	{MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_ACTIVE), 2},
+	/* Trun ON NRES_PWRON */
+	{MSG_SINGULAR(DEV_GRP_NULL, RES_NRES_PWRON, RES_STATE_ACTIVE), 2},
+};
+
+static struct twl4030_script wrst_script __initdata = {
+	.script = wrst_seq,
+	.size   = ARRAY_SIZE(wrst_seq),
+	.flags  = TWL4030_WRST_SCRIPT,
+};
+
+/* TWL4030 script for sleep, wakeup & warm_reset */
+static struct twl4030_script *twl4030_scripts[] __initdata = {
+	&wakeup_p12_script,
+	&wakeup_p3_script,
+	&sleep_on_script,
+	&wrst_script,
+};
+
+/**
+ * DOC: TWL4030 resource configuration
+ *
+ * Resource which are attached to P1 device group alone
+ * will go to sleep state, when sys_off signal from OMAP is de-asserted.
+ *	(VPLL1, VDD1, VDD2)
+ *
+ * None of the resources are attached to P2 device group alone.
+ * (WARNING: If MODEM or connectivity chip is connected to NSLEEP2 PIN on
+ * TWL4030, should modify the resource configuration accordingly).
+ *
+ * Resource which are attached to P3 device group alone
+ * will go to sleep state, when clk_req signal from OMAP is de-asserted.
+ *	(HFCLKOUT)
+ *
+ * Resource which are attached to more than one device group
+ * will go to sleep state, when corresponding signals are de-asserted.
+ *	(VINTANA1, VINTANA2, VINTDIG, VIO, REGEN, NRESPWRON, CLKEN, SYSEN)
+ *
+ * REGEN is an output of the device which can be connected to slave power ICs
+ * or external LDOs that power on before voltage for the IO interface (VIO).
+ *
+ * SYSEN is a bidirectional signal of the device that controls slave power ICs.
+ * In master mode, the device sets SYSEN high to enable the slave power ICs.
+ * In slave mode, when one of the power ICs drives the SYSEN signal low,
+ * all devices of the platform stay in the wait-on state.
+ *
+ * Resource which are attached to none of the device group by default
+ * will be in sleep state. These resource should be controlled by
+ * the respective drivers using them.
+ * Resource which are controlled by drivers are not modified here.
+ *	(VAUX1, VAUX2, VAUX3, VAUX4, VMMC1, VMMC2, VPLL2, VSIM, VDAC,
+ *	VUSB1V5, VUSB1V8, VUSB3V1)
+ *
+ * Resource using reset values.
+ *	(32KCLKOUT, TRITON_RESET, MAINREF)
+ */
+static struct twl4030_resconfig twl4030_rconfig[] __initdata = {
+	{ .resource = RES_VPLL1, .devgroup = DEV_GRP_P1, .type = 3,
+		.type2 = 1, .remap_sleep = RES_STATE_OFF },
+	{ .resource = RES_VINTANA1, .devgroup = DEV_GRP_ALL, .type = 1,
+		.type2 = 2, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_VINTANA2, .devgroup = DEV_GRP_ALL, .type = 0,
+		.type2 = 2, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_VINTDIG, .devgroup = DEV_GRP_ALL, .type = 1,
+		.type2 = 2, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_VIO, .devgroup = DEV_GRP_ALL, .type = 2,
+		.type2 = 2, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_VDD1, .devgroup = DEV_GRP_P1,
+		.type = 4, .type2 = 1, .remap_sleep = RES_STATE_OFF },
+	{ .resource = RES_VDD2, .devgroup = DEV_GRP_P1,
+		.type = 3, .type2 = 1, .remap_sleep = RES_STATE_OFF },
+	{ .resource = RES_REGEN, .devgroup = DEV_GRP_ALL, .type = 2,
+		.type2 = 1, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_NRES_PWRON, .devgroup = DEV_GRP_ALL, .type = 0,
+		.type2 = 1, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_CLKEN, .devgroup = DEV_GRP_ALL, .type = 3,
+		.type2 = 2, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_SYSEN, .devgroup = DEV_GRP_ALL, .type = 6,
+		.type2 = 1, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_HFCLKOUT, .devgroup = DEV_GRP_P3,
+		.type = 0, .type2 = 2, .remap_sleep = RES_STATE_SLEEP },
+	{ 0, 0},
+};
+
+struct twl4030_power_data twl4030_generic_script __initdata = {
+	.scripts	= twl4030_scripts,
+	.num		= ARRAY_SIZE(twl4030_scripts),
+	.resource_config = twl4030_rconfig,
+};
+
+static int __init twl4030_script_probe(struct platform_device *pdev)
+{
+	return twl4030_power_init(&twl4030_generic_script);
+}
+
+static int twl4030_script_remove(struct platform_device *pdev)
+{
+	return twl4030_remove_script(TWL4030_SLEEP_SCRIPT |
+			TWL4030_WAKEUP12_SCRIPT | TWL4030_WAKEUP3_SCRIPT |
+			TWL4030_WRST_SCRIPT);
+}
+
+static struct platform_driver twl4030_script_driver = {
+	.remove	= twl4030_script_remove,
+	.driver	= {
+			.name = "twl4030_script",
+			.owner = THIS_MODULE,
+		},
+};
+
+static int __init twl4030_script_init(void)
+{
+	/* Register the TWL4030 script driver */
+	return platform_driver_probe(&twl4030_script_driver,
+					twl4030_script_probe);
+}
+
+static void __exit twl4030_script_cleanup(void)
+{
+	/* Unregister TWL4030 script driver */
+	platform_driver_unregister(&twl4030_script_driver);
+}
+
+module_init(twl4030_script_init);
+module_exit(twl4030_script_cleanup);
+
+MODULE_DESCRIPTION("OMAP TWL4030 script driver");
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Texas Instruments Inc");
diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
index 4ebd7c3..41c9448 100644
--- a/include/linux/i2c/twl.h
+++ b/include/linux/i2c/twl.h
@@ -204,6 +204,12 @@ static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
 	return -EIO;
 }
 #endif
+
+#ifdef CONFIG_TWL4030_POWER
+extern struct twl4030_power_data twl4030_generic_script;
+#else
+#define twl4030_generic_script	NULL;
+#endif
 /*----------------------------------------------------------------------*/
 
 /*
@@ -436,9 +442,23 @@ static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
 
 /* Power bus message definitions */
 
-/* The TWL4030/5030 splits its power-management resources (the various
- * regulators, clock and reset lines) into 3 processor groups - P1, P2 and
- * P3. These groups can then be configured to transition between sleep, wait-on
+/*
+ * The TWL4030/5030 splits its power-management resources (the various
+ * regulators, clock and reset lines) into 3 processor groups - P1, P2 and P3.
+ *
+ * Resources attached to device group P1 is managed depending on the state of
+ * NSLEEP1 pin of TWL4030, which is connected to sys_off signal from OMAP
+ *
+ * Resources attached to device group P2 is managed depending on the state of
+ * NSLEEP2 pin of TWL4030, which is can be connected to a modem or
+ * connectivity chip
+ *
+ * Resources attached to device group P3 is managed depending on the state of
+ * CLKREQ pin of TWL4030, which is connected to clk request signal from OMAP
+ *
+ * If required these resources can be attached to combination of P1/P2/P3.
+ *
+ * These groups can then be configured to transition between sleep, wait-on
  * and active states by sending messages to the power bus.  See Section 5.4.2
  * Power Resources of TWL4030 TRM
  */
@@ -448,7 +468,17 @@ static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
 #define DEV_GRP_P1		0x1	/* P1: all OMAP devices */
 #define DEV_GRP_P2		0x2	/* P2: all Modem devices */
 #define DEV_GRP_P3		0x4	/* P3: all peripheral devices */
+#define DEV_GRP_ALL		0x7	/* P1/P2/P3: all devices */
 
+/*
+ * The 27 power resources in TWL4030 is again divided into
+ * analog resources:
+ *	Power Providers - LDO regulators, dc-to-dc regulators
+ *	Power Reference - analog reference
+ *
+ * and digital resources:
+ *	Reset & Clock - reset and clock signals.
+ */
 /* Resource groups */
 #define RES_GRP_RES		0x0	/* Reserved */
 #define RES_GRP_PP		0x1	/* Power providers */
@@ -460,7 +490,10 @@ static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
 #define RES_GRP_ALL		0x7	/* All resource groups */
 
 #define RES_TYPE2_R0		0x0
+#define RES_TYPE2_R1		0x1
+#define RES_TYPE2_R2		0x2
 
+#define RES_TYPE_R0		0x0
 #define RES_TYPE_ALL		0x7
 
 /* Resource states */
@@ -635,7 +668,7 @@ struct twl4030_power_data {
 #define TWL4030_RESCONFIG_UNDEF	((u8)-1)
 };
 
-extern void twl4030_power_init(struct twl4030_power_data *triton2_scripts);
+extern int twl4030_power_init(struct twl4030_power_data *triton2_scripts);
 extern int twl4030_remove_script(u8 flags);
 
 struct twl4030_codec_audio_data {
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v10 5/7] MFD: TWL4030: TWL version checking
  2011-05-06 13:17 [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Lesly A M
                   ` (3 preceding siblings ...)
  2011-05-06 13:17 ` [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards Lesly A M
@ 2011-05-06 13:17 ` Lesly A M
  2011-05-13 17:22   ` Samuel Ortiz
  2011-05-06 13:17 ` [PATCH v10 6/7] MFD: TWL4030: workaround changes for Erratum 27 Lesly A M
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 28+ messages in thread
From: Lesly A M @ 2011-05-06 13:17 UTC (permalink / raw)
  To: linux-omap; +Cc: Lesly A M, Nishanth Menon, David Derrick, Samuel Ortiz

Added API to get the TWL5030 Si version from the IDCODE register.
It is used for enabling the workaround for TWL erratum 27.

Signed-off-by: Lesly A M <leslyam@ti.com>
Cc: Nishanth Menon <nm@ti.com>
Cc: David Derrick <dderrick@ti.com>
Cc: Samuel Ortiz <sameo@linux.intel.com>
---
 drivers/mfd/twl-core.c  |   62 +++++++++++++++++++++++++++++++++++++++++++++++
 include/linux/i2c/twl.h |   17 ++++++++++++-
 2 files changed, 78 insertions(+), 1 deletions(-)

diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
index 960b5be..2bd9e06 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,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,
@@ -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");
@@ -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);
diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
index 41c9448..cf0f9f3 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
 
 #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_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);
 
@@ -285,7 +293,12 @@ extern struct twl4030_power_data twl4030_generic_script;
  *(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 */
 
@@ -294,6 +307,8 @@ extern struct twl4030_power_data twl4030_generic_script;
 #define SR_I2C_SCL_CTRL_PU		BIT(4)
 #define SR_I2C_SDA_CTRL_PU		BIT(6)
 
+#define TWL_EEPROM_R_UNLOCK		0x49
+
 /*----------------------------------------------------------------------*/
 
 /*
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v10 6/7] MFD: TWL4030: workaround changes for Erratum 27
  2011-05-06 13:17 [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Lesly A M
                   ` (4 preceding siblings ...)
  2011-05-06 13:17 ` [PATCH v10 5/7] MFD: TWL4030: TWL version checking Lesly A M
@ 2011-05-06 13:17 ` Lesly A M
  2011-05-06 13:17 ` [PATCH v10 7/7] MFD: TWL4030: optimizing resource configuration Lesly A M
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 28+ messages in thread
From: Lesly A M @ 2011-05-06 13:17 UTC (permalink / raw)
  To: linux-omap; +Cc: Lesly A M, Nishanth Menon, David Derrick, Samuel Ortiz

Workaround for TWL5030 Silicon Errata 27 & 28:
	27 - VDD1, VDD2, may have glitches when their output value is updated.
	28 - VDD1 and / or VDD2 DCDC clock may stop working when internal clock
		is switched from internal to external.

Erratum 27:
	If the DCDC regulators is running on their internal oscillator,
	negative glitches may occur on VDD1, VDD2 output when voltage is changed.
	The OMAP device may reboot if the VDD1 or VDD2 go below the
	core minimum operating voltage.

	WORKAROUND
	Set up the TWL5030 DC-DC power supplies to use the HFCLKIN instead of
	the internal oscillator.

Erratum 28:
	VDD1/VDD2 clock system may hang during switching the clock source from
	internal oscillator to external. VDD1/VDD2 output voltages may collapse
	if clock stops.

	WORKAROUND
	If HFCLK is disabled in OFFMODE, modify the sleep/wakeup sequence and
	setuptimes to make sure the switching will happen only when HFCLKIN is stable.
	Also use the TWL5030 watchdog to safeguard the first switching from
	internal oscillator to HFCLKIN during the TWL5030 init.

	IMPACT
	power sequence is changed.
	sleep/wakeup time values will be changed.

The workaround changes are called from twl4030_power_init(), since we have to
make some i2c_read calls to check the TWL4030 version & the i2c will not be
initialized in the early stage.

This workaround is required for TWL5030 Silicon version less than ES1.2
The power script & setup time changes are recommended by TI HW team.

For more information please see:
	http://omapedia.org/wiki/TWL4030_power_scripts

Changes taken from TWL4030 Erratum 27 workaround patch by Nishanth Menon.

Signed-off-by: Lesly A M <leslyam@ti.com>
Cc: Nishanth Menon <nm@ti.com>
Cc: David Derrick <dderrick@ti.com>
Cc: Samuel Ortiz <sameo@linux.intel.com>
---
 drivers/mfd/twl4030-power.c       |   79 +++++++++++++++++++
 drivers/mfd/twl4030-script-omap.c |  150 +++++++++++++++++++++++++++++++++++++
 include/linux/i2c/twl.h           |    1 +
 3 files changed, 230 insertions(+), 0 deletions(-)

diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
index 88195e2..6b57d2b 100644
--- a/drivers/mfd/twl4030-power.c
+++ b/drivers/mfd/twl4030-power.c
@@ -63,6 +63,14 @@ 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)
 
+#define R_VDD1_OSC		0x5C
+#define R_VDD2_OSC		0x6A
+#define R_VIO_OSC		0x52
+#define EXT_FS_CLK_EN		BIT(6)
+
+#define R_WDT_CFG		0x03
+#define WDT_WRK_TIMEOUT		0x03
+
 /* resource configuration registers
    <RESOURCE>_DEV_GRP   at address 'n+0'
    <RESOURCE>_TYPE      at address 'n+1'
@@ -512,6 +520,67 @@ int twl4030_remove_script(u8 flags)
 }
 EXPORT_SYMBOL_GPL(twl4030_remove_script);
 
+/**
+ * twl_dcdc_use_hfclk - API to use HFCLK for TWL DCDCs
+ *
+ * TWL DCDCs switching to HFCLK instead of using internal RC oscillator.
+ */
+static int twl_dcdc_use_hfclk(void)
+{
+	u8 val;
+	u8 smps_osc_reg[] = {R_VDD1_OSC, R_VDD2_OSC, R_VIO_OSC};
+	int i;
+	int err;
+
+	for (i = 0; i < sizeof(smps_osc_reg); i++) {
+		err = twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &val,
+							smps_osc_reg[i]);
+		val |= EXT_FS_CLK_EN;
+		err |= twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, val,
+							smps_osc_reg[i]);
+	}
+	return err;
+}
+
+/**
+ * twl_erratum27_workaround - Workaround for TWL5030 Silicon Erratum 27
+ * 27 - VDD1, VDD2, may have glitches when their output value is updated.
+ * 28 - VDD1 and / or VDD2 DCDC clock may stop working when internal clock is
+ * switched from internal to external.
+ *
+ * Workaround requires the TWL DCDCs to use HFCLK instead of
+ * internal oscillator. Also enable TWL watchdog before switching the osc
+ * to recover if the VDD1/VDD2 stop working.
+ */
+static void twl_erratum27_workaround(void)
+{
+	u8 wdt_counter_val = 0;
+	int err;
+
+	/* Setup the twl wdt to take care of borderline failure case */
+	err = twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &wdt_counter_val,
+			R_WDT_CFG);
+	err |= twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, WDT_WRK_TIMEOUT,
+			R_WDT_CFG);
+
+	/* TWL DCDC switching to HFCLK */
+	err |= twl_dcdc_use_hfclk();
+
+	/* restore the original value */
+	err |= twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, wdt_counter_val,
+			R_WDT_CFG);
+	if (err)
+		pr_warning("TWL4030: workaround setup failed!\n");
+}
+
+static bool is_twl5030_erratum27wa_required(void)
+{
+	if (twl_get_type() == TWL_SIL_5030)
+		return (twl_get_version() < TWL5030_REV_1_2);
+
+	return 0;
+}
+
 int twl4030_power_init(struct twl4030_power_data *twl4030_scripts)
 {
 	int err = 0;
@@ -530,6 +599,16 @@ int twl4030_power_init(struct twl4030_power_data *twl4030_scripts)
 			TWL4030_PM_MASTER_PROTECT_KEY);
 	if (err)
 		goto unlock;
+
+	/* Applying TWL5030 Erratum 27 WA based on Si revision &
+	 * flag updated from board file*/
+	if (is_twl5030_erratum27wa_required()) {
+		pr_info("TWL5030: Enabling workaround for Si Erratum 27\n");
+		twl_erratum27_workaround();
+		if (twl4030_scripts->twl5030_erratum27wa_script)
+			twl4030_scripts->twl5030_erratum27wa_script();
+	}
+
 	for (i = 0; i < twl4030_scripts->num; i++) {
 		err = load_twl4030_script(twl4030_scripts->scripts[i], address);
 		if (err)
diff --git a/drivers/mfd/twl4030-script-omap.c b/drivers/mfd/twl4030-script-omap.c
index 867a442..ff93fd2 100644
--- a/drivers/mfd/twl4030-script-omap.c
+++ b/drivers/mfd/twl4030-script-omap.c
@@ -326,10 +326,160 @@ static struct twl4030_resconfig twl4030_rconfig[] __initdata = {
 	{ 0, 0},
 };
 
+/*
+ * Sleep and active sequences with changes for TWL5030 Erratum 27 workaround
+ *
+ * Sysoff (using sys_off signal):
+ *	When SYS_CLKREQ goes low during retention no resources will be affected
+ *	since no resources are assigned to P3 only.
+ *
+ *	Since all resources are assigned to P1 and P3 then all resources
+ *	will be affected on the falling edge of P3 (SYS_CLKREQ).
+ *	When OMAP lower the SYS_CLKREQ signal PMIC will execute the
+ *	A2S sequence in which HFCLKOUT is dissabled first and
+ *	after 488.32 usec(PRM_VOLTOFFSET) resources assigned to P1 and P3
+ *	and of TYPE2=1 are put to sleep
+ *	(VDD1, VDD2, VPLL1, REGEN, NRESPWRON & SYSEN).
+ *	Again after a 61.04 usec resources assigned to P1 and P3
+ *	and of TYPE2=2 are put to sleep
+ *	(VINTANA1, VINTANA2, VINTDIG, VIO & CLKEN).
+ *
+ *	On wakeup event OMAP goes active and pulls the SYS_CLKREQ high,
+ *	and will execute the S2A sequence which is same for P1_P2 & P3.
+ *	This will turn on all resources of TYPE2=2 to go to the active state.
+ *	Three dummy broadcast messages are added to get a delay of ~10 ms
+ *	before enabling the HFCLKOUT resource. And after a 30.52 usec
+ *	all resources of TYPE2=1 are put to the active state.
+ *
+ *	This 10ms delay can be reduced if the oscillator is having less
+ *	stabilization time. A should be taken care if it needs more time
+ *	for stabilization.
+ *
+ */
+
+/**
+ * DOC: Sleep to Active sequence for P1/P2/P3
+ *
+ * The wakeup sequence is adjusted to do the VDD1/VDD2 voltage ramp-up
+ * only after HFCLKIN is stabilized and the HFCLKOUT is enabled.
+ */
+static struct twl4030_ins wakeup_seq_erratum27[] __initdata = {
+	/*
+	 * Broadcast message to put res(TYPE2 = 2) to active.
+	 * Wait for ~10 mS (ramp-up time for OSC on the board)
+	 * after HFCLKIN is enabled
+	 */
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R2,
+							RES_STATE_ACTIVE), 55},
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R2,
+							RES_STATE_ACTIVE), 55},
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R2,
+							RES_STATE_ACTIVE), 54},
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R2,
+							RES_STATE_ACTIVE), 1},
+	/* Singular message to enable HCLKOUT after HFCLKIN is stabilized */
+	{MSG_SINGULAR(DEV_GRP_NULL, RES_HFCLKOUT, RES_STATE_ACTIVE), 1},
+	/*
+	 * Broadcast message to put res(TYPE2 = 1) to active.
+	 * VDD1/VDD2 ramp-up after HFCLKIN is stable and HFCLKOUT is enabled.
+	 */
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R1,
+							RES_STATE_ACTIVE), 2},
+};
+
+static struct twl4030_script wakeup_script_erratum27 __initdata = {
+	.script	= wakeup_seq_erratum27,
+	.size	= ARRAY_SIZE(wakeup_seq_erratum27),
+	.flags	= TWL4030_WAKEUP12_SCRIPT | TWL4030_WAKEUP3_SCRIPT,
+};
+
+/**
+ * DOC: Active to Sleep sequence for P1/P2/P3
+ *
+ * The sleep sequence is adjusted to do the switching of VDD1/VDD2/VIO OSC from
+ * HFCLKIN to internal oscillator when the HFCLKIN is stable.
+ */
+static struct twl4030_ins sleep_on_seq_erratum27[] __initdata = {
+	/*
+	 * Singular message to disable HCLKOUT.
+	 * Wait for ~488.32 uS to do the switching of VDD1/VDD2/VIO OSC from
+	 * HFCLKIN to internal oscillator before disabling HFCLKIN.
+	 */
+	{MSG_SINGULAR(DEV_GRP_NULL, RES_HFCLKOUT, RES_STATE_SLEEP), 20},
+	/* Broadcast message to put res(TYPE2 = 1) to sleep */
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R1,
+							RES_STATE_SLEEP), 2},
+	/* Broadcast message to put res(TYPE2 = 2) to sleep, disable HFCLKIN */
+	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, RES_TYPE_R0, RES_TYPE2_R2,
+							RES_STATE_SLEEP), 2},
+};
+
+static struct twl4030_script sleep_on_script_erratum27 __initdata = {
+	.script	= sleep_on_seq_erratum27,
+	.size	= ARRAY_SIZE(sleep_on_seq_erratum27),
+	.flags	= TWL4030_SLEEP_SCRIPT,
+};
+
+/* TWL4030 script for sleep, wakeup & warm_reset */
+static struct twl4030_script *twl4030_scripts_erratum27[] __initdata = {
+	&wakeup_script_erratum27,
+	&sleep_on_script_erratum27,
+	&wrst_script,
+};
+
+/**
+ * DOC: TWL4030 resource configuration
+ *
+ * VDD1/VDD2/VPLL are assigned to P1 and P3, to have better control
+ * during OFFMODE. HFCLKOUT is assigned to P1 and P3 (*p2) to turn off
+ * only during OFFMODE.
+ * (*P2 is included if the platform uses it for modem/some other processor)
+ */
+static struct twl4030_resconfig twl4030_rconfig_erratum27[] __initdata = {
+	{ .resource = RES_VPLL1, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
+		.type = 3, .type2 = 1, .remap_sleep = RES_STATE_OFF },
+	{ .resource = RES_VINTANA1, .devgroup = DEV_GRP_ALL, .type = 1,
+		.type2 = 2, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_VINTANA2, .devgroup = DEV_GRP_ALL, .type = 0,
+		.type2 = 2, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_VINTDIG, .devgroup = DEV_GRP_ALL, .type = 1,
+		.type2 = 2, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_VIO, .devgroup = DEV_GRP_ALL, .type = 2,
+		.type2 = 2, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_VDD1, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
+		.type = 4, .type2 = 1, .remap_sleep = RES_STATE_OFF },
+	{ .resource = RES_VDD2, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
+		.type = 3, .type2 = 1, .remap_sleep = RES_STATE_OFF },
+	{ .resource = RES_REGEN, .devgroup = DEV_GRP_ALL, .type = 2,
+		.type2 = 1, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_NRES_PWRON, .devgroup = DEV_GRP_ALL, .type = 0,
+		.type2 = 1, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_CLKEN, .devgroup = DEV_GRP_ALL, .type = 3,
+		.type2 = 2, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_SYSEN, .devgroup = DEV_GRP_ALL, .type = 6,
+		.type2 = 1, .remap_sleep = RES_STATE_SLEEP },
+	{ .resource = RES_HFCLKOUT, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
+		.type = 0, .type2 = 1, .remap_sleep = RES_STATE_SLEEP },
+	{ 0, 0},
+};
+
+/**
+ * twl5030_script_erratum27() - API to modify TWL4030 script
+ *
+ * Updating the TWL4030 script & resource configuration
+ */
+static void __init twl5030_script_erratum27(void)
+{
+	twl4030_generic_script.scripts = twl4030_scripts_erratum27;
+	twl4030_generic_script.num = ARRAY_SIZE(twl4030_scripts_erratum27);
+	twl4030_generic_script.resource_config = twl4030_rconfig_erratum27;
+}
+
 struct twl4030_power_data twl4030_generic_script __initdata = {
 	.scripts	= twl4030_scripts,
 	.num		= ARRAY_SIZE(twl4030_scripts),
 	.resource_config = twl4030_rconfig,
+	.twl5030_erratum27wa_script = twl5030_script_erratum27,
 };
 
 static int __init twl4030_script_probe(struct platform_device *pdev)
diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
index cf0f9f3..58b92fc 100644
--- a/include/linux/i2c/twl.h
+++ b/include/linux/i2c/twl.h
@@ -680,6 +680,7 @@ struct twl4030_power_data {
 	struct twl4030_script **scripts;
 	unsigned num;
 	struct twl4030_resconfig *resource_config;
+	void (*twl5030_erratum27wa_script)(void);
 #define TWL4030_RESCONFIG_UNDEF	((u8)-1)
 };
 
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PATCH v10 7/7] MFD: TWL4030: optimizing resource configuration
  2011-05-06 13:17 [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Lesly A M
                   ` (5 preceding siblings ...)
  2011-05-06 13:17 ` [PATCH v10 6/7] MFD: TWL4030: workaround changes for Erratum 27 Lesly A M
@ 2011-05-06 13:17 ` Lesly A M
  2011-06-02 15:36 ` [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Steve Sakoman
  2011-06-03  0:31 ` Kevin Hilman
  8 siblings, 0 replies; 28+ messages in thread
From: Lesly A M @ 2011-05-06 13:17 UTC (permalink / raw)
  To: linux-omap; +Cc: Lesly A M, Nishanth Menon, David Derrick, Samuel Ortiz

Skip the i2c register writes in twl4030_configure_resource() if the new value
is same as the old value, for devgrp/type/remap regs.

Suggested by David Derrick <dderrick@ti.com>

Signed-off-by: Lesly A M <leslyam@ti.com>
Cc: Nishanth Menon <nm@ti.com>
Cc: David Derrick <dderrick@ti.com>
Cc: Samuel Ortiz <sameo@linux.intel.com>
---
 drivers/mfd/twl4030-power.c |  126 ++++++++++++++++++++++++------------------
 1 files changed, 72 insertions(+), 54 deletions(-)

diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
index 6b57d2b..c1c3906 100644
--- a/drivers/mfd/twl4030-power.c
+++ b/drivers/mfd/twl4030-power.c
@@ -335,9 +335,9 @@ static int twl4030_configure_resource(struct twl4030_resconfig *rconfig)
 {
 	int rconfig_addr;
 	int err;
-	u8 type;
-	u8 grp;
-	u8 remap;
+	u8 type, type_value;
+	u8 grp, grp_value;
+	u8 remap, remap_value;
 
 	if (rconfig->resource > TOTAL_RESOURCES) {
 		pr_err("TWL4030 Resource %d does not exist\n",
@@ -348,76 +348,94 @@ static int twl4030_configure_resource(struct twl4030_resconfig *rconfig)
 	rconfig_addr = res_config_addrs[rconfig->resource];
 
 	/* Set resource group */
-	err = twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &grp,
+	if (rconfig->devgroup != TWL4030_RESCONFIG_UNDEF) {
+		err = twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &grp,
 			      rconfig_addr + DEV_GRP_OFFSET);
-	if (err) {
-		pr_err("TWL4030 Resource %d group could not be read\n",
-			rconfig->resource);
-		return err;
-	}
+		if (err) {
+			pr_err("TWL4030 Resource %d group could not be read\n",
+				rconfig->resource);
+			return err;
+		}
 
-	if (rconfig->devgroup != TWL4030_RESCONFIG_UNDEF) {
-		grp &= ~DEV_GRP_MASK;
-		grp |= rconfig->devgroup << DEV_GRP_SHIFT;
-		err = twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
+		grp_value = (grp & DEV_GRP_MASK) >> DEV_GRP_SHIFT;
+
+		if (rconfig->devgroup != grp_value) {
+			grp &= ~DEV_GRP_MASK;
+			grp |= rconfig->devgroup << DEV_GRP_SHIFT;
+			err = twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
 				       grp, rconfig_addr + DEV_GRP_OFFSET);
-		if (err < 0) {
-			pr_err("TWL4030 failed to program devgroup\n");
-			return err;
+			if (err < 0) {
+				pr_err("TWL4030 failed to program devgroup\n");
+				return err;
+			}
 		}
 	}
 
 	/* Set resource types */
-	err = twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &type,
+	if ((rconfig->type != TWL4030_RESCONFIG_UNDEF) ||
+		(rconfig->type2 != TWL4030_RESCONFIG_UNDEF)) {
+
+		err = twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &type,
 				rconfig_addr + TYPE_OFFSET);
-	if (err < 0) {
-		pr_err("TWL4030 Resource %d type could not be read\n",
-			rconfig->resource);
-		return err;
-	}
+		if (err < 0) {
+			pr_err("TWL4030 Resource %d type could not be read\n",
+				rconfig->resource);
+			return err;
+		}
 
-	if (rconfig->type != TWL4030_RESCONFIG_UNDEF) {
-		type &= ~TYPE_MASK;
-		type |= rconfig->type << TYPE_SHIFT;
-	}
+		type_value = type;
 
-	if (rconfig->type2 != TWL4030_RESCONFIG_UNDEF) {
-		type &= ~TYPE2_MASK;
-		type |= rconfig->type2 << TYPE2_SHIFT;
-	}
+		if (rconfig->type != TWL4030_RESCONFIG_UNDEF) {
+			type &= ~TYPE_MASK;
+			type |= rconfig->type << TYPE_SHIFT;
+		}
 
-	err = twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
+		if (rconfig->type2 != TWL4030_RESCONFIG_UNDEF) {
+			type &= ~TYPE2_MASK;
+			type |= rconfig->type2 << TYPE2_SHIFT;
+		}
+
+		if (type != type_value) {
+			err = twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
 				type, rconfig_addr + TYPE_OFFSET);
-	if (err < 0) {
-		pr_err("TWL4030 failed to program resource type\n");
-		return err;
+			if (err < 0) {
+				pr_err("TWL4030 failed to program resource type\n");
+				return err;
+			}
+		}
 	}
 
 	/* Set remap states */
-	err = twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &remap,
+	if ((rconfig->remap_off != TWL4030_RESCONFIG_UNDEF) ||
+		(rconfig->remap_sleep != TWL4030_RESCONFIG_UNDEF)) {
+		err = twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &remap,
 			      rconfig_addr + REMAP_OFFSET);
-	if (err < 0) {
-		pr_err("TWL4030 Resource %d remap could not be read\n",
-			rconfig->resource);
-		return err;
-	}
+		if (err < 0) {
+			pr_err("TWL4030 Resource %d remap could not be read\n",
+				rconfig->resource);
+			return err;
+		}
 
-	if (rconfig->remap_off != TWL4030_RESCONFIG_UNDEF) {
-		remap &= ~OFF_STATE_MASK;
-		remap |= rconfig->remap_off << OFF_STATE_SHIFT;
-	}
+		remap_value = remap;
 
-	if (rconfig->remap_sleep != TWL4030_RESCONFIG_UNDEF) {
-		remap &= ~SLEEP_STATE_MASK;
-		remap |= rconfig->remap_sleep << SLEEP_STATE_SHIFT;
-	}
+		if (rconfig->remap_off != TWL4030_RESCONFIG_UNDEF) {
+			remap &= ~OFF_STATE_MASK;
+			remap |= rconfig->remap_off << OFF_STATE_SHIFT;
+		}
 
-	err = twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
-			       remap,
-			       rconfig_addr + REMAP_OFFSET);
-	if (err < 0) {
-		pr_err("TWL4030 failed to program remap\n");
-		return err;
+		if (rconfig->remap_sleep != TWL4030_RESCONFIG_UNDEF) {
+			remap &= ~SLEEP_STATE_MASK;
+			remap |= rconfig->remap_sleep << SLEEP_STATE_SHIFT;
+		}
+
+		if (remap != remap_value) {
+			err = twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
+			       remap, rconfig_addr + REMAP_OFFSET);
+			if (err < 0) {
+				pr_err("TWL4030 failed to program remap\n");
+				return err;
+			}
+		}
 	}
 
 	return 0;
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 3/7] MFD: TWL4030: Modifying the macro name Main_Ref to all caps
  2011-05-06 13:17 ` [PATCH v10 3/7] MFD: TWL4030: Modifying the macro name Main_Ref to all caps Lesly A M
@ 2011-05-12 10:42   ` Tony Lindgren
  2011-05-13  7:12     ` Manuel, Lesly Arackal
  2011-05-13 17:20   ` Samuel Ortiz
  1 sibling, 1 reply; 28+ messages in thread
From: Tony Lindgren @ 2011-05-12 10:42 UTC (permalink / raw)
  To: Lesly A M; +Cc: linux-omap, Nishanth Menon, David Derrick, Samuel Ortiz

* Lesly A M <leslyam@ti.com> [110506 06:14]:
> Modifying the macro name Main_Ref to all caps(MAIN_REF).

This may get counted as "crazy churn" patch.. Please provide
some reason for doing this in the patch description.

Tony

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards
  2011-05-06 13:17 ` [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards Lesly A M
@ 2011-05-12 10:56   ` Tony Lindgren
  2011-05-13  7:53     ` Manuel, Lesly Arackal
  2011-05-13 18:39   ` Samuel Ortiz
  2011-06-02 18:29   ` Kevin Hilman
  2 siblings, 1 reply; 28+ messages in thread
From: Tony Lindgren @ 2011-05-12 10:56 UTC (permalink / raw)
  To: Lesly A M; +Cc: linux-omap, Nishanth Menon, David Derrick, Samuel Ortiz

* Lesly A M <leslyam@ti.com> [110506 06:14]:
> Power bus message sequence for TWL4030 to enter sleep/wakeup/warm_reset.
> 
> TWL4030 power scripts which can be used by different OMAP3 boards
> with the power companion chip (TWL4030 series).
> 
> The twl4030 generic script can be used by any board file to update
> the power data in twl4030_platform_data.
> 
> Since the TWL4030 power script has dependency with APIs in twl4030-power.c
> removing the __init for these APIs.
> 
> For more information please see:
> 	http://omapedia.org/wiki/TWL4030_power_scripts
> 
> Signed-off-by: Lesly A M <leslyam@ti.com>
> Cc: Nishanth Menon <nm@ti.com>
> Cc: David Derrick <dderrick@ti.com>
> Cc: Samuel Ortiz <sameo@linux.intel.com>
> ---
>  arch/arm/configs/omap2plus_defconfig |    1 +
>  arch/arm/mach-omap2/devices.c        |   15 ++
>  drivers/mfd/Kconfig                  |   11 +
>  drivers/mfd/Makefile                 |    1 +
>  drivers/mfd/twl4030-power.c          |   31 ++--
>  drivers/mfd/twl4030-script-omap.c    |  373 ++++++++++++++++++++++++++++++++++
>  include/linux/i2c/twl.h              |   41 ++++-
>  7 files changed, 454 insertions(+), 19 deletions(-)
>  create mode 100644 drivers/mfd/twl4030-script-omap.c
> 
> diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig
> index 076db52..d9b9858 100644
> --- a/arch/arm/configs/omap2plus_defconfig
> +++ b/arch/arm/configs/omap2plus_defconfig
> @@ -184,6 +184,7 @@ CONFIG_TWL4030_WATCHDOG=y
>  CONFIG_MENELAUS=y
>  CONFIG_TWL4030_CORE=y
>  CONFIG_TWL4030_POWER=y
> +CONFIG_TWL4030_SCRIPT=m
>  CONFIG_REGULATOR=y
>  CONFIG_REGULATOR_TWL4030=y
>  CONFIG_REGULATOR_TPS65023=y
> diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
> index 7b85585..7653329 100644
> --- a/arch/arm/mach-omap2/devices.c
> +++ b/arch/arm/mach-omap2/devices.c
> @@ -329,6 +329,20 @@ static void omap_init_audio(void)
>  static inline void omap_init_audio(void) {}
>  #endif
>  
> +#ifdef CONFIG_ARCH_OMAP3
> +static struct platform_device omap_twl4030_script = {
> +	.name	= "twl4030_script",
> +	.id	= -1,
> +};
> +
> +static void omap_init_twl4030_script(void)
> +{
> +	platform_device_register(&omap_twl4030_script);
> +}
> +#else
> +static inline void omap_init_twl4030_script(void) {}
> +#endif

This should be if defined(CONFIG_TWL4030_SCRIPT) ||
defined(CONFIG_TWL4030_SCRIPT_MODULE) instead. And you should
probably only enable it based on some board specific flag.

>  #if defined(CONFIG_SPI_OMAP24XX) || defined(CONFIG_SPI_OMAP24XX_MODULE)
>  
>  #include <plat/mcspi.h>
> @@ -691,6 +705,7 @@ static int __init omap2_init_devices(void)
>  	omap_init_sham();
>  	omap_init_aes();
>  	omap_init_vout();
> +	omap_init_twl4030_script();
>  
>  	return 0;
>  }

The changes above probably also conflict with what I have
in devel-cleanup branch. So maybe split it so I can take this
part?

Also, please note that patches touching arch/arm/*omap*/
files should also be sent with linux-arm-kernel list Cc'd.

Regards,

Tony

Tony

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 3/7] MFD: TWL4030: Modifying the macro name Main_Ref to all caps
  2011-05-12 10:42   ` Tony Lindgren
@ 2011-05-13  7:12     ` Manuel, Lesly Arackal
  0 siblings, 0 replies; 28+ messages in thread
From: Manuel, Lesly Arackal @ 2011-05-13  7:12 UTC (permalink / raw)
  To: Tony Lindgren; +Cc: linux-omap, Nishanth Menon, David Derrick, Samuel Ortiz

Hi Tony,

On Thu, May 12, 2011 at 4:12 PM, Tony Lindgren <tony@atomide.com> wrote:
> * Lesly A M <leslyam@ti.com> [110506 06:14]:
>> Modifying the macro name Main_Ref to all caps(MAIN_REF).
>
> This may get counted as "crazy churn" patch.. Please provide
> some reason for doing this in the patch description.

I will update the change logs.

Explained in Chapter 12 Documentation/CodingStyle.

As per coding-style the macro name should be capitalized.
So modifying the macro name Main_Ref to all caps(MAIN_REF).

Regards
Lesly

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards
  2011-05-12 10:56   ` Tony Lindgren
@ 2011-05-13  7:53     ` Manuel, Lesly Arackal
  0 siblings, 0 replies; 28+ messages in thread
From: Manuel, Lesly Arackal @ 2011-05-13  7:53 UTC (permalink / raw)
  To: Tony Lindgren; +Cc: linux-omap, Nishanth Menon, David Derrick, Samuel Ortiz

Hi Tony,

On Thu, May 12, 2011 at 4:26 PM, Tony Lindgren <tony@atomide.com> wrote:
> * Lesly A M <leslyam@ti.com> [110506 06:14]:
>> Power bus message sequence for TWL4030 to enter sleep/wakeup/warm_reset.
>>
>> TWL4030 power scripts which can be used by different OMAP3 boards
>> with the power companion chip (TWL4030 series).
>>
>> The twl4030 generic script can be used by any board file to update
>> the power data in twl4030_platform_data.
>>
>> Since the TWL4030 power script has dependency with APIs in twl4030-power.c
>> removing the __init for these APIs.
>>
>> For more information please see:
>>       http://omapedia.org/wiki/TWL4030_power_scripts
>>
>> Signed-off-by: Lesly A M <leslyam@ti.com>
>> Cc: Nishanth Menon <nm@ti.com>
>> Cc: David Derrick <dderrick@ti.com>
>> Cc: Samuel Ortiz <sameo@linux.intel.com>
>> ---
>>  arch/arm/configs/omap2plus_defconfig |    1 +
>>  arch/arm/mach-omap2/devices.c        |   15 ++
>>  drivers/mfd/Kconfig                  |   11 +
>>  drivers/mfd/Makefile                 |    1 +
>>  drivers/mfd/twl4030-power.c          |   31 ++--
>>  drivers/mfd/twl4030-script-omap.c    |  373 ++++++++++++++++++++++++++++++++++
>>  include/linux/i2c/twl.h              |   41 ++++-
>>  7 files changed, 454 insertions(+), 19 deletions(-)
>>  create mode 100644 drivers/mfd/twl4030-script-omap.c
>>
>> diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig
>> index 076db52..d9b9858 100644
>> --- a/arch/arm/configs/omap2plus_defconfig
>> +++ b/arch/arm/configs/omap2plus_defconfig
>> @@ -184,6 +184,7 @@ CONFIG_TWL4030_WATCHDOG=y
>>  CONFIG_MENELAUS=y
>>  CONFIG_TWL4030_CORE=y
>>  CONFIG_TWL4030_POWER=y
>> +CONFIG_TWL4030_SCRIPT=m
>>  CONFIG_REGULATOR=y
>>  CONFIG_REGULATOR_TWL4030=y
>>  CONFIG_REGULATOR_TPS65023=y
>> diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
>> index 7b85585..7653329 100644
>> --- a/arch/arm/mach-omap2/devices.c
>> +++ b/arch/arm/mach-omap2/devices.c
>> @@ -329,6 +329,20 @@ static void omap_init_audio(void)
>>  static inline void omap_init_audio(void) {}
>>  #endif
>>
>> +#ifdef CONFIG_ARCH_OMAP3
>> +static struct platform_device omap_twl4030_script = {
>> +     .name   = "twl4030_script",
>> +     .id     = -1,
>> +};
>> +
>> +static void omap_init_twl4030_script(void)
>> +{
>> +     platform_device_register(&omap_twl4030_script);
>> +}
>> +#else
>> +static inline void omap_init_twl4030_script(void) {}
>> +#endif
>
> This should be if defined(CONFIG_TWL4030_SCRIPT) ||
> defined(CONFIG_TWL4030_SCRIPT_MODULE) instead. And you should
> probably only enable it based on some board specific flag.

Ok

>
>>  #if defined(CONFIG_SPI_OMAP24XX) || defined(CONFIG_SPI_OMAP24XX_MODULE)
>>
>>  #include <plat/mcspi.h>
>> @@ -691,6 +705,7 @@ static int __init omap2_init_devices(void)
>>       omap_init_sham();
>>       omap_init_aes();
>>       omap_init_vout();
>> +     omap_init_twl4030_script();
>>
>>       return 0;
>>  }
>
> The changes above probably also conflict with what I have
> in devel-cleanup branch. So maybe split it so I can take this
> part?
Ok, I will split this change to a separate patch.

> Also, please note that patches touching arch/arm/*omap*/
> files should also be sent with linux-arm-kernel list Cc'd.
Ok

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

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 1/7] MFD: TWL4030: Fix for the TWL4030 sleep/wakeup sequence
  2011-05-06 13:17 ` [PATCH v10 1/7] MFD: TWL4030: Fix for the TWL4030 sleep/wakeup sequence Lesly A M
@ 2011-05-13 12:40   ` Kevin Hilman
  2011-05-13 17:14   ` Samuel Ortiz
  1 sibling, 0 replies; 28+ messages in thread
From: Kevin Hilman @ 2011-05-13 12:40 UTC (permalink / raw)
  To: Lesly A M; +Cc: linux-omap, Nishanth Menon, David Derrick, Samuel Ortiz

Lesly A M <leslyam@ti.com> writes:

> Only configure sleep script when the flag is TWL4030_SLEEP_SCRIPT.
>
> Adding the missing brackets for fixing the issue.
>
> Signed-off-by: Lesly A M <leslyam@ti.com>
> Cc: Nishanth Menon <nm@ti.com>
> Cc: David Derrick <dderrick@ti.com>
> Cc: Samuel Ortiz <sameo@linux.intel.com>

Acked-by: Kevin Hilman <khilman@ti.com>


> ---
>  drivers/mfd/twl4030-power.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
> index 6fed964..97f54ce 100644
> --- a/drivers/mfd/twl4030-power.c
> +++ b/drivers/mfd/twl4030-power.c
> @@ -447,12 +447,13 @@ static int __init load_twl4030_script(struct twl4030_script *tscript,
>  		if (err)
>  			goto out;
>  	}
> -	if (tscript->flags & TWL4030_SLEEP_SCRIPT)
> +	if (tscript->flags & TWL4030_SLEEP_SCRIPT) {
>  		if (order)
>  			pr_warning("TWL4030: Bad order of scripts (sleep "\
>  					"script before wakeup) Leads to boot"\
>  					"failure on some boards\n");
>  		err = twl4030_config_sleep_sequence(address);
> +	}
>  out:
>  	return err;
>  }

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 1/7] MFD: TWL4030: Fix for the TWL4030 sleep/wakeup sequence
  2011-05-06 13:17 ` [PATCH v10 1/7] MFD: TWL4030: Fix for the TWL4030 sleep/wakeup sequence Lesly A M
  2011-05-13 12:40   ` Kevin Hilman
@ 2011-05-13 17:14   ` Samuel Ortiz
  1 sibling, 0 replies; 28+ messages in thread
From: Samuel Ortiz @ 2011-05-13 17:14 UTC (permalink / raw)
  To: Lesly A M; +Cc: linux-omap, Nishanth Menon, David Derrick

Hi Lesly,

On Fri, May 06, 2011 at 06:47:07PM +0530, Lesly A M wrote:
> Only configure sleep script when the flag is TWL4030_SLEEP_SCRIPT.
> 
> Adding the missing brackets for fixing the issue.
This is already upstream.

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 2/7] MFD: TWL4030: Correct the warning print during script loading
  2011-05-06 13:17 ` [PATCH v10 2/7] MFD: TWL4030: Correct the warning print during script loading Lesly A M
@ 2011-05-13 17:19   ` Samuel Ortiz
  0 siblings, 0 replies; 28+ messages in thread
From: Samuel Ortiz @ 2011-05-13 17:19 UTC (permalink / raw)
  To: Lesly A M; +Cc: linux-omap, Nishanth Menon, David Derrick

Hi Lesly,

On Fri, May 06, 2011 at 06:47:08PM +0530, Lesly A M wrote:
> Correcting the if condition check for printing the warning,
> if wakeup script is not updated before updating the sleep script.
> 
> Since the flag 'order' is set to '1' while updating the wakeup script for P1P2,
> the condition checking for printing the warning should be if(!order)
> (ie: print the warning if wakeup script is not updated before updating the sleep script)
> 
This one is already applied to my for-next.

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 3/7] MFD: TWL4030: Modifying the macro name Main_Ref to all caps
  2011-05-06 13:17 ` [PATCH v10 3/7] MFD: TWL4030: Modifying the macro name Main_Ref to all caps Lesly A M
  2011-05-12 10:42   ` Tony Lindgren
@ 2011-05-13 17:20   ` Samuel Ortiz
  1 sibling, 0 replies; 28+ messages in thread
From: Samuel Ortiz @ 2011-05-13 17:20 UTC (permalink / raw)
  To: Lesly A M; +Cc: linux-omap, Nishanth Menon, David Derrick

Hi Lesly,

On Fri, May 06, 2011 at 06:47:09PM +0530, Lesly A M wrote:
> Modifying the macro name Main_Ref to all caps(MAIN_REF).
This one is already on my for-next branch. I'll update the Changelog
accordingly.

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 5/7] MFD: TWL4030: TWL version checking
  2011-05-06 13:17 ` [PATCH v10 5/7] MFD: TWL4030: TWL version checking Lesly A M
@ 2011-05-13 17:22   ` Samuel Ortiz
  0 siblings, 0 replies; 28+ messages in thread
From: Samuel Ortiz @ 2011-05-13 17:22 UTC (permalink / raw)
  To: Lesly A M; +Cc: linux-omap, Nishanth Menon, David Derrick

Hi Lesly,

On Fri, May 06, 2011 at 06:47:11PM +0530, Lesly A M wrote:
> Added API to get the TWL5030 Si version from the IDCODE register.
> It is used for enabling the workaround for TWL erratum 27.
This one is also already applied.

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards
  2011-05-06 13:17 ` [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards Lesly A M
  2011-05-12 10:56   ` Tony Lindgren
@ 2011-05-13 18:39   ` Samuel Ortiz
  2011-05-17 13:40     ` Manuel, Lesly Arackal
  2011-06-02 18:29   ` Kevin Hilman
  2 siblings, 1 reply; 28+ messages in thread
From: Samuel Ortiz @ 2011-05-13 18:39 UTC (permalink / raw)
  To: Lesly A M; +Cc: linux-omap, Nishanth Menon, David Derrick

Hi Lesly,

On Fri, May 06, 2011 at 06:47:10PM +0530, Lesly A M wrote:
> Power bus message sequence for TWL4030 to enter sleep/wakeup/warm_reset.
> 
> TWL4030 power scripts which can be used by different OMAP3 boards
> with the power companion chip (TWL4030 series).
> 
> The twl4030 generic script can be used by any board file to update
> the power data in twl4030_platform_data.
> 
> Since the TWL4030 power script has dependency with APIs in twl4030-power.c
> removing the __init for these APIs.
> 
> For more information please see:
> 	http://omapedia.org/wiki/TWL4030_power_scripts
I understand you guys are trying to keep the arch/arm stats to a sane level,
but I don't see why this driver should be under drivers/mfd/. I'm usually
flexible about what goes into drivers/mfd, but this one seems out of context
to me.

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards
  2011-05-13 18:39   ` Samuel Ortiz
@ 2011-05-17 13:40     ` Manuel, Lesly Arackal
  2011-05-22 21:40       ` Samuel Ortiz
  0 siblings, 1 reply; 28+ messages in thread
From: Manuel, Lesly Arackal @ 2011-05-17 13:40 UTC (permalink / raw)
  To: Samuel Ortiz; +Cc: linux-omap, Nishanth Menon, David Derrick

Hi Samuel,

On Sat, May 14, 2011 at 12:09 AM, Samuel Ortiz <sameo@linux.intel.com> wrote:
> Hi Lesly,
>
> On Fri, May 06, 2011 at 06:47:10PM +0530, Lesly A M wrote:
>> Power bus message sequence for TWL4030 to enter sleep/wakeup/warm_reset.
>>
>> TWL4030 power scripts which can be used by different OMAP3 boards
>> with the power companion chip (TWL4030 series).
>>
>> The twl4030 generic script can be used by any board file to update
>> the power data in twl4030_platform_data.
>>
>> Since the TWL4030 power script has dependency with APIs in twl4030-power.c
>> removing the __init for these APIs.
>>
>> For more information please see:
>>       http://omapedia.org/wiki/TWL4030_power_scripts
> I understand you guys are trying to keep the arch/arm stats to a sane level,
> but I don't see why this driver should be under drivers/mfd/. I'm usually
> flexible about what goes into drivers/mfd, but this one seems out of context
> to me.

Since this script driver file contains the changes for PM IC (TWL4030 series),
which is a Multifunction devices with GPIOs, USB, audio,
current regulators, power management chip, ...

This script driver file contains the pm bus message sequence which will be
programmed in the scratch memory of the PM IC, and some resource configuration
data for PM IC resources.

This change was suggested by Tony for the last version of this patch series.

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

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards
  2011-05-17 13:40     ` Manuel, Lesly Arackal
@ 2011-05-22 21:40       ` Samuel Ortiz
  2011-05-24 12:17         ` Manuel, Lesly Arackal
  0 siblings, 1 reply; 28+ messages in thread
From: Samuel Ortiz @ 2011-05-22 21:40 UTC (permalink / raw)
  To: Manuel, Lesly Arackal; +Cc: linux-omap, Nishanth Menon, David Derrick

Hi Lesly,

On Tue, May 17, 2011 at 07:10:03PM +0530, Manuel, Lesly Arackal wrote:
> Hi Samuel,
> 
> On Sat, May 14, 2011 at 12:09 AM, Samuel Ortiz <sameo@linux.intel.com> wrote:
> > Hi Lesly,
> >
> > On Fri, May 06, 2011 at 06:47:10PM +0530, Lesly A M wrote:
> >> Power bus message sequence for TWL4030 to enter sleep/wakeup/warm_reset.
> >>
> >> TWL4030 power scripts which can be used by different OMAP3 boards
> >> with the power companion chip (TWL4030 series).
> >>
> >> The twl4030 generic script can be used by any board file to update
> >> the power data in twl4030_platform_data.
> >>
> >> Since the TWL4030 power script has dependency with APIs in twl4030-power.c
> >> removing the __init for these APIs.
> >>
> >> For more information please see:
> >>       http://omapedia.org/wiki/TWL4030_power_scripts
> > I understand you guys are trying to keep the arch/arm stats to a sane level,
> > but I don't see why this driver should be under drivers/mfd/. I'm usually
> > flexible about what goes into drivers/mfd, but this one seems out of context
> > to me.
> 
> Since this script driver file contains the changes for PM IC (TWL4030 series),
> which is a Multifunction devices with GPIOs, USB, audio,
> current regulators, power management chip, ...
> 
> This script driver file contains the pm bus message sequence which will be
> programmed in the scratch memory of the PM IC, and some resource configuration
> data for PM IC resources.
> 
> This change was suggested by Tony for the last version of this patch series.
I understand, but I'm trying to get the "let's push everything that somehow
linked to our MFD driver to drivers/mfd/" crazyness down to a sane level.
This one doesn't look like it should be part of drivers/mfd.

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards
  2011-05-22 21:40       ` Samuel Ortiz
@ 2011-05-24 12:17         ` Manuel, Lesly Arackal
  0 siblings, 0 replies; 28+ messages in thread
From: Manuel, Lesly Arackal @ 2011-05-24 12:17 UTC (permalink / raw)
  To: Samuel Ortiz, Tony Lindgren; +Cc: linux-omap, Nishanth Menon, David Derrick

Hi Samuel,

On Mon, May 23, 2011 at 3:10 AM, Samuel Ortiz <sameo@linux.intel.com> wrote:
> Hi Lesly,
>
> On Tue, May 17, 2011 at 07:10:03PM +0530, Manuel, Lesly Arackal wrote:
>> Hi Samuel,
>>
>> On Sat, May 14, 2011 at 12:09 AM, Samuel Ortiz <sameo@linux.intel.com> wrote:
>> > Hi Lesly,
>> >
>> > On Fri, May 06, 2011 at 06:47:10PM +0530, Lesly A M wrote:
>> >> Power bus message sequence for TWL4030 to enter sleep/wakeup/warm_reset.
>> >>
>> >> TWL4030 power scripts which can be used by different OMAP3 boards
>> >> with the power companion chip (TWL4030 series).
>> >>
>> >> The twl4030 generic script can be used by any board file to update
>> >> the power data in twl4030_platform_data.
>> >>
>> >> Since the TWL4030 power script has dependency with APIs in twl4030-power.c
>> >> removing the __init for these APIs.
>> >>
>> >> For more information please see:
>> >>       http://omapedia.org/wiki/TWL4030_power_scripts
>> > I understand you guys are trying to keep the arch/arm stats to a sane level,
>> > but I don't see why this driver should be under drivers/mfd/. I'm usually
>> > flexible about what goes into drivers/mfd, but this one seems out of context
>> > to me.
>>
>> Since this script driver file contains the changes for PM IC (TWL4030 series),
>> which is a Multifunction devices with GPIOs, USB, audio,
>> current regulators, power management chip, ...
>>
>> This script driver file contains the pm bus message sequence which will be
>> programmed in the scratch memory of the PM IC, and some resource configuration
>> data for PM IC resources.
>>
>> This change was suggested by Tony for the last version of this patch series.
> I understand, but I'm trying to get the "let's push everything that somehow
> linked to our MFD driver to drivers/mfd/" crazyness down to a sane level.
> This one doesn't look like it should be part of drivers/mfd.
>

This was moved to drivers/mfd/ based on the discussion of last version
of this patch series.
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg48349.html

I am slightly confused about, where to place these changes ?

in ../../mach-omap2/ or drivers/mfd/  ...

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

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27
  2011-05-06 13:17 [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Lesly A M
                   ` (6 preceding siblings ...)
  2011-05-06 13:17 ` [PATCH v10 7/7] MFD: TWL4030: optimizing resource configuration Lesly A M
@ 2011-06-02 15:36 ` Steve Sakoman
  2011-06-02 17:12   ` Steve Sakoman
  2011-06-03  0:31 ` Kevin Hilman
  8 siblings, 1 reply; 28+ messages in thread
From: Steve Sakoman @ 2011-06-02 15:36 UTC (permalink / raw)
  To: Lesly A M; +Cc: linux-omap, Nishanth Menon, David Derrick, Samuel Ortiz

On Fri, May 6, 2011 at 6:17 AM, Lesly A M <leslyam@ti.com> wrote:
> Patch series for TWL4030 power scripts for OMAP3 boards and
> workaround for TWL erratum 27.
>
> Changes for implementing TWL4030 power scripts recommended by hardware team.
> Introduced a new TWL4030 power script file, which can be used by different
> OMAP3 board with the power companion chip TWL4030.
>
> Updated the changes for TWL4030 errata 27 & 28, and modified
> the TWL4030 power script.
> Workaround for TWL4030 erratum 27 is required for Si version less than or
> equal to TWL5030 ES1.1.
>
> TWL4030 script changes re-based on Kevin's PM tree in pm branch.
>
> This patch series have a dependency with the patch:
>        http://www.spinics.net/lists/linux-omap/msg50547.html
>
> Changes in v7:
>        changes to fix Nishanth Menon's comments
>                i) Added the workaround for TWL4030 Erratum 27
>
>        split the first patch in v6
>                i)  fix for twl4030 script load
>                ii) correct the warning print during script loading
>
>        Added new patch files
>                i) changing sys_off signal polarity
>
> Changes in v8:
>        updated the change logs
>        moving the TWL IDCODE checking to twl-core.c
>
> Changes in V9:
>        changes to fix David Derrick's comments
>                i) turn OFF the NRES_PWRON resource in warm reset sequence
>                ii) optimize the i2c writes during resource configuration
>
> Changes in V10:
>        changes for Tony's comments
>                i) making the TWL4030 power scripts loadable module
>
> Since the voltage layer is evolving to a new design, the voltage dependant
> changes required for the TWL4030 script are not incorporated in the patch series.
> So this TWL4030 script patch series can be tested with a separate patch for
> voltage layer changes.
>
>        link: http://pastebin.mozilla.org/1219625
>
> This changes are tested on OMAP3430 & OMAP3630 SDP with off mode enabled in suspend path.
>        Tested with suspend/resume script, which will test system suspend in a loop.
>        Tested for more than 1000 iterations.
>        Also tested the reboot with WRM_RST button & reboot command.

I've tested this series on Overo and it seems to have no effect.

After 'echo mem > /sys/power/state' my system draws 53mA both with and
without the above patch set.

Has anyone else confirmed these changes on a platform other than the SDP?

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

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27
  2011-06-02 15:36 ` [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Steve Sakoman
@ 2011-06-02 17:12   ` Steve Sakoman
  0 siblings, 0 replies; 28+ messages in thread
From: Steve Sakoman @ 2011-06-02 17:12 UTC (permalink / raw)
  To: Lesly A M
  Cc: linux-omap, Nishanth Menon, David Derrick, Samuel Ortiz, Kevin Hilman

On Thu, Jun 2, 2011 at 8:36 AM, Steve Sakoman <sakoman@gmail.com> wrote:
> On Fri, May 6, 2011 at 6:17 AM, Lesly A M <leslyam@ti.com> wrote:
>> Patch series for TWL4030 power scripts for OMAP3 boards and
>> workaround for TWL erratum 27.
>>
>> Changes for implementing TWL4030 power scripts recommended by hardware team.
>> Introduced a new TWL4030 power script file, which can be used by different
>> OMAP3 board with the power companion chip TWL4030.
>>
>> Updated the changes for TWL4030 errata 27 & 28, and modified
>> the TWL4030 power script.
>> Workaround for TWL4030 erratum 27 is required for Si version less than or
>> equal to TWL5030 ES1.1.
>>
>> TWL4030 script changes re-based on Kevin's PM tree in pm branch.
>>
>> This patch series have a dependency with the patch:
>>        http://www.spinics.net/lists/linux-omap/msg50547.html
>>
>> Changes in v7:
>>        changes to fix Nishanth Menon's comments
>>                i) Added the workaround for TWL4030 Erratum 27
>>
>>        split the first patch in v6
>>                i)  fix for twl4030 script load
>>                ii) correct the warning print during script loading
>>
>>        Added new patch files
>>                i) changing sys_off signal polarity
>>
>> Changes in v8:
>>        updated the change logs
>>        moving the TWL IDCODE checking to twl-core.c
>>
>> Changes in V9:
>>        changes to fix David Derrick's comments
>>                i) turn OFF the NRES_PWRON resource in warm reset sequence
>>                ii) optimize the i2c writes during resource configuration
>>
>> Changes in V10:
>>        changes for Tony's comments
>>                i) making the TWL4030 power scripts loadable module
>>
>> Since the voltage layer is evolving to a new design, the voltage dependant
>> changes required for the TWL4030 script are not incorporated in the patch series.
>> So this TWL4030 script patch series can be tested with a separate patch for
>> voltage layer changes.
>>
>>        link: http://pastebin.mozilla.org/1219625
>>
>> This changes are tested on OMAP3430 & OMAP3630 SDP with off mode enabled in suspend path.
>>        Tested with suspend/resume script, which will test system suspend in a loop.
>>        Tested for more than 1000 iterations.
>>        Also tested the reboot with WRM_RST button & reboot command.
>
> I've tested this series on Overo and it seems to have no effect.
>
> After 'echo mem > /sys/power/state' my system draws 53mA both with and
> without the above patch set.
>
> Has anyone else confirmed these changes on a platform other than the SDP?

I suppose I should add my assumptions in testing:

- CONFIG_TWL4030_SCRIPT needs to be turned on in omap2plus_defconfig
- no board changes are required

Correct assumptions?

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

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards
  2011-05-06 13:17 ` [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards Lesly A M
  2011-05-12 10:56   ` Tony Lindgren
  2011-05-13 18:39   ` Samuel Ortiz
@ 2011-06-02 18:29   ` Kevin Hilman
  2011-06-06 14:03     ` Manuel, Lesly Arackal
  2 siblings, 1 reply; 28+ messages in thread
From: Kevin Hilman @ 2011-06-02 18:29 UTC (permalink / raw)
  To: Lesly A M; +Cc: linux-omap, Nishanth Menon, David Derrick, Samuel Ortiz

Lesly A M <leslyam@ti.com> writes:

> Power bus message sequence for TWL4030 to enter sleep/wakeup/warm_reset.
>
> TWL4030 power scripts which can be used by different OMAP3 boards
> with the power companion chip (TWL4030 series).
>
> The twl4030 generic script can be used by any board file to update
> the power data in twl4030_platform_data.

What about existing board files that are using their own scripts?

On n900 for example, board-rx51-peripherals.c has its own custom
scripts which are registered at board init time.  These are then
over written by your new driver which loads later.

So first, can you verify if the n900 scripts can/should be replaced by
these generic ones.  And second, please find a way for board files to
override these scripts at runtime instead of using a Kconfig.

> Since the TWL4030 power script has dependency with APIs in twl4030-power.c
> removing the __init for these APIs.

I think separating this part out into a separate patch, with a better
description would make the rest of this patch much more readable.  As it
is, it doesn't make much sense since all the script functions and data
are __init or __initdata.

These changes also introduce a new complier warning:

  CC      drivers/mfd/twl4030-power.o
/work/kernel/omap/pm/drivers/mfd/twl4030-power.c: In function 'twl4030_power_init':
/work/kernel/omap/pm/drivers/mfd/twl4030-power.c:457:5: warning: 'err' may be used uninitialized in this function
/work/kernel/omap/pm/drivers/mfd/twl4030-power.c:171:6: note: 'err' was declared here
 

> For more information please see:
> 	http://omapedia.org/wiki/TWL4030_power_scripts

This is an excellent wiki, thank for the detailed description!

> Signed-off-by: Lesly A M <leslyam@ti.com>
> Cc: Nishanth Menon <nm@ti.com>
> Cc: David Derrick <dderrick@ti.com>
> Cc: Samuel Ortiz <sameo@linux.intel.com>
> ---
>  arch/arm/configs/omap2plus_defconfig |    1 +
>  arch/arm/mach-omap2/devices.c        |   15 ++
>  drivers/mfd/Kconfig                  |   11 +
>  drivers/mfd/Makefile                 |    1 +
>  drivers/mfd/twl4030-power.c          |   31 ++--
>  drivers/mfd/twl4030-script-omap.c    |  373 ++++++++++++++++++++++++++++++++++
>  include/linux/i2c/twl.h              |   41 ++++-
>  7 files changed, 454 insertions(+), 19 deletions(-)
>  create mode 100644 drivers/mfd/twl4030-script-omap.c
>
> diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig
> index 076db52..d9b9858 100644
> --- a/arch/arm/configs/omap2plus_defconfig
> +++ b/arch/arm/configs/omap2plus_defconfig
> @@ -184,6 +184,7 @@ CONFIG_TWL4030_WATCHDOG=y
>  CONFIG_MENELAUS=y
>  CONFIG_TWL4030_CORE=y
>  CONFIG_TWL4030_POWER=y
> +CONFIG_TWL4030_SCRIPT=m
>  CONFIG_REGULATOR=y
>  CONFIG_REGULATOR_TWL4030=y
>  CONFIG_REGULATOR_TPS65023=y
> diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
> index 7b85585..7653329 100644
> --- a/arch/arm/mach-omap2/devices.c
> +++ b/arch/arm/mach-omap2/devices.c
> @@ -329,6 +329,20 @@ static void omap_init_audio(void)
>  static inline void omap_init_audio(void) {}
>  #endif
>  
> +#ifdef CONFIG_ARCH_OMAP3

Shouldn't this depend on CONFIG_TWL4030_SCRIPT ?

> +static struct platform_device omap_twl4030_script = {
> +	.name	= "twl4030_script",
> +	.id	= -1,
> +};
> +
> +static void omap_init_twl4030_script(void)
> +{
> +	platform_device_register(&omap_twl4030_script);
> +}
> +#else
> +static inline void omap_init_twl4030_script(void) {}
> +#endif

I guess this gets to the debate about whether these scripts should be in
drivers/mfd or in arch/arm/mach-omap2,  but wherever the script data
lives, this platform_device definition and register should be also.

IOW, there's not a clean separation between driver and device currently.
IMO, The platform_driver part should just be part of twl4030-power.c,
and all the scripts and platform_device creation/registration should be
part of the script file.

As far as where the script device data should go, I'd vote for
drivers/mfd, where it can be compiled as a module along with the rest of
the twl4030 code.

>  #if defined(CONFIG_SPI_OMAP24XX) || defined(CONFIG_SPI_OMAP24XX_MODULE)
>  
>  #include <plat/mcspi.h>
> @@ -691,6 +705,7 @@ static int __init omap2_init_devices(void)
>  	omap_init_sham();
>  	omap_init_aes();
>  	omap_init_vout();
> +	omap_init_twl4030_script();
>  
>  	return 0;
>  }
> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index 3ed3ff0..bed88ce 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -204,6 +204,17 @@ config TWL4030_POWER
>  	  and load scripts controlling which resources are switched off/on
>  	  or reset when a sleep, wakeup or warm reset event occurs.
>  
> +config TWL4030_SCRIPT
> +	tristate "Support TWL4030 script for OMAP3 boards"
> +	depends on TWL4030_CORE && TWL4030_POWER
> +	help
> +	  Say yes here if you want to use the twl4030 power scripts
> +	  for OMAP3 boards. Power bus message sequence for
> +	  TWL4030 to enter sleep/wakeup/warm_reset.
> +
> +	  TWL4030 power scripts which can be used by different
> +	  OMAP3 boards with the power companion chip (TWL4030 series).
> +

Why do we need another Kconfig for this?  It should be enabled and
overridden at runtime via board files.

Kevin

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27
  2011-05-06 13:17 [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Lesly A M
                   ` (7 preceding siblings ...)
  2011-06-02 15:36 ` [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Steve Sakoman
@ 2011-06-03  0:31 ` Kevin Hilman
  2011-06-06 14:05   ` Manuel, Lesly Arackal
  8 siblings, 1 reply; 28+ messages in thread
From: Kevin Hilman @ 2011-06-03  0:31 UTC (permalink / raw)
  To: Lesly A M; +Cc: linux-omap, Nishanth Menon, David Derrick, Samuel Ortiz

Lesly A M <leslyam@ti.com> writes:

> Patch series for TWL4030 power scripts for OMAP3 boards and
> workaround for TWL erratum 27.
>
> Changes for implementing TWL4030 power scripts recommended by hardware team.
> Introduced a new TWL4030 power script file, which can be used by different
> OMAP3 board with the power companion chip TWL4030.
>
> Updated the changes for TWL4030 errata 27 & 28, and modified
> the TWL4030 power script.
> Workaround for TWL4030 erratum 27 is required for Si version less than or
> equal to TWL5030 ES1.1.
>
> TWL4030 script changes re-based on Kevin's PM tree in pm branch.

Please update and rebase against mainline.   There should be no
dependencies on my tree.  I see Samuel has merged many of these already,
so the remaining ones need a refresh and retest.

Kevin

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards
  2011-06-02 18:29   ` Kevin Hilman
@ 2011-06-06 14:03     ` Manuel, Lesly Arackal
  2011-06-06 16:08       ` Kevin Hilman
  0 siblings, 1 reply; 28+ messages in thread
From: Manuel, Lesly Arackal @ 2011-06-06 14:03 UTC (permalink / raw)
  To: Kevin Hilman; +Cc: linux-omap, Nishanth Menon, David Derrick, Samuel Ortiz

Hi Kevin,

On Thu, Jun 2, 2011 at 11:59 PM, Kevin Hilman <khilman@ti.com> wrote:
> Lesly A M <leslyam@ti.com> writes:
>
>> Power bus message sequence for TWL4030 to enter sleep/wakeup/warm_reset.
>>
>> TWL4030 power scripts which can be used by different OMAP3 boards
>> with the power companion chip (TWL4030 series).
>>
>> The twl4030 generic script can be used by any board file to update
>> the power data in twl4030_platform_data.
>
> What about existing board files that are using their own scripts?
>
> On n900 for example, board-rx51-peripherals.c has its own custom
> scripts which are registered at board init time.  These are then
> over written by your new driver which loads later.
>
> So first, can you verify if the n900 scripts can/should be replaced by
> these generic ones.  And second, please find a way for board files to
> override these scripts at runtime instead of using a Kconfig.

Customer boards have to modify the script for their board
(may be using modem which is not present in SDP).
Is it ok to add a flag to check whether the board file has already
initialized the script.

>> Since the TWL4030 power script has dependency with APIs in twl4030-power.c
>> removing the __init for these APIs.
>
> I think separating this part out into a separate patch, with a better
> description would make the rest of this patch much more readable.  As it
> is, it doesn't make much sense since all the script functions and data
> are __init or __initdata.
Ok

> These changes also introduce a new complier warning:
>
>  CC      drivers/mfd/twl4030-power.o
> /work/kernel/omap/pm/drivers/mfd/twl4030-power.c: In function 'twl4030_power_init':
> /work/kernel/omap/pm/drivers/mfd/twl4030-power.c:457:5: warning: 'err' may be used uninitialized in this function
> /work/kernel/omap/pm/drivers/mfd/twl4030-power.c:171:6: note: 'err' was declared here

Ok, I will fix it
>
>> For more information please see:
>>       http://omapedia.org/wiki/TWL4030_power_scripts
>
> This is an excellent wiki, thank for the detailed description!
>
>> Signed-off-by: Lesly A M <leslyam@ti.com>
>> Cc: Nishanth Menon <nm@ti.com>
>> Cc: David Derrick <dderrick@ti.com>
>> Cc: Samuel Ortiz <sameo@linux.intel.com>
>> ---
>>  arch/arm/configs/omap2plus_defconfig |    1 +
>>  arch/arm/mach-omap2/devices.c        |   15 ++
>>  drivers/mfd/Kconfig                  |   11 +
>>  drivers/mfd/Makefile                 |    1 +
>>  drivers/mfd/twl4030-power.c          |   31 ++--
>>  drivers/mfd/twl4030-script-omap.c    |  373 ++++++++++++++++++++++++++++++++++
>>  include/linux/i2c/twl.h              |   41 ++++-
>>  7 files changed, 454 insertions(+), 19 deletions(-)
>>  create mode 100644 drivers/mfd/twl4030-script-omap.c
>>
>> diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig
>> index 076db52..d9b9858 100644
>> --- a/arch/arm/configs/omap2plus_defconfig
>> +++ b/arch/arm/configs/omap2plus_defconfig
>> @@ -184,6 +184,7 @@ CONFIG_TWL4030_WATCHDOG=y
>>  CONFIG_MENELAUS=y
>>  CONFIG_TWL4030_CORE=y
>>  CONFIG_TWL4030_POWER=y
>> +CONFIG_TWL4030_SCRIPT=m
>>  CONFIG_REGULATOR=y
>>  CONFIG_REGULATOR_TWL4030=y
>>  CONFIG_REGULATOR_TPS65023=y
>> diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
>> index 7b85585..7653329 100644
>> --- a/arch/arm/mach-omap2/devices.c
>> +++ b/arch/arm/mach-omap2/devices.c
>> @@ -329,6 +329,20 @@ static void omap_init_audio(void)
>>  static inline void omap_init_audio(void) {}
>>  #endif
>>
>> +#ifdef CONFIG_ARCH_OMAP3
>
> Shouldn't this depend on CONFIG_TWL4030_SCRIPT ?
Ok

>> +static struct platform_device omap_twl4030_script = {
>> +     .name   = "twl4030_script",
>> +     .id     = -1,
>> +};
>> +
>> +static void omap_init_twl4030_script(void)
>> +{
>> +     platform_device_register(&omap_twl4030_script);
>> +}
>> +#else
>> +static inline void omap_init_twl4030_script(void) {}
>> +#endif
>
> I guess this gets to the debate about whether these scripts should be in
> drivers/mfd or in arch/arm/mach-omap2,  but wherever the script data
> lives, this platform_device definition and register should be also.
>
> IOW, there's not a clean separation between driver and device currently.
> IMO, The platform_driver part should just be part of twl4030-power.c,
> and all the scripts and platform_device creation/registration should be
> part of the script file.
>
> As far as where the script device data should go, I'd vote for
> drivers/mfd, where it can be compiled as a module along with the rest of
> the twl4030 code.

Any final conclusion ?

>>  #if defined(CONFIG_SPI_OMAP24XX) || defined(CONFIG_SPI_OMAP24XX_MODULE)
>>
>>  #include <plat/mcspi.h>
>> @@ -691,6 +705,7 @@ static int __init omap2_init_devices(void)
>>       omap_init_sham();
>>       omap_init_aes();
>>       omap_init_vout();
>> +     omap_init_twl4030_script();
>>
>>       return 0;
>>  }
>> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
>> index 3ed3ff0..bed88ce 100644
>> --- a/drivers/mfd/Kconfig
>> +++ b/drivers/mfd/Kconfig
>> @@ -204,6 +204,17 @@ config TWL4030_POWER
>>         and load scripts controlling which resources are switched off/on
>>         or reset when a sleep, wakeup or warm reset event occurs.
>>
>> +config TWL4030_SCRIPT
>> +     tristate "Support TWL4030 script for OMAP3 boards"
>> +     depends on TWL4030_CORE && TWL4030_POWER
>> +     help
>> +       Say yes here if you want to use the twl4030 power scripts
>> +       for OMAP3 boards. Power bus message sequence for
>> +       TWL4030 to enter sleep/wakeup/warm_reset.
>> +
>> +       TWL4030 power scripts which can be used by different
>> +       OMAP3 boards with the power companion chip (TWL4030 series).
>> +
>
> Why do we need another Kconfig for this?  It should be enabled and
> overridden at runtime via board files.

Kconfig option was added when script was changed to insert-able module,
which was suggested by Tony as comment for last version.

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

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27
  2011-06-03  0:31 ` Kevin Hilman
@ 2011-06-06 14:05   ` Manuel, Lesly Arackal
  0 siblings, 0 replies; 28+ messages in thread
From: Manuel, Lesly Arackal @ 2011-06-06 14:05 UTC (permalink / raw)
  To: Kevin Hilman; +Cc: linux-omap, Nishanth Menon, David Derrick, Samuel Ortiz

Hi Kevin,

On Fri, Jun 3, 2011 at 6:01 AM, Kevin Hilman <khilman@ti.com> wrote:
> Lesly A M <leslyam@ti.com> writes:
>
>> Patch series for TWL4030 power scripts for OMAP3 boards and
>> workaround for TWL erratum 27.
>>
>> Changes for implementing TWL4030 power scripts recommended by hardware team.
>> Introduced a new TWL4030 power script file, which can be used by different
>> OMAP3 board with the power companion chip TWL4030.
>>
>> Updated the changes for TWL4030 errata 27 & 28, and modified
>> the TWL4030 power script.
>> Workaround for TWL4030 erratum 27 is required for Si version less than or
>> equal to TWL5030 ES1.1.
>>
>> TWL4030 script changes re-based on Kevin's PM tree in pm branch.
>
> Please update and rebase against mainline.   There should be no
> dependencies on my tree.  I see Samuel has merged many of these already,
> so the remaining ones need a refresh and retest.

Ok, I will rebase the changes.

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

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards
  2011-06-06 14:03     ` Manuel, Lesly Arackal
@ 2011-06-06 16:08       ` Kevin Hilman
  0 siblings, 0 replies; 28+ messages in thread
From: Kevin Hilman @ 2011-06-06 16:08 UTC (permalink / raw)
  To: Manuel, Lesly Arackal
  Cc: linux-omap, Nishanth Menon, David Derrick, Samuel Ortiz

"Manuel, Lesly Arackal" <leslyam@ti.com> writes:

> Hi Kevin,
>
> On Thu, Jun 2, 2011 at 11:59 PM, Kevin Hilman <khilman@ti.com> wrote:
>> Lesly A M <leslyam@ti.com> writes:
>>
>>> Power bus message sequence for TWL4030 to enter sleep/wakeup/warm_reset.
>>>
>>> TWL4030 power scripts which can be used by different OMAP3 boards
>>> with the power companion chip (TWL4030 series).
>>>
>>> The twl4030 generic script can be used by any board file to update
>>> the power data in twl4030_platform_data.
>>
>> What about existing board files that are using their own scripts?
>>
>> On n900 for example, board-rx51-peripherals.c has its own custom
>> scripts which are registered at board init time.  These are then
>> over written by your new driver which loads later.
>>
>> So first, can you verify if the n900 scripts can/should be replaced by
>> these generic ones.  And second, please find a way for board files to
>> override these scripts at runtime instead of using a Kconfig.
>
> Customer boards have to modify the script for their board
> (may be using modem which is not present in SDP).
> Is it ok to add a flag to check whether the board file has already
> initialized the script.

Sounds fine.

>>> Since the TWL4030 power script has dependency with APIs in twl4030-power.c
>>> removing the __init for these APIs.
>>
>> I think separating this part out into a separate patch, with a better
>> description would make the rest of this patch much more readable.  As it
>> is, it doesn't make much sense since all the script functions and data
>> are __init or __initdata.
> Ok
>
>> These changes also introduce a new complier warning:
>>
>>  CC      drivers/mfd/twl4030-power.o
>> /work/kernel/omap/pm/drivers/mfd/twl4030-power.c: In function 'twl4030_power_init':
>> /work/kernel/omap/pm/drivers/mfd/twl4030-power.c:457:5: warning: 'err' may be used uninitialized in this function
>> /work/kernel/omap/pm/drivers/mfd/twl4030-power.c:171:6: note: 'err' was declared here
>
> Ok, I will fix it
>>
>>> For more information please see:
>>>       http://omapedia.org/wiki/TWL4030_power_scripts
>>
>> This is an excellent wiki, thank for the detailed description!
>>
>>> Signed-off-by: Lesly A M <leslyam@ti.com>
>>> Cc: Nishanth Menon <nm@ti.com>
>>> Cc: David Derrick <dderrick@ti.com>
>>> Cc: Samuel Ortiz <sameo@linux.intel.com>
>>> ---
>>>  arch/arm/configs/omap2plus_defconfig |    1 +
>>>  arch/arm/mach-omap2/devices.c        |   15 ++
>>>  drivers/mfd/Kconfig                  |   11 +
>>>  drivers/mfd/Makefile                 |    1 +
>>>  drivers/mfd/twl4030-power.c          |   31 ++--
>>>  drivers/mfd/twl4030-script-omap.c    |  373 ++++++++++++++++++++++++++++++++++
>>>  include/linux/i2c/twl.h              |   41 ++++-
>>>  7 files changed, 454 insertions(+), 19 deletions(-)
>>>  create mode 100644 drivers/mfd/twl4030-script-omap.c
>>>
>>> diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig
>>> index 076db52..d9b9858 100644
>>> --- a/arch/arm/configs/omap2plus_defconfig
>>> +++ b/arch/arm/configs/omap2plus_defconfig
>>> @@ -184,6 +184,7 @@ CONFIG_TWL4030_WATCHDOG=y
>>>  CONFIG_MENELAUS=y
>>>  CONFIG_TWL4030_CORE=y
>>>  CONFIG_TWL4030_POWER=y
>>> +CONFIG_TWL4030_SCRIPT=m
>>>  CONFIG_REGULATOR=y
>>>  CONFIG_REGULATOR_TWL4030=y
>>>  CONFIG_REGULATOR_TPS65023=y
>>> diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
>>> index 7b85585..7653329 100644
>>> --- a/arch/arm/mach-omap2/devices.c
>>> +++ b/arch/arm/mach-omap2/devices.c
>>> @@ -329,6 +329,20 @@ static void omap_init_audio(void)
>>>  static inline void omap_init_audio(void) {}
>>>  #endif
>>>
>>> +#ifdef CONFIG_ARCH_OMAP3
>>
>> Shouldn't this depend on CONFIG_TWL4030_SCRIPT ?
> Ok
>
>>> +static struct platform_device omap_twl4030_script = {
>>> +     .name   = "twl4030_script",
>>> +     .id     = -1,
>>> +};
>>> +
>>> +static void omap_init_twl4030_script(void)
>>> +{
>>> +     platform_device_register(&omap_twl4030_script);
>>> +}
>>> +#else
>>> +static inline void omap_init_twl4030_script(void) {}
>>> +#endif
>>
>> I guess this gets to the debate about whether these scripts should be in
>> drivers/mfd or in arch/arm/mach-omap2,  but wherever the script data
>> lives, this platform_device definition and register should be also.
>>
>> IOW, there's not a clean separation between driver and device currently.
>> IMO, The platform_driver part should just be part of twl4030-power.c,
>> and all the scripts and platform_device creation/registration should be
>> part of the script file.
>>
>> As far as where the script device data should go, I'd vote for
>> drivers/mfd, where it can be compiled as a module along with the rest of
>> the twl4030 code.
>
> Any final conclusion ?
>
>>>  #if defined(CONFIG_SPI_OMAP24XX) || defined(CONFIG_SPI_OMAP24XX_MODULE)
>>>
>>>  #include <plat/mcspi.h>
>>> @@ -691,6 +705,7 @@ static int __init omap2_init_devices(void)
>>>       omap_init_sham();
>>>       omap_init_aes();
>>>       omap_init_vout();
>>> +     omap_init_twl4030_script();
>>>
>>>       return 0;
>>>  }
>>> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
>>> index 3ed3ff0..bed88ce 100644
>>> --- a/drivers/mfd/Kconfig
>>> +++ b/drivers/mfd/Kconfig
>>> @@ -204,6 +204,17 @@ config TWL4030_POWER
>>>         and load scripts controlling which resources are switched off/on
>>>         or reset when a sleep, wakeup or warm reset event occurs.
>>>
>>> +config TWL4030_SCRIPT
>>> +     tristate "Support TWL4030 script for OMAP3 boards"
>>> +     depends on TWL4030_CORE && TWL4030_POWER
>>> +     help
>>> +       Say yes here if you want to use the twl4030 power scripts
>>> +       for OMAP3 boards. Power bus message sequence for
>>> +       TWL4030 to enter sleep/wakeup/warm_reset.
>>> +
>>> +       TWL4030 power scripts which can be used by different
>>> +       OMAP3 boards with the power companion chip (TWL4030 series).
>>> +
>>
>> Why do we need another Kconfig for this?  It should be enabled and
>> overridden at runtime via board files.
>
> Kconfig option was added when script was changed to insert-able module,
> which was suggested by Tony as comment for last version.

Yes, it needs to be a loadable module, but doesn't need Kconfig.

IMO, it should just be build whenever CONFIG_TWL4030_POWER=y && CONFIG_ARCH_OMAP2PLUS=y

Adding another build option means needing to ensure more build-option
testing coverage.

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

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2011-06-06 16:08 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-06 13:17 [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Lesly A M
2011-05-06 13:17 ` [PATCH v10 1/7] MFD: TWL4030: Fix for the TWL4030 sleep/wakeup sequence Lesly A M
2011-05-13 12:40   ` Kevin Hilman
2011-05-13 17:14   ` Samuel Ortiz
2011-05-06 13:17 ` [PATCH v10 2/7] MFD: TWL4030: Correct the warning print during script loading Lesly A M
2011-05-13 17:19   ` Samuel Ortiz
2011-05-06 13:17 ` [PATCH v10 3/7] MFD: TWL4030: Modifying the macro name Main_Ref to all caps Lesly A M
2011-05-12 10:42   ` Tony Lindgren
2011-05-13  7:12     ` Manuel, Lesly Arackal
2011-05-13 17:20   ` Samuel Ortiz
2011-05-06 13:17 ` [PATCH v10 4/7] MFD: TWL4030: power scripts for OMAP3 boards Lesly A M
2011-05-12 10:56   ` Tony Lindgren
2011-05-13  7:53     ` Manuel, Lesly Arackal
2011-05-13 18:39   ` Samuel Ortiz
2011-05-17 13:40     ` Manuel, Lesly Arackal
2011-05-22 21:40       ` Samuel Ortiz
2011-05-24 12:17         ` Manuel, Lesly Arackal
2011-06-02 18:29   ` Kevin Hilman
2011-06-06 14:03     ` Manuel, Lesly Arackal
2011-06-06 16:08       ` Kevin Hilman
2011-05-06 13:17 ` [PATCH v10 5/7] MFD: TWL4030: TWL version checking Lesly A M
2011-05-13 17:22   ` Samuel Ortiz
2011-05-06 13:17 ` [PATCH v10 6/7] MFD: TWL4030: workaround changes for Erratum 27 Lesly A M
2011-05-06 13:17 ` [PATCH v10 7/7] MFD: TWL4030: optimizing resource configuration Lesly A M
2011-06-02 15:36 ` [PATCH v10 0/7] MFD: TWL4030: power script and workaround for erratum 27 Steve Sakoman
2011-06-02 17:12   ` Steve Sakoman
2011-06-03  0:31 ` Kevin Hilman
2011-06-06 14:05   ` Manuel, Lesly Arackal

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.