#include <sys/param.h>
#include <sys/conf.h>
#include <sys/bus.h>
#include <sys/kernel.h>
#include <sys/kobj.h>
#include <sys/malloc.h>
#include <sys/mutex.h>
#include <sys/module.h>
#include <sys/rman.h>
#include <sys/systm.h>
#include <machine/bus.h>
#include <dev/clk/clk_link.h>
static int clknode_link_init(struct clknode *clk, device_t dev);
static int clknode_link_recalc(struct clknode *clk, uint64_t *freq);
static int clknode_link_set_freq(struct clknode *clk, uint64_t fin,
uint64_t *fout, int flags, int *stop);
static int clknode_link_set_mux(struct clknode *clk, int idx);
static int clknode_link_set_gate(struct clknode *clk, bool enable);
static clknode_method_t clknode_link_methods[] = {
CLKNODEMETHOD(clknode_init, clknode_link_init),
CLKNODEMETHOD(clknode_recalc_freq, clknode_link_recalc),
CLKNODEMETHOD(clknode_set_freq, clknode_link_set_freq),
CLKNODEMETHOD(clknode_set_gate, clknode_link_set_gate),
CLKNODEMETHOD(clknode_set_mux, clknode_link_set_mux),
CLKNODEMETHOD_END
};
DEFINE_CLASS_1(clknode_link, clknode_link_class, clknode_link_methods,
0, clknode_class);
static int
clknode_link_init(struct clknode *clk, device_t dev)
{
return(0);
}
static int
clknode_link_recalc(struct clknode *clk, uint64_t *freq)
{
printf("%s: Attempt to use unresolved linked clock: %s\n", __func__,
clknode_get_name(clk));
return (EBADF);
}
static int
clknode_link_set_freq(struct clknode *clk, uint64_t fin, uint64_t *fout,
int flags, int *stop)
{
printf("%s: Attempt to use unresolved linked clock: %s\n", __func__,
clknode_get_name(clk));
return (EBADF);
}
static int
clknode_link_set_mux(struct clknode *clk, int idx)
{
printf("%s: Attempt to use unresolved linked clock: %s\n", __func__,
clknode_get_name(clk));
return (EBADF);
}
static int
clknode_link_set_gate(struct clknode *clk, bool enable)
{
printf("%s: Attempt to use unresolved linked clock: %s\n", __func__,
clknode_get_name(clk));
return (EBADF);
}
int
clknode_link_register(struct clkdom *clkdom, struct clk_link_def *clkdef)
{
struct clknode *clk;
struct clknode_init_def tmp;
tmp = clkdef->clkdef;
tmp.flags |= CLK_NODE_LINKED;
clk = clknode_create(clkdom, &clknode_link_class, &tmp);
if (clk == NULL)
return (1);
clknode_register(clkdom, clk);
return (0);
}