All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: Marco Franchi <marco.franchi@nxp.com>
Cc: robh+dt@kernel.org, devicetree@vger.kernel.org,
	linux-hwmon@vger.kernel.org, marcofrk@gmail.com,
	FoxPeter@kabelbw.de
Subject: Re: [PATCH v4 2/2] hwmon: (sht15) Add device tree support
Date: Thu, 16 Feb 2017 06:48:32 -0800	[thread overview]
Message-ID: <576171a2-a386-2b8f-335e-e41139833a55@roeck-us.net> (raw)
In-Reply-To: <1487247824-10005-1-git-send-email-marco.franchi@nxp.com>

On 02/16/2017 04:23 AM, Marco Franchi wrote:
> Allow the driver to work with device tree support.
>
> Based on initial patch submission from Peter Fox.
>
> Tested on a imx7d-sdb board connected to a SHT15 board via Mikro Bus.
>
> Signed-off-by: Marco Franchi <marco.franchi@nxp.com>
> ---
> Changes since v3:
> -Remove the optional properties because they are not hardware description

Yes but they are in platform data. I thought that kind of configuration data
is fair game nowadays for devicetree data, but on the other side I must admit
that I may not be up to date on what is permitted or not.

Either case, I'll queue this patch up for -next. Refinements can be made
later if/when needed.

Thanks,
Guenter

> -Change the sensor node name
>
>  Documentation/devicetree/bindings/hwmon/sht15.txt | 19 +++++++
>  drivers/hwmon/sht15.c                             | 64 +++++++++++++++++++++--
>  2 files changed, 79 insertions(+), 4 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/hwmon/sht15.txt
>
> diff --git a/Documentation/devicetree/bindings/hwmon/sht15.txt b/Documentation/devicetree/bindings/hwmon/sht15.txt
> new file mode 100644
> index 0000000..6a80277
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/hwmon/sht15.txt
> @@ -0,0 +1,19 @@
> +Sensirion SHT15 Humidity and Temperature Sensor
> +
> +Required properties:
> +
> + - "compatible": must be "sensirion,sht15".
> + - "data-gpios": GPIO connected to the data line.
> + - "clk-gpios": GPIO connected to the clock line.
> + - "vcc-supply": regulator that drives the VCC pin.
> +
> +Example:
> +
> +	sensor {
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&pinctrl_sensor>;
> +		compatible = "sensirion,sht15";
> +		clk-gpios = <&gpio4 12 0>;
> +		data-gpios = <&gpio4 13 0>;
> +		vcc-supply = <&reg_sht15>;
> +	};
> diff --git a/drivers/hwmon/sht15.c b/drivers/hwmon/sht15.c
> index f16687c..69141b2 100644
> --- a/drivers/hwmon/sht15.c
> +++ b/drivers/hwmon/sht15.c
> @@ -34,6 +34,7 @@
>  #include <linux/slab.h>
>  #include <linux/atomic.h>
>  #include <linux/bitrev.h>
> +#include <linux/of_gpio.h>
>
>  /* Commands */
>  #define SHT15_MEASURE_TEMP		0x03
> @@ -911,6 +912,54 @@ static int sht15_invalidate_voltage(struct notifier_block *nb,
>  	return NOTIFY_OK;
>  }
>
> +#ifdef CONFIG_OF
> +static const struct of_device_id sht15_dt_match[] = {
> +	{ .compatible = "sensirion,sht15" },
> +	{ },
> +};
> +MODULE_DEVICE_TABLE(of, sht15_dt_match);
> +
> +/*
> + * This function returns NULL if pdev isn't a device instatiated by dt,
> + * a pointer to pdata if it could successfully get all information
> + * from dt or a negative ERR_PTR() on error.
> + */
> +static struct sht15_platform_data *sht15_probe_dt(struct device *dev)
> +{
> +	struct device_node *np = dev->of_node;
> +	struct sht15_platform_data *pdata;
> +
> +	/* no device tree device */
> +	if (!np)
> +		return NULL;
> +
> +	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
> +	if (!pdata)
> +		return ERR_PTR(-ENOMEM);
> +
> +	pdata->gpio_data = of_get_named_gpio(np, "data-gpios", 0);
> +	if (pdata->gpio_data < 0) {
> +		if (pdata->gpio_data != -EPROBE_DEFER)
> +			dev_err(dev, "data-gpios not found\n");
> +		return ERR_PTR(pdata->gpio_data);
> +	}
> +
> +	pdata->gpio_sck = of_get_named_gpio(np, "clk-gpios", 0);
> +	if (pdata->gpio_sck < 0) {
> +		if (pdata->gpio_sck != -EPROBE_DEFER)
> +			dev_err(dev, "clk-gpios not found\n");
> +		return ERR_PTR(pdata->gpio_sck);
> +	}
> +
> +	return pdata;
> +}
> +#else
> +static inline struct sht15_platform_data *sht15_probe_dt(struct device *dev)
> +{
> +	return NULL;
> +}
> +#endif
> +
>  static int sht15_probe(struct platform_device *pdev)
>  {
>  	int ret;
> @@ -928,11 +977,17 @@ static int sht15_probe(struct platform_device *pdev)
>  	data->dev = &pdev->dev;
>  	init_waitqueue_head(&data->wait_queue);
>
> -	if (dev_get_platdata(&pdev->dev) == NULL) {
> -		dev_err(&pdev->dev, "no platform data supplied\n");
> -		return -EINVAL;
> +	data->pdata = sht15_probe_dt(&pdev->dev);
> +	if (IS_ERR(data->pdata))
> +		return PTR_ERR(data->pdata);
> +	if (data->pdata == NULL) {
> +		data->pdata = dev_get_platdata(&pdev->dev);
> +		if (data->pdata == NULL) {
> +			dev_err(&pdev->dev, "no platform data supplied\n");
> +			return -EINVAL;
> +		}
>  	}
> -	data->pdata = dev_get_platdata(&pdev->dev);
> +
>  	data->supply_uv = data->pdata->supply_mv * 1000;
>  	if (data->pdata->checksum)
>  		data->checksumming = true;
> @@ -1075,6 +1130,7 @@ MODULE_DEVICE_TABLE(platform, sht15_device_ids);
>  static struct platform_driver sht15_driver = {
>  	.driver = {
>  		.name = "sht15",
> +		.of_match_table = of_match_ptr(sht15_dt_match),
>  	},
>  	.probe = sht15_probe,
>  	.remove = sht15_remove,
>


  parent reply	other threads:[~2017-02-16 14:48 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-16 12:23 [PATCH v4 2/2] hwmon: (sht15) Add device tree support Marco Franchi
2017-02-16 12:23 ` Marco Franchi
2017-02-16 12:23 ` [PATCH v4 1/2] dt: Add vendor prefix for Sensirion Marco Franchi
2017-02-16 12:23   ` Marco Franchi
2017-02-16 14:43   ` Guenter Roeck
2017-02-16 14:43     ` Guenter Roeck
2017-02-27 15:58     ` Rob Herring
2017-02-27 17:32       ` Rob Herring
2017-02-16 12:53 ` [PATCH v4 2/2] hwmon: (sht15) Add device tree support Fabio Estevam
2017-02-16 12:53   ` Fabio Estevam
2017-02-16 14:48 ` Guenter Roeck [this message]
2017-02-27 15:57 ` Rob Herring
2017-02-27 15:57   ` Rob Herring
2017-02-27 16:46   ` Fabio Estevam
2017-02-27 16:46     ` Fabio Estevam
2017-02-27 17:31     ` Rob Herring

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=576171a2-a386-2b8f-335e-e41139833a55@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=FoxPeter@kabelbw.de \
    --cc=devicetree@vger.kernel.org \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=marco.franchi@nxp.com \
    --cc=marcofrk@gmail.com \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.