linux clock

  
/*** struct clk_ops - 標準的なクロック操作* @set_rate:クロックレートを設定します。clk_set_rate()を参照してください。* @get_rate:クロックレートを取得します、clk_get_rate()を参照してください。 * clk_round_rate()を参照してください。* @set_parent:クロックの親を設定します。clk_set_parent()を参照してください。**同じフィールドを設定し続ける必要がないように、共通のクロック実装をグループ化します。 *間接処理のレイヤをプロセスに追加することは、これらの操作が迅速に呼び出される必要があるとは考えにくいので*問題にならないはずです。* / struct clk_ops
{int(* set_rate)(struct clk * c、符号なしlong rate);符号なしlong(* get_rate)(struct clk * c);符号なしlong(* round_rate)(構造体clk * c、符号なしロングレート); int(int * set_parent)(構造体clk * c、構造体clk * parent);}; struct clk
{struct list_head list; struct module *所有者; struct clk * parent; int char; name; int id; int使用法;符号なしロングレート;符号なしロングctrlbit; struct clk_ops * ops; int(* enable)(struct clk *、int enable);}; /*** struct clksrc_sources - 指定されたクロックのソースのリスト* @sources:クロックへのポインタの配列* @nr_sources:@ sourcesのサイズ* /struct clksrc_sources
{unsigned int nr_sources; struct clk * *ソース;}; /*** struct clksrc_reg - クロック制御ビットのレジスタ定義* @reg:仮想メモリ内のレジスタへのポインタ* @shift:ビットフィールドがある場所へのビット単位のシフト* @size:ビットフィールドのビット単位のサイズ**これは、@ regで指定されたレジスタ内で、対象となるビットのサイズと位置を指定します。* /struct clksrc_reg
{void __iomem * reg;符号なし短シフト;符号なし短サイズ;}; /*** struct clksrc_clk - 新しいスタイルのサムスンデバイス用のクロックのクラス* @ clk:標準クロック表現* @sources:このクロックのソース* @reg_src:クロックのソースを選択するためのレジスタ定義* @reg_div:クロックの出力除数のレジスタ定義**このクロックは、新しいSoCに必要な機能を実装しています。ここで、*標準クロックブロックは、periperhalのクロックを提供するための入力マルチプレクサとポストマルチプレクサ除数を提供します。 muxの位置を*クロックにマッピングし、@ reg_srcはmux *の位置を変更するために変更するコードを示します。 @reg_divは、出力上の除算器の設定を変更する方法を定義します。* /struct clksrc_clk
{struct clksrc_kource; struct clksrc_sources * sources;} struct clksrc_reg reg_src; struct clksrc_reg reg_div;}; /* MOUT APLL * /static struct clksrc_clk clk_mout_apll = {.clk = {.name = "mout_apll"、.id = -1、}、。sources =& clk_src_apll、.reg_src = {.reg = S5P_CLK_SRC0、.shift = 0、.size = 1}、}; /* MOUT MPLL * /static struct clksrc_clk clk_mout_mpll = {.clk = {.name = "mout_mpll"、.id = -1、}、。sources =& clk_src_mpll、.reg_src = {.reg = S5P_CLK_SRC0、.shift = 4、.size = 1}、}; /* MOUT EPLL * /静的構造体clksrc_clk clk_mout_epll = {.clk = {.name =" mout_epll"、.id = -1、}、source =& clk_src_epll、 .reg_src = {.reg = S5P_CLK_SRC0、.shift = 8、.size = 1}、}; /* APLL Muxで使用可能なクロックソース* /static struct clk * clk_src_apll_list
[] = {[0] =& clk_fin_apll、[1] =& clk_fout_apll、}; struct clksrc_sources clk_src_apll = {.sources = clk_src_apll_list、.nr_sources = ARRAY_SIZE(clk_src_apll_list)、}; /* MPLL Muxで使用可能なクロックソース* /static struct clk * clk_src_mpll_list [] = {[0] =&clk_fin_mpll、[1] =& clk_fout_mpll、}; struct clksrc_sources clk_src_mpll = {.sources = clk_src_mpll_list、.nr_sources = ARRAY_SIZE(clk_src_mpll_list)、}; /* EPLL Muxで使用可能なクロックソース* /static struct clk * clk_src_epll_list [] = {[0] =& clk_fin_epll、[1] =& clk_fout_epll、}; struct clksrc_sources clk_src_epll = {.sources = clk_src_epll_list、.nr_sources = ARRAY_SIZE(clk_src_epll_list)、}; 。の#define clk_fin_apll clk_ext_xtal_mux#我々はclk_ext_xtal_mux *呼び出すすべて同じクロックである* /構造体CLK clk_ext_xtal_mux = {.nameの=" clk_fin_mpll clk_ext_xtal_mux#はclk_fin_epll clk_ext_xtal_mux#fin_mpll、clk_fin_vpll clk_ext_xtal_mux /* fin_apllを定義しfin_epllを定義する定義; ext_xtal", .id = -1、};取得時間、および周波数xtal_clk = clk_get(NULL、“ ext_xtal”); xtal = clk_get_rate(xtal_clk);
Copyright © Windowsの知識 All Rights Reserved