mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
0fd0c21be7
Add the necessary code and data to allow the clock framework to enable and disable the OMAP2 DPLL autoidle state. This is so the direct register access can be moved out of the mach-omap2/pm24xx.c code, and other code that needs to control this (e.g., CPUIdle) can do so via an API. As part of this patch, remove the pm24xx.c code that formerly wrote directly to the autoidle bits. Signed-off-by: Paul Walmsley <paul@pwsan.com> Cc: Kevin Hilman <khilman@ti.com> Tested-by: Rajendra Nayak <rnayak@ti.com> Reviewed-by: Kevin Hilman <khilman@ti.com>
63 lines
1.4 KiB
C
63 lines
1.4 KiB
C
/*
|
|
* OMAP2-specific DPLL control functions
|
|
*
|
|
* Copyright (C) 2011 Nokia Corporation
|
|
* Paul Walmsley
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#include <linux/kernel.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/clk.h>
|
|
#include <linux/io.h>
|
|
|
|
#include <plat/clock.h>
|
|
|
|
#include "clock.h"
|
|
#include "cm2xxx_3xxx.h"
|
|
#include "cm-regbits-24xx.h"
|
|
|
|
/* Private functions */
|
|
|
|
/**
|
|
* _allow_idle - enable DPLL autoidle bits
|
|
* @clk: struct clk * of the DPLL to operate on
|
|
*
|
|
* Enable DPLL automatic idle control. The DPLL will enter low-power
|
|
* stop when its downstream clocks are gated. No return value.
|
|
* REVISIT: DPLL can optionally enter low-power bypass by writing 0x1
|
|
* instead. Add some mechanism to optionally enter this mode.
|
|
*/
|
|
static void _allow_idle(struct clk *clk)
|
|
{
|
|
if (!clk || !clk->dpll_data)
|
|
return;
|
|
|
|
omap2xxx_cm_set_dpll_auto_low_power_stop();
|
|
}
|
|
|
|
/**
|
|
* _deny_idle - prevent DPLL from automatically idling
|
|
* @clk: struct clk * of the DPLL to operate on
|
|
*
|
|
* Disable DPLL automatic idle control. No return value.
|
|
*/
|
|
static void _deny_idle(struct clk *clk)
|
|
{
|
|
if (!clk || !clk->dpll_data)
|
|
return;
|
|
|
|
omap2xxx_cm_set_dpll_disable_autoidle();
|
|
}
|
|
|
|
|
|
/* Public data */
|
|
|
|
const struct clkops clkops_omap2xxx_dpll_ops = {
|
|
.allow_idle = _allow_idle,
|
|
.deny_idle = _deny_idle,
|
|
};
|
|
|