Skip to content

Commit

Permalink
ARM: ICST: merge common ICST VCO structures
Browse files Browse the repository at this point in the history
The structures for the ICST307 and ICST525 VCO devices are
identical, so merge them together.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Russell King committed May 2, 2010
1 parent b830b9b commit 39c0cb0
Show file tree
Hide file tree
Showing 16 changed files with 85 additions and 76 deletions.
14 changes: 7 additions & 7 deletions arch/arm/common/icst307.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
*/
static unsigned char s2div[8] = { 10, 2, 8, 4, 5, 7, 3, 6 };

unsigned long icst307_khz(const struct icst307_params *p, struct icst307_vco vco)
unsigned long icst307_khz(const struct icst_params *p, struct icst_vco vco)
{
return p->ref * 2 * (vco.v + 8) / ((vco.r + 2) * s2div[vco.s]);
}
Expand All @@ -36,10 +36,10 @@ EXPORT_SYMBOL(icst307_khz);
*/
static unsigned char idx2s[8] = { 1, 6, 3, 4, 7, 5, 2, 0 };

struct icst307_vco
icst307_khz_to_vco(const struct icst307_params *p, unsigned long freq)
struct icst_vco
icst307_khz_to_vco(const struct icst_params *p, unsigned long freq)
{
struct icst307_vco vco = { .s = 1, .v = p->vd_max, .r = p->rd_max };
struct icst_vco vco = { .s = 1, .v = p->vd_max, .r = p->rd_max };
unsigned long f;
unsigned int i = 0, rd, best = (unsigned int)-1;

Expand Down Expand Up @@ -96,10 +96,10 @@ icst307_khz_to_vco(const struct icst307_params *p, unsigned long freq)

EXPORT_SYMBOL(icst307_khz_to_vco);

struct icst307_vco
icst307_ps_to_vco(const struct icst307_params *p, unsigned long period)
struct icst_vco
icst307_ps_to_vco(const struct icst_params *p, unsigned long period)
{
struct icst307_vco vco = { .s = 1, .v = p->vd_max, .r = p->rd_max };
struct icst_vco vco = { .s = 1, .v = p->vd_max, .r = p->rd_max };
unsigned long f, ps;
unsigned int i = 0, rd, best = (unsigned int)-1;

Expand Down
14 changes: 7 additions & 7 deletions arch/arm/common/icst525.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
*/
static unsigned char s2div[8] = { 10, 2, 8, 4, 5, 7, 9, 6 };

unsigned long icst525_khz(const struct icst525_params *p, struct icst525_vco vco)
unsigned long icst525_khz(const struct icst_params *p, struct icst_vco vco)
{
return p->ref * 2 * (vco.v + 8) / ((vco.r + 2) * s2div[vco.s]);
}
Expand All @@ -33,10 +33,10 @@ EXPORT_SYMBOL(icst525_khz);
*/
static unsigned char idx2s[] = { 1, 3, 4, 7, 5, 2, 6, 0 };

struct icst525_vco
icst525_khz_to_vco(const struct icst525_params *p, unsigned long freq)
struct icst_vco
icst525_khz_to_vco(const struct icst_params *p, unsigned long freq)
{
struct icst525_vco vco = { .s = 1, .v = p->vd_max, .r = p->rd_max };
struct icst_vco vco = { .s = 1, .v = p->vd_max, .r = p->rd_max };
unsigned long f;
unsigned int i = 0, rd, best = (unsigned int)-1;

Expand Down Expand Up @@ -94,10 +94,10 @@ icst525_khz_to_vco(const struct icst525_params *p, unsigned long freq)

EXPORT_SYMBOL(icst525_khz_to_vco);

struct icst525_vco
icst525_ps_to_vco(const struct icst525_params *p, unsigned long period)
struct icst_vco
icst525_ps_to_vco(const struct icst_params *p, unsigned long period)
{
struct icst525_vco vco = { .s = 1, .v = p->vd_max, .r = p->rd_max };
struct icst_vco vco = { .s = 1, .v = p->vd_max, .r = p->rd_max };
unsigned long f, ps;
unsigned int i = 0, rd, best = (unsigned int)-1;

Expand Down
32 changes: 32 additions & 0 deletions arch/arm/include/asm/hardware/icst.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* arch/arm/include/asm/hardware/icst.h
*
* Copyright (C) 2003 Deep Blue Solutions, Ltd, All Rights Reserved.
*
* 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.
*
* Support functions for calculating clocks/divisors for the ICST
* clock generators. See http://www.icst.com/ for more information
* on these devices.
*/
#ifndef ASMARM_HARDWARE_ICST_H
#define ASMARM_HARDWARE_ICST_H

struct icst_params {
unsigned long ref;
unsigned long vco_max; /* inclusive */
unsigned short vd_min; /* inclusive */
unsigned short vd_max; /* inclusive */
unsigned char rd_min; /* inclusive */
unsigned char rd_max; /* inclusive */
};

struct icst_vco {
unsigned short v;
unsigned char r;
unsigned char s;
};

#endif
21 changes: 4 additions & 17 deletions arch/arm/include/asm/hardware/icst307.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,10 @@
#ifndef ASMARM_HARDWARE_ICST307_H
#define ASMARM_HARDWARE_ICST307_H

struct icst307_params {
unsigned long ref;
unsigned long vco_max; /* inclusive */
unsigned short vd_min; /* inclusive */
unsigned short vd_max; /* inclusive */
unsigned char rd_min; /* inclusive */
unsigned char rd_max; /* inclusive */
};
#include <asm/hardware/icst.h>

struct icst307_vco {
unsigned short v;
unsigned char r;
unsigned char s;
};

unsigned long icst307_khz(const struct icst307_params *p, struct icst307_vco vco);
struct icst307_vco icst307_khz_to_vco(const struct icst307_params *p, unsigned long freq);
struct icst307_vco icst307_ps_to_vco(const struct icst307_params *p, unsigned long period);
unsigned long icst307_khz(const struct icst_params *p, struct icst_vco vco);
struct icst_vco icst307_khz_to_vco(const struct icst_params *p, unsigned long freq);
struct icst_vco icst307_ps_to_vco(const struct icst_params *p, unsigned long period);

#endif
21 changes: 4 additions & 17 deletions arch/arm/include/asm/hardware/icst525.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,10 @@
#ifndef ASMARM_HARDWARE_ICST525_H
#define ASMARM_HARDWARE_ICST525_H

struct icst525_params {
unsigned long ref;
unsigned long vco_max; /* inclusive */
unsigned short vd_min; /* inclusive */
unsigned short vd_max; /* inclusive */
unsigned char rd_min; /* inclusive */
unsigned char rd_max; /* inclusive */
};
#include <asm/hardware/icst.h>

struct icst525_vco {
unsigned short v;
unsigned char r;
unsigned char s;
};

unsigned long icst525_khz(const struct icst525_params *p, struct icst525_vco vco);
struct icst525_vco icst525_khz_to_vco(const struct icst525_params *p, unsigned long freq);
struct icst525_vco icst525_ps_to_vco(const struct icst525_params *p, unsigned long period);
unsigned long icst525_khz(const struct icst_params *p, struct icst_vco vco);
struct icst_vco icst525_khz_to_vco(const struct icst_params *p, unsigned long freq);
struct icst_vco icst525_ps_to_vco(const struct icst_params *p, unsigned long period);

#endif
5 changes: 3 additions & 2 deletions arch/arm/mach-integrator/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <linux/clk.h>
#include <linux/mutex.h>

#include <asm/hardware/icst525.h>
#include <asm/clkdev.h>
#include <mach/clkdev.h>

Expand All @@ -36,7 +37,7 @@ EXPORT_SYMBOL(clk_get_rate);

long clk_round_rate(struct clk *clk, unsigned long rate)
{
struct icst525_vco vco;
struct icst_vco vco;
vco = icst525_khz_to_vco(clk->params, rate / 1000);
return icst525_khz(clk->params, vco) * 1000;
}
Expand All @@ -47,7 +48,7 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
int ret = -EIO;

if (clk->setvco) {
struct icst525_vco vco;
struct icst_vco vco;

vco = icst525_khz_to_vco(clk->params, rate / 1000);
clk->rate = icst525_khz(clk->params, vco) * 1000;
Expand Down
10 changes: 5 additions & 5 deletions arch/arm/mach-integrator/cpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ static struct cpufreq_driver integrator_driver;
#define CM_STAT IO_ADDRESS(INTEGRATOR_HDR_STAT)
#define CM_LOCK IO_ADDRESS(INTEGRATOR_HDR_LOCK)

static const struct icst525_params lclk_params = {
static const struct icst_params lclk_params = {
.ref = 24000,
.vco_max = 320000,
.vd_min = 8,
Expand All @@ -40,7 +40,7 @@ static const struct icst525_params lclk_params = {
.rd_max = 24,
};

static const struct icst525_params cclk_params = {
static const struct icst_params cclk_params = {
.ref = 24000,
.vco_max = 320000,
.vd_min = 12,
Expand All @@ -54,7 +54,7 @@ static const struct icst525_params cclk_params = {
*/
static int integrator_verify_policy(struct cpufreq_policy *policy)
{
struct icst525_vco vco;
struct icst_vco vco;

cpufreq_verify_within_limits(policy,
policy->cpuinfo.min_freq,
Expand All @@ -80,7 +80,7 @@ static int integrator_set_target(struct cpufreq_policy *policy,
{
cpumask_t cpus_allowed;
int cpu = policy->cpu;
struct icst525_vco vco;
struct icst_vco vco;
struct cpufreq_freqs freqs;
u_int cm_osc;

Expand Down Expand Up @@ -156,7 +156,7 @@ static unsigned int integrator_get(unsigned int cpu)
cpumask_t cpus_allowed;
unsigned int current_freq;
u_int cm_osc;
struct icst525_vco vco;
struct icst_vco vco;

cpus_allowed = current->cpus_allowed;

Expand Down
4 changes: 2 additions & 2 deletions arch/arm/mach-integrator/impd1.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ struct impd1_module {
struct clk_lookup *clks[3];
};

static const struct icst525_params impd1_vco_params = {
static const struct icst_params impd1_vco_params = {
.ref = 24000, /* 24 MHz */
.vco_max = 200000, /* 200 MHz */
.vd_min = 12,
Expand All @@ -49,7 +49,7 @@ static const struct icst525_params impd1_vco_params = {
.rd_max = 120,
};

static void impd1_setvco(struct clk *clk, struct icst525_vco vco)
static void impd1_setvco(struct clk *clk, struct icst_vco vco)
{
struct impd1_module *impd1 = clk->data;
int vconr = clk - impd1->vcos;
Expand Down
6 changes: 3 additions & 3 deletions arch/arm/mach-integrator/include/mach/clkdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
#define __ASM_MACH_CLKDEV_H

#include <linux/module.h>
#include <asm/hardware/icst525.h>
#include <asm/hardware/icst.h>

struct clk {
unsigned long rate;
struct module *owner;
const struct icst525_params *params;
const struct icst_params *params;
void *data;
void (*setvco)(struct clk *, struct icst525_vco vco);
void (*setvco)(struct clk *, struct icst_vco vco);
};

static inline int __clk_get(struct clk *clk)
Expand Down
4 changes: 2 additions & 2 deletions arch/arm/mach-integrator/integrator_cp.c
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ static void __init intcp_init_irq(void)
#define CM_LOCK IO_ADDRESS(INTEGRATOR_HDR_LOCK)
#define CM_AUXOSC IO_ADDRESS(INTEGRATOR_HDR_BASE + 0x1c)

static const struct icst525_params cp_auxvco_params = {
static const struct icst_params cp_auxvco_params = {
.ref = 24000,
.vco_max = 320000,
.vd_min = 8,
Expand All @@ -277,7 +277,7 @@ static const struct icst525_params cp_auxvco_params = {
.rd_max = 65,
};

static void cp_auxvco_set(struct clk *clk, struct icst525_vco vco)
static void cp_auxvco_set(struct clk *clk, struct icst_vco vco)
{
u32 val;

Expand Down
4 changes: 2 additions & 2 deletions arch/arm/mach-realview/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ EXPORT_SYMBOL(clk_get_rate);

long clk_round_rate(struct clk *clk, unsigned long rate)
{
struct icst307_vco vco;
struct icst_vco vco;
vco = icst307_khz_to_vco(clk->params, rate / 1000);
return icst307_khz(clk->params, vco) * 1000;
}
Expand All @@ -52,7 +52,7 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
int ret = -EIO;

if (clk->setvco) {
struct icst307_vco vco;
struct icst_vco vco;

vco = icst307_khz_to_vco(clk->params, rate / 1000);
clk->rate = icst307_khz(clk->params, vco) * 1000;
Expand Down
7 changes: 4 additions & 3 deletions arch/arm/mach-realview/clock.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <asm/hardware/icst.h>

struct module;
struct icst307_params;

struct clk {
unsigned long rate;
const struct icst307_params *params;
const struct icst_params *params;
void *data;
void (*setvco)(struct clk *, struct icst307_vco vco);
void (*setvco)(struct clk *, struct icst_vco vco);
};
4 changes: 2 additions & 2 deletions arch/arm/mach-realview/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ struct mmci_platform_data realview_mmc1_plat_data = {
/*
* Clock handling
*/
static const struct icst307_params realview_oscvco_params = {
static const struct icst_params realview_oscvco_params = {
.ref = 24000,
.vco_max = 200000,
.vd_min = 4 + 8,
Expand All @@ -282,7 +282,7 @@ static const struct icst307_params realview_oscvco_params = {
.rd_max = 127 + 2,
};

static void realview_oscvco_set(struct clk *clk, struct icst307_vco vco)
static void realview_oscvco_set(struct clk *clk, struct icst_vco vco)
{
void __iomem *sys_lock = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_LOCK_OFFSET;
void __iomem *sys_osc;
Expand Down
4 changes: 2 additions & 2 deletions arch/arm/mach-versatile/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ EXPORT_SYMBOL(clk_get_rate);

long clk_round_rate(struct clk *clk, unsigned long rate)
{
struct icst307_vco vco;
struct icst_vco vco;
vco = icst307_khz_to_vco(clk->params, rate / 1000);
return icst307_khz(clk->params, vco) * 1000;
}
Expand All @@ -53,7 +53,7 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
int ret = -EIO;

if (clk->setvco) {
struct icst307_vco vco;
struct icst_vco vco;

vco = icst307_khz_to_vco(clk->params, rate / 1000);
clk->rate = icst307_khz(clk->params, vco) * 1000;
Expand Down
7 changes: 4 additions & 3 deletions arch/arm/mach-versatile/clock.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <asm/hardware/icst.h>

struct module;
struct icst307_params;

struct clk {
unsigned long rate;
const struct icst307_params *params;
const struct icst_params *params;
u32 oscoff;
void *data;
void (*setvco)(struct clk *, struct icst307_vco vco);
void (*setvco)(struct clk *, struct icst_vco vco);
};
4 changes: 2 additions & 2 deletions arch/arm/mach-versatile/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ static struct mmci_platform_data mmc0_plat_data = {
/*
* Clock handling
*/
static const struct icst307_params versatile_oscvco_params = {
static const struct icst_params versatile_oscvco_params = {
.ref = 24000,
.vco_max = 200000,
.vd_min = 4 + 8,
Expand All @@ -388,7 +388,7 @@ static const struct icst307_params versatile_oscvco_params = {
.rd_max = 127 + 2,
};

static void versatile_oscvco_set(struct clk *clk, struct icst307_vco vco)
static void versatile_oscvco_set(struct clk *clk, struct icst_vco vco)
{
void __iomem *sys = __io_address(VERSATILE_SYS_BASE);
void __iomem *sys_lock = sys + VERSATILE_SYS_LOCK_OFFSET;
Expand Down

0 comments on commit 39c0cb0

Please sign in to comment.