2004-11-28 18:19:50

by Russell King

[permalink] [raw]
Subject: typeof(dev->power.saved_state)

arch/arm/common/sa1111.c: In function `sa1111_suspend':
arch/arm/common/sa1111.c:816: warning: assignment from incompatible pointer type

This is a rather annoying, and IMHO pointless warning. First
question: what is the reasoning for using an array of unsigned
bytes here? Are we expecting to power manage devices which only
have byte wide registers?

In reality, devices have half-word and word sized registers as
well, which means that dev->power.saved_state actually points to
device specific data (or even device driver specific data) for
the device. As such, it makes far more sense for this to be
a 'void *'.

I'd rather not go around the ARM kernel tree adding pointless
casts to 'u8 *' and back again because the wrong type for this
was picked in the structure definition, so here's a patch which
changes this to void *.

Signed-off-by: Russell King <[email protected]>

diff -up -x BitKeeper -x ChangeSet -x SCCS -x _xlk -x *.orig -x *.rej orig/include/linux/pm.h linux/include/linux/pm.h
--- orig/include/linux/pm.h Mon Nov 15 09:17:10 2004
+++ linux/include/linux/pm.h Sun Nov 28 18:15:57 2004
@@ -226,7 +226,7 @@ struct dev_pm_info {
u32 power_state;
#ifdef CONFIG_PM
u32 prev_state;
- u8 * saved_state;
+ void * saved_state;
atomic_t pm_users;
struct device * pm_parent;
struct list_head entry;


--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core