mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-03 00:54:09 +08:00
5dc6470273
Use '-' to separate the function name and its description. Use '%' on constants in kernel-doc notation. Use the kernel-doc Return: format for function return values. Fixes this warning: ccu_mmc_timing.c:21: warning: No description found for return value of 'sunxi_ccu_set_mmc_timing_mode' Signed-off-by: Randy Dunlap <rdunlap@infradead.org> Cc: Yang Li <yang.lee@linux.alibaba.com> Cc: Chen-Yu Tsai <wens@csie.org> Cc: Jernej Skrabec <jernej.skrabec@gmail.com> Cc: Samuel Holland <samuel@sholland.org> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-sunxi@lists.linux.dev Cc: Michael Turquette <mturquette@baylibre.com> Cc: Stephen Boyd <sboyd@kernel.org> Cc: linux-clk@vger.kernel.org Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com> Reviewed-by: Stephen Boyd <sboyd@kernel.org> Link: https://lore.kernel.org/r/20221122184844.6794-1-rdunlap@infradead.org Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
64 lines
1.6 KiB
C
64 lines
1.6 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Copyright (c) 2017 Chen-Yu Tsai. All rights reserved.
|
|
*/
|
|
|
|
#include <linux/clk-provider.h>
|
|
#include <linux/clk/sunxi-ng.h>
|
|
#include <linux/io.h>
|
|
|
|
#include "ccu_common.h"
|
|
|
|
/**
|
|
* sunxi_ccu_set_mmc_timing_mode - Configure the MMC clock timing mode
|
|
* @clk: clock to be configured
|
|
* @new_mode: true for new timing mode introduced in A83T and later
|
|
*
|
|
* Return: %0 on success, %-ENOTSUPP if the clock does not support
|
|
* switching modes.
|
|
*/
|
|
int sunxi_ccu_set_mmc_timing_mode(struct clk *clk, bool new_mode)
|
|
{
|
|
struct clk_hw *hw = __clk_get_hw(clk);
|
|
struct ccu_common *cm = hw_to_ccu_common(hw);
|
|
unsigned long flags;
|
|
u32 val;
|
|
|
|
if (!(cm->features & CCU_FEATURE_MMC_TIMING_SWITCH))
|
|
return -ENOTSUPP;
|
|
|
|
spin_lock_irqsave(cm->lock, flags);
|
|
|
|
val = readl(cm->base + cm->reg);
|
|
if (new_mode)
|
|
val |= CCU_MMC_NEW_TIMING_MODE;
|
|
else
|
|
val &= ~CCU_MMC_NEW_TIMING_MODE;
|
|
writel(val, cm->base + cm->reg);
|
|
|
|
spin_unlock_irqrestore(cm->lock, flags);
|
|
|
|
return 0;
|
|
}
|
|
EXPORT_SYMBOL_GPL(sunxi_ccu_set_mmc_timing_mode);
|
|
|
|
/**
|
|
* sunxi_ccu_set_mmc_timing_mode: Get the current MMC clock timing mode
|
|
* @clk: clock to query
|
|
*
|
|
* Return: %0 if the clock is in old timing mode, > %0 if it is in
|
|
* new timing mode, and %-ENOTSUPP if the clock does not support
|
|
* this function.
|
|
*/
|
|
int sunxi_ccu_get_mmc_timing_mode(struct clk *clk)
|
|
{
|
|
struct clk_hw *hw = __clk_get_hw(clk);
|
|
struct ccu_common *cm = hw_to_ccu_common(hw);
|
|
|
|
if (!(cm->features & CCU_FEATURE_MMC_TIMING_SWITCH))
|
|
return -ENOTSUPP;
|
|
|
|
return !!(readl(cm->base + cm->reg) & CCU_MMC_NEW_TIMING_MODE);
|
|
}
|
|
EXPORT_SYMBOL_GPL(sunxi_ccu_get_mmc_timing_mode);
|