From: Thierry Reding <thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> To: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Sascha Hauer <s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>, Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>, Matthias Kaehlcke <matthias-RprLehDfhQ3k1uMJSBkQmQ@public.gmane.org>, Kurt Van Dijck <kurt.van.dijck-/BeEPy95v10@public.gmane.org>, Rob Herring <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>, Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>, Colin Cross <ccross-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org>, Olof Johansson <olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org>, Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>, Richard Purdie <rpurdie-Fm38FmjxZ/leoWH0uzbU5w@public.gmane.org>, Mark Brown <broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org>, Mitch Bradley <wmb-D5eQfiDGL7eakBO8gow8eQ@public.gmane.org>, Mike Frysinger <vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>, Eric Miao <eric.y.miao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>, Lars-Peter Clausen <lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>, Ryan Mallon <rmallon-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>, Shawn Guo <shawn.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>, Bernhard Walle <walle-pDveNdigDaDu9UdzE1sIFA@public.gmane.org> Subject: [PATCH v6 03/17] pwm: Add debugfs interface Date: Tue, 10 Apr 2012 17:06:26 +0200 [thread overview] Message-ID: <1334070400-25013-4-git-send-email-thierry.reding@avionic-design.de> (raw) In-Reply-To: <1334070400-25013-1-git-send-email-thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> This commit adds a debugfs interface that can be used to list the current internal state of the PWM devices registered with the PWM framework. Signed-off-by: Thierry Reding <thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> Reviewed-by: Mark Brown <broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org> Reviewed-by: Reviewed-by: Shawn Guo <shawn.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> --- Changes in v5: - new patch splitting off debugfs interface implementation - use seq_file's iterator interface for debugfs support - add missing forward declaration of struct seq_file drivers/pwm/core.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++ include/linux/pwm.h | 6 ++++ 2 files changed, 96 insertions(+) diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index 8688754..7e13da1 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -27,6 +27,8 @@ #include <linux/err.h> #include <linux/slab.h> #include <linux/device.h> +#include <linux/debugfs.h> +#include <linux/seq_file.h> #define MAX_PWMS 1024 @@ -334,3 +336,91 @@ void pwm_disable(struct pwm_device *pwm) pwm->chip->ops->disable(pwm->chip, pwm); } EXPORT_SYMBOL_GPL(pwm_disable); + +#ifdef CONFIG_DEBUG_FS +static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s) +{ + unsigned int i; + + for (i = 0; i < chip->npwm; i++) { + struct pwm_device *pwm = &chip->pwms[i]; + + seq_printf(s, " pwm-%-3d (%-20.20s):", i, pwm->label); + + if (test_bit(PWMF_REQUESTED, &pwm->flags)) + seq_printf(s, " requested"); + + if (test_bit(PWMF_ENABLED, &pwm->flags)) + seq_printf(s, " enabled"); + + seq_printf(s, "\n"); + } +} + +static void *pwm_seq_start(struct seq_file *s, loff_t *pos) +{ + mutex_lock(&pwm_lock); + s->private = ""; + + return seq_list_start(&pwm_chips, *pos); +} + +static void *pwm_seq_next(struct seq_file *s, void *v, loff_t *pos) +{ + s->private = "\n"; + + return seq_list_next(v, &pwm_chips, pos); +} + +static void pwm_seq_stop(struct seq_file *s, void *v) +{ + mutex_unlock(&pwm_lock); +} + +static int pwm_seq_show(struct seq_file *s, void *v) +{ + struct pwm_chip *chip = list_entry(v, struct pwm_chip, list); + + seq_printf(s, "%s%s/%s, %d PWM device%s\n", (char *)s->private, + chip->dev->bus ? chip->dev->bus->name : "no-bus", + dev_name(chip->dev), chip->npwm, + (chip->npwm != 1) ? "s" : ""); + + if (chip->ops->dbg_show) + chip->ops->dbg_show(chip, s); + else + pwm_dbg_show(chip, s); + + return 0; +} + +static const struct seq_operations pwm_seq_ops = { + .start = pwm_seq_start, + .next = pwm_seq_next, + .stop = pwm_seq_stop, + .show = pwm_seq_show, +}; + +static int pwm_seq_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &pwm_seq_ops); +} + +static const struct file_operations pwm_debugfs_ops = { + .owner = THIS_MODULE, + .open = pwm_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +static int __init pwm_debugfs_init(void) +{ + debugfs_create_file("pwm", S_IFREG | S_IRUGO, NULL, NULL, + &pwm_debugfs_ops); + + return 0; +} + +subsys_initcall(pwm_debugfs_init); +#endif /* CONFIG_DEBUG_FS */ diff --git a/include/linux/pwm.h b/include/linux/pwm.h index 5710391..047cd53 100644 --- a/include/linux/pwm.h +++ b/include/linux/pwm.h @@ -2,6 +2,7 @@ #define __LINUX_PWM_H struct pwm_device; +struct seq_file; /* * pwm_request - request a PWM device @@ -65,6 +66,7 @@ static inline unsigned int pwm_get_period(struct pwm_device *pwm) * @config: configure duty cycles and period length for this PWM * @enable: enable PWM output toggling * @disable: disable PWM output toggling + * @dbg_show: optional routine to show contents in debugfs * @owner: helps prevent removal of modules exporting active PWMs */ struct pwm_ops { @@ -79,6 +81,10 @@ struct pwm_ops { struct pwm_device *pwm); void (*disable)(struct pwm_chip *chip, struct pwm_device *pwm); +#ifdef CONFIG_DEBUG_FS + void (*dbg_show)(struct pwm_chip *chip, + struct seq_file *s); +#endif struct module *owner; }; -- 1.7.9.6
WARNING: multiple messages have this Message-ID (diff)
From: thierry.reding@avionic-design.de (Thierry Reding) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v6 03/17] pwm: Add debugfs interface Date: Tue, 10 Apr 2012 17:06:26 +0200 [thread overview] Message-ID: <1334070400-25013-4-git-send-email-thierry.reding@avionic-design.de> (raw) In-Reply-To: <1334070400-25013-1-git-send-email-thierry.reding@avionic-design.de> This commit adds a debugfs interface that can be used to list the current internal state of the PWM devices registered with the PWM framework. Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de> Reviewed-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Reviewed-by: Reviewed-by: Shawn Guo <shawn.guo@linaro.org> --- Changes in v5: - new patch splitting off debugfs interface implementation - use seq_file's iterator interface for debugfs support - add missing forward declaration of struct seq_file drivers/pwm/core.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++ include/linux/pwm.h | 6 ++++ 2 files changed, 96 insertions(+) diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index 8688754..7e13da1 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -27,6 +27,8 @@ #include <linux/err.h> #include <linux/slab.h> #include <linux/device.h> +#include <linux/debugfs.h> +#include <linux/seq_file.h> #define MAX_PWMS 1024 @@ -334,3 +336,91 @@ void pwm_disable(struct pwm_device *pwm) pwm->chip->ops->disable(pwm->chip, pwm); } EXPORT_SYMBOL_GPL(pwm_disable); + +#ifdef CONFIG_DEBUG_FS +static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s) +{ + unsigned int i; + + for (i = 0; i < chip->npwm; i++) { + struct pwm_device *pwm = &chip->pwms[i]; + + seq_printf(s, " pwm-%-3d (%-20.20s):", i, pwm->label); + + if (test_bit(PWMF_REQUESTED, &pwm->flags)) + seq_printf(s, " requested"); + + if (test_bit(PWMF_ENABLED, &pwm->flags)) + seq_printf(s, " enabled"); + + seq_printf(s, "\n"); + } +} + +static void *pwm_seq_start(struct seq_file *s, loff_t *pos) +{ + mutex_lock(&pwm_lock); + s->private = ""; + + return seq_list_start(&pwm_chips, *pos); +} + +static void *pwm_seq_next(struct seq_file *s, void *v, loff_t *pos) +{ + s->private = "\n"; + + return seq_list_next(v, &pwm_chips, pos); +} + +static void pwm_seq_stop(struct seq_file *s, void *v) +{ + mutex_unlock(&pwm_lock); +} + +static int pwm_seq_show(struct seq_file *s, void *v) +{ + struct pwm_chip *chip = list_entry(v, struct pwm_chip, list); + + seq_printf(s, "%s%s/%s, %d PWM device%s\n", (char *)s->private, + chip->dev->bus ? chip->dev->bus->name : "no-bus", + dev_name(chip->dev), chip->npwm, + (chip->npwm != 1) ? "s" : ""); + + if (chip->ops->dbg_show) + chip->ops->dbg_show(chip, s); + else + pwm_dbg_show(chip, s); + + return 0; +} + +static const struct seq_operations pwm_seq_ops = { + .start = pwm_seq_start, + .next = pwm_seq_next, + .stop = pwm_seq_stop, + .show = pwm_seq_show, +}; + +static int pwm_seq_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &pwm_seq_ops); +} + +static const struct file_operations pwm_debugfs_ops = { + .owner = THIS_MODULE, + .open = pwm_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +static int __init pwm_debugfs_init(void) +{ + debugfs_create_file("pwm", S_IFREG | S_IRUGO, NULL, NULL, + &pwm_debugfs_ops); + + return 0; +} + +subsys_initcall(pwm_debugfs_init); +#endif /* CONFIG_DEBUG_FS */ diff --git a/include/linux/pwm.h b/include/linux/pwm.h index 5710391..047cd53 100644 --- a/include/linux/pwm.h +++ b/include/linux/pwm.h @@ -2,6 +2,7 @@ #define __LINUX_PWM_H struct pwm_device; +struct seq_file; /* * pwm_request - request a PWM device @@ -65,6 +66,7 @@ static inline unsigned int pwm_get_period(struct pwm_device *pwm) * @config: configure duty cycles and period length for this PWM * @enable: enable PWM output toggling * @disable: disable PWM output toggling + * @dbg_show: optional routine to show contents in debugfs * @owner: helps prevent removal of modules exporting active PWMs */ struct pwm_ops { @@ -79,6 +81,10 @@ struct pwm_ops { struct pwm_device *pwm); void (*disable)(struct pwm_chip *chip, struct pwm_device *pwm); +#ifdef CONFIG_DEBUG_FS + void (*dbg_show)(struct pwm_chip *chip, + struct seq_file *s); +#endif struct module *owner; }; -- 1.7.9.6
next prev parent reply other threads:[~2012-04-10 15:06 UTC|newest] Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-04-10 15:06 [PATCH v6 00/17] Add PWM framework and device tree support Thierry Reding 2012-04-10 15:06 ` Thierry Reding [not found] ` <1334070400-25013-1-git-send-email-thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> 2012-04-10 15:06 ` [PATCH v6 01/17] pwm: Add PWM framework support Thierry Reding 2012-04-10 15:06 ` Thierry Reding 2012-04-10 15:06 ` [PATCH v6 02/17] pwm: Allow chips to support multiple PWMs Thierry Reding 2012-04-10 15:06 ` Thierry Reding 2012-04-10 15:06 ` Thierry Reding [this message] 2012-04-10 15:06 ` [PATCH v6 03/17] pwm: Add debugfs interface Thierry Reding [not found] ` <1334070400-25013-4-git-send-email-thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> 2012-04-11 12:33 ` Shawn Guo 2012-04-11 12:33 ` Shawn Guo [not found] ` <20120411123352.GA2445-rvtDTF3kK1ictlrPMvKcciBecyulp+rMXqFh9Ls21Oc@public.gmane.org> 2012-04-11 12:38 ` Thierry Reding 2012-04-11 12:38 ` Thierry Reding 2012-04-11 15:11 ` Mark Brown 2012-04-11 15:11 ` Mark Brown 2012-04-10 15:06 ` [PATCH v6 04/17] pwm: Add table-based lookup for static mappings Thierry Reding 2012-04-10 15:06 ` Thierry Reding [not found] ` <1334070400-25013-5-git-send-email-thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> 2012-04-11 12:38 ` Shawn Guo 2012-04-11 12:38 ` Shawn Guo [not found] ` <20120411123815.GB2445-rvtDTF3kK1ictlrPMvKcciBecyulp+rMXqFh9Ls21Oc@public.gmane.org> 2012-04-11 12:51 ` Thierry Reding 2012-04-11 12:51 ` Thierry Reding 2012-04-13 9:47 ` Mark Brown 2012-04-13 9:47 ` Mark Brown 2012-04-10 15:06 ` [PATCH v6 05/17] pwm: Add device tree support Thierry Reding 2012-04-10 15:06 ` Thierry Reding [not found] ` <1334070400-25013-6-git-send-email-thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> 2012-04-11 13:02 ` Shawn Guo 2012-04-11 13:02 ` Shawn Guo [not found] ` <20120411130208.GC2445-rvtDTF3kK1ictlrPMvKcciBecyulp+rMXqFh9Ls21Oc@public.gmane.org> 2012-04-11 13:14 ` Thierry Reding 2012-04-11 13:14 ` Thierry Reding 2012-04-10 15:06 ` [PATCH v6 06/17] ARM: tegra: Fix PWM clock programming Thierry Reding 2012-04-10 15:06 ` Thierry Reding 2012-04-10 15:06 ` [PATCH v6 07/17] ARM: tegra: Provide clock for only one PWM controller Thierry Reding 2012-04-10 15:06 ` Thierry Reding 2012-04-10 15:06 ` [PATCH v6 08/17] pwm: Add NVIDIA Tegra SoC support Thierry Reding 2012-04-10 15:06 ` Thierry Reding 2012-04-10 15:06 ` [PATCH v6 09/17] pwm: tegra: Add device tree support Thierry Reding 2012-04-10 15:06 ` Thierry Reding 2012-04-10 15:06 ` [PATCH v6 10/17] pwm: Move Blackfin PWM driver to PWM framework Thierry Reding 2012-04-10 15:06 ` Thierry Reding 2012-04-10 15:06 ` [PATCH v6 11/17] pwm: Move PXA " Thierry Reding 2012-04-10 15:06 ` Thierry Reding 2012-04-10 15:06 ` [PATCH v6 12/17] ARM i.MX: Move i.MX pwm driver to pwm framework Thierry Reding 2012-04-10 15:06 ` Thierry Reding 2012-04-10 15:06 ` [PATCH v6 13/17] ARM Samsung: Move s3c " Thierry Reding 2012-04-10 15:06 ` Thierry Reding 2012-04-10 15:06 ` [PATCH v6 14/17] ARM vt8500: Move vt8500 " Thierry Reding 2012-04-10 15:06 ` Thierry Reding 2012-04-10 15:06 ` [PATCH v6 15/17] pwm: add pwm-mxs support Thierry Reding 2012-04-10 15:06 ` Thierry Reding 2012-04-10 15:06 ` [PATCH v6 16/17] pwm-backlight: Add rudimentary device tree support Thierry Reding 2012-04-10 15:06 ` Thierry Reding [not found] ` <1334070400-25013-17-git-send-email-thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> 2012-04-11 13:28 ` Shawn Guo 2012-04-11 13:28 ` Shawn Guo 2012-04-13 9:48 ` Mark Brown 2012-04-13 9:48 ` Mark Brown 2012-04-10 15:06 ` [PATCH v6 17/17] pwm: Take over maintainership of the PWM subsystem Thierry Reding 2012-04-10 15:06 ` Thierry Reding [not found] ` <1334070400-25013-18-git-send-email-thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> 2012-04-10 19:51 ` Arnd Bergmann 2012-04-10 19:51 ` Arnd Bergmann [not found] ` <201204101951.44198.arnd-r2nGTMty4D4@public.gmane.org> 2012-04-12 7:22 ` Thierry Reding 2012-04-12 7:22 ` Thierry Reding [not found] ` <20120412072206.GB18252-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> 2012-04-12 11:34 ` Arnd Bergmann 2012-04-12 11:34 ` Arnd Bergmann [not found] ` <201204121134.24892.arnd-r2nGTMty4D4@public.gmane.org> 2012-04-12 12:27 ` Thierry Reding 2012-04-12 12:27 ` Thierry Reding [not found] ` <20120412122740.GB5353-RM9K5IK7kjIyiCvfTdI0JKcOhU4Rzj621B7CTYaBSLdn68oJJulU0Q@public.gmane.org> 2012-04-16 5:50 ` Thierry Reding 2012-04-16 5:50 ` Thierry Reding [not found] ` <20120416055012.GA3037-RM9K5IK7kjIyiCvfTdI0JKcOhU4Rzj621B7CTYaBSLdn68oJJulU0Q@public.gmane.org> 2012-04-16 15:02 ` Arnd Bergmann 2012-04-16 15:02 ` Arnd Bergmann 2012-04-10 20:58 ` Sascha Hauer 2012-04-10 20:58 ` Sascha Hauer 2012-06-14 12:47 ` [PATCH v6 00/17] Add PWM framework and device tree support Hebbar, Gururaja 2012-06-14 12:47 ` Hebbar, Gururaja [not found] ` <1BAFE6F6C881BF42822005164F1491C33EA21A9F-Er742YJ7I/eIQmiDNMet8wC/G2K4zDHf@public.gmane.org> 2012-06-14 12:53 ` Thierry Reding 2012-06-14 12:53 ` Thierry Reding 2012-06-14 13:36 ` Hebbar, Gururaja 2012-06-14 13:36 ` Hebbar, Gururaja 2012-04-29 15:40 ` Eric Bénard 2012-04-29 15:40 ` Eric Bénard
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=1334070400-25013-4-git-send-email-thierry.reding@avionic-design.de \ --to=thierry.reding-rm9k5ik7kjkj5m59nbduvrnah6klmebb@public.gmane.org \ --cc=arnd-r2nGTMty4D4@public.gmane.org \ --cc=broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org \ --cc=ccross-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org \ --cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \ --cc=eric.y.miao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \ --cc=grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org \ --cc=kurt.van.dijck-/BeEPy95v10@public.gmane.org \ --cc=lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org \ --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \ --cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=matthias-RprLehDfhQ3k1uMJSBkQmQ@public.gmane.org \ --cc=olof-nZhT3qVonbNeoWH0uzbU5w@public.gmane.org \ --cc=rmallon-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \ --cc=rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org \ --cc=rpurdie-Fm38FmjxZ/leoWH0uzbU5w@public.gmane.org \ --cc=s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \ --cc=shawn.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \ --cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \ --cc=vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org \ --cc=walle-pDveNdigDaDu9UdzE1sIFA@public.gmane.org \ --cc=wmb-D5eQfiDGL7eakBO8gow8eQ@public.gmane.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: linkBe 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.