Linux Audio

Check our new training course

Loading...
v3.5.6
  1/*
  2 * OMAP3-specific clock framework functions
  3 *
  4 * Copyright (C) 2007-2008 Texas Instruments, Inc.
  5 * Copyright (C) 2007-2011 Nokia Corporation
  6 *
  7 * Paul Walmsley
  8 * Jouni Högander
  9 *
 10 * Parts of this code are based on code written by
 11 * Richard Woodruff, Tony Lindgren, Tuukka Tikkanen, Karthik Dasu,
 12 * Russell King
 13 *
 14 * This program is free software; you can redistribute it and/or modify
 15 * it under the terms of the GNU General Public License version 2 as
 16 * published by the Free Software Foundation.
 17 */
 18#undef DEBUG
 19
 20#include <linux/kernel.h>
 21#include <linux/clk.h>
 22#include <linux/io.h>
 23
 24#include <plat/clock.h>
 25
 26#include "clock.h"
 27#include "clock34xx.h"
 28#include "cm2xxx_3xxx.h"
 29#include "cm-regbits-34xx.h"
 30
 31/**
 32 * omap3430es2_clk_ssi_find_idlest - return CM_IDLEST info for SSI
 33 * @clk: struct clk * being enabled
 34 * @idlest_reg: void __iomem ** to store CM_IDLEST reg address into
 35 * @idlest_bit: pointer to a u8 to store the CM_IDLEST bit shift into
 36 * @idlest_val: pointer to a u8 to store the CM_IDLEST indicator
 37 *
 38 * The OMAP3430ES2 SSI target CM_IDLEST bit is at a different shift
 39 * from the CM_{I,F}CLKEN bit.  Pass back the correct info via
 40 * @idlest_reg and @idlest_bit.  No return value.
 41 */
 42static void omap3430es2_clk_ssi_find_idlest(struct clk *clk,
 43					    void __iomem **idlest_reg,
 44					    u8 *idlest_bit,
 45					    u8 *idlest_val)
 46{
 47	u32 r;
 48
 49	r = (((__force u32)clk->enable_reg & ~0xf0) | 0x20);
 50	*idlest_reg = (__force void __iomem *)r;
 51	*idlest_bit = OMAP3430ES2_ST_SSI_IDLE_SHIFT;
 52	*idlest_val = OMAP34XX_CM_IDLEST_VAL;
 53}
 54
 55const struct clkops clkops_omap3430es2_ssi_wait = {
 56	.enable		= omap2_dflt_clk_enable,
 57	.disable	= omap2_dflt_clk_disable,
 58	.find_idlest	= omap3430es2_clk_ssi_find_idlest,
 59	.find_companion = omap2_clk_dflt_find_companion,
 60};
 61
 62const struct clkops clkops_omap3430es2_iclk_ssi_wait = {
 63	.enable		= omap2_dflt_clk_enable,
 64	.disable	= omap2_dflt_clk_disable,
 65	.find_idlest	= omap3430es2_clk_ssi_find_idlest,
 66	.find_companion = omap2_clk_dflt_find_companion,
 67	.allow_idle	= omap2_clkt_iclk_allow_idle,
 68	.deny_idle	= omap2_clkt_iclk_deny_idle,
 
 
 69};
 70
 71/**
 72 * omap3430es2_clk_dss_usbhost_find_idlest - CM_IDLEST info for DSS, USBHOST
 73 * @clk: struct clk * being enabled
 74 * @idlest_reg: void __iomem ** to store CM_IDLEST reg address into
 75 * @idlest_bit: pointer to a u8 to store the CM_IDLEST bit shift into
 76 * @idlest_val: pointer to a u8 to store the CM_IDLEST indicator
 77 *
 78 * Some OMAP modules on OMAP3 ES2+ chips have both initiator and
 79 * target IDLEST bits.  For our purposes, we are concerned with the
 80 * target IDLEST bits, which exist at a different bit position than
 81 * the *CLKEN bit position for these modules (DSS and USBHOST) (The
 82 * default find_idlest code assumes that they are at the same
 83 * position.)  No return value.
 84 */
 85static void omap3430es2_clk_dss_usbhost_find_idlest(struct clk *clk,
 86						    void __iomem **idlest_reg,
 87						    u8 *idlest_bit,
 88						    u8 *idlest_val)
 89{
 90	u32 r;
 91
 92	r = (((__force u32)clk->enable_reg & ~0xf0) | 0x20);
 93	*idlest_reg = (__force void __iomem *)r;
 94	/* USBHOST_IDLE has same shift */
 95	*idlest_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT;
 96	*idlest_val = OMAP34XX_CM_IDLEST_VAL;
 97}
 98
 99const struct clkops clkops_omap3430es2_dss_usbhost_wait = {
100	.enable		= omap2_dflt_clk_enable,
101	.disable	= omap2_dflt_clk_disable,
102	.find_idlest	= omap3430es2_clk_dss_usbhost_find_idlest,
103	.find_companion = omap2_clk_dflt_find_companion,
104};
105
106const struct clkops clkops_omap3430es2_iclk_dss_usbhost_wait = {
107	.enable		= omap2_dflt_clk_enable,
108	.disable	= omap2_dflt_clk_disable,
109	.find_idlest	= omap3430es2_clk_dss_usbhost_find_idlest,
110	.find_companion = omap2_clk_dflt_find_companion,
111	.allow_idle	= omap2_clkt_iclk_allow_idle,
112	.deny_idle	= omap2_clkt_iclk_deny_idle,
 
 
113};
114
115/**
116 * omap3430es2_clk_hsotgusb_find_idlest - return CM_IDLEST info for HSOTGUSB
117 * @clk: struct clk * being enabled
118 * @idlest_reg: void __iomem ** to store CM_IDLEST reg address into
119 * @idlest_bit: pointer to a u8 to store the CM_IDLEST bit shift into
120 * @idlest_val: pointer to a u8 to store the CM_IDLEST indicator
121 *
122 * The OMAP3430ES2 HSOTGUSB target CM_IDLEST bit is at a different
123 * shift from the CM_{I,F}CLKEN bit.  Pass back the correct info via
124 * @idlest_reg and @idlest_bit.  No return value.
125 */
126static void omap3430es2_clk_hsotgusb_find_idlest(struct clk *clk,
127						 void __iomem **idlest_reg,
128						 u8 *idlest_bit,
129						 u8 *idlest_val)
130{
131	u32 r;
132
133	r = (((__force u32)clk->enable_reg & ~0xf0) | 0x20);
134	*idlest_reg = (__force void __iomem *)r;
135	*idlest_bit = OMAP3430ES2_ST_HSOTGUSB_IDLE_SHIFT;
136	*idlest_val = OMAP34XX_CM_IDLEST_VAL;
137}
138
139const struct clkops clkops_omap3430es2_hsotgusb_wait = {
140	.enable		= omap2_dflt_clk_enable,
141	.disable	= omap2_dflt_clk_disable,
142	.find_idlest	= omap3430es2_clk_hsotgusb_find_idlest,
143	.find_companion = omap2_clk_dflt_find_companion,
144};
145
146const struct clkops clkops_omap3430es2_iclk_hsotgusb_wait = {
147	.enable		= omap2_dflt_clk_enable,
148	.disable	= omap2_dflt_clk_disable,
149	.find_idlest	= omap3430es2_clk_hsotgusb_find_idlest,
150	.find_companion = omap2_clk_dflt_find_companion,
151	.allow_idle	= omap2_clkt_iclk_allow_idle,
152	.deny_idle	= omap2_clkt_iclk_deny_idle,
153};
v3.15
  1/*
  2 * OMAP3-specific clock framework functions
  3 *
  4 * Copyright (C) 2007-2008 Texas Instruments, Inc.
  5 * Copyright (C) 2007-2011 Nokia Corporation
  6 *
  7 * Paul Walmsley
  8 * Jouni Högander
  9 *
 10 * Parts of this code are based on code written by
 11 * Richard Woodruff, Tony Lindgren, Tuukka Tikkanen, Karthik Dasu,
 12 * Russell King
 13 *
 14 * This program is free software; you can redistribute it and/or modify
 15 * it under the terms of the GNU General Public License version 2 as
 16 * published by the Free Software Foundation.
 17 */
 18#undef DEBUG
 19
 20#include <linux/kernel.h>
 21#include <linux/clk.h>
 22#include <linux/io.h>
 23
 
 
 24#include "clock.h"
 25#include "clock34xx.h"
 26#include "cm3xxx.h"
 27#include "cm-regbits-34xx.h"
 28
 29/**
 30 * omap3430es2_clk_ssi_find_idlest - return CM_IDLEST info for SSI
 31 * @clk: struct clk * being enabled
 32 * @idlest_reg: void __iomem ** to store CM_IDLEST reg address into
 33 * @idlest_bit: pointer to a u8 to store the CM_IDLEST bit shift into
 34 * @idlest_val: pointer to a u8 to store the CM_IDLEST indicator
 35 *
 36 * The OMAP3430ES2 SSI target CM_IDLEST bit is at a different shift
 37 * from the CM_{I,F}CLKEN bit.  Pass back the correct info via
 38 * @idlest_reg and @idlest_bit.  No return value.
 39 */
 40static void omap3430es2_clk_ssi_find_idlest(struct clk_hw_omap *clk,
 41					    void __iomem **idlest_reg,
 42					    u8 *idlest_bit,
 43					    u8 *idlest_val)
 44{
 45	u32 r;
 46
 47	r = (((__force u32)clk->enable_reg & ~0xf0) | 0x20);
 48	*idlest_reg = (__force void __iomem *)r;
 49	*idlest_bit = OMAP3430ES2_ST_SSI_IDLE_SHIFT;
 50	*idlest_val = OMAP34XX_CM_IDLEST_VAL;
 51}
 52const struct clk_hw_omap_ops clkhwops_omap3430es2_ssi_wait = {
 
 
 
 53	.find_idlest	= omap3430es2_clk_ssi_find_idlest,
 54	.find_companion	= omap2_clk_dflt_find_companion,
 55};
 56
 57const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_ssi_wait = {
 
 
 
 
 58	.allow_idle	= omap2_clkt_iclk_allow_idle,
 59	.deny_idle	= omap2_clkt_iclk_deny_idle,
 60	.find_idlest	= omap3430es2_clk_ssi_find_idlest,
 61	.find_companion = omap2_clk_dflt_find_companion,
 62};
 63
 64/**
 65 * omap3430es2_clk_dss_usbhost_find_idlest - CM_IDLEST info for DSS, USBHOST
 66 * @clk: struct clk * being enabled
 67 * @idlest_reg: void __iomem ** to store CM_IDLEST reg address into
 68 * @idlest_bit: pointer to a u8 to store the CM_IDLEST bit shift into
 69 * @idlest_val: pointer to a u8 to store the CM_IDLEST indicator
 70 *
 71 * Some OMAP modules on OMAP3 ES2+ chips have both initiator and
 72 * target IDLEST bits.  For our purposes, we are concerned with the
 73 * target IDLEST bits, which exist at a different bit position than
 74 * the *CLKEN bit position for these modules (DSS and USBHOST) (The
 75 * default find_idlest code assumes that they are at the same
 76 * position.)  No return value.
 77 */
 78static void omap3430es2_clk_dss_usbhost_find_idlest(struct clk_hw_omap *clk,
 79						    void __iomem **idlest_reg,
 80						    u8 *idlest_bit,
 81						    u8 *idlest_val)
 82{
 83	u32 r;
 84
 85	r = (((__force u32)clk->enable_reg & ~0xf0) | 0x20);
 86	*idlest_reg = (__force void __iomem *)r;
 87	/* USBHOST_IDLE has same shift */
 88	*idlest_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT;
 89	*idlest_val = OMAP34XX_CM_IDLEST_VAL;
 90}
 91
 92const struct clk_hw_omap_ops clkhwops_omap3430es2_dss_usbhost_wait = {
 
 
 93	.find_idlest	= omap3430es2_clk_dss_usbhost_find_idlest,
 94	.find_companion	= omap2_clk_dflt_find_companion,
 95};
 96
 97const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_dss_usbhost_wait = {
 
 
 
 
 98	.allow_idle	= omap2_clkt_iclk_allow_idle,
 99	.deny_idle	= omap2_clkt_iclk_deny_idle,
100	.find_idlest	= omap3430es2_clk_dss_usbhost_find_idlest,
101	.find_companion	= omap2_clk_dflt_find_companion,
102};
103
104/**
105 * omap3430es2_clk_hsotgusb_find_idlest - return CM_IDLEST info for HSOTGUSB
106 * @clk: struct clk * being enabled
107 * @idlest_reg: void __iomem ** to store CM_IDLEST reg address into
108 * @idlest_bit: pointer to a u8 to store the CM_IDLEST bit shift into
109 * @idlest_val: pointer to a u8 to store the CM_IDLEST indicator
110 *
111 * The OMAP3430ES2 HSOTGUSB target CM_IDLEST bit is at a different
112 * shift from the CM_{I,F}CLKEN bit.  Pass back the correct info via
113 * @idlest_reg and @idlest_bit.  No return value.
114 */
115static void omap3430es2_clk_hsotgusb_find_idlest(struct clk_hw_omap *clk,
116						 void __iomem **idlest_reg,
117						 u8 *idlest_bit,
118						 u8 *idlest_val)
119{
120	u32 r;
121
122	r = (((__force u32)clk->enable_reg & ~0xf0) | 0x20);
123	*idlest_reg = (__force void __iomem *)r;
124	*idlest_bit = OMAP3430ES2_ST_HSOTGUSB_IDLE_SHIFT;
125	*idlest_val = OMAP34XX_CM_IDLEST_VAL;
126}
127
128const struct clk_hw_omap_ops clkhwops_omap3430es2_iclk_hsotgusb_wait = {
129	.allow_idle	= omap2_clkt_iclk_allow_idle,
130	.deny_idle	= omap2_clkt_iclk_deny_idle,
131	.find_idlest	= omap3430es2_clk_hsotgusb_find_idlest,
132	.find_companion	= omap2_clk_dflt_find_companion,
133};
134
135const struct clk_hw_omap_ops clkhwops_omap3430es2_hsotgusb_wait = {
 
 
136	.find_idlest	= omap3430es2_clk_hsotgusb_find_idlest,
137	.find_companion	= omap2_clk_dflt_find_companion,
 
 
138};