From patchwork Mon Apr 22 19:13:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1088838 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="XNJTS7q+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44nxGc54hZz9sMQ for ; Tue, 23 Apr 2019 05:19:36 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728372AbfDVTT3 (ORCPT ); Mon, 22 Apr 2019 15:19:29 -0400 Received: from mail-lj1-f195.google.com ([209.85.208.195]:45679 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726407AbfDVTSz (ORCPT ); Mon, 22 Apr 2019 15:18:55 -0400 Received: by mail-lj1-f195.google.com with SMTP id y6so11209483ljd.12; Mon, 22 Apr 2019 12:18:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Qb30F3csxPMWkF7SUL4LY++a+c/C+BjbyqzAzgW0ngI=; b=XNJTS7q+zEKtZBHSThIN3wotp+rEasrOU4+2l0gfHYbvdna1+sIOPttu9BN7wzJFc7 XgAo4aT1ZzFjrxwg4ZNer3gsaNcgLWn4xYBtVhG+PzGdaNljPzK/13T2QXLDOJnt7CgE XQy8imHH5/8bt9gifRoY+lhBwS0OVEwwssmMD9MofMkceMyPzRj1iXY2TTQOQXuYtaqx 04ByBvyi44OAsYBLn5tCsLaKQswggmJWY+lXJJ7jQjOUz+JlclWAjfW1ojl3iBD581PX K/bIaQsVNmWF/PZIJZWBzZ37Rhi351scR68aRLpFMrWCkTP3/2d+ZOcSO+C6VfRRZV8+ CN/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Qb30F3csxPMWkF7SUL4LY++a+c/C+BjbyqzAzgW0ngI=; b=QFdZ5EqcClmNCXUbyhn8MatVo00mrQu1N8xfynhfgTRxuhiPp/SHzhSoc781b4EWvX S68ybJe9d4i1P/V14Tz1g7qY5768+FhGkAYYsHssVJhx1HoNsaF3hjXlLTFzPL2I/VGI rbt7AA6oNQ1K7KZGZepsw1MLJf1Pc5ITLdO07pcooa0s9W3SimrInapbvg14GBQQ+6uM /A1b991kZivW14Dy8DCcUfQaMuRgwr7YS1mN1y+f5VX/NfEI3pNDx4dMokAWBMtBH114 O7O6oQ8nb8jj/fvM5f7dYnebKGuJrQRSnJZx0VkXzRP1KIndG098TQioatBavYHif0Ue pX2g== X-Gm-Message-State: APjAAAU+Sdkwktx49BmjsrKkmO3jBZ2Y0djQyfEX3IEu8c1T3Tvol27b E1ycZ+93rVMf/sQJz1C+FkA= X-Google-Smtp-Source: APXvYqyBN5s3KfbZN82OIIjtS6zhzM8jeviNGMjyWEAFmFjtKVDf+Mf7h7x8yIiqln53dBwU2zd1AQ== X-Received: by 2002:a2e:9155:: with SMTP id q21mr762904ljg.178.1555960732290; Mon, 22 Apr 2019 12:18:52 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l13sm2848762lji.39.2019.04.22.12.18.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 22 Apr 2019 12:18:51 -0700 (PDT) From: Dmitry Osipenko To: Lee Jones , Rob Herring , Mark Rutland , Liam Girdwood , Mark Brown , Laxman Dewangan , Mallikarjun Kasoju , Thierry Reding , Jonathan Hunter Cc: devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/7] mfd: max77620: Support Maxim 77663 Date: Mon, 22 Apr 2019 22:13:45 +0300 Message-Id: <20190422191350.27527-3-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190422191350.27527-1-digetx@gmail.com> References: <20190422191350.27527-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org Add support for Maxim 77663 using the Max77620 driver. The hardware is very similar to Max77663/20024, although there are couple minor differences. Signed-off-by: Dmitry Osipenko --- drivers/mfd/max77620.c | 69 +++++++++++++++++++++++++++++++++++- include/linux/mfd/max77620.h | 1 + 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/drivers/mfd/max77620.c b/drivers/mfd/max77620.c index d8ddd1a6f304..9b0009c29610 100644 --- a/drivers/mfd/max77620.c +++ b/drivers/mfd/max77620.c @@ -111,6 +111,26 @@ static const struct mfd_cell max20024_children[] = { }, }; +static const struct mfd_cell max77663_children[] = { + { .name = "max77620-pinctrl", }, + { .name = "max77620-clock", }, + { .name = "max77663-pmic", }, + { .name = "max77620-watchdog", }, + { + .name = "max77620-gpio", + .resources = gpio_resources, + .num_resources = ARRAY_SIZE(gpio_resources), + }, { + .name = "max77620-rtc", + .resources = rtc_resources, + .num_resources = ARRAY_SIZE(rtc_resources), + }, { + .name = "max77663-power", + .resources = power_resources, + .num_resources = ARRAY_SIZE(power_resources), + }, +}; + static const struct regmap_range max77620_readable_ranges[] = { regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_DVSSD4), }; @@ -171,6 +191,35 @@ static const struct regmap_config max20024_regmap_config = { .volatile_table = &max77620_volatile_table, }; +static const struct regmap_range max77663_readable_ranges[] = { + regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_CID5), +}; + +static const struct regmap_access_table max77663_readable_table = { + .yes_ranges = max77663_readable_ranges, + .n_yes_ranges = ARRAY_SIZE(max77663_readable_ranges), +}; + +static const struct regmap_range max77663_writable_ranges[] = { + regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_CID5), +}; + +static const struct regmap_access_table max77663_writable_table = { + .yes_ranges = max77663_writable_ranges, + .n_yes_ranges = ARRAY_SIZE(max77663_writable_ranges), +}; + +static const struct regmap_config max77663_regmap_config = { + .name = "power-slave", + .reg_bits = 8, + .val_bits = 8, + .max_register = MAX77620_REG_CID5 + 1, + .cache_type = REGCACHE_RBTREE, + .rd_table = &max77663_readable_table, + .wr_table = &max77663_writable_table, + .volatile_table = &max77620_volatile_table, +}; + /* * MAX77620 and MAX20024 has the following steps of the interrupt handling * for TOP interrupts: @@ -237,6 +286,9 @@ static int max77620_get_fps_period_reg_value(struct max77620_chip *chip, case MAX20024: fps_min_period = MAX20024_FPS_PERIOD_MIN_US; break; + case MAX77663: + fps_min_period = MAX20024_FPS_PERIOD_MIN_US; + break; case MAX77620: fps_min_period = MAX77620_FPS_PERIOD_MIN_US; break; @@ -274,6 +326,9 @@ static int max77620_config_fps(struct max77620_chip *chip, case MAX77620: fps_max_period = MAX77620_FPS_PERIOD_MAX_US; break; + case MAX77663: + fps_max_period = MAX20024_FPS_PERIOD_MAX_US; + break; default: return -EINVAL; } @@ -375,6 +430,9 @@ static int max77620_initialise_fps(struct max77620_chip *chip) } skip_fps: + if (chip->chip_id == MAX77663) + return 0; + /* Enable wake on EN0 pin */ ret = regmap_update_bits(chip->rmap, MAX77620_REG_ONOFFCNFG2, MAX77620_ONOFFCNFG2_WK_EN0, @@ -453,6 +511,11 @@ static int max77620_probe(struct i2c_client *client, n_mfd_cells = ARRAY_SIZE(max20024_children); rmap_config = &max20024_regmap_config; break; + case MAX77663: + mfd_cells = max77663_children; + n_mfd_cells = ARRAY_SIZE(max77663_children); + rmap_config = &max77663_regmap_config; + break; default: dev_err(chip->dev, "ChipID is invalid %d\n", chip->chip_id); return -EINVAL; @@ -546,6 +609,9 @@ static int max77620_i2c_suspend(struct device *dev) return ret; } + if (chip->chip_id == MAX77663) + goto out; + /* Disable WK_EN0 */ ret = regmap_update_bits(chip->rmap, MAX77620_REG_ONOFFCNFG2, MAX77620_ONOFFCNFG2_WK_EN0, 0); @@ -581,7 +647,7 @@ static int max77620_i2c_resume(struct device *dev) * For MAX20024: No need to configure WKEN0 on resume as * it is configured on Init. */ - if (chip->chip_id == MAX20024) + if (chip->chip_id == MAX20024 || chip->chip_id == MAX77663) goto out; /* Enable WK_EN0 */ @@ -603,6 +669,7 @@ static int max77620_i2c_resume(struct device *dev) static const struct i2c_device_id max77620_id[] = { {"max77620", MAX77620}, {"max20024", MAX20024}, + {"max77663", MAX77663}, {}, }; diff --git a/include/linux/mfd/max77620.h b/include/linux/mfd/max77620.h index b4fd5a7c2aaa..82407fe85ca2 100644 --- a/include/linux/mfd/max77620.h +++ b/include/linux/mfd/max77620.h @@ -324,6 +324,7 @@ enum max77620_fps_src { enum max77620_chip_id { MAX77620, MAX20024, + MAX77663, }; struct max77620_chip {