From patchwork Tue Jul 28 23:05:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Campello X-Patchwork-Id: 11690027 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5FEBD14DD for ; Tue, 28 Jul 2020 23:05:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 45FFF2083B for ; Tue, 28 Jul 2020 23:05:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="QwM92j+b" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730222AbgG1XFv (ORCPT ); Tue, 28 Jul 2020 19:05:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59312 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730230AbgG1XFt (ORCPT ); Tue, 28 Jul 2020 19:05:49 -0400 Received: from mail-il1-x142.google.com (mail-il1-x142.google.com [IPv6:2607:f8b0:4864:20::142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C82FAC0619DB for ; Tue, 28 Jul 2020 16:05:48 -0700 (PDT) Received: by mail-il1-x142.google.com with SMTP id s21so17726968ilk.5 for ; Tue, 28 Jul 2020 16:05:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OeAFLDuJ/KgJd+XW6ikx+c1G0tNORrQK8vXV6J41koI=; b=QwM92j+bBCFCVDC0lS9QQPgLQzr8ZMnuG/AFQscxKohzVKRTer1RN0iTDwecdKXnnc mbgswCsMW8UUSR053i98AqzT54c/xcrOegouKvpXmu7OxGUMXBAS98aSWRFt5+lRBEXQ bni4KT+n7grQZUwmirmTIUrk2griitv08iJ+w= 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=OeAFLDuJ/KgJd+XW6ikx+c1G0tNORrQK8vXV6J41koI=; b=uDMGLttNcQGg0zNdR7baiQ8q4ttX1Edw7TsOnXu6Umk2yuzSH5YGPwDTUUM+4trWT2 m1KvmZjmZDTPYLBnNZPzHQGKiOr5HsUzYfCo0Fa3gggeIiKk4aYrycfnaQ1uGRQpf5aL U1lzSLbQn3orNIcokTveByvk4dqCzcIIeoHZagyFVPftX2hs0eIoSd3JILhBBo575215 zx2ijXZsMz52PYePQnhPHIYnIPJHt9MN30wiNTRXP1DHDoRXYnu/eBX1fYeyEWEBJBt3 JDQQmWBLXbeHj8Ztn6tMVpLAOzRnqSlL1mDHbv4LuDWlCeuHtJ0unHPt6PJRqle0VZAW pvvA== X-Gm-Message-State: AOAM532gCui/rIzlXuQ1ThJLDM6VghTUnS6hZ8Z92nCCoEIZnQvog+IU dBwpX0FlWWjxzq3BWJMLsddADg== X-Google-Smtp-Source: ABdhPJzh8S09J9zsjrzxnNQsPfIv2wPdrEDHQ8sfMZnIY3dENChJQCpUn/EmtXk+F8YmyONSkgbHVA== X-Received: by 2002:a92:c7d0:: with SMTP id g16mr3004218ilk.101.1595977548184; Tue, 28 Jul 2020 16:05:48 -0700 (PDT) Received: from derch.Home (97-122-92-59.hlrn.qwest.net. [97.122.92.59]) by smtp.gmail.com with ESMTPSA id w10sm148945ilo.10.2020.07.28.16.05.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2020 16:05:47 -0700 (PDT) From: Daniel Campello To: LKML , LKML Cc: Jonathan Cameron , Stephen Boyd , Douglas Anderson , Daniel Campello , Andy Shevchenko , Hartmut Knaack , Lars-Peter Clausen , Peter Meerwald-Stadler , linux-iio@vger.kernel.org Subject: [PATCH v2 14/14] iio: sx9310: Enable vdd and svdd regulators at probe Date: Tue, 28 Jul 2020 17:05:20 -0600 Message-Id: <20200728170317.v2.14.Ib7bdc8340021d8515b430498fb6686eedf22c9f2@changeid> X-Mailer: git-send-email 2.28.0.163.g6104cc2f0b6-goog In-Reply-To: <20200728230520.2011240-1-campello@chromium.org> References: <20200728151258.1222876-1-campello@chromium.org> <20200728230520.2011240-1-campello@chromium.org> MIME-Version: 1.0 Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org From: Stephen Boyd Enable the main power supply (vdd) and digital IO power supply (svdd) during probe so that the i2c communication and device works properly on boards that aggressively power gate these supplies. Signed-off-by: Stephen Boyd Reviewed-by: Douglas Anderson Signed-off-by: Daniel Campello Reviewed-by: Andy Shevchenko --- Changes in v2: None drivers/iio/proximity/sx9310.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/iio/proximity/sx9310.c b/drivers/iio/proximity/sx9310.c index 6607732edd034a..163b18f91955bd 100644 --- a/drivers/iio/proximity/sx9310.c +++ b/drivers/iio/proximity/sx9310.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -119,6 +120,7 @@ struct sx9310_data { struct i2c_client *client; struct iio_trigger *trig; struct regmap *regmap; + struct regulator_bulk_data supplies[2]; /* * Last reading of the proximity status for each channel. * We only send an event to user space when this changes. @@ -874,6 +876,13 @@ static int sx9310_set_indio_dev_name(struct device *dev, return 0; } +static void sx9310_regulator_disable(void *_data) +{ + struct sx9310_data *data = _data; + + regulator_bulk_disable(ARRAY_SIZE(data->supplies), data->supplies); +} + static int sx9310_probe(struct i2c_client *client) { int ret; @@ -887,6 +896,8 @@ static int sx9310_probe(struct i2c_client *client) data = iio_priv(indio_dev); data->client = client; + data->supplies[0].supply = "vdd"; + data->supplies[1].supply = "svdd"; mutex_init(&data->mutex); init_completion(&data->completion); @@ -894,6 +905,21 @@ static int sx9310_probe(struct i2c_client *client) if (IS_ERR(data->regmap)) return PTR_ERR(data->regmap); + ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(data->supplies), + data->supplies); + if (ret) + return ret; + + ret = regulator_bulk_enable(ARRAY_SIZE(data->supplies), data->supplies); + if (ret) + return ret; + /* Must wait for Tpor time after initial power up */ + usleep_range(1000, 1100); + + ret = devm_add_action_or_reset(dev, sx9310_regulator_disable, data); + if (ret) + return ret; + ret = regmap_read(data->regmap, SX9310_REG_WHOAMI, &data->whoami); if (ret) { dev_err(dev, "error in reading WHOAMI register: %d\n", ret);