cregit-Linux how code gets into the kernel

Release 4.11 arch/arm/mach-sa1100/clock.c

/*
 *  linux/arch/arm/mach-sa1100/clock.c
 */
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/device.h>
#include <linux/list.h>
#include <linux/errno.h>
#include <linux/err.h>
#include <linux/string.h>
#include <linux/clk.h>
#include <linux/spinlock.h>
#include <linux/mutex.h>
#include <linux/io.h>
#include <linux/clkdev.h>

#include <mach/hardware.h>
#include <mach/generic.h>


struct clkops {
	
void			(*enable)(struct clk *);
	
void			(*disable)(struct clk *);
	
unsigned long		(*get_rate)(struct clk *);
};


struct clk {
	
const struct clkops	*ops;
	
unsigned int		enabled;
};


#define DEFINE_CLK(_name, _ops)				\
struct clk clk_##_name = {                              \
                .ops    = _ops,                         \
        }

static DEFINE_SPINLOCK(clocks_lock);


static void clk_gpio27_enable(struct clk *clk) { /* * First, set up the 3.6864MHz clock on GPIO 27 for the SA-1111: * (SA-1110 Developer's Manual, section 9.1.2.1) */ GAFR |= GPIO_32_768kHz; GPDR |= GPIO_32_768kHz; TUCR = TUCR_3_6864MHz; }

Contributors

PersonTokensPropCommitsCommitProp
Russell King2083.33%266.67%
Jett.Zhou416.67%133.33%
Total24100.00%3100.00%


static void clk_gpio27_disable(struct clk *clk) { TUCR = 0; GPDR &= ~GPIO_32_768kHz; GAFR &= ~GPIO_32_768kHz; }

Contributors

PersonTokensPropCommitsCommitProp
Russell King2184.00%266.67%
Jett.Zhou416.00%133.33%
Total25100.00%3100.00%


static void clk_cpu_enable(struct clk *clk) { }

Contributors

PersonTokensPropCommitsCommitProp
Dmitry Baryshkov10100.00%1100.00%
Total10100.00%1100.00%


static void clk_cpu_disable(struct clk *clk) { }

Contributors

PersonTokensPropCommitsCommitProp
Dmitry Baryshkov10100.00%1100.00%
Total10100.00%1100.00%


static unsigned long clk_cpu_get_rate(struct clk *clk) { return sa11x0_getspeed(0) * 1000; }

Contributors

PersonTokensPropCommitsCommitProp
Dmitry Baryshkov20100.00%1100.00%
Total20100.00%1100.00%


int clk_enable(struct clk *clk) { unsigned long flags; if (clk) { spin_lock_irqsave(&clocks_lock, flags); if (clk->enabled++ == 0) clk->ops->enable(clk); spin_unlock_irqrestore(&clocks_lock, flags); } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Russell King4375.44%150.00%
Jett.Zhou1424.56%150.00%
Total57100.00%2100.00%

EXPORT_SYMBOL(clk_enable);
void clk_disable(struct clk *clk) { unsigned long flags; if (clk) { WARN_ON(clk->enabled == 0); spin_lock_irqsave(&clocks_lock, flags); if (--clk->enabled == 0) clk->ops->disable(clk); spin_unlock_irqrestore(&clocks_lock, flags); } }

Contributors

PersonTokensPropCommitsCommitProp
Russell King4977.78%150.00%
Jett.Zhou1422.22%150.00%
Total63100.00%2100.00%

EXPORT_SYMBOL(clk_disable);
unsigned long clk_get_rate(struct clk *clk) { if (clk && clk->ops && clk->ops->get_rate) return clk->ops->get_rate(clk); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Dmitry Baryshkov38100.00%1100.00%
Total38100.00%1100.00%

EXPORT_SYMBOL(clk_get_rate); const struct clkops clk_gpio27_ops = { .enable = clk_gpio27_enable, .disable = clk_gpio27_disable, }; const struct clkops clk_cpu_ops = { .enable = clk_cpu_enable, .disable = clk_cpu_disable, .get_rate = clk_cpu_get_rate, }; static DEFINE_CLK(gpio27, &clk_gpio27_ops); static DEFINE_CLK(cpu, &clk_cpu_ops);
static unsigned long clk_36864_get_rate(struct clk *clk) { return 3686400; }

Contributors

PersonTokensPropCommitsCommitProp
Dmitry Baryshkov15100.00%1100.00%
Total15100.00%1100.00%

static struct clkops clk_36864_ops = { .enable = clk_cpu_enable, .disable = clk_cpu_disable, .get_rate = clk_36864_get_rate, }; static DEFINE_CLK(36864, &clk_36864_ops); static struct clk_lookup sa11xx_clkregs[] = { CLKDEV_INIT("sa1111.0", NULL, &clk_gpio27), CLKDEV_INIT("sa1100-rtc", NULL, NULL), CLKDEV_INIT("sa11x0-fb", NULL, &clk_cpu), CLKDEV_INIT("sa11x0-pcmcia", NULL, &clk_cpu), /* sa1111 names devices using internal offsets, PCMCIA is at 0x1800 */ CLKDEV_INIT("1800", NULL, &clk_cpu), CLKDEV_INIT(NULL, "OSTIMER0", &clk_36864), };
int __init sa11xx_clk_init(void) { clkdev_add_table(sa11xx_clkregs, ARRAY_SIZE(sa11xx_clkregs)); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Jett.Zhou1571.43%150.00%
Russell King628.57%150.00%
Total21100.00%2100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Dmitry Baryshkov20636.33%333.33%
Russell King20235.63%555.56%
Jett.Zhou15928.04%111.11%
Total567100.00%9100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.