Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 93874681 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'clk-for-linus' of git://git.linaro.org/people/mturquette/linux

Pull clock framework changes from Mike Turquette:
 "The common clock framework changes for 3.8 are comprised of lots of
  fixes for existing platforms as well as new ports for some ARM
  platforms.  In addition there are new clk drivers for audio devices
  and MFDs."

Fix up trivial conflict in <linux/clk-provider.h> (removal of 'inline'
clashing with return type fixes)

* tag 'clk-for-linus' of git://git.linaro.org/people/mturquette/linux: (51 commits)
  MAINTAINERS: bad email address for Mike Turquette
  clk: introduce optional disable_unused callback
  clk: ux500: fix bit error
  clk: clock multiplexers may register out of order
  clk: ux500: Initial support for abx500 clock driver
  CLK: SPEAr: Remove unused dummy apb_pclk
  CLK: SPEAr: Correct index scanning done for clock synths
  CLK: SPEAr: Update clock rate table
  CLK: SPEAr: Add missing clocks
  CLK: SPEAr: Set CLK_SET_RATE_PARENT for few clocks
  CLK: SPEAr13xx: fix parent names of multiple clocks
  CLK: SPEAr13xx: Fix mux clock names
  CLK: SPEAr: Fix dev_id & con_id for multiple clocks
  clk: move IM-PD1 clocks to drivers/clk
  clk: make ICST driver handle the VCO registers
  clk: add GPLv2 headers to the Versatile clock files
  clk: mxs: Use a better name for the USB PHY clock
  clk: spear: Add stub functions for spear3[0|1|2]0_clk_init()
  CLK: clk-twl6040: fix return value check in twl6040_clk_probe()
  clk: ux500: Register nomadik keypad clock lookups for u8500
  ...
parents 505cbeda 8f871896
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ clocks and IDs.
	lcdif		38
	etm		39
	usb		40
	usb_pwr		41
	usb_phy		41

Examples:

+2 −2
Original line number Diff line number Diff line
@@ -73,8 +73,8 @@ clocks and IDs.
	can1		59
	usb0		60
	usb1		61
	usb0_pwr	62
	usb1_pwr	63
	usb0_phy	62
	usb1_phy	63
	enet_out	64

Examples:
+0 −1
Original line number Diff line number Diff line
@@ -1987,7 +1987,6 @@ F: fs/coda/
F:	include/linux/coda*.h

COMMON CLK FRAMEWORK
M:	Mike Turquette <mturquette@ti.com>
M:	Mike Turquette <mturquette@linaro.org>
L:	linux-arm-kernel@lists.infradead.org (same as CLK API & CLKDEV)
T:	git git://git.linaro.org/people/mturquette/linux.git
+2 −0
Original line number Diff line number Diff line
@@ -56,6 +56,8 @@
#define SCCTRL_TIMEREN1SEL_REFCLK	(0 << 17)
#define SCCTRL_TIMEREN1SEL_TIMCLK	(1 << 17)

#define SCCTRL_TIMERENnSEL_SHIFT(n)	(15 + ((n) * 2))

static inline void sysctl_soft_reset(void __iomem *base)
{
	/* switch to slow mode */
+3 −66
Original line number Diff line number Diff line
@@ -21,10 +21,9 @@
#include <linux/amba/bus.h>
#include <linux/amba/clcd.h>
#include <linux/io.h>
#include <linux/platform_data/clk-integrator.h>
#include <linux/slab.h>
#include <linux/clkdev.h>

#include <asm/hardware/icst.h>
#include <mach/lm.h>
#include <mach/impd1.h>
#include <asm/sizes.h>
@@ -36,45 +35,6 @@ MODULE_PARM_DESC(lmid, "logic module stack position");

struct impd1_module {
	void __iomem	*base;
	struct clk	vcos[2];
	struct clk_lookup *clks[3];
};

static const struct icst_params impd1_vco_params = {
	.ref		= 24000000,	/* 24 MHz */
	.vco_max	= ICST525_VCO_MAX_3V,
	.vco_min	= ICST525_VCO_MIN,
	.vd_min		= 12,
	.vd_max		= 519,
	.rd_min		= 3,
	.rd_max		= 120,
	.s2div		= icst525_s2div,
	.idx2s		= icst525_idx2s,
};

static void impd1_setvco(struct clk *clk, struct icst_vco vco)
{
	struct impd1_module *impd1 = clk->data;
	u32 val = vco.v | (vco.r << 9) | (vco.s << 16);

	writel(0xa05f, impd1->base + IMPD1_LOCK);
	writel(val, clk->vcoreg);
	writel(0, impd1->base + IMPD1_LOCK);

#ifdef DEBUG
	vco.v = val & 0x1ff;
	vco.r = (val >> 9) & 0x7f;
	vco.s = (val >> 16) & 7;

	pr_debug("IM-PD1: VCO%d clock is %ld Hz\n",
		 vconr, icst525_hz(&impd1_vco_params, vco));
#endif
}

static const struct clk_ops impd1_clk_ops = {
	.round	= icst_clk_round,
	.set	= icst_clk_set,
	.setvco	= impd1_setvco,
};

void impd1_tweak_control(struct device *dev, u32 mask, u32 val)
@@ -344,10 +304,6 @@ static struct impd1_device impd1_devs[] = {
	}
};

static struct clk fixed_14745600 = {
	.rate = 14745600,
};

static int impd1_probe(struct lm_device *dev)
{
	struct impd1_module *impd1;
@@ -376,23 +332,7 @@ static int impd1_probe(struct lm_device *dev)
	printk("IM-PD1 found at 0x%08lx\n",
		(unsigned long)dev->resource.start);

	for (i = 0; i < ARRAY_SIZE(impd1->vcos); i++) {
		impd1->vcos[i].ops = &impd1_clk_ops,
		impd1->vcos[i].owner = THIS_MODULE,
		impd1->vcos[i].params = &impd1_vco_params,
		impd1->vcos[i].data = impd1;
	}
	impd1->vcos[0].vcoreg = impd1->base + IMPD1_OSC1;
	impd1->vcos[1].vcoreg = impd1->base + IMPD1_OSC2;

	impd1->clks[0] = clkdev_alloc(&impd1->vcos[0], NULL, "lm%x:01000",
					dev->id);
	impd1->clks[1] = clkdev_alloc(&fixed_14745600, NULL, "lm%x:00100",
					dev->id);
	impd1->clks[2] = clkdev_alloc(&fixed_14745600, NULL, "lm%x:00200",
					dev->id);
	for (i = 0; i < ARRAY_SIZE(impd1->clks); i++)
		clkdev_add(impd1->clks[i]);
	integrator_impd1_clk_init(impd1->base, dev->id);

	for (i = 0; i < ARRAY_SIZE(impd1_devs); i++) {
		struct impd1_device *idev = impd1_devs + i;
@@ -431,12 +371,9 @@ static int impd1_remove_one(struct device *dev, void *data)
static void impd1_remove(struct lm_device *dev)
{
	struct impd1_module *impd1 = lm_get_drvdata(dev);
	int i;

	device_for_each_child(&dev->dev, NULL, impd1_remove_one);

	for (i = 0; i < ARRAY_SIZE(impd1->clks); i++)
		clkdev_drop(impd1->clks[i]);
	integrator_impd1_clk_exit(dev->id);

	lm_set_drvdata(dev, NULL);

Loading