| V4L2 clocks |
| ----------- |
| |
| .. attention:: |
| |
| This is a temporary API and it shall be replaced by the generic |
| clock API, when the latter becomes widely available. |
| |
| Many subdevices, like camera sensors, TV decoders and encoders, need a clock |
| signal to be supplied by the system. Often this clock is supplied by the |
| respective bridge device. The Linux kernel provides a Common Clock Framework for |
| this purpose. However, it is not (yet) available on all architectures. Besides, |
| the nature of the multi-functional (clock, data + synchronisation, I2C control) |
| connection of subdevices to the system might impose special requirements on the |
| clock API usage. E.g. V4L2 has to support clock provider driver unregistration |
| while a subdevice driver is holding a reference to the clock. For these reasons |
| a V4L2 clock helper API has been developed and is provided to bridge and |
| subdevice drivers. |
| |
| The API consists of two parts: two functions to register and unregister a V4L2 |
| clock source: v4l2_clk_register() and v4l2_clk_unregister() and calls to control |
| a clock object, similar to the respective generic clock API calls: |
| v4l2_clk_get(), v4l2_clk_put(), v4l2_clk_enable(), v4l2_clk_disable(), |
| v4l2_clk_get_rate(), and v4l2_clk_set_rate(). Clock suppliers have to provide |
| clock operations that will be called when clock users invoke respective API |
| methods. |
| |
| It is expected that once the CCF becomes available on all relevant |
| architectures this API will be removed. |