Received: by 2002:a05:7412:2a8c:b0:e2:908c:2ebd with SMTP id u12csp288524rdh; Sat, 23 Sep 2023 10:19:49 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFv9RY2oCAHn3amRwlHl34wgMKH/+jznUXTQ2m7x7ZD6dazUpcAXNZE0uFfUE1uI83HLLg/ X-Received: by 2002:a05:6a00:2494:b0:690:3793:17e5 with SMTP id c20-20020a056a00249400b00690379317e5mr3373242pfv.4.1695489589063; Sat, 23 Sep 2023 10:19:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695489589; cv=none; d=google.com; s=arc-20160816; b=F2opHDxaW7Tw8S+XpWmbwfAN69PeivCq/idH2pvF6ozF1+UOm/10qspF9czO+fc9oe xuFbAjnfYqPFMARiHkhZlSWPVfemQdmeAmLQYjtBbGrKHxAKoode4NGVhSm5CSrkUlYg gV3NK6ENlLCvLhJ5cEqLpQJxG671W0EoQKlelrOJNM5eLwb5tiI3EaG94orMde4PMHI1 RoAiw4oc0sZx9ft64DMdNQPLriQgqBI51aSa+8gcvf2kyD2/7KJ/fwGk8DCK+mjhjAmj oPs1+NFZTUM92aY21sCgvDLCYVymttqSd6le43HwIn1kbjWXynu258gJA1ZyP+JyHAnJ 9Rhg== 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; bh=9YZP+4/HYnJ2f+lPCJLsge1Btdfo3+erLEDqkHkO8zw=; fh=r6Qhp0LT7Kf9zXNJMg+nKK/99bcL/1J+D8BN6ItCqm4=; b=hL0wExbKUVFSui9VeJNBuczdiOLDxWmGQnVXinJg4GT+5Tzh3wVOfT5e10Vl3NPaBZ k0a+tWIBZYRp+jLXFrkZDRxdt/kmhmSgAOd+WZre1ujuYoDqDMAwE2YmTebzW8rRDdQf XrC8epFfYlyPspOnaznnIwXUrgVkpl1DmsXserJurRPLKDvMykBsvsmnvlCvbNeC9pyh p/MpLIdkPwHTY4Kdyo2t72KYrO6EjHdgpcOQ+ioPzmodEjL1qmIe1tDvGGPLxNLMU7gl YX2ivVUy8IaJ2Id5sSe/qNk8SwyjD/hn4tGIKF65+dUCzAfGN0IZZcpylq2TBqsn/lYR g1FQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=renesas.com Return-Path: Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id d7-20020a056a0024c700b00690f886b1bcsi6683749pfv.392.2023.09.23.10.19.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Sep 2023 10:19:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=renesas.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id B798280A28ED; Sat, 23 Sep 2023 10:19:46 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230285AbjIWRTi (ORCPT + 99 others); Sat, 23 Sep 2023 13:19:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49328 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229513AbjIWRTh (ORCPT ); Sat, 23 Sep 2023 13:19:37 -0400 Received: from relmlie5.idc.renesas.com (relmlor1.renesas.com [210.160.252.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 31265AF; Sat, 23 Sep 2023 10:19:31 -0700 (PDT) X-IronPort-AV: E=Sophos;i="6.03,171,1694703600"; d="scan'208";a="176996638" Received: from unknown (HELO relmlir5.idc.renesas.com) ([10.200.68.151]) by relmlie5.idc.renesas.com with ESMTP; 24 Sep 2023 02:19:30 +0900 Received: from localhost.localdomain (unknown [10.226.92.12]) by relmlir5.idc.renesas.com (Postfix) with ESMTP id 42DBA40001D2; Sun, 24 Sep 2023 02:19:27 +0900 (JST) From: Biju Das To: Pavel Machek , Lee Jones Cc: Biju Das , linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org, Biju Das , Andy Shevchenko Subject: [PATCH v2 1/2] leds: pca955x: Convert enum->pointer for data in the match tables Date: Sat, 23 Sep 2023 18:19:20 +0100 Message-Id: <20230923171921.53503-2-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230923171921.53503-1-biju.das.jz@bp.renesas.com> References: <20230923171921.53503-1-biju.das.jz@bp.renesas.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=2.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_SBL_CSS,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Sat, 23 Sep 2023 10:19:46 -0700 (PDT) X-Spam-Level: ** Convert enum->pointer for data in the match tables, so that device_get_match_data() can do match against OF/ACPI/I2C tables, once i2c bus type match support added to it. Replace enum->struct *pca955x_chipdefs for data in the match table. Simplify the probe() by replacing device_get_match_data() and ID lookup for retrieving data by i2c_get_match_data(). While at it, add const definition to pca955x_chipdefs[]. Signed-off-by: Biju Das Reviewed-by: Lee Jones --- v1->v2: * Rebased to leds-next. * Added Rb tag from Lee Jones. --- drivers/leds/leds-pca955x.c | 49 ++++++++++++++----------------------- 1 file changed, 18 insertions(+), 31 deletions(-) diff --git a/drivers/leds/leds-pca955x.c b/drivers/leds/leds-pca955x.c index 1d7fa0cd97bf..891cfc05301d 100644 --- a/drivers/leds/leds-pca955x.c +++ b/drivers/leds/leds-pca955x.c @@ -76,7 +76,7 @@ struct pca955x_chipdef { int slv_addr_shift; /* Number of bits to ignore */ }; -static struct pca955x_chipdef pca955x_chipdefs[] = { +static const struct pca955x_chipdef pca955x_chipdefs[] = { [pca9550] = { .bits = 2, .slv_addr = /* 110000x */ 0x60, @@ -105,11 +105,11 @@ static struct pca955x_chipdef pca955x_chipdefs[] = { }; static const struct i2c_device_id pca955x_id[] = { - { "pca9550", pca9550 }, - { "pca9551", pca9551 }, - { "pca9552", pca9552 }, - { "ibm-pca9552", ibm_pca9552 }, - { "pca9553", pca9553 }, + { "pca9550", (kernel_ulong_t)&pca955x_chipdefs[pca9550] }, + { "pca9551", (kernel_ulong_t)&pca955x_chipdefs[pca9551] }, + { "pca9552", (kernel_ulong_t)&pca955x_chipdefs[pca9552] }, + { "ibm-pca9552", (kernel_ulong_t)&pca955x_chipdefs[ibm_pca9552] }, + { "pca9553", (kernel_ulong_t)&pca955x_chipdefs[pca9553] }, { } }; MODULE_DEVICE_TABLE(i2c, pca955x_id); @@ -117,7 +117,7 @@ MODULE_DEVICE_TABLE(i2c, pca955x_id); struct pca955x { struct mutex lock; struct pca955x_led *leds; - struct pca955x_chipdef *chipdef; + const struct pca955x_chipdef *chipdef; struct i2c_client *client; unsigned long active_pins; #ifdef CONFIG_LEDS_PCA955X_GPIO @@ -415,7 +415,7 @@ static int pca955x_gpio_direction_output(struct gpio_chip *gc, #endif /* CONFIG_LEDS_PCA955X_GPIO */ static struct pca955x_platform_data * -pca955x_get_pdata(struct i2c_client *client, struct pca955x_chipdef *chip) +pca955x_get_pdata(struct i2c_client *client, const struct pca955x_chipdef *chip) { struct pca955x_platform_data *pdata; struct pca955x_led *led; @@ -458,11 +458,11 @@ pca955x_get_pdata(struct i2c_client *client, struct pca955x_chipdef *chip) } static const struct of_device_id of_pca955x_match[] = { - { .compatible = "nxp,pca9550", .data = (void *)pca9550 }, - { .compatible = "nxp,pca9551", .data = (void *)pca9551 }, - { .compatible = "nxp,pca9552", .data = (void *)pca9552 }, - { .compatible = "ibm,pca9552", .data = (void *)ibm_pca9552 }, - { .compatible = "nxp,pca9553", .data = (void *)pca9553 }, + { .compatible = "nxp,pca9550", .data = &pca955x_chipdefs[pca9550] }, + { .compatible = "nxp,pca9551", .data = &pca955x_chipdefs[pca9551] }, + { .compatible = "nxp,pca9552", .data = &pca955x_chipdefs[pca9552] }, + { .compatible = "ibm,pca9552", .data = &pca955x_chipdefs[ibm_pca9552] }, + { .compatible = "nxp,pca9553", .data = &pca955x_chipdefs[pca9553] }, {}, }; MODULE_DEVICE_TABLE(of, of_pca955x_match); @@ -471,7 +471,7 @@ static int pca955x_probe(struct i2c_client *client) { struct pca955x *pca955x; struct pca955x_led *pca955x_led; - struct pca955x_chipdef *chip; + const struct pca955x_chipdef *chip; struct led_classdev *led; struct led_init_data init_data; struct i2c_adapter *adapter; @@ -480,24 +480,11 @@ static int pca955x_probe(struct i2c_client *client) bool set_default_label = false; bool keep_pwm = false; char default_label[8]; - enum pca955x_type chip_type; - const void *md = device_get_match_data(&client->dev); - - if (md) { - chip_type = (enum pca955x_type)(uintptr_t)md; - } else { - const struct i2c_device_id *id = i2c_match_id(pca955x_id, - client); - - if (id) { - chip_type = (enum pca955x_type)id->driver_data; - } else { - dev_err(&client->dev, "unknown chip\n"); - return -ENODEV; - } - } - chip = &pca955x_chipdefs[chip_type]; + chip = i2c_get_match_data(client); + if (!chip) + return dev_err_probe(&client->dev, -ENODEV, "unknown chip\n"); + adapter = client->adapter; pdata = dev_get_platdata(&client->dev); if (!pdata) { -- 2.25.1