Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/extres/clk/clk.c
Show First 20 Lines • Show All 370 Lines • ▼ Show 20 Lines | |||||
{ | { | ||||
CLK_TOPO_ASSERT(); | CLK_TOPO_ASSERT(); | ||||
if (ncells == 0) | if (ncells == 0) | ||||
*clk = clknode_find_by_id(clkdom, 1); | *clk = clknode_find_by_id(clkdom, 1); | ||||
else if (ncells == 1) | else if (ncells == 1) | ||||
*clk = clknode_find_by_id(clkdom, cells[0]); | *clk = clknode_find_by_id(clkdom, cells[0]); | ||||
else if (ncells == 2) | |||||
*clk = clknode_find_by_id(clkdom, cells[0]); | |||||
else | else | ||||
return (ERANGE); | return (ERANGE); | ||||
if (*clk == NULL) | if (*clk == NULL) | ||||
return (ENXIO); | return (ENXIO); | ||||
return (0); | return (0); | ||||
} | } | ||||
#endif | #endif | ||||
▲ Show 20 Lines • Show All 459 Lines • ▼ Show 20 Lines | |||||
const char * | const char * | ||||
clknode_get_name(struct clknode *clknode) | clknode_get_name(struct clknode *clknode) | ||||
{ | { | ||||
return (clknode->name); | return (clknode->name); | ||||
} | } | ||||
intptr_t | |||||
clknode_get_id(struct clknode *clknode) | |||||
{ | |||||
return (clknode->id); | |||||
} | |||||
const char ** | const char ** | ||||
clknode_get_parent_names(struct clknode *clknode) | clknode_get_parent_names(struct clknode *clknode) | ||||
{ | { | ||||
return (clknode->parent_names); | return (clknode->parent_names); | ||||
} | } | ||||
int | int | ||||
▲ Show 20 Lines • Show All 347 Lines • ▼ Show 20 Lines | clk_set_parent_by_clk(clk_t clk, clk_t parent) | ||||
KASSERT(parentnode->ref_cnt > 0, | KASSERT(parentnode->ref_cnt > 0, | ||||
("Attempt to access unreferenced clock: %s\n", clknode->name)); | ("Attempt to access unreferenced clock: %s\n", clknode->name)); | ||||
CLK_TOPO_XLOCK(); | CLK_TOPO_XLOCK(); | ||||
rv = clknode_set_parent_by_name(clknode, parentnode->name); | rv = clknode_set_parent_by_name(clknode, parentnode->name); | ||||
CLK_TOPO_UNLOCK(); | CLK_TOPO_UNLOCK(); | ||||
return (rv); | return (rv); | ||||
} | } | ||||
int clk_set_parent_by_idx(clk_t clk, int idx) | |||||
{ | |||||
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_parent_by_idx(clk->clknode, idx); | |||||
CLK_TOPO_UNLOCK(); | |||||
return (rv); | |||||
} | |||||
int | int | ||||
clk_enable(clk_t clk) | clk_enable(clk_t clk) | ||||
{ | { | ||||
int rv; | int rv; | ||||
struct clknode *clknode; | struct clknode *clknode; | ||||
clknode = clk->clknode; | clknode = clk->clknode; | ||||
KASSERT(clknode->ref_cnt > 0, | KASSERT(clknode->ref_cnt > 0, | ||||
Show All 35 Lines | clk_stop(clk_t clk) | ||||
KASSERT(clknode->ref_cnt > 0, | KASSERT(clknode->ref_cnt > 0, | ||||
("Attempt to access unreferenced clock: %s\n", clknode->name)); | ("Attempt to access unreferenced clock: %s\n", clknode->name)); | ||||
KASSERT(clk->enable_cnt == 0, | KASSERT(clk->enable_cnt == 0, | ||||
("Attempt to stop already enabled clock: %s\n", clknode->name)); | ("Attempt to stop already enabled clock: %s\n", clknode->name)); | ||||
CLK_TOPO_SLOCK(); | CLK_TOPO_SLOCK(); | ||||
rv = clknode_stop(clknode, 0); | rv = clknode_stop(clknode, 0); | ||||
CLK_TOPO_UNLOCK(); | CLK_TOPO_UNLOCK(); | ||||
return (rv); | |||||
} | |||||
int | |||||
clk_mux(clk_t clk, int index) | |||||
{ | |||||
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_SET_MUX(clknode, index); | |||||
CLK_TOPO_UNLOCK(); | |||||
return (rv); | return (rv); | ||||
} | } | ||||
int | int | ||||
clk_release(clk_t clk) | clk_release(clk_t clk) | ||||
{ | { | ||||
struct clknode *clknode; | struct clknode *clknode; | ||||
▲ Show 20 Lines • Show All 367 Lines • Show Last 20 Lines |