All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Peter 'p2' De Schrijver" <peter.de-schrijver@nokia.com>
To: linux-omap@vger.kernel.org
Cc: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
Subject: [PATCH 1/1] Group and resource assignments for TWL4030
Date: Tue, 10 Feb 2009 15:11:35 +0200	[thread overview]
Message-ID: <1234271495-11705-2-git-send-email-peter.de-schrijver@nokia.com> (raw)
In-Reply-To: <1234271495-11705-1-git-send-email-peter.de-schrijver@nokia.com>


Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
---
 drivers/mfd/twl4030-power.c |   95 ++++++++++++++++++++++++++++++++++++++++++-
 include/linux/i2c/twl4030.h |   41 ++++++++++++++++++-
 2 files changed, 134 insertions(+), 2 deletions(-)

diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
index d9d1655..c558127 100644
--- a/drivers/mfd/twl4030-power.c
+++ b/drivers/mfd/twl4030-power.c
@@ -38,6 +38,8 @@ static u8 triton_next_free_address = 0x2b;
 #define PHY_TO_OFF_PM_MASTER(p)		(p - 0x36)
 #define PHY_TO_OFF_PM_RECEIVER(p)	(p - 0x5b)
 
+#define NUM_OF_RESOURCES	28
+
 /* resource - hfclk */
 #define R_HFCLKOUT_DEV_GRP 	PHY_TO_OFF_PM_RECEIVER(0xe6)
 
@@ -66,6 +68,42 @@ static u8 triton_next_free_address = 0x2b;
 #define KEY_1			0xC0
 #define KEY_2			0x0C
 
+/* resource configuration registers */
+
+#define DEVGROUP_OFFSET		0
+#define TYPE_OFFSET		1
+
+static int __initdata res_config_addrs[] = {
+	[1] = 0x17,
+	[2] = 0x1b,
+	[3] = 0x1f,
+	[4] = 0x23,
+	[5] = 0x27,
+	[6] = 0x2b,
+	[7] = 0x2f,
+	[8] = 0x33,
+	[9] = 0x37,
+	[10] = 0x3b,
+	[11] = 0x3f,
+	[12] = 0x43,
+	[13] = 0x47,
+	[14] = 0x4b,
+	[15] = 0x55,
+	[16] = 0x63,
+	[17] = 0x71,
+	[18] = 0x74,
+	[19] = 0x77,
+	[20] = 0x7a,
+	[21] = 0x7f,
+	[22] = 0x82,
+	[23] = 0x85,
+	[24] = 0x88,
+	[25] = 0x8b,
+	[26] = 0x8e,
+	[27] = 0x91,
+	[28] = 0x94,
+};
+
 static int __init twl4030_write_script_byte(u8 address, u8 byte)
 {
 	int err;
@@ -245,10 +283,57 @@ static int __init load_triton_script(struct twl4030_script *tscript)
 	return err;
 }
 
+static void __init twl4030_configure_resource(struct twl4030_resconfig *rconfig)
+{
+	int rconfig_addr;
+	u8 type;
+
+	if (rconfig->resource > NUM_OF_RESOURCES) {
+		printk(KERN_ERR
+			"TWL4030 Resource %d does not exist\n",
+			rconfig->resource);
+		return;
+	}
+
+	rconfig_addr = res_config_addrs[rconfig->resource];
+
+	/* Set resource group */
+
+	if (rconfig->devgroup >= 0)
+		twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
+					rconfig->devgroup << 5,
+					rconfig_addr + DEVGROUP_OFFSET);
+
+	/* Set resource types */
+
+	if (twl4030_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER,
+					&type,
+					rconfig_addr + TYPE_OFFSET) < 0) {
+		printk(KERN_ERR
+			"TWL4030 Resource %d type could not read\n",
+			rconfig->resource);
+		return;
+	}
+
+	if (rconfig->type >= 0) {
+		type &= ~7;
+		type |= rconfig->type;
+	}
+
+	if (rconfig->type2 >= 0) {
+		type &= ~(3 << 3);
+		type |= rconfig->type2 << 3;
+	}
+
+	twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
+				type, rconfig_addr + TYPE_OFFSET);
+}
+
 void __init twl4030_power_init(struct twl4030_power_data *triton2_scripts)
 {
 	int err = 0;
 	int i;
+	struct twl4030_resconfig *resconfig;
 
 	err = twl4030_i2c_write_u8(TWL4030_MODULE_PM_MASTER, KEY_1,
 				R_PROTECT_KEY);
@@ -258,12 +343,20 @@ void __init twl4030_power_init(struct twl4030_power_data *triton2_scripts)
 		printk(KERN_ERR
 			"TWL4030 Unable to unlock registers\n");
 
-	for (i = 0; i < triton2_scripts->size; i++) {
+	for (i = 0; i < triton2_scripts->scripts_size; i++) {
 		err = load_triton_script(triton2_scripts->scripts[i]);
 		if (err)
 			break;
 	}
 
+	resconfig = triton2_scripts->resource_config;
+	if (resconfig) {
+		while (resconfig->resource) {
+			twl4030_configure_resource(resconfig);
+			resconfig++;
+		}
+	}
+
 	if (twl4030_i2c_write_u8(TWL4030_MODULE_PM_MASTER, 0, R_PROTECT_KEY))
 		printk(KERN_ERR
 			"TWL4030 Unable to relock registers\n");
diff --git a/include/linux/i2c/twl4030.h b/include/linux/i2c/twl4030.h
index 93d483d..e6ce1cd 100644
--- a/include/linux/i2c/twl4030.h
+++ b/include/linux/i2c/twl4030.h
@@ -243,6 +243,37 @@ int twl4030_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes);
 #define RES_STATE_SLEEP		0x8
 #define RES_STATE_OFF		0x0
 
+/* Power resources */
+
+#define RES_VAUX1		1
+#define RES_VAUX2		2
+#define RES_VAUX3		3
+#define RES_VAUX4		4
+#define RES_VMMC1		5
+#define RES_VMMC2		6
+#define RES_VPLL1		7
+#define RES_VPLL2		8
+#define RES_VSIM		9
+#define RES_VDAC		10
+#define RES_VINTANA1		11
+#define RES_VINTANA2		12
+#define RES_VINTDIG		13
+#define RES_VIO			14
+#define RES_VDD1		15
+#define RES_VDD2		16
+#define RES_VUSB_1v5		17
+#define RES_VUSB_1v8		18
+#define RES_VUSB_3v1		19
+#define RES_VUSBCP		20
+#define RES_REGEN		21
+#define RES_NRES_PWRON		22
+#define RES_CLKEN		23
+#define RES_SYSEN		24
+#define RES_HFCLKOUT		25
+#define RES_32KCLKOUT		26
+#define RES_RESET		27
+#define RES_Main_Ref		28
+
 /*
  * Power Bus Message Format ... these can be sent individually by Linux,
  * but are usually part of downloaded scripts that are run when various
@@ -334,9 +365,17 @@ struct twl4030_script {
 #define TRITON_SLEEP_SCRIPT	(1<<3)
 };
 
+struct twl4030_resconfig {
+	int resource;
+	int devgroup;
+	int type;
+	int type2;
+};
+
 struct twl4030_power_data {
 	struct twl4030_script **scripts;
-	unsigned size;
+	unsigned scripts_size;
+	struct twl4030_resconfig *resource_config;
 };
 
 struct twl4030_platform_data {
-- 
1.5.6.3


  reply	other threads:[~2009-02-10 13:11 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-10 13:11 [PATCH 0/1] Group and resource assignments for TWL4030 Peter 'p2' De Schrijver
2009-02-10 13:11 ` Peter 'p2' De Schrijver [this message]
2009-02-10 13:28   ` [PATCH 1/1] " Felipe Balbi
2009-03-03 23:28   ` David Brownell
2009-02-13 20:55 ` [PATCH 0/1] " David Brownell
2009-02-15 16:48   ` Peter 'p2' De Schrijver
2009-02-27 16:59     ` Tony Lindgren
2009-03-03 23:38       ` David Brownell
2009-03-04 14:41         ` Peter 'p2' De Schrijver
2009-03-06  0:16         ` Tony Lindgren
2009-03-13 15:33           ` Peter 'p2' De Schrijver
2009-03-13 15:33             ` [PATCH 1/1] " Peter 'p2' De Schrijver
2009-03-13 23:11               ` David Brownell
2009-03-14  1:16               ` [PATCH 1/1] Group and resource assignments for TWL4030 (v3) David Brownell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1234271495-11705-2-git-send-email-peter.de-schrijver@nokia.com \
    --to=peter.de-schrijver@nokia.com \
    --cc=linux-omap@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.