When implementing support for a new type of clock it is only necessary to include the following header:: #include <linux/clk-provider.h> To construct a clk hardware structure for your platform you must define the following:: struct clk_foo { struct clk_hw hw; ... hardware specific data goes here ... }; To take advantage of your data you'll need to support valid operations for your clk:: struct clk_ops clk_foo_ops { .enable = &clk_foo_enable; .disable = &clk_foo_disable; }; Implement the above functions using container_of:: #define to_clk_foo(_hw) container_of(_hw, struct clk_foo, hw) int clk_foo_enable(struct clk_hw *hw) { struct clk_foo *foo; foo = to_clk_foo(hw); ... perform magic on foo ... return 0; };