linux/include/media/v4l2-clk.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * V4L2 clock service
   4 *
   5 * Copyright (C) 2012-2013, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
   6 *
   7 * ATTENTION: This is a temporary API and it shall be replaced by the generic
   8 * clock API, when the latter becomes widely available.
   9 */
  10
  11#ifndef MEDIA_V4L2_CLK_H
  12#define MEDIA_V4L2_CLK_H
  13
  14#include <linux/atomic.h>
  15#include <linux/export.h>
  16#include <linux/list.h>
  17#include <linux/mutex.h>
  18
  19struct module;
  20struct device;
  21
  22struct clk;
  23struct v4l2_clk {
  24        struct list_head list;
  25        const struct v4l2_clk_ops *ops;
  26        const char *dev_id;
  27        int enable;
  28        struct mutex lock; /* Protect the enable count */
  29        atomic_t use_count;
  30        struct clk *clk;
  31        void *priv;
  32};
  33
  34struct v4l2_clk_ops {
  35        struct module   *owner;
  36        int             (*enable)(struct v4l2_clk *clk);
  37        void            (*disable)(struct v4l2_clk *clk);
  38        unsigned long   (*get_rate)(struct v4l2_clk *clk);
  39        int             (*set_rate)(struct v4l2_clk *clk, unsigned long);
  40};
  41
  42struct v4l2_clk *v4l2_clk_register(const struct v4l2_clk_ops *ops,
  43                                   const char *dev_name,
  44                                   void *priv);
  45void v4l2_clk_unregister(struct v4l2_clk *clk);
  46struct v4l2_clk *v4l2_clk_get(struct device *dev, const char *id);
  47void v4l2_clk_put(struct v4l2_clk *clk);
  48int v4l2_clk_enable(struct v4l2_clk *clk);
  49void v4l2_clk_disable(struct v4l2_clk *clk);
  50unsigned long v4l2_clk_get_rate(struct v4l2_clk *clk);
  51int v4l2_clk_set_rate(struct v4l2_clk *clk, unsigned long rate);
  52
  53struct module;
  54
  55struct v4l2_clk *__v4l2_clk_register_fixed(const char *dev_id,
  56                        unsigned long rate, struct module *owner);
  57void v4l2_clk_unregister_fixed(struct v4l2_clk *clk);
  58
  59static inline struct v4l2_clk *v4l2_clk_register_fixed(const char *dev_id,
  60                                                        unsigned long rate)
  61{
  62        return __v4l2_clk_register_fixed(dev_id, rate, THIS_MODULE);
  63}
  64
  65#define V4L2_CLK_NAME_SIZE 64
  66
  67#define v4l2_clk_name_i2c(name, size, adap, client) snprintf(name, size, \
  68                          "%d-%04x", adap, client)
  69
  70#define v4l2_clk_name_of(name, size, node) snprintf(name, size, \
  71                          "of-%pOF", node)
  72
  73#endif
  74