On non-QE processors (mpc831x/mpc834x) the SPI clock is the SoC clock.

Signed-off-by: Peter Korsgaard <[EMAIL PROTECTED]>
---
 arch/powerpc/sysdev/fsl_soc.c |   27 +++++++++++++++++++--------
 1 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c
index a57fe56..59e4188 100644
--- a/arch/powerpc/sysdev/fsl_soc.c
+++ b/arch/powerpc/sysdev/fsl_soc.c
@@ -1220,14 +1220,17 @@ int __init fsl_spi_init(struct spi_board_info 
*board_infos,
 {
        struct device_node *np;
        unsigned int i;
-       const u32 *sysclk;
+       const u32 *qe_sysclk = 0, *soc_sysclk = 0;
 
        np = of_find_node_by_type(NULL, "qe");
-       if (!np)
-               return -ENODEV;
+       if (np)
+               qe_sysclk = of_get_property(np, "bus-frequency", NULL);
+
+       np = of_find_node_by_type(NULL, "soc");
+       if (np)
+               soc_sysclk = of_get_property(np, "bus-frequency", NULL);
 
-       sysclk = of_get_property(np, "bus-frequency", NULL);
-       if (!sysclk)
+       if (!(qe_sysclk || soc_sysclk))
                return -ENODEV;
 
        for (np = NULL, i = 1;
@@ -1245,16 +1248,24 @@ int __init fsl_spi_init(struct spi_board_info 
*board_infos,
 
                memset(res, 0, sizeof(res));
 
-               pdata.sysclk = *sysclk;
-
                prop = of_get_property(np, "reg", NULL);
                if (!prop)
                        goto err;
                pdata.bus_num = *(u32 *)prop;
 
                prop = of_get_property(np, "mode", NULL);
-               if (prop && !strcmp(prop, "qe"))
+               if (prop && !strcmp(prop, "qe")) {
                        pdata.qe_mode = 1;
+                       if (qe_sysclk)
+                               pdata.sysclk = *qe_sysclk;
+                       else
+                               goto err;
+               } else {
+                       if (soc_sysclk)
+                               pdata.sysclk = *soc_sysclk;
+                       else
+                               goto err;
+               }
 
                for (j = 0; j < num_board_infos; j++) {
                        if (board_infos[j].bus_num == pdata.bus_num)
-- 
1.5.3.2


-- 
Bye, Peter Korsgaard
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to