From: Jan Luebbe <jlu@pengutronix.de>
To: Grant Likely <grant.likely@linaro.org>,
Rob Herring <rob.herring@calxeda.com>,
Rodolfo Giometti <giometti@enneenne.com>,
Andrew Morton <akpm@linux-foundation.org>
Cc: devicetree-discuss@lists.ozlabs.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, Jan Luebbe <jlu@pengutronix.de>
Subject: [PATCH] pps-gpio: add device-tree binding and support
Date: Fri, 31 May 2013 20:46:55 +0200 [thread overview]
Message-ID: <1370026015-9584-1-git-send-email-jlu@pengutronix.de> (raw)
Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
---
This patch depends on my two recent pps-gpio patches, which are currently
in Andrew Morton's mmotm. So it should probably also go via Andrew if it
is acceptable.
Documentation/devicetree/bindings/pps/pps-gpio.txt | 20 +++++++
drivers/pps/clients/pps-gpio.c | 55 +++++++++++++++++++-
2 files changed, 73 insertions(+), 2 deletions(-)
create mode 100644 Documentation/devicetree/bindings/pps/pps-gpio.txt
diff --git a/Documentation/devicetree/bindings/pps/pps-gpio.txt b/Documentation/devicetree/bindings/pps/pps-gpio.txt
new file mode 100644
index 0000000..40bf9c3
--- /dev/null
+++ b/Documentation/devicetree/bindings/pps/pps-gpio.txt
@@ -0,0 +1,20 @@
+Device-Tree Bindings for a PPS Signal on GPIO
+
+These properties describe a PPS (pulse-per-second) signal connected to
+a GPIO pin.
+
+Required properties:
+- compatible: should be "pps-gpio"
+- gpios: one PPS GPIO in the format described by ../gpio/gpio.txt
+
+Optional properties:
+- assert-falling-edge: when present, assert is indicated by a falling edge
+ (instead of by a rising edge)
+
+Example:
+ pps {
+ compatible = "pps-gpio";
+ gpios = <&gpio2 6 0>;
+
+ assert-falling-edge;
+ };
diff --git a/drivers/pps/clients/pps-gpio.c b/drivers/pps/clients/pps-gpio.c
index 6768f95..b5806da 100644
--- a/drivers/pps/clients/pps-gpio.c
+++ b/drivers/pps/clients/pps-gpio.c
@@ -33,6 +33,8 @@
#include <linux/pps-gpio.h>
#include <linux/gpio.h>
#include <linux/list.h>
+#include <linux/of_device.h>
+#include <linux/of_gpio.h>
/* Info for each registered platform device */
struct pps_gpio_device_data {
@@ -103,14 +105,62 @@ get_irqf_trigger_flags(const struct pps_gpio_platform_data *pdata)
return flags;
}
+#ifdef CONFIG_OF
+static const struct of_device_id pps_gpio_dt_ids[] = {
+ { .compatible = "pps-gpio", },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, pps_gpio_dt_ids);
+
+static struct pps_gpio_platform_data *
+of_get_pps_gpio_pdata(struct platform_device *pdev)
+{
+ struct device_node *np = pdev->dev.of_node;
+ struct pps_gpio_platform_data *pdata;
+ int ret;
+
+ pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
+ if (!pdata)
+ return NULL;
+
+ ret = of_get_gpio(np, 0);
+ if (ret < 0) {
+ pr_err("failed to get GPIO from device tree\n");
+ return NULL;
+ }
+
+ pdata->gpio_pin = ret;
+ pdata->gpio_label = PPS_GPIO_NAME;
+
+ if (of_get_property(np, "assert-falling-edge", NULL))
+ pdata->assert_falling_edge = true;
+
+ return pdata;
+}
+#else
+static struct pps_gpio_platform_data *
+of_get_pps_gpio_pdata(struct platform_device *pdev)
+{
+ return NULL;
+}
+#endif
+
static int pps_gpio_probe(struct platform_device *pdev)
{
struct pps_gpio_device_data *data;
int irq;
int ret;
int pps_default_params;
- const struct pps_gpio_platform_data *pdata = pdev->dev.platform_data;
+ struct pps_gpio_platform_data *pdata;
+ const struct of_device_id *match;
+
+ match = of_match_device(pps_gpio_dt_ids, &pdev->dev);
+ if (match)
+ pdev->dev.platform_data = of_get_pps_gpio_pdata(pdev);
+ pdata = pdev->dev.platform_data;
+ if (!pdata)
+ return -ENODEV;
/* GPIO setup */
ret = pps_gpio_setup(pdev);
@@ -184,7 +234,8 @@ static struct platform_driver pps_gpio_driver = {
.remove = pps_gpio_remove,
.driver = {
.name = PPS_GPIO_NAME,
- .owner = THIS_MODULE
+ .owner = THIS_MODULE,
+ .of_match_table = of_match_ptr(pps_gpio_dt_ids),
},
};
--
1.7.10.4
next reply other threads:[~2013-05-31 18:46 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-31 18:46 Jan Luebbe [this message]
[not found] ` <1370026015-9584-1-git-send-email-jlu-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2013-05-31 19:15 ` [PATCH] pps-gpio: add device-tree binding and support Arnd Bergmann
2013-06-01 10:44 ` [PATCH v2] " Jan Luebbe
[not found] ` <1370083449-11986-1-git-send-email-jlu-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2013-06-01 11:44 ` Arnd Bergmann
2013-06-03 12:04 ` Rodolfo Giometti
2013-06-03 22:56 ` Andrew Morton
2013-06-03 12:01 ` [PATCH] " Rodolfo Giometti
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=1370026015-9584-1-git-send-email-jlu@pengutronix.de \
--to=jlu@pengutronix.de \
--cc=akpm@linux-foundation.org \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=giometti@enneenne.com \
--cc=grant.likely@linaro.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rob.herring@calxeda.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).