Page MenuHomeFreeBSD

D60883.1794681363.diff
No OneTemporary

Authored By
Unknown
Size
2 KB
Referenced Files
None
Subscribers
None

D60883.1794681363.diff

diff --git a/sys/dev/clk/clk.h b/sys/dev/clk/clk.h
--- a/sys/dev/clk/clk.h
+++ b/sys/dev/clk/clk.h
@@ -116,6 +116,8 @@
int enablecnt);
int clknode_test_freq(struct clknode *clknode, uint64_t freq, int flags,
int enablecnt, uint64_t *out_freq);
+int clknode_set_phase(struct clknode *clknode, int degrees);
+int clknode_get_phase(struct clknode *clknode, int *degrees);
int clknode_enable(struct clknode *clknode);
int clknode_disable(struct clknode *clknode);
int clknode_stop(struct clknode *clknode, int depth);
@@ -129,6 +131,8 @@
int clk_get_freq(clk_t clk, uint64_t *freq);
int clk_set_freq(clk_t clk, uint64_t freq, int flags);
int clk_test_freq(clk_t clk, uint64_t freq, int flags);
+int clk_set_phase(clk_t clk, int degrees);
+int clk_get_phase(clk_t clk, int *degrees);
int clk_enable(clk_t clk);
int clk_disable(clk_t clk);
int clk_stop(clk_t clk);
diff --git a/sys/dev/clk/clk.c b/sys/dev/clk/clk.c
--- a/sys/dev/clk/clk.c
+++ b/sys/dev/clk/clk.c
@@ -1228,6 +1228,64 @@
return (rv);
}
+int
+clknode_set_phase(struct clknode *clknode, int degrees)
+{
+ int rv;
+
+ CLK_TOPO_ASSERT();
+
+ CLKNODE_XLOCK(clknode);
+ rv = CLKNODE_SET_PHASE(clknode, degrees);
+ CLKNODE_UNLOCK(clknode);
+ return (rv);
+}
+
+int
+clknode_get_phase(struct clknode *clknode, int *degrees)
+{
+ int rv;
+
+ CLK_TOPO_ASSERT();
+
+ CLKNODE_XLOCK(clknode);
+ rv = CLKNODE_GET_PHASE(clknode, degrees);
+ CLKNODE_UNLOCK(clknode);
+ return (rv);
+}
+
+int
+clk_set_phase(clk_t clk, int degrees)
+{
+ int rv;
+ struct clknode *clknode;
+
+ clknode = clk->clknode;
+ KASSERT(clknode->ref_cnt > 0,
+ ("Attempt to access unreferenced clock: %s\n", clknode->name));
+
+ CLK_TOPO_XLOCK();
+ rv = clknode_set_phase(clknode, degrees);
+ CLK_TOPO_UNLOCK();
+ return (rv);
+}
+
+int
+clk_get_phase(clk_t clk, int *degrees)
+{
+ int rv;
+ struct clknode *clknode;
+
+ clknode = clk->clknode;
+ KASSERT(clknode->ref_cnt > 0,
+ ("Attempt to access unreferenced clock: %s\n", clknode->name));
+
+ CLK_TOPO_SLOCK();
+ rv = clknode_get_phase(clknode, degrees);
+ CLK_TOPO_UNLOCK();
+ return (rv);
+}
+
int
clk_get_parent(clk_t clk, clk_t *parent)
{
diff --git a/sys/dev/clk/clknode_if.m b/sys/dev/clk/clknode_if.m
--- a/sys/dev/clk/clknode_if.m
+++ b/sys/dev/clk/clknode_if.m
@@ -87,3 +87,23 @@
struct clknode *clk;
int idx;
};
+
+#
+# Set clock phase (in degrees)
+# Return: ENXIO - method is not implemented
+# 0 - success
+#
+METHOD int set_phase {
+ struct clknode *clk;
+ int degrees;
+};
+
+#
+# Get clock phase (in degrees)
+# Return: ENXIO - method is not implemented
+# 0 - success
+#
+METHOD int get_phase {
+ struct clknode *clk;
+ int *degrees;
+};

File Metadata

Mime Type
text/plain
Expires
Sat, Nov 14, 6:36 PM (5 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41714522
Default Alt Text
D60883.1794681363.diff (2 KB)

Event Timeline