From patchwork Fri Jan 18 13:42:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10770197 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D1EC71390 for ; Fri, 18 Jan 2019 13:44:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C061629678 for ; Fri, 18 Jan 2019 13:44:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B3EE82A1FB; Fri, 18 Jan 2019 13:44:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5C9EF29678 for ; Fri, 18 Jan 2019 13:44:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727491AbfARNoq (ORCPT ); Fri, 18 Jan 2019 08:44:46 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:38857 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727336AbfARNnH (ORCPT ); Fri, 18 Jan 2019 08:43:07 -0500 Received: by mail-wr1-f67.google.com with SMTP id v13so15131847wrw.5 for ; Fri, 18 Jan 2019 05:43:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8G/x4xDqyiyiiW8CGc7IfA1RztIv2wZUUR9EI3hBaeM=; b=ATrlBtI9bodRec6OVYjWkV1535+WWPEMdtdjM0/neMsCDGG3DoeodNzxNnWOYr4nlZ v6ChZG4t1NmXrEw2tFgaD3sjTtPLnoQ0C2eNVjOVYD0fmLuBtUyVClE0p+x4mnCq/ypT QgkDmfkb7dUPWiiL69PbdUCODxitpzybhVH1U86bJBXkWYGSNLkcVoyf6B3YPphZsXQD NyDXvTqEOxqpbS9CLwvV9A05IHjowowNJquDDpedKz8/G3SosWeRbEre4Iu7oHn9ErI3 e2+kBLpjB2d0+7/MTESx2wsOaN6eVBaQlwBPOfehtMyJV8zMSgt4gXbJrG9XcQ3G9shv vu3g== 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=8G/x4xDqyiyiiW8CGc7IfA1RztIv2wZUUR9EI3hBaeM=; b=EkXtBOmpKfRQqQ4OTV/fGmgPCtneFeByWBHYKZZ+tD1f7MBxlzaH4bYYBUfe/VjykK AcCabNaAQv15jph+XU95PxSoFXHMEUtxCyOpBa45fRUsYJ5Dkpl2mLd/TzxrOZc+0+jJ TWYUZ+u/6fioNUFT8Hg8ptgwlpEhQaa4lsab/5TLJ2cAsOqJQYBuoqVrUuqyTWxXO4F1 0fnDXeN1uzFISXGCBDQHyfHgOWhGb+79DgnA8nSw7xX44bhZ21ZAZA4liISmMeVEJHFR DQqbJOzw21LdFpGcK89Qa3rAldh8TO/PGEt2G5tNT8JROkIj1yrt7E2exQu3dvuvMFtw /67A== X-Gm-Message-State: AJcUukeA3qLA5YUAayE+pOmB2UwpFztBa8b3PIddifURT+QnE0WULLC4 QfqboGjFP3+5WbMhiyWejc1Vmw== X-Google-Smtp-Source: ALg8bN5ZjFyQBMqR6yEThU3ueox6Vzlo5b+PwkbmkwoGBHh9QMmifvzfQ5SzMh2cTCifDd8GYQimgA== X-Received: by 2002:a5d:47d1:: with SMTP id l17mr16313740wrs.319.1547818984972; Fri, 18 Jan 2019 05:43:04 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id a132sm51033934wmh.5.2019.01.18.05.43.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Jan 2019 05:43:04 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , Mark Brown , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 01/13] dt-bindings: mfd: add DT bindings for max77650 Date: Fri, 18 Jan 2019 14:42:32 +0100 Message-Id: <20190118134244.22253-2-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190118134244.22253-1-brgl@bgdev.pl> References: <20190118134244.22253-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Bartosz Golaszewski Add a DT binding document for max77650 ultra-low power PMIC. This describes the core mfd device. Signed-off-by: Bartosz Golaszewski --- .../devicetree/bindings/mfd/max77650.txt | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Documentation/devicetree/bindings/mfd/max77650.txt diff --git a/Documentation/devicetree/bindings/mfd/max77650.txt b/Documentation/devicetree/bindings/mfd/max77650.txt new file mode 100644 index 000000000000..84631d3b1e14 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/max77650.txt @@ -0,0 +1,28 @@ +MAX77650 ultra low-power PMIC from Maxim Integrated. + +Required properties: +------------------- +- compatible: Must be "maxim,max77650" +- reg: I2C device address. +- interrupts: The interrupt on the parent the controller is + connected to. +- interrupt-parent: phandle of the parent interrupt controller. +- interrupt-controller: Marks the device node as an interrupt controller. +- #interrupt-cells: Must be <2>. + +For device-tree bindings of sub-modules (regulator, power supply, GPIO, LEDs +and onkey) refer to the binding documents under the respective sub-system +directories. + +Example: +-------- + + pmic: max77650@48 { + compatible = "maxim,max77650"; + reg = <0x48>; + + interrupt-controller; + interrupt-parent = <&gpio2>; + #interrupt-cells = <2>; + interrupts = <3 IRQ_TYPE_LEVEL_LOW>; + }; From patchwork Fri Jan 18 13:42:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10770195 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BC4646C5 for ; Fri, 18 Jan 2019 13:44:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AC1B22A18B for ; Fri, 18 Jan 2019 13:44:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A05B62A1F5; Fri, 18 Jan 2019 13:44:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0B2132A18B for ; Fri, 18 Jan 2019 13:44:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727017AbfARNop (ORCPT ); Fri, 18 Jan 2019 08:44:45 -0500 Received: from mail-wm1-f65.google.com ([209.85.128.65]:55171 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727633AbfARNnI (ORCPT ); Fri, 18 Jan 2019 08:43:08 -0500 Received: by mail-wm1-f65.google.com with SMTP id a62so4543033wmh.4 for ; Fri, 18 Jan 2019 05:43:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Br82eUdliRcYW5k5XdaEofZ+bBn9gd9M92yB3kYlbF0=; b=CJO7XVo4nJzuLOlQCd76suu7u1tTTgUJ1nukNUyCNXyfJ43s7gxFUD9kSS+d+Kwx3q 2zyAF97Qq4Et3vmYiniLNWOEJ83f6ZAjuj9F6B4v+S1O3TNNLKq9rNrWABPO3RXd4fsi lDFEAmFMBmoN2VfBdlaG8NiIR/c9RFF0lMEx6cdVUEjykDZke7CCmcTxXEVrggrOpf1T szM8hSGOpwftvp522xYtxCkuYmv7VS7VZMNDsQaNcudxINy9JOzGAPOBCuV7n4c4BJKI r0qpCaipoUsdCd11YHtx3uDhH0hUrGtNWMpVVOcgAYb3/5SDuZZLSqvWeBR7y6ogrlnP xpzg== 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=Br82eUdliRcYW5k5XdaEofZ+bBn9gd9M92yB3kYlbF0=; b=uQQa8jfPdOHyo8bI6arIqs3mvXO9/dyodC+kNdm6dpYGxe5fbA/qEWgs44qRB8vbPK FEbFtn3OG1bhk1Af0UjlRGxgMn7wgAfVJfwlgpWAAvL/LkMiy1SPuIXEzDRyC5XftDto wHc9GLYCWh/hMoRzSsDa5HR9+w28Yj8ffdJzUPPCw+eNFQ1XhPkAQew8dgfJG9Ak24bO ZDFqw/5dtJ7GDkRBnI8jXSJhwBPMg8eNzjXPDi07RaIuBUIkF/3x7dbRTSV/V8FxotYD SNjJJj4EKQF1ZZXjzVx1i1uOsNNOknKsDNzNppR4wJ64Q/4jIol7Dw4F7TH+Y9sW6WU7 rWLg== X-Gm-Message-State: AJcUukeshZC43PxKf+Myr1tZ3iUED9wvaF89Ln1IRROGk1W9Yk/AUpse YpMLpeJtkUtNDKVwjIxUNJdXRA== X-Google-Smtp-Source: ALg8bN79rgtueAh2YoeFOEiapjNWpk3EUz91OIu1yf/VDdDVtSpYFM2Ha0rmYbxCr0sT7T58n1p1mg== X-Received: by 2002:a1c:ca15:: with SMTP id a21mr14772914wmg.132.1547818986398; Fri, 18 Jan 2019 05:43:06 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id a132sm51033934wmh.5.2019.01.18.05.43.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Jan 2019 05:43:05 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , Mark Brown , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 02/13] dt-bindings: regulator: add DT bindings for max77650 Date: Fri, 18 Jan 2019 14:42:33 +0100 Message-Id: <20190118134244.22253-3-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190118134244.22253-1-brgl@bgdev.pl> References: <20190118134244.22253-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Bartosz Golaszewski Add the DT binding document for max77650 regulators. Signed-off-by: Bartosz Golaszewski --- .../bindings/regulator/max77650-regulator.txt | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Documentation/devicetree/bindings/regulator/max77650-regulator.txt diff --git a/Documentation/devicetree/bindings/regulator/max77650-regulator.txt b/Documentation/devicetree/bindings/regulator/max77650-regulator.txt new file mode 100644 index 000000000000..f1cbe813c30f --- /dev/null +++ b/Documentation/devicetree/bindings/regulator/max77650-regulator.txt @@ -0,0 +1,41 @@ +Regulator driver for MAX77650 PMIC from Maxim Integrated. + +This module is part of the MAX77650 MFD device. For more details +see Documentation/devicetree/bindings/mfd/max77650.txt. + +The regulator controller is represented as a sub-node of the PMIC node +on the device tree. + +The device has a single LDO regulator and a SIMO buck-boost regulator with +three independent power rails. + +Required properties: +-------------------- +- compatible: Must be "maxim,max77650-regulator" + +Each rail must be instantiated under the regulators subnode of the top PMIC +node. Up to four regulators can be defined. For standard regulator properties +refer to Documentation/devicetree/bindings/regulator/regulator.txt. + +Available regulator compatible strings are: "ldo", "sbb0", "sbb1", "sbb2". + +Example: +-------- + + regulators { + compatible = "maxim,max77650-regulator"; + + max77650_ldo: regulator@0 { + regulator-compatible = "ldo"; + regulator-name = "max77650-ldo"; + regulator-min-microvolt = <1350000>; + regulator-max-microvolt = <2937500>; + }; + + max77650_sbb0: regulator@1 { + regulator-compatible = "sbb0"; + regulator-name = "max77650-sbb0"; + regulator-min-microvolt = <800000>; + regulator-max-microvolt = <1587500>; + }; + }; From patchwork Fri Jan 18 13:42:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10770193 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 018826C5 for ; Fri, 18 Jan 2019 13:44:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E4C3F29678 for ; Fri, 18 Jan 2019 13:44:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D89AA2A1F5; Fri, 18 Jan 2019 13:44:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B844F29678 for ; Fri, 18 Jan 2019 13:44:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727680AbfARNoj (ORCPT ); Fri, 18 Jan 2019 08:44:39 -0500 Received: from mail-wm1-f65.google.com ([209.85.128.65]:36047 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727657AbfARNnJ (ORCPT ); Fri, 18 Jan 2019 08:43:09 -0500 Received: by mail-wm1-f65.google.com with SMTP id p6so4545251wmc.1 for ; Fri, 18 Jan 2019 05:43:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dTSndq9JGcH1Dn9M4h6E0lGXK3kJ2m8mtr89zhshVnY=; b=hU3cVi22UjkEgCs923BIv0KFHTZ19zu4QjP9MhjIac+dk4K4d4tJfyod88ng5xVB/U x+Yvm/ynGMcCsVEcdTXKG1wbXVXR5u3LiSRXFsPjvg5Y2KbOygr8DC4JkB9RLs4JnuCh PEz3eeqLvPNp+7jFKCfzcUU97q8BTICmX5yK/ZsvJS3RjAoNo19fE9KJ6V4yKgd2adMZ XsxAhqdqjsoECFxcQslHPthZjVlbUARIgFYle9K5qg8J7yncHDotdCRpBkVK4almGHb9 DVYtS1cXz4pO7tGRXYrF4C1p5EuEfQg7kwi8vpdqFSUHbH8Tz4cIgLYeyp4UbSMCjMcy NKvg== 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=dTSndq9JGcH1Dn9M4h6E0lGXK3kJ2m8mtr89zhshVnY=; b=cDts/QJEkJW48avElr8lAR4UdYaZwVZ29VxQ/n5Q61fKf3Fed5yT4gcgGsIu16LSa7 4vnpX4VFZRcYwUAl1mjnHcOrZpj0c/PCo7qL7gpa0IgGLY1f0oSxyspI5tb/+aTrSAka C+/j5fszKPWrs2ACSOY4BvmBd5imIaY7MfIGtj1V8Noi8XGuT9ehr3yGtGGEoidJIcEw zaVwhHkFrgFd1snu36+emaSmJrKkShbVqEkO/MVXKVbRVudHf13Tefq2YLUtnbD+R//d sws7O/Of23YPHiq/YYhy7atgZcyDpUG1MvB5ahJCxLW2C6kpNgLpKOiHjY9Ni35TVaAt IF1A== X-Gm-Message-State: AJcUukc8BS30xJ/rPb/QOjYiBkGJo8BMWF2LifF+KR6lNiSmnN7qPIqA WhZ8XEsW92vHR7FFQVXn+mw16w== X-Google-Smtp-Source: ALg8bN4BN+uE2HPWfvIuIcY8nRDloRrgnv3ezNiGx9VnouVtpaD0B2z+3ASSBl0vz3BupBm2aMLTPg== X-Received: by 2002:a1c:a895:: with SMTP id r143mr14968529wme.95.1547818987673; Fri, 18 Jan 2019 05:43:07 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id a132sm51033934wmh.5.2019.01.18.05.43.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Jan 2019 05:43:07 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , Mark Brown , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 03/13] dt-bindings: power: supply: add DT bindings for max77650 Date: Fri, 18 Jan 2019 14:42:34 +0100 Message-Id: <20190118134244.22253-4-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190118134244.22253-1-brgl@bgdev.pl> References: <20190118134244.22253-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Bartosz Golaszewski Add the DT binding document for the battery charger module of max77650. Signed-off-by: Bartosz Golaszewski --- .../power/supply/max77650-charger.txt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Documentation/devicetree/bindings/power/supply/max77650-charger.txt diff --git a/Documentation/devicetree/bindings/power/supply/max77650-charger.txt b/Documentation/devicetree/bindings/power/supply/max77650-charger.txt new file mode 100644 index 000000000000..f3e00d41e299 --- /dev/null +++ b/Documentation/devicetree/bindings/power/supply/max77650-charger.txt @@ -0,0 +1,27 @@ +Battery charger driver for MAX77650 PMIC from Maxim Integrated. + +This module is part of the MAX77650 MFD device. For more details +see Documentation/devicetree/bindings/mfd/max77650.txt. + +The charger is represented as a sub-node of the PMIC node on the device tree. + +Required properties: +-------------------- +- compatible: Must be "maxim,max77650-charger" + +Optional properties: +-------------------- +- maxim,vchgin-min: Minimum CHGIN regulation voltage (in microvolts). Must be + one of: 4000000, 4100000, 4200000, 4300000, 4400000, + 4500000, 4600000, 4700000. +- maxim,ichgin-lim: CHGIN input current limit (in microamps). Must be one of: + 95000, 190000, 285000, 380000, 475000. + +Example: +-------- + + charger { + compatible = "maxim,max77650-charger"; + maxim,vchgin-min = <4200000>; + maxim,ichgin-lim = <285000>; + }; From patchwork Fri Jan 18 13:42:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10770187 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4F8A26C5 for ; Fri, 18 Jan 2019 13:44:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3B51E29678 for ; Fri, 18 Jan 2019 13:44:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2F9A52A19A; Fri, 18 Jan 2019 13:44:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CB05429678 for ; Fri, 18 Jan 2019 13:44:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727393AbfARNog (ORCPT ); Fri, 18 Jan 2019 08:44:36 -0500 Received: from mail-wr1-f68.google.com ([209.85.221.68]:43578 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727688AbfARNnK (ORCPT ); Fri, 18 Jan 2019 08:43:10 -0500 Received: by mail-wr1-f68.google.com with SMTP id r10so15078302wrs.10 for ; Fri, 18 Jan 2019 05:43:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EJgaRxvdLEz10xwcfFGy19fU0asErTcgCnz6M9qAYUg=; b=vWZNWsQpCnMw6W+kMzqDWmebSRUuVpjzcZR1XCmg7Uy03JpsRQBPRcq12C9b4PTWvK 8e+wGI6CZBiirjM+08OFImmdHkGwviukPWYdOzwRzt5bgIZWAGaCdfiQjzoD/ompzGMS ypCTAYqdWhyhBRTi9xs3C7pxiSnHUu3I2Ad97ohi9822HtC24nb+UAt0TTlISVAPst0o 9kHksS332bdFjvcwWP1Zb3Y1q9MqFVsESCPGnc6I6DIvtIyIthtNiYeN/4Re85TO3KUH KID4lMr6cBbctHWp6VUFcXSfI7V6p3sv9eexFfGR02gJFs8/IApgBLISP2dPB04vb9l0 stfQ== 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=EJgaRxvdLEz10xwcfFGy19fU0asErTcgCnz6M9qAYUg=; b=nfjtf3hCJ/zTZ+Bd/oqCeXChA2snk69xWwG+tw7LpqKi6mVzFaBF9BLTASMjM2z9xd dUunBb/2U4rNpu7axgSyrssMIxgdUqwePdaCYKX8zHHF5FYNZPWhUXX6zhdBDKG/2OyK Go2yWeUi2KBfZC0vx1/jU6sQ7BJucTtydFQfAjlW9jr44UrqwJxqyRz/HT9048eYlhNi JADBC/mGruDrKIOsoF+duX9LcNY0kbwaJ04QXpRL83YpvyO3yCc85NH/d5Vww6knPVMt KnlUxVbqWd5+bAjl484IzFcv9TLps/l35UqPFDUwnWpQag88HiYyjiZyuzpBSes/VkKh LsZQ== X-Gm-Message-State: AJcUukcoEW/eY42ccmXeMwaiBxBBJYMVUzVb1yw5Cr/jnFRQiyTowIgU kjuFp9Xo3ZbPMuDrhCj+zB+S1Q== X-Google-Smtp-Source: ALg8bN60XLBfK8i/rGRPp1ZcEqc6V3ZegokgqCoDdW8g8D9DqJLDqcZRQ9KrpWiTQCk5mZXofLgS+g== X-Received: by 2002:adf:d089:: with SMTP id y9mr16945662wrh.22.1547818989032; Fri, 18 Jan 2019 05:43:09 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id a132sm51033934wmh.5.2019.01.18.05.43.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Jan 2019 05:43:08 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , Mark Brown , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 04/13] dt-bindings: gpio: add DT bindings for max77650 Date: Fri, 18 Jan 2019 14:42:35 +0100 Message-Id: <20190118134244.22253-5-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190118134244.22253-1-brgl@bgdev.pl> References: <20190118134244.22253-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Bartosz Golaszewski Add the DT binding document for the GPIO module of max77650. Signed-off-by: Bartosz Golaszewski Reviewed-by: Linus Walleij --- .../bindings/gpio/gpio-max77650.txt | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Documentation/devicetree/bindings/gpio/gpio-max77650.txt diff --git a/Documentation/devicetree/bindings/gpio/gpio-max77650.txt b/Documentation/devicetree/bindings/gpio/gpio-max77650.txt new file mode 100644 index 000000000000..b5dbbe934deb --- /dev/null +++ b/Documentation/devicetree/bindings/gpio/gpio-max77650.txt @@ -0,0 +1,34 @@ +GPIO driver for MAX77650 PMIC from Maxim Integrated. + +This module is part of the MAX77650 MFD device. For more details +see Documentation/devicetree/bindings/mfd/max77650.txt. + +The GPIO controller is represented as a sub-node of the PMIC node on +the device tree. + +This device has a single GPIO pin. + +Required properties: +-------------------- +- compatible: Must be "maxim,max77650-gpio" +- gpio-controller : Marks the device node as a gpio controller. +- #gpio-cells : Must be <2>. The first cell is the pin number and + the second cell is used to specify the gpio active + state. + +Optional properties: +-------------------- +gpio-line-names: Single string containing the name of the GPIO line. + +For more details, please refer to the generic GPIO DT binding document +. + +Example: +-------- + + gpio { + compatible = "maxim,max77650-gpio"; + gpio-line-names = "max77650-charger"; + gpio-controller; + #gpio-cells = <2>; + }; From patchwork Fri Jan 18 13:42:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10770181 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1FDB21390 for ; Fri, 18 Jan 2019 13:44:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0D6C42A18B for ; Fri, 18 Jan 2019 13:44:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 018A72A1A1; Fri, 18 Jan 2019 13:44:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 99C2E2A18B for ; Fri, 18 Jan 2019 13:44:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727458AbfARNoV (ORCPT ); Fri, 18 Jan 2019 08:44:21 -0500 Received: from mail-wm1-f65.google.com ([209.85.128.65]:54194 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727701AbfARNnM (ORCPT ); Fri, 18 Jan 2019 08:43:12 -0500 Received: by mail-wm1-f65.google.com with SMTP id d15so4542682wmb.3 for ; Fri, 18 Jan 2019 05:43:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=f/KRarYfj/1Ot/ceWKaBAxhNsDNgQGntcu1QYSAIn/A=; b=HUWWzki7QY8XTTdiXgnlWwU+7SovCBSG11aK9A2Mo+vbMn+NJRQUZuNoYlfkCbU7If wtORLLa6/ZzHOMaJdq3JxcycqtcWlSGpqGd6hnqZGbmvbomb1QPWIFvtRfH1zPsLXxj/ EQ7Fzl4XXYijOB55zP6qjp5bXKnSsL33a3V4/0/TatIV2SOJdm1NkP5+QpwpeAE4ghqK 4n5QgS7m41MbHZ8uIcwsGFN8GA63RzjpUNsH8c4c6HJzn2z9Q1jEdZ9ST72fb64VUXVB pn9nkt3c4X/q9xuc/PCJ8AF3bkwLY7coyqkEvkxDtk8GbyZvWLC54VUB962zYYPPM/uF BqGw== 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=f/KRarYfj/1Ot/ceWKaBAxhNsDNgQGntcu1QYSAIn/A=; b=g1syXnpwFlqc1Zq9rptaXI7bNAcLfLjlT+wRmDZteaEDgDJ6f2DNnqHQsEcSCuk+9Y /S8B1Xzv8kXUumAOaIWQo7N76qFQHbIzN94mrpam4ENOCPAEBh1f409CYYxUoyTo2W5N 0J841mbN7VMdQTG2yWgDyC/2tP+R9SEgwkF/Au6OJF7tEzYCeoUUC/i35/txzUIfPKMo VRde9iXIxyFAO+5YtCGg7q0Md8an74SL5SWzlvkqCYo8woyXL1KkixApc4Z0EAhN2Ped LjDhcSQmtvBgNZry5DEXIPePG2AzJXHKTC8lmbWBnoKyl7O/zuso6AhmO6r1BykuQbhu hvOA== X-Gm-Message-State: AJcUukcQxUm5BvBAY175cDwYXdxdRSCCvpuh68Td859S/rK7q5u+JpPz lS9wu7RW1M7y8DjWW6FlWbgn3g== X-Google-Smtp-Source: ALg8bN7cAHZJMZpcqo85p29mshJGwK9LI2Wy1crq7nT1awe7X7IsxEPXKOya9ZJUlddQFkkOt5hREg== X-Received: by 2002:a7b:c04e:: with SMTP id u14mr16018369wmc.113.1547818990421; Fri, 18 Jan 2019 05:43:10 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id a132sm51033934wmh.5.2019.01.18.05.43.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Jan 2019 05:43:09 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , Mark Brown , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 05/13] dt-bindings: leds: add DT bindings for max77650 Date: Fri, 18 Jan 2019 14:42:36 +0100 Message-Id: <20190118134244.22253-6-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190118134244.22253-1-brgl@bgdev.pl> References: <20190118134244.22253-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Bartosz Golaszewski Add the DT binding document for the LEDs module of max77650. Signed-off-by: Bartosz Golaszewski --- .../bindings/leds/leds-max77650.txt | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Documentation/devicetree/bindings/leds/leds-max77650.txt diff --git a/Documentation/devicetree/bindings/leds/leds-max77650.txt b/Documentation/devicetree/bindings/leds/leds-max77650.txt new file mode 100644 index 000000000000..822b8893bc20 --- /dev/null +++ b/Documentation/devicetree/bindings/leds/leds-max77650.txt @@ -0,0 +1,57 @@ +LED driver for MAX77650 PMIC from Maxim Integrated. + +This module is part of the MAX77650 MFD device. For more details +see Documentation/devicetree/bindings/mfd/max77650.txt. + +The LED controller is represented as a sub-node of the PMIC node on +the device tree. + +This device has three current sinks. + +Required properties: +-------------------- +- compatible: Must be "maxim,max77650-leds" +- #address-cells: Must be <1>. +- #size-cells: Must be <0>. + +Each LED is represented as a sub-node of the LED-controller node. Up to +three sub-nodes can be defined. + +Required properties of the sub-node: +------------------------------------ + +- reg: Must be <0>, <1> or <2>. + +Optional properties of the sub-node: +------------------------------------ + +- label: See Documentation/devicetree/bindings/leds/common.txt +- linux,default-trigger: See Documentation/devicetree/bindings/leds/common.txt + +For more details, please refer to the generic GPIO DT binding document +. + +Example: +-------- + + leds { + compatible = "maxim,max77650-leds"; + #address-cells = <1>; + #size-cells = <0>; + + led0 { + reg = <0>; + label = "max77650:blue:usr0"; + }; + + led1 { + reg = <1>; + label = "max77650:red:usr1"; + linux,default-trigger = "heartbeat"; + }; + + led2 { + reg = <2>; + label = "max77650:green:usr2"; + }; + }; From patchwork Fri Jan 18 13:42:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10770179 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0BFED6C5 for ; Fri, 18 Jan 2019 13:44:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EF8352A18B for ; Fri, 18 Jan 2019 13:44:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E316C2A1A1; Fri, 18 Jan 2019 13:44:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9AC7C2A18B for ; Fri, 18 Jan 2019 13:44:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727357AbfARNoU (ORCPT ); Fri, 18 Jan 2019 08:44:20 -0500 Received: from mail-wm1-f68.google.com ([209.85.128.68]:38338 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727722AbfARNnN (ORCPT ); Fri, 18 Jan 2019 08:43:13 -0500 Received: by mail-wm1-f68.google.com with SMTP id m22so4575229wml.3 for ; Fri, 18 Jan 2019 05:43:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EOyfIqvP8fWVIkX996tvkSS9AcitJcU7J4dbz2exdQ4=; b=XkOLNzXHaoqwYINhSTjKGsqTlpKE3rtZ+YUpqHqHFfzP0e3kmfQnivJLKZzVKM6ilU 3LKeKaSml5Za1AJv+H6OpYsdxVz9Xfq1cn636wzX0XP5xKhEEggN0LivlQaEJ8pEDHsy /+A24CvqKrrJunvXrRn7XAcbsUB2Z7sJuifPKi58pzp0XiJqGj2hWe0aBmY9nldeVLlY FdkIwYLZkhAUZvyM8c0r5bTuO9Ltb15UllQejeif9ty9bVuu42TppC6rcmfo5bT8cQSO gaqK2Bf8Ri7GxxTCEdpu9Xclsw51MKGu+w2Xmpammc7csoUHeNvH8Bvc6cmGSEBYGA0Y C5Zw== 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=EOyfIqvP8fWVIkX996tvkSS9AcitJcU7J4dbz2exdQ4=; b=pGcCny6+tu+b9eF8DEW6YWbEns3LnCt/2ffrrBhbkaK+MJ/YDRuW0oVEBUMZJ6TuSe sDsciU4GS+3RaqOqDSSf5kcTv7jcj8rHc87yE4VdMx6eCh9NIELrQL9FjG96oqCOpZP6 fZP4jiMmaJBQKZjOa8hhFIKmJOUHmxzQSQEz7hoTD3tCv2n6++2qGYRofuY4yw+O0O83 7OQofxpXTGp6n70SRPOD8s9fTfNB1g2bsrG437ViMv/mQNN1ku313WMZEKkfNFuz3e9p pd6QonYOFQ2SX0hf4OAMpZkcM8aH3u52h11mKUfIfjZF9PVSQhfjLTQeD5iLUT16eDPr bNFg== X-Gm-Message-State: AJcUukcMdioH8hZu1sV2ILPRIdcF+/r2bG5TJ44YrOzsbDO9MAwuAi0B re49j26dKMeqZkxbqoCOXDTCuffnIMPz7w== X-Google-Smtp-Source: ALg8bN5QbJYhaGeEKDXSYdtRbdg9vOXCE6CCpJkPHy+taNd+kZ5XjX1RHG735upNj8ibiLwSZtrlow== X-Received: by 2002:a1c:26c1:: with SMTP id m184mr15108259wmm.25.1547818991881; Fri, 18 Jan 2019 05:43:11 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id a132sm51033934wmh.5.2019.01.18.05.43.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Jan 2019 05:43:11 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , Mark Brown , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 06/13] dt-bindings: input: add DT bindings for max77650 Date: Fri, 18 Jan 2019 14:42:37 +0100 Message-Id: <20190118134244.22253-7-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190118134244.22253-1-brgl@bgdev.pl> References: <20190118134244.22253-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Bartosz Golaszewski Add the DT binding document for the onkey module of max77650. Signed-off-by: Bartosz Golaszewski --- .../bindings/input/max77650-onkey.txt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/max77650-onkey.txt diff --git a/Documentation/devicetree/bindings/input/max77650-onkey.txt b/Documentation/devicetree/bindings/input/max77650-onkey.txt new file mode 100644 index 000000000000..37c80898be4d --- /dev/null +++ b/Documentation/devicetree/bindings/input/max77650-onkey.txt @@ -0,0 +1,26 @@ +Onkey driver for MAX77650 PMIC from Maxim Integrated. + +This module is part of the MAX77650 MFD device. For more details +see Documentation/devicetree/bindings/mfd/max77650.txt. + +The onkey controller is represented as a sub-node of the PMIC node on +the device tree. + +Required properties: +-------------------- +- compatible: Must be "maxim,max77650-onkey". + +Optional properties: +- linux,code: The key-code to be reported when the key is pressed. + Defaults to KEY_POWER. +- maxim,onkey-mode: Must be "push" or "slide" depending on the type of + button used by the system. Defaults to "push". + +Example: +-------- + + onkey { + compatible = "maxim,max77650-onkey"; + linux,code = ; + maxim,onkey-mode = "slide"; + }; From patchwork Fri Jan 18 13:42:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10770171 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 08B096C5 for ; Fri, 18 Jan 2019 13:44:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E9A34295A4 for ; Fri, 18 Jan 2019 13:44:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DD0EB295A5; Fri, 18 Jan 2019 13:44:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1D83F29731 for ; Fri, 18 Jan 2019 13:44:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727790AbfARNnQ (ORCPT ); Fri, 18 Jan 2019 08:43:16 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:37296 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727749AbfARNnQ (ORCPT ); Fri, 18 Jan 2019 08:43:16 -0500 Received: by mail-wr1-f67.google.com with SMTP id s12so15134268wrt.4 for ; Fri, 18 Jan 2019 05:43:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wsnUGK4UHoSna5kTVgP08aV1SP3zq1Xo1uh/gsnCFl8=; b=flQ6VtVTEWW2m166wpDStmjiOvQ3K/ZbN8wg2/c8vM4oxscllSsKabuM/UTdSciXqn NXzob1l9h9TlRn3haTULILT5iqT3otsGgjV04fEHuZhWthM52sl+IhNYu+6xKYneAn45 G2vJAtolWHJwEKUU/ksfze1PVdh3qaCdCYIkGv5hNLkRlJV2XyiKIYQK7LeRb3qwdwo3 hTQCpH0DK9NdrN787QZ5jsVKiBmOx0zM8GqCVbUNEsL+bE19od/dB6Efd5bQsTLYkQ8b 6h/Mpt+wPjD/bGhL0QBXGCpCBDaDbySfT1Un96zLEX3foBge/d7KO9f7vtULru9VlREe Oz+A== 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=wsnUGK4UHoSna5kTVgP08aV1SP3zq1Xo1uh/gsnCFl8=; b=M5yN5cFLKJxXvwoUkGacsLFgb7Vy/3ozHncMDrYFCs9kR/qenEg+JgROc2gifYr7/N z4k7w9WipKz2zsOXC44Thf4nuHZjwXBbK40BDm2znfUtPVIgtjy9yRp0p46O0kmBw8Ku WohWQIVwOMWjhxaIEcLtAXyu7M6qOeEl9wOxfhekrURfyyGBKa7pjzt712aUuRYXfmbI 03ow1GwIH+b9XssY9izZAndDz+dz52W6CBO4fjUOaq/8i2Ly6EUhqUHQxLDXaLfvIKvu cd1005OkUcyBLsf2ghqM7hVsIHbTek1j04yUb4Amvf7VStdU84k0QM68SsEJ7UhnKA4x GbMg== X-Gm-Message-State: AJcUukdSGzsz7dmeozdSJQ1f0QKNgfzALbF60bFmFMhzlIvWVNWSTWXM BTlC36jvs8PPOMIg3FNWFWKes18BvxBa6A== X-Google-Smtp-Source: ALg8bN7FnmhIuDR0RReKQBT9JxM5l7Oy4GIn0hLvwU7zvbzZg0KzMKdcFE2X2mxCnjx9/WZXAbzqLw== X-Received: by 2002:adf:8c09:: with SMTP id z9mr16632824wra.301.1547818993411; Fri, 18 Jan 2019 05:43:13 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id a132sm51033934wmh.5.2019.01.18.05.43.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Jan 2019 05:43:12 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , Mark Brown , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 07/13] mfd: max77650: new core mfd driver Date: Fri, 18 Jan 2019 14:42:38 +0100 Message-Id: <20190118134244.22253-8-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190118134244.22253-1-brgl@bgdev.pl> References: <20190118134244.22253-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Bartosz Golaszewski Add the core mfd driver for max77650 PMIC. We define five sub-devices for which the drivers will be added in subsequent patches. Signed-off-by: Bartosz Golaszewski --- drivers/mfd/Kconfig | 11 ++ drivers/mfd/Makefile | 1 + drivers/mfd/max77650.c | 212 +++++++++++++++++++++++++++++++++++ include/linux/mfd/max77650.h | 73 ++++++++++++ 4 files changed, 297 insertions(+) create mode 100644 drivers/mfd/max77650.c create mode 100644 include/linux/mfd/max77650.h diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 8c5dfdce4326..dd4dcd97fe21 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -733,6 +733,17 @@ config MFD_MAX77620 provides common support for accessing the device; additional drivers must be enabled in order to use the functionality of the device. +config MFD_MAX77650 + tristate "Maxim MAX77650/77651 PMIC Support" + depends on I2C + depends on OF || COMPILE_TEST + select MFD_CORE + select REGMAP_I2C + help + Say yes here to add support for Maxim Semiconductor MAX77650 and + MAX77651 Power Management ICs. This is the core multifunction + driver for interacting with the device. + config MFD_MAX77686 tristate "Maxim Semiconductor MAX77686/802 PMIC Support" depends on I2C diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 12980a4ad460..3b912a4015d1 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -151,6 +151,7 @@ obj-$(CONFIG_MFD_DA9150) += da9150-core.o obj-$(CONFIG_MFD_MAX14577) += max14577.o obj-$(CONFIG_MFD_MAX77620) += max77620.o +obj-$(CONFIG_MFD_MAX77650) += max77650.o obj-$(CONFIG_MFD_MAX77686) += max77686.o obj-$(CONFIG_MFD_MAX77693) += max77693.o obj-$(CONFIG_MFD_MAX77843) += max77843.o diff --git a/drivers/mfd/max77650.c b/drivers/mfd/max77650.c new file mode 100644 index 000000000000..9c769570b491 --- /dev/null +++ b/drivers/mfd/max77650.c @@ -0,0 +1,212 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2018 BayLibre SAS + * Author: Bartosz Golaszewski + * + * Core MFD driver for MAXIM 77650/77651 charger/power-supply. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX77650_INT_GPI_F_MSK BIT(0) +#define MAX77650_INT_GPI_R_MSK BIT(1) +#define MAX77650_INT_GPI_MSK \ + (MAX77650_INT_GPI_F_MSK | MAX77650_INT_GPI_R_MSK) +#define MAX77650_INT_nEN_F_MSK BIT(2) +#define MAX77650_INT_nEN_R_MSK BIT(3) +#define MAX77650_INT_TJAL1_R_MSK BIT(4) +#define MAX77650_INT_TJAL2_R_MSK BIT(5) +#define MAX77650_INT_DOD_R_MSK BIT(6) + +#define MAX77650_INT_THM_MSK BIT(0) +#define MAX77650_INT_CHG_MSK BIT(1) +#define MAX77650_INT_CHGIN_MSK BIT(2) +#define MAX77650_INT_TJ_REG_MSK BIT(3) +#define MAX77650_INT_CHGIN_CTRL_MSK BIT(4) +#define MAX77650_INT_SYS_CTRL_MSK BIT(5) +#define MAX77650_INT_SYS_CNFG_MSK BIT(6) + +#define MAX77650_INT_GLBL_OFFSET 0 +#define MAX77650_INT_CHG_OFFSET 1 + +#define MAX77650_SBIA_LPM_MASK BIT(5) +#define MAX77650_SBIA_LPM_DISABLED 0x00 + +static const struct mfd_cell max77650_devs[] = { + { + .name = "max77650-regulator", + .of_compatible = "maxim,max77650-regulator", + }, + { + .name = "max77650-charger", + .of_compatible = "maxim,max77650-charger", + }, + { + .name = "max77650-gpio", + .of_compatible = "maxim,max77650-gpio", + }, + { + .name = "max77650-leds", + .of_compatible = "maxim,max77650-leds", + }, + { + .name = "max77650-onkey", + .of_compatible = "maxim,max77650-onkey", + }, +}; + +static const struct regmap_irq max77650_irqs[] = { + [MAX77650_INT_GPI] = { + .reg_offset = MAX77650_INT_GLBL_OFFSET, + .mask = MAX77650_INT_GPI_MSK, + .type = { + .type_falling_val = MAX77650_INT_GPI_F_MSK, + .type_rising_val = MAX77650_INT_GPI_R_MSK, + .types_supported = IRQ_TYPE_EDGE_BOTH, + }, + }, + [MAX77650_INT_nEN_F] = { + .reg_offset = MAX77650_INT_GLBL_OFFSET, + .mask = MAX77650_INT_nEN_F_MSK, + }, + [MAX77650_INT_nEN_R] = { + .reg_offset = MAX77650_INT_GLBL_OFFSET, + .mask = MAX77650_INT_nEN_R_MSK, + }, + [MAX77650_INT_TJAL1_R] = { + .reg_offset = MAX77650_INT_GLBL_OFFSET, + .mask = MAX77650_INT_TJAL1_R_MSK, + }, + [MAX77650_INT_TJAL2_R] = { + .reg_offset = MAX77650_INT_GLBL_OFFSET, + .mask = MAX77650_INT_TJAL2_R_MSK, + }, + [MAX77650_INT_DOD_R] = { + .reg_offset = MAX77650_INT_GLBL_OFFSET, + .mask = MAX77650_INT_DOD_R_MSK, + }, + [MAX77650_INT_THM] = { + .reg_offset = MAX77650_INT_CHG_OFFSET, + .mask = MAX77650_INT_THM_MSK, + }, + [MAX77650_INT_CHG] = { + .reg_offset = MAX77650_INT_CHG_OFFSET, + .mask = MAX77650_INT_CHG_MSK, + }, + [MAX77650_INT_CHGIN] = { + .reg_offset = MAX77650_INT_CHG_OFFSET, + .mask = MAX77650_INT_CHGIN_MSK, + }, + [MAX77650_INT_TJ_REG] = { + .reg_offset = MAX77650_INT_CHG_OFFSET, + .mask = MAX77650_INT_TJ_REG_MSK, + }, + [MAX77650_INT_CHGIN_CTRL] = { + .reg_offset = MAX77650_INT_CHG_OFFSET, + .mask = MAX77650_INT_CHGIN_CTRL_MSK, + }, + [MAX77650_INT_SYS_CTRL] = { + .reg_offset = MAX77650_INT_CHG_OFFSET, + .mask = MAX77650_INT_SYS_CTRL_MSK, + }, + [MAX77650_INT_SYS_CNFG] = { + .reg_offset = MAX77650_INT_CHG_OFFSET, + .mask = MAX77650_INT_SYS_CNFG_MSK, + }, +}; + +static struct regmap_irq_chip max77650_irq_chip = { + .name = "max77650-irq", + .irqs = max77650_irqs, + .num_irqs = ARRAY_SIZE(max77650_irqs), + .num_regs = 2, + .status_base = MAX77650_REG_INT_GLBL, + .mask_base = MAX77650_REG_INTM_GLBL, + .type_in_mask = true, + .type_invert = true, + .init_ack_masked = true, + .clear_on_unmask = true, +}; + +static const struct regmap_config max77650_regmap_config = { + .name = "max77650", + .reg_bits = 8, + .val_bits = 8, +}; + +static int max77650_i2c_probe(struct i2c_client *i2c) +{ + struct regmap_irq_chip_data *irq_data; + struct device *dev = &i2c->dev; + struct regmap *map; + unsigned int val; + int rv; + + map = devm_regmap_init_i2c(i2c, &max77650_regmap_config); + if (IS_ERR(map)) + return PTR_ERR(map); + + rv = regmap_read(map, MAX77650_REG_CID, &val); + if (rv) + return rv; + + switch (MAX77650_CID_BITS(val)) { + case MAX77650_CID_77650A: + case MAX77650_CID_77650C: + case MAX77650_CID_77651A: + case MAX77650_CID_77651B: + break; + default: + return -ENODEV; + } + + /* + * This IC has a low-power mode which reduces the quiescent current + * consumption to ~5.6uA but is only suitable for systems consuming + * less than ~2mA. Since this is not likely the case even on + * linux-based wearables - keep the chip in normal power mode. + */ + rv = regmap_update_bits(map, + MAX77650_REG_CNFG_GLBL, + MAX77650_SBIA_LPM_MASK, + MAX77650_SBIA_LPM_DISABLED); + if (rv) + return rv; + + max77650_irq_chip.irq_drv_data = map; + rv = devm_regmap_add_irq_chip(dev, map, i2c->irq, + IRQF_ONESHOT | IRQF_SHARED, + -1, &max77650_irq_chip, &irq_data); + if (rv) + return rv; + + i2c_set_clientdata(i2c, irq_data); + + return devm_mfd_add_devices(dev, -1, max77650_devs, + ARRAY_SIZE(max77650_devs), NULL, 0, NULL); +} + +static const struct of_device_id max77650_of_match[] = { + { .compatible = "maxim,max77650", }, +}; + +static struct i2c_driver max77650_i2c_driver = { + .driver = { + .name = "max77650", + .of_match_table = of_match_ptr(max77650_of_match), + }, + .probe_new = max77650_i2c_probe, +}; +module_i2c_driver(max77650_i2c_driver); + +MODULE_DESCRIPTION("MAXIM 77650/77651 multi-function core driver"); +MODULE_AUTHOR("Bartosz Golaszewski "); +MODULE_LICENSE("GPL"); diff --git a/include/linux/mfd/max77650.h b/include/linux/mfd/max77650.h new file mode 100644 index 000000000000..841bbccdd5ad --- /dev/null +++ b/include/linux/mfd/max77650.h @@ -0,0 +1,73 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2018 BayLibre SAS + * Author: Bartosz Golaszewski + * + * Common definitions for MAXIM 77650/77651 charger/power-supply. + */ + +#ifndef MAX77650_H +#define MAX77650_H + +#include + +#define MAX77650_REG_INT_GLBL 0x00 +#define MAX77650_REG_INT_CHG 0x01 +#define MAX77650_REG_STAT_CHG_A 0x02 +#define MAX77650_REG_STAT_CHG_B 0x03 +#define MAX77650_REG_ERCFLAG 0x04 +#define MAX77650_REG_STAT_GLBL 0x05 +#define MAX77650_REG_INTM_GLBL 0x06 +#define MAX77650_REG_INTM_CHG 0x07 +#define MAX77650_REG_CNFG_GLBL 0x10 +#define MAX77650_REG_CID 0x11 +#define MAX77650_REG_CNFG_GPIO 0x12 +#define MAX77650_REG_CNFG_CHG_A 0x18 +#define MAX77650_REG_CNFG_CHG_B 0x19 +#define MAX77650_REG_CNFG_CHG_C 0x1a +#define MAX77650_REG_CNFG_CHG_D 0x1b +#define MAX77650_REG_CNFG_CHG_E 0x1c +#define MAX77650_REG_CNFG_CHG_F 0x1d +#define MAX77650_REG_CNFG_CHG_G 0x1e +#define MAX77650_REG_CNFG_CHG_H 0x1f +#define MAX77650_REG_CNFG_CHG_I 0x20 +#define MAX77650_REG_CNFG_SBB_TOP 0x28 +#define MAX77650_REG_CNFG_SBB0_A 0x29 +#define MAX77650_REG_CNFG_SBB0_B 0x2a +#define MAX77650_REG_CNFG_SBB1_A 0x2b +#define MAX77650_REG_CNFG_SBB1_B 0x2c +#define MAX77650_REG_CNFG_SBB2_A 0x2d +#define MAX77650_REG_CNFG_SBB2_B 0x2e +#define MAX77650_REG_CNFG_LDO_A 0x38 +#define MAX77650_REG_CNFG_LDO_B 0x39 +#define MAX77650_REG_CNFG_LED0_A 0x40 +#define MAX77650_REG_CNFG_LED1_A 0x41 +#define MAX77650_REG_CNFG_LED2_A 0x42 +#define MAX77650_REG_CNFG_LED0_B 0x43 +#define MAX77650_REG_CNFG_LED1_B 0x44 +#define MAX77650_REG_CNFG_LED2_B 0x45 +#define MAX77650_REG_CNFG_LED_TOP 0x46 + +#define MAX77650_CID_MASK GENMASK(3, 0) +#define MAX77650_CID_BITS(_reg) (_reg & MAX77650_CID_MASK) + +#define MAX77650_CID_77650A 0x03 +#define MAX77650_CID_77650C 0x0a +#define MAX77650_CID_77651A 0x06 +#define MAX77650_CID_77651B 0x08 + +#define MAX77650_INT_GPI 0 +#define MAX77650_INT_nEN_F 1 +#define MAX77650_INT_nEN_R 2 +#define MAX77650_INT_TJAL1_R 3 +#define MAX77650_INT_TJAL2_R 4 +#define MAX77650_INT_DOD_R 5 +#define MAX77650_INT_THM 6 +#define MAX77650_INT_CHG 7 +#define MAX77650_INT_CHGIN 8 +#define MAX77650_INT_TJ_REG 9 +#define MAX77650_INT_CHGIN_CTRL 10 +#define MAX77650_INT_SYS_CTRL 11 +#define MAX77650_INT_SYS_CNFG 12 + +#endif /* MAX77650_H */ From patchwork Fri Jan 18 13:42:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10770167 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2E2086C5 for ; Fri, 18 Jan 2019 13:44:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 16E16295A4 for ; Fri, 18 Jan 2019 13:44:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0B459296F1; Fri, 18 Jan 2019 13:44:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CCB78295A4 for ; Fri, 18 Jan 2019 13:44:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727865AbfARNnz (ORCPT ); Fri, 18 Jan 2019 08:43:55 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:35544 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727779AbfARNnR (ORCPT ); Fri, 18 Jan 2019 08:43:17 -0500 Received: by mail-wr1-f67.google.com with SMTP id 96so15147026wrb.2 for ; Fri, 18 Jan 2019 05:43:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vFZOK39HJ/B/wUuaNKaIUIGiHKUV9w5pO3qSq145OPM=; b=H4ow3LOScDqB70hPSNSyQxxPLY97YuXfliUMHXP7n3aG/nS+1kYv43SRA68mSTmifL wzGFG61VjQOVniESV6dB8lOtdid32uK09NRRRWOIEMZGdRCHHxmBgrk4pKSp2nfF4fMh 8hAGIZNT7wcUBGLEBi7si1Hf4P2QLvvq6wncf/eKtxv6+/nm38uofQ8dI1F4y5f/8FCf +3zobiocWThfidC9F9DkYo7WJeqfXs0MwCZ92/AlU6DOT9R4D7wj6IP4ISDj9kU+EnKc RVQT6esqbN9KMqKOPCdRK+aDgalSKH9ZkxaryNYWJasLbw/MFqNM3EOQ/bzdeqGKGir9 to5w== 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=vFZOK39HJ/B/wUuaNKaIUIGiHKUV9w5pO3qSq145OPM=; b=MfayZpjE0s9t4k0RLsh+rDszBMRj5ZjYfQKAV1891Ou5HYCJTo230d4vSoM9ASv/Lx E1XxKNYdE+FspFf7w4QWw9scDtwVnt+m2mkSLHjUKpq8doTI5f306KvxDm3I/xpMLWid wCGFKbATXePuYgjRqm9+8cCU38LZ6sIrgP6x9jfSC/cY0ftY3aofKPAF4FdA87Cq6bYh x7u+eMaoGVqE1zrtMc0M2X1NuqwpA3MV7WAjx5FGBs5jzc53fhnU7Tz0XSQ2zx6/utP/ WIQFFeeptnqhU7SMTnNqvAOiiFKANTiK+PjrdQCx6LTHefg2gxQ5PKsUSGd3xTT2S2dH aTwQ== X-Gm-Message-State: AJcUukdiVYCIz+BZLxyi2ljM1T+/MlopD6Mj9HCODePXJAQMDwJ0t12t JJ0JK4oEic7vXMxUDhjKMryTTA== X-Google-Smtp-Source: ALg8bN7ne8HME4CC+dGa9TkwfI+VcAeLocn0X0VAb+u9mqJLcpB4uyOod/83/mK0d8rUX5IXLCI5qw== X-Received: by 2002:a5d:49cd:: with SMTP id t13mr16915871wrs.144.1547818994812; Fri, 18 Jan 2019 05:43:14 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id a132sm51033934wmh.5.2019.01.18.05.43.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Jan 2019 05:43:14 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , Mark Brown , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 08/13] regulator: max77650: add regulator support Date: Fri, 18 Jan 2019 14:42:39 +0100 Message-Id: <20190118134244.22253-9-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190118134244.22253-1-brgl@bgdev.pl> References: <20190118134244.22253-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Bartosz Golaszewski Add regulator support for max77650. We support all four variants of this PMIC including non-linear voltage table for max77651 SBB1 rail. Signed-off-by: Bartosz Golaszewski --- drivers/regulator/Kconfig | 8 + drivers/regulator/Makefile | 1 + drivers/regulator/max77650-regulator.c | 537 +++++++++++++++++++++++++ 3 files changed, 546 insertions(+) create mode 100644 drivers/regulator/max77650-regulator.c diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig index ee60a222f5eb..514f094f9444 100644 --- a/drivers/regulator/Kconfig +++ b/drivers/regulator/Kconfig @@ -457,6 +457,14 @@ config REGULATOR_MAX77620 chip to control Step-Down DC-DC and LDOs. Say Y here to enable the regulator driver. +config REGULATOR_MAX77650 + tristate "Maxim MAX77650/77651 regulator support" + depends on MFD_MAX77650 + help + Regulator driver for MAX77650/77651 PMIC from Maxim + Semiconductor. This device has a SIMO with three independent + power rails and an LDO. + config REGULATOR_MAX8649 tristate "Maxim 8649 voltage regulator" depends on I2C diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile index b12e1c9b2118..7de79a12b0b7 100644 --- a/drivers/regulator/Makefile +++ b/drivers/regulator/Makefile @@ -60,6 +60,7 @@ obj-$(CONFIG_REGULATOR_LTC3676) += ltc3676.o obj-$(CONFIG_REGULATOR_MAX14577) += max14577-regulator.o obj-$(CONFIG_REGULATOR_MAX1586) += max1586.o obj-$(CONFIG_REGULATOR_MAX77620) += max77620-regulator.o +obj-$(CONFIG_REGULATOR_MAX77650) += max77650-regulator.o obj-$(CONFIG_REGULATOR_MAX8649) += max8649.o obj-$(CONFIG_REGULATOR_MAX8660) += max8660.o obj-$(CONFIG_REGULATOR_MAX8907) += max8907-regulator.o diff --git a/drivers/regulator/max77650-regulator.c b/drivers/regulator/max77650-regulator.c new file mode 100644 index 000000000000..036022566907 --- /dev/null +++ b/drivers/regulator/max77650-regulator.c @@ -0,0 +1,537 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2018 BayLibre SAS + * Author: Bartosz Golaszewski + * + * Regulator driver for MAXIM 77650/77651 charger/power-supply. + */ + +#include +#include +#include +#include +#include +#include +#include + +#define MAX77650_REGULATOR_EN_CTRL_MASK GENMASK(3, 0) +#define MAX77650_REGULATOR_EN_CTRL_BITS(_reg) \ + ((_reg) & MAX77650_REGULATOR_EN_CTRL_MASK) +#define MAX77650_REGULATOR_ENABLED GENMASK(2, 1) +#define MAX77650_REGULATOR_DISABLED BIT(2) + +#define MAX77650_REGULATOR_V_LDO_MASK GENMASK(6, 0) +#define MAX77650_REGULATOR_V_SBB_MASK GENMASK(5, 0) + +#define MAX77650_REGULATOR_AD_MASK BIT(3) +#define MAX77650_REGULATOR_AD_DISABLED 0x00 +#define MAX77650_REGULATOR_AD_ENABLED BIT(3) + +#define MAX77650_REGULATOR_CURR_LIM_MASK GENMASK(7, 6) +#define MAX77650_REGULATOR_CURR_LIM_BITS(_reg) \ + (((_reg) & MAX77650_REGULATOR_CURR_LIM_MASK) >> 6) +#define MAX77650_REGULATOR_CURR_LIM_SHIFT(_val) ((_val) << 6) + +enum { + MAX77650_REGULATOR_ID_LDO = 0, + MAX77650_REGULATOR_ID_SBB0, + MAX77650_REGULATOR_ID_SBB1, + MAX77650_REGULATOR_ID_SBB2, + MAX77650_REGULATOR_NUM_REGULATORS, +}; + +struct max77650_regulator_desc { + struct regulator_desc desc; + unsigned int regA; + unsigned int regB; +}; + +static const u32 max77651_sbb1_regulator_volt_table[] = { + 2400000, 3200000, 4000000, 4800000, + 2450000, 3250000, 4050000, 4850000, + 2500000, 3300000, 4100000, 4900000, + 2550000, 3350000, 4150000, 4950000, + 2600000, 3400000, 4200000, 5000000, + 2650000, 3450000, 4250000, 5050000, + 2700000, 3500000, 4300000, 5100000, + 2750000, 3550000, 4350000, 5150000, + 2800000, 3600000, 4400000, 5200000, + 2850000, 3650000, 4450000, 5250000, + 2900000, 3700000, 4500000, 0, + 2950000, 3750000, 4550000, 0, + 3000000, 3800000, 4600000, 0, + 3050000, 3850000, 4650000, 0, + 3100000, 3900000, 4700000, 0, + 3150000, 3950000, 4750000, 0, +}; + +#define MAX77651_REGULATOR_SBB1_SEL_DEC(_val) \ + (((_val & 0x3c) >> 2) | ((_val & 0x03) << 4)) +#define MAX77651_REGULATOR_SBB1_SEL_ENC(_val) \ + (((_val & 0x30) >> 4) | ((_val & 0x0f) << 2)) + +#define MAX77650_REGULATOR_SBB1_SEL_DECR(_val) \ + do { \ + _val = MAX77651_REGULATOR_SBB1_SEL_DEC(_val); \ + _val--; \ + _val = MAX77651_REGULATOR_SBB1_SEL_ENC(_val); \ + } while (0) + +#define MAX77650_REGULATOR_SBB1_SEL_INCR(_val) \ + do { \ + _val = MAX77651_REGULATOR_SBB1_SEL_DEC(_val); \ + _val++; \ + _val = MAX77651_REGULATOR_SBB1_SEL_ENC(_val); \ + } while (0) + +static const int max77650_current_limit_table[] = { + 1000000, 866000, 707000, 500000, +}; + +static int max77650_regulator_is_enabled(struct regulator_dev *rdev) +{ + struct max77650_regulator_desc *rdesc; + struct regmap *map; + int val, rv, en; + + rdesc = rdev_get_drvdata(rdev); + map = rdev_get_regmap(rdev); + + rv = regmap_read(map, rdesc->regB, &val); + if (rv) + return rv; + + en = MAX77650_REGULATOR_EN_CTRL_BITS(val); + + return en != MAX77650_REGULATOR_DISABLED; +} + +static int max77650_regulator_enable(struct regulator_dev *rdev) +{ + struct max77650_regulator_desc *rdesc; + struct regmap *map; + + rdesc = rdev_get_drvdata(rdev); + map = rdev_get_regmap(rdev); + + return regmap_update_bits(map, rdesc->regB, + MAX77650_REGULATOR_EN_CTRL_MASK, + MAX77650_REGULATOR_ENABLED); +} + +static int max77650_regulator_disable(struct regulator_dev *rdev) +{ + struct max77650_regulator_desc *rdesc; + struct regmap *map; + + rdesc = rdev_get_drvdata(rdev); + map = rdev_get_regmap(rdev); + + return regmap_update_bits(map, rdesc->regB, + MAX77650_REGULATOR_EN_CTRL_MASK, + MAX77650_REGULATOR_DISABLED); +} + +static int max77650_regulator_set_voltage_sel(struct regulator_dev *rdev, + unsigned int sel) +{ + int rv = 0, curr, diff; + bool ascending; + + /* + * If the regulator is disabled, we can program the desired + * voltage right away. + */ + if (!max77650_regulator_is_enabled(rdev)) + return regulator_set_voltage_sel_regmap(rdev, sel); + + /* + * Otherwise we need to manually ramp the output voltage up/down + * one step at a time. + */ + + curr = regulator_get_voltage_sel_regmap(rdev); + if (curr < 0) + return curr; + + diff = curr - sel; + if (diff == 0) + return 0; /* Already there. */ + else if (diff > 0) + ascending = false; + else + ascending = true; + + /* + * Make sure we'll get to the right voltage and break the loop even if + * the selector equals 0. + */ + for (ascending ? curr++ : curr--;; ascending ? curr++ : curr--) { + rv = regulator_set_voltage_sel_regmap(rdev, curr); + if (rv) + return rv; + + if (curr == sel) + break; + } + + return 0; +} + +/* + * Special case: non-linear voltage table for max77651 SBB1 - software + * must ensure the voltage is ramped in 50mV increments. + */ +static int max77651_regulator_sbb1_set_voltage_sel(struct regulator_dev *rdev, + unsigned int sel) +{ + int rv = 0, curr, vcurr, vdest, vdiff; + + /* + * If the regulator is disabled, we can program the desired + * voltage right away. + */ + if (!max77650_regulator_is_enabled(rdev)) + return regulator_set_voltage_sel_regmap(rdev, sel); + + curr = regulator_get_voltage_sel_regmap(rdev); + if (curr < 0) + return curr; + + if (curr == sel) + return 0; /* Already there. */ + + vcurr = max77651_sbb1_regulator_volt_table[curr]; + vdest = max77651_sbb1_regulator_volt_table[sel]; + vdiff = vcurr - vdest; + + for (;;) { + if (vdiff > 0) + MAX77650_REGULATOR_SBB1_SEL_DECR(curr); + else + MAX77650_REGULATOR_SBB1_SEL_INCR(curr); + + rv = regulator_set_voltage_sel_regmap(rdev, curr); + if (rv) + return rv; + + if (curr == sel) + break; + }; + + return 0; +} + +static int max77650_regulator_get_current_limit(struct regulator_dev *rdev) +{ + struct max77650_regulator_desc *rdesc; + struct regmap *map; + int val, rv, limit; + + rdesc = rdev_get_drvdata(rdev); + map = rdev_get_regmap(rdev); + + rv = regmap_read(map, rdesc->regA, &val); + if (rv) + return rv; + + limit = MAX77650_REGULATOR_CURR_LIM_BITS(val); + + return max77650_current_limit_table[limit]; +} + +static int max77650_regulator_set_current_limit(struct regulator_dev *rdev, + int min_uA, int max_uA) +{ + struct max77650_regulator_desc *rdesc; + struct regmap *map; + int rv, i, limit; + + rdesc = rdev_get_drvdata(rdev); + map = rdev_get_regmap(rdev); + + for (i = 0; i < ARRAY_SIZE(max77650_current_limit_table); i++) { + limit = max77650_current_limit_table[i]; + + if (limit >= min_uA && limit <= max_uA) { + rv = regmap_update_bits(map, rdesc->regA, + MAX77650_REGULATOR_CURR_LIM_MASK, + MAX77650_REGULATOR_CURR_LIM_SHIFT(i)); + if (rv) + return rv; + } + } + + return -EINVAL; +} + +static const struct regulator_ops max77650_regulator_LDO_ops = { + .is_enabled = max77650_regulator_is_enabled, + .enable = max77650_regulator_enable, + .disable = max77650_regulator_disable, + .list_voltage = regulator_list_voltage_linear, + .map_voltage = regulator_map_voltage_linear, + .get_voltage_sel = regulator_get_voltage_sel_regmap, + .set_voltage_sel = max77650_regulator_set_voltage_sel, + .set_active_discharge = regulator_set_active_discharge_regmap, +}; + +static const struct regulator_ops max77650_regulator_SBB_ops = { + .is_enabled = max77650_regulator_is_enabled, + .enable = max77650_regulator_enable, + .disable = max77650_regulator_disable, + .list_voltage = regulator_list_voltage_linear, + .map_voltage = regulator_map_voltage_linear, + .get_voltage_sel = regulator_get_voltage_sel_regmap, + .set_voltage_sel = max77650_regulator_set_voltage_sel, + .get_current_limit = max77650_regulator_get_current_limit, + .set_current_limit = max77650_regulator_set_current_limit, + .set_active_discharge = regulator_set_active_discharge_regmap, +}; + +/* Special case for max77651 SBB1 - non-linear voltage mapping. */ +static const struct regulator_ops max77651_SBB1_regulator_ops = { + .is_enabled = max77650_regulator_is_enabled, + .enable = max77650_regulator_enable, + .disable = max77650_regulator_disable, + .list_voltage = regulator_list_voltage_table, + .get_voltage_sel = regulator_get_voltage_sel_regmap, + .set_voltage_sel = max77651_regulator_sbb1_set_voltage_sel, + .get_current_limit = max77650_regulator_get_current_limit, + .set_current_limit = max77650_regulator_set_current_limit, + .set_active_discharge = regulator_set_active_discharge_regmap, +}; + +static struct max77650_regulator_desc max77650_LDO_desc = { + .desc = { + .name = "ldo", + .of_match = of_match_ptr("ldo"), + .regulators_node = of_match_ptr("regulators"), + .supply_name = "in-ldo", + .id = MAX77650_REGULATOR_ID_LDO, + .ops = &max77650_regulator_LDO_ops, + .min_uV = 1350000, + .uV_step = 12500, + .n_voltages = 128, + .vsel_mask = MAX77650_REGULATOR_V_LDO_MASK, + .vsel_reg = MAX77650_REG_CNFG_LDO_A, + .active_discharge_off = MAX77650_REGULATOR_AD_DISABLED, + .active_discharge_on = MAX77650_REGULATOR_AD_ENABLED, + .active_discharge_mask = MAX77650_REGULATOR_AD_MASK, + .active_discharge_reg = MAX77650_REG_CNFG_LDO_B, + .enable_time = 100, + .type = REGULATOR_VOLTAGE, + }, + .regA = MAX77650_REG_CNFG_LDO_A, + .regB = MAX77650_REG_CNFG_LDO_B, +}; + +static struct max77650_regulator_desc max77650_SBB0_desc = { + .desc = { + .name = "sbb0", + .of_match = of_match_ptr("sbb0"), + .regulators_node = of_match_ptr("regulators"), + .supply_name = "in-sbb0", + .id = MAX77650_REGULATOR_ID_SBB0, + .ops = &max77650_regulator_SBB_ops, + .min_uV = 800000, + .uV_step = 25000, + .n_voltages = 64, + .vsel_mask = MAX77650_REGULATOR_V_SBB_MASK, + .vsel_reg = MAX77650_REG_CNFG_SBB0_A, + .active_discharge_off = MAX77650_REGULATOR_AD_DISABLED, + .active_discharge_on = MAX77650_REGULATOR_AD_ENABLED, + .active_discharge_mask = MAX77650_REGULATOR_AD_MASK, + .active_discharge_reg = MAX77650_REG_CNFG_SBB0_B, + .enable_time = 100, + .type = REGULATOR_VOLTAGE, + }, + .regA = MAX77650_REG_CNFG_SBB0_A, + .regB = MAX77650_REG_CNFG_SBB0_B, +}; + +static struct max77650_regulator_desc max77650_SBB1_desc = { + .desc = { + .name = "sbb1", + .of_match = of_match_ptr("sbb1"), + .regulators_node = of_match_ptr("regulators"), + .supply_name = "in-sbb1", + .id = MAX77650_REGULATOR_ID_SBB1, + .ops = &max77650_regulator_SBB_ops, + .min_uV = 800000, + .uV_step = 12500, + .n_voltages = 64, + .vsel_mask = MAX77650_REGULATOR_V_SBB_MASK, + .vsel_reg = MAX77650_REG_CNFG_SBB1_A, + .active_discharge_off = MAX77650_REGULATOR_AD_DISABLED, + .active_discharge_on = MAX77650_REGULATOR_AD_ENABLED, + .active_discharge_mask = MAX77650_REGULATOR_AD_MASK, + .active_discharge_reg = MAX77650_REG_CNFG_SBB1_B, + .enable_time = 100, + .type = REGULATOR_VOLTAGE, + }, + .regA = MAX77650_REG_CNFG_SBB1_A, + .regB = MAX77650_REG_CNFG_SBB1_B, +}; + +static struct max77650_regulator_desc max77651_SBB1_desc = { + .desc = { + .name = "sbb1", + .of_match = of_match_ptr("sbb1"), + .regulators_node = of_match_ptr("regulators"), + .supply_name = "in-sbb1", + .id = MAX77650_REGULATOR_ID_SBB1, + .ops = &max77651_SBB1_regulator_ops, + .volt_table = max77651_sbb1_regulator_volt_table, + .n_voltages = ARRAY_SIZE(max77651_sbb1_regulator_volt_table), + .vsel_mask = MAX77650_REGULATOR_V_SBB_MASK, + .vsel_reg = MAX77650_REG_CNFG_SBB1_A, + .active_discharge_off = MAX77650_REGULATOR_AD_DISABLED, + .active_discharge_on = MAX77650_REGULATOR_AD_ENABLED, + .active_discharge_mask = MAX77650_REGULATOR_AD_MASK, + .active_discharge_reg = MAX77650_REG_CNFG_SBB1_B, + .enable_time = 100, + .type = REGULATOR_VOLTAGE, + }, + .regA = MAX77650_REG_CNFG_SBB1_A, + .regB = MAX77650_REG_CNFG_SBB1_B, +}; + +static struct max77650_regulator_desc max77650_SBB2_desc = { + .desc = { + .name = "sbb2", + .of_match = of_match_ptr("sbb2"), + .regulators_node = of_match_ptr("regulators"), + .supply_name = "in-sbb0", + .id = MAX77650_REGULATOR_ID_SBB2, + .ops = &max77650_regulator_SBB_ops, + .min_uV = 800000, + .uV_step = 50000, + .n_voltages = 64, + .vsel_mask = MAX77650_REGULATOR_V_SBB_MASK, + .vsel_reg = MAX77650_REG_CNFG_SBB2_A, + .active_discharge_off = MAX77650_REGULATOR_AD_DISABLED, + .active_discharge_on = MAX77650_REGULATOR_AD_ENABLED, + .active_discharge_mask = MAX77650_REGULATOR_AD_MASK, + .active_discharge_reg = MAX77650_REG_CNFG_SBB2_B, + .enable_time = 100, + .type = REGULATOR_VOLTAGE, + }, + .regA = MAX77650_REG_CNFG_SBB2_A, + .regB = MAX77650_REG_CNFG_SBB2_B, +}; + +static struct max77650_regulator_desc max77651_SBB2_desc = { + .desc = { + .name = "sbb2", + .of_match = of_match_ptr("sbb2"), + .regulators_node = of_match_ptr("regulators"), + .supply_name = "in-sbb0", + .id = MAX77650_REGULATOR_ID_SBB2, + .ops = &max77650_regulator_SBB_ops, + .min_uV = 2400000, + .uV_step = 50000, + .n_voltages = 64, + .vsel_mask = MAX77650_REGULATOR_V_SBB_MASK, + .vsel_reg = MAX77650_REG_CNFG_SBB2_A, + .active_discharge_off = MAX77650_REGULATOR_AD_DISABLED, + .active_discharge_on = MAX77650_REGULATOR_AD_ENABLED, + .active_discharge_mask = MAX77650_REGULATOR_AD_MASK, + .active_discharge_reg = MAX77650_REG_CNFG_SBB2_B, + .enable_time = 100, + .type = REGULATOR_VOLTAGE, + }, + .regA = MAX77650_REG_CNFG_SBB2_A, + .regB = MAX77650_REG_CNFG_SBB2_B, +}; + +static int max77650_regulator_probe(struct platform_device *pdev) +{ + struct max77650_regulator_desc **rdescs; + struct max77650_regulator_desc *rdesc; + struct regulator_init_data *init_data; + struct regulator_config config = { }; + struct device *dev, *parent; + struct regulator_dev *rdev; + struct device_node *child; + struct regmap *map; + unsigned int val; + int i, rv; + + dev = &pdev->dev; + parent = dev->parent; + + if (!dev->of_node) + dev->of_node = parent->of_node; + + rdescs = devm_kcalloc(dev, MAX77650_REGULATOR_NUM_REGULATORS, + sizeof(*rdescs), GFP_KERNEL); + if (!rdescs) + return -ENOMEM; + + map = dev_get_regmap(parent, NULL); + if (!map) + return -ENODEV; + + rv = regmap_read(map, MAX77650_REG_CID, &val); + if (rv) + return rv; + + rdescs[MAX77650_REGULATOR_ID_LDO] = &max77650_LDO_desc; + rdescs[MAX77650_REGULATOR_ID_SBB0] = &max77650_SBB0_desc; + + switch (MAX77650_CID_BITS(val)) { + case MAX77650_CID_77650A: + case MAX77650_CID_77650C: + rdescs[MAX77650_REGULATOR_ID_SBB1] = &max77650_SBB1_desc; + rdescs[MAX77650_REGULATOR_ID_SBB2] = &max77650_SBB2_desc; + break; + case MAX77650_CID_77651A: + case MAX77650_CID_77651B: + rdescs[MAX77650_REGULATOR_ID_SBB1] = &max77651_SBB1_desc; + rdescs[MAX77650_REGULATOR_ID_SBB2] = &max77651_SBB2_desc; + break; + default: + return -ENODEV; + } + + config.dev = dev; + + for (i = 0; i < MAX77650_REGULATOR_NUM_REGULATORS; i++) { + rdesc = rdescs[i]; + config.driver_data = rdesc; + config.of_node = NULL; + config.init_data = NULL; + + for_each_child_of_node(dev->of_node, child) { + if (!of_node_name_eq(child, rdesc->desc.name)) + continue; + + init_data = of_get_regulator_init_data(dev, child, + &rdesc->desc); + if (!init_data) + return -ENOMEM; + + config.of_node = child; + config.init_data = init_data; + } + + rdev = devm_regulator_register(dev, &rdesc->desc, &config); + if (IS_ERR(rdev)) + return PTR_ERR(rdev); + } + + return 0; +} + +static struct platform_driver max77650_regulator_driver = { + .driver = { + .name = "max77650-regulator", + }, + .probe = max77650_regulator_probe, +}; +module_platform_driver(max77650_regulator_driver); + +MODULE_DESCRIPTION("MAXIM 77650/77651 regulator driver"); +MODULE_AUTHOR("Bartosz Golaszewski "); +MODULE_LICENSE("GPL"); From patchwork Fri Jan 18 13:42:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10770165 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 949876C5 for ; Fri, 18 Jan 2019 13:43:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 84C3A295A4 for ; Fri, 18 Jan 2019 13:43:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 788CF29731; Fri, 18 Jan 2019 13:43:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C0B4F295A4 for ; Fri, 18 Jan 2019 13:43:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727804AbfARNny (ORCPT ); Fri, 18 Jan 2019 08:43:54 -0500 Received: from mail-wr1-f68.google.com ([209.85.221.68]:45302 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727806AbfARNnT (ORCPT ); Fri, 18 Jan 2019 08:43:19 -0500 Received: by mail-wr1-f68.google.com with SMTP id t6so15067481wrr.12 for ; Fri, 18 Jan 2019 05:43:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=yju46Oy4aUbWiije2wldy6IO4Nk6waPrfKjdrZFFDbE=; b=BbpSE52q5QT4jnNyFryG32VYqqpVRar+MfXoVRr8+9X8b2wr6RXOTrg01GlwhX8krF Sn5+FXdtkKl79cHJRAtz3xaHi3lKe084P130wy0tgdnMuyOCfmDOLNIH6hKciQYnppuC Ci3ARM2EbAWgf4oZFTCUHbz81FQK84koqRdztENjuWrqcG6Ygg8L8peeO94QaH7Ae+p4 9OoSlSVUPW5s09L1A+I3I+PJNqyV581Wk8A7uuLBcgYE2euG9Oxsa03eTBUQBhH66svu 3H8f5U7I1y7xzH9lG/j2YLxnfiQMFnH2DdX9waDr9FvNzFwrUZzIO3GnHSScSAPlAVqG aHog== 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=yju46Oy4aUbWiije2wldy6IO4Nk6waPrfKjdrZFFDbE=; b=QB27LanKCWuKMDu/2XWOfjP/z+u/hP4Kys15Rk8E385qmF6FII4Mi8/BQXaSUJTsgM Nv89x6w0q8vVf6gbJhv39ASLMZMWAGX5kHWNd92k0hjwj/Zh1hWLg/6/bKpxq+QliQ+t PZHN83N8/VlKS8vVvArTL3392k/NYO0EJKNQfPKa7+zsJPijrEABybJNjkFbBKaSbJ3X J7Re3RUVR0PcNouPMKdZ8OTyIYocJU2dhMensESi7GFGykrBuI8abcf25GT4gFPjgt/n qaGrF0ZIFaEP6YVIypVpufvek5EplE66QVaZ8mVOcZuHtF0pzX6p6gv8md6v8XIuG+v6 9RSg== X-Gm-Message-State: AJcUukcUEjOjKxdxtzQ3b6UbHR4qxjsNZoQsUPLRKrHQuwAr16uqlftN beb1NVVF6zCDXg/9uKkJMCBatg== X-Google-Smtp-Source: ALg8bN6HmkF/fshRGpJ+ox2ZWIojDMBVoP3VSWHy9fKKPEgcFW65fzvCxA5ZyZlT24GyjjTl1aIp0g== X-Received: by 2002:adf:d4c9:: with SMTP id w9mr16621107wrk.119.1547818996144; Fri, 18 Jan 2019 05:43:16 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id a132sm51033934wmh.5.2019.01.18.05.43.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Jan 2019 05:43:15 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , Mark Brown , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 09/13] power: supply: max77650: add support for battery charger Date: Fri, 18 Jan 2019 14:42:40 +0100 Message-Id: <20190118134244.22253-10-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190118134244.22253-1-brgl@bgdev.pl> References: <20190118134244.22253-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Bartosz Golaszewski Add basic support for the battery charger for max77650 PMIC. Signed-off-by: Bartosz Golaszewski --- drivers/power/supply/Kconfig | 7 + drivers/power/supply/Makefile | 1 + drivers/power/supply/max77650-charger.c | 347 ++++++++++++++++++++++++ 3 files changed, 355 insertions(+) create mode 100644 drivers/power/supply/max77650-charger.c diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig index e901b9879e7e..0230c96fa94d 100644 --- a/drivers/power/supply/Kconfig +++ b/drivers/power/supply/Kconfig @@ -499,6 +499,13 @@ config CHARGER_DETECTOR_MAX14656 Revision 1.2 and can be found e.g. in Kindle 4/5th generation readers and certain LG devices. +config CHARGER_MAX77650 + tristate "Maxim MAX77650 battery charger driver" + depends on MFD_MAX77650 + help + Say Y to enable support for the battery charger control of MAX77650 + PMICs. + config CHARGER_MAX77693 tristate "Maxim MAX77693 battery charger driver" depends on MFD_MAX77693 diff --git a/drivers/power/supply/Makefile b/drivers/power/supply/Makefile index b731c2a9b695..b73eb8c5c1a9 100644 --- a/drivers/power/supply/Makefile +++ b/drivers/power/supply/Makefile @@ -70,6 +70,7 @@ obj-$(CONFIG_CHARGER_MANAGER) += charger-manager.o obj-$(CONFIG_CHARGER_LTC3651) += ltc3651-charger.o obj-$(CONFIG_CHARGER_MAX14577) += max14577_charger.o obj-$(CONFIG_CHARGER_DETECTOR_MAX14656) += max14656_charger_detector.o +obj-$(CONFIG_CHARGER_MAX77650) += max77650-charger.o obj-$(CONFIG_CHARGER_MAX77693) += max77693_charger.o obj-$(CONFIG_CHARGER_MAX8997) += max8997_charger.o obj-$(CONFIG_CHARGER_MAX8998) += max8998_charger.o diff --git a/drivers/power/supply/max77650-charger.c b/drivers/power/supply/max77650-charger.c new file mode 100644 index 000000000000..fb9d8f933174 --- /dev/null +++ b/drivers/power/supply/max77650-charger.c @@ -0,0 +1,347 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2018 BayLibre SAS + * Author: Bartosz Golaszewski + * + * Battery charger driver for MAXIM 77650/77651 charger/power-supply. + */ + +#include +#include +#include +#include +#include +#include +#include + +#define MAX77650_CHARGER_ENABLED BIT(0) +#define MAX77650_CHARGER_DISABLED 0x00 +#define MAX77650_CHARGER_CHG_EN_MASK BIT(0) + +#define MAX77650_CHARGER_CHG_DTLS_MASK GENMASK(7, 4) +#define MAX77650_CHARGER_CHG_DTLS_BITS(_reg) \ + (((_reg) & MAX77650_CHARGER_CHG_DTLS_MASK) >> 4) + +#define MAX77650_CHARGER_CHG_OFF 0x00 +#define MAX77650_CHARGER_CHG_PREQ 0x01 +#define MAX77650_CHARGER_CHG_ON_CURR 0x02 +#define MAX77650_CHARGER_CHG_ON_JCURR 0x03 +#define MAX77650_CHARGER_CHG_ON_VOLT 0x04 +#define MAX77650_CHARGER_CHG_ON_JVOLT 0x05 +#define MAX77650_CHARGER_CHG_ON_TOPOFF 0x06 +#define MAX77650_CHARGER_CHG_ON_JTOPOFF 0x07 +#define MAX77650_CHARGER_CHG_DONE 0x08 +#define MAX77650_CHARGER_CHG_JDONE 0x09 +#define MAX77650_CHARGER_CHG_SUSP_PF 0x0a +#define MAX77650_CHARGER_CHG_SUSP_FCF 0x0b +#define MAX77650_CHARGER_CHG_SUSP_BTF 0x0c + +#define MAX77650_CHARGER_CHGIN_DTLS_MASK GENMASK(3, 2) +#define MAX77650_CHARGER_CHGIN_DTLS_BITS(_reg) \ + (((_reg) & MAX77650_CHARGER_CHGIN_DTLS_MASK) >> 2) + +#define MAX77650_CHARGER_CHGIN_UVL 0x00 +#define MAX77650_CHARGER_CHGIN_OVL 0x01 +#define MAX77650_CHARGER_CHGIN_OKAY 0x11 + +#define MAX77650_CHARGER_CHG_MASK BIT(1) +#define MAX77650_CHARGER_CHG_CHARGING(_reg) \ + (((_reg) & MAX77650_CHARGER_CHG_MASK) > 1) + +#define MAX77650_CHARGER_VCHGIN_MIN_MASK 0xc0 +#define MAX77650_CHARGER_VCHGIN_MIN_SHIFT(_val) ((_val) << 5) + +#define MAX77650_CHARGER_ICHGIN_LIM_MASK 0x1c +#define MAX77650_CHARGER_ICHGIN_LIM_SHIFT(_val) ((_val) << 2) + +struct max77650_charger_data { + struct regmap *map; + struct device *dev; +}; + +static enum power_supply_property max77650_charger_properties[] = { + POWER_SUPPLY_PROP_STATUS, + POWER_SUPPLY_PROP_ONLINE, + POWER_SUPPLY_PROP_CHARGE_TYPE +}; + +static const unsigned int max77650_charger_vchgin_min_table[] = { + 4000000, 4100000, 4200000, 4300000, 4400000, 4500000, 4600000, 4700000 +}; + +static const unsigned int max77650_charger_ichgin_lim_table[] = { + 95000, 190000, 285000, 380000, 475000 +}; + +static int max77650_charger_set_vchgin_min(struct max77650_charger_data *chg, + unsigned int val) +{ + int i, rv; + + for (i = 0; i < ARRAY_SIZE(max77650_charger_vchgin_min_table); i++) { + if (val == max77650_charger_vchgin_min_table[i]) { + rv = regmap_update_bits(chg->map, + MAX77650_REG_CNFG_CHG_B, + MAX77650_CHARGER_VCHGIN_MIN_MASK, + MAX77650_CHARGER_VCHGIN_MIN_SHIFT(i)); + if (rv) + return rv; + + return 0; + } + } + + return -EINVAL; +} + +static int max77650_charger_set_ichgin_lim(struct max77650_charger_data *chg, + unsigned int val) +{ + int i, rv; + + for (i = 0; i < ARRAY_SIZE(max77650_charger_ichgin_lim_table); i++) { + if (val == max77650_charger_ichgin_lim_table[i]) { + rv = regmap_update_bits(chg->map, + MAX77650_REG_CNFG_CHG_B, + MAX77650_CHARGER_ICHGIN_LIM_MASK, + MAX77650_CHARGER_ICHGIN_LIM_SHIFT(i)); + if (rv) + return rv; + + return 0; + } + } + + return -EINVAL; +} + +static void max77650_charger_enable(struct max77650_charger_data *chg) +{ + int rv; + + rv = regmap_update_bits(chg->map, + MAX77650_REG_CNFG_CHG_B, + MAX77650_CHARGER_CHG_EN_MASK, + MAX77650_CHARGER_ENABLED); + if (rv) + dev_err(chg->dev, "unable to enable the charger: %d\n", rv); +} + +static void max77650_charger_disable(struct max77650_charger_data *chg) +{ + int rv; + + rv = regmap_update_bits(chg->map, + MAX77650_REG_CNFG_CHG_B, + MAX77650_CHARGER_CHG_EN_MASK, + MAX77650_CHARGER_DISABLED); + if (rv) + dev_err(chg->dev, "unable to disable the charger: %d\n", rv); +} + +static irqreturn_t max77650_charger_check_status(int irq, void *data) +{ + struct max77650_charger_data *chg = data; + int rv, reg; + + rv = regmap_read(chg->map, MAX77650_REG_STAT_CHG_B, ®); + if (rv) { + dev_err(chg->dev, + "unable to read the charger status: %d\n", rv); + return IRQ_HANDLED; + } + + switch (MAX77650_CHARGER_CHGIN_DTLS_BITS(reg)) { + case MAX77650_CHARGER_CHGIN_UVL: + dev_err(chg->dev, "undervoltage lockout detected, disabling charger\n"); + max77650_charger_disable(chg); + break; + case MAX77650_CHARGER_CHGIN_OVL: + dev_err(chg->dev, "overvoltage lockout detected, disabling charger\n"); + max77650_charger_disable(chg); + break; + case MAX77650_CHARGER_CHGIN_OKAY: + max77650_charger_enable(chg); + break; + default: + /* May be 0x10 - debouncing */ + break; + } + + return IRQ_HANDLED; +} + +static int max77650_charger_get_property(struct power_supply *psy, + enum power_supply_property psp, + union power_supply_propval *val) +{ + struct max77650_charger_data *chg = power_supply_get_drvdata(psy); + int rv, reg; + + switch (psp) { + case POWER_SUPPLY_PROP_STATUS: + rv = regmap_read(chg->map, MAX77650_REG_STAT_CHG_B, ®); + if (rv) + return rv; + + if (MAX77650_CHARGER_CHG_CHARGING(reg)) { + val->intval = POWER_SUPPLY_STATUS_CHARGING; + break; + } + + switch (MAX77650_CHARGER_CHG_DTLS_BITS(reg)) { + case MAX77650_CHARGER_CHG_OFF: + case MAX77650_CHARGER_CHG_SUSP_PF: + case MAX77650_CHARGER_CHG_SUSP_FCF: + case MAX77650_CHARGER_CHG_SUSP_BTF: + val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING; + break; + case MAX77650_CHARGER_CHG_PREQ: + case MAX77650_CHARGER_CHG_ON_CURR: + case MAX77650_CHARGER_CHG_ON_JCURR: + case MAX77650_CHARGER_CHG_ON_VOLT: + case MAX77650_CHARGER_CHG_ON_JVOLT: + case MAX77650_CHARGER_CHG_ON_TOPOFF: + case MAX77650_CHARGER_CHG_ON_JTOPOFF: + val->intval = POWER_SUPPLY_STATUS_CHARGING; + break; + case MAX77650_CHARGER_CHG_DONE: + val->intval = POWER_SUPPLY_STATUS_FULL; + break; + default: + val->intval = POWER_SUPPLY_STATUS_UNKNOWN; + } + break; + case POWER_SUPPLY_PROP_ONLINE: + rv = regmap_read(chg->map, MAX77650_REG_STAT_CHG_B, ®); + if (rv) + return rv; + + val->intval = MAX77650_CHARGER_CHG_CHARGING(reg); + break; + case POWER_SUPPLY_PROP_CHARGE_TYPE: + rv = regmap_read(chg->map, MAX77650_REG_STAT_CHG_B, ®); + if (rv) + return rv; + + if (!MAX77650_CHARGER_CHG_CHARGING(reg)) { + val->intval = POWER_SUPPLY_CHARGE_TYPE_NONE; + break; + } + + switch (MAX77650_CHARGER_CHG_DTLS_BITS(reg)) { + case MAX77650_CHARGER_CHG_PREQ: + case MAX77650_CHARGER_CHG_ON_CURR: + case MAX77650_CHARGER_CHG_ON_JCURR: + case MAX77650_CHARGER_CHG_ON_VOLT: + case MAX77650_CHARGER_CHG_ON_JVOLT: + val->intval = POWER_SUPPLY_CHARGE_TYPE_FAST; + break; + case MAX77650_CHARGER_CHG_ON_TOPOFF: + case MAX77650_CHARGER_CHG_ON_JTOPOFF: + val->intval = POWER_SUPPLY_CHARGE_TYPE_TRICKLE; + break; + default: + val->intval = POWER_SUPPLY_CHARGE_TYPE_UNKNOWN; + } + break; + default: + return -EINVAL; + } + + return 0; +} + +static const struct power_supply_desc max77650_battery_desc = { + .name = "max77650", + .type = POWER_SUPPLY_TYPE_BATTERY, + .get_property = max77650_charger_get_property, + .properties = max77650_charger_properties, + .num_properties = ARRAY_SIZE(max77650_charger_properties), +}; + +static int max77650_charger_probe(struct platform_device *pdev) +{ + struct regmap_irq_chip_data *irq_data; + struct power_supply_config pscfg = {}; + struct max77650_charger_data *chg; + struct power_supply *battery; + struct device *dev, *parent; + int rv, chg_irq, chgin_irq; + struct i2c_client *i2c; + unsigned int prop; + + dev = &pdev->dev; + parent = dev->parent; + i2c = to_i2c_client(parent); + irq_data = i2c_get_clientdata(i2c); + + chg = devm_kzalloc(dev, sizeof(*chg), GFP_KERNEL); + if (!chg) + return -ENOMEM; + + chg->map = dev_get_regmap(parent, NULL); + if (!chg->map) + return -ENODEV; + + chg->dev = dev; + + pscfg.of_node = dev->of_node; + pscfg.drv_data = chg; + + chg_irq = regmap_irq_get_virq(irq_data, MAX77650_INT_CHG); + if (chg_irq <= 0) + return -EINVAL; + + chgin_irq = regmap_irq_get_virq(irq_data, MAX77650_INT_CHGIN); + if (chgin_irq <= 0) + return -EINVAL; + + rv = devm_request_threaded_irq(dev, chg_irq, NULL, + max77650_charger_check_status, + IRQF_ONESHOT, "chg", chg); + if (rv) + return rv; + + rv = devm_request_threaded_irq(dev, chgin_irq, NULL, + max77650_charger_check_status, + IRQF_ONESHOT, "chgin", chg); + if (rv) + return rv; + + battery = devm_power_supply_register(dev, + &max77650_battery_desc, &pscfg); + if (IS_ERR(battery)) + return PTR_ERR(battery); + + rv = of_property_read_u32(dev->of_node, "maxim,vchgin-min", &prop); + if (rv == 0) { + rv = max77650_charger_set_vchgin_min(chg, prop); + if (rv) + return rv; + } + + rv = of_property_read_u32(dev->of_node, "maxim,ichgin-lim", &prop); + if (rv == 0) { + rv = max77650_charger_set_ichgin_lim(chg, prop); + if (rv) + return rv; + } + + return regmap_update_bits(chg->map, + MAX77650_REG_CNFG_CHG_B, + MAX77650_CHARGER_CHG_EN_MASK, + MAX77650_CHARGER_ENABLED); +} + +static struct platform_driver max77650_charger_driver = { + .driver = { + .name = "max77650-charger", + }, + .probe = max77650_charger_probe, +}; +module_platform_driver(max77650_charger_driver); + +MODULE_DESCRIPTION("MAXIM 77650/77651 charger driver"); +MODULE_AUTHOR("Bartosz Golaszewski "); +MODULE_LICENSE("GPL"); From patchwork Fri Jan 18 13:42:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10770161 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B0C191390 for ; Fri, 18 Jan 2019 13:43:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9F6EF295A4 for ; Fri, 18 Jan 2019 13:43:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 938AC296F1; Fri, 18 Jan 2019 13:43:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DA15F295A4 for ; Fri, 18 Jan 2019 13:43:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727854AbfARNnl (ORCPT ); Fri, 18 Jan 2019 08:43:41 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:46222 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727850AbfARNnU (ORCPT ); Fri, 18 Jan 2019 08:43:20 -0500 Received: by mail-wr1-f65.google.com with SMTP id l9so15045586wrt.13 for ; Fri, 18 Jan 2019 05:43:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=b7GG3XEgt2NPOKiP92/4vQ+rpuGmgCrv8THIa/2i3M8=; b=12lAkieXrNDGb7HTzAtpPk9S+qAtpbmIEuA3xr/ammLkT0cEZB4U2M+TTVMLmvp72K CPJ/YAK3sFhOj1DPXuEMIkLRsMdNccN61gy9/lUG5V9gjvq5r8AHbpygjlPNKvi1aWWY Dm7hsczYpsg2+2OFjxr5rN4gLd01RiJ0EJHFvLf7Bs/fSjQJVPQsqCsMUgflnnSHj4dM I4ZXnuHpGvdpSmblAfaOg3U6JeeYN4rwKhe8f1nf7T3ArDCGQlg6bcSH35p0hv62V4nE 6xhVPucFMdNPkY7TxhfbyMtlPQmA6/dAJUtqKTd4wyBR5XTWXBNlgyLdKjIGnJI/JPYG W+HA== 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=b7GG3XEgt2NPOKiP92/4vQ+rpuGmgCrv8THIa/2i3M8=; b=aoAc1KTPQXjG3BVHjJotf7EJdp3FE1k5toox0O+ncC45WR979v24WY7/c+1jqGZPfs 4BADbqGEDJIqawBsD0aE7iieka4aWeXZLrOONL9bwszIcymisR4T2G2ZNXlGPx6dp/jX XMnQCzcODM9zwkZl6tGQnJFIPZ8oFM5jOK29MQAvIiUy37Jui9GfV7t1y9c+pKCSw3RU 53Z1/QzNRgfuo54JngR7PX5sha3Tva5FNNL+IebIYJf7q9teW3s8c9lL5mGADM78Ppn5 aVJRAq34O1zPClfGnD7skpGOL8OxLBzDc7P0p4+Stdl8NJ0zF+Z830lWRkIdghsiIV0i 65Dg== X-Gm-Message-State: AJcUukdeVY5Cw0kNoCcBrleFdnisJ1QQ17vFQvHn7tMyxd0VeDvd7Iwe V52fKSoHpsIlvbWv6vL96i2ksQ== X-Google-Smtp-Source: ALg8bN4KH0FoeowAVBxC9j6MAXnkNZld7OqTdrXqpIX7iCTWejt2rm6EkcVfXIXFX5xIZDFFkEf3cQ== X-Received: by 2002:a5d:4586:: with SMTP id p6mr16107044wrq.69.1547818997498; Fri, 18 Jan 2019 05:43:17 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id a132sm51033934wmh.5.2019.01.18.05.43.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Jan 2019 05:43:16 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , Mark Brown , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 10/13] gpio: max77650: add GPIO support Date: Fri, 18 Jan 2019 14:42:41 +0100 Message-Id: <20190118134244.22253-11-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190118134244.22253-1-brgl@bgdev.pl> References: <20190118134244.22253-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Bartosz Golaszewski Add GPIO support for max77650 mfd device. This PMIC exposes a single GPIO line. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/Kconfig | 7 ++ drivers/gpio/Makefile | 1 + drivers/gpio/gpio-max77650.c | 189 +++++++++++++++++++++++++++++++++++ 3 files changed, 197 insertions(+) create mode 100644 drivers/gpio/gpio-max77650.c diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index b5a2845347ec..fb297fe5bfec 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -1095,6 +1095,13 @@ config GPIO_MAX77620 driver also provides interrupt support for each of the gpios. Say yes here to enable the max77620 to be used as gpio controller. +config GPIO_MAX77650 + tristate "Maxim MAX77650/77651 GPIO support" + depends on MFD_MAX77650 + help + GPIO driver for MAX77650/77651 PMIC from Maxim Semiconductor. + These chips have a single pin that can be configured as GPIO. + config GPIO_MSIC bool "Intel MSIC mixed signal gpio support" depends on (X86 || COMPILE_TEST) && MFD_INTEL_MSIC diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index 37628f8dbf70..8bdad50db822 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -78,6 +78,7 @@ obj-$(CONFIG_GPIO_MAX7300) += gpio-max7300.o obj-$(CONFIG_GPIO_MAX7301) += gpio-max7301.o obj-$(CONFIG_GPIO_MAX732X) += gpio-max732x.o obj-$(CONFIG_GPIO_MAX77620) += gpio-max77620.o +obj-$(CONFIG_GPIO_MAX77650) += gpio-max77650.o obj-$(CONFIG_GPIO_MB86S7X) += gpio-mb86s7x.o obj-$(CONFIG_GPIO_MENZ127) += gpio-menz127.o obj-$(CONFIG_GPIO_MERRIFIELD) += gpio-merrifield.o diff --git a/drivers/gpio/gpio-max77650.c b/drivers/gpio/gpio-max77650.c new file mode 100644 index 000000000000..f8fe2b083e4d --- /dev/null +++ b/drivers/gpio/gpio-max77650.c @@ -0,0 +1,189 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2018 BayLibre SAS + * Author: Bartosz Golaszewski + * + * GPIO driver for MAXIM 77650/77651 charger/power-supply. + */ + +#include +#include +#include +#include +#include +#include + +#define MAX77650_GPIO_DIR_MASK BIT(0) +#define MAX77650_GPIO_INVAL_MASK BIT(1) +#define MAX77650_GPIO_DRV_MASK BIT(2) +#define MAX77650_GPIO_OUTVAL_MASK BIT(3) +#define MAX77650_GPIO_DEBOUNCE_MASK BIT(4) + +#define MAX77650_GPIO_DIR_OUT 0x00 +#define MAX77650_GPIO_DIR_IN BIT(0) +#define MAX77650_GPIO_OUT_LOW 0x00 +#define MAX77650_GPIO_OUT_HIGH BIT(3) +#define MAX77650_GPIO_DRV_OPEN_DRAIN 0x00 +#define MAX77650_GPIO_DRV_PUSH_PULL BIT(2) +#define MAX77650_GPIO_DEBOUNCE BIT(4) + +#define MAX77650_GPIO_DIR_BITS(_reg) \ + ((_reg) & MAX77650_GPIO_DIR_MASK) +#define MAX77650_GPIO_INVAL_BITS(_reg) \ + (((_reg) & MAX77650_GPIO_INVAL_MASK) >> 1) + +struct max77650_gpio_chip { + struct regmap *map; + struct regmap_irq_chip_data *irq_chip_data; + struct gpio_chip gc; +}; + +static int max77650_gpio_direction_input(struct gpio_chip *gc, + unsigned int offset) +{ + struct max77650_gpio_chip *chip = gpiochip_get_data(gc); + + return regmap_update_bits(chip->map, + MAX77650_REG_CNFG_GPIO, + MAX77650_GPIO_DIR_MASK, + MAX77650_GPIO_DIR_IN); +} + +static int max77650_gpio_direction_output(struct gpio_chip *gc, + unsigned int offset, int value) +{ + struct max77650_gpio_chip *chip = gpiochip_get_data(gc); + int mask, regval; + + mask = MAX77650_GPIO_DIR_MASK | MAX77650_GPIO_OUTVAL_MASK; + regval = value ? MAX77650_GPIO_OUT_HIGH : MAX77650_GPIO_OUT_LOW; + regval |= MAX77650_GPIO_DIR_OUT; + + return regmap_update_bits(chip->map, + MAX77650_REG_CNFG_GPIO, mask, regval); +} + +static void max77650_gpio_set_value(struct gpio_chip *gc, + unsigned int offset, int value) +{ + struct max77650_gpio_chip *chip = gpiochip_get_data(gc); + int rv, regval; + + regval = value ? MAX77650_GPIO_OUT_HIGH : MAX77650_GPIO_OUT_LOW; + + rv = regmap_update_bits(chip->map, MAX77650_REG_CNFG_GPIO, + MAX77650_GPIO_OUTVAL_MASK, regval); + if (rv) + dev_err(gc->parent, "cannot set GPIO value: %d\n", rv); +} + +static int max77650_gpio_get_value(struct gpio_chip *gc, + unsigned int offset) +{ + struct max77650_gpio_chip *chip = gpiochip_get_data(gc); + unsigned int val; + int rv; + + rv = regmap_read(chip->map, MAX77650_REG_CNFG_GPIO, &val); + if (rv) + return rv; + + return MAX77650_GPIO_INVAL_BITS(val); +} + +static int max77650_gpio_get_direction(struct gpio_chip *gc, + unsigned int offset) +{ + struct max77650_gpio_chip *chip = gpiochip_get_data(gc); + unsigned int val; + int rv; + + rv = regmap_read(chip->map, MAX77650_REG_CNFG_GPIO, &val); + if (rv) + return rv; + + return MAX77650_GPIO_DIR_BITS(val); +} + +static int max77650_gpio_set_config(struct gpio_chip *gc, + unsigned int offset, unsigned long cfg) +{ + struct max77650_gpio_chip *chip = gpiochip_get_data(gc); + + switch (pinconf_to_config_param(cfg)) { + case PIN_CONFIG_DRIVE_OPEN_DRAIN: + return regmap_update_bits(chip->map, + MAX77650_REG_CNFG_GPIO, + MAX77650_GPIO_DRV_MASK, + MAX77650_GPIO_DRV_OPEN_DRAIN); + case PIN_CONFIG_DRIVE_PUSH_PULL: + return regmap_update_bits(chip->map, + MAX77650_REG_CNFG_GPIO, + MAX77650_GPIO_DRV_MASK, + MAX77650_GPIO_DRV_PUSH_PULL); + case PIN_CONFIG_INPUT_DEBOUNCE: + return regmap_update_bits(chip->map, + MAX77650_REG_CNFG_GPIO, + MAX77650_GPIO_DEBOUNCE_MASK, + MAX77650_GPIO_DEBOUNCE); + default: + return -ENOTSUPP; + } +} + +static int max77650_gpio_to_irq(struct gpio_chip *gc, unsigned int offset) +{ + struct max77650_gpio_chip *chip = gpiochip_get_data(gc); + + return regmap_irq_get_virq(chip->irq_chip_data, MAX77650_INT_GPI); +} + +static int max77650_gpio_probe(struct platform_device *pdev) +{ + struct max77650_gpio_chip *chip; + struct device *dev, *parent; + struct i2c_client *i2c; + + dev = &pdev->dev; + parent = dev->parent; + i2c = to_i2c_client(parent); + + chip = devm_kzalloc(dev, sizeof(*chip), GFP_KERNEL); + if (!chip) + return -ENOMEM; + + chip->map = dev_get_regmap(parent, NULL); + if (!chip->map) + return -ENODEV; + + chip->irq_chip_data = i2c_get_clientdata(i2c); + + chip->gc.base = -1; + chip->gc.ngpio = 1; + chip->gc.label = i2c->name; + chip->gc.parent = dev; + chip->gc.owner = THIS_MODULE; + chip->gc.can_sleep = true; + + chip->gc.direction_input = max77650_gpio_direction_input; + chip->gc.direction_output = max77650_gpio_direction_output; + chip->gc.set = max77650_gpio_set_value; + chip->gc.get = max77650_gpio_get_value; + chip->gc.get_direction = max77650_gpio_get_direction; + chip->gc.set_config = max77650_gpio_set_config; + chip->gc.to_irq = max77650_gpio_to_irq; + + return devm_gpiochip_add_data(dev, &chip->gc, chip); +} + +static struct platform_driver max77650_gpio_driver = { + .driver = { + .name = "max77650-gpio", + }, + .probe = max77650_gpio_probe, +}; +module_platform_driver(max77650_gpio_driver); + +MODULE_DESCRIPTION("MAXIM 77650/77651 GPIO driver"); +MODULE_AUTHOR("Bartosz Golaszewski "); +MODULE_LICENSE("GPL"); From patchwork Fri Jan 18 13:42:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10770157 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5E09C17FB for ; Fri, 18 Jan 2019 13:43:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4D6612E5AF for ; Fri, 18 Jan 2019 13:43:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 412FF2E5B4; Fri, 18 Jan 2019 13:43:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B2E482E5AF for ; Fri, 18 Jan 2019 13:43:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727784AbfARNnj (ORCPT ); Fri, 18 Jan 2019 08:43:39 -0500 Received: from mail-wr1-f66.google.com ([209.85.221.66]:36124 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727854AbfARNnU (ORCPT ); Fri, 18 Jan 2019 08:43:20 -0500 Received: by mail-wr1-f66.google.com with SMTP id u4so15125464wrp.3 for ; Fri, 18 Jan 2019 05:43:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KkzVP3QcY5pUSFATtiQjGoFup8VMxpPvK5ZMUkSUxAM=; b=Lw6XqOoN9YcTWqwlXeTVIirP3LSYGHzAAX8XE3Q3Yegj6j7vGygj+/tZg9ZZ9cWnPt BaeUhe7ccvQZDdvKf1Qx2LoNKx9qycmsoEnJBmJzbVovZu+uBj438to/O1kFJdQocUHV qJ7QJcS/W03Wym7gboncZnIu8a38oiuVmGuPNZGOvRp8qNCib8ET3XNsp2DZLUa2qi61 MN8xSDXWBmUnmGM4TV049bdtYEVd7uTCBifcAvjcPbDPhUOWZSY4JqBjkps2/utQmf1Y zG792rFuBv/9QMegBHiQ11tljtwtn8OrsAEVBl07VK/tOQ7ngOJUI15bkwsrlDUCxAtb b4/A== 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=KkzVP3QcY5pUSFATtiQjGoFup8VMxpPvK5ZMUkSUxAM=; b=efduUqMP1Y9xHE6av9nr753YNoii4C+uu7y5fR6oVwhnZMUoWeeo73OAjK0usVaCKh 7+rH466rbFN/Ldkp82DEwfbJtvmY8Gkn0RXPPxBBoq/2hHDXj+bZJ97mUPN8iVntzXwg HZCGnWF8zX0yoNKJ2nU62PMsj1WvhcHQJwPIx2NG4pl6DrYM9z1ohmbnwFi+kG5K95Ms EJJ7YynUNGMQmIW+5ubL7kdnAtTMOe2zuOJfP8zsHWifo1bOVvATmJb9C1tVlHi1Xqar otArTQjH8hwsUNyGFmspPiJ7RZIJOZviWz0I+kxiUlxOGTgadrxZ+e7Sa8AUEu3997Jy 9i4w== X-Gm-Message-State: AJcUukdOpt6xkpEUhm4b/SGX8Y4GH2Q7el7SvE1EBp5P3RiVYNWwqsQB SF9cPQFl99Pf0cJBOU6R41iXGA== X-Google-Smtp-Source: ALg8bN4J0ZA9v9dtSVKwDj7dxnczDgJiqTwEgLyT/iQwggz7WXQX2/rNBQdF9u8Mgbo6rA4wXvDx1Q== X-Received: by 2002:adf:ef0d:: with SMTP id e13mr16425427wro.29.1547818998916; Fri, 18 Jan 2019 05:43:18 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id a132sm51033934wmh.5.2019.01.18.05.43.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Jan 2019 05:43:18 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , Mark Brown , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 11/13] leds: max77650: add LEDs support Date: Fri, 18 Jan 2019 14:42:42 +0100 Message-Id: <20190118134244.22253-12-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190118134244.22253-1-brgl@bgdev.pl> References: <20190118134244.22253-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Bartosz Golaszewski This adds basic support for LEDs for the max77650 PMIC. The device has three current sinks for driving LEDs. Signed-off-by: Bartosz Golaszewski --- drivers/leds/Kconfig | 6 ++ drivers/leds/Makefile | 1 + drivers/leds/leds-max77650.c | 162 +++++++++++++++++++++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 drivers/leds/leds-max77650.c diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig index a72f97fca57b..6e7a8f51eccc 100644 --- a/drivers/leds/Kconfig +++ b/drivers/leds/Kconfig @@ -608,6 +608,12 @@ config LEDS_TLC591XX This option enables support for Texas Instruments TLC59108 and TLC59116 LED controllers. +config LEDS_MAX77650 + tristate "LED support for Maxim MAX77650 PMIC" + depends on MFD_MAX77650 + help + LEDs driver for MAX77650 family of PMICs from Maxim Integrated." + config LEDS_MAX77693 tristate "LED support for MAX77693 Flash" depends on LEDS_CLASS_FLASH diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile index 4c1b0054f379..f48b2404dbb7 100644 --- a/drivers/leds/Makefile +++ b/drivers/leds/Makefile @@ -61,6 +61,7 @@ obj-$(CONFIG_LEDS_MC13783) += leds-mc13783.o obj-$(CONFIG_LEDS_NS2) += leds-ns2.o obj-$(CONFIG_LEDS_NETXBIG) += leds-netxbig.o obj-$(CONFIG_LEDS_ASIC3) += leds-asic3.o +obj-$(CONFIG_LEDS_MAX77650) += leds-max77650.o obj-$(CONFIG_LEDS_MAX77693) += leds-max77693.o obj-$(CONFIG_LEDS_MAX8997) += leds-max8997.o obj-$(CONFIG_LEDS_LM355x) += leds-lm355x.o diff --git a/drivers/leds/leds-max77650.c b/drivers/leds/leds-max77650.c new file mode 100644 index 000000000000..be2bb1c60448 --- /dev/null +++ b/drivers/leds/leds-max77650.c @@ -0,0 +1,162 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2018 BayLibre SAS + * Author: Bartosz Golaszewski + * + * LEDS driver for MAXIM 77650/77651 charger/power-supply. + */ + +#include +#include +#include +#include +#include +#include + +#define MAX77650_NUM_LEDS 3 + +#define MAX77650_LED_A_BASE 0x40 +#define MAX77650_LED_B_BASE 0x43 + +#define MAX77650_LED_BR_MASK GENMASK(4, 0) +#define MAX77650_LED_EN_MASK GENMASK(7, 6) + +/* Enable EN_LED_MSTR. */ +#define MAX77650_LED_TOP_DEFAULT BIT(0) + +#define MAX77650_LED_ENABLE GENMASK(7, 6) +#define MAX77650_LED_DISABLE 0x00 + +#define MAX77650_LED_A_DEFAULT MAX77650_LED_DISABLE +/* 100% on duty */ +#define MAX77650_LED_B_DEFAULT GENMASK(3, 0) + +struct max77650_leds; + +struct max77650_led { + struct led_classdev cdev; + struct max77650_leds *parent; + unsigned int regA; + unsigned int regB; +}; + +struct max77650_leds { + struct regmap *map; + struct max77650_led leds[MAX77650_NUM_LEDS]; +}; + +static struct max77650_led *max77650_to_led(struct led_classdev *cdev) +{ + return container_of(cdev, struct max77650_led, cdev); +} + +static int max77650_leds_brightness_set(struct led_classdev *cdev, + enum led_brightness brightness) +{ + struct max77650_led *led = max77650_to_led(cdev); + struct regmap *regmap = led->parent->map; + int val, mask; + + mask = MAX77650_LED_BR_MASK | MAX77650_LED_EN_MASK; + + if (brightness == LED_OFF) { + val = MAX77650_LED_DISABLE; + } else { + val = MAX77650_LED_ENABLE; + /* + * We can set the brightness with 5-bit resolution. + * + * For brightness == 1, the bits we're writing will be 0, but + * since we keep LED_FS0 set to 12.8mA full-scale range, the + * LED will be lit slightly. + */ + val |= brightness / 8; + } + + return regmap_update_bits(regmap, led->regA, mask, val); +} + +static int max77650_leds_probe(struct platform_device *pdev) +{ + struct device_node *of_node, *child; + struct max77650_leds *leds; + struct max77650_led *led; + struct device *parent; + struct device *dev; + int rv, num_leds; + u32 reg; + + dev = &pdev->dev; + parent = dev->parent; + of_node = dev->of_node; + + if (!of_node) + return -ENODEV; + + leds = devm_kzalloc(dev, sizeof(*leds), GFP_KERNEL); + if (!leds) + return -ENOMEM; + + leds->map = dev_get_regmap(dev->parent, NULL); + if (!leds->map) + return -ENODEV; + + num_leds = of_get_child_count(of_node); + if (!num_leds || num_leds > MAX77650_NUM_LEDS) + return -ENODEV; + + for_each_child_of_node(of_node, child) { + rv = of_property_read_u32(child, "reg", ®); + if (rv || reg >= MAX77650_NUM_LEDS) + return -EINVAL; + + led = &leds->leds[reg]; + + led->parent = leds; + led->regA = MAX77650_LED_A_BASE + reg; + led->regB = MAX77650_LED_B_BASE + reg; + led->cdev.brightness_set_blocking + = max77650_leds_brightness_set; + + led->cdev.name = of_get_property(child, "label", NULL); + if (!led->cdev.name) + led->cdev.name = child->name; + + of_property_read_string(child, "linux,default-trigger", + &led->cdev.default_trigger); + + rv = devm_of_led_classdev_register(dev, child, &led->cdev); + if (rv) + return rv; + + rv = regmap_write(leds->map, led->regA, + MAX77650_LED_A_DEFAULT); + if (rv) + return rv; + + rv = regmap_write(leds->map, led->regB, + MAX77650_LED_B_DEFAULT); + if (rv) + return rv; + } + + rv = regmap_write(leds->map, + MAX77650_REG_CNFG_LED_TOP, + MAX77650_LED_TOP_DEFAULT); + if (rv) + return rv; + + return 0; +} + +static struct platform_driver max77650_leds_driver = { + .driver = { + .name = "max77650-leds", + }, + .probe = max77650_leds_probe, +}; +module_platform_driver(max77650_leds_driver); + +MODULE_DESCRIPTION("MAXIM 77650/77651 LED driver"); +MODULE_AUTHOR("Bartosz Golaszewski "); +MODULE_LICENSE("GPL"); From patchwork Fri Jan 18 13:42:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10770147 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 962031390 for ; Fri, 18 Jan 2019 13:43:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 82F1A2E597 for ; Fri, 18 Jan 2019 13:43:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7685E2E5B3; Fri, 18 Jan 2019 13:43:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DC4042E597 for ; Fri, 18 Jan 2019 13:43:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727803AbfARNnW (ORCPT ); Fri, 18 Jan 2019 08:43:22 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:36125 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727877AbfARNnW (ORCPT ); Fri, 18 Jan 2019 08:43:22 -0500 Received: by mail-wr1-f65.google.com with SMTP id u4so15125521wrp.3 for ; Fri, 18 Jan 2019 05:43:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=JzjlLjy/nWMhxG251aRaszEIhdqIXSv7BiOJCo7Sexg=; b=AsjDt5QAFNR+xCqfIkCuMW272Xe2luLJhO4IrSfvVkcqkRNRs3uuBwzED1cW5+QQAb 0UXjM3Blm4enRmTVq6j/fV9si6HJCHv0JJ1uAIcADZlIzXnY5b+9vYICHJXXZumvh8Ox Z1UUaBVnpXRGKN6uFtWngWFapd+oBgE0Wk4A77tUUExN5KxDiJQyUOMKxz9KjyCCm0p+ hOJYKwpzXHK/99HT3YhRc7O3Q5N82ym7I1UUUzDAQ4QpDNPzQ4Sxs3tKI7NRczk6PQzT 2xuSUC5S9N76CUfG87MxEDujOXbGL3+Fw7eJJliVPo0yA6iA4izqv8l7TnNvSZwpB4OU rKog== 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=JzjlLjy/nWMhxG251aRaszEIhdqIXSv7BiOJCo7Sexg=; b=YwIXD7EJHNw6xvfoGl+bSw3Rb0u8PGqM0C0HUft7YeINshg6uKLpKne/A1zviBXckA htOAuIloY0JnlwMfyzftn5w0OuwD9dVfEcLENcSbu4SwRx6+1SpZpovTooIYGA6Kg2PB L8YMYv0Ii06pzFIynCl1lUC22BnZG+Pr6VHfpUGrEMKs7Iepw61YaATFgaemR3/KwxZI mBXWafXivppQTcYDBTFv+ODI2qkWIMrbrMG0VxgkLih8DZwTcXa6Y8Qyh+JfC5vBSq0u DYupwe063Ok9H8dOSOkcECQcAFmynvBgshvOAaZrtn/Iydn+TjblJju98vV1z0k3TOPd nQeg== X-Gm-Message-State: AJcUukfl0LbKN1U0xGy2XYLcPxYLgDZG0QzEBTD+/56HN3rTWGnxpjOK AOyQQjdFGG1Lhe/kfOyz9lSWwA== X-Google-Smtp-Source: ALg8bN5xMhx99PrmKexuFBJof7nvZjYvGA2hsbv0dp7NKP0Y93q32NlT2uqvo4WNRd8Nkiy7sl2gug== X-Received: by 2002:a5d:47d1:: with SMTP id l17mr16314659wrs.319.1547819000244; Fri, 18 Jan 2019 05:43:20 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id a132sm51033934wmh.5.2019.01.18.05.43.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Jan 2019 05:43:19 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , Mark Brown , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 12/13] input: max77650: add onkey support Date: Fri, 18 Jan 2019 14:42:43 +0100 Message-Id: <20190118134244.22253-13-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190118134244.22253-1-brgl@bgdev.pl> References: <20190118134244.22253-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Bartosz Golaszewski Add support for the push- and slide-button events for max77650. Signed-off-by: Bartosz Golaszewski --- drivers/input/misc/Kconfig | 9 ++ drivers/input/misc/Makefile | 1 + drivers/input/misc/max77650-onkey.c | 135 ++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 drivers/input/misc/max77650-onkey.c diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index ca59a2be9bc5..bb9c45c1269e 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -180,6 +180,15 @@ config INPUT_M68K_BEEP tristate "M68k Beeper support" depends on M68K +config INPUT_MAX77650_ONKEY + tristate "Maxim MAX77650 ONKEY support" + depends on MFD_MAX77650 + help + Support the ONKEY of the MAX77650 PMIC as an input device. + + To compile this driver as a module, choose M here: the module + will be called max77650-onkey. + config INPUT_MAX77693_HAPTIC tristate "MAXIM MAX77693/MAX77843 haptic controller support" depends on (MFD_MAX77693 || MFD_MAX77843) && PWM diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile index 9d0f9d1ff68f..5bd53590ce60 100644 --- a/drivers/input/misc/Makefile +++ b/drivers/input/misc/Makefile @@ -43,6 +43,7 @@ obj-$(CONFIG_INPUT_IXP4XX_BEEPER) += ixp4xx-beeper.o obj-$(CONFIG_INPUT_KEYSPAN_REMOTE) += keyspan_remote.o obj-$(CONFIG_INPUT_KXTJ9) += kxtj9.o obj-$(CONFIG_INPUT_M68K_BEEP) += m68kspkr.o +obj-$(CONFIG_INPUT_MAX77650_ONKEY) += max77650-onkey.o obj-$(CONFIG_INPUT_MAX77693_HAPTIC) += max77693-haptic.o obj-$(CONFIG_INPUT_MAX8925_ONKEY) += max8925_onkey.o obj-$(CONFIG_INPUT_MAX8997_HAPTIC) += max8997_haptic.o diff --git a/drivers/input/misc/max77650-onkey.c b/drivers/input/misc/max77650-onkey.c new file mode 100644 index 000000000000..cc7e83f589cd --- /dev/null +++ b/drivers/input/misc/max77650-onkey.c @@ -0,0 +1,135 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2018 BayLibre SAS + * Author: Bartosz Golaszewski + * + * ONKEY driver for MAXIM 77650/77651 charger/power-supply. + */ + +#include +#include +#include +#include +#include +#include +#include + +#define MAX77650_ONKEY_MODE_MASK BIT(3) +#define MAX77650_ONKEY_MODE_PUSH 0x00 +#define MAX77650_ONKEY_MODE_SLIDE BIT(3) + +struct max77650_onkey { + struct input_dev *input; + unsigned int code; +}; + +static irqreturn_t +max77650_onkey_report(struct max77650_onkey *onkey, int value) +{ + input_report_key(onkey->input, onkey->code, value); + input_sync(onkey->input); + + return IRQ_HANDLED; +} + +static irqreturn_t max77650_onkey_falling(int irq, void *data) +{ + struct max77650_onkey *onkey = data; + + return max77650_onkey_report(onkey, 0); +} + +static irqreturn_t max77650_onkey_rising(int irq, void *data) +{ + struct max77650_onkey *onkey = data; + + return max77650_onkey_report(onkey, 1); +} + +static int max77650_onkey_probe(struct platform_device *pdev) +{ + struct regmap_irq_chip_data *irq_data; + struct max77650_onkey *onkey; + struct device *dev, *parent; + int irq_r, irq_f, rv, mode; + struct i2c_client *i2c; + const char *mode_prop; + struct regmap *map; + + dev = &pdev->dev; + parent = dev->parent; + i2c = to_i2c_client(parent); + irq_data = i2c_get_clientdata(i2c); + + map = dev_get_regmap(parent, NULL); + if (!map) + return -ENODEV; + + onkey = devm_kzalloc(dev, sizeof(*onkey), GFP_KERNEL); + if (!onkey) + return -ENOMEM; + + rv = device_property_read_u32(dev, "linux,code", &onkey->code); + if (rv) + onkey->code = KEY_POWER; + + rv = device_property_read_string(dev, "maxim,onkey-mode", &mode_prop); + if (rv) + mode_prop = "push"; + + if (strcmp(mode_prop, "push") == 0) + mode = MAX77650_ONKEY_MODE_PUSH; + else if (strcmp(mode_prop, "slide") == 0) + mode = MAX77650_ONKEY_MODE_SLIDE; + else + return -EINVAL; + + rv = regmap_update_bits(map, MAX77650_REG_CNFG_GLBL, + MAX77650_ONKEY_MODE_MASK, mode); + if (rv) + return rv; + + irq_f = regmap_irq_get_virq(irq_data, MAX77650_INT_nEN_F); + if (irq_f <= 0) + return -EINVAL; + + irq_r = regmap_irq_get_virq(irq_data, MAX77650_INT_nEN_R); + if (irq_r <= 0) + return -EINVAL; + + onkey->input = devm_input_allocate_device(dev); + if (!onkey->input) + return -ENOMEM; + + onkey->input->name = "max77650_onkey"; + onkey->input->phys = "max77650_onkey/input0"; + onkey->input->id.bustype = BUS_I2C; + onkey->input->dev.parent = dev; + input_set_capability(onkey->input, EV_KEY, onkey->code); + + rv = devm_request_threaded_irq(dev, irq_f, NULL, + max77650_onkey_falling, + IRQF_ONESHOT, "onkey-down", onkey); + if (rv) + return rv; + + rv = devm_request_threaded_irq(dev, irq_r, NULL, + max77650_onkey_rising, + IRQF_ONESHOT, "onkey-up", onkey); + if (rv) + return rv; + + return input_register_device(onkey->input); +} + +static struct platform_driver max77650_onkey_driver = { + .driver = { + .name = "max77650-onkey", + }, + .probe = max77650_onkey_probe, +}; +module_platform_driver(max77650_onkey_driver); + +MODULE_DESCRIPTION("MAXIM 77650/77651 ONKEY driver"); +MODULE_AUTHOR("Bartosz Golaszewski "); +MODULE_LICENSE("GPL"); From patchwork Fri Jan 18 13:42:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10770153 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6BAA36C5 for ; Fri, 18 Jan 2019 13:43:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5B26C2E597 for ; Fri, 18 Jan 2019 13:43:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4F1B42E5B3; Fri, 18 Jan 2019 13:43:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 06A372E597 for ; Fri, 18 Jan 2019 13:43:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727911AbfARNng (ORCPT ); Fri, 18 Jan 2019 08:43:36 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:41629 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727915AbfARNnX (ORCPT ); Fri, 18 Jan 2019 08:43:23 -0500 Received: by mail-wr1-f67.google.com with SMTP id x10so15078936wrs.8 for ; Fri, 18 Jan 2019 05:43:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=s8KA8pFK+0PJtvt+TimzBASH8n0QQ2+79sGfJ2pgn1c=; b=FLOI+O1/t6VHUBjZtS+cl7SZ6GmIUwfMpUjIri0gth1qhZ9K7hwwVaAMqzqtr4tL3V NlsLx9sulge1Opxl4m+WivAEnqP66s8mQwgyX5XCjR60re+gqQLCzjP9lRZF912F8ukd oIyI4IuCUEzksVcHPc9b5kzOCj0UfDrRD8xPhUnwUuGjnlba14GUj6gy/bgKJmX5Gaqc Ct7VPiaI/0LeAy25SUTjhg0t92lBMwH4lRdfZk1FDsp3pxdctrdI0r7HAW4rRKbxM6uX BF61kbYrAbu/iIhLUn775qjCwFL6xAPHb6jx7SqCTew6M4yjLIacZxeH/XBD6eMc6Fd6 eocg== 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=s8KA8pFK+0PJtvt+TimzBASH8n0QQ2+79sGfJ2pgn1c=; b=RMg1tYBnRCrx4vHSS92nGLwpcHDzY/fTSfaCRyZ4Z9ReKCp64Sd1ljcxElH18zTg3g KdGQzNmQvdIwcNdHMYfI1PgsiFsz0wNGjjKS+nBqzx+4ma+86GyCzR80X3QQfEepiIQe MNb+BfMwc7ycFJWk+68YpQMGw0StAin002SfARBkVLHRnDucibfHFT443PQ/FUIWyXqc hqdF+NECy/pUbeg/6ob6+qwxlXHYEq5VDQtB8f35Yt2n3B5C/AhpU1MQPq3dh+q9/AyK cRbXlcXK0EfXUwCMKCtPMmNAOtGxO4m6SE9YrpZrEdXEvMrU4dd06J+C0wurfgr9Qs4u 3hrQ== X-Gm-Message-State: AJcUukeUq1U+SgTZDoFz4NFH4HqRhaLHkRmOp9QTekJallsgh1Dbf0GS 9JFejYC1DDhyHPZEB9Iw/heSOQ== X-Google-Smtp-Source: ALg8bN5stQtKYwuNF7m4ohACBo+ZZjBsLcsxQoTPG3gLh/UTvBbKO/gsNyYJ9uoxIT5xmN5o3oLLsw== X-Received: by 2002:adf:ed92:: with SMTP id c18mr16960100wro.194.1547819001519; Fri, 18 Jan 2019 05:43:21 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id a132sm51033934wmh.5.2019.01.18.05.43.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 18 Jan 2019 05:43:20 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , Mark Brown , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org, linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 13/13] MAINTAINERS: add an entry for max77650 mfd driver Date: Fri, 18 Jan 2019 14:42:44 +0100 Message-Id: <20190118134244.22253-14-brgl@bgdev.pl> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190118134244.22253-1-brgl@bgdev.pl> References: <20190118134244.22253-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Bartosz Golaszewski I plan on extending this set of drivers so add myself as maintainer. Signed-off-by: Bartosz Golaszewski --- MAINTAINERS | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 4d04cebb4a71..bb29fe250796 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -9220,6 +9220,20 @@ S: Maintained F: Documentation/devicetree/bindings/sound/max9860.txt F: sound/soc/codecs/max9860.* +MAXIM MAX77650 PMIC MFD DRIVER +M: Bartosz Golaszewski +L: linux-kernel@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/*/*max77650.txt +F: Documentation/devicetree/bindings/*/max77650*.txt +F: include/linux/mfd/max77650.h +F: drivers/mfd/max77650.c +F: drivers/regulator/max77650-regulator.c +F: drivers/power/supply/max77650-charger.c +F: drivers/input/misc/max77650-onkey.c +F: drivers/leds/leds-max77650.c +F: drivers/gpio/gpio-max77650.c + MAXIM MAX77802 PMIC REGULATOR DEVICE DRIVER M: Javier Martinez Canillas L: linux-kernel@vger.kernel.org