Code Review
/
kvmfornfv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git]
/
kernel
/
drivers
/
clk
/
at91
/
clk-utmi.c
diff --git
a/kernel/drivers/clk/at91/clk-utmi.c
b/kernel/drivers/clk/at91/clk-utmi.c
index
ae3263b
..
61fcf39
100644
(file)
--- a/
kernel/drivers/clk/at91/clk-utmi.c
+++ b/
kernel/drivers/clk/at91/clk-utmi.c
@@
-11,14
+11,9
@@
#include <linux/clk-provider.h>
#include <linux/clkdev.h>
#include <linux/clk/at91_pmc.h>
#include <linux/clk-provider.h>
#include <linux/clkdev.h>
#include <linux/clk/at91_pmc.h>
-#include <linux/interrupt.h>
-#include <linux/irq.h>
#include <linux/of.h>
#include <linux/of.h>
-#include <linux/of_address.h>
-#include <linux/of_irq.h>
-#include <linux/io.h>
-#include <linux/sched.h>
-#include <linux/wait.h>
+#include <linux/mfd/syscon.h>
+#include <linux/regmap.h>
#include "pmc.h"
#include "pmc.h"
@@
-26,37
+21,30
@@
struct clk_utmi {
struct clk_hw hw;
struct clk_utmi {
struct clk_hw hw;
- struct at91_pmc *pmc;
- unsigned int irq;
- wait_queue_head_t wait;
+ struct regmap *regmap;
};
#define to_clk_utmi(hw) container_of(hw, struct clk_utmi, hw)
};
#define to_clk_utmi(hw) container_of(hw, struct clk_utmi, hw)
-static i
rqreturn_t clk_utmi_irq_handler(int irq, void *dev_id
)
+static i
nline bool clk_utmi_ready(struct regmap *regmap
)
{
{
-
struct clk_utmi *utmi = (struct clk_utmi *)dev_id
;
+
unsigned int status
;
- wake_up(&utmi->wait);
- disable_irq_nosync(utmi->irq);
+ regmap_read(regmap, AT91_PMC_SR, &status);
- return
IRQ_HANDLED
;
+ return
status & AT91_PMC_LOCKU
;
}
static int clk_utmi_prepare(struct clk_hw *hw)
{
struct clk_utmi *utmi = to_clk_utmi(hw);
}
static int clk_utmi_prepare(struct clk_hw *hw)
{
struct clk_utmi *utmi = to_clk_utmi(hw);
- struct at91_pmc *pmc = utmi->pmc;
- u32 tmp = at91_pmc_read(AT91_CKGR_UCKR) | AT91_PMC_UPLLEN |
- AT91_PMC_UPLLCOUNT | AT91_PMC_BIASEN;
+ unsigned int uckr = AT91_PMC_UPLLEN | AT91_PMC_UPLLCOUNT |
+ AT91_PMC_BIASEN;
-
pmc_write(pmc, AT91_CKGR_UCKR, tmp
);
+
regmap_update_bits(utmi->regmap, AT91_CKGR_UCKR, uckr, uckr
);
- while (!(pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_LOCKU)) {
- enable_irq(utmi->irq);
- wait_event(utmi->wait,
- pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_LOCKU);
- }
+ while (!clk_utmi_ready(utmi->regmap))
+ cpu_relax();
return 0;
}
return 0;
}
@@
-64,18
+52,15
@@
static int clk_utmi_prepare(struct clk_hw *hw)
static int clk_utmi_is_prepared(struct clk_hw *hw)
{
struct clk_utmi *utmi = to_clk_utmi(hw);
static int clk_utmi_is_prepared(struct clk_hw *hw)
{
struct clk_utmi *utmi = to_clk_utmi(hw);
- struct at91_pmc *pmc = utmi->pmc;
- return
!!(pmc_read(pmc, AT91_PMC_SR) & AT91_PMC_LOCKU
);
+ return
clk_utmi_ready(utmi->regmap
);
}
static void clk_utmi_unprepare(struct clk_hw *hw)
{
struct clk_utmi *utmi = to_clk_utmi(hw);
}
static void clk_utmi_unprepare(struct clk_hw *hw)
{
struct clk_utmi *utmi = to_clk_utmi(hw);
- struct at91_pmc *pmc = utmi->pmc;
- u32 tmp = at91_pmc_read(AT91_CKGR_UCKR) & ~AT91_PMC_UPLLEN;
-
pmc_write(pmc, AT91_CKGR_UCKR, tmp
);
+
regmap_update_bits(utmi->regmap, AT91_CKGR_UCKR, AT91_PMC_UPLLEN, 0
);
}
static unsigned long clk_utmi_recalc_rate(struct clk_hw *hw,
}
static unsigned long clk_utmi_recalc_rate(struct clk_hw *hw,
@@
-93,10
+78,9
@@
static const struct clk_ops utmi_ops = {
};
static struct clk * __init
};
static struct clk * __init
-at91_clk_register_utmi(struct
at91_pmc *pmc, unsigned int irq
,
+at91_clk_register_utmi(struct
regmap *regmap
,
const char *name, const char *parent_name)
{
const char *name, const char *parent_name)
{
- int ret;
struct clk_utmi *utmi;
struct clk *clk = NULL;
struct clk_init_data init;
struct clk_utmi *utmi;
struct clk *clk = NULL;
struct clk_init_data init;
@@
-112,14
+96,7
@@
at91_clk_register_utmi(struct at91_pmc *pmc, unsigned int irq,
init.flags = CLK_SET_RATE_GATE;
utmi->hw.init = &init;
init.flags = CLK_SET_RATE_GATE;
utmi->hw.init = &init;
- utmi->pmc = pmc;
- utmi->irq = irq;
- init_waitqueue_head(&utmi->wait);
- irq_set_status_flags(utmi->irq, IRQ_NOAUTOEN);
- ret = request_irq(utmi->irq, clk_utmi_irq_handler,
- IRQF_TRIGGER_HIGH, "clk-utmi", utmi);
- if (ret)
- return ERR_PTR(ret);
+ utmi->regmap = regmap;
clk = clk_register(NULL, &utmi->hw);
if (IS_ERR(clk))
clk = clk_register(NULL, &utmi->hw);
if (IS_ERR(clk))
@@
-128,32
+105,27
@@
at91_clk_register_utmi(struct at91_pmc *pmc, unsigned int irq,
return clk;
}
return clk;
}
-static void __init
-of_at91_clk_utmi_setup(struct device_node *np, struct at91_pmc *pmc)
+static void __init of_at91sam9x5_clk_utmi_setup(struct device_node *np)
{
{
- unsigned int irq;
struct clk *clk;
const char *parent_name;
const char *name = np->name;
struct clk *clk;
const char *parent_name;
const char *name = np->name;
+ struct regmap *regmap;
parent_name = of_clk_get_parent_name(np, 0);
of_property_read_string(np, "clock-output-names", &name);
parent_name = of_clk_get_parent_name(np, 0);
of_property_read_string(np, "clock-output-names", &name);
-
irq = irq_of_parse_and_map(np, 0
);
- if (
!irq
)
+
regmap = syscon_node_to_regmap(of_get_parent(np)
);
+ if (
IS_ERR(regmap)
)
return;
return;
- clk = at91_clk_register_utmi(
pmc, irq
, name, parent_name);
+ clk = at91_clk_register_utmi(
regmap
, name, parent_name);
if (IS_ERR(clk))
return;
of_clk_add_provider(np, of_clk_src_simple_get, clk);
return;
}
if (IS_ERR(clk))
return;
of_clk_add_provider(np, of_clk_src_simple_get, clk);
return;
}
-
-void __init of_at91sam9x5_clk_utmi_setup(struct device_node *np,
- struct at91_pmc *pmc)
-{
- of_at91_clk_utmi_setup(np, pmc);
-}
+CLK_OF_DECLARE(at91sam9x5_clk_utmi, "atmel,at91sam9x5-clk-utmi",
+ of_at91sam9x5_clk_utmi_setup);