These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / spi / spi-img-spfi.c
index bb916c8..823cbc9 100644 (file)
@@ -581,6 +581,7 @@ static int img_spfi_probe(struct platform_device *pdev)
        struct img_spfi *spfi;
        struct resource *res;
        int ret;
+       u32 max_speed_hz;
 
        master = spi_alloc_master(&pdev->dev, sizeof(*spfi));
        if (!master)
@@ -645,6 +646,19 @@ static int img_spfi_probe(struct platform_device *pdev)
        master->max_speed_hz = clk_get_rate(spfi->spfi_clk) / 4;
        master->min_speed_hz = clk_get_rate(spfi->spfi_clk) / 512;
 
+       /*
+        * Maximum speed supported by spfi is limited to the lower value
+        * between 1/4 of the SPFI clock or to "spfi-max-frequency"
+        * defined in the device tree.
+        * If no value is defined in the device tree assume the maximum
+        * speed supported to be 1/4 of the SPFI clock.
+        */
+       if (!of_property_read_u32(spfi->dev->of_node, "spfi-max-frequency",
+                                 &max_speed_hz)) {
+               if (master->max_speed_hz > max_speed_hz)
+                       master->max_speed_hz = max_speed_hz;
+       }
+
        master->setup = img_spfi_setup;
        master->cleanup = img_spfi_cleanup;
        master->transfer_one = img_spfi_transfer_one;