of: Fixes for OF probing on little endian systems
authorRob Herring <rob.herring@calxeda.com>
Tue, 16 Nov 2010 20:33:50 +0000 (14:33 -0600)
committerGrant Likely <grant.likely@secretlab.ca>
Mon, 3 Jan 2011 21:08:18 +0000 (14:08 -0700)
Fixes for sdhci-of and ipmi drivers.

Auditing all drivers using of_get_property did not find other
occurrences likely to be used on LE platforms.

Signed-off-by: Rob Herring <rob.herring@calxeda.com>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
drivers/char/ipmi/ipmi_si_intf.c
drivers/mmc/host/sdhci-of-core.c

index 035da9e64a1704fce0d28e35cb74a5bdd8ef0593..8cc4607cc86c7e9c85fe4d1d390f2253477d41d3 100644 (file)
@@ -2546,7 +2546,7 @@ static int __devinit ipmi_of_probe(struct platform_device *dev,
 {
        struct smi_info *info;
        struct resource resource;
-       const int *regsize, *regspacing, *regshift;
+       const __be32 *regsize, *regspacing, *regshift;
        struct device_node *np = dev->dev.of_node;
        int ret;
        int proplen;
@@ -2599,9 +2599,9 @@ static int __devinit ipmi_of_probe(struct platform_device *dev,
 
        info->io.addr_data      = resource.start;
 
-       info->io.regsize        = regsize ? *regsize : DEFAULT_REGSIZE;
-       info->io.regspacing     = regspacing ? *regspacing : DEFAULT_REGSPACING;
-       info->io.regshift       = regshift ? *regshift : 0;
+       info->io.regsize        = regsize ? be32_to_cpup(regsize) : DEFAULT_REGSIZE;
+       info->io.regspacing     = regspacing ? be32_to_cpup(regspacing) : DEFAULT_REGSPACING;
+       info->io.regshift       = regshift ? be32_to_cpup(regshift) : 0;
 
        info->irq               = irq_of_parse_and_map(dev->dev.of_node, 0);
        info->dev               = &dev->dev;
index c51b71174c1de1df6dce05482d8b2eb13b4d519e..fa19d849a9202ad0a9390ee96fae6a3e9647594e 100644 (file)
@@ -122,7 +122,7 @@ static int __devinit sdhci_of_probe(struct platform_device *ofdev,
        struct sdhci_of_data *sdhci_of_data = match->data;
        struct sdhci_host *host;
        struct sdhci_of_host *of_host;
-       const u32 *clk;
+       const __be32 *clk;
        int size;
        int ret;
 
@@ -166,7 +166,7 @@ static int __devinit sdhci_of_probe(struct platform_device *ofdev,
 
        clk = of_get_property(np, "clock-frequency", &size);
        if (clk && size == sizeof(*clk) && *clk)
-               of_host->clock = *clk;
+               of_host->clock = be32_to_cpup(clk);
 
        ret = sdhci_add_host(host);
        if (ret)