ARM: sa1111: provide a generic way to prevent devices from registering
authorRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 26 Jan 2012 13:34:21 +0000 (13:34 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 24 Mar 2012 11:29:52 +0000 (11:29 +0000)
Some platforms don't want certain devices to be registered, because,
eg, the interface is not wired.  Provide a way for platforms to
prevent various devices from being registered via a devid bitmask in
the platform data.

Acked-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/common/sa1111.c
arch/arm/include/asm/hardware/sa1111.h
arch/arm/mach-pxa/lubbock.c
arch/arm/mach-sa1100/badge4.c
arch/arm/mach-sa1100/jornada720.c
arch/arm/mach-sa1100/neponset.c

index 4bdf1bb..17694cf 100644 (file)
@@ -833,11 +833,8 @@ __sa1111_probe(struct device *me, struct resource *mem, int irq)
        g_sa1111 = sachip;
 
        has_devs = ~0;
-       if (machine_is_assabet() || machine_is_jornada720() ||
-           machine_is_badge4())
-               has_devs &= ~SA1111_DEVID_PS2_MSE;
-       else
-               has_devs &= ~SA1111_DEVID_SAC;
+       if (pd)
+               has_devs &= ~pd->disable_devs;
 
        for (i = 0; i < ARRAY_SIZE(sa1111_devices); i++)
                if (sa1111_devices[i].devid & has_devs)
index 37ad29d..74afe20 100644 (file)
@@ -584,6 +584,7 @@ void sa1111_set_sleep_io(struct sa1111_dev *sadev, unsigned int bits, unsigned i
 
 struct sa1111_platform_data {
        int     irq_base;       /* base for cascaded on-chip IRQs */
+       unsigned disable_devs;
        void    *data;
        int     (*enable)(void *, unsigned);
        void    (*disable)(void *, unsigned);
index 6ebd276..6bb3f47 100644 (file)
@@ -223,6 +223,7 @@ static struct resource sa1111_resources[] = {
 
 static struct sa1111_platform_data sa1111_info = {
        .irq_base       = LUBBOCK_SA1111_IRQ_BASE,
+       .disable_devs   = SA1111_DEVID_SAC,
 };
 
 static struct platform_device sa1111_device = {
index d849249..8fb80f0 100644 (file)
@@ -66,6 +66,7 @@ static void badge4_sa1111_disable(void *data, unsigned devid)
 
 static struct sa1111_platform_data sa1111_info = {
        .irq_base       = IRQ_BOARD_END,
+       .disable_devs   = SA1111_DEVID_PS2_MSE,
        .enable         = badge4_sa1111_enable,
        .disable        = badge4_sa1111_disable,
 };
index ee121d6..dcd6d02 100644 (file)
@@ -211,6 +211,7 @@ static struct resource sa1111_resources[] = {
 
 static struct sa1111_platform_data sa1111_info = {
        .irq_base       = IRQ_BOARD_END,
+       .disable_devs   = SA1111_DEVID_PS2_MSE,
 };
 
 static u64 sa1111_dmamask = 0xffffffffUL;
index b4fa53a..b40a719 100644 (file)
@@ -242,6 +242,7 @@ static struct resource sa1111_resources[] = {
 
 static struct sa1111_platform_data sa1111_info = {
        .irq_base       = IRQ_BOARD_END,
+       .disable_devs   = SA1111_DEVID_PS2_MSE,
 };
 
 static u64 sa1111_dmamask = 0xffffffffUL;