From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935145AbcCJHP3 (ORCPT ); Thu, 10 Mar 2016 02:15:29 -0500 Received: from hqemgate14.nvidia.com ([216.228.121.143]:5784 "EHLO hqemgate14.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932742AbcCJHPW (ORCPT ); Thu, 10 Mar 2016 02:15:22 -0500 X-PGP-Universal: processed; by hqnvupgp08.nvidia.com on Wed, 09 Mar 2016 23:14:45 -0800 Message-ID: <56E11BFE.3040906@nvidia.com> Date: Thu, 10 Mar 2016 12:32:22 +0530 From: Laxman Dewangan User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: Stephen Warren CC: , , , , , , , , Benoit Parrot , Alexandre Courbot Subject: Re: [PATCH 3/5] gpio: of: Return error if gpio hog configuration failed References: <1457438528-29054-1-git-send-email-ldewangan@nvidia.com> <1457438528-29054-4-git-send-email-ldewangan@nvidia.com> <56E05930.4080805@wwwdotorg.org> In-Reply-To: <56E05930.4080805@wwwdotorg.org> X-Originating-IP: [10.19.65.30] X-ClientProxiedBy: DRUKMAIL102.nvidia.com (10.25.59.20) To bgmail102.nvidia.com (10.25.59.11) Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wednesday 09 March 2016 10:41 PM, Stephen Warren wrote: > On 03/08/2016 05:02 AM, Laxman Dewangan wrote: >> If GPIO hog configuration failed while adding OF based >> gpiochip() then return the error instead of ignoring it. >> >> This helps of properly handling the gpio driver dependency. >> >> When adding the gpio hog nodes for NVIDIA's Tegra210 platforms, >> the gpio_hogd() fails with EPROBE_DEFER because pinctrl is not >> ready at this time and gpio_request() for Tegra GPIO driver >> returns error. The error was not causing the Tegra GPIO driver >> to fail as the error was getting ignored. > >> diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c > >> @@ -218,9 +220,12 @@ static void of_gpiochip_scan_gpios(struct >> gpio_chip *chip) >> if (IS_ERR(desc)) >> continue; >> >> - if (gpiod_hog(desc, name, lflags, dflags)) >> - continue; >> + ret = gpiod_hog(desc, name, lflags, dflags); >> + if (ret < 0) >> + return ret; >> } >> + >> + return 0; >> } > > If there are multiple child nodes (which the code above is looping > over), and the hog for entries 0, 1, 2 succeed and the hog for entry 3 > fails, don't you need to go back and unhog for nodes 0..2 so that the > next time this function is called, those hogs won't already be in > place thus preventing them from being hogged the second time around? > Or does hogging not take ownership of the resource and thus prevent it > from being acquired again? The gpiolib take care per the error handling: status = of_gpiochip_add(chip); if (status) goto err_remove_chip; ::: err_remove_chip: acpi_gpiochip_remove(chip); gpiochip_free_hogs(chip); of_gpiochip_remove(chip);