There are two problems that made the driver choose the wrong baudrate calculation algorithm: a) The compatible used on 370/XP isn't marvell,armada-370-xp-spi but marvell,armada-370-spi or marvell,armada-xp-spi respectively. b) The probe function uses match = of_match_node(mvebu_spi_dt_ids, dev->device_node); to determine the right algorithm. As the devices are also compatible to marvell,orion-spi and this comes first in mvebu_spi_dt_ids[] it's always the older Orion algorithm that is used. This patch fixes both problems. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> --- drivers/spi/mvebu_spi.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/spi/mvebu_spi.c b/drivers/spi/mvebu_spi.c index ee7b212962f7..e340686bd676 100644 --- a/drivers/spi/mvebu_spi.c +++ b/drivers/spi/mvebu_spi.c @@ -317,16 +317,18 @@ err_transfer: } static struct of_device_id mvebu_spi_dt_ids[] = { - { .compatible = "marvell,orion-spi", - .data = &mvebu_spi_set_baudrate }, #if defined(CONFIG_ARCH_ARMADA_370) || defined(CONFIG_ARCH_ARMADA_XP) - { .compatible = "marvell,armada-370-xp-spi", + { .compatible = "marvell,armada-370-spi", + .data = &armada_370_xp_spi_set_baudrate }, + { .compatible = "marvell,armada-xp-spi", .data = &armada_370_xp_spi_set_baudrate }, #endif #if defined(CONFIG_ARCH_DOVE) { .compatible = "marvell,dove-spi", .data = &dove_spi_set_baudrate }, #endif + { .compatible = "marvell,orion-spi", + .data = &mvebu_spi_set_baudrate }, { } }; -- 2.10.2 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox