linux/include/media/v4l2-clk.h
<<
>>
Prefs
   1/*
   2 * V4L2 clock service
   3 *
   4 * Copyright (C) 2012-2013, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 *
  10 * ATTENTION: This is a temporary API and it shall be replaced by the generic
  11 * clock API, when the latter becomes widely available.
  12 */
  13
  14#ifndef MEDIA_V4L2_CLK_H
  15#define MEDIA_V4L2_CLK_H
  16
  17#include <linux/atomic.h>
  18#include <linux/list.h>
  19#include <linux/mutex.h>
  20
  21struct module;
  22struct device;
  23
  24struct v4l2_clk {
  25        struct list_head list;
  26        const struct v4l2_clk_ops *ops;
  27        const char *dev_id;
  28        const char *id;
  29        int enable;
  30        struct mutex lock; /* Protect the enable count */
  31        atomic_t use_count;
  32        void *priv;
  33};
  34
  35struct v4l2_clk_ops {
  36        struct module   *owner;
  37        int             (*enable)(struct v4l2_clk *clk);
  38        void            (*disable)(struct v4l2_clk *clk);
  39        unsigned long   (*get_rate)(struct v4l2_clk *clk);
  40        int             (*set_rate)(struct v4l2_clk *clk, unsigned long);
  41};
  42
  43struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops,
  44                                   const char *dev_name,
  45                                   const char *name, void *priv);
  46void v4l2_clk_unregister(struct v4l2_clk *clk);
  47struct v4l2_clk *v4l2_clk_get(struct device *dev, const char *id);
  48void v4l2_clk_put(struct v4l2_clk *clk);
  49int v4l2_clk_enable(struct v4l2_clk *clk);
  50void v4l2_clk_disable(struct v4l2_clk *clk);
  51unsigned long v4l2_clk_get_rate(struct v4l2_clk *clk);
  52int v4l2_clk_set_rate(struct v4l2_clk *clk, unsigned long rate);
  53
  54#endif
  55