From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AA127C63697 for ; Sat, 21 Nov 2020 15:49:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 64AEF222B8 for ; Sat, 21 Nov 2020 15:49:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="HeW/Loka" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727918AbgKUPtn (ORCPT ); Sat, 21 Nov 2020 10:49:43 -0500 Received: from mail.kernel.org ([198.145.29.99]:60434 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727901AbgKUPtn (ORCPT ); Sat, 21 Nov 2020 10:49:43 -0500 Received: from archlinux (cpc108967-cmbg20-2-0-cust86.5-4.cable.virginm.net [81.101.6.87]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D8D63221FE; Sat, 21 Nov 2020 15:49:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1605973782; bh=aamqa2zTMG1E3Odj+X3s9swXMPFWdelV5wM5H/epuKo=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=HeW/LokaBJp055KILtBGWtF065b/OVVpg/v66HTpKrQeOKV1eqwvT/LLwOLrtICzt nADgR+sZkcwkCG5T7Hy5UDDgf8MToLUdkAaN5qaQ4/2NszC4S0B7Y0P5S2Z4KayO+K D95quR8UdBdY9vAIldbYmE8D6VdH3fMgbRSmsr9E= Date: Sat, 21 Nov 2020 15:49:38 +0000 From: Jonathan Cameron To: Lorenzo Bianconi Cc: lorenzo.bianconi@redhat.com, devicetree@vger.kernel.org, linux-iio@vger.kernel.org Subject: Re: [PATCH v2 1/2] iio: imu: st_lsm6dsx: add vdd-vddio voltage regulator Message-ID: <20201121154938.0a9d3b4d@archlinux> In-Reply-To: References: X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org On Tue, 17 Nov 2020 17:47:25 +0100 Lorenzo Bianconi wrote: > Like all other ST sensors, st_lsm6dsx devices have VDD and VDDIO power > lines. Introduce voltage regulators to control them. > > Signed-off-by: Lorenzo Bianconi Oops. I should have pointed out the dev_err_probe more appropriate to avoid complaining when we just tried to probe to early in the sequence and will try again later. I'll hopefully fix this up an apply once I've picked up my own patch to do the yaml conversion. Jonathan > --- > drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 3 ++ > drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 42 ++++++++++++++++++++ > 2 files changed, 45 insertions(+) > > diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > index 1f31657a7a0e..4b4ec39d4400 100644 > --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h > @@ -13,6 +13,7 @@ > > #include > #include > +#include > > #define ST_LSM6DS3_DEV_NAME "lsm6ds3" > #define ST_LSM6DS3H_DEV_NAME "lsm6ds3h" > @@ -368,6 +369,7 @@ struct st_lsm6dsx_sensor { > * struct st_lsm6dsx_hw - ST IMU MEMS hw instance > * @dev: Pointer to instance of struct device (I2C or SPI). > * @regmap: Register map of the device. > + * @regulators: VDD/VDDIO voltage regulators. > * @irq: Device interrupt line (I2C or SPI). > * @fifo_lock: Mutex to prevent concurrent access to the hw FIFO. > * @conf_lock: Mutex to prevent concurrent FIFO configuration update. > @@ -390,6 +392,7 @@ struct st_lsm6dsx_sensor { > struct st_lsm6dsx_hw { > struct device *dev; > struct regmap *regmap; > + struct regulator_bulk_data regulators[2]; > int irq; > > struct mutex fifo_lock; > diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > index 5e584c6026f1..fde46377826c 100644 > --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c > @@ -2533,6 +2533,40 @@ static int st_lsm6dsx_irq_setup(struct st_lsm6dsx_hw *hw) > return 0; > } > > +static int st_lsm6dsx_init_regulators(struct device *dev) > +{ > + struct st_lsm6dsx_hw *hw = dev_get_drvdata(dev); > + int err; > + > + /* vdd-vddio power regulators */ > + hw->regulators[0].supply = "vdd"; > + hw->regulators[1].supply = "vddio"; > + err = devm_regulator_bulk_get(dev, ARRAY_SIZE(hw->regulators), > + hw->regulators); > + if (err) { > + dev_err(dev, "failed to get regulators: %d\n", err); > + return err; > + } > + > + err = regulator_bulk_enable(ARRAY_SIZE(hw->regulators), > + hw->regulators); > + if (err) { > + dev_err(dev, "failed to enable regulators: %d\n", err); > + return err; > + } > + > + msleep(50); > + > + return 0; > +} > + > +static void st_lsm6dsx_chip_uninit(void *data) > +{ > + struct st_lsm6dsx_hw *hw = data; > + > + regulator_bulk_disable(ARRAY_SIZE(hw->regulators), hw->regulators); > +} > + > int st_lsm6dsx_probe(struct device *dev, int irq, int hw_id, > struct regmap *regmap) > { > @@ -2552,6 +2586,14 @@ int st_lsm6dsx_probe(struct device *dev, int irq, int hw_id, > mutex_init(&hw->conf_lock); > mutex_init(&hw->page_lock); > > + err = st_lsm6dsx_init_regulators(dev); > + if (err) > + return err; > + > + err = devm_add_action_or_reset(dev, st_lsm6dsx_chip_uninit, hw); > + if (err) > + return err; > + > hw->buff = devm_kzalloc(dev, ST_LSM6DSX_BUFF_SIZE, GFP_KERNEL); > if (!hw->buff) > return -ENOMEM;