cregit-Linux how code gets into the kernel

Release 4.14 arch/mips/lantiq/clk.c

Directory: arch/mips/lantiq
/*
 *  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.
 *
 * Copyright (C) 2010 Thomas Langer <thomas.langer@lantiq.com>
 * Copyright (C) 2010 John Crispin <john@phrozen.org>
 */
#include <linux/io.h>
#include <linux/export.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/clk.h>
#include <linux/clkdev.h>
#include <linux/err.h>
#include <linux/list.h>

#include <asm/time.h>
#include <asm/irq.h>
#include <asm/div64.h>

#include <lantiq_soc.h>

#include "clk.h"
#include "prom.h"

/* lantiq socs have 3 static clocks */

static struct clk cpu_clk_generic[4];


void clkdev_add_static(unsigned long cpu, unsigned long fpi, unsigned long io, unsigned long ppe) { cpu_clk_generic[0].rate = cpu; cpu_clk_generic[1].rate = fpi; cpu_clk_generic[2].rate = io; cpu_clk_generic[3].rate = ppe; }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin57100.00%3100.00%
Total57100.00%3100.00%


struct clk *clk_get_cpu(void) { return &cpu_clk_generic[0]; }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin16100.00%2100.00%
Total16100.00%2100.00%


struct clk *clk_get_fpi(void) { return &cpu_clk_generic[1]; }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin16100.00%2100.00%
Total16100.00%2100.00%

EXPORT_SYMBOL_GPL(clk_get_fpi);
struct clk *clk_get_io(void) { return &cpu_clk_generic[2]; }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin16100.00%2100.00%
Total16100.00%2100.00%


struct clk *clk_get_ppe(void) { return &cpu_clk_generic[3]; }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin16100.00%1100.00%
Total16100.00%1100.00%

EXPORT_SYMBOL_GPL(clk_get_ppe);
static inline int clk_good(struct clk *clk) { return clk && !IS_ERR(clk); }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin21100.00%1100.00%
Total21100.00%1100.00%


unsigned long clk_get_rate(struct clk *clk) { if (unlikely(!clk_good(clk))) return 0; if (clk->rate != 0) return clk->rate; if (clk->get_rate != NULL) return clk->get_rate(); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin55100.00%1100.00%
Total55100.00%1100.00%

EXPORT_SYMBOL(clk_get_rate);
int clk_set_rate(struct clk *clk, unsigned long rate) { if (unlikely(!clk_good(clk))) return 0; if (clk->rates && *clk->rates) { unsigned long *r = clk->rates; while (*r && (*r != rate)) r++; if (!*r) { pr_err("clk %s.%s: trying to set invalid rate %ld\n", clk->cl.dev_id, clk->cl.con_id, rate); return -1; } } clk->rate = rate; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin105100.00%2100.00%
Total105100.00%2100.00%

EXPORT_SYMBOL(clk_set_rate);
long clk_round_rate(struct clk *clk, unsigned long rate) { if (unlikely(!clk_good(clk))) return 0; if (clk->rates && *clk->rates) { unsigned long *r = clk->rates; while (*r && (*r != rate)) r++; if (!*r) { return clk->rate; } } return rate; }

Contributors

PersonTokensPropCommitsCommitProp
Hauke Mehrtens81100.00%1100.00%
Total81100.00%1100.00%

EXPORT_SYMBOL(clk_round_rate);
int clk_enable(struct clk *clk) { if (unlikely(!clk_good(clk))) return -1; if (clk->enable) return clk->enable(clk); return -1; }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin43100.00%2100.00%
Total43100.00%2100.00%

EXPORT_SYMBOL(clk_enable);
void clk_disable(struct clk *clk) { if (unlikely(!clk_good(clk))) return; if (clk->disable) clk->disable(clk); }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin35100.00%2100.00%
Total35100.00%2100.00%

EXPORT_SYMBOL(clk_disable);
int clk_activate(struct clk *clk) { if (unlikely(!clk_good(clk))) return -1; if (clk->activate) return clk->activate(clk); return -1; }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin43100.00%2100.00%
Total43100.00%2100.00%

EXPORT_SYMBOL(clk_activate);
void clk_deactivate(struct clk *clk) { if (unlikely(!clk_good(clk))) return; if (clk->deactivate) clk->deactivate(clk); }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin35100.00%2100.00%
Total35100.00%2100.00%

EXPORT_SYMBOL(clk_deactivate);
static inline u32 get_counter_resolution(void) { u32 res; __asm__ __volatile__( ".set push\n" ".set mips32r2\n" "rdhwr %0, $3\n" ".set pop\n" : "=&r" (res) : /* no input */ : "memory"); return res; }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin1995.00%266.67%
Ralf Bächle15.00%133.33%
Total20100.00%3100.00%


void __init plat_time_init(void) { struct clk *clk; ltq_soc_init(); clk = clk_get_cpu(); mips_hpt_frequency = clk_get_rate(clk) / get_counter_resolution(); write_c0_compare(read_c0_count()); pr_info("CPU Clock: %ldMHz\n", clk_get_rate(clk) / 1000000); clk_put(clk); }

Contributors

PersonTokensPropCommitsCommitProp
John Crispin54100.00%2100.00%
Total54100.00%2100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
John Crispin62687.80%675.00%
Hauke Mehrtens8612.06%112.50%
Ralf Bächle10.14%112.50%
Total713100.00%8100.00%
Directory: arch/mips/lantiq
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.