From patchwork Wed Jul 26 13:08:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Biju Das X-Patchwork-Id: 1813143 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2620:137:e000::1:20; helo=out1.vger.email; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by legolas.ozlabs.org (Postfix) with ESMTP id 4R9vN91CbRz1yY5 for ; Wed, 26 Jul 2023 23:08:25 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232680AbjGZNIW (ORCPT ); Wed, 26 Jul 2023 09:08:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230057AbjGZNIU (ORCPT ); Wed, 26 Jul 2023 09:08:20 -0400 Received: from relmlie6.idc.renesas.com (relmlor2.renesas.com [210.160.252.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 63EC22109; Wed, 26 Jul 2023 06:08:19 -0700 (PDT) X-IronPort-AV: E=Sophos;i="6.01,232,1684767600"; d="scan'208";a="174574209" Received: from unknown (HELO relmlir5.idc.renesas.com) ([10.200.68.151]) by relmlie6.idc.renesas.com with ESMTP; 26 Jul 2023 22:08:17 +0900 Received: from localhost.localdomain (unknown [10.226.92.63]) by relmlir5.idc.renesas.com (Postfix) with ESMTP id AE5F1400F93F; Wed, 26 Jul 2023 22:08:15 +0900 (JST) From: Biju Das To: Wolfram Sang Cc: Biju Das , linux-i2c@vger.kernel.org, Geert Uytterhoeven , Dmitry Torokhov , linux-renesas-soc@vger.kernel.org Subject: [PATCH v2 2/2] i2c: Add i2c_device_get_match_data() callback Date: Wed, 26 Jul 2023 14:08:04 +0100 Message-Id: <20230726130804.186313-3-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230726130804.186313-1-biju.das.jz@bp.renesas.com> References: <20230726130804.186313-1-biju.das.jz@bp.renesas.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,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-i2c@vger.kernel.org Add i2c_device_get_match_data() callback to struct bus_type(). While at it, introduced i2c_get_match_data_helper() to avoid code duplication with i2c_get_match_data(). Suggested-by: Dmitry Torokhov Signed-off-by: Biju Das --- RFC V1->v2: * Replaced "Signed-off-by"->"Suggested-by" tag for Dmitry. * Fixed build warnings reported by kernel test robot * Added const qualifier to return type and parameter struct i2c_driver in i2c_get_match_data_helper(). * Added const qualifier to struct i2c_driver in i2c_get_match_data() * Dropped driver variable from i2c_device_get_match_data() * Replaced to_i2c_client with logic for assigning verify_client as it returns non const pointer. --- drivers/i2c/i2c-core-base.c | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c index 60746652fd52..6183e9e36889 100644 --- a/drivers/i2c/i2c-core-base.c +++ b/drivers/i2c/i2c-core-base.c @@ -114,20 +114,37 @@ const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id, } EXPORT_SYMBOL_GPL(i2c_match_id); -const void *i2c_get_match_data(const struct i2c_client *client) +static const void *i2c_get_match_data_helper(const struct i2c_driver *driver, + const struct i2c_client *client) { - struct i2c_driver *driver = to_i2c_driver(client->dev.driver); const struct i2c_device_id *match; + + match = i2c_match_id(driver->id_table, client); + if (!match) + return NULL; + + return (const void *)match->driver_data; +} + +static const void *i2c_device_get_match_data(const struct device *dev) +{ + const struct i2c_client *client = (dev->type == &i2c_client_type) ? + to_i2c_client(dev) : NULL; + + if (!dev->driver) + return NULL; + + return i2c_get_match_data_helper(to_i2c_driver(dev->driver), client); +} + +const void *i2c_get_match_data(const struct i2c_client *client) +{ + const struct i2c_driver *driver = to_i2c_driver(client->dev.driver); const void *data; data = device_get_match_data(&client->dev); - if (!data) { - match = i2c_match_id(driver->id_table, client); - if (!match) - return NULL; - - data = (const void *)match->driver_data; - } + if (!data) + data = i2c_get_match_data_helper(driver, client); return data; } @@ -695,6 +712,7 @@ struct bus_type i2c_bus_type = { .probe = i2c_device_probe, .remove = i2c_device_remove, .shutdown = i2c_device_shutdown, + .get_match_data = i2c_device_get_match_data, }; EXPORT_SYMBOL_GPL(i2c_bus_type);