From patchwork Thu Jun 15 13:20:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 108540 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp657759vqr; Thu, 15 Jun 2023 07:03:10 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6HmTLIcAvm6QuocXShRpsC/HFI582gbf0QPIS6mRodzmXqcTfbMkH/ilQCfasrM5SgiBAJ X-Received: by 2002:a17:902:f68a:b0:1b4:5699:aac8 with SMTP id l10-20020a170902f68a00b001b45699aac8mr6008146plg.21.1686837789252; Thu, 15 Jun 2023 07:03:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686837789; cv=none; d=google.com; s=arc-20160816; b=SGHB0DU/YMuyjzabXC6IlOxaun2yRkiYv8oHvpQNFVPIQZh4R8/aSAX5/VMES3t0uJ gSRiAyZywkOpaOUv95Ahb476fQVa81UGTz9kTWl6Fk3FTZBq96ZTOu465XTH8dKcVQ4Q 56Nirc5UVsNF7f1Dm/VGav8OnOB7NKff2JHR9Q1GQtVD05CSAq/3u4dMPkaHK+z+JBwi uQFSFSMkNTzZzmwh51EH1QstPy9t7n2J5lb7Vj3L4xvd+WNWZvwoNPNMrhPfiYgXPyFz EUDYKB2wYgkRGYU7DYhaCSSRB6CTf5vdf0Nq4ZhE9hzxbk5YRHZk/2Id+ljauzlUHtmb 08Ww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=eDXBRlVAuhwoEUe23wsj4918tzjZLIgMo80BOsbbTMQ=; b=mzzEGWzjS8fCjhpGoksCV+QFiEbIo7CvOgefPDhHyAdXu18MNCXjz4KQz5j0bbchQs PJgjJDp8ZaAB9AMbusAmKZ3JNw42xOTQ09LkQKo2vG0P1WKquNWBzR8cVKib0PtQSLbE LP0grRxtTzoBEJyn4W3X3ThNscmX8mHnRIQYkt2bmUXgx9YZWG9/YfTRwZyiFZKDUT+B jMovptaC58WMbo1FW4iRXJBivB5DvwvM+bcWeuoQd3HKvg+w6WOpp2YDjL7H0By7keAJ h6HtYSi9MmMWUOevCqNKJR5dsXCZN6YeCWjnno5JNsd7IzYWrIT9dAQ9K18E2xl0tvTz b4IQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="NhS0s/bI"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kf16-20020a17090305d000b001b025aba9f2si12351164plb.22.2023.06.15.07.02.53; Thu, 15 Jun 2023 07:03:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="NhS0s/bI"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344581AbjFONvi (ORCPT + 99 others); Thu, 15 Jun 2023 09:51:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57152 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344520AbjFONv1 (ORCPT ); Thu, 15 Jun 2023 09:51:27 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4D9CC1FCC; Thu, 15 Jun 2023 06:51:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1686837086; x=1718373086; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=OHlnlkHPA91wHreN8tHin7Ou/hR9tUoGjail7ciaYAg=; b=NhS0s/bIZhaQWXCZy+jj/xWffXnF8ZTDClYNIfXM0nEZBYbvgPq0qCIc VNpgiXLnoU2zZgqNuRF0fFYJ2wQm9lOVBdQ5/PX7/o+HvK27sg538C6cF 6NdDcQa9lt+GVOlDktBiJkGeDry1dpZNsxf/69kxVetpAzx4D7D3feZY8 J7fghV3JLBIR/XApDWYUD54bovHTvj+GQcaGMSIxVWU+rqC9VqRlsSWU5 cCt216fSls732Fl+f7yprtTgM/CgV50xsPhnWHzNhrUb38eiqwAumoJND OP3zv8tLSnVk2PlXn6Kg9WNBrksEHzRxvXC2syH54g6TA0ATd/Xhv47yc Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10742"; a="361404921" X-IronPort-AV: E=Sophos;i="6.00,245,1681196400"; d="scan'208";a="361404921" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Jun 2023 06:20:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10742"; a="802338785" X-IronPort-AV: E=Sophos;i="6.00,244,1681196400"; d="scan'208";a="802338785" Received: from black.fi.intel.com ([10.237.72.28]) by FMSMGA003.fm.intel.com with ESMTP; 15 Jun 2023 06:20:19 -0700 Received: by black.fi.intel.com (Postfix, from userid 1003) id 4E3BA192; Thu, 15 Jun 2023 16:20:28 +0300 (EEST) From: Andy Shevchenko To: Bartosz Golaszewski , Andy Shevchenko , Geert Uytterhoeven , Linus Walleij , Alexander Stein , linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org Cc: Bartosz Golaszewski , Andy Shevchenko Subject: [PATCH v3 1/5] gpio: aggregator: Remove CONFIG_OF and of_match_ptr() protections Date: Thu, 15 Jun 2023 16:20:19 +0300 Message-Id: <20230615132023.13801-2-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.40.0.1.gaa8946217a0b In-Reply-To: <20230615132023.13801-1-andriy.shevchenko@linux.intel.com> References: <20230615132023.13801-1-andriy.shevchenko@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1768777621689431650?= X-GMAIL-MSGID: =?utf-8?q?1768777621689431650?= They stop the driver being used with ACPI PRP0001 and are something I want to avoid being cut and paste into new drivers. Also include mod_devicetable.h as we struct of_device_id is defined in there. Reviewed-by: Geert Uytterhoeven Reviewed-by: Linus Walleij Signed-off-by: Andy Shevchenko --- drivers/gpio/gpio-aggregator.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/gpio/gpio-aggregator.c b/drivers/gpio/gpio-aggregator.c index 20a686f12df7..1aa7455672d3 100644 --- a/drivers/gpio/gpio-aggregator.c +++ b/drivers/gpio/gpio-aggregator.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -500,23 +501,21 @@ static int gpio_aggregator_probe(struct platform_device *pdev) return 0; } -#ifdef CONFIG_OF static const struct of_device_id gpio_aggregator_dt_ids[] = { /* * Add GPIO-operated devices controlled from userspace below, - * or use "driver_override" in sysfs + * or use "driver_override" in sysfs. */ {} }; MODULE_DEVICE_TABLE(of, gpio_aggregator_dt_ids); -#endif static struct platform_driver gpio_aggregator_driver = { .probe = gpio_aggregator_probe, .driver = { .name = DRV_NAME, .groups = gpio_aggregator_groups, - .of_match_table = of_match_ptr(gpio_aggregator_dt_ids), + .of_match_table = gpio_aggregator_dt_ids, }, }; From patchwork Thu Jun 15 13:20:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 108560 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp683015vqr; Thu, 15 Jun 2023 07:35:47 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4huDOzMJyR7CSEH0aQbxJPyJIrLzyK9OhMrXekyuebKzfCIDECU5eYgJvLyv47SeXZsYXi X-Received: by 2002:a05:651c:d6:b0:2ac:8992:272d with SMTP id 22-20020a05651c00d600b002ac8992272dmr8193072ljr.11.1686839747191; Thu, 15 Jun 2023 07:35:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686839747; cv=none; d=google.com; s=arc-20160816; b=ouDc+nbREHbKBtYO1r4aw2LlVpFgv8G7olIxfqCc4ngh/qc1FCtV8XKb37mbhPUO6z eWzGq+wu8j2MCR5Vm78OhjEvhU8c/aj6KfhhhT4rk1VRQL15Q+vcdZjTbNSoK78G0WMh e6bPJAa8vQAZZLXVEsyqjstUrphdluxWT8yq79plrXxI8MbYQ0ZWD4lY4BctiAchaSP/ 52QSTJ45xFnqCzydrdqLrHfH6lNnIPJETCm2+EZcg/1p5ThlerFbxZtNaDMIA3naWv4i jYE6lL68ni/fbWMggYAmyZHp+C7tBLpkkTTDbdHaLVwsZX6M6/TaQY9NoKAJ4ZuVRH17 7w4w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=PDqwkPZuzmD9jNwS1cPkxwf7ibag/azyExwGW8NUTP0=; b=VdZ9h2rPKEXGHFU2jDSgs5/XfLqh28l7yJCdQdygewbG1RnZjg5zUsmgFxtVUVbpu5 AkKavbc8ZkltBo8pG3OG23NDP+wwuKHmMd69BfSNQ2P3KeVvWFDhyfFI+Xm8r73C1sGJ 6xr9UrleAmV6j2EmKRTtBT7yEgUiJnIHfxnjst/GLjFHrPU2tvo0b++ulFdo6aOcqR+Q FcNdWGOZVn/370CfFRiNRH9T9rEafMepIKuYi2A3YGErcgVvkZJz8xF6lEmvksfq0QXY F+EBjDzKakPO+HfNY3c18yGIyA0XZhWtt/S2ii0v2HcwBG7zrwVQWy5m/97MSCPiEECG KWUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=cdQlKSKp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v23-20020aa7d9d7000000b0050dd98aac00si10179546eds.561.2023.06.15.07.35.16; Thu, 15 Jun 2023 07:35:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=cdQlKSKp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344500AbjFONvZ (ORCPT + 99 others); Thu, 15 Jun 2023 09:51:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57116 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344484AbjFONvX (ORCPT ); Thu, 15 Jun 2023 09:51:23 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1464C1BDB; Thu, 15 Jun 2023 06:51:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1686837083; x=1718373083; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=05ajh+nMpM5e9Do3hT1hquzqCJRfHJXHSX3q930HuGo=; b=cdQlKSKpBav0QUR3UdR7Ec8VDICodqQINEhDllUFtDN3EJ0gdjlckZ/9 wnfS0UmRk5x3r7Obhc2CMv4PZ0IO4cd9i6NMWUGbYOTTcpGlxPMa3brT6 VmsEnRCsLTg8EsML/93VTcPsxsxpFYONkct2jbYkkNJI6RJLTkPotjN84 lvv2B16iJirt/Q6KlBaiROzAYhw+TPa6U1JY0dFjY0FkBPFWQ5fEJ9U6N k7CiMFWlmqcRVJvYuhA3vqGDbYbWKjjQCYWy7VA+s8wvTZfXRL0lulb/8 dkvC3xZgNpoRQys9otBX3haV+0uZ0rEL5jjMjjYiuL6zB3r1HcZ5GJ6Yg A==; X-IronPort-AV: E=McAfee;i="6600,9927,10742"; a="361404890" X-IronPort-AV: E=Sophos;i="6.00,245,1681196400"; d="scan'208";a="361404890" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Jun 2023 06:20:23 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10742"; a="802338783" X-IronPort-AV: E=Sophos;i="6.00,244,1681196400"; d="scan'208";a="802338783" Received: from black.fi.intel.com ([10.237.72.28]) by FMSMGA003.fm.intel.com with ESMTP; 15 Jun 2023 06:20:19 -0700 Received: by black.fi.intel.com (Postfix, from userid 1003) id 5695866C; Thu, 15 Jun 2023 16:20:28 +0300 (EEST) From: Andy Shevchenko To: Bartosz Golaszewski , Andy Shevchenko , Geert Uytterhoeven , Linus Walleij , Alexander Stein , linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org Cc: Bartosz Golaszewski , Andy Shevchenko Subject: [PATCH v3 2/5] gpio: aggregator: Support delay for setting up individual GPIOs Date: Thu, 15 Jun 2023 16:20:20 +0300 Message-Id: <20230615132023.13801-3-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.40.0.1.gaa8946217a0b In-Reply-To: <20230615132023.13801-1-andriy.shevchenko@linux.intel.com> References: <20230615132023.13801-1-andriy.shevchenko@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1768779674933995867?= X-GMAIL-MSGID: =?utf-8?q?1768779674933995867?= In some cases the GPIO may require an additional delay after setting its value. Add support for that into the GPIO forwarder code. This will be fully enabled for use in the following changes. Reviewed-by: Geert Uytterhoeven Reviewed-by: Linus Walleij Signed-off-by: Andy Shevchenko --- drivers/gpio/gpio-aggregator.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/drivers/gpio/gpio-aggregator.c b/drivers/gpio/gpio-aggregator.c index 1aa7455672d3..4a470dd8b75d 100644 --- a/drivers/gpio/gpio-aggregator.c +++ b/drivers/gpio/gpio-aggregator.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -240,6 +241,11 @@ static void __exit gpio_aggregator_remove_all(void) * GPIO Forwarder */ +struct gpiochip_fwd_timing { + u32 ramp_up_us; + u32 ramp_down_us; +}; + struct gpiochip_fwd { struct gpio_chip chip; struct gpio_desc **descs; @@ -247,6 +253,7 @@ struct gpiochip_fwd { struct mutex mlock; /* protects tmp[] if can_sleep */ spinlock_t slock; /* protects tmp[] if !can_sleep */ }; + struct gpiochip_fwd_timing *delay_timings; unsigned long tmp[]; /* values and descs for multiple ops */ }; @@ -331,6 +338,27 @@ static int gpio_fwd_get_multiple_locked(struct gpio_chip *chip, return error; } +static void gpio_fwd_delay(struct gpio_chip *chip, unsigned int offset, int value) +{ + struct gpiochip_fwd *fwd = gpiochip_get_data(chip); + const struct gpiochip_fwd_timing *delay_timings; + bool is_active_low = gpiod_is_active_low(fwd->descs[offset]); + u32 delay_us; + + delay_timings = &fwd->delay_timings[offset]; + if ((!is_active_low && value) || (is_active_low && !value)) + delay_us = delay_timings->ramp_up_us; + else + delay_us = delay_timings->ramp_down_us; + if (!delay_us) + return; + + if (chip->can_sleep) + fsleep(delay_us); + else + udelay(delay_us); +} + static void gpio_fwd_set(struct gpio_chip *chip, unsigned int offset, int value) { struct gpiochip_fwd *fwd = gpiochip_get_data(chip); @@ -339,6 +367,9 @@ static void gpio_fwd_set(struct gpio_chip *chip, unsigned int offset, int value) gpiod_set_value_cansleep(fwd->descs[offset], value); else gpiod_set_value(fwd->descs[offset], value); + + if (fwd->delay_timings) + gpio_fwd_delay(chip, offset, value); } static void gpio_fwd_set_multiple(struct gpiochip_fwd *fwd, unsigned long *mask, From patchwork Thu Jun 15 13:20:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 108569 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp687039vqr; Thu, 15 Jun 2023 07:41:55 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5bItvragXRwFdrTnV0cLvzn7rV3a+w0zXbjJ0UUcsD4Tg3Cb/IpEZLzAPWnDkKrTIRT63m X-Received: by 2002:a05:6402:2793:b0:506:71bd:3931 with SMTP id b19-20020a056402279300b0050671bd3931mr5038160ede.2.1686840115650; Thu, 15 Jun 2023 07:41:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686840115; cv=none; d=google.com; s=arc-20160816; b=wCUutTjvcBQSOc7rrgrR4ow07wLA/lYYVlY/3u4zwx8jzJB8NZXhHfvioJ1WHupY0T Z5IguT8+KMoDtJcchRvs/35z9eXBkeXn2eD06mRcf0BZOuaAXL9OrmjFb4E+KniyOqgo TkX+J5N64jezEpmB9iKR4VzX4Jpfsw8YacEJWvv/BMc4cr+8ufgx/JDk2xSVkWjod9uV VyXcoEJFs9ys8lNDCc0JNVGAJ4SGaYkb8QP4eBIf9WdNlz9Q9N5unKTXELWVvCYgziH1 5aCkhFl+cR+MFbO3E3g9M9EAaQj1OBa+7CCjTJMfT9EIubk6qaqnHNQKBc9kIZWV9m9h lLAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Civfg+w6RBB1DYo3LF4+agNhAZgu+8ZdDW9ae84GPgY=; b=C+j66vozjnq4RBMc5G5cRH5za2N6EE+jzevRBmajGcE4qBnRgh9isq/H0QFMNqaOq2 WONU27Tc0JSluBN9aoI8AtbNRGHxI1pTPDDd3lFlM0y8gSQSvogYLt2lNIvsswjTD5vF JFsaJdP0MsIE65Yzq2ekjRVlQ2nIzRhGpaGjh2z3FYZpNzHtyTuv4+Dav/HTK1xxte15 4dr+m1oXn2WElg4FBc5xqsvkMscVhRVee3ay6c6wQffIII/aYwyEX7miowutLJRibH9G 0IczknIhjMedzD1oZXSnX8wTsQsCootB2n0ldpiThJ6wIaIPbQCUqCxNZQvCtBaABUeQ 2hjg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=h8wkNM8u; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ca12-20020aa7cd6c000000b00514a032942asi9521767edb.542.2023.06.15.07.41.25; Thu, 15 Jun 2023 07:41:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=h8wkNM8u; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344464AbjFONvX (ORCPT + 99 others); Thu, 15 Jun 2023 09:51:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57110 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343567AbjFONvW (ORCPT ); Thu, 15 Jun 2023 09:51:22 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 36DC11BDB; Thu, 15 Jun 2023 06:51:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1686837081; x=1718373081; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=m1IxT8Tqx2Xt34NPHZ0FTzyvORZk2opPVHLCk2AQe2Q=; b=h8wkNM8ultuahNJM4vyepIO0733nK4fLVi5NBzHxuc7NUnTs8fdjwbEZ hfYwG98kg60oFjUg6l4iR2pCYPSJP7xNaCHlAn6c7+mmCBpjW/Mr1LKB2 9goeH04/v99qj/zrOnNgoT7B1O+++OfsLhcVOPY1y65h7mqHs1exilRnK NP/ITUmSmP+BNS34oWMhHWqsB8/xGLfOc1/kGwDm9tOQhpchs46ZZOGkO xotKqPPtIkc5PwTfB3YyE13cbzJGSCt5cDOZWOO4ZbnbBZ89a12Sb407b xF2yRNunnJCP4ANkTmlDS5xP246Ai/uBktaRg5Fepvy5QvMKZugf5NMls Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10742"; a="361404873" X-IronPort-AV: E=Sophos;i="6.00,245,1681196400"; d="scan'208";a="361404873" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Jun 2023 06:20:23 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10742"; a="802338784" X-IronPort-AV: E=Sophos;i="6.00,244,1681196400"; d="scan'208";a="802338784" Received: from black.fi.intel.com ([10.237.72.28]) by FMSMGA003.fm.intel.com with ESMTP; 15 Jun 2023 06:20:19 -0700 Received: by black.fi.intel.com (Postfix, from userid 1003) id 5E1A5677; Thu, 15 Jun 2023 16:20:28 +0300 (EEST) From: Andy Shevchenko To: Bartosz Golaszewski , Andy Shevchenko , Geert Uytterhoeven , Linus Walleij , Alexander Stein , linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org Cc: Bartosz Golaszewski , Andy Shevchenko Subject: [PATCH v3 3/5] gpio: aggregator: Prevent collisions between DT and user device IDs Date: Thu, 15 Jun 2023 16:20:21 +0300 Message-Id: <20230615132023.13801-4-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.40.0.1.gaa8946217a0b In-Reply-To: <20230615132023.13801-1-andriy.shevchenko@linux.intel.com> References: <20230615132023.13801-1-andriy.shevchenko@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1768780061004715992?= X-GMAIL-MSGID: =?utf-8?q?1768780061004715992?= In case we have a device instantiated via DT or other means than via new_device sysfs node, the collision with the latter is possible. Prevent such collisions by allocating user instantiated devices with higher IDs, currently set to 1024. Signed-off-by: Andy Shevchenko --- drivers/gpio/gpio-aggregator.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpio/gpio-aggregator.c b/drivers/gpio/gpio-aggregator.c index 4a470dd8b75d..8892cb37ad79 100644 --- a/drivers/gpio/gpio-aggregator.c +++ b/drivers/gpio/gpio-aggregator.c @@ -26,6 +26,7 @@ #include #include +#define AGGREGATOR_MIN_DEVID 1024 #define AGGREGATOR_MAX_GPIOS 512 /* @@ -135,7 +136,7 @@ static ssize_t new_device_store(struct device_driver *driver, const char *buf, } mutex_lock(&gpio_aggregator_lock); - id = idr_alloc(&gpio_aggregator_idr, aggr, 0, 0, GFP_KERNEL); + id = idr_alloc(&gpio_aggregator_idr, aggr, AGGREGATOR_MIN_DEVID, 0, GFP_KERNEL); mutex_unlock(&gpio_aggregator_lock); if (id < 0) { From patchwork Thu Jun 15 13:20:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 108568 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp686804vqr; Thu, 15 Jun 2023 07:41:36 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7RUicbJyGvJSYl/olQ9zGAB5/PMv/e0j8urLdCx7NvQFF+0aXw+bPajp2z7VYCC/wLOHup X-Received: by 2002:a05:6a20:e309:b0:10b:fe06:97dd with SMTP id nb9-20020a056a20e30900b0010bfe0697ddmr4819005pzb.54.1686840095758; Thu, 15 Jun 2023 07:41:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686840095; cv=none; d=google.com; s=arc-20160816; b=a9B9rARuDgFJpnHz0ANHk5X4kKXq2UqGk1KUZvro/aA6NYcck8S4+GThbLA4O0nQdY we8exai40VrKeuqSklWWQXWON4i8BivXBTqrf5rXc+az8QNRo+RvfATjIzqWr67dVT1O IMnfdcY8/TTF0qgHNprlEG6QODWhGMLhQydP+o7WukfdU2nXQ/f4tshtj+SxCZHTcMg0 /zLjPLW1go5xJSghR/9uunfrsiuLvkdINZycGvkT09+lnUo+w61ErpkGNE4uAuItOaoO lg22mbJnB+gUrcBiwFVE3Zm5FhXpETfC5NWbWmFUD+3YteOLTA3OW0II8+FrYLRAtJ4s eMgQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=RMknBrXz3QA1w8/G3HZ8IR4dDXyDCpU7iLmJmRdANkI=; b=KgwIBcuUvO2C42A4hwOIsVdDF3s0WnIgfYzPJtVKBFixgY4Qbus/1Wrrdqg1ckpWnj 0tXXj/Dzeo25y1Ascb5honZ9OUdkku1k0rCef87wBcIODaZnsNQtiL9byvoFJgL4jzcd Ra6MMFbipMiMSc4yNxTlJLENgPWL9n1mJz3O4swz9SLD6cIJeajc+ZAhPKT6buc0i88g EQSYMx56KqifvxxQsCnguoH59JQ7WPl+tHPpPpPRnev4tsp4qnrnILyu4DQPPRIH6VnC QTERuOK2Zs8dSDGfbKgd78eNvS1W8L8ts72vaaAIIqMWR4Gx2GeSogNTg17VAaLR1pPE D/kQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=OUFxHQd1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c200-20020a621cd1000000b0066628893692si372739pfc.138.2023.06.15.07.41.20; Thu, 15 Jun 2023 07:41:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=OUFxHQd1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344594AbjFONvk (ORCPT + 99 others); Thu, 15 Jun 2023 09:51:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57150 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344484AbjFONv1 (ORCPT ); Thu, 15 Jun 2023 09:51:27 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3D9EA1FC3; Thu, 15 Jun 2023 06:51:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1686837086; x=1718373086; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VnFSx970LoohkoeDP4Iivoj0ONbOU2BclvXilEmqLAo=; b=OUFxHQd1MGs5zkXd4TAp8RLzpd1al3quzUvCpkxRgR27hRp/cMHDIHPP tKRSsLw/y18opTwXv5ibveeLSiEOTHQh5BqsbVVE/9H/bfafSCY9hFjlK VPV4noWwIV/5aDHwJ2OR+O7ue5dXlBZeFwmQPbDz69/XWANUT8Qk9Kty1 JkN+by9ykaF/zFOBLcs8uboZPxf+5kIdgMpA2LPkaPpxbayUum3UiJU2Y DBI/dr+w5gurv+N+p/LDNU/juTcKBFXwZSjn2RCScQXCY5VNbFUcHkR0N a72+or9/cTOHs239lnElidmsbmq/M59B1xpvW5QaGw+MeY5rlEGU7G4O4 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10742"; a="361404920" X-IronPort-AV: E=Sophos;i="6.00,245,1681196400"; d="scan'208";a="361404920" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Jun 2023 06:20:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10742"; a="802338788" X-IronPort-AV: E=Sophos;i="6.00,244,1681196400"; d="scan'208";a="802338788" Received: from black.fi.intel.com ([10.237.72.28]) by FMSMGA003.fm.intel.com with ESMTP; 15 Jun 2023 06:20:19 -0700 Received: by black.fi.intel.com (Postfix, from userid 1003) id 6B57C403; Thu, 15 Jun 2023 16:20:28 +0300 (EEST) From: Andy Shevchenko To: Bartosz Golaszewski , Andy Shevchenko , Geert Uytterhoeven , Linus Walleij , Alexander Stein , linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org Cc: Bartosz Golaszewski , Andy Shevchenko Subject: [PATCH v3 4/5] gpio: aggregator: Set up a parser of delay line parameters Date: Thu, 15 Jun 2023 16:20:22 +0300 Message-Id: <20230615132023.13801-5-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.40.0.1.gaa8946217a0b In-Reply-To: <20230615132023.13801-1-andriy.shevchenko@linux.intel.com> References: <20230615132023.13801-1-andriy.shevchenko@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1768780039778783411?= X-GMAIL-MSGID: =?utf-8?q?1768780039778783411?= The aggregator mode can also handle properties of the platform, that do not belong to the GPIO controller itself. One of such a property is a signal delay line. Set up a parser to support it. Reviewed-by: Geert Uytterhoeven Reviewed-by: Linus Walleij Signed-off-by: Andy Shevchenko --- drivers/gpio/gpio-aggregator.c | 72 +++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpio-aggregator.c b/drivers/gpio/gpio-aggregator.c index 8892cb37ad79..b944ce9e030e 100644 --- a/drivers/gpio/gpio-aggregator.c +++ b/drivers/gpio/gpio-aggregator.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -423,6 +424,59 @@ static int gpio_fwd_to_irq(struct gpio_chip *chip, unsigned int offset) return gpiod_to_irq(fwd->descs[offset]); } +/* + * The GPIO delay provides a way to configure platform specific delays + * for the GPIO ramp-up or ramp-down delays. This can serve the following + * purposes: + * - Open-drain output using an RC filter + */ +#define FWD_FEATURE_DELAY BIT(0) + +#ifdef CONFIG_OF_GPIO +static int gpiochip_fwd_delay_of_xlate(struct gpio_chip *chip, + const struct of_phandle_args *gpiospec, + u32 *flags) +{ + struct gpiochip_fwd *fwd = gpiochip_get_data(chip); + struct gpiochip_fwd_timing *timings; + u32 line; + + if (gpiospec->args_count != chip->of_gpio_n_cells) + return -EINVAL; + + line = gpiospec->args[0]; + if (line >= chip->ngpio) + return -EINVAL; + + timings = &fwd->delay_timings[line]; + timings->ramp_up_us = gpiospec->args[1]; + timings->ramp_down_us = gpiospec->args[2]; + + return line; +} + +static int gpiochip_fwd_setup_delay_line(struct device *dev, struct gpio_chip *chip, + struct gpiochip_fwd *fwd) +{ + fwd->delay_timings = devm_kcalloc(dev, chip->ngpio, + sizeof(*fwd->delay_timings), + GFP_KERNEL); + if (!fwd->delay_timings) + return -ENOMEM; + + chip->of_xlate = gpiochip_fwd_delay_of_xlate; + chip->of_gpio_n_cells = 3; + + return 0; +} +#else +static int gpiochip_fwd_setup_delay_line(struct device *dev, struct gpio_chip *chip, + struct gpiochip_fwd *fwd) +{ + return 0; +} +#endif /* !CONFIG_OF_GPIO */ + /** * gpiochip_fwd_create() - Create a new GPIO forwarder * @dev: Parent device pointer @@ -430,6 +484,7 @@ static int gpio_fwd_to_irq(struct gpio_chip *chip, unsigned int offset) * @descs: Array containing the GPIO descriptors to forward to. * This array must contain @ngpios entries, and must not be deallocated * before the forwarder has been destroyed again. + * @features: Bitwise ORed features as defined with FWD_FEATURE_*. * * This function creates a new gpiochip, which forwards all GPIO operations to * the passed GPIO descriptors. @@ -439,7 +494,8 @@ static int gpio_fwd_to_irq(struct gpio_chip *chip, unsigned int offset) */ static struct gpiochip_fwd *gpiochip_fwd_create(struct device *dev, unsigned int ngpios, - struct gpio_desc *descs[]) + struct gpio_desc *descs[], + unsigned long features) { const char *label = dev_name(dev); struct gpiochip_fwd *fwd; @@ -492,6 +548,12 @@ static struct gpiochip_fwd *gpiochip_fwd_create(struct device *dev, else spin_lock_init(&fwd->slock); + if (features & FWD_FEATURE_DELAY) { + error = gpiochip_fwd_setup_delay_line(dev, chip, fwd); + if (error) + return ERR_PTR(error); + } + error = devm_gpiochip_add_data(dev, chip, fwd); if (error) return ERR_PTR(error); @@ -509,6 +571,7 @@ static int gpio_aggregator_probe(struct platform_device *pdev) struct device *dev = &pdev->dev; struct gpio_desc **descs; struct gpiochip_fwd *fwd; + unsigned long features; int i, n; n = gpiod_count(dev, NULL); @@ -525,7 +588,8 @@ static int gpio_aggregator_probe(struct platform_device *pdev) return PTR_ERR(descs[i]); } - fwd = gpiochip_fwd_create(dev, n, descs); + features = (uintptr_t)device_get_match_data(dev); + fwd = gpiochip_fwd_create(dev, n, descs, features); if (IS_ERR(fwd)) return PTR_ERR(fwd); @@ -534,6 +598,10 @@ static int gpio_aggregator_probe(struct platform_device *pdev) } static const struct of_device_id gpio_aggregator_dt_ids[] = { + { + .compatible = "gpio-delay", + .data = (void *)FWD_FEATURE_DELAY, + }, /* * Add GPIO-operated devices controlled from userspace below, * or use "driver_override" in sysfs. From patchwork Thu Jun 15 13:20:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 108541 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp658457vqr; Thu, 15 Jun 2023 07:03:51 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7PySd15seNbjFpCI8lYnGfOEHTuICO7yM5Vxz1SUHiLD7EmR+C3r4TMkut66TX9Q8Z3KhJ X-Received: by 2002:a05:6a20:918e:b0:111:1bd6:270b with SMTP id v14-20020a056a20918e00b001111bd6270bmr4496328pzd.7.1686837830977; Thu, 15 Jun 2023 07:03:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686837830; cv=none; d=google.com; s=arc-20160816; b=WancODvuo8LO1O1lPc+PnlmpZCPtkpAq04XYrzUlSgv/RTUjuDIACwfosbd8O/oYgP McchgLNdU3bUV0Xhoos65ic6dNrudrHoMOjRAFfUT07ZAFvcWBI1u6jC9LTDCT0D4Hzw fGTbmVxl19KSt6om54Q/E1ll2/aCDLTYsniNJrjs4jz4qxVCyEJKm6XJCDgU2VDQmW8H ktvgRMMEi85UIUczbRudH3k4ptkKaqqRCaOqWgSANdjG71lBUlH2e0kMCn0H7A3ma9oD NTOz68IXAHai+d7J6KMQ/E/Af7rmhVcaQZ1cUQwpXV0Ou8TRCaxV8jMqyWCiVqEO6bWT sXjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=H3Z20AvbfrY2eCK4z76p6I6jbu0QL6kKlC5Uo8+yOPk=; b=W7/2Md6UJY5iW8gTjRsm9VDRxgSgTCgfbgGMFSJ8FdnA/GRFItbPVyHAdx6c9NLGf9 20Ea7my3BzMmkU2g0Uh3g7WIhjLn3dbKAN++45RSDzukfVQFtWph7lzT4A4HnFrG5KMW stGDepAowPO4bs+Iy82pnywoutlxm/C+j454+hz9yn3r4NiEfWV0ma0J2RhQ19iaeSX+ GnbaGMJwKJdJgSP+8EyYLd8vzFhYu95FEhZwfgbqnjpijbjk811W4sNBDJEXPLqsGfgu XojR617w0UqG2xaQMGew1LBTAAbCDoQxRgmZU3B4qblzpl89lpfQGRHCs1hjkukUEYHD V4pQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=VEGcEzQF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l190-20020a6388c7000000b0054ff0a52bbesi1734221pgd.507.2023.06.15.07.03.35; Thu, 15 Jun 2023 07:03:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=VEGcEzQF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344570AbjFONvn (ORCPT + 99 others); Thu, 15 Jun 2023 09:51:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57184 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344501AbjFONvb (ORCPT ); Thu, 15 Jun 2023 09:51:31 -0400 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 83BEA1FDD; Thu, 15 Jun 2023 06:51:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1686837090; x=1718373090; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=YsZGaAObpjYqNJMe/OLLryZiMIHAEejOVbI/tTESdOw=; b=VEGcEzQF2RNKEFguWPvisjEpHVzJyBtI9BVLyh0VwdGcJSrpSJ59+2VG rdHrPPBzXHpGIBiAPQI3SPYn24BgRlO/4MSuzPBLQviBR/wiaHCUO1rps A/bdmL1NWveN5Q+q2RmYrB33llvU2burDVStXGoj42FRJj7ZKhjPZCmqt hwhqS2E7B5p21tvZlg9jbLCI6gOG9kP2N6kX2cKCGmZSbpJGElwv0w/X9 lNAE9qG956kMowPd8Uz5HovfkJ8XDwXYq5CtWdvp/KuQzwFj942KWYxy4 GXLGsuxBvUkDZvQuPpbWCQPhlAZQxDgYftS59uYieGw082kFAFMuW1NJW Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10742"; a="361404962" X-IronPort-AV: E=Sophos;i="6.00,245,1681196400"; d="scan'208";a="361404962" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Jun 2023 06:20:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10742"; a="802338858" X-IronPort-AV: E=Sophos;i="6.00,244,1681196400"; d="scan'208";a="802338858" Received: from black.fi.intel.com ([10.237.72.28]) by FMSMGA003.fm.intel.com with ESMTP; 15 Jun 2023 06:20:23 -0700 Received: by black.fi.intel.com (Postfix, from userid 1003) id 7E05975A; Thu, 15 Jun 2023 16:20:28 +0300 (EEST) From: Andy Shevchenko To: Bartosz Golaszewski , Andy Shevchenko , Geert Uytterhoeven , Linus Walleij , Alexander Stein , linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org Cc: Bartosz Golaszewski , Andy Shevchenko Subject: [PATCH v3 5/5] gpio: delay: Remove duplicative functionality Date: Thu, 15 Jun 2023 16:20:23 +0300 Message-Id: <20230615132023.13801-6-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.40.0.1.gaa8946217a0b In-Reply-To: <20230615132023.13801-1-andriy.shevchenko@linux.intel.com> References: <20230615132023.13801-1-andriy.shevchenko@linux.intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1768777665406109860?= X-GMAIL-MSGID: =?utf-8?q?1768777665406109860?= Now that GPIO aggregator supports a delay line, drop the duplicative functionality, i.e. the entire gpio-delay driver. Reviewed-by: Geert Uytterhoeven Reviewed-by: Linus Walleij Signed-off-by: Andy Shevchenko --- drivers/gpio/Kconfig | 9 --- drivers/gpio/Makefile | 1 - drivers/gpio/gpio-delay.c | 164 -------------------------------------- 3 files changed, 174 deletions(-) delete mode 100644 drivers/gpio/gpio-delay.c diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index 209738ef1446..abaae68c88a4 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -1748,15 +1748,6 @@ config GPIO_AGGREGATOR industrial control context, to be operated from userspace using the GPIO chardev interface. -config GPIO_DELAY - tristate "GPIO delay" - depends on OF_GPIO - help - Say yes here to enable the GPIO delay, which provides a way to - configure platform specific delays for GPIO ramp-up or ramp-down - delays. This can serve the following purposes: - - Open-drain output using an RC filter - config GPIO_LATCH tristate "GPIO latch driver" help diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index 947c9cf9aba8..7843b16f5d59 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -52,7 +52,6 @@ obj-$(CONFIG_GPIO_DA9052) += gpio-da9052.o obj-$(CONFIG_GPIO_DA9055) += gpio-da9055.o obj-$(CONFIG_GPIO_DAVINCI) += gpio-davinci.o obj-$(CONFIG_GPIO_DLN2) += gpio-dln2.o -obj-$(CONFIG_GPIO_DELAY) += gpio-delay.o obj-$(CONFIG_GPIO_DWAPB) += gpio-dwapb.o obj-$(CONFIG_GPIO_EIC_SPRD) += gpio-eic-sprd.o obj-$(CONFIG_GPIO_ELKHARTLAKE) += gpio-elkhartlake.o diff --git a/drivers/gpio/gpio-delay.c b/drivers/gpio/gpio-delay.c deleted file mode 100644 index b489b561b225..000000000000 --- a/drivers/gpio/gpio-delay.c +++ /dev/null @@ -1,164 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Copyright 2022 TQ-Systems GmbH - * Author: Alexander Stein - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "gpiolib.h" - -struct gpio_delay_timing { - unsigned long ramp_up_delay_us; - unsigned long ramp_down_delay_us; -}; - -struct gpio_delay_priv { - struct gpio_chip gc; - struct gpio_descs *input_gpio; - struct gpio_delay_timing *delay_timings; -}; - -static int gpio_delay_get_direction(struct gpio_chip *gc, unsigned int offset) -{ - return GPIO_LINE_DIRECTION_OUT; -} - -static void gpio_delay_set(struct gpio_chip *gc, unsigned int offset, int val) -{ - struct gpio_delay_priv *priv = gpiochip_get_data(gc); - struct gpio_desc *gpio_desc = priv->input_gpio->desc[offset]; - const struct gpio_delay_timing *delay_timings; - bool ramp_up; - - gpiod_set_value(gpio_desc, val); - - delay_timings = &priv->delay_timings[offset]; - ramp_up = (!gpiod_is_active_low(gpio_desc) && val) || - (gpiod_is_active_low(gpio_desc) && !val); - - if (ramp_up && delay_timings->ramp_up_delay_us) - udelay(delay_timings->ramp_up_delay_us); - if (!ramp_up && delay_timings->ramp_down_delay_us) - udelay(delay_timings->ramp_down_delay_us); -} - -static void gpio_delay_set_can_sleep(struct gpio_chip *gc, unsigned int offset, int val) -{ - struct gpio_delay_priv *priv = gpiochip_get_data(gc); - struct gpio_desc *gpio_desc = priv->input_gpio->desc[offset]; - const struct gpio_delay_timing *delay_timings; - bool ramp_up; - - gpiod_set_value_cansleep(gpio_desc, val); - - delay_timings = &priv->delay_timings[offset]; - ramp_up = (!gpiod_is_active_low(gpio_desc) && val) || - (gpiod_is_active_low(gpio_desc) && !val); - - if (ramp_up && delay_timings->ramp_up_delay_us) - fsleep(delay_timings->ramp_up_delay_us); - if (!ramp_up && delay_timings->ramp_down_delay_us) - fsleep(delay_timings->ramp_down_delay_us); -} - -static int gpio_delay_of_xlate(struct gpio_chip *gc, - const struct of_phandle_args *gpiospec, - u32 *flags) -{ - struct gpio_delay_priv *priv = gpiochip_get_data(gc); - struct gpio_delay_timing *timings; - u32 line; - - if (gpiospec->args_count != gc->of_gpio_n_cells) - return -EINVAL; - - line = gpiospec->args[0]; - if (line >= gc->ngpio) - return -EINVAL; - - timings = &priv->delay_timings[line]; - timings->ramp_up_delay_us = gpiospec->args[1]; - timings->ramp_down_delay_us = gpiospec->args[2]; - - return line; -} - -static bool gpio_delay_can_sleep(const struct gpio_delay_priv *priv) -{ - int i; - - for (i = 0; i < priv->input_gpio->ndescs; i++) - if (gpiod_cansleep(priv->input_gpio->desc[i])) - return true; - - return false; -} - -static int gpio_delay_probe(struct platform_device *pdev) -{ - struct gpio_delay_priv *priv; - - priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); - if (!priv) - return -ENOMEM; - - priv->input_gpio = devm_gpiod_get_array(&pdev->dev, NULL, GPIOD_OUT_LOW); - if (IS_ERR(priv->input_gpio)) - return dev_err_probe(&pdev->dev, PTR_ERR(priv->input_gpio), - "Failed to get input-gpios"); - - priv->delay_timings = devm_kcalloc(&pdev->dev, - priv->input_gpio->ndescs, - sizeof(*priv->delay_timings), - GFP_KERNEL); - if (!priv->delay_timings) - return -ENOMEM; - - if (gpio_delay_can_sleep(priv)) { - priv->gc.can_sleep = true; - priv->gc.set = gpio_delay_set_can_sleep; - } else { - priv->gc.can_sleep = false; - priv->gc.set = gpio_delay_set; - } - - priv->gc.get_direction = gpio_delay_get_direction; - priv->gc.of_xlate = gpio_delay_of_xlate; - priv->gc.of_gpio_n_cells = 3; - priv->gc.ngpio = priv->input_gpio->ndescs; - priv->gc.owner = THIS_MODULE; - priv->gc.base = -1; - priv->gc.parent = &pdev->dev; - - platform_set_drvdata(pdev, priv); - - return devm_gpiochip_add_data(&pdev->dev, &priv->gc, priv); -} - -static const struct of_device_id gpio_delay_ids[] = { - { - .compatible = "gpio-delay", - }, - { /* sentinel */ } -}; -MODULE_DEVICE_TABLE(of, gpio_delay_ids); - -static struct platform_driver gpio_delay_driver = { - .driver = { - .name = "gpio-delay", - .of_match_table = gpio_delay_ids, - }, - .probe = gpio_delay_probe, -}; -module_platform_driver(gpio_delay_driver); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Alexander Stein "); -MODULE_DESCRIPTION("GPIO delay driver");