From f27d8c997527df2dac71facea89a7c95ff1fffcc Mon Sep 17 00:00:00 2001 From: Jianqun Xu Date: Thu, 16 Jul 2020 10:36:59 +0800 Subject: [PATCH] spi: rockchip: get pinctrl for lookup pinctrl state Fix system crash issue when spi dev has no correct pinctrl handle. Fixes: 87dbea63d5cb ("spi: rockchip: set higher io driver when sclk higher than 24MHz") Change-Id: I603fe8f74681b576fe7fcd404a386ec2b2c03da4 Signed-off-by: Jianqun Xu --- drivers/spi/spi-rockchip.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c index 490bea6f9178..0d6a00bcb8b7 100644 --- a/drivers/spi/spi-rockchip.c +++ b/drivers/spi/spi-rockchip.c @@ -651,6 +651,7 @@ static int rockchip_spi_probe(struct platform_device *pdev) struct device_node *np = pdev->dev.of_node; u32 rsd_nsecs; bool slave_mode; + struct pinctrl *pinctrl = NULL; slave_mode = of_property_read_bool(np, "spi-slave"); @@ -791,11 +792,13 @@ static int rockchip_spi_probe(struct platform_device *pdev) ctlr->can_dma = rockchip_spi_can_dma; } - rs->high_speed_state = pinctrl_lookup_state(rs->dev->pins->p, - "high_speed"); - if (IS_ERR_OR_NULL(rs->high_speed_state)) { - dev_warn(&pdev->dev, "no high_speed pinctrl state\n"); - rs->high_speed_state = NULL; + pinctrl = devm_pinctrl_get(&pdev->dev); + if (!IS_ERR(pinctrl)) { + rs->high_speed_state = pinctrl_lookup_state(pinctrl, "high_speed"); + if (IS_ERR_OR_NULL(rs->high_speed_state)) { + dev_warn(&pdev->dev, "no high_speed pinctrl state\n"); + rs->high_speed_state = NULL; + } } ret = devm_spi_register_controller(&pdev->dev, ctlr);