lkml.org 
[lkml]   [2017]   [Nov]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.4 02/32] ARM: OMAP2+: gpmc-onenand: propagate error on initialization failure
    Date
    From: Ladislav Michl <ladis@linux-mips.org>

    [ Upstream commit 7807e086a2d1f69cc1a57958cac04fea79fc2112 ]

    gpmc_probe_onenand_child returns success even on gpmc_onenand_init
    failure. Fix that.

    Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
    Acked-by: Roger Quadros <rogerq@ti.com>
    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    ---
    arch/arm/mach-omap2/gpmc-onenand.c | 10 ++++++----
    drivers/memory/omap-gpmc.c | 4 +---
    include/linux/omap-gpmc.h | 5 +++--
    3 files changed, 10 insertions(+), 9 deletions(-)

    diff --git a/arch/arm/mach-omap2/gpmc-onenand.c b/arch/arm/mach-omap2/gpmc-onenand.c
    index 8633c703546a..2944af820558 100644
    --- a/arch/arm/mach-omap2/gpmc-onenand.c
    +++ b/arch/arm/mach-omap2/gpmc-onenand.c
    @@ -367,7 +367,7 @@ static int gpmc_onenand_setup(void __iomem *onenand_base, int *freq_ptr)
    return ret;
    }

    -void gpmc_onenand_init(struct omap_onenand_platform_data *_onenand_data)
    +int gpmc_onenand_init(struct omap_onenand_platform_data *_onenand_data)
    {
    int err;
    struct device *dev = &gpmc_onenand_device.dev;
    @@ -393,15 +393,17 @@ void gpmc_onenand_init(struct omap_onenand_platform_data *_onenand_data)
    if (err < 0) {
    dev_err(dev, "Cannot request GPMC CS %d, error %d\n",
    gpmc_onenand_data->cs, err);
    - return;
    + return err;
    }

    gpmc_onenand_resource.end = gpmc_onenand_resource.start +
    ONENAND_IO_SIZE - 1;

    - if (platform_device_register(&gpmc_onenand_device) < 0) {
    + err = platform_device_register(&gpmc_onenand_device);
    + if (err) {
    dev_err(dev, "Unable to register OneNAND device\n");
    gpmc_cs_free(gpmc_onenand_data->cs);
    - return;
    }
    +
    + return err;
    }
    diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
    index 55cba89dbdb8..49691a8c74ee 100644
    --- a/drivers/memory/omap-gpmc.c
    +++ b/drivers/memory/omap-gpmc.c
    @@ -1890,9 +1890,7 @@ static int gpmc_probe_onenand_child(struct platform_device *pdev,
    if (!of_property_read_u32(child, "dma-channel", &val))
    gpmc_onenand_data->dma_channel = val;

    - gpmc_onenand_init(gpmc_onenand_data);
    -
    - return 0;
    + return gpmc_onenand_init(gpmc_onenand_data);
    }
    #else
    static int gpmc_probe_onenand_child(struct platform_device *pdev,
    diff --git a/include/linux/omap-gpmc.h b/include/linux/omap-gpmc.h
    index 7dee00143afd..c201e31e9d7e 100644
    --- a/include/linux/omap-gpmc.h
    +++ b/include/linux/omap-gpmc.h
    @@ -191,10 +191,11 @@ static inline int gpmc_nand_init(struct omap_nand_platform_data *d,
    #endif

    #if IS_ENABLED(CONFIG_MTD_ONENAND_OMAP2)
    -extern void gpmc_onenand_init(struct omap_onenand_platform_data *d);
    +extern int gpmc_onenand_init(struct omap_onenand_platform_data *d);
    #else
    #define board_onenand_data NULL
    -static inline void gpmc_onenand_init(struct omap_onenand_platform_data *d)
    +static inline int gpmc_onenand_init(struct omap_onenand_platform_data *d)
    {
    + return 0;
    }
    #endif
    --
    2.11.0
    \
     
     \ /
      Last update: 2017-11-29 18:46    [W:4.034 / U:0.132 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site