Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp680164ybt; Wed, 17 Jun 2020 11:05:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzoYKqXL5vPs7XjJjIcO4EJMiOnv9KZQYvCqhlBmmBiHgliF6r1wmpj7Zw+Lb92DCBqokpx X-Received: by 2002:a50:f044:: with SMTP id u4mr400638edl.226.1592417110740; Wed, 17 Jun 2020 11:05:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592417110; cv=none; d=google.com; s=arc-20160816; b=Wdx5xWIKV8ty42qzyLope0UwzP6BMA+BSBCxKlh7QYbyASA2DaeRx9dVz/7x/TzkNQ xKpH94ol3oPNQ48f8WSGzk7+Mx8IC1eEzbNhy8OQKPas3/qgTv+5qeVOXeLP0EQzf9tq pIalsLwMgpstogG45EVbtn66xMQzcbQCt7yl1D/tMaoy5xemN2G/7Ds+18oGIFpBAz6L hDS2+0QkmlJrXAy1KRY5jsiVHUFtWfhODRy0A7ytXeUjNcC2mUmADYFrSAD7/b2Ldcil Li2wZ0aW/uiqxYsDoENVFGqU3KxYC9j2fHGcW9LE/eAIM2RNUTMhGoZRGM6NMfP7txXq wTDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dmarc-filter:dkim-signature; bh=4VhfVakAj/P5YPhjNjDDhHWoeXOmcz4X4evHz/y01XE=; b=ym3F3O0fyuPJGWf4bZFFsWFwq0ZfgIXOxdG8oNfyHQNkvR4fFmtWE1jDWN3MtfvKod 55/sSxcwwsZw9vFLZ6cnQL44KfGS2uZvmALwIHR1lo2ZHhDEV88oXa/4f7gcIQTlwEmQ JbnuukZdvgJhRv/Fe+vdI3rS+PvNI7+9sqDaXTNtIlabMxd7z60Ue89eAUHN6e7pjJyd MPModIM4+/6WQ030M5JS0iiqon9k5+Mr7qDW7vT21QAHPKu3gymZrG6naHAHiXfSULf6 NRhwT/f3N+jnFXhIvIJl57FKPC6r79iQOfGYZ8ETyFxroBz+5ZjzpnlRF0B7r8E8IMeA PgGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=xlwoGUPD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dd12si401276ejb.59.2020.06.17.11.04.48; Wed, 17 Jun 2020 11:05:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=xlwoGUPD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727094AbgFQSCu (ORCPT + 99 others); Wed, 17 Jun 2020 14:02:50 -0400 Received: from m43-7.mailgun.net ([69.72.43.7]:13040 "EHLO m43-7.mailgun.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727061AbgFQSCt (ORCPT ); Wed, 17 Jun 2020 14:02:49 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1592416968; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=4VhfVakAj/P5YPhjNjDDhHWoeXOmcz4X4evHz/y01XE=; b=xlwoGUPD6iSl1J3TDoh7LJ5DDK4AZae117TmlMG9XzvBfel2QBxDUE3CHa40RSBRA+KuVbHq OBMA1S5nOy+DRRxruYJoipVwC4qiPQacWT882RMXIezVu7p9ie2wQT1ByxmZrIIqz9GwXdUM t0cc4flyAndH+IrB30bpdEQWsWE= X-Mailgun-Sending-Ip: 69.72.43.7 X-Mailgun-Sid: WyI0MWYwYSIsICJsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIiwgImJlOWU0YSJd Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n13.prod.us-east-1.postgun.com with SMTP id 5eea5ab0bfb34e631c7b167a (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Wed, 17 Jun 2020 18:02:24 GMT Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 81FB1C433AD; Wed, 17 Jun 2020 18:02:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=2.0 tests=ALL_TRUSTED,SPF_NONE, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from wcheng-linux.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: wcheng) by smtp.codeaurora.org (Postfix) with ESMTPSA id CE461C433A1; Wed, 17 Jun 2020 18:02:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org CE461C433A1 Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=none smtp.mailfrom=wcheng@codeaurora.org From: Wesley Cheng To: heikki.krogerus@linux.intel.com, mark.rutland@arm.com, broonie@kernel.org, bjorn.andersson@linaro.org, gregkh@linuxfoundation.org, lgirdwood@gmail.com, agross@kernel.org, robh+dt@kernel.org Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, jackp@codeaurora.org, rdunlap@infradead.org, bryan.odonoghue@linaro.org, lijun.kernel@gmail.com, Wesley Cheng Subject: [PATCH v3 4/6] regulator: Add support for QCOM PMIC VBUS booster Date: Wed, 17 Jun 2020 11:02:07 -0700 Message-Id: <20200617180209.5636-5-wcheng@codeaurora.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200617180209.5636-1-wcheng@codeaurora.org> References: <20200617180209.5636-1-wcheng@codeaurora.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some Qualcomm PMICs have the capability to source the VBUS output to connected peripherals. This driver will register a regulator to the regulator list to enable or disable this source by an external driver. Signed-off-by: Wesley Cheng --- drivers/regulator/Kconfig | 10 ++ drivers/regulator/Makefile | 1 + drivers/regulator/qcom_usb_vbus-regulator.c | 100 ++++++++++++++++++++ 3 files changed, 111 insertions(+) create mode 100644 drivers/regulator/qcom_usb_vbus-regulator.c diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig index 074a2ef55943..79d6b7596f0b 100644 --- a/drivers/regulator/Kconfig +++ b/drivers/regulator/Kconfig @@ -797,6 +797,16 @@ config REGULATOR_QCOM_SPMI Qualcomm SPMI PMICs as a module. The module will be named "qcom_spmi-regulator". +config REGULATOR_QCOM_USB_VBUS + tristate "Qualcomm USB Vbus regulator driver" + depends on SPMI || COMPILE_TEST + help + If you say yes to this option, support will be included for the + regulator used to enable the VBUS output. + + Say M here if you want to include support for enabling the VBUS output + as a module. The module will be named "qcom_usb_vbus-regulator". + config REGULATOR_RC5T583 tristate "RICOH RC5T583 Power regulators" depends on MFD_RC5T583 diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile index c0d6b96ebd78..cbab28aa7b56 100644 --- a/drivers/regulator/Makefile +++ b/drivers/regulator/Makefile @@ -89,6 +89,7 @@ obj-$(CONFIG_REGULATOR_QCOM_RPM) += qcom_rpm-regulator.o obj-$(CONFIG_REGULATOR_QCOM_RPMH) += qcom-rpmh-regulator.o obj-$(CONFIG_REGULATOR_QCOM_SMD_RPM) += qcom_smd-regulator.o obj-$(CONFIG_REGULATOR_QCOM_SPMI) += qcom_spmi-regulator.o +obj-$(CONFIG_REGULATOR_QCOM_USB_VBUS) += qcom_usb_vbus-regulator.o obj-$(CONFIG_REGULATOR_PALMAS) += palmas-regulator.o obj-$(CONFIG_REGULATOR_PFUZE100) += pfuze100-regulator.o obj-$(CONFIG_REGULATOR_PV88060) += pv88060-regulator.o diff --git a/drivers/regulator/qcom_usb_vbus-regulator.c b/drivers/regulator/qcom_usb_vbus-regulator.c new file mode 100644 index 000000000000..fa7a3d891808 --- /dev/null +++ b/drivers/regulator/qcom_usb_vbus-regulator.c @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: GPL-2.0-only +// +// Qualcomm PMIC VBUS output regulator driver +// +// Copyright (c) 2020, The Linux Foundation. All rights reserved. + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CMD_OTG 0x40 +#define OTG_EN BIT(0) +#define OTG_CFG 0x53 +#define OTG_EN_SRC_CFG BIT(1) + +static const struct regulator_ops qcom_usb_vbus_reg_ops = { + .enable = regulator_enable_regmap, + .disable = regulator_disable_regmap, + .is_enabled = regulator_is_enabled_regmap, +}; + +static struct regulator_desc qcom_usb_vbus_rdesc = { + .name = "usb_vbus", + .ops = &qcom_usb_vbus_reg_ops, + .owner = THIS_MODULE, + .type = REGULATOR_VOLTAGE, +}; + +static const struct of_device_id qcom_usb_vbus_regulator_match[] = { + { .compatible = "qcom,pm8150b-vbus-reg" }, + { } +}; +MODULE_DEVICE_TABLE(of, qcom_usb_vbus_regulator_match); + +static int qcom_usb_vbus_regulator_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct regulator_dev *rdev; + struct regmap *regmap; + struct regulator_config config = { }; + struct regulator_init_data *init_data; + int ret; + u32 base; + + ret = of_property_read_u32(dev->of_node, "reg", &base); + if (ret < 0) { + dev_err(dev, "no base address found\n"); + return ret; + } + + regmap = dev_get_regmap(dev->parent, NULL); + if (regmap) { + dev_err(dev, "Failed to get regmap\n"); + return -ENOENT; + } + + init_data = of_get_regulator_init_data(dev, dev->of_node, + &qcom_usb_vbus_rdesc); + if (!init_data) + return -ENOMEM; + + qcom_usb_vbus_rdesc.enable_reg = base + CMD_OTG; + qcom_usb_vbus_rdesc.enable_mask = OTG_EN; + config.dev = dev; + config.init_data = init_data; + config.regmap = regmap; + + rdev = devm_regulator_register(dev, &qcom_usb_vbus_rdesc, &config); + if (IS_ERR(rdev)) { + ret = PTR_ERR(rdev); + dev_err(dev, "not able to register vbus reg %d\n", ret); + return ret; + } + + platform_set_drvdata(pdev, rdev); + + /* Disable HW logic for VBUS enable */ + regmap_update_bits(regmap, base + OTG_CFG, OTG_EN_SRC_CFG, 0); + + return 0; +} + +static struct platform_driver qcom_usb_vbus_regulator_driver = { + .driver = { + .name = "qcom-usb-vbus-regulator", + .of_match_table = qcom_usb_vbus_regulator_match, + }, + .probe = qcom_usb_vbus_regulator_probe, +}; +module_platform_driver(qcom_usb_vbus_regulator_driver); + +MODULE_DESCRIPTION("Qualcomm USB vbus regulator driver"); +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:qcom-usb-vbus-regulator"); -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project