spi: rockchip: get pinctrl for lookup pinctrl state

Fix system crash issue when spi dev has no correct pinctrl handle.

Fixes: 87dbea63d5 ("spi: rockchip: set higher io driver when sclk higher than 24MHz")
Change-Id: I603fe8f74681b576fe7fcd404a386ec2b2c03da4
Signed-off-by: Jianqun Xu <jay.xu@rock-chips.com>
This commit is contained in:
Jianqun Xu
2020-07-16 10:36:59 +08:00
committed by Tao Huang
parent 6d1fd05b9d
commit f27d8c9975
+8 -5
View File
@@ -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);