|
|
@@ -546,6 +546,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)
|
|
|
@@ -610,6 +611,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;
|