mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
Merge branches 'clk-ingenic', 'clk-vc5', 'clk-cleanup', 'clk-canaan' and 'clk-marvell' into clk-next
- Bindings for Canaan K210 SoC clks * clk-ingenic: clk: ingenic: Fix divider calculation with div tables * clk-vc5: clk: vc5: Use "idt,voltage-microvolt" instead of "idt,voltage-microvolts" * clk-cleanup: clk: sunxi-ng: Make sure divider tables have sentinel clk: s2mps11: Fix a resource leak in error handling paths in the probe function clk: bcm: dvp: Add MODULE_DEVICE_TABLE() clk: bcm: dvp: drop a variable that is assigned to only * clk-canaan: dt-binding: clock: Document canaan,k210-clk bindings dt-bindings: Add Canaan vendor prefix * clk-marvell: clk: mvebu: a3700: fix the XTAL MODE pin to MPP1_9
This commit is contained in:
commit
abe7e32f1d
54
Documentation/devicetree/bindings/clock/canaan,k210-clk.yaml
Normal file
54
Documentation/devicetree/bindings/clock/canaan,k210-clk.yaml
Normal file
@ -0,0 +1,54 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/clock/canaan,k210-clk.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Canaan Kendryte K210 Clock Device Tree Bindings
|
||||
|
||||
maintainers:
|
||||
- Damien Le Moal <damien.lemoal@wdc.com>
|
||||
|
||||
description: |
|
||||
Canaan Kendryte K210 SoC clocks driver bindings. The clock
|
||||
controller node must be defined as a child node of the K210
|
||||
system controller node.
|
||||
|
||||
See also:
|
||||
- dt-bindings/clock/k210-clk.h
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: canaan,k210-clk
|
||||
|
||||
clocks:
|
||||
description:
|
||||
Phandle of the SoC 26MHz fixed-rate oscillator clock.
|
||||
|
||||
'#clock-cells':
|
||||
const: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- '#clock-cells'
|
||||
- clocks
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/k210-clk.h>
|
||||
clocks {
|
||||
in0: oscillator {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <26000000>;
|
||||
};
|
||||
};
|
||||
|
||||
/* ... */
|
||||
sysclk: clock-controller {
|
||||
#clock-cells = <1>;
|
||||
compatible = "canaan,k210-clk";
|
||||
clocks = <&in0>;
|
||||
};
|
@ -179,6 +179,8 @@ patternProperties:
|
||||
description: CALAO Systems SAS
|
||||
"^calxeda,.*":
|
||||
description: Calxeda
|
||||
"^canaan,.*":
|
||||
description: Canaan, Inc.
|
||||
"^caninos,.*":
|
||||
description: Caninos Loucos Program
|
||||
"^capella,.*":
|
||||
|
@ -25,7 +25,6 @@ static const struct clk_parent_data clk_dvp_parent = {
|
||||
static int clk_dvp_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct clk_hw_onecell_data *data;
|
||||
struct resource *res;
|
||||
struct clk_dvp *dvp;
|
||||
void __iomem *base;
|
||||
int ret;
|
||||
@ -42,7 +41,7 @@ static int clk_dvp_probe(struct platform_device *pdev)
|
||||
return -ENOMEM;
|
||||
data = dvp->data;
|
||||
|
||||
base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||
base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(base))
|
||||
return PTR_ERR(base);
|
||||
|
||||
@ -108,6 +107,7 @@ static const struct of_device_id clk_dvp_dt_ids[] = {
|
||||
{ .compatible = "brcm,brcm2711-dvp", },
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, clk_dvp_dt_ids);
|
||||
|
||||
static struct platform_driver clk_dvp_driver = {
|
||||
.probe = clk_dvp_probe,
|
||||
|
@ -195,6 +195,7 @@ static int s2mps11_clk_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
|
||||
err_reg:
|
||||
of_node_put(s2mps11_clks[0].clk_np);
|
||||
while (--i >= 0)
|
||||
clkdev_drop(s2mps11_clks[i].lookup);
|
||||
|
||||
|
@ -739,8 +739,8 @@ static int vc5_update_power(struct device_node *np_output,
|
||||
{
|
||||
u32 value;
|
||||
|
||||
if (!of_property_read_u32(np_output,
|
||||
"idt,voltage-microvolts", &value)) {
|
||||
if (!of_property_read_u32(np_output, "idt,voltage-microvolt",
|
||||
&value)) {
|
||||
clk_out->clk_output_cfg0_mask |= VC5_CLK_OUTPUT_CFG0_PWR_MASK;
|
||||
switch (value) {
|
||||
case 1800000:
|
||||
|
@ -392,15 +392,21 @@ static unsigned int
|
||||
ingenic_clk_calc_hw_div(const struct ingenic_cgu_clk_info *clk_info,
|
||||
unsigned int div)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int i, best_i = 0, best = (unsigned int)-1;
|
||||
|
||||
for (i = 0; i < (1 << clk_info->div.bits)
|
||||
&& clk_info->div.div_table[i]; i++) {
|
||||
if (clk_info->div.div_table[i] >= div)
|
||||
return i;
|
||||
if (clk_info->div.div_table[i] >= div &&
|
||||
clk_info->div.div_table[i] < best) {
|
||||
best = clk_info->div.div_table[i];
|
||||
best_i = i;
|
||||
|
||||
if (div == best)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return i - 1;
|
||||
return best_i;
|
||||
}
|
||||
|
||||
static unsigned
|
||||
|
@ -13,8 +13,8 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/regmap.h>
|
||||
|
||||
#define NB_GPIO1_LATCH 0xC
|
||||
#define XTAL_MODE BIT(31)
|
||||
#define NB_GPIO1_LATCH 0x8
|
||||
#define XTAL_MODE BIT(9)
|
||||
|
||||
static int armada_3700_xtal_clock_probe(struct platform_device *pdev)
|
||||
{
|
||||
|
@ -389,6 +389,7 @@ static struct clk_div_table ths_div_table[] = {
|
||||
{ .val = 1, .div = 2 },
|
||||
{ .val = 2, .div = 4 },
|
||||
{ .val = 3, .div = 6 },
|
||||
{ /* Sentinel */ },
|
||||
};
|
||||
static const char * const ths_parents[] = { "osc24M" };
|
||||
static struct ccu_div ths_clk = {
|
||||
|
@ -322,6 +322,7 @@ static struct clk_div_table ths_div_table[] = {
|
||||
{ .val = 1, .div = 2 },
|
||||
{ .val = 2, .div = 4 },
|
||||
{ .val = 3, .div = 6 },
|
||||
{ /* Sentinel */ },
|
||||
};
|
||||
static SUNXI_CCU_DIV_TABLE_WITH_GATE(ths_clk, "ths", "osc24M",
|
||||
0x074, 0, 2, ths_div_table, BIT(31), 0);
|
||||
|
@ -3,18 +3,52 @@
|
||||
* Copyright (C) 2019-20 Sean Anderson <seanga2@gmail.com>
|
||||
* Copyright (c) 2020 Western Digital Corporation or its affiliates.
|
||||
*/
|
||||
#ifndef K210_CLK_H
|
||||
#define K210_CLK_H
|
||||
#ifndef CLOCK_K210_CLK_H
|
||||
#define CLOCK_K210_CLK_H
|
||||
|
||||
/*
|
||||
* Arbitrary identifiers for clocks.
|
||||
* The structure is: in0 -> pll0 -> aclk -> cpu
|
||||
*
|
||||
* Since we use the hardware defaults for now, set all these to the same clock.
|
||||
* Kendryte K210 SoC clock identifiers (arbitrary values).
|
||||
*/
|
||||
#define K210_CLK_PLL0 0
|
||||
#define K210_CLK_PLL1 0
|
||||
#define K210_CLK_ACLK 0
|
||||
#define K210_CLK_CPU 0
|
||||
#define K210_CLK_ACLK 0
|
||||
#define K210_CLK_CPU 0
|
||||
#define K210_CLK_SRAM0 1
|
||||
#define K210_CLK_SRAM1 2
|
||||
#define K210_CLK_AI 3
|
||||
#define K210_CLK_DMA 4
|
||||
#define K210_CLK_FFT 5
|
||||
#define K210_CLK_ROM 6
|
||||
#define K210_CLK_DVP 7
|
||||
#define K210_CLK_APB0 8
|
||||
#define K210_CLK_APB1 9
|
||||
#define K210_CLK_APB2 10
|
||||
#define K210_CLK_I2S0 11
|
||||
#define K210_CLK_I2S1 12
|
||||
#define K210_CLK_I2S2 13
|
||||
#define K210_CLK_I2S0_M 14
|
||||
#define K210_CLK_I2S1_M 15
|
||||
#define K210_CLK_I2S2_M 16
|
||||
#define K210_CLK_WDT0 17
|
||||
#define K210_CLK_WDT1 18
|
||||
#define K210_CLK_SPI0 19
|
||||
#define K210_CLK_SPI1 20
|
||||
#define K210_CLK_SPI2 21
|
||||
#define K210_CLK_I2C0 22
|
||||
#define K210_CLK_I2C1 23
|
||||
#define K210_CLK_I2C2 24
|
||||
#define K210_CLK_SPI3 25
|
||||
#define K210_CLK_TIMER0 26
|
||||
#define K210_CLK_TIMER1 27
|
||||
#define K210_CLK_TIMER2 28
|
||||
#define K210_CLK_GPIO 29
|
||||
#define K210_CLK_UART1 30
|
||||
#define K210_CLK_UART2 31
|
||||
#define K210_CLK_UART3 32
|
||||
#define K210_CLK_FPIOA 33
|
||||
#define K210_CLK_SHA 34
|
||||
#define K210_CLK_AES 35
|
||||
#define K210_CLK_OTP 36
|
||||
#define K210_CLK_RTC 37
|
||||
|
||||
#endif /* K210_CLK_H */
|
||||
#define K210_NUM_CLKS 38
|
||||
|
||||
#endif /* CLOCK_K210_CLK_H */
|
||||
|
Loading…
Reference in New Issue
Block a user