cregit-Linux how code gets into the kernel

Release 4.16 drivers/clk/sprd/div.c

Directory: drivers/clk/sprd
// SPDX-License-Identifier: GPL-2.0
//
// Spreadtrum divider clock driver
//
// Copyright (C) 2017 Spreadtrum, Inc.
// Author: Chunyan Zhang <chunyan.zhang@spreadtrum.com>

#include <linux/clk-provider.h>

#include "div.h"


long sprd_div_helper_round_rate(struct sprd_clk_common *common, const struct sprd_div_internal *div, unsigned long rate, unsigned long *parent_rate) { return divider_round_rate(&common->hw, rate, parent_rate, NULL, div->width, 0); }

Contributors

PersonTokensPropCommitsCommitProp
Chunyan Zhang46100.00%1100.00%
Total46100.00%1100.00%

EXPORT_SYMBOL_GPL(sprd_div_helper_round_rate);
static long sprd_div_round_rate(struct clk_hw *hw, unsigned long rate, unsigned long *parent_rate) { struct sprd_div *cd = hw_to_sprd_div(hw); return sprd_div_helper_round_rate(&cd->common, &cd->div, rate, parent_rate); }

Contributors

PersonTokensPropCommitsCommitProp
Chunyan Zhang48100.00%1100.00%
Total48100.00%1100.00%


unsigned long sprd_div_helper_recalc_rate(struct sprd_clk_common *common, const struct sprd_div_internal *div, unsigned long parent_rate) { unsigned long val; unsigned int reg; regmap_read(common->regmap, common->reg, &reg); val = reg >> div->shift; val &= (1 << div->width) - 1; return divider_recalc_rate(&common->hw, parent_rate, val, NULL, 0, div->width); }

Contributors

PersonTokensPropCommitsCommitProp
Chunyan Zhang8095.24%150.00%
Stephen Boyd44.76%150.00%
Total84100.00%2100.00%

EXPORT_SYMBOL_GPL(sprd_div_helper_recalc_rate);
static unsigned long sprd_div_recalc_rate(struct clk_hw *hw, unsigned long parent_rate) { struct sprd_div *cd = hw_to_sprd_div(hw); return sprd_div_helper_recalc_rate(&cd->common, &cd->div, parent_rate); }

Contributors

PersonTokensPropCommitsCommitProp
Chunyan Zhang42100.00%1100.00%
Total42100.00%1100.00%


int sprd_div_helper_set_rate(const struct sprd_clk_common *common, const struct sprd_div_internal *div, unsigned long rate, unsigned long parent_rate) { unsigned long val; unsigned int reg; val = divider_get_val(rate, parent_rate, NULL, div->width, 0); regmap_read(common->regmap, common->reg, &reg); reg &= ~GENMASK(div->width + div->shift - 1, div->shift); regmap_write(common->regmap, common->reg, reg | (val << div->shift)); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Chunyan Zhang108100.00%1100.00%
Total108100.00%1100.00%

EXPORT_SYMBOL_GPL(sprd_div_helper_set_rate);
static int sprd_div_set_rate(struct clk_hw *hw, unsigned long rate, unsigned long parent_rate) { struct sprd_div *cd = hw_to_sprd_div(hw); return sprd_div_helper_set_rate(&cd->common, &cd->div, rate, parent_rate); }

Contributors

PersonTokensPropCommitsCommitProp
Chunyan Zhang47100.00%1100.00%
Total47100.00%1100.00%

const struct clk_ops sprd_div_ops = { .recalc_rate = sprd_div_recalc_rate, .round_rate = sprd_div_round_rate, .set_rate = sprd_div_set_rate, }; EXPORT_SYMBOL_GPL(sprd_div_ops);

Overall Contributors

PersonTokensPropCommitsCommitProp
Chunyan Zhang42599.07%150.00%
Stephen Boyd40.93%150.00%
Total429100.00%2100.00%
Directory: drivers/clk/sprd
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.