From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752720AbbCZKgX (ORCPT ); Thu, 26 Mar 2015 06:36:23 -0400 Received: from mailout2.w1.samsung.com ([210.118.77.12]:32729 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752197AbbCZKgQ (ORCPT ); Thu, 26 Mar 2015 06:36:16 -0400 X-AuditID: cbfec7f4-b7f126d000001e9a-5c-5513e0741095 From: Krzysztof Kozlowski To: Chanwoo Choi , Liam Girdwood , Mark Brown , Samuel Ortiz , Lee Jones , linux-kernel@vger.kernel.org Cc: Krzysztof Kozlowski Subject: [RESEND PATCH 1/2] regulator: max77693: Let core parse DT and drop board files support Date: Thu, 26 Mar 2015 11:35:58 +0100 Message-id: <1427366159-14696-2-git-send-email-k.kozlowski@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1427366159-14696-1-git-send-email-k.kozlowski@samsung.com> References: <1427366159-14696-1-git-send-email-k.kozlowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrBJMWRmVeSWpSXmKPExsVy+t/xy7olD4RDDf5uMLCY+vAJm8X1L89Z LV6/MLS4//Uoo8W3Kx1MFpd3zWGzON3N6sDusXPWXXaPTas62TzuXNvD5jHvZKBH35ZVjB6f N8kFsEVx2aSk5mSWpRbp2yVwZSxasZu94IpCxdeOJpYGxq1SXYycHBICJhLvDm9mgrDFJC7c W8/WxcjFISSwlFFiats0ZpCEkEAfk8TJORUgNpuAscTm5UvAikQEbjBKzO24xAKSYBYwlPj5 7g87iC0skCgxrXUDWJxFQFViyrTJYIN4Bdwlnjz9B7VNTuLkscmsIDangIfE9NudjBDL3CWO /T7HPoGRdwEjwypG0dTS5ILipPRcQ73ixNzi0rx0veT83E2MkND6soNx8TGrQ4wCHIxKPLwG B4VDhVgTy4orcw8xSnAwK4nwMp4DCvGmJFZWpRblxxeV5qQWH2Jk4uCUamCUDs3u3Zdx8PXC 518U4k/95HtcOdv51wf7oAUftrzIWqhl6uCpnXzlxMGKQxK5XW78hs0bvx57pL/agDH2H9Os z8K8SlvX9rL3f8005QhOFpBnyPd4wLRj5cedjw5tU8tnWaovdnPXld4w5fU6Vdc7aval6ufv /M1gpd0g8eLa8ZP8G/oOKS1UYinOSDTUYi4qTgQAbwXbcwsCAAA= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Simplify the driver by removing board file support and letting regulator core to parse DT. The max77693 regulator driver is used only on Exynos based boards which are DT-only. Board files for Exynos are not supported. Signed-off-by: Krzysztof Kozlowski --- drivers/regulator/max77693.c | 93 +++++--------------------------------------- 1 file changed, 9 insertions(+), 84 deletions(-) diff --git a/drivers/regulator/max77693.c b/drivers/regulator/max77693.c index 07b313e51b21..9665a488e2f1 100644 --- a/drivers/regulator/max77693.c +++ b/drivers/regulator/max77693.c @@ -128,6 +128,8 @@ static struct regulator_ops max77693_charger_ops = { #define regulator_desc_esafeout(_num) { \ .name = "ESAFEOUT"#_num, \ .id = MAX77693_ESAFEOUT##_num, \ + .of_match = of_match_ptr("ESAFEOUT"#_num), \ + .regulators_node = of_match_ptr("regulators"), \ .n_voltages = 4, \ .ops = &max77693_safeout_ops, \ .type = REGULATOR_VOLTAGE, \ @@ -145,6 +147,8 @@ static const struct regulator_desc regulators[] = { { .name = "CHARGER", .id = MAX77693_CHARGER, + .of_match = of_match_ptr("CHARGER"), + .regulators_node = of_match_ptr("regulators"), .ops = &max77693_charger_ops, .type = REGULATOR_CURRENT, .owner = THIS_MODULE, @@ -154,102 +158,23 @@ static const struct regulator_desc regulators[] = { }, }; -#ifdef CONFIG_OF -static int max77693_pmic_dt_parse_rdata(struct device *dev, - struct max77693_regulator_data **rdata) -{ - struct device_node *np; - struct of_regulator_match *rmatch; - struct max77693_regulator_data *tmp; - int i, matched = 0; - - np = of_get_child_by_name(dev->parent->of_node, "regulators"); - if (!np) - return -EINVAL; - - rmatch = devm_kzalloc(dev, - sizeof(*rmatch) * ARRAY_SIZE(regulators), GFP_KERNEL); - if (!rmatch) { - of_node_put(np); - return -ENOMEM; - } - - for (i = 0; i < ARRAY_SIZE(regulators); i++) - rmatch[i].name = regulators[i].name; - - matched = of_regulator_match(dev, np, rmatch, ARRAY_SIZE(regulators)); - of_node_put(np); - if (matched <= 0) - return matched; - *rdata = devm_kzalloc(dev, sizeof(**rdata) * matched, GFP_KERNEL); - if (!(*rdata)) - return -ENOMEM; - - tmp = *rdata; - - for (i = 0; i < matched; i++) { - tmp->initdata = rmatch[i].init_data; - tmp->of_node = rmatch[i].of_node; - tmp->id = regulators[i].id; - tmp++; - } - - return matched; -} -#else -static int max77693_pmic_dt_parse_rdata(struct device *dev, - struct max77693_regulator_data **rdata) -{ - return 0; -} -#endif /* CONFIG_OF */ - -static int max77693_pmic_init_rdata(struct device *dev, - struct max77693_regulator_data **rdata) -{ - struct max77693_platform_data *pdata; - int num_regulators = 0; - - pdata = dev_get_platdata(dev->parent); - if (pdata) { - *rdata = pdata->regulators; - num_regulators = pdata->num_regulators; - } - - if (!(*rdata) && dev->parent->of_node) - num_regulators = max77693_pmic_dt_parse_rdata(dev, rdata); - - return num_regulators; -} - static int max77693_pmic_probe(struct platform_device *pdev) { struct max77693_dev *iodev = dev_get_drvdata(pdev->dev.parent); - struct max77693_regulator_data *rdata = NULL; - int num_rdata, i; + int i; struct regulator_config config = { }; - num_rdata = max77693_pmic_init_rdata(&pdev->dev, &rdata); - if (!rdata || num_rdata <= 0) { - dev_err(&pdev->dev, "No init data supplied.\n"); - return -ENODEV; - } - - config.dev = &pdev->dev; + config.dev = iodev->dev; config.regmap = iodev->regmap; - for (i = 0; i < num_rdata; i++) { - int id = rdata[i].id; + for (i = 0; i < ARRAY_SIZE(regulators); i++) { struct regulator_dev *rdev; - config.init_data = rdata[i].initdata; - config.of_node = rdata[i].of_node; - rdev = devm_regulator_register(&pdev->dev, - ®ulators[id], &config); + ®ulators[i], &config); if (IS_ERR(rdev)) { dev_err(&pdev->dev, - "Failed to initialize regulator-%d\n", id); + "Failed to initialize regulator-%d\n", i); return PTR_ERR(rdev); } } -- 1.9.1