From patchwork Fri Feb 1 09:47:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10792389 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 BC144159A for ; Fri, 1 Feb 2019 09:49:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AEE213122C for ; Fri, 1 Feb 2019 09:49:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A2C7631242; Fri, 1 Feb 2019 09:49:23 +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 5D30A3122C for ; Fri, 1 Feb 2019 09:49:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729674AbfBAJsG (ORCPT ); Fri, 1 Feb 2019 04:48:06 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:54678 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728716AbfBAJsF (ORCPT ); Fri, 1 Feb 2019 04:48:05 -0500 Received: by mail-wm1-f66.google.com with SMTP id a62so5380305wmh.4 for ; Fri, 01 Feb 2019 01:48:03 -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=LcpQpQ3AxfWeWSRUFYkA1wobTem0k2VnDhGHRGUQrIk=; b=yoRlWuOU3A/z1vvFquellN+LlghCapuFP62X9YL5RndtvfHYwQFbsmqQWTkEV4vphP vKJa+nYkGfIHY2aeqLHSwFgBBmjiEfS3Ct9ZgDriLHboIjNiI/jW1mVWm9LrTzmGkkLB 4D9ZkZtihun59dvputpHXEySgjeVsUyjk2OTb9GPhzz+HCSEeowAGP4DwGG64OPg++0r 2vg47gmmXJBe1Q2ijNu7f7eqpmYxkBMRcKCfWOzPEfEzt7h3yZo6ToWTU/IAIjLZwNv5 O533A4puDqZqIyzAyUtHby/poarkRI50/MyXxznXVJIRnal7f1nlksvj77sGGtpYaYRQ J/HQ== 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=LcpQpQ3AxfWeWSRUFYkA1wobTem0k2VnDhGHRGUQrIk=; b=F80ElbD0n7GWXFUvvUGdIfDahX5dGnh1Kq7TmmV4O29azzvt232RoiMAT70Ko6TpRH YgsiDvp6Oi2s1jVsqzSR4m5vcujQb/uj5QoIPyX7fFRXcX/ZaSsB8TuPxg4D7XJ1vUMI ZkWdL61KXB0r5Jm+hAsWR3f6iAdA62s/l2FhemGZJ/q/99UmAFG/vG9U4LgDBpMcfEwx 0WM2aQesxbFkL6sZb6hiHjQd3aC6iBMS4ycNwUdN/IiOn80TiTm8QmhvYxMFp4JeMx6L yozAIx3AHVwN4Zw7LRINs65UoKbr+ItsJLCpAJkknOmEgshXbgAWvian8zPVkeuKAgl/ sNrw== X-Gm-Message-State: AHQUAuYh3aAd4uU+kSPc+HyvE0oUTcCQBJyu/1OuD/H0sCKtWPCHQB9K b9mYdodY/k0vWOLeAQ+d7bGutw== X-Google-Smtp-Source: AHgI3IZzue2RL5uO2/F9Vz2Ss40sUtjrmvQPaZcb9ndDUmYOKDMzCpd/IeDnyElQcSBUDjVWJ43qpQ== X-Received: by 2002:a7b:c757:: with SMTP id w23mr1530622wmk.59.1549014483311; Fri, 01 Feb 2019 01:48:03 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id m15sm9648970wrr.95.2019.02.01.01.48.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Feb 2019 01:48:02 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , 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 v3 01/11] dt-bindings: mfd: add DT bindings for max77650 Date: Fri, 1 Feb 2019 10:47:26 +0100 Message-Id: <20190201094736.32057-2-brgl@bgdev.pl> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190201094736.32057-1-brgl@bgdev.pl> References: <20190201094736.32057-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@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 Feb 1 09:47:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10792351 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 50992184E for ; Fri, 1 Feb 2019 09:48:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 43E033120F for ; Fri, 1 Feb 2019 09:48:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3840331242; Fri, 1 Feb 2019 09:48:09 +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 E20A03122C for ; Fri, 1 Feb 2019 09:48:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729704AbfBAJsH (ORCPT ); Fri, 1 Feb 2019 04:48:07 -0500 Received: from mail-wr1-f68.google.com ([209.85.221.68]:33756 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729419AbfBAJsG (ORCPT ); Fri, 1 Feb 2019 04:48:06 -0500 Received: by mail-wr1-f68.google.com with SMTP id a16so744391wrv.0 for ; Fri, 01 Feb 2019 01:48: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=88EGuRhmZ5Mi0OmBRzcZ/azoI1Z+qLZaZYAJ4dxXFVk=; b=EDuX1bOsg9LHvn5fwa77omyicg9yciloYvu9RBq33tcJ4hn9D5lLRKL6l3FXMvXTdu PeQVzf5icSdMrdji9xHulYgGk3J5tAWCb/aSTf/nhRHL6cT8rPnEfIcc533F095fwRup WQsy1UWJShSodmDMbWT2FlQ0d1NtrpMT/4iWqQ7GgqUr4mEY32zULgyvC5SBaXL4bJEp 1ly10wRISuFC4RYSbBIf82YUWSdh2JzR5toO/bMQcwlwIKGswWPgfYNw1bD0qtXTVUdq P8t+RpZZEDbuHBoK8bpI6pzWyMmG7DeM/0C/XwORJBtNknCcFaG5pqdjFLIal6h+Pmz4 6G0g== 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=88EGuRhmZ5Mi0OmBRzcZ/azoI1Z+qLZaZYAJ4dxXFVk=; b=iFYIIEbxSSNDqAQCpIDBkbEmYeQ8CPr0TzJ0ZSCs2lSb5+SCuVmjSshhivFJun+vEB vmN1ZhPZdbRSVEs8evPzD63kuebNuG8wXK8kjQdVe0fqS4MUMB1/hxAUlaliRKTvNPS3 VeGNfzDMPA8ZlrFP3YDJf/BfSm/cDFh3FYrBasDajZMGWsuNisegSTz29CAtD61FkhLO aXEzEepO4tu3nokUJru30NLQhdyNL6HvjBO1GpkE4w8L3dlrW104u0kWKPlgUUjmuUtP W0Hd1BrZ0hVIWx/Py9kc1D2FfDdhYGj+oDiZWTXFox0jUUiFxWO7zOod+TlWWdN3FAH8 00og== X-Gm-Message-State: AJcUukdUUXA+AoJRImuiQ68lq57JjuAib+jkh7pVk05pwdDS+/kMpcqT K9m1DIv0CRyNorVq7cpOHT4ujQ== X-Google-Smtp-Source: ALg8bN5ekp087E9MNEbp1xUNwLJNosQ7/74EKiedZCjQnrEqpRi74F9gzqWnm9WR4QOa+sRn3QITFA== X-Received: by 2002:a5d:494a:: with SMTP id r10mr38788041wrs.272.1549014484670; Fri, 01 Feb 2019 01:48:04 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id m15sm9648970wrr.95.2019.02.01.01.48.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Feb 2019 01:48: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 , 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 v3 02/11] dt-bindings: power: supply: add DT bindings for max77650 Date: Fri, 1 Feb 2019 10:47:27 +0100 Message-Id: <20190201094736.32057-3-brgl@bgdev.pl> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190201094736.32057-1-brgl@bgdev.pl> References: <20190201094736.32057-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@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 Feb 1 09:47:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10792353 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 DFF6B1874 for ; Fri, 1 Feb 2019 09:48:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D17353120F for ; Fri, 1 Feb 2019 09:48:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C54B03122F; Fri, 1 Feb 2019 09:48:09 +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 6EF6F3120F for ; Fri, 1 Feb 2019 09:48:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729419AbfBAJsI (ORCPT ); Fri, 1 Feb 2019 04:48:08 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:43469 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728663AbfBAJsH (ORCPT ); Fri, 1 Feb 2019 04:48:07 -0500 Received: by mail-wr1-f65.google.com with SMTP id r10so6304759wrs.10 for ; Fri, 01 Feb 2019 01:48:06 -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=I7jIseMqCPPj3u7DXuTWdGC+Sbz7UI6uCT01nprpTw4=; b=LUsFREtRjSp7ytn52sF1HluRFd4G56Fqe7qQ5svPHxksVpYwI3vyzQRWEzT5GO1NBW Sf4pXmJUE/X012pkE6tvtXXCI1U1ngGpcxOu+QiNIndtzdu6xt8p351dlBYmRyblVxhj cvHhoETn5tqBIqLnCDFXFnjfTdwaFu1ypl8QQPaCSkHNfkNqXOdi6UaUmQXh/QXFX98d VLpaGU1EB6QDRcoISecVyJ2F1vmhxv9XPyrAgxDYs1dK2TcsSD78GPBamAplc1W+y/t1 N90k9BQPnaEWjNbLW6TfU0RKwiUAJTyjlXt3nhzDTyCjZTc0WhB9zgamd3rlNTWJJ/S5 0MnA== 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=I7jIseMqCPPj3u7DXuTWdGC+Sbz7UI6uCT01nprpTw4=; b=AKnFcV3LteCRiEc4Cad7tw5Hn96AV1yk9VojUGg6s3l3q34tsayym3chyx/NGXK9xu RisQwLoqW/Q/equRoNQJKRXlFPUrmwRmxWnKM7OdVNiZFeILQtatxV7ROAT90B0Y7OW6 Sx3/Qvb9caZ1tNBAs5m5A4UTtYY7ViPyhjCYk+Vvfv1rQyIL+QWuJtEbz/y4IjT16p9t 1mZxvijw19z+qunDgMrFFG5OP7RssejHirxafhniOrQDJVnxSg4ahAD89uFaNPSIKNk5 oZjE/xpYaT473XefzEA/DqlzzLa4/5Sv8+JbdBXJdKkrPOul1DZSrTi4FhIoKg2Rgbye FNTg== X-Gm-Message-State: AHQUAuaPg7Ob1SHclcjnjryTbx6OFVKVD9rFM8t7mrtQBcd82N85hbz/ ZRGZosYhEqdfbyYHBgaLandnRw== X-Google-Smtp-Source: AHgI3IYY8Br/kMLMaxmWnq8xBt3yxOGqyIxR+RWE5+KFk6TFZy2g+wixqUbOo+GK/iqAN/Z/D2gw/w== X-Received: by 2002:adf:f6c9:: with SMTP id y9mr528711wrp.138.1549014485976; Fri, 01 Feb 2019 01:48:05 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id m15sm9648970wrr.95.2019.02.01.01.48.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Feb 2019 01:48: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 , 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 v3 03/11] dt-bindings: gpio: add DT bindings for max77650 Date: Fri, 1 Feb 2019 10:47:28 +0100 Message-Id: <20190201094736.32057-4-brgl@bgdev.pl> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190201094736.32057-1-brgl@bgdev.pl> References: <20190201094736.32057-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@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 Feb 1 09:47:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10792359 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 3F3991874 for ; Fri, 1 Feb 2019 09:48:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 30D993120F for ; Fri, 1 Feb 2019 09:48:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 251263122F; Fri, 1 Feb 2019 09:48:11 +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 CAFFB3122C for ; Fri, 1 Feb 2019 09:48:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729712AbfBAJsJ (ORCPT ); Fri, 1 Feb 2019 04:48:09 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:41626 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729714AbfBAJsJ (ORCPT ); Fri, 1 Feb 2019 04:48:09 -0500 Received: by mail-wr1-f67.google.com with SMTP id x10so6334057wrs.8 for ; Fri, 01 Feb 2019 01:48: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=cFkhmaEQUzdaTJR4lhnbhp1irRv/17xUnhxf+z/b5Fo=; b=uCftNi1UhBh5tcgKk747QyyUOOEEMvevxU/E6uOII5cK8fo7rDHS6GsFr4jd38vV4u Tsh6IufVgt/rWmzp53C/cxBXAOayjJ8YZymfUjLj4UiNEasOG33iyr9vAPVCNmcWEWYB w/5cou/E+nLlXyqQ4orUyDrrbeXTVCsMOP3EDbxNZlxXpPGT75GtOQ8nztp9voUODZn8 NhewqWvSTPiUT1FHESK/wGbvEJHjHT/MqtEFMy5Oe/Hos1Nasf3U8pCKOUyTSchCRdDx 7GbgxVSYbHjAEcuY//B3jYi1UkcSUGWSrgCw+KLQ+jBEye0gbEfmhYeUbT0m/QcaWkDD E+uA== 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=cFkhmaEQUzdaTJR4lhnbhp1irRv/17xUnhxf+z/b5Fo=; b=n8jyPgg487AYU7+shm94YCy44lB7/2EZDeHCdZVtsFGuvKmTccOu5sV2xvCxYZchjl LWbzz8kNIl9WsUpSxruRgxTxxnSPGi1osc5mROmk2rTep6NNoSJKUKatTzlcV8BxROIO GUesCkxCLR0NFbpTbHfnLpUAMkjrgT9g4hKjYFwlykWoBeDINwPjd3g9ollpqGa/1gGy z1EYgAdeonwQEap3jcezL+PrrAiV0+VwaSKTge6uYdiNna6lOvrHLonST8Xbd2DEwWPq 5n6cRqH7TqJh2/C1kSpSUnBUT6pWb5zy0yiiCf9nRRSJB6Zf9g4OxluDBQA19C4O334A uNyQ== X-Gm-Message-State: AJcUukfCMXvwwXYDPiWDuhFVul2ld8kw8bPfS0O2olgiYE4wofCiqtRK wrOEN1cYkqAy0rhmt+oZOE1sdQ== X-Google-Smtp-Source: ALg8bN5bz0seoSx3UKNkjBiTjMS9FT9x9CQKgo7HCB+HnSf+Xjr2EScLqhIKna4nvFZsYkmRvml+yw== X-Received: by 2002:adf:90e5:: with SMTP id i92mr36192477wri.210.1549014487320; Fri, 01 Feb 2019 01:48:07 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id m15sm9648970wrr.95.2019.02.01.01.48.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Feb 2019 01:48:06 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , 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 v3 04/11] dt-bindings: leds: add DT bindings for max77650 Date: Fri, 1 Feb 2019 10:47:29 +0100 Message-Id: <20190201094736.32057-5-brgl@bgdev.pl> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190201094736.32057-1-brgl@bgdev.pl> References: <20190201094736.32057-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@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..3a67115cc1da --- /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-led" +- #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-led"; + #address-cells = <1>; + #size-cells = <0>; + + led@0 { + reg = <0>; + label = "blue:usr0"; + }; + + led@1 { + reg = <1>; + label = "red:usr1"; + linux,default-trigger = "heartbeat"; + }; + + led@2 { + reg = <2>; + label = "green:usr2"; + }; + }; From patchwork Fri Feb 1 09:47:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10792361 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 0133B13BF for ; Fri, 1 Feb 2019 09:48:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E6B2A3120F for ; Fri, 1 Feb 2019 09:48:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DACE73122F; Fri, 1 Feb 2019 09:48:11 +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 81E9B3120F for ; Fri, 1 Feb 2019 09:48:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729711AbfBAJsK (ORCPT ); Fri, 1 Feb 2019 04:48:10 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:51647 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729716AbfBAJsK (ORCPT ); Fri, 1 Feb 2019 04:48:10 -0500 Received: by mail-wm1-f66.google.com with SMTP id b11so5408252wmj.1 for ; Fri, 01 Feb 2019 01:48: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=uJmiNfRo8EeI+C3VRiIxh9DmBCp1GcHRXWm7GuC7DQs=; b=aX349u0uwisMMyB+gBJA3B+CmkX+J8W548y5le5Gi9fCLFQI5JeU3Ro9nYQQjq2/9W 8dedgvTL6l2QXdOSCJl0iHLlLv9t03vmWSGdMRhvnRIcv7HkiU/cCEfQ35cqHkzcFW3Y 7SGK+DR0241Bx0j3JdE9/p6Yzw3A2wLBs3EVUscqh7BiW3vRrN8nwLg8vYSRst8j+Ppd c5DYZoYlpesjyVVYwaxbZooF3PfC6wUpFnyB7auw85pjOVPJRqGMq5evGNvixEuBGop0 WP0Au4eCPghh7F8Tsj0v7GMd+1E0HgDmwwP8qjyrHOMvtHrhP2HV6wKxOhfM+QjPxG3v JWXw== 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=uJmiNfRo8EeI+C3VRiIxh9DmBCp1GcHRXWm7GuC7DQs=; b=K6uocR//ZCZllG40t23lB9XA+ZsfyeCCaQjUwxT8oVCUNIpRVcGghafHTgGvTetxRP 34yS8HfWiW4q/HATA9vzwVauU8K+8j0kCgihqpNAQPfSxsNC3msPD7M2mWK5KdhjWl2Z ooT2c/LhPz5LvaYG2+KaaCf2ilwwbegSBSpAuyWZHrHpzjm08fO6XdXiTCEkF2+ZfZlz nH7ZENDzuTkA7QdrmplrftOFYTP2fplT0qEDsOnUiai4oq/GyqoZgwt8ndOhuCU9B51c yvZ9pGE5V+yPH+JEzYRloug/uB/g+2EgmgbpxM00K1o9Ub1HogGVim2bQR1P6yaQugqv DN6Q== X-Gm-Message-State: AHQUAuZMRjbloGeNDqf6O2cW6KEwpPXDWdYFv/T8G6AcV1q3JOu5c8Zm oIo/5j2VepkUsrnubUM1c6UXMg== X-Google-Smtp-Source: AHgI3Ib2nSB+GHS5VJtyC3St0D7cgcsTpgT/T0QXVAN6G944PZ91yHETIlaPJfU4qNeyqJgFXZ8h3g== X-Received: by 2002:a1c:2686:: with SMTP id m128mr1565300wmm.52.1549014488653; Fri, 01 Feb 2019 01:48:08 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id m15sm9648970wrr.95.2019.02.01.01.48.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Feb 2019 01:48: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 , 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 v3 05/11] dt-bindings: input: add DT bindings for max77650 Date: Fri, 1 Feb 2019 10:47:30 +0100 Message-Id: <20190201094736.32057-6-brgl@bgdev.pl> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190201094736.32057-1-brgl@bgdev.pl> References: <20190201094736.32057-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@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 Feb 1 09:47:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 10792387 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 A9AFB13BF for ; Fri, 1 Feb 2019 09:49:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9B0D4307BF for ; Fri, 1 Feb 2019 09:49:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8E60630974; Fri, 1 Feb 2019 09:49:08 +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 BDB1530807 for ; Fri, 1 Feb 2019 09:49:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729719AbfBAJtH (ORCPT ); Fri, 1 Feb 2019 04:49:07 -0500 Received: from mail-wm1-f67.google.com ([209.85.128.67]:55806 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729731AbfBAJsM (ORCPT ); Fri, 1 Feb 2019 04:48:12 -0500 Received: by mail-wm1-f67.google.com with SMTP id y139so5342863wmc.5 for ; Fri, 01 Feb 2019 01:48: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=FOB5yY4cPNhT7KUIuWaQuVXpD01h85ROieNHMf7FiK0=; b=SAPltXqOQ2DhMegwQTVpRZgWagWbKcXp/VRxMDNVxgUo3/FghEiMgbvlKH7cEElFNx FRaZRsJ323h1AiwTpueJkWTVsLZBjHKZeGzuSol0sh4UCZWAlwbvCRV1+fAtiu10tiFt +8N6YnshQFJSTE559MjtskRIiMYGSbf7xr9e/jseua+yt0hnNkmfHi5XD14qisfq05sX bAsSYZEY6t1GvCro14jKfU77oVMldGONwS9shhwN5JDZyi8F9NQHKGgNE5c/+ecebyCV EyR9dQ8/wCqDF7wmpN1um1xE8xdXKO2rk0CN8208QtCSiYnh7XI29fBA9me89NuiQXFd ulHA== 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=FOB5yY4cPNhT7KUIuWaQuVXpD01h85ROieNHMf7FiK0=; b=RuMrDutESZhpijg1oL8cVly4f9Ppig1zx2+cbTEoRh6xOGEWOx/5WP5BhT56bMbgJx 2DWNKn0JD/wE5gVZ01q5mDMxTvqY84qBxAn2CJjlmZR7GpAxSsH2LVSighXpE49Fe+/P Oumn7jOb/jnBWKpLQNDWaz3x/Jc/wHqs92PYk1NEEHgbJgahLOQE55U8peV4owI0tKdY oT1mUO8xTSEccq/Z2rLu6QYXjem+hJ+M9Axowf7qDdqEOhcTAYa+ECogoLiZaqWHlRZt lwQ/eZe3A2NYK/ZwGYQ4NabLQR3UE6irqfLHPMpwr5de+EpaD3L2wlWk+qPXrbKV7x/9 JQ4A== X-Gm-Message-State: AHQUAuYtcR0peH8psBTcWqkHaTYrd74yiWCZVFVdquec/MH6UckIZcG+ mBSdXJZ2ibmbUh64MjNVlHk1zw== X-Google-Smtp-Source: AHgI3IamewATDVRhRBQ21+SN9Z5+jTY8LwD61DvSF1r6vcVip7DzC2RZG+Yph1sOQGV/VBrd4Hd1Sg== X-Received: by 2002:a1c:2804:: with SMTP id o4mr1713935wmo.150.1549014490041; Fri, 01 Feb 2019 01:48:10 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id m15sm9648970wrr.95.2019.02.01.01.48.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Feb 2019 01:48: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 , 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 v3 06/11] mfd: max77650: new core mfd driver Date: Fri, 1 Feb 2019 10:47:31 +0100 Message-Id: <20190201094736.32057-7-brgl@bgdev.pl> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190201094736.32057-1-brgl@bgdev.pl> References: <20190201094736.32057-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@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 | 342 +++++++++++++++++++++++++++++++++++ include/linux/mfd/max77650.h | 59 ++++++ 4 files changed, 413 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 f461460a2aeb..828fd193b4ee 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -734,6 +734,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..7c6164f1fde4 --- /dev/null +++ b/drivers/mfd/max77650.c @@ -0,0 +1,342 @@ +// 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 + +enum { + MAX77650_INT_GPI = 0, + MAX77650_INT_nEN_F, + MAX77650_INT_nEN_R, + MAX77650_INT_TJAL1_R, + MAX77650_INT_TJAL2_R, + MAX77650_INT_DOD_R, + MAX77650_INT_THM, + MAX77650_INT_CHG, + MAX77650_INT_CHGIN, + MAX77650_INT_TJ_REG, + MAX77650_INT_CHGIN_CTRL, + MAX77650_INT_SYS_CTRL, + MAX77650_INT_SYS_CNFG, +}; + +enum { + MAX77650_CELL_REGULATOR = 0, + MAX77650_CELL_CHARGER, + MAX77650_CELL_GPIO, + MAX77650_CELL_LED, + MAX77650_CELL_ONKEY, + MAX77650_NUM_CELLS, +}; + +struct max77650_irq_mapping { + int cell_num; + const int *irqs; + const char *const *irq_names; + unsigned int num_irqs; +}; + +static const int max77650_charger_irqs[] = { + MAX77650_INT_CHG, + MAX77650_INT_CHGIN, +}; + +static const int max77650_gpio_irqs[] = { + MAX77650_INT_GPI, +}; + +static const int max77650_onkey_irqs[] = { + MAX77650_INT_nEN_F, + MAX77650_INT_nEN_R, +}; + +static const char *const max77650_charger_irq_names[] = { + "CHG", + "CHGIN", +}; + +static const char *const max77650_gpio_irq_names[] = { + "GPI", +}; + +static const char *const max77650_onkey_irq_names[] = { + "nEN_F", + "nEN_R", +}; + +static const struct max77650_irq_mapping max77650_irq_mapping_table[] = { + { + .cell_num = MAX77650_CELL_CHARGER, + .irqs = max77650_charger_irqs, + .irq_names = max77650_charger_irq_names, + .num_irqs = ARRAY_SIZE(max77650_charger_irqs), + }, + { + .cell_num = MAX77650_CELL_GPIO, + .irqs = max77650_gpio_irqs, + .irq_names = max77650_gpio_irq_names, + .num_irqs = ARRAY_SIZE(max77650_gpio_irqs), + }, + { + .cell_num = MAX77650_CELL_ONKEY, + .irqs = max77650_onkey_irqs, + .irq_names = max77650_onkey_irq_names, + .num_irqs = ARRAY_SIZE(max77650_onkey_irqs), + }, +}; + +static const struct mfd_cell max77650_cells[] = { + [MAX77650_CELL_REGULATOR] = { + .name = "max77650-regulator", + .of_compatible = "maxim,max77650-regulator", + }, + [MAX77650_CELL_CHARGER] = { + .name = "max77650-charger", + .of_compatible = "maxim,max77650-charger", + }, + [MAX77650_CELL_GPIO] = { + .name = "max77650-gpio", + .of_compatible = "maxim,max77650-gpio", + }, + [MAX77650_CELL_LED] = { + .name = "max77650-led", + .of_compatible = "maxim,max77650-led", + }, + [MAX77650_CELL_ONKEY] = { + .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 const 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_setup_irqs(struct device *dev, struct mfd_cell *cells) +{ + const struct max77650_irq_mapping *mapping; + struct regmap_irq_chip_data *irq_data; + struct i2c_client *i2c; + struct mfd_cell *cell; + struct resource *res; + struct regmap *map; + int i, j, irq, rv; + + i2c = to_i2c_client(dev); + + map = dev_get_regmap(dev, NULL); + if (!map) + return -ENODEV; + + rv = devm_regmap_add_irq_chip(dev, map, i2c->irq, + IRQF_ONESHOT | IRQF_SHARED, -1, + &max77650_irq_chip, &irq_data); + if (rv) + return rv; + + for (i = 0; i < ARRAY_SIZE(max77650_irq_mapping_table); i++) { + mapping = &max77650_irq_mapping_table[i]; + cell = &cells[mapping->cell_num]; + + res = devm_kcalloc(dev, sizeof(*res), + mapping->num_irqs, GFP_KERNEL); + if (!res) + return -ENOMEM; + + cell->resources = res; + cell->num_resources = mapping->num_irqs; + + for (j = 0; j < mapping->num_irqs; j++) { + irq = regmap_irq_get_virq(irq_data, mapping->irqs[j]); + if (irq < 0) + return irq; + + res[j].start = res[j].end = irq; + res[j].flags = IORESOURCE_IRQ; + res[j].name = mapping->irq_names[j]; + } + } + + return 0; +} + +static int max77650_i2c_probe(struct i2c_client *i2c) +{ + struct device *dev = &i2c->dev; + struct mfd_cell *cells; + 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; + + cells = devm_kmemdup(dev, max77650_cells, + sizeof(max77650_cells), GFP_KERNEL); + if (!cells) + return -ENOMEM; + + rv = max77650_setup_irqs(dev, cells); + if (rv) + return rv; + + return devm_mfd_add_devices(dev, -1, cells, + MAX77650_NUM_CELLS, NULL, 0, NULL); +} + +static const struct of_device_id max77650_of_match[] = { + { .compatible = "maxim,max77650" }, + { } +}; +MODULE_DEVICE_TABLE(of, max77650_of_match); + +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 v2"); diff --git a/include/linux/mfd/max77650.h b/include/linux/mfd/max77650.h new file mode 100644 index 000000000000..c809e211a8cd --- /dev/null +++ b/include/linux/mfd/max77650.h @@ -0,0 +1,59 @@ +/* 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 + +#endif /* MAX77650_H */ From patchwork Fri Feb 1 09:47: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: 10792381 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 66952184E for ; Fri, 1 Feb 2019 09:48:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5961E30782 for ; Fri, 1 Feb 2019 09:48:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4CE55307BF; Fri, 1 Feb 2019 09:48:58 +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 8233A30807 for ; Fri, 1 Feb 2019 09:48:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729758AbfBAJs4 (ORCPT ); Fri, 1 Feb 2019 04:48:56 -0500 Received: from mail-wm1-f67.google.com ([209.85.128.67]:35544 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729740AbfBAJsO (ORCPT ); Fri, 1 Feb 2019 04:48:14 -0500 Received: by mail-wm1-f67.google.com with SMTP id t200so5531423wmt.0 for ; Fri, 01 Feb 2019 01:48: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=zJ7jIqmoMWUUK1NaSoVKgQd76oSC1SEcArQ5JPH6c9A=; b=vwQMEbZpIc0Mxl7utkXiFmI24iwyI3xqTSlCsqhjiTqeOsMdKHV3b/HkS2O3o4mimh 2u2WIhS0qw7V87yfzd4NvsWUjDRAXIVbhB6Yt/DdXV0s81cuYrWqlMPVugDKjdWwZA9+ qynQ42f77kexKgh+fQc3+QJPS83dWk8M1AyqYG/al0vLO/cLTZgwMbbv3x2Mclk+6861 vP4havLsPNNpJ+3Q+CmfPeuZq9uOB3wg8Z+E7KqK0HqNm0pufCDALhtyCfEhADEQCT1J fau/sW+G6sxSLpIMcL/3muheySnluRBPIN8/f+7SI71q95Dp15Gqi9Z6vyEp80bKcvqr MZ3Q== 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=zJ7jIqmoMWUUK1NaSoVKgQd76oSC1SEcArQ5JPH6c9A=; b=dQK64gxmt0xmRcxGj5V9I5X1PFnvXTfv/y8Eb/NIvEwFrBpDu6sKRd/pnjQuFz7j6F wxH6o/fQY+rkJ4AhFeqzOZEZqqGV1GbJvzqcOHIzTf+sV5B8eTgqKhRQw8xxjkp7WrlC brpP2P0FpZkNECYK6Y+/SPck/raaa6XNbHOvBhr49/p+Uae0tJFZl+ujBBAYjVutCBiW /787zgYncRKObPF+2TaAhI4VoSoUGhxnlkiAnQB0OoV7DTbnRfkdJ+E8qN/gNEF2nNTt 4L8CJl1i9OJ7gjBALDdC8/ZP0K7i3LE9ssBa+ZJWj7IsYXrOEUHKRltJH+nO4ISwFSbK /dIQ== X-Gm-Message-State: AHQUAuY7lodyPQVpIwjiFU/YDZagDiLGnsykX0th4hByhfZ1rvEEHsDV w4MJbJ5es5mk/o9W5BD2lAWnI3lrkDlkkg== X-Google-Smtp-Source: AHgI3Ib4H80Ap48/njTDhXQj54JjTlJwr5PqOXlDxGWj2VRj/oTK007hNhU1T+2+H+KBhQjKE0y06g== X-Received: by 2002:a1c:cc2:: with SMTP id 185mr1685555wmm.1.1549014491398; Fri, 01 Feb 2019 01:48:11 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id m15sm9648970wrr.95.2019.02.01.01.48.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Feb 2019 01:48:10 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , 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 v3 07/11] power: supply: max77650: add support for battery charger Date: Fri, 1 Feb 2019 10:47:32 +0100 Message-Id: <20190201094736.32057-8-brgl@bgdev.pl> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190201094736.32057-1-brgl@bgdev.pl> References: <20190201094736.32057-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@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 | 355 ++++++++++++++++++++++++ 3 files changed, 363 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..7055c9b5ee24 --- /dev/null +++ b/drivers/power/supply/max77650-charger.c @@ -0,0 +1,355 @@ +// 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_USB, + .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 power_supply_config pscfg = {}; + struct max77650_charger_data *chg; + struct power_supply *battery; + struct device *dev, *parent; + int rv, chg_irq, chgin_irq; + unsigned int prop; + + dev = &pdev->dev; + parent = dev->parent; + + chg = devm_kzalloc(dev, sizeof(*chg), GFP_KERNEL); + if (!chg) + return -ENOMEM; + + platform_set_drvdata(pdev, chg); + + 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 = platform_get_irq_byname(pdev, "CHG"); + if (chg_irq < 0) + return chg_irq; + + chgin_irq = platform_get_irq_byname(pdev, "CHGIN"); + if (chgin_irq < 0) + return chgin_irq; + + rv = devm_request_any_context_irq(dev, chg_irq, + max77650_charger_check_status, + IRQF_ONESHOT, "chg", chg); + if (rv < 0) + return rv; + + rv = devm_request_any_context_irq(dev, chgin_irq, + max77650_charger_check_status, + IRQF_ONESHOT, "chgin", chg); + if (rv < 0) + 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 int max77650_charger_remove(struct platform_device *pdev) +{ + struct max77650_charger_data *chg = platform_get_drvdata(pdev); + + return regmap_update_bits(chg->map, + MAX77650_REG_CNFG_CHG_B, + MAX77650_CHARGER_CHG_EN_MASK, + MAX77650_CHARGER_DISABLED); +} + +static struct platform_driver max77650_charger_driver = { + .driver = { + .name = "max77650-charger", + }, + .probe = max77650_charger_probe, + .remove = max77650_charger_remove, +}; +module_platform_driver(max77650_charger_driver); + +MODULE_DESCRIPTION("MAXIM 77650/77651 charger driver"); +MODULE_AUTHOR("Bartosz Golaszewski "); +MODULE_LICENSE("GPL v2"); From patchwork Fri Feb 1 09:47: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: 10792375 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 C6E3913BF for ; Fri, 1 Feb 2019 09:48:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3E61928421 for ; Fri, 1 Feb 2019 09:48:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2F57D27FB0; Fri, 1 Feb 2019 09:48:49 +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 975A73122C for ; Fri, 1 Feb 2019 09:48:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729759AbfBAJsr (ORCPT ); Fri, 1 Feb 2019 04:48:47 -0500 Received: from mail-wm1-f68.google.com ([209.85.128.68]:36390 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729762AbfBAJsP (ORCPT ); Fri, 1 Feb 2019 04:48:15 -0500 Received: by mail-wm1-f68.google.com with SMTP id p6so5477577wmc.1 for ; Fri, 01 Feb 2019 01:48:13 -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=/NtEr31RJV4ToQ2tRfAYSzVrKcKJn/WGW2NzkW9zf+0=; b=RIdN+WK00O78Aibr+mUycx0HaeoNy7dQWR26etQajKml+Aalju/RRfjFDQoaQQCJB9 xjTGTWgwLARnIPCdVzNUsJ9OOISV/YUfgNdXO6IKu5pYUN1AwspPicORHZbUqhFLQTDp w3EPbmOmRsdX5rh/w24MnI/OP0NzAHZX+6DpT28GogpnV8VIer09RGictpCwPPin/thr W96AxmcTZDr70taezMLfSD4VBlf5u6xiUegMMmkb9UVjaLR15N2wObwtg0xnqPymqM3t 1iLcrPgeFIKK5mLdKSIvpD3WH0PH6MNYJnUCNdYUz0/sOEmgOhgrmhsXgUm+FELJXRir xFiQ== 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=/NtEr31RJV4ToQ2tRfAYSzVrKcKJn/WGW2NzkW9zf+0=; b=gB0ffgqdS8N0XKrLlNiBhWwY1QX0xcO4nZH/gPN6FG0NfEXqLOHEil890ddTFIEjFE /e6rr9v97cZn3tZEVfAQt63Pdz5uSYoAdVLioG1fK7UjbvBWxVBReCWphOdN8Or3LrNk 2Ju25Y7O447+YH/cI34PbcQY8gGtQ58uAk4Q0ODfoR8gDlKBjUmzEvjkoPzDZ318+Obp imG+v5ERupTRrGxwdYJtPaoqvIxPQObSm1aevXaR31T1vuJIBie4B+dnHCXVoa3U7zaB qulYuf3kXDYI7I/4R4E2m//DOMR9T7tBmFm+Zn+T8CJg1kLS0cvcBGl8mx8yfMy9yTL2 z7Rw== X-Gm-Message-State: AHQUAuabcGmuQ6aeKRgzJXV12kmbQyxrukc4gD71zfFvfrycis8lHZJE Q49GBzphpMOssYdPIMjy0jlFMg== X-Google-Smtp-Source: AHgI3IbOjULTcs5pVqaJDeaNlVC/gVjrggBrASrjUskl64ylyxKwYmpUPCykpgoXw9wNewZlPBoATA== X-Received: by 2002:a1c:e046:: with SMTP id x67mr1575463wmg.122.1549014492820; Fri, 01 Feb 2019 01:48:12 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id m15sm9648970wrr.95.2019.02.01.01.48.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Feb 2019 01:48: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 , 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 v3 08/11] gpio: max77650: add GPIO support Date: Fri, 1 Feb 2019 10:47:33 +0100 Message-Id: <20190201094736.32057-9-brgl@bgdev.pl> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190201094736.32057-1-brgl@bgdev.pl> References: <20190201094736.32057-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@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..8382dd85c548 --- /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 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) +{ + /* + * TODO Add interrupt support. + * + * We first need to properly support hierarchical irqs in gpiolib + * and regmap irq_chip. + */ + return -EOPNOTSUPP; +} + +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->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 v2"); From patchwork Fri Feb 1 09:47: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: 10792373 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 703F9746 for ; Fri, 1 Feb 2019 09:48:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 62DB43122C for ; Fri, 1 Feb 2019 09:48:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5671831231; Fri, 1 Feb 2019 09:48:44 +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 CD0A03122C for ; Fri, 1 Feb 2019 09:48:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729811AbfBAJsR (ORCPT ); Fri, 1 Feb 2019 04:48:17 -0500 Received: from mail-wm1-f65.google.com ([209.85.128.65]:51657 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729781AbfBAJsQ (ORCPT ); Fri, 1 Feb 2019 04:48:16 -0500 Received: by mail-wm1-f65.google.com with SMTP id b11so5408646wmj.1 for ; Fri, 01 Feb 2019 01:48: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=AoY3HGmPmB3jrot6AZMQ217vfKxge9t5vvsrDWVopyU=; b=MA3CGPDmkcgiyXDyMrNrOVH6CUXhtjrc2i7EV8iDhW6h3p0/04BDSq8UTgnDTnCm6N CTBifT0ifRBYzYXzl8CzLA+Q3lRSGwvzJZDE/lzvdXoYYVDqLjK6WeD9GA9FqhWqkgr7 PNuuT4mM4cBYvRvtJUe3iB2hHtbVTcpCNc9PsgybpVO4feQ84gInZgGGXgPEqVAdddk4 v0xMne0xMX6vyp13j1WIr+ZgENHdGsAIjKJpVCjKN9G58ivjNCQH4YogC8sIGLILuQbg w25/I/G1e7lzE3Tgv8444py0bGM8uj7jngpP6ztPwQUSQY5FQbfRjtHdx1exFy2Ibtgj pKvw== 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=AoY3HGmPmB3jrot6AZMQ217vfKxge9t5vvsrDWVopyU=; b=iGT75hOc26oOLuMHe9bbKPEbhxylh0DQEklO2X4SZHx6LLceQOuhOkJ1DpqkE/6y1a rz10rrGODXFv+gTCSAwQRjtevsXWiJ7BQrbwT40lPM6aXWZ52eP9fVHVvJIGaJ/ioI+T B8yaIJtlxya3hO0tiS2CYzVIdWAtOOGWnZVC7MU2IXHmThVK1CuEjr4mUFbvOZrL7W5u CC3xGhg91AR5WTbPFH0sxRO5Zwb/hkXyV+zHQKY4aEZrjRCZ5A8CjS9fRSS1i8XLC9A2 McMtqyStAsf2BuI1ODjby4R64m5ion3Jpj++dC2lBCx7darVOdaGNvmoeWDg3N+IWln4 f9BA== X-Gm-Message-State: AHQUAuZihLWxNXwrsjzvz2XdiV0CRyXPdsx/QqIr7U+nIMn3FHQ6r/nB NgybqkG1HSEfMXgHIZ2OHbmDow== X-Google-Smtp-Source: AHgI3IYwK+B0G2Wuqpom+5JmV/fCCYLFMd90OHMFJpiJNJrEqUwDriGrsHimIk2ZAyabf44UDulEvw== X-Received: by 2002:a1c:a3c3:: with SMTP id m186mr1636188wme.16.1549014494268; Fri, 01 Feb 2019 01:48:14 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id m15sm9648970wrr.95.2019.02.01.01.48.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Feb 2019 01:48:13 -0800 (PST) From: Bartosz Golaszewski To: Rob Herring , Mark Rutland , Linus Walleij , Dmitry Torokhov , Jacek Anaszewski , Pavel Machek , Lee Jones , Sebastian Reichel , Liam Girdwood , 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 v3 09/11] leds: max77650: add LEDs support Date: Fri, 1 Feb 2019 10:47:34 +0100 Message-Id: <20190201094736.32057-10-brgl@bgdev.pl> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190201094736.32057-1-brgl@bgdev.pl> References: <20190201094736.32057-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@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 Acked-by: Jacek Anaszewski --- drivers/leds/Kconfig | 6 ++ drivers/leds/Makefile | 1 + drivers/leds/leds-max77650.c | 147 +++++++++++++++++++++++++++++++++++ 3 files changed, 154 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..6b74ce9cac12 --- /dev/null +++ b/drivers/leds/leds-max77650.c @@ -0,0 +1,147 @@ +// SPDX-License-Identifier: GPL-2.0 +// +// Copyright (C) 2018 BayLibre SAS +// Author: Bartosz Golaszewski +// +// LED driver for MAXIM 77650/77651 charger/power-supply. + +#include +#include +#include +#include +#include +#include + +#define MAX77650_LED_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) + +#define MAX77650_LED_MAX_BRIGHTNESS MAX77650_LED_BR_MASK + +/* 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_led { + struct led_classdev cdev; + struct regmap *map; + unsigned int regA; + unsigned int regB; +}; + +static struct max77650_led *max77650_to_led(struct led_classdev *cdev) +{ + return container_of(cdev, struct max77650_led, cdev); +} + +static int max77650_led_brightness_set(struct led_classdev *cdev, + enum led_brightness brightness) +{ + struct max77650_led *led = max77650_to_led(cdev); + 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 | brightness; + + return regmap_update_bits(led->map, led->regA, mask, val); +} + +static int max77650_led_probe(struct platform_device *pdev) +{ + struct device_node *of_node, *child; + struct max77650_led *leds, *led; + struct device *parent; + struct device *dev; + struct regmap *map; + const char *label; + int rv, num_leds; + u32 reg; + + dev = &pdev->dev; + parent = dev->parent; + of_node = dev->of_node; + + if (!of_node) + return -ENODEV; + + leds = devm_kcalloc(dev, sizeof(*leds), + MAX77650_LED_NUM_LEDS, GFP_KERNEL); + if (!leds) + return -ENOMEM; + + map = dev_get_regmap(dev->parent, NULL); + if (!map) + return -ENODEV; + + num_leds = of_get_child_count(of_node); + if (!num_leds || num_leds > MAX77650_LED_NUM_LEDS) + return -ENODEV; + + for_each_child_of_node(of_node, child) { + rv = of_property_read_u32(child, "reg", ®); + if (rv || reg >= MAX77650_LED_NUM_LEDS) + return -EINVAL; + + led = &leds[reg]; + led->map = map; + led->regA = MAX77650_LED_A_BASE + reg; + led->regB = MAX77650_LED_B_BASE + reg; + led->cdev.brightness_set_blocking = max77650_led_brightness_set; + led->cdev.max_brightness = MAX77650_LED_MAX_BRIGHTNESS; + + label = of_get_property(child, "label", NULL); + if (!label) { + led->cdev.name = "max77650::"; + } else { + led->cdev.name = devm_kasprintf(dev, GFP_KERNEL, + "max77650:%s", label); + if (!led->cdev.name) + return -ENOMEM; + } + + 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(map, led->regA, MAX77650_LED_A_DEFAULT); + if (rv) + return rv; + + rv = regmap_write(map, led->regB, MAX77650_LED_B_DEFAULT); + if (rv) + return rv; + } + + return regmap_write(map, + MAX77650_REG_CNFG_LED_TOP, + MAX77650_LED_TOP_DEFAULT); +} + +static struct platform_driver max77650_led_driver = { + .driver = { + .name = "max77650-led", + }, + .probe = max77650_led_probe, +}; +module_platform_driver(max77650_led_driver); + +MODULE_DESCRIPTION("MAXIM 77650/77651 LED driver"); +MODULE_AUTHOR("Bartosz Golaszewski "); +MODULE_LICENSE("GPL v2"); From patchwork Fri Feb 1 09:47: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: 10792371 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 37AAD746 for ; Fri, 1 Feb 2019 09:48:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 28C383122F for ; Fri, 1 Feb 2019 09:48:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1CF1731231; Fri, 1 Feb 2019 09:48:43 +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 929353120F for ; Fri, 1 Feb 2019 09:48:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728913AbfBAJsg (ORCPT ); Fri, 1 Feb 2019 04:48:36 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:33774 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729799AbfBAJsS (ORCPT ); Fri, 1 Feb 2019 04:48:18 -0500 Received: by mail-wr1-f67.google.com with SMTP id a16so744948wrv.0 for ; Fri, 01 Feb 2019 01:48: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=NgQnFw3sUzAedx0YGl/4uhfLsd42v24LsUHp80zhiuk=; b=PN4G9je9xjWySrvW8VmcQUOUOnp1Yv8XLSv6YeEQXRtAG3eFJcj0tZ3GeFdwmy+bvP YMMeo8w5A8iJgnuv9EC2FdimqTsIBsiJ1/3QX/tuX5xUQtxmnxutKR1tZ1Ahv+rksdE7 Dx0W/bOMQ+gZHevOWSxFyvt3yTHVe9fBh8nVx3AsW2tmuHfRRlN/zwi6LCQYAxKXN1ft Q6qNPachGqQiuwLNDm3bpTEdALfEG6IRoqASpLVAXoNHyVvEUtbN8LRHDitDCIl+sqw0 pvXwV0V8ruxvmPEG0EulHRRbChKJuxljuNdWLfJSqDaAxWdCxW0/xEPHunPnvXmzmvEr c+uA== 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=NgQnFw3sUzAedx0YGl/4uhfLsd42v24LsUHp80zhiuk=; b=Nx+jY43yp4TkakVCFuvB/lx5YiUcVRz3wxUt+MqPTo2/4F8Sd8XjPO8ZQeDZJ4KKWV aw7Xi4weytvKDziiT7TUueg77lHRkx0MxXMWAibvh/L080Z/CttBEUdw8gkv/W8wBqq6 aJbQFF/mCukkWQfiK1WRhTx2gU6m5S8w6zV8ngBClZT+B8gqH8leH1epX0yz8a2U+I90 lfydP6jLiwaOKa/NaLXgxgtEmZRBsKtfUuiyVr8O3WgXjY8ufrx02RilZ37TwgxAnTRK cpUgGa3vKPsU6pCzz4b4zps+wbAhKCLz3ITdtzg9z0OB3eiop6y31CWcYAHNh6yvE/9j XUFQ== X-Gm-Message-State: AJcUukfoQg69Yjdrjv00uyiG5mW1aPHpYcVeX962/xSGtqgWEEygM3oA n7Nh7pr8kpZklv39fBpCvFzS4w== X-Google-Smtp-Source: ALg8bN6QOhVs26vMGbeI2j9zIYLe0K1IWmpcJLVXu1vPYxpD9n3Oi82imtdiny2fCL0+wshaWUw5pg== X-Received: by 2002:adf:ff09:: with SMTP id k9mr36087875wrr.97.1549014495648; Fri, 01 Feb 2019 01:48:15 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id m15sm9648970wrr.95.2019.02.01.01.48.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Feb 2019 01:48: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 , 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 v3 10/11] input: max77650: add onkey support Date: Fri, 1 Feb 2019 10:47:35 +0100 Message-Id: <20190201094736.32057-11-brgl@bgdev.pl> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190201094736.32057-1-brgl@bgdev.pl> References: <20190201094736.32057-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@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 Acked-by: Dmitry Torokhov --- drivers/input/misc/Kconfig | 9 ++ drivers/input/misc/Makefile | 1 + drivers/input/misc/max77650-onkey.c | 127 ++++++++++++++++++++++++++++ 3 files changed, 137 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..7fc3e9196abb --- /dev/null +++ b/drivers/input/misc/max77650-onkey.c @@ -0,0 +1,127 @@ +// 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_falling(int irq, void *data) +{ + struct max77650_onkey *onkey = data; + + input_report_key(onkey->input, onkey->code, 0); + input_sync(onkey->input); + + return IRQ_HANDLED; +} + +static irqreturn_t max77650_onkey_rising(int irq, void *data) +{ + struct max77650_onkey *onkey = data; + + input_report_key(onkey->input, onkey->code, 1); + input_sync(onkey->input); + + return IRQ_HANDLED; +} + +static int max77650_onkey_probe(struct platform_device *pdev) +{ + int irq_r, irq_f, error, mode; + struct max77650_onkey *onkey; + struct device *dev, *parent; + const char *mode_prop; + struct regmap *map; + + dev = &pdev->dev; + parent = dev->parent; + + map = dev_get_regmap(parent, NULL); + if (!map) + return -ENODEV; + + onkey = devm_kzalloc(dev, sizeof(*onkey), GFP_KERNEL); + if (!onkey) + return -ENOMEM; + + error = device_property_read_u32(dev, "linux,code", &onkey->code); + if (error) + onkey->code = KEY_POWER; + + error = device_property_read_string(dev, + "maxim,onkey-mode", &mode_prop); + if (error) + 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; + + error = regmap_update_bits(map, MAX77650_REG_CNFG_GLBL, + MAX77650_ONKEY_MODE_MASK, mode); + if (error) + return error; + + irq_f = platform_get_irq_byname(pdev, "nEN_F"); + if (irq_f < 0) + return irq_f; + + irq_r = platform_get_irq_byname(pdev, "nEN_R"); + if (irq_r < 0) + return irq_r; + + 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; + input_set_capability(onkey->input, EV_KEY, onkey->code); + + error = devm_request_any_context_irq(dev, irq_f, + max77650_onkey_falling, + IRQF_ONESHOT, "onkey-down", + onkey); + if (error < 0) + return error; + + error = devm_request_any_context_irq(dev, irq_r, max77650_onkey_rising, + IRQF_ONESHOT, "onkey-up", onkey); + if (error < 0) + return error; + + 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 v2"); From patchwork Fri Feb 1 09:47: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: 10792363 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 A061713BF for ; Fri, 1 Feb 2019 09:48:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8F8D13120F for ; Fri, 1 Feb 2019 09:48:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 83AA63122F; Fri, 1 Feb 2019 09:48:27 +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 2845E3120F for ; Fri, 1 Feb 2019 09:48:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729782AbfBAJsZ (ORCPT ); Fri, 1 Feb 2019 04:48:25 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:35552 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729778AbfBAJsT (ORCPT ); Fri, 1 Feb 2019 04:48:19 -0500 Received: by mail-wm1-f66.google.com with SMTP id t200so5531699wmt.0 for ; Fri, 01 Feb 2019 01:48:17 -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=9B/EYyDjVhwtFa4eu+FJyKZCq3f87a75jGygGJDT3Ao=; b=qhQJlepegW+vOTICAcYfONdJxPc69Cn641c4tlh/FDv4e4ZFJ3RSCugphxbjVQn7xN 2OfmVhdh2Ra8AtHKdFWNUpMXb5ZOIY5SfCGVRA6wsAAaN35KOMnWAaQAhDNCRdszrO2A QsWsMjX14Cu/y8KeAox+Xp8nmwPlZ+2CCVbEUseV4qZqzT7QS6zS4WzDHwdjIn7VI4oK 1DIB3OpFFpjnEl540Q4WiEcA639IgKhjGvpfDVyOV6ShDrUvpH4+mABt2qaHgIP/eDNl flOIZp4v1DKfaFpnQSf1kcIQr/JAnUWMpvzD2OIsbmIsTyURK36VBpmGua8LQQPepvNA +y7A== 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=9B/EYyDjVhwtFa4eu+FJyKZCq3f87a75jGygGJDT3Ao=; b=I4gsBIyVb4GJ84cWVw5kHXBjBt3DdaA270lgnwc/7F+YVZls3NYX1p+UPObMMsUxnB d5B3MfYzVF+qq+ZssQPKrH3jky3COArST4hflFR8PbSrGB8NHI8gNTL6IfCh7OEiPWjv Sf8+PzvCP1FVmVBQACF18GS6m1FKKU9ibTPgSSp2jHg0zEkWQtlvF53yVLXC11QL3R97 WgQs4yyIskyYqT7tIyi3Dc9pxgjOpakEWT1bVleQqarBYU3vFDZEm4msJz6+QReEfzsy m9emIKLfsNdp5dbR3xmLv8VshuWu0ktkDWnaByDOGbl/A3TO/w/CxlqvaB1UbNt2yb9r 8zkA== X-Gm-Message-State: AHQUAuathNEtfnm1uBestymT/qeLYdzf5VR18Wb+R1TDdjTxxj7hcppm 2FI4eYhgVLr/SLK7WSvOD96NjQ== X-Google-Smtp-Source: AHgI3IY6GA0hGW3drJaGQqNPDCjuSPZzd36dvV368FCk7icZsqVzmEzov/Ofzftv42gyfIBwEW4u2Q== X-Received: by 2002:a7b:c757:: with SMTP id w23mr1531331wmk.59.1549014496991; Fri, 01 Feb 2019 01:48:16 -0800 (PST) Received: from debian-brgl.home ([2a01:cb1d:af:5b00:6d6c:8493:1ab5:dad7]) by smtp.gmail.com with ESMTPSA id m15sm9648970wrr.95.2019.02.01.01.48.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Feb 2019 01:48: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 , 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 v3 11/11] MAINTAINERS: add an entry for max77650 mfd driver Date: Fri, 1 Feb 2019 10:47:36 +0100 Message-Id: <20190201094736.32057-12-brgl@bgdev.pl> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190201094736.32057-1-brgl@bgdev.pl> References: <20190201094736.32057-1-brgl@bgdev.pl> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@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 9f64f8d3740e..d4032d94c275 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -9221,6 +9221,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