n810: Add more battery management code

SVN-Revision: 25380
owl
Michael Büsch 2011-02-06 12:44:12 +00:00
parent 2ed844f6a5
commit 09655bf0e4
2 changed files with 597 additions and 172 deletions

View File

@ -4,10 +4,10 @@
drivers/cbus/tahvo-user.c | 75 +++++++++++++++++++++++++++++ drivers/cbus/tahvo-user.c | 75 +++++++++++++++++++++++++++++
3 files changed, 198 insertions(+), 2 deletions(-) 3 files changed, 198 insertions(+), 2 deletions(-)
Index: linux-2.6.37-rc1/drivers/cbus/Kconfig Index: linux-2.6.37/drivers/cbus/Kconfig
=================================================================== ===================================================================
--- linux-2.6.37-rc1.orig/drivers/cbus/Kconfig 2010-11-05 17:04:49.001997921 +0100 --- linux-2.6.37.orig/drivers/cbus/Kconfig 2011-02-05 20:01:30.636705379 +0100
+++ linux-2.6.37-rc1/drivers/cbus/Kconfig 2010-11-05 17:04:52.017998785 +0100 +++ linux-2.6.37/drivers/cbus/Kconfig 2011-02-05 20:56:11.593025426 +0100
@@ -28,6 +28,10 @@ @@ -28,6 +28,10 @@
If you want support for Tahvo's user space read/write etc. functions, If you want support for Tahvo's user space read/write etc. functions,
you should say Y here. you should say Y here.
@ -30,10 +30,10 @@ Index: linux-2.6.37-rc1/drivers/cbus/Kconfig
config CBUS_RETU_POWERBUTTON config CBUS_RETU_POWERBUTTON
depends on CBUS_RETU depends on CBUS_RETU
bool "Support for Retu power button" bool "Support for Retu power button"
Index: linux-2.6.37-rc1/drivers/cbus/retu-user.c Index: linux-2.6.37/drivers/cbus/retu-user.c
=================================================================== ===================================================================
--- linux-2.6.37-rc1.orig/drivers/cbus/retu-user.c 2010-11-05 17:04:49.002997987 +0100 --- linux-2.6.37.orig/drivers/cbus/retu-user.c 2011-02-05 20:01:30.637705440 +0100
+++ linux-2.6.37-rc1/drivers/cbus/retu-user.c 2010-11-05 17:04:52.017998785 +0100 +++ linux-2.6.37/drivers/cbus/retu-user.c 2011-02-05 20:56:42.584938988 +0100
@@ -46,6 +46,12 @@ @@ -46,6 +46,12 @@
#define PFX "retu-user: " #define PFX "retu-user: "
@ -47,7 +47,7 @@ Index: linux-2.6.37-rc1/drivers/cbus/retu-user.c
/* Bitmap for marking the interrupt sources as having the handlers */ /* Bitmap for marking the interrupt sources as having the handlers */
static u32 retu_irq_bits; static u32 retu_irq_bits;
@@ -105,6 +111,94 @@ @@ -105,6 +111,93 @@
3 3
}; };
@ -88,7 +88,6 @@ Index: linux-2.6.37-rc1/drivers/cbus/retu-user.c
+ [RETU_REG_STATUS] = "Status register", + [RETU_REG_STATUS] = "Status register",
+ [RETU_REG_WATCHDOG] = "Watchdog register", + [RETU_REG_WATCHDOG] = "Watchdog register",
+ [RETU_REG_AUDTXR] = "Audio Codec Tx register", + [RETU_REG_AUDTXR] = "Audio Codec Tx register",
+ [0x14] = "Charger detect?",
+ }; + };
+ const char *name; + const char *name;
+ +
@ -142,7 +141,7 @@ Index: linux-2.6.37-rc1/drivers/cbus/retu-user.c
/* /*
* The handler for all RETU interrupts. * The handler for all RETU interrupts.
* *
@@ -157,6 +251,8 @@ @@ -157,6 +250,8 @@
/* Mark that this interrupt has a handler */ /* Mark that this interrupt has a handler */
retu_irq_bits |= 1 << id; retu_irq_bits |= 1 << id;
@ -151,7 +150,7 @@ Index: linux-2.6.37-rc1/drivers/cbus/retu-user.c
return 0; return 0;
} }
@@ -216,6 +312,10 @@ @@ -216,6 +311,10 @@
/* Generate new value */ /* Generate new value */
tmp = (tmp & ~MASK(field)) | (value & MASK(field)); tmp = (tmp & ~MASK(field)) | (value & MASK(field));
@ -162,7 +161,7 @@ Index: linux-2.6.37-rc1/drivers/cbus/retu-user.c
/* Write data to RETU */ /* Write data to RETU */
retu_write_reg(reg, tmp); retu_write_reg(reg, tmp);
spin_unlock_irqrestore(&retu_lock, flags); spin_unlock_irqrestore(&retu_lock, flags);
@@ -244,6 +344,9 @@ @@ -244,6 +343,9 @@
/* Read the register */ /* Read the register */
value = retu_read_reg(reg) & mask; value = retu_read_reg(reg) & mask;
@ -172,7 +171,7 @@ Index: linux-2.6.37-rc1/drivers/cbus/retu-user.c
/* Right justify value */ /* Right justify value */
while (!(mask & 1)) { while (!(mask & 1)) {
value = value >> 1; value = value >> 1;
@@ -273,7 +376,7 @@ @@ -273,7 +375,7 @@
static long retu_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) static long retu_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{ {
struct retu_tahvo_write_parms par; struct retu_tahvo_write_parms par;
@ -181,7 +180,7 @@ Index: linux-2.6.37-rc1/drivers/cbus/retu-user.c
switch (cmd) { switch (cmd) {
case URT_IOCT_IRQ_SUBSCR: case URT_IOCT_IRQ_SUBSCR:
@@ -290,7 +393,15 @@ @@ -290,7 +392,15 @@
printk(KERN_ERR "copy_to_user failed: %d\n", ret); printk(KERN_ERR "copy_to_user failed: %d\n", ret);
break; break;
case RETU_IOCH_ADC_READ: case RETU_IOCH_ADC_READ:
@ -198,7 +197,7 @@ Index: linux-2.6.37-rc1/drivers/cbus/retu-user.c
default: default:
return -ENOIOCTLCMD; return -ENOIOCTLCMD;
} }
@@ -332,6 +443,8 @@ @@ -332,6 +442,8 @@
list_move(&irq->node, &retu_irqs_reserve); list_move(&irq->node, &retu_irqs_reserve);
spin_unlock_irqrestore(&retu_irqs_lock, flags); spin_unlock_irqrestore(&retu_irqs_lock, flags);
@ -207,10 +206,10 @@ Index: linux-2.6.37-rc1/drivers/cbus/retu-user.c
ret = copy_to_user(buf + i * sizeof(irq_id), &irq_id, ret = copy_to_user(buf + i * sizeof(irq_id), &irq_id,
sizeof(irq_id)); sizeof(irq_id));
if (ret) if (ret)
Index: linux-2.6.37-rc1/drivers/cbus/tahvo-user.c Index: linux-2.6.37/drivers/cbus/tahvo-user.c
=================================================================== ===================================================================
--- linux-2.6.37-rc1.orig/drivers/cbus/tahvo-user.c 2010-11-05 17:04:49.003998052 +0100 --- linux-2.6.37.orig/drivers/cbus/tahvo-user.c 2011-02-05 20:01:30.638705501 +0100
+++ linux-2.6.37-rc1/drivers/cbus/tahvo-user.c 2010-11-05 17:04:52.018998824 +0100 +++ linux-2.6.37/drivers/cbus/tahvo-user.c 2011-02-05 20:57:03.817249794 +0100
@@ -46,6 +46,12 @@ @@ -46,6 +46,12 @@
#define PFX "tahvo-user: " #define PFX "tahvo-user: "
@ -224,7 +223,7 @@ Index: linux-2.6.37-rc1/drivers/cbus/tahvo-user.c
/* Bitmap for marking the interrupt sources as having the handlers */ /* Bitmap for marking the interrupt sources as having the handlers */
static u32 tahvo_irq_bits; static u32 tahvo_irq_bits;
@@ -87,6 +93,64 @@ @@ -87,6 +93,60 @@
1 1
}; };
@ -255,10 +254,6 @@ Index: linux-2.6.37-rc1/drivers/cbus/tahvo-user.c
+ [TAHVO_REG_IMR] = "Interrupt mask", + [TAHVO_REG_IMR] = "Interrupt mask",
+ [TAHVO_REG_LEDPWMR] = "LED PWM", + [TAHVO_REG_LEDPWMR] = "LED PWM",
+ [TAHVO_REG_USBR] = "USB control", + [TAHVO_REG_USBR] = "USB control",
+ [0x04] = "Charge current control?",
+ [0x08] = "Charge ctl 1?",
+ [0x0C] = "Charge ctl 2?",
+ [0x0D] = "Battery current ADC?",
+ }; + };
+ const char *name; + const char *name;
+ +
@ -289,7 +284,7 @@ Index: linux-2.6.37-rc1/drivers/cbus/tahvo-user.c
/* /*
* The handler for all TAHVO interrupts. * The handler for all TAHVO interrupts.
* *
@@ -142,6 +206,8 @@ @@ -142,6 +202,8 @@
/* Mark that this interrupt has a handler */ /* Mark that this interrupt has a handler */
tahvo_irq_bits |= 1 << id; tahvo_irq_bits |= 1 << id;
@ -298,7 +293,7 @@ Index: linux-2.6.37-rc1/drivers/cbus/tahvo-user.c
return 0; return 0;
} }
@@ -200,6 +266,10 @@ @@ -200,6 +262,10 @@
} }
/* Generate a new value */ /* Generate a new value */
tmp = (tmp & ~MASK(field)) | (value & MASK(field)); tmp = (tmp & ~MASK(field)) | (value & MASK(field));
@ -309,7 +304,7 @@ Index: linux-2.6.37-rc1/drivers/cbus/tahvo-user.c
/* Write data to TAHVO */ /* Write data to TAHVO */
tahvo_write_reg(reg, tmp); tahvo_write_reg(reg, tmp);
spin_unlock_irqrestore(&tahvo_lock, flags); spin_unlock_irqrestore(&tahvo_lock, flags);
@@ -228,6 +298,9 @@ @@ -228,6 +294,9 @@
/* Read the register */ /* Read the register */
value = tahvo_read_reg(reg) & mask; value = tahvo_read_reg(reg) & mask;
@ -319,7 +314,7 @@ Index: linux-2.6.37-rc1/drivers/cbus/tahvo-user.c
/* Right justify value */ /* Right justify value */
while (!(mask & 1)) { while (!(mask & 1)) {
value = value >> 1; value = value >> 1;
@@ -314,6 +387,8 @@ @@ -314,6 +383,8 @@
list_move(&irq->node, &tahvo_irqs_reserve); list_move(&irq->node, &tahvo_irqs_reserve);
spin_unlock_irqrestore(&tahvo_irqs_lock, flags); spin_unlock_irqrestore(&tahvo_irqs_lock, flags);