From patchwork Tue Mar 7 15:36:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sebastian Reichel X-Patchwork-Id: 65648 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:570d:b0:a1:2e52:cf23 with SMTP id h13csp1974685dyk; Tue, 7 Mar 2023 07:48:39 -0800 (PST) X-Google-Smtp-Source: AK7set9aAf/d65dzuPR6iwy9Miycu9fPO7v97I3LgN7+OFs5B4P8TpEDvg9VltO5FCugl9uZg7Uz X-Received: by 2002:a05:6402:1adc:b0:4ac:bcf9:6d6c with SMTP id ba28-20020a0564021adc00b004acbcf96d6cmr12907636edb.36.1678204119766; Tue, 07 Mar 2023 07:48:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678204119; cv=none; d=google.com; s=arc-20160816; b=pWo+44tb2QWuhmWuzS9AD/t1mwZRa6ZM3Yvk73TY9sfxJG+XcXCXgpL/C6sQ1ghbQL i2kV5L2jBxcNFeorTWu8jaa5u3IPDpvWEaOPfP+WQD1RyZ2ALtr01OVE3+9wnFbqMA9D RDA4iUbStoiJ6v94S0od3vV1l49SnMSKPEpm/qMKszT90vsWS2RR9YibDTuAkZfwLvw3 MGDuMBPCa6lbWYdia6dCy6+y6MerDGEFIrVONKPBY9N+TEZHBUexwTUesbxf1UCdGvBD lN0KHn1AA7uHuBRRIlsQXdw5NAKGFF+xVvYPBtx3sQCDgEbmNz7InPxeMuAamjkMBYaC F/Fw== 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=8nTjnSFv2INA8CGQnFMI4jsD6mvfwEfaxFJY7AS/zyw=; b=lFR+SATk8NR9reel8jNMDwxuI2HX/02hX7sXiio1P2r2VRMIzF1Ui0s2uahFMSVeQ5 dhyFEmERXXWvT+uwpkdoCarVOtJMXJSBauJ5DYAT+kz5SnWIlTDwO9PJfb3mhIGhj6ai oAT97aH5He+XUG//f5jvzYnS9FPge9nhO/wfKGQozdx9txDO7jgFDLmTzvLpqL6EHhPc EfYvuXAfRfWniCSX98HDSu9Cb8zJsJRlZ9oyei7CriPpdJ2ErSPnE/PQJw/ly/hRi3th ZjR/Q0bF3W2PZNdjCFUSZsBNAxSFjzzUZ4ldTPDHcI8C8D0kJRxsEXXE+tXj9MOcHlmd N0KA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=AHkJWqXr; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e8-20020a50ec88000000b004be52447cd3si1656108edr.311.2023.03.07.07.48.14; Tue, 07 Mar 2023 07:48:39 -0800 (PST) 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=@collabora.com header.s=mail header.b=AHkJWqXr; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231435AbjCGPhF (ORCPT + 99 others); Tue, 7 Mar 2023 10:37:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38450 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231351AbjCGPgp (ORCPT ); Tue, 7 Mar 2023 10:36:45 -0500 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2C0B11498B; Tue, 7 Mar 2023 07:36:35 -0800 (PST) Received: from jupiter.universe (dyndsl-091-248-189-073.ewe-ip-backbone.de [91.248.189.73]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) (Authenticated sender: sre) by madras.collabora.co.uk (Postfix) with ESMTPSA id A9B916602FEB; Tue, 7 Mar 2023 15:36:23 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1678203383; bh=564l3WGAORurb/WvqPnweL63+s5Hi9qqK6QdPsqoKNo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AHkJWqXr8nTHwl07g2gpouO6iiwKEZXE6D0MtOf5v4wO9Ec2fNMLa1DQQ3ZDHDsY/ RHs7jjIWpDtLteWCmdVChKeKx/FgTZzCenylKIPeZgmRYpMBdt2Bk078ZcIW3snx5Z 4RLofhV5wIkcqM2X9MNsxbR0IMG7/dzTQICYfZ+iTdKtZ04xF+co/hYGTaIrhmrtfi H/+3XAvSXNINAmFuuAaENy/Yufti068C55rqq4WSyBoKsg7NZ5NKab9KKHcHQlLIi4 CV0iFbC9ANAunFl717TqFtwtYM4nasvpp0i3G7mCgMGG345+b7bSwOxNjAMBBZRpzu QClofWeGFSAwA== Received: by jupiter.universe (Postfix, from userid 1000) id 2C59248011E; Tue, 7 Mar 2023 16:36:19 +0100 (CET) From: Sebastian Reichel To: Heiko Stuebner , Rob Herring , Krzysztof Kozlowski , Lee Jones Cc: Michael Turquette , Stephen Boyd , Linus Walleij , Mark Brown , Liam Girdwood , Alexandre Belloni , Alessandro Zummo , linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , kernel@collabora.com Subject: [PATCHv7 06/11] mfd: rk8xx-i2c: use device_get_match_data Date: Tue, 7 Mar 2023 16:36:12 +0100 Message-Id: <20230307153617.643260-7-sebastian.reichel@collabora.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230307153617.643260-1-sebastian.reichel@collabora.com> References: <20230307153617.643260-1-sebastian.reichel@collabora.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED 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?1759724563122346243?= X-GMAIL-MSGID: =?utf-8?q?1759724563122346243?= Simplify the device identification logic by supplying the relevant information via of_match_data. This also removes the dev_info() printing the chip version, since that's supplied by the match data now. Due to lack of hardware this change is compile-tested only. Acked-for-MFD-by: Lee Jones Signed-off-by: Sebastian Reichel --- drivers/mfd/rk8xx-core.c | 2 - drivers/mfd/rk8xx-i2c.c | 89 +++++++++++++++++----------------------- 2 files changed, 37 insertions(+), 54 deletions(-) diff --git a/drivers/mfd/rk8xx-core.c b/drivers/mfd/rk8xx-core.c index 5c0a5acef34c..ddf2052c5190 100644 --- a/drivers/mfd/rk8xx-core.c +++ b/drivers/mfd/rk8xx-core.c @@ -597,8 +597,6 @@ int rk8xx_probe(struct device *dev, int variant, unsigned int irq, struct regmap return -EINVAL; } - dev_info(dev, "chip id: 0x%x\n", (unsigned int)rk808->variant); - if (!irq) return dev_err_probe(dev, -EINVAL, "No interrupt support, no core IRQ\n"); diff --git a/drivers/mfd/rk8xx-i2c.c b/drivers/mfd/rk8xx-i2c.c index 6d121b589fec..2822bfa8a04a 100644 --- a/drivers/mfd/rk8xx-i2c.c +++ b/drivers/mfd/rk8xx-i2c.c @@ -16,6 +16,11 @@ #include #include +struct rk8xx_i2c_platform_data { + const struct regmap_config *regmap_cfg; + int variant; +}; + static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg) { /* @@ -103,66 +108,46 @@ static const struct regmap_config rk817_regmap_config = { .volatile_reg = rk817_is_volatile_reg, }; -static int rk8xx_i2c_get_variant(struct i2c_client *client) -{ - u8 pmic_id_msb, pmic_id_lsb; - int msb, lsb; - - if (of_device_is_compatible(client->dev.of_node, "rockchip,rk817") || - of_device_is_compatible(client->dev.of_node, "rockchip,rk809")) { - pmic_id_msb = RK817_ID_MSB; - pmic_id_lsb = RK817_ID_LSB; - } else { - pmic_id_msb = RK808_ID_MSB; - pmic_id_lsb = RK808_ID_LSB; - } +static const struct rk8xx_i2c_platform_data rk805_data = { + .regmap_cfg = &rk805_regmap_config, + .variant = RK805_ID, +}; + +static const struct rk8xx_i2c_platform_data rk808_data = { + .regmap_cfg = &rk808_regmap_config, + .variant = RK808_ID, +}; - /* Read chip variant */ - msb = i2c_smbus_read_byte_data(client, pmic_id_msb); - if (msb < 0) - return dev_err_probe(&client->dev, msb, "failed to read the chip id MSB\n"); +static const struct rk8xx_i2c_platform_data rk809_data = { + .regmap_cfg = &rk817_regmap_config, + .variant = RK809_ID, +}; - lsb = i2c_smbus_read_byte_data(client, pmic_id_lsb); - if (lsb < 0) - return dev_err_probe(&client->dev, lsb, "failed to read the chip id LSB\n"); +static const struct rk8xx_i2c_platform_data rk817_data = { + .regmap_cfg = &rk817_regmap_config, + .variant = RK817_ID, +}; - return ((msb << 8) | lsb) & RK8XX_ID_MSK; -} +static const struct rk8xx_i2c_platform_data rk818_data = { + .regmap_cfg = &rk818_regmap_config, + .variant = RK818_ID, +}; static int rk8xx_i2c_probe(struct i2c_client *client) { - const struct regmap_config *regmap_cfg; + const struct rk8xx_i2c_platform_data *data; struct regmap *regmap; - int variant; - variant = rk8xx_i2c_get_variant(client); - if (variant < 0) - return variant; - - switch (variant) { - case RK805_ID: - regmap_cfg = &rk805_regmap_config; - break; - case RK808_ID: - regmap_cfg = &rk808_regmap_config; - break; - case RK818_ID: - regmap_cfg = &rk818_regmap_config; - break; - case RK809_ID: - case RK817_ID: - regmap_cfg = &rk817_regmap_config; - break; - default: - return dev_err_probe(&client->dev, -EINVAL, "Unsupported RK8XX ID %x\n", variant); - } + data = device_get_match_data(&client->dev); + if (!data) + return -ENODEV; - regmap = devm_regmap_init_i2c(client, regmap_cfg); + regmap = devm_regmap_init_i2c(client, data->regmap_cfg); if (IS_ERR(regmap)) return dev_err_probe(&client->dev, PTR_ERR(regmap), "regmap initialization failed\n"); - return rk8xx_probe(&client->dev, variant, client->irq, regmap); + return rk8xx_probe(&client->dev, data->variant, client->irq, regmap); } static void rk8xx_i2c_shutdown(struct i2c_client *client) @@ -173,11 +158,11 @@ static void rk8xx_i2c_shutdown(struct i2c_client *client) static SIMPLE_DEV_PM_OPS(rk8xx_i2c_pm_ops, rk8xx_suspend, rk8xx_resume); static const struct of_device_id rk8xx_i2c_of_match[] = { - { .compatible = "rockchip,rk805" }, - { .compatible = "rockchip,rk808" }, - { .compatible = "rockchip,rk809" }, - { .compatible = "rockchip,rk817" }, - { .compatible = "rockchip,rk818" }, + { .compatible = "rockchip,rk805", .data = &rk805_data }, + { .compatible = "rockchip,rk808", .data = &rk808_data }, + { .compatible = "rockchip,rk809", .data = &rk809_data }, + { .compatible = "rockchip,rk817", .data = &rk817_data }, + { .compatible = "rockchip,rk818", .data = &rk818_data }, { }, }; MODULE_DEVICE_TABLE(of, rk8xx_i2c_of_match);