Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757585AbcJQOQ4 (ORCPT ); Mon, 17 Oct 2016 10:16:56 -0400 Received: from mail-it0-f68.google.com ([209.85.214.68]:34867 "EHLO mail-it0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755264AbcJQOQq (ORCPT ); Mon, 17 Oct 2016 10:16:46 -0400 MIME-Version: 1.0 In-Reply-To: <20161017135957.20297-3-ralf@ramses-pyramidenbau.de> References: <20161017135957.20297-1-ralf@ramses-pyramidenbau.de> <20161017135957.20297-3-ralf@ramses-pyramidenbau.de> From: Geert Uytterhoeven Date: Mon, 17 Oct 2016 16:16:45 +0200 X-Google-Sender-Auth: GqDJqhETKWd9A3g0TpQcFCK5vYI Message-ID: Subject: Re: [PATCH v2 2/2] i2c: mark device nodes only in case of successful instantiation To: Ralf Ramsauer Cc: Mark Brown , Wolfram Sang , Linux SPI , Linux I2C , "linux-kernel @ vger . kernel . org" , Pantelis Antoniou Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2005 Lines: 52 On Mon, Oct 17, 2016 at 3:59 PM, Ralf Ramsauer wrote: > Instantiated I2C device nodes are marked with OF_POPULATE. This was > introduced in 4f001fd. On unloading, loaded device nodes will of course > be unmarked. The problem are nodes that fail during initialisation: If a > node fails, it won't be unloaded and hence not be unmarked. > > If a I2C driver module is unloaded and reloaded, it will skip nodes that > failed before. > > Skip device nodes that are already populated and mark them only in case > of success. > > Note that the same issue exists for SPI. > > Fixes: 4f001fd ("i2c: Mark instantiated device nodes with OF_POPULATE") > Signed-off-by: Ralf Ramsauer Reviewed-by: Geert Uytterhoeven > --- a/drivers/i2c/i2c-core.c > +++ b/drivers/i2c/i2c-core.c > @@ -1695,7 +1696,14 @@ static void of_i2c_register_devices(struct i2c_adapter *adap) > for_each_available_child_of_node(bus, node) { > if (of_node_test_and_set_flag(node, OF_POPULATED)) > continue; > - of_i2c_register_device(adap, node); > + > + client = of_i2c_register_device(adap, node); > + if (IS_ERR(client)) { > + dev_warn(&adap->dev, > + "Failed to create I2C device for %s\n", > + node->full_name); I don't think there's a need to add this warning, as of_i2c_register_device() already prints messages in all failure paths. > + of_node_clear_flag(node, OF_POPULATED); > + } > } Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds