mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-06 05:06:29 +00:00
Improve error handling in Rockchip SPI drivers
Merge series from Dragan Simic <dsimic@manjaro.org>: This is a small series that improves error handling in the probe path of the Rockchip SPI drivers, by using dev_err_probe() properly in multiple places. It also performs a bunch of small, rather trivial code cleanups, to make the code neater and a bit easier to read.
This commit is contained in:
commit
356749a2b2
@ -580,19 +580,16 @@ static int rockchip_sfc_probe(struct platform_device *pdev)
|
||||
return PTR_ERR(sfc->regbase);
|
||||
|
||||
sfc->clk = devm_clk_get(&pdev->dev, "clk_sfc");
|
||||
if (IS_ERR(sfc->clk)) {
|
||||
dev_err(&pdev->dev, "Failed to get sfc interface clk\n");
|
||||
return PTR_ERR(sfc->clk);
|
||||
}
|
||||
if (IS_ERR(sfc->clk))
|
||||
return dev_err_probe(&pdev->dev, PTR_ERR(sfc->clk),
|
||||
"Failed to get sfc interface clk\n");
|
||||
|
||||
sfc->hclk = devm_clk_get(&pdev->dev, "hclk_sfc");
|
||||
if (IS_ERR(sfc->hclk)) {
|
||||
dev_err(&pdev->dev, "Failed to get sfc ahb clk\n");
|
||||
return PTR_ERR(sfc->hclk);
|
||||
}
|
||||
if (IS_ERR(sfc->hclk))
|
||||
return dev_err_probe(&pdev->dev, PTR_ERR(sfc->hclk),
|
||||
"Failed to get sfc ahb clk\n");
|
||||
|
||||
sfc->use_dma = !of_property_read_bool(sfc->dev->of_node,
|
||||
"rockchip,sfc-no-dma");
|
||||
sfc->use_dma = !of_property_read_bool(sfc->dev->of_node, "rockchip,sfc-no-dma");
|
||||
|
||||
if (sfc->use_dma) {
|
||||
ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32));
|
||||
@ -602,8 +599,7 @@ static int rockchip_sfc_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
sfc->buffer = dmam_alloc_coherent(dev, SFC_MAX_IOSIZE_VER3,
|
||||
&sfc->dma_buffer,
|
||||
GFP_KERNEL);
|
||||
&sfc->dma_buffer, GFP_KERNEL);
|
||||
if (!sfc->buffer)
|
||||
return -ENOMEM;
|
||||
}
|
||||
@ -629,7 +625,6 @@ static int rockchip_sfc_probe(struct platform_device *pdev)
|
||||
0, pdev->name, sfc);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to request irq\n");
|
||||
|
||||
goto err_irq;
|
||||
}
|
||||
|
||||
|
@ -742,22 +742,20 @@ static int rockchip_spi_setup(struct spi_device *spi)
|
||||
|
||||
static int rockchip_spi_probe(struct platform_device *pdev)
|
||||
{
|
||||
int ret;
|
||||
struct rockchip_spi *rs;
|
||||
struct spi_controller *ctlr;
|
||||
struct resource *mem;
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
struct spi_controller *ctlr;
|
||||
struct rockchip_spi *rs;
|
||||
struct resource *mem;
|
||||
u32 rsd_nsecs, num_cs;
|
||||
bool target_mode;
|
||||
int ret;
|
||||
|
||||
target_mode = of_property_read_bool(np, "spi-slave");
|
||||
|
||||
if (target_mode)
|
||||
ctlr = spi_alloc_target(&pdev->dev,
|
||||
sizeof(struct rockchip_spi));
|
||||
ctlr = spi_alloc_target(&pdev->dev, sizeof(struct rockchip_spi));
|
||||
else
|
||||
ctlr = spi_alloc_host(&pdev->dev,
|
||||
sizeof(struct rockchip_spi));
|
||||
ctlr = spi_alloc_host(&pdev->dev, sizeof(struct rockchip_spi));
|
||||
|
||||
if (!ctlr)
|
||||
return -ENOMEM;
|
||||
@ -769,7 +767,7 @@ static int rockchip_spi_probe(struct platform_device *pdev)
|
||||
/* Get basic io resource and map it */
|
||||
rs->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &mem);
|
||||
if (IS_ERR(rs->regs)) {
|
||||
ret = PTR_ERR(rs->regs);
|
||||
ret = PTR_ERR(rs->regs);
|
||||
goto err_put_ctlr;
|
||||
}
|
||||
|
||||
@ -794,7 +792,7 @@ static int rockchip_spi_probe(struct platform_device *pdev)
|
||||
goto err_put_ctlr;
|
||||
|
||||
ret = devm_request_threaded_irq(&pdev->dev, ret, rockchip_spi_isr, NULL,
|
||||
IRQF_ONESHOT, dev_name(&pdev->dev), ctlr);
|
||||
IRQF_ONESHOT, dev_name(&pdev->dev), ctlr);
|
||||
if (ret)
|
||||
goto err_put_ctlr;
|
||||
|
||||
@ -804,16 +802,15 @@ static int rockchip_spi_probe(struct platform_device *pdev)
|
||||
if (!of_property_read_u32(pdev->dev.of_node, "rx-sample-delay-ns",
|
||||
&rsd_nsecs)) {
|
||||
/* rx sample delay is expressed in parent clock cycles (max 3) */
|
||||
u32 rsd = DIV_ROUND_CLOSEST(rsd_nsecs * (rs->freq >> 8),
|
||||
1000000000 >> 8);
|
||||
u32 rsd = DIV_ROUND_CLOSEST(rsd_nsecs * (rs->freq >> 8), 1000000000 >> 8);
|
||||
if (!rsd) {
|
||||
dev_warn(rs->dev, "%u Hz are too slow to express %u ns delay\n",
|
||||
rs->freq, rsd_nsecs);
|
||||
rs->freq, rsd_nsecs);
|
||||
} else if (rsd > CR0_RSD_MAX) {
|
||||
rsd = CR0_RSD_MAX;
|
||||
dev_warn(rs->dev, "%u Hz are too fast to express %u ns delay, clamping at %u ns\n",
|
||||
rs->freq, rsd_nsecs,
|
||||
CR0_RSD_MAX * 1000000000U / rs->freq);
|
||||
dev_warn(rs->dev,
|
||||
"%u Hz are too fast to express %u ns delay, clamping at %u ns\n",
|
||||
rs->freq, rsd_nsecs, CR0_RSD_MAX * 1000000000U / rs->freq);
|
||||
}
|
||||
rs->rsd = rsd;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user