| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Marvell Armada-3700 SPI controller driver |
|---|
| 3 | 4 | * |
|---|
| .. | .. |
|---|
| 5 | 6 | * |
|---|
| 6 | 7 | * Author: Wilson Ding <dingwei@marvell.com> |
|---|
| 7 | 8 | * Author: Romain Perier <romain.perier@free-electrons.com> |
|---|
| 8 | | - * |
|---|
| 9 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 10 | | - * it under the terms of the GNU General Public License version 2 as |
|---|
| 11 | | - * published by the Free Software Foundation. |
|---|
| 12 | 9 | */ |
|---|
| 13 | 10 | |
|---|
| 14 | 11 | #include <linux/clk.h> |
|---|
| .. | .. |
|---|
| 279 | 276 | return -ETIMEDOUT; |
|---|
| 280 | 277 | } |
|---|
| 281 | 278 | |
|---|
| 282 | | -static int a3700_spi_init(struct a3700_spi *a3700_spi) |
|---|
| 279 | +static void a3700_spi_init(struct a3700_spi *a3700_spi) |
|---|
| 283 | 280 | { |
|---|
| 284 | 281 | struct spi_master *master = a3700_spi->master; |
|---|
| 285 | 282 | u32 val; |
|---|
| 286 | | - int i, ret = 0; |
|---|
| 283 | + int i; |
|---|
| 287 | 284 | |
|---|
| 288 | 285 | /* Reset SPI unit */ |
|---|
| 289 | 286 | val = spireg_read(a3700_spi, A3700_SPI_IF_CFG_REG); |
|---|
| .. | .. |
|---|
| 314 | 311 | /* Mask the interrupts and clear cause bits */ |
|---|
| 315 | 312 | spireg_write(a3700_spi, A3700_SPI_INT_MASK_REG, 0); |
|---|
| 316 | 313 | spireg_write(a3700_spi, A3700_SPI_INT_STAT_REG, ~0U); |
|---|
| 317 | | - |
|---|
| 318 | | - return ret; |
|---|
| 319 | 314 | } |
|---|
| 320 | 315 | |
|---|
| 321 | 316 | static irqreturn_t a3700_spi_interrupt(int irq, void *dev_id) |
|---|
| .. | .. |
|---|
| 820 | 815 | { |
|---|
| 821 | 816 | struct device *dev = &pdev->dev; |
|---|
| 822 | 817 | struct device_node *of_node = dev->of_node; |
|---|
| 823 | | - struct resource *res; |
|---|
| 824 | 818 | struct spi_master *master; |
|---|
| 825 | 819 | struct a3700_spi *spi; |
|---|
| 826 | 820 | u32 num_cs = 0; |
|---|
| .. | .. |
|---|
| 854 | 848 | platform_set_drvdata(pdev, master); |
|---|
| 855 | 849 | |
|---|
| 856 | 850 | spi = spi_master_get_devdata(master); |
|---|
| 857 | | - memset(spi, 0, sizeof(struct a3700_spi)); |
|---|
| 858 | 851 | |
|---|
| 859 | 852 | spi->master = master; |
|---|
| 860 | 853 | |
|---|
| 861 | | - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
|---|
| 862 | | - spi->base = devm_ioremap_resource(dev, res); |
|---|
| 854 | + spi->base = devm_platform_ioremap_resource(pdev, 0); |
|---|
| 863 | 855 | if (IS_ERR(spi->base)) { |
|---|
| 864 | 856 | ret = PTR_ERR(spi->base); |
|---|
| 865 | 857 | goto error; |
|---|
| .. | .. |
|---|
| 867 | 859 | |
|---|
| 868 | 860 | irq = platform_get_irq(pdev, 0); |
|---|
| 869 | 861 | if (irq < 0) { |
|---|
| 870 | | - dev_err(dev, "could not get irq: %d\n", irq); |
|---|
| 871 | 862 | ret = -ENXIO; |
|---|
| 872 | 863 | goto error; |
|---|
| 873 | 864 | } |
|---|
| .. | .. |
|---|
| 892 | 883 | master->min_speed_hz = DIV_ROUND_UP(clk_get_rate(spi->clk), |
|---|
| 893 | 884 | A3700_SPI_MAX_PRESCALE); |
|---|
| 894 | 885 | |
|---|
| 895 | | - ret = a3700_spi_init(spi); |
|---|
| 896 | | - if (ret) |
|---|
| 897 | | - goto error_clk; |
|---|
| 886 | + a3700_spi_init(spi); |
|---|
| 898 | 887 | |
|---|
| 899 | 888 | ret = devm_request_irq(dev, spi->irq, a3700_spi_interrupt, 0, |
|---|
| 900 | 889 | dev_name(dev), master); |
|---|