Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp1309558ybg; Fri, 18 Oct 2019 15:39:31 -0700 (PDT) X-Google-Smtp-Source: APXvYqwbfhScRMfA5uK0DY3F/fY+d3YSGTLs8E6hpq3zHyyyQ5gHlU5ghRb4ABXuZMon+yYv/22S X-Received: by 2002:a17:906:4716:: with SMTP id y22mr11065426ejq.225.1571438371792; Fri, 18 Oct 2019 15:39:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571438371; cv=none; d=google.com; s=arc-20160816; b=lI7Dyo6ieksPd31d2Ltjn5J3EKe2pe/Kf/DAqcGBED97huVNChENHDFX8ok7X7r2NC SbfUi7qHuUo7cwQ6wXnmLLM3Uxg9nQ+vAX1yLKAPYh4tXvdGeyIrYXO+1oxftc+o1PBK 19IRKxWzp38N63cV+7FsjnZ3mYxuingrdlvZTuFi9V/FPmr1b+eCr6VcSBsjIUN1k2UU 1BEAy5sIamoSC4Bj6eHd2L8Pb4wyfYX7QRns0fDn6YIOid68eoyfr1Q1wNVC7vFlCl7w REAwABvak49/uxpKf0klg8rNpd/bnnE2XRTMQz6duAtSTjtLFWORcnCjCIEiVEacE8no jNJg== 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 :dkim-signature; bh=A290/OLSMIdz1gm9E9GKn5KBPV2wOKoLOZi6+j+W8B0=; b=F/YzcuLavOIdUS2AUnA1ouoDDRn647LBr6J5VSR3/eECtD4ibCkXEJ4zPYNlxJ9xiU MACaAJHJSGVVuiCREVgRh5B+cQlqdMxAvLdcohUMvoaSWOpkYZ4nijJDKsnrNIoLzmvR 3yG9AHKsB8WaJAKi3V3yGlfab2XMTrOcvHV8BrayjU1f4NCqPRRwdK5/oRPuBb75G0Ir rLsyV71xESnFHHu/VBYx2iQSyeBHP8UNJq8zFhGpmQphSBu2/TTowsBTrf9ZZOO2/uOn ltcgH3TR+A9j9dUNihXvWzl1PWMaAAcgbs9w4vJgLdxWbH8s1hY4kW1W/WYn6OCTc1Vz SP1Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=IfD36HjG; spf=pass (google.com: best guess record for domain of linux-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id la20si4284797ejb.73.2019.10.18.15.39.07; Fri, 18 Oct 2019 15:39:31 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=IfD36HjG; spf=pass (google.com: best guess record for domain of linux-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2503834AbfJRFYP (ORCPT + 99 others); Fri, 18 Oct 2019 01:24:15 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:45511 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2442022AbfJRFYP (ORCPT ); Fri, 18 Oct 2019 01:24:15 -0400 Received: by mail-pf1-f195.google.com with SMTP id y72so3099211pfb.12 for ; Thu, 17 Oct 2019 22:24:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=A290/OLSMIdz1gm9E9GKn5KBPV2wOKoLOZi6+j+W8B0=; b=IfD36HjGXoGW/VytrSV0TZUsgREKFpfzsFqdazfZT5W9+9uAFfPaereqHTYaqLxqSP vmFfmuKv7WFbkNZP2ssJRHR3sMm2GyNJenRdVZ+L5vmjKAgJGosyzWEyJXRzeZmjPngU 5aG4eZJuVoaAPzHfyx9iVKXEDZgmgcNmCGIv/0OnvNnY6HPDo1FPy0bmXaMJjfB95Em2 XJ9DDJp7yjOJ8DKUUe6ZYpaNawX+bnZltgVLbJ8o9ueyVv5vmB3Hji1mTAstDOOJHXoP /7GzzhJschEmR5wMZJTzENRhZVT5G98euWMDl50oSmvCQjsBExx2Nk6FNVkbQNwfkHAp TUbA== 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=A290/OLSMIdz1gm9E9GKn5KBPV2wOKoLOZi6+j+W8B0=; b=Nw92qcIuN6NEeD89f5rBUyxxHWa+9Soob3w875sk2EUbuP77e7BbwTzHbRe9nMPhhd 2dklOmoSsufEkhMMzcbdH+6SLJMeEIMWRHWj3NUGUQKPZuHZDEe//agLBGgLKACCyuEt ITYw1K4gmwcbZAtpz7RtjHMkmIfPNWh0b/eEz0NF7hkhmXSLB08ZCvlg34l7EHmgE76K s4iLDGHWqYVms1gRmUnL5Sk0drPvwyegECnPMXNeA/+p24nACZGtASqVBANoqZnun+Uk 3YKGMmEY5rtjx2zswcA2UONNyDPcsRDPBX0fIqCl1embj7wDT9t2zIpnow61BYTHGs32 rbnw== X-Gm-Message-State: APjAAAUYk+OQN0FLqWImo0osR1ddCAtTi71h3/PWO8+vDo80JN7od+d3 vODyYoJPbHKARH8pcTf08oRvBQ== X-Received: by 2002:a63:1904:: with SMTP id z4mr8210286pgl.413.1571376253468; Thu, 17 Oct 2019 22:24:13 -0700 (PDT) Received: from localhost.localdomain (104-188-17-28.lightspeed.sndgca.sbcglobal.net. [104.188.17.28]) by smtp.gmail.com with ESMTPSA id u11sm2178760pgc.61.2019.10.17.22.24.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Oct 2019 22:24:12 -0700 (PDT) From: Bjorn Andersson To: Marcel Holtmann , Johan Hedberg Cc: linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org, Jeffrey Hugo , linux-arm-msm@vger.kernel.org Subject: [PATCH 4/4] Bluetooth: hci_qca: Split qca_power_setup() Date: Thu, 17 Oct 2019 22:24:04 -0700 Message-Id: <20191018052405.3693555-5-bjorn.andersson@linaro.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191018052405.3693555-1-bjorn.andersson@linaro.org> References: <20191018052405.3693555-1-bjorn.andersson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Split and rename qca_power_setup() in order to simplify each code path and to clarify that it is unrelated to qca_power_off() and qca_power_setup(). Signed-off-by: Bjorn Andersson --- drivers/bluetooth/hci_qca.c | 61 ++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 01f941e9adf3..c591a8ba9d93 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -160,7 +160,8 @@ struct qca_serdev { const char *firmware_name; }; -static int qca_power_setup(struct hci_uart *hu, bool on); +static int qca_regulator_enable(struct qca_serdev *qcadev); +static void qca_regulator_disable(struct qca_serdev *qcadev); static void qca_power_shutdown(struct hci_uart *hu); static int qca_power_off(struct hci_dev *hdev); @@ -516,7 +517,7 @@ static int qca_open(struct hci_uart *hu) } else { hu->init_speed = qcadev->init_speed; hu->oper_speed = qcadev->oper_speed; - ret = qca_power_setup(hu, true); + ret = qca_regulator_enable(qcadev); if (ret) { destroy_workqueue(qca->workqueue); kfree_skb(qca->rx_skb); @@ -1186,7 +1187,7 @@ static int qca_wcn3990_init(struct hci_uart *hu) qcadev = serdev_device_get_drvdata(hu->serdev); if (!qcadev->bt_power->vregs_on) { serdev_device_close(hu->serdev); - ret = qca_power_setup(hu, true); + ret = qca_regulator_enable(qcadev); if (ret) return ret; @@ -1351,9 +1352,12 @@ static const struct qca_vreg_data qca_soc_data_wcn3998 = { static void qca_power_shutdown(struct hci_uart *hu) { + struct qca_serdev *qcadev; struct qca_data *qca = hu->priv; unsigned long flags; + qcadev = serdev_device_get_drvdata(hu->serdev); + /* From this point we go into power off state. But serial port is * still open, stop queueing the IBS data and flush all the buffered * data in skb's. @@ -1365,7 +1369,7 @@ static void qca_power_shutdown(struct hci_uart *hu) host_set_baudrate(hu, 2400); qca_send_power_pulse(hu, false); - qca_power_setup(hu, false); + qca_regulator_disable(qcadev); } static int qca_power_off(struct hci_dev *hdev) @@ -1381,36 +1385,43 @@ static int qca_power_off(struct hci_dev *hdev) return 0; } -static int qca_power_setup(struct hci_uart *hu, bool on) +static int qca_regulator_enable(struct qca_serdev *qcadev) { - struct regulator_bulk_data *vreg_bulk; - struct qca_serdev *qcadev; - int num_vregs; - int ret = 0; + struct qca_power *power = qcadev->bt_power; + int ret; - qcadev = serdev_device_get_drvdata(hu->serdev); - if (!qcadev || !qcadev->bt_power || !qcadev->bt_power->vreg_bulk) - return -EINVAL; + /* Already enabled */ + if (power->vregs_on) + return 0; - vreg_bulk = qcadev->bt_power->vreg_bulk; - num_vregs = qcadev->bt_power->num_vregs; - BT_DBG("on: %d (%d regulators)", on, num_vregs); - if (on && !qcadev->bt_power->vregs_on) { - ret = regulator_bulk_enable(num_vregs, vreg_bulk); - if (ret) - return ret; + BT_DBG("enabling %d regulators)", power->num_vregs); - qcadev->bt_power->vregs_on = true; - } else if (!on && qcadev->bt_power->vregs_on) { - /* turn off regulator in reverse order */ - regulator_bulk_disable(num_vregs, vreg_bulk); + ret = regulator_bulk_enable(power->num_vregs, power->vreg_bulk); + if (ret) + return ret; - qcadev->bt_power->vregs_on = false; - } + power->vregs_on = true; return 0; } +static void qca_regulator_disable(struct qca_serdev *qcadev) +{ + struct qca_power *power; + + if (!qcadev) + return; + + power = qcadev->bt_power; + + /* Already disabled? */ + if (!power->vregs_on) + return; + + regulator_bulk_disable(power->num_vregs, power->vreg_bulk); + power->vregs_on = false; +} + static int qca_init_regulators(struct qca_power *qca, const struct qca_vreg *vregs, size_t num_vregs) { -- 2.23.0