From: Ladislav Michl <ladis@linux-mips.org>
To: linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-pwm@vger.kernel.org
Cc: t-kristo@ti.com, grygorii.strashko@ti.com, aaro.koskinen@iki.fi,
tony@atomide.com, Keerthy <j-keerthy@ti.com>,
daniel.lezcano@linaro.org, robh+dt@kernel.org,
narmstrong@baylibre.com, thierry.reding@gmail.com,
Brecht Neyrinck <brechtneyrinck@gmail.com>,
sebastian.reichel@collabora.co.uk,
Thomas Gleixner <tglx@linutronix.de>,
Claudiu.Beznea@microchip.com
Subject: [PATCH 5/6] clocksource: timer-ti-dm: Add event capture
Date: Fri, 23 Feb 2018 11:16:29 +0100 [thread overview]
Message-ID: <20180223101629.GF5746@lenoch> (raw)
In-Reply-To: <20180223101254.GA5746@lenoch>
Implement event capture functions.
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
drivers/clocksource/timer-ti-dm.c | 47 ++++++++++++++++++++++++++++--
include/linux/platform_data/dmtimer-omap.h | 8 +++++
2 files changed, 53 insertions(+), 2 deletions(-)
diff --git a/drivers/clocksource/timer-ti-dm.c b/drivers/clocksource/timer-ti-dm.c
index b57e875b74ca..c227d62794a0 100644
--- a/drivers/clocksource/timer-ti-dm.c
+++ b/drivers/clocksource/timer-ti-dm.c
@@ -576,8 +576,8 @@ static int omap_dm_timer_set_load(struct omap_dm_timer *timer, int autoreload,
}
/* Optimized set_load which removes costly spin wait in timer_start */
-int omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload,
- unsigned int load)
+static int omap_dm_timer_set_load_start(struct omap_dm_timer *timer,
+ int autoreload, unsigned int load)
{
u32 l;
@@ -627,6 +627,30 @@ static int omap_dm_timer_set_match(struct omap_dm_timer *timer, int enable,
return 0;
}
+static int omap_dm_timer_set_capture(struct omap_dm_timer *timer,
+ int captmode, int edges)
+{
+ u32 l;
+
+ if (unlikely(!timer))
+ return -EINVAL;
+
+ omap_dm_timer_enable(timer);
+ l = omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
+ l &= ~(OMAP_TIMER_CTRL_CAPTMODE | OMAP_TIMER_CTRL_SCPWM |
+ OMAP_TIMER_CTRL_PT | OMAP_TIMER_CTRL_TCM_BOTHEDGES);
+ l |= OMAP_TIMER_CTRL_GPOCFG;
+ if (captmode)
+ l |= OMAP_TIMER_CTRL_CAPTMODE;
+ l |= edges << 8;
+ omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG, l);
+
+ /* Save the context */
+ timer->context.tclr = l;
+ omap_dm_timer_disable(timer);
+ return 0;
+}
+
static int omap_dm_timer_set_pwm(struct omap_dm_timer *timer, int def_on,
int toggle, int trigger)
{
@@ -785,6 +809,22 @@ int omap_dm_timers_active(void)
return 0;
}
+static int omap_dm_timer_read_capture(struct omap_dm_timer *timer,
+ unsigned int *reg,
+ unsigned int *reg2)
+{
+ if (unlikely(!timer || pm_runtime_suspended(&timer->pdev->dev))) {
+ pr_err("%s: timer not available or enabled.\n", __func__);
+ return -EINVAL;
+ }
+
+ *reg = omap_dm_timer_read_reg(timer, OMAP_TIMER_CAPTURE_REG);
+ if (reg2)
+ *reg2 = omap_dm_timer_read_reg(timer, OMAP_TIMER_CAPTURE2_REG);
+
+ return 0;
+}
+
static const struct of_device_id omap_timer_match[];
/**
@@ -930,11 +970,14 @@ const static struct omap_dm_timer_ops dmtimer_ops = {
.start = omap_dm_timer_start,
.stop = omap_dm_timer_stop,
.set_load = omap_dm_timer_set_load,
+ .set_load_start = omap_dm_timer_set_load_start,
.set_match = omap_dm_timer_set_match,
+ .set_capture = omap_dm_timer_set_capture,
.set_pwm = omap_dm_timer_set_pwm,
.set_prescaler = omap_dm_timer_set_prescaler,
.read_counter = omap_dm_timer_read_counter,
.write_counter = omap_dm_timer_write_counter,
+ .read_capture = omap_dm_timer_read_capture,
.read_status = omap_dm_timer_read_status,
.write_status = omap_dm_timer_write_status,
};
diff --git a/include/linux/platform_data/dmtimer-omap.h b/include/linux/platform_data/dmtimer-omap.h
index 757a0f9e26f9..7502f130b213 100644
--- a/include/linux/platform_data/dmtimer-omap.h
+++ b/include/linux/platform_data/dmtimer-omap.h
@@ -43,8 +43,12 @@ struct omap_dm_timer_ops {
int (*set_load)(struct omap_dm_timer *timer, int autoreload,
unsigned int value);
+ int (*set_load_start)(struct omap_dm_timer *timer, int autoreload,
+ unsigned int value);
int (*set_match)(struct omap_dm_timer *timer, int enable,
unsigned int match);
+ int (*set_capture)(struct omap_dm_timer *timer, int captmode,
+ int edges);
int (*set_pwm)(struct omap_dm_timer *timer, int def_on,
int toggle, int trigger);
int (*set_prescaler)(struct omap_dm_timer *timer, int prescaler);
@@ -52,6 +56,10 @@ struct omap_dm_timer_ops {
unsigned int (*read_counter)(struct omap_dm_timer *timer);
int (*write_counter)(struct omap_dm_timer *timer,
unsigned int value);
+
+ int (*read_capture)(struct omap_dm_timer *timer, unsigned int *reg,
+ unsigned int *reg2);
+
unsigned int (*read_status)(struct omap_dm_timer *timer);
int (*write_status)(struct omap_dm_timer *timer,
unsigned int value);
--
2.16.1
next prev parent reply other threads:[~2018-02-23 10:16 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-23 10:12 [PATCH 0/6] Implement event capture for OMAP (draft) Ladislav Michl
2018-02-23 10:13 ` [PATCH 1/6] clocksource: timer-ti-dm: Make unexported functions static Ladislav Michl
2018-02-27 18:06 ` Tony Lindgren
2018-02-27 19:07 ` Ladislav Michl
2018-02-27 19:23 ` Tony Lindgren
2018-02-28 22:11 ` Tony Lindgren
2018-02-23 10:14 ` [PATCH 2/6] clocksource: timer-ti-dm: Consolidate set source Ladislav Michl
2018-02-23 10:15 ` [PATCH 3/6] clocksource: timer-ti-dm: Check prescaler value Ladislav Michl
2018-02-23 10:15 ` [PATCH 4/6] pwm: pwm-omap-dmtimer: Fix frequency when using prescaler Ladislav Michl
2018-03-27 21:53 ` Thierry Reding
2018-03-27 22:14 ` Thierry Reding
2018-03-27 22:23 ` Tony Lindgren
2018-03-28 0:34 ` Ladislav Michl
2018-02-23 10:16 ` Ladislav Michl [this message]
2018-02-23 10:17 ` [PATCH 6/6] pwm: pwm-omap-dmtimer: Add capture functionality Ladislav Michl
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=20180223101629.GF5746@lenoch \
--to=ladis@linux-mips.org \
--cc=Claudiu.Beznea@microchip.com \
--cc=aaro.koskinen@iki.fi \
--cc=brechtneyrinck@gmail.com \
--cc=daniel.lezcano@linaro.org \
--cc=grygorii.strashko@ti.com \
--cc=j-keerthy@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-pwm@vger.kernel.org \
--cc=narmstrong@baylibre.com \
--cc=robh+dt@kernel.org \
--cc=sebastian.reichel@collabora.co.uk \
--cc=t-kristo@ti.com \
--cc=tglx@linutronix.de \
--cc=thierry.reding@gmail.com \
--cc=tony@atomide.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).