root/drivers/clk/sprd/mux.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. hw_to_sprd_mux

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 //
   3 // Spreadtrum multiplexer clock driver
   4 //
   5 // Copyright (C) 2017 Spreadtrum, Inc.
   6 // Author: Chunyan Zhang <chunyan.zhang@spreadtrum.com>
   7 
   8 #ifndef _SPRD_MUX_H_
   9 #define _SPRD_MUX_H_
  10 
  11 #include "common.h"
  12 
  13 /**
  14  * struct sprd_mux_ssel - Mux clock's source select bits in its register
  15  * @shift: Bit offset of the divider in its register
  16  * @width: Width of the divider field in its register
  17  * @table: For some mux clocks, not all sources are used on some special
  18  *         chips, this matches the value of mux clock's register and the
  19  *         sources which are used for this mux clock
  20  */
  21 struct sprd_mux_ssel {
  22         u8              shift;
  23         u8              width;
  24         const u8        *table;
  25 };
  26 
  27 struct sprd_mux {
  28         struct sprd_mux_ssel mux;
  29         struct sprd_clk_common  common;
  30 };
  31 
  32 #define _SPRD_MUX_CLK(_shift, _width, _table)           \
  33         {                                               \
  34                 .shift  = _shift,                       \
  35                 .width  = _width,                       \
  36                 .table  = _table,                       \
  37         }
  38 
  39 #define SPRD_MUX_CLK_TABLE(_struct, _name, _parents, _table,            \
  40                                      _reg, _shift, _width,              \
  41                                      _flags)                            \
  42         struct sprd_mux _struct = {                                     \
  43                 .mux    = _SPRD_MUX_CLK(_shift, _width, _table),        \
  44                 .common = {                                             \
  45                         .regmap         = NULL,                         \
  46                         .reg            = _reg,                         \
  47                         .hw.init = CLK_HW_INIT_PARENTS(_name,           \
  48                                                        _parents,        \
  49                                                        &sprd_mux_ops,   \
  50                                                        _flags),         \
  51                 }                                                       \
  52         }
  53 
  54 #define SPRD_MUX_CLK(_struct, _name, _parents, _reg,            \
  55                      _shift, _width, _flags)                    \
  56         SPRD_MUX_CLK_TABLE(_struct, _name, _parents, NULL,      \
  57                            _reg, _shift, _width, _flags)
  58 
  59 static inline struct sprd_mux *hw_to_sprd_mux(const struct clk_hw *hw)
  60 {
  61         struct sprd_clk_common *common = hw_to_sprd_clk_common(hw);
  62 
  63         return container_of(common, struct sprd_mux, common);
  64 }
  65 
  66 extern const struct clk_ops sprd_mux_ops;
  67 
  68 u8 sprd_mux_helper_get_parent(const struct sprd_clk_common *common,
  69                               const struct sprd_mux_ssel *mux);
  70 int sprd_mux_helper_set_parent(const struct sprd_clk_common *common,
  71                                const struct sprd_mux_ssel *mux,
  72                                u8 index);
  73 
  74 #endif /* _SPRD_MUX_H_ */

/* [<][>][^][v][top][bottom][index][help] */