2012-12-04 14:42:15 +04:00
/*
* V4L2 clock service
*
* Copyright ( C ) 2012 - 2013 , Guennadi Liakhovetski < g . liakhovetski @ gmx . de >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*
* ATTENTION : This is a temporary API and it shall be replaced by the generic
* clock API , when the latter becomes widely available .
*/
# ifndef MEDIA_V4L2_CLK_H
# define MEDIA_V4L2_CLK_H
# include <linux/atomic.h>
2013-08-28 17:28:26 +04:00
# include <linux/export.h>
2012-12-04 14:42:15 +04:00
# include <linux/list.h>
# include <linux/mutex.h>
struct module ;
struct device ;
struct v4l2_clk {
struct list_head list ;
const struct v4l2_clk_ops * ops ;
const char * dev_id ;
const char * id ;
int enable ;
struct mutex lock ; /* Protect the enable count */
atomic_t use_count ;
void * priv ;
} ;
struct v4l2_clk_ops {
struct module * owner ;
int ( * enable ) ( struct v4l2_clk * clk ) ;
void ( * disable ) ( struct v4l2_clk * clk ) ;
unsigned long ( * get_rate ) ( struct v4l2_clk * clk ) ;
int ( * set_rate ) ( struct v4l2_clk * clk , unsigned long ) ;
} ;
struct v4l2_clk * v4l2_clk_register ( const struct v4l2_clk_ops * ops ,
const char * dev_name ,
const char * name , void * priv ) ;
void v4l2_clk_unregister ( struct v4l2_clk * clk ) ;
struct v4l2_clk * v4l2_clk_get ( struct device * dev , const char * id ) ;
void v4l2_clk_put ( struct v4l2_clk * clk ) ;
int v4l2_clk_enable ( struct v4l2_clk * clk ) ;
void v4l2_clk_disable ( struct v4l2_clk * clk ) ;
unsigned long v4l2_clk_get_rate ( struct v4l2_clk * clk ) ;
int v4l2_clk_set_rate ( struct v4l2_clk * clk , unsigned long rate ) ;
2013-08-28 17:28:26 +04:00
struct module ;
struct v4l2_clk * __v4l2_clk_register_fixed ( const char * dev_id ,
const char * id , unsigned long rate , struct module * owner ) ;
void v4l2_clk_unregister_fixed ( struct v4l2_clk * clk ) ;
static inline struct v4l2_clk * v4l2_clk_register_fixed ( const char * dev_id ,
const char * id ,
unsigned long rate )
{
return __v4l2_clk_register_fixed ( dev_id , id , rate , THIS_MODULE ) ;
}
2013-08-28 17:28:27 +04:00
# define v4l2_clk_name_i2c(name, size, adap, client) snprintf(name, size, \
" %d-%04x " , adap , client )
2012-12-04 14:42:15 +04:00
# endif