spi: img-spfi: check for max speed supported by the spfi block
Maximum speed supported by spfi is limited to 1/4 of the spfi clock. But in some SoCs the maximum speed supported by the spfi block can be limited to less than 1/4 of the spfi clock. In such cases we have to define the limit in the device tree so that the driver can pick it up. Signed-off-by: Sifan Naeem <sifan.naeem@imgtec.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
d770e558e2
commit
93e3a9e999
|
@ -21,6 +21,7 @@ Required properties:
|
||||||
Optional properties:
|
Optional properties:
|
||||||
- img,supports-quad-mode: Should be set if the interface supports quad mode
|
- img,supports-quad-mode: Should be set if the interface supports quad mode
|
||||||
SPI transfers.
|
SPI transfers.
|
||||||
|
- spfi-max-frequency: Maximum speed supported by the spfi block.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
|
|
@ -546,6 +546,7 @@ static int img_spfi_probe(struct platform_device *pdev)
|
||||||
struct img_spfi *spfi;
|
struct img_spfi *spfi;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
int ret;
|
int ret;
|
||||||
|
u32 max_speed_hz;
|
||||||
|
|
||||||
master = spi_alloc_master(&pdev->dev, sizeof(*spfi));
|
master = spi_alloc_master(&pdev->dev, sizeof(*spfi));
|
||||||
if (!master)
|
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->max_speed_hz = clk_get_rate(spfi->spfi_clk) / 4;
|
||||||
master->min_speed_hz = clk_get_rate(spfi->spfi_clk) / 512;
|
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->setup = img_spfi_setup;
|
||||||
master->cleanup = img_spfi_cleanup;
|
master->cleanup = img_spfi_cleanup;
|
||||||
master->transfer_one = img_spfi_transfer_one;
|
master->transfer_one = img_spfi_transfer_one;
|
||||||
|
|
Loading…
Reference in New Issue