mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
Amlogic clock changes for v7.3
* Fix the incorrect parent number of the 32k clock on GXBB * Add the AO and peripheral clock controllers for the new A9 chip -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE9OFZrhjz9W1fG7cb5vwPHDfy2oUFAmpspMEACgkQ5vwPHDfy 2oUc2BAAr4p6ygDoxRof6N/NjNlJebaYWviWhwaKDdM9a8UaKKtYeqQP1ye/1Nzv qIUcLCMDqQP1UU4xsErIDcuOLBEZ9l9WWUvL8aMJwNWyZ+l1BFdxROhnHTqfUj+i j636C+7/t9/c7PVu5C+v7i7cAMPCQQx48p1KQskmWiEJBfOt8fgIbfpdIpy9HM4V FprCnyMZdqx9DjUB1n9LWFwAN2skEwplZp3Vg0UZCtKLxdW6RGJ9ALYlknrWTkKL hqWMMQFofNBlBlMaXKrNKAlZfaegn/0pNrAeIpX3rSk8a/bdjQ7FVPtFfSfIHcw+ Z8uoxef3yuLI+c8x/SrRCPSLe83ZalOGtontmuWGT6prE7E89HqS1IqUbVoiMlDD EwbPUEGxLMMJUa3IP5WMGOCqTtnbiI/8gQVC4EgxPxWHiMr8qYHNRwVCfZhzZIic iinEU4UqehOoySapEZum/neBCbl9eJbr5bxxt2aKl60fQcXBJDEDUcju5JG56zuT m3OQAcAcKQoPcA4Fggdvyzc1eZMiEGjdYepT1WFNFq8aAA/qct0nse5GWyvZ9ZU8 tWDFKGwBfI1BfvGnFV7r1CN+wwF77I8d0Yf/6tx64iLYG+OVoGT1764fq+xOp/wu 33BNxGNfW6+tPrHrQp6QHPaC/lTAGVKimGe7usDSomLjDpyZBfU= =pzDk -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQJIBAABCAAyFiEE9L57QeeUxqYDyoaDrQKIl8bklSUFAmp7/0AUHHN3Ym95ZEBj aHJvbWl1bS5vcmcACgkQrQKIl8bklSU0QhAAhtpaF2R3Dnp2+rNaCBEnqmdEqU8f LgK48CXz/a97wJi1QIXfVihajkEBrxi1+j01TJNzEQcFuW2UkXoRbn97ZaPathd+ GoOv+da5IU6e1FwctdHCWXff8Y6tkdkYTP7bAC6/n7m146muNt99MSO1Htkb3x5i 0klXsu+fHQQ+EYcUo31secuMJbC1R94JhF1Oz+MOsSygNbe64e6aJJS3XkZ1x1py 2TeP+/AF53AwYtUx1z0zdHP/xLsyIJnsPmt5Jfzbt3UtKTBOP/IAoyvDSjGRa9kb E7wWnJ7z5GRwZAk4L7kbtrs7nruNSQT8QbHERw87b1uFA2N+gl5k7M+j3pEXdQgo K63uzCoNPyoIsghgg0f5fXBz28eE2UsG9W4JkNfEGcjJK7cSAX7/68dsY4is/tJs Rjy+uLRcBCLtcHOgMZQNTSISAqWt1RBdU6AElKviFNR1nw05xCN9jDRB9xEwYNo/ ZEW9hwjAVfjeD/Yrzs8vqBRYZqyD6lgZkGcM5cNUGTClPbrK+QmVQZXhuDH1HT4o aw1mwFX6FFUrfYKm5nHUWIelh6hETFt2T6L8L3edxRAzC/NYVcrx7KFzTq5387eV HXy/Y4xSimaaCR32tgkeUyv6ZRd8M/m7G4BW6q4ObJq/mKFYsv5VcQYgpAXHRxa8 mW1136cLsgBTRpk= =Dxt8 -----END PGP SIGNATURE----- Merge tag 'clk-meson-v7.3-1' of ssh://github.com/BayLibre/clk-meson into clk-amlogic Pull Amlogic clk driver updates from Jerome Brunet: - Fix the incorrect parent number of the 32k clock on Amlogic GXBB - Add the AO and peripheral clock controllers for the new Amlogic A9 chip * tag 'clk-meson-v7.3-1' of ssh://github.com/BayLibre/clk-meson: clk: amlogic: Add A9 peripherals clock controller driver dt-bindings: clock: Add Amlogic A9 peripherals clock controller clk: amlogic: Add A9 AO clock controller driver dt-bindings: clock: Add Amlogic A9 AO clock controller clk: meson: align gxbb_32k_clk_sel number of parents with actual count
This commit is contained in:
commit
3990334628
|
|
@ -0,0 +1,76 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
# Copyright (C) 2026 Amlogic, Inc. All rights reserved
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/clock/amlogic,a9-aoclkc.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Amlogic A9 Series Always-On Clock Controller
|
||||
|
||||
maintainers:
|
||||
- Neil Armstrong <neil.armstrong@linaro.org>
|
||||
- Jerome Brunet <jbrunet@baylibre.com>
|
||||
- Jian Hu <jian.hu@amlogic.com>
|
||||
- Xianwei Zhao <xianwei.zhao@amlogic.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: amlogic,a9-aoclkc
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
'#clock-cells':
|
||||
const: 1
|
||||
|
||||
clocks:
|
||||
minItems: 5
|
||||
items:
|
||||
- description: input oscillator
|
||||
- description: input fclk div 3
|
||||
- description: input fclk div 4
|
||||
- description: input fclk div 5
|
||||
- description: input sys clk
|
||||
- description: external fixed 32k (optional)
|
||||
|
||||
clock-names:
|
||||
minItems: 5
|
||||
items:
|
||||
- const: xtal
|
||||
- const: fdiv3
|
||||
- const: fdiv4
|
||||
- const: fdiv5
|
||||
- const: sys
|
||||
- const: ext_32k
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- '#clock-cells'
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
soc {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
|
||||
clock-controller@0 {
|
||||
compatible = "amlogic,a9-aoclkc";
|
||||
reg = <0x0 0x0 0x0 0x58>;
|
||||
#clock-cells = <1>;
|
||||
clocks = <&xtal>,
|
||||
<&scmi_clk 14>,
|
||||
<&scmi_clk 16>,
|
||||
<&scmi_clk 18>,
|
||||
<&scmi_clk 21>;
|
||||
clock-names = "xtal",
|
||||
"fdiv3",
|
||||
"fdiv4",
|
||||
"fdiv5",
|
||||
"sys";
|
||||
};
|
||||
};
|
||||
|
|
@ -0,0 +1,164 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
# Copyright (C) 2026 Amlogic, Inc. All rights reserved
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/clock/amlogic,a9-peripherals-clkc.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Amlogic A9 Series Peripherals Clock Controller
|
||||
|
||||
maintainers:
|
||||
- Neil Armstrong <neil.armstrong@linaro.org>
|
||||
- Jerome Brunet <jbrunet@baylibre.com>
|
||||
- Jian Hu <jian.hu@amlogic.com>
|
||||
- Xianwei Zhao <xianwei.zhao@amlogic.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: amlogic,a9-peripherals-clkc
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
'#clock-cells':
|
||||
const: 1
|
||||
|
||||
clocks:
|
||||
minItems: 27
|
||||
items:
|
||||
- description: input oscillator
|
||||
- description: input fclk div 2
|
||||
- description: input fclk div 3
|
||||
- description: input fclk div 4
|
||||
- description: input fclk div 5
|
||||
- description: input fclk div 7
|
||||
- description: input fclk div 2p5
|
||||
- description: input sys clk
|
||||
- description: input gp1 pll
|
||||
- description: input gp2 pll
|
||||
- description: input sys pll div 16
|
||||
- description: input cpu clk div 16
|
||||
- description: input a78 clk div 16
|
||||
- description: input dsu clk div 16
|
||||
- description: input rtc clk
|
||||
- description: input gp0 pll
|
||||
- description: input hifi0 pll
|
||||
- description: input hifi1 pll
|
||||
- description: input mclk0 pll
|
||||
- description: input mclk1 pll
|
||||
- description: input video1 pll
|
||||
- description: input video2 pll
|
||||
- description: input hdmi out2 clk
|
||||
- description: input hdmi pixel clk
|
||||
- description: input pixel0 pll
|
||||
- description: input pixel1 pll
|
||||
- description: input ddr pll test clk
|
||||
- description: external input rmii oscillator (optional)
|
||||
|
||||
clock-names:
|
||||
minItems: 27
|
||||
items:
|
||||
- const: xtal
|
||||
- const: fdiv2
|
||||
- const: fdiv3
|
||||
- const: fdiv4
|
||||
- const: fdiv5
|
||||
- const: fdiv7
|
||||
- const: fdiv2p5
|
||||
- const: sys
|
||||
- const: gp1
|
||||
- const: gp2
|
||||
- const: sysplldiv16
|
||||
- const: cpudiv16
|
||||
- const: a78div16
|
||||
- const: dsudiv16
|
||||
- const: rtc
|
||||
- const: gp0
|
||||
- const: hifi0
|
||||
- const: hifi1
|
||||
- const: mclk0
|
||||
- const: mclk1
|
||||
- const: vid1
|
||||
- const: vid2
|
||||
- const: hdmiout2
|
||||
- const: hdmipix
|
||||
- const: pix0
|
||||
- const: pix1
|
||||
- const: ddr_test
|
||||
- const: ext_rmii
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- '#clock-cells'
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
soc {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
|
||||
clock-controller@200 {
|
||||
compatible = "amlogic,a9-peripherals-clkc";
|
||||
reg = <0x0 0x200 0x0 0x2f8>;
|
||||
#clock-cells = <1>;
|
||||
clocks = <&xtal>,
|
||||
<&scmi_clk 10>,
|
||||
<&scmi_clk 12>,
|
||||
<&scmi_clk 14>,
|
||||
<&scmi_clk 16>,
|
||||
<&scmi_clk 18>,
|
||||
<&scmi_clk 20>,
|
||||
<&scmi_clk 21>,
|
||||
<&scmi_clk 33>,
|
||||
<&scmi_clk 34>,
|
||||
<&scmi_clk 35>,
|
||||
<&scmi_clk 36>,
|
||||
<&scmi_clk 37>,
|
||||
<&scmi_clk 38>,
|
||||
<&scmi_clk 40>,
|
||||
<&gp0 3>,
|
||||
<&hifi0 3>,
|
||||
<&hifi1 3>,
|
||||
<&mclk0 3>,
|
||||
<&mclk1 3>,
|
||||
<&vid1>,
|
||||
<&vid2>,
|
||||
<&hdmitx 10>,
|
||||
<&hdmitx 11>,
|
||||
<&pix0>,
|
||||
<&pix1>,
|
||||
<&ddr 3>;
|
||||
clock-names = "xtal",
|
||||
"fdiv2",
|
||||
"fdiv3",
|
||||
"fdiv4",
|
||||
"fdiv5",
|
||||
"fdiv7",
|
||||
"fdiv2p5",
|
||||
"sys",
|
||||
"gp1",
|
||||
"gp2",
|
||||
"sysplldiv16",
|
||||
"cpudiv16",
|
||||
"a78div16",
|
||||
"dsudiv16",
|
||||
"rtc",
|
||||
"gp0",
|
||||
"hifi0",
|
||||
"hifi1",
|
||||
"mclk0",
|
||||
"mclk1",
|
||||
"vid1",
|
||||
"vid2",
|
||||
"hdmiout2",
|
||||
"hdmipix",
|
||||
"pix0",
|
||||
"pix1",
|
||||
"ddr_test";
|
||||
};
|
||||
};
|
||||
|
|
@ -132,6 +132,33 @@ config COMMON_CLK_A1_PERIPHERALS
|
|||
device, A1 SoC Family. Say Y if you want A1 Peripherals clock
|
||||
controller to work.
|
||||
|
||||
config COMMON_CLK_A9_PERIPHERALS
|
||||
tristate "Amlogic A9 SoC peripherals clock controller support"
|
||||
depends on ARM64 || COMPILE_TEST
|
||||
default ARCH_MESON
|
||||
select COMMON_CLK_MESON_REGMAP
|
||||
select COMMON_CLK_MESON_CLKC_UTILS
|
||||
select COMMON_CLK_MESON_DUALDIV
|
||||
select COMMON_CLK_MESON_VID_PLL_DIV
|
||||
imply COMMON_CLK_SCMI
|
||||
help
|
||||
Support for the peripherals clock controller on Amlogic A311Y3 based
|
||||
device, AKA A9. Peripherals are required by most peripheral to operate.
|
||||
Say Y if you want A9 peripherals clock controller to work.
|
||||
|
||||
config COMMON_CLK_A9_AO
|
||||
tristate "Amlogic A9 SoC AO clock controller support"
|
||||
depends on ARM64 || COMPILE_TEST
|
||||
default ARCH_MESON
|
||||
select COMMON_CLK_MESON_REGMAP
|
||||
select COMMON_CLK_MESON_CLKC_UTILS
|
||||
select COMMON_CLK_MESON_DUALDIV
|
||||
imply COMMON_CLK_SCMI
|
||||
help
|
||||
Support for the AO clock controller on Amlogic A311Y3 based
|
||||
device, AKA A9.
|
||||
Say Y if you want A9 AO clock controller to work.
|
||||
|
||||
config COMMON_CLK_C3_PLL
|
||||
tristate "Amlogic C3 PLL clock controller"
|
||||
depends on ARM64
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ obj-$(CONFIG_COMMON_CLK_AXG) += axg.o axg-aoclk.o
|
|||
obj-$(CONFIG_COMMON_CLK_AXG_AUDIO) += axg-audio.o
|
||||
obj-$(CONFIG_COMMON_CLK_A1_PLL) += a1-pll.o
|
||||
obj-$(CONFIG_COMMON_CLK_A1_PERIPHERALS) += a1-peripherals.o
|
||||
obj-$(CONFIG_COMMON_CLK_A9_PERIPHERALS) += a9-peripherals.o
|
||||
obj-$(CONFIG_COMMON_CLK_A9_AO) += a9-aoclk.o
|
||||
obj-$(CONFIG_COMMON_CLK_C3_PLL) += c3-pll.o
|
||||
obj-$(CONFIG_COMMON_CLK_C3_PERIPHERALS) += c3-peripherals.o
|
||||
obj-$(CONFIG_COMMON_CLK_GXBB) += gxbb.o gxbb-aoclk.o
|
||||
|
|
|
|||
489
drivers/clk/meson/a9-aoclk.c
Normal file
489
drivers/clk/meson/a9-aoclk.c
Normal file
|
|
@ -0,0 +1,489 @@
|
|||
// SPDX-License-Identifier: (GPL-2.0-only OR MIT)
|
||||
/*
|
||||
* Copyright (C) 2026 Amlogic, Inc. All rights reserved
|
||||
*/
|
||||
|
||||
#include <dt-bindings/clock/amlogic,a9-aoclkc.h>
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include "clk-regmap.h"
|
||||
#include "clk-dualdiv.h"
|
||||
#include "meson-clkc-utils.h"
|
||||
|
||||
#define AO_OSCIN_CTRL 0x00
|
||||
#define AO_SYS_CLK0 0x04
|
||||
#define AO_PWM_CLK_A_CTRL 0x1c
|
||||
#define AO_PWM_CLK_B_CTRL 0x20
|
||||
#define AO_PWM_CLK_C_CTRL 0x24
|
||||
#define AO_PWM_CLK_D_CTRL 0x28
|
||||
#define AO_PWM_CLK_E_CTRL 0x2c
|
||||
#define AO_PWM_CLK_F_CTRL 0x30
|
||||
#define AO_PWM_CLK_G_CTRL 0x34
|
||||
#define AO_CEC_CTRL0 0x38
|
||||
#define AO_CEC_CTRL1 0x3c
|
||||
#define AO_RTC_BY_OSCIN_CTRL0 0x50
|
||||
#define AO_RTC_BY_OSCIN_CTRL1 0x54
|
||||
|
||||
#define A9_COMP_SEL(_name, _reg, _shift, _mask, _pdata) \
|
||||
MESON_COMP_SEL(a9_ao_, _name, _reg, _shift, _mask, _pdata, NULL, 0, 0)
|
||||
|
||||
#define A9_COMP_DIV(_name, _reg, _shift, _width) \
|
||||
MESON_COMP_DIV(a9_ao_, _name, _reg, _shift, _width, 0, CLK_SET_RATE_PARENT)
|
||||
|
||||
#define A9_COMP_GATE(_name, _reg, _bit) \
|
||||
MESON_COMP_GATE(a9_ao_, _name, _reg, _bit, CLK_SET_RATE_PARENT)
|
||||
|
||||
static struct clk_regmap a9_ao_xtal_in = {
|
||||
.data = &(struct clk_regmap_gate_data){
|
||||
.offset = AO_OSCIN_CTRL,
|
||||
.bit_idx = 3,
|
||||
},
|
||||
.hw.init = &(struct clk_init_data) {
|
||||
.name = "ao_xtal_in",
|
||||
.ops = &clk_regmap_gate_ops,
|
||||
.parent_data = &(const struct clk_parent_data) {
|
||||
.fw_name = "xtal",
|
||||
},
|
||||
.num_parents = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_regmap a9_ao_xtal = {
|
||||
.data = &(struct clk_regmap_mux_data) {
|
||||
.offset = AO_OSCIN_CTRL,
|
||||
.mask = 0x1,
|
||||
.shift = 0,
|
||||
},
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "ao_xtal",
|
||||
.ops = &clk_regmap_mux_ops,
|
||||
/* ext_32k is from external PAD, do not automatically reparent */
|
||||
.parent_data = (const struct clk_parent_data []) {
|
||||
{ .hw = &a9_ao_xtal_in.hw },
|
||||
{ .fw_name = "ext_32k", },
|
||||
},
|
||||
.num_parents = 2,
|
||||
.flags = CLK_SET_RATE_NO_REPARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_regmap a9_ao_sys = {
|
||||
.data = &(struct clk_regmap_mux_data) {
|
||||
.offset = AO_OSCIN_CTRL,
|
||||
.mask = 0x1,
|
||||
.shift = 1,
|
||||
},
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "ao_sys",
|
||||
.ops = &clk_regmap_mux_ops,
|
||||
.parent_data = (const struct clk_parent_data []) {
|
||||
{ .hw = &a9_ao_xtal.hw },
|
||||
{ .fw_name = "sys", },
|
||||
},
|
||||
.num_parents = 2,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct clk_parent_data a9_ao_pclk_parents = { .hw = &a9_ao_sys.hw };
|
||||
|
||||
#define A9_AO_PCLK(_name, _bit, _flags) \
|
||||
MESON_PCLK(a9_ao_sys_##_name, AO_SYS_CLK0, _bit, \
|
||||
&a9_ao_pclk_parents, _flags)
|
||||
|
||||
/*
|
||||
* A9 integrates a low-power microprocessor (Always-on CPU: AOCPU). Some AO sys
|
||||
* clocks control the AOCPU modules. Mark the AOCPU-related clocks with
|
||||
* CLK_IS_CRITICAL to avoid them being disabled and impacting AOCPU functionality.
|
||||
* AOCPU-related clocks list:
|
||||
* - clktree
|
||||
* - rst_ctrl
|
||||
* - pad
|
||||
* - irq
|
||||
* - pwrctrl
|
||||
* - aocpu
|
||||
* - sram
|
||||
*/
|
||||
static A9_AO_PCLK(i3c, 0, 0);
|
||||
static A9_AO_PCLK(rtc_reg, 1, 0);
|
||||
static A9_AO_PCLK(clktree, 2, CLK_IS_CRITICAL);
|
||||
static A9_AO_PCLK(rst_ctrl, 3, CLK_IS_CRITICAL);
|
||||
static A9_AO_PCLK(pad, 4, CLK_IS_CRITICAL);
|
||||
static A9_AO_PCLK(rtc_dig, 5, 0);
|
||||
static A9_AO_PCLK(irq, 6, CLK_IS_CRITICAL);
|
||||
static A9_AO_PCLK(pwrctrl, 7, CLK_IS_CRITICAL);
|
||||
static A9_AO_PCLK(pwm_a, 8, 0);
|
||||
static A9_AO_PCLK(pwm_b, 9, 0);
|
||||
static A9_AO_PCLK(pwm_c, 10, 0);
|
||||
static A9_AO_PCLK(pwm_d, 11, 0);
|
||||
static A9_AO_PCLK(pwm_e, 12, 0);
|
||||
static A9_AO_PCLK(pwm_f, 13, 0);
|
||||
static A9_AO_PCLK(pwm_g, 14, 0);
|
||||
static A9_AO_PCLK(i2c_a, 15, 0);
|
||||
static A9_AO_PCLK(i2c_b, 16, 0);
|
||||
static A9_AO_PCLK(i2c_c, 17, 0);
|
||||
static A9_AO_PCLK(i2c_d, 18, 0);
|
||||
static A9_AO_PCLK(sed, 19, 0);
|
||||
static A9_AO_PCLK(ir_ctrl, 20, 0);
|
||||
static A9_AO_PCLK(uart_b, 21, 0);
|
||||
static A9_AO_PCLK(uart_c, 22, 0);
|
||||
static A9_AO_PCLK(uart_d, 23, 0);
|
||||
static A9_AO_PCLK(uart_e, 24, 0);
|
||||
static A9_AO_PCLK(spisg_0, 25, 0);
|
||||
static A9_AO_PCLK(rtc_secure, 26, 0);
|
||||
static A9_AO_PCLK(cec, 27, 0);
|
||||
static A9_AO_PCLK(aocpu, 28, CLK_IS_CRITICAL);
|
||||
static A9_AO_PCLK(sram, 29, CLK_IS_CRITICAL);
|
||||
static A9_AO_PCLK(spisg_1, 30, 0);
|
||||
static A9_AO_PCLK(spisg_2, 31, 0);
|
||||
|
||||
static const struct clk_parent_data a9_ao_pwm_parents[] = {
|
||||
{ .hw = &a9_ao_xtal.hw },
|
||||
{ .fw_name = "fdiv5", },
|
||||
{ .fw_name = "fdiv4", },
|
||||
{ .fw_name = "fdiv3", }
|
||||
};
|
||||
|
||||
static A9_COMP_SEL(pwm_a, AO_PWM_CLK_A_CTRL, 9, 0x7, a9_ao_pwm_parents);
|
||||
static A9_COMP_DIV(pwm_a, AO_PWM_CLK_A_CTRL, 0, 8);
|
||||
static A9_COMP_GATE(pwm_a, AO_PWM_CLK_A_CTRL, 8);
|
||||
|
||||
static A9_COMP_SEL(pwm_b, AO_PWM_CLK_B_CTRL, 9, 0x7, a9_ao_pwm_parents);
|
||||
static A9_COMP_DIV(pwm_b, AO_PWM_CLK_B_CTRL, 0, 8);
|
||||
static A9_COMP_GATE(pwm_b, AO_PWM_CLK_B_CTRL, 8);
|
||||
|
||||
static A9_COMP_SEL(pwm_c, AO_PWM_CLK_C_CTRL, 9, 0x7, a9_ao_pwm_parents);
|
||||
static A9_COMP_DIV(pwm_c, AO_PWM_CLK_C_CTRL, 0, 8);
|
||||
static A9_COMP_GATE(pwm_c, AO_PWM_CLK_C_CTRL, 8);
|
||||
|
||||
static A9_COMP_SEL(pwm_d, AO_PWM_CLK_D_CTRL, 9, 0x7, a9_ao_pwm_parents);
|
||||
static A9_COMP_DIV(pwm_d, AO_PWM_CLK_D_CTRL, 0, 8);
|
||||
static A9_COMP_GATE(pwm_d, AO_PWM_CLK_D_CTRL, 8);
|
||||
|
||||
static A9_COMP_SEL(pwm_e, AO_PWM_CLK_E_CTRL, 9, 0x7, a9_ao_pwm_parents);
|
||||
static A9_COMP_DIV(pwm_e, AO_PWM_CLK_E_CTRL, 0, 8);
|
||||
static A9_COMP_GATE(pwm_e, AO_PWM_CLK_E_CTRL, 8);
|
||||
|
||||
static A9_COMP_SEL(pwm_f, AO_PWM_CLK_F_CTRL, 9, 0x7, a9_ao_pwm_parents);
|
||||
static A9_COMP_DIV(pwm_f, AO_PWM_CLK_F_CTRL, 0, 8);
|
||||
static A9_COMP_GATE(pwm_f, AO_PWM_CLK_F_CTRL, 8);
|
||||
|
||||
static A9_COMP_SEL(pwm_g, AO_PWM_CLK_G_CTRL, 9, 0x7, a9_ao_pwm_parents);
|
||||
static A9_COMP_DIV(pwm_g, AO_PWM_CLK_G_CTRL, 0, 8);
|
||||
static A9_COMP_GATE(pwm_g, AO_PWM_CLK_G_CTRL, 8);
|
||||
|
||||
static struct clk_regmap a9_ao_rtc_dualdiv_in = {
|
||||
.data = &(struct clk_regmap_gate_data){
|
||||
.offset = AO_RTC_BY_OSCIN_CTRL0,
|
||||
.bit_idx = 31,
|
||||
},
|
||||
.hw.init = &(struct clk_init_data) {
|
||||
.name = "ao_rtc_dualdiv_in",
|
||||
.ops = &clk_regmap_gate_ops,
|
||||
.parent_hws = (const struct clk_hw *[]) {
|
||||
&a9_ao_xtal.hw
|
||||
},
|
||||
.num_parents = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct meson_clk_dualdiv_param a9_ao_dualdiv_table[] = {
|
||||
{ 733, 732, 8, 11, 1 },
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
|
||||
static struct clk_regmap a9_ao_rtc_dualdiv_div = {
|
||||
.data = &(struct meson_clk_dualdiv_data){
|
||||
.n1 = {
|
||||
.reg_off = AO_RTC_BY_OSCIN_CTRL0,
|
||||
.shift = 0,
|
||||
.width = 12,
|
||||
},
|
||||
.n2 = {
|
||||
.reg_off = AO_RTC_BY_OSCIN_CTRL0,
|
||||
.shift = 12,
|
||||
.width = 12,
|
||||
},
|
||||
.m1 = {
|
||||
.reg_off = AO_RTC_BY_OSCIN_CTRL1,
|
||||
.shift = 0,
|
||||
.width = 12,
|
||||
},
|
||||
.m2 = {
|
||||
.reg_off = AO_RTC_BY_OSCIN_CTRL1,
|
||||
.shift = 12,
|
||||
.width = 12,
|
||||
},
|
||||
.dual = {
|
||||
.reg_off = AO_RTC_BY_OSCIN_CTRL0,
|
||||
.shift = 28,
|
||||
.width = 1,
|
||||
},
|
||||
.table = a9_ao_dualdiv_table,
|
||||
},
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "a9_ao_rtc_dualdiv_div",
|
||||
.ops = &meson_clk_dualdiv_ops,
|
||||
.parent_hws = (const struct clk_hw *[]) {
|
||||
&a9_ao_rtc_dualdiv_in.hw
|
||||
},
|
||||
.num_parents = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_regmap a9_ao_rtc_dualdiv_sel = {
|
||||
.data = &(struct clk_regmap_mux_data) {
|
||||
.offset = AO_RTC_BY_OSCIN_CTRL1,
|
||||
.mask = 0x1,
|
||||
.shift = 24,
|
||||
},
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "ao_rtc_dualdiv_sel",
|
||||
.ops = &clk_regmap_mux_ops,
|
||||
.parent_hws = (const struct clk_hw *[]) {
|
||||
&a9_ao_rtc_dualdiv_div.hw,
|
||||
&a9_ao_rtc_dualdiv_in.hw,
|
||||
},
|
||||
.num_parents = 2,
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_regmap a9_ao_rtc_dualdiv = {
|
||||
.data = &(struct clk_regmap_gate_data){
|
||||
.offset = AO_RTC_BY_OSCIN_CTRL0,
|
||||
.bit_idx = 30,
|
||||
},
|
||||
.hw.init = &(struct clk_init_data) {
|
||||
.name = "ao_rtc_dualdiv",
|
||||
.ops = &clk_regmap_gate_ops,
|
||||
.parent_hws = (const struct clk_hw *[]) {
|
||||
&a9_ao_rtc_dualdiv_sel.hw
|
||||
},
|
||||
.num_parents = 1,
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_regmap a9_ao_rtc = {
|
||||
.data = &(struct clk_regmap_mux_data) {
|
||||
.offset = AO_RTC_BY_OSCIN_CTRL1,
|
||||
.mask = 0x1,
|
||||
.shift = 30,
|
||||
},
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "ao_rtc",
|
||||
.ops = &clk_regmap_mux_ops,
|
||||
.parent_hws = (const struct clk_hw *[]) {
|
||||
&a9_ao_xtal.hw,
|
||||
&a9_ao_rtc_dualdiv.hw,
|
||||
},
|
||||
.num_parents = 2,
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_regmap a9_ao_cec_dualdiv_in = {
|
||||
.data = &(struct clk_regmap_gate_data){
|
||||
.offset = AO_CEC_CTRL0,
|
||||
.bit_idx = 31,
|
||||
},
|
||||
.hw.init = &(struct clk_init_data) {
|
||||
.name = "ao_cec_dualdiv_in",
|
||||
.ops = &clk_regmap_gate_ops,
|
||||
.parent_hws = (const struct clk_hw *[]) {
|
||||
&a9_ao_xtal.hw
|
||||
},
|
||||
.num_parents = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_regmap a9_ao_cec_dualdiv_div = {
|
||||
.data = &(struct meson_clk_dualdiv_data){
|
||||
.n1 = {
|
||||
.reg_off = AO_CEC_CTRL0,
|
||||
.shift = 0,
|
||||
.width = 12,
|
||||
},
|
||||
.n2 = {
|
||||
.reg_off = AO_CEC_CTRL0,
|
||||
.shift = 12,
|
||||
.width = 12,
|
||||
},
|
||||
.m1 = {
|
||||
.reg_off = AO_CEC_CTRL1,
|
||||
.shift = 0,
|
||||
.width = 12,
|
||||
},
|
||||
.m2 = {
|
||||
.reg_off = AO_CEC_CTRL1,
|
||||
.shift = 12,
|
||||
.width = 12,
|
||||
},
|
||||
.dual = {
|
||||
.reg_off = AO_CEC_CTRL0,
|
||||
.shift = 28,
|
||||
.width = 1,
|
||||
},
|
||||
.table = a9_ao_dualdiv_table,
|
||||
},
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "ao_cec_dualdiv_div",
|
||||
.ops = &meson_clk_dualdiv_ops,
|
||||
.parent_hws = (const struct clk_hw *[]) {
|
||||
&a9_ao_cec_dualdiv_in.hw
|
||||
},
|
||||
.num_parents = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_regmap a9_ao_cec_dualdiv_sel = {
|
||||
.data = &(struct clk_regmap_mux_data) {
|
||||
.offset = AO_CEC_CTRL1,
|
||||
.mask = 0x1,
|
||||
.shift = 24,
|
||||
},
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "ao_cec_dualdiv_sel",
|
||||
.ops = &clk_regmap_mux_ops,
|
||||
.parent_hws = (const struct clk_hw *[]) {
|
||||
&a9_ao_cec_dualdiv_div.hw,
|
||||
&a9_ao_cec_dualdiv_in.hw,
|
||||
},
|
||||
.num_parents = 2,
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_regmap a9_ao_cec_dualdiv = {
|
||||
.data = &(struct clk_regmap_gate_data){
|
||||
.offset = AO_CEC_CTRL0,
|
||||
.bit_idx = 30,
|
||||
},
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "ao_cec_dualdiv",
|
||||
.ops = &clk_regmap_gate_ops,
|
||||
.parent_hws = (const struct clk_hw *[]) {
|
||||
&a9_ao_cec_dualdiv_sel.hw
|
||||
},
|
||||
.num_parents = 1,
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_regmap a9_ao_cec = {
|
||||
.data = &(struct clk_regmap_mux_data) {
|
||||
.offset = AO_CEC_CTRL1,
|
||||
.mask = 0x1,
|
||||
.shift = 30,
|
||||
},
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "ao_cec",
|
||||
.ops = &clk_regmap_mux_ops,
|
||||
.parent_hws = (const struct clk_hw *[]) {
|
||||
&a9_ao_cec_dualdiv.hw,
|
||||
&a9_ao_rtc.hw,
|
||||
},
|
||||
.num_parents = 2,
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_hw *a9_ao_hw_clks[] = {
|
||||
[CLKID_AO_XTAL_IN] = &a9_ao_xtal_in.hw,
|
||||
[CLKID_AO_XTAL] = &a9_ao_xtal.hw,
|
||||
[CLKID_AO_SYS] = &a9_ao_sys.hw,
|
||||
[CLKID_AO_SYS_I3C] = &a9_ao_sys_i3c.hw,
|
||||
[CLKID_AO_SYS_RTC_REG] = &a9_ao_sys_rtc_reg.hw,
|
||||
[CLKID_AO_SYS_CLKTREE] = &a9_ao_sys_clktree.hw,
|
||||
[CLKID_AO_SYS_RST_CTRL] = &a9_ao_sys_rst_ctrl.hw,
|
||||
[CLKID_AO_SYS_PAD] = &a9_ao_sys_pad.hw,
|
||||
[CLKID_AO_SYS_RTC_DIG] = &a9_ao_sys_rtc_dig.hw,
|
||||
[CLKID_AO_SYS_IRQ] = &a9_ao_sys_irq.hw,
|
||||
[CLKID_AO_SYS_PWRCTRL] = &a9_ao_sys_pwrctrl.hw,
|
||||
[CLKID_AO_SYS_PWM_A] = &a9_ao_sys_pwm_a.hw,
|
||||
[CLKID_AO_SYS_PWM_B] = &a9_ao_sys_pwm_b.hw,
|
||||
[CLKID_AO_SYS_PWM_C] = &a9_ao_sys_pwm_c.hw,
|
||||
[CLKID_AO_SYS_PWM_D] = &a9_ao_sys_pwm_d.hw,
|
||||
[CLKID_AO_SYS_PWM_E] = &a9_ao_sys_pwm_e.hw,
|
||||
[CLKID_AO_SYS_PWM_F] = &a9_ao_sys_pwm_f.hw,
|
||||
[CLKID_AO_SYS_PWM_G] = &a9_ao_sys_pwm_g.hw,
|
||||
[CLKID_AO_SYS_I2C_A] = &a9_ao_sys_i2c_a.hw,
|
||||
[CLKID_AO_SYS_I2C_B] = &a9_ao_sys_i2c_b.hw,
|
||||
[CLKID_AO_SYS_I2C_C] = &a9_ao_sys_i2c_c.hw,
|
||||
[CLKID_AO_SYS_I2C_D] = &a9_ao_sys_i2c_d.hw,
|
||||
[CLKID_AO_SYS_SED] = &a9_ao_sys_sed.hw,
|
||||
[CLKID_AO_SYS_IR_CTRL] = &a9_ao_sys_ir_ctrl.hw,
|
||||
[CLKID_AO_SYS_UART_B] = &a9_ao_sys_uart_b.hw,
|
||||
[CLKID_AO_SYS_UART_C] = &a9_ao_sys_uart_c.hw,
|
||||
[CLKID_AO_SYS_UART_D] = &a9_ao_sys_uart_d.hw,
|
||||
[CLKID_AO_SYS_UART_E] = &a9_ao_sys_uart_e.hw,
|
||||
[CLKID_AO_SYS_SPISG_0] = &a9_ao_sys_spisg_0.hw,
|
||||
[CLKID_AO_SYS_RTC_SECURE] = &a9_ao_sys_rtc_secure.hw,
|
||||
[CLKID_AO_SYS_CEC] = &a9_ao_sys_cec.hw,
|
||||
[CLKID_AO_SYS_AOCPU] = &a9_ao_sys_aocpu.hw,
|
||||
[CLKID_AO_SYS_SRAM] = &a9_ao_sys_sram.hw,
|
||||
[CLKID_AO_SYS_SPISG_1] = &a9_ao_sys_spisg_1.hw,
|
||||
[CLKID_AO_SYS_SPISG_2] = &a9_ao_sys_spisg_2.hw,
|
||||
[CLKID_AO_PWM_A_SEL] = &a9_ao_pwm_a_sel.hw,
|
||||
[CLKID_AO_PWM_A_DIV] = &a9_ao_pwm_a_div.hw,
|
||||
[CLKID_AO_PWM_A] = &a9_ao_pwm_a.hw,
|
||||
[CLKID_AO_PWM_B_SEL] = &a9_ao_pwm_b_sel.hw,
|
||||
[CLKID_AO_PWM_B_DIV] = &a9_ao_pwm_b_div.hw,
|
||||
[CLKID_AO_PWM_B] = &a9_ao_pwm_b.hw,
|
||||
[CLKID_AO_PWM_C_SEL] = &a9_ao_pwm_c_sel.hw,
|
||||
[CLKID_AO_PWM_C_DIV] = &a9_ao_pwm_c_div.hw,
|
||||
[CLKID_AO_PWM_C] = &a9_ao_pwm_c.hw,
|
||||
[CLKID_AO_PWM_D_SEL] = &a9_ao_pwm_d_sel.hw,
|
||||
[CLKID_AO_PWM_D_DIV] = &a9_ao_pwm_d_div.hw,
|
||||
[CLKID_AO_PWM_D] = &a9_ao_pwm_d.hw,
|
||||
[CLKID_AO_PWM_E_SEL] = &a9_ao_pwm_e_sel.hw,
|
||||
[CLKID_AO_PWM_E_DIV] = &a9_ao_pwm_e_div.hw,
|
||||
[CLKID_AO_PWM_E] = &a9_ao_pwm_e.hw,
|
||||
[CLKID_AO_PWM_F_SEL] = &a9_ao_pwm_f_sel.hw,
|
||||
[CLKID_AO_PWM_F_DIV] = &a9_ao_pwm_f_div.hw,
|
||||
[CLKID_AO_PWM_F] = &a9_ao_pwm_f.hw,
|
||||
[CLKID_AO_PWM_G_SEL] = &a9_ao_pwm_g_sel.hw,
|
||||
[CLKID_AO_PWM_G_DIV] = &a9_ao_pwm_g_div.hw,
|
||||
[CLKID_AO_PWM_G] = &a9_ao_pwm_g.hw,
|
||||
[CLKID_AO_RTC_DUALDIV_IN] = &a9_ao_rtc_dualdiv_in.hw,
|
||||
[CLKID_AO_RTC_DUALDIV_DIV] = &a9_ao_rtc_dualdiv_div.hw,
|
||||
[CLKID_AO_RTC_DUALDIV_SEL] = &a9_ao_rtc_dualdiv_sel.hw,
|
||||
[CLKID_AO_RTC_DUALDIV] = &a9_ao_rtc_dualdiv.hw,
|
||||
[CLKID_AO_RTC] = &a9_ao_rtc.hw,
|
||||
[CLKID_AO_CEC_DUALDIV_IN] = &a9_ao_cec_dualdiv_in.hw,
|
||||
[CLKID_AO_CEC_DUALDIV_DIV] = &a9_ao_cec_dualdiv_div.hw,
|
||||
[CLKID_AO_CEC_DUALDIV_SEL] = &a9_ao_cec_dualdiv_sel.hw,
|
||||
[CLKID_AO_CEC_DUALDIV] = &a9_ao_cec_dualdiv.hw,
|
||||
[CLKID_AO_CEC] = &a9_ao_cec.hw,
|
||||
};
|
||||
|
||||
static const struct meson_clkc_data a9_ao_clkc_data = {
|
||||
.hw_clks = {
|
||||
.hws = a9_ao_hw_clks,
|
||||
.num = ARRAY_SIZE(a9_ao_hw_clks),
|
||||
},
|
||||
};
|
||||
|
||||
static const struct of_device_id a9_ao_clkc_match_table[] = {
|
||||
{
|
||||
.compatible = "amlogic,a9-aoclkc",
|
||||
.data = &a9_ao_clkc_data,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, a9_ao_clkc_match_table);
|
||||
|
||||
static struct platform_driver a9_ao_clkc_driver = {
|
||||
.probe = meson_clkc_mmio_probe,
|
||||
.driver = {
|
||||
.name = "a9-aoclkc",
|
||||
.of_match_table = a9_ao_clkc_match_table,
|
||||
},
|
||||
};
|
||||
module_platform_driver(a9_ao_clkc_driver);
|
||||
|
||||
MODULE_DESCRIPTION("Amlogic A9 Always-ON Clock Controller driver");
|
||||
MODULE_AUTHOR("Jian Hu <jian.hu@amlogic.com>");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_IMPORT_NS("CLK_MESON");
|
||||
2089
drivers/clk/meson/a9-peripherals.c
Normal file
2089
drivers/clk/meson/a9-peripherals.c
Normal file
File diff suppressed because it is too large
Load Diff
|
|
@ -1393,7 +1393,7 @@ static struct clk_regmap gxbb_32k_clk_sel = {
|
|||
.name = "32k_clk_sel",
|
||||
.ops = &clk_regmap_mux_ops,
|
||||
.parent_data = gxbb_32k_clk_parents,
|
||||
.num_parents = 4,
|
||||
.num_parents = ARRAY_SIZE(gxbb_32k_clk_parents),
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
},
|
||||
};
|
||||
|
|
|
|||
76
include/dt-bindings/clock/amlogic,a9-aoclkc.h
Normal file
76
include/dt-bindings/clock/amlogic,a9-aoclkc.h
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
|
||||
/*
|
||||
* Copyright (C) 2026 Amlogic, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __AMLOGIC_A9_AO_CLKC_H
|
||||
#define __AMLOGIC_A9_AO_CLKC_H
|
||||
|
||||
#define CLKID_AO_XTAL_IN 0
|
||||
#define CLKID_AO_XTAL 1
|
||||
#define CLKID_AO_SYS 2
|
||||
#define CLKID_AO_SYS_I3C 3
|
||||
#define CLKID_AO_SYS_RTC_REG 4
|
||||
#define CLKID_AO_SYS_CLKTREE 5
|
||||
#define CLKID_AO_SYS_RST_CTRL 6
|
||||
#define CLKID_AO_SYS_PAD 7
|
||||
#define CLKID_AO_SYS_RTC_DIG 8
|
||||
#define CLKID_AO_SYS_IRQ 9
|
||||
#define CLKID_AO_SYS_PWRCTRL 10
|
||||
#define CLKID_AO_SYS_PWM_A 11
|
||||
#define CLKID_AO_SYS_PWM_B 12
|
||||
#define CLKID_AO_SYS_PWM_C 13
|
||||
#define CLKID_AO_SYS_PWM_D 14
|
||||
#define CLKID_AO_SYS_PWM_E 15
|
||||
#define CLKID_AO_SYS_PWM_F 16
|
||||
#define CLKID_AO_SYS_PWM_G 17
|
||||
#define CLKID_AO_SYS_I2C_A 18
|
||||
#define CLKID_AO_SYS_I2C_B 19
|
||||
#define CLKID_AO_SYS_I2C_C 20
|
||||
#define CLKID_AO_SYS_I2C_D 21
|
||||
#define CLKID_AO_SYS_SED 22
|
||||
#define CLKID_AO_SYS_IR_CTRL 23
|
||||
#define CLKID_AO_SYS_UART_B 24
|
||||
#define CLKID_AO_SYS_UART_C 25
|
||||
#define CLKID_AO_SYS_UART_D 26
|
||||
#define CLKID_AO_SYS_UART_E 27
|
||||
#define CLKID_AO_SYS_SPISG_0 28
|
||||
#define CLKID_AO_SYS_RTC_SECURE 29
|
||||
#define CLKID_AO_SYS_CEC 30
|
||||
#define CLKID_AO_SYS_AOCPU 31
|
||||
#define CLKID_AO_SYS_SRAM 32
|
||||
#define CLKID_AO_SYS_SPISG_1 33
|
||||
#define CLKID_AO_SYS_SPISG_2 34
|
||||
#define CLKID_AO_PWM_A_SEL 35
|
||||
#define CLKID_AO_PWM_A_DIV 36
|
||||
#define CLKID_AO_PWM_A 37
|
||||
#define CLKID_AO_PWM_B_SEL 38
|
||||
#define CLKID_AO_PWM_B_DIV 39
|
||||
#define CLKID_AO_PWM_B 40
|
||||
#define CLKID_AO_PWM_C_SEL 41
|
||||
#define CLKID_AO_PWM_C_DIV 42
|
||||
#define CLKID_AO_PWM_C 43
|
||||
#define CLKID_AO_PWM_D_SEL 44
|
||||
#define CLKID_AO_PWM_D_DIV 45
|
||||
#define CLKID_AO_PWM_D 46
|
||||
#define CLKID_AO_PWM_E_SEL 47
|
||||
#define CLKID_AO_PWM_E_DIV 48
|
||||
#define CLKID_AO_PWM_E 49
|
||||
#define CLKID_AO_PWM_F_SEL 50
|
||||
#define CLKID_AO_PWM_F_DIV 51
|
||||
#define CLKID_AO_PWM_F 52
|
||||
#define CLKID_AO_PWM_G_SEL 53
|
||||
#define CLKID_AO_PWM_G_DIV 54
|
||||
#define CLKID_AO_PWM_G 55
|
||||
#define CLKID_AO_RTC_DUALDIV_IN 56
|
||||
#define CLKID_AO_RTC_DUALDIV_DIV 57
|
||||
#define CLKID_AO_RTC_DUALDIV_SEL 58
|
||||
#define CLKID_AO_RTC_DUALDIV 59
|
||||
#define CLKID_AO_RTC 60
|
||||
#define CLKID_AO_CEC_DUALDIV_IN 61
|
||||
#define CLKID_AO_CEC_DUALDIV_DIV 62
|
||||
#define CLKID_AO_CEC_DUALDIV_SEL 63
|
||||
#define CLKID_AO_CEC_DUALDIV 64
|
||||
#define CLKID_AO_CEC 65
|
||||
|
||||
#endif /* __AMLOGIC_A9_AO_CLKC_H */
|
||||
351
include/dt-bindings/clock/amlogic,a9-peripherals-clkc.h
Normal file
351
include/dt-bindings/clock/amlogic,a9-peripherals-clkc.h
Normal file
|
|
@ -0,0 +1,351 @@
|
|||
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
|
||||
/*
|
||||
* Copyright (C) 2026 Amlogic, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __AMLOGIC_A9_PERIPHERALS_CLKC_H
|
||||
#define __AMLOGIC_A9_PERIPHERALS_CLKC_H
|
||||
|
||||
#define CLKID_SYS_AM_AXI 0
|
||||
#define CLKID_SYS_DOS 1
|
||||
#define CLKID_SYS_MIPI_DSI0 2
|
||||
#define CLKID_SYS_ETH_PHY 3
|
||||
#define CLKID_SYS_AMFC 4
|
||||
#define CLKID_SYS_MALI 5
|
||||
#define CLKID_SYS_NNA 6
|
||||
#define CLKID_SYS_ETH_AXI 7
|
||||
#define CLKID_SYS_DP_APB 8
|
||||
#define CLKID_SYS_EDPTX_APB 9
|
||||
#define CLKID_SYS_U3HSG 10
|
||||
#define CLKID_SYS_AUCPU 11
|
||||
#define CLKID_SYS_GLB 12
|
||||
#define CLKID_SYS_COMBO_DPHY_APB 13
|
||||
#define CLKID_SYS_HDMIRX_APB 14
|
||||
#define CLKID_SYS_HDMIRX_PCLK 15
|
||||
#define CLKID_SYS_MIPI_DSI0_PHY 16
|
||||
#define CLKID_SYS_CAN0 17
|
||||
#define CLKID_SYS_CAN1 18
|
||||
#define CLKID_SYS_SD_EMMC_A 19
|
||||
#define CLKID_SYS_SD_EMMC_B 20
|
||||
#define CLKID_SYS_SD_EMMC_C 21
|
||||
#define CLKID_SYS_SC 22
|
||||
#define CLKID_SYS_ACODEC 23
|
||||
#define CLKID_SYS_MIPI_ISP 24
|
||||
#define CLKID_SYS_MSR 25
|
||||
#define CLKID_SYS_AUDIO 26
|
||||
#define CLKID_SYS_MIPI_DSI1 27
|
||||
#define CLKID_SYS_MIPI_DSI1_PHY 28
|
||||
#define CLKID_SYS_ETH 29
|
||||
#define CLKID_SYS_ETH_1G_MAC 30
|
||||
#define CLKID_SYS_UART_A 31
|
||||
#define CLKID_SYS_UART_F 32
|
||||
#define CLKID_SYS_TS_A55 33
|
||||
#define CLKID_SYS_ETH_1G_AXI 34
|
||||
#define CLKID_SYS_TS_DOS 35
|
||||
#define CLKID_SYS_U3DRD_B 36
|
||||
#define CLKID_SYS_TS_CORE 37
|
||||
#define CLKID_SYS_TS_PLL 38
|
||||
#define CLKID_SYS_CSI_DIG_CLKIN 39
|
||||
#define CLKID_SYS_CVE 40
|
||||
#define CLKID_SYS_GE2D 41
|
||||
#define CLKID_SYS_SPISG 42
|
||||
#define CLKID_SYS_U2H 43
|
||||
#define CLKID_SYS_PCIE_MAC_A 44
|
||||
#define CLKID_SYS_U3DRD_A 45
|
||||
#define CLKID_SYS_U2DRD 46
|
||||
#define CLKID_SYS_PCIE_PHY 47
|
||||
#define CLKID_SYS_PCIE_MAC_B 48
|
||||
#define CLKID_SYS_PERIPH 49
|
||||
#define CLKID_SYS_PIO 50
|
||||
#define CLKID_SYS_I3C 51
|
||||
#define CLKID_SYS_I2C_M_E 52
|
||||
#define CLKID_SYS_I2C_M_F 53
|
||||
#define CLKID_SYS_HDMITX_APB 54
|
||||
#define CLKID_SYS_I2C_M_I 55
|
||||
#define CLKID_SYS_I2C_M_G 56
|
||||
#define CLKID_SYS_I2C_M_H 57
|
||||
#define CLKID_SYS_HDMI20_AES 58
|
||||
#define CLKID_SYS_CSI2_HOST 59
|
||||
#define CLKID_SYS_CSI2_ADAPT 60
|
||||
#define CLKID_SYS_DSPA 61
|
||||
#define CLKID_SYS_PP_DMA 62
|
||||
#define CLKID_SYS_PP_WRAPPER 63
|
||||
#define CLKID_SYS_VPU_INTR 64
|
||||
#define CLKID_SYS_CSI2_PHY 65
|
||||
#define CLKID_SYS_SARADC 66
|
||||
#define CLKID_SYS_PWM_J 67
|
||||
#define CLKID_SYS_PWM_I 68
|
||||
#define CLKID_SYS_PWM_H 69
|
||||
#define CLKID_SYS_PWM_N 70
|
||||
#define CLKID_SYS_PWM_M 71
|
||||
#define CLKID_SYS_PWM_L 72
|
||||
#define CLKID_SYS_PWM_K 73
|
||||
#define CLKID_SD_EMMC_A_SEL 74
|
||||
#define CLKID_SD_EMMC_A_DIV 75
|
||||
#define CLKID_SD_EMMC_A 76
|
||||
#define CLKID_SD_EMMC_B_SEL 77
|
||||
#define CLKID_SD_EMMC_B_DIV 78
|
||||
#define CLKID_SD_EMMC_B 79
|
||||
#define CLKID_SD_EMMC_C_SEL 80
|
||||
#define CLKID_SD_EMMC_C_DIV 81
|
||||
#define CLKID_SD_EMMC_C 82
|
||||
#define CLKID_PWM_H_SEL 83
|
||||
#define CLKID_PWM_H_DIV 84
|
||||
#define CLKID_PWM_H 85
|
||||
#define CLKID_PWM_I_SEL 86
|
||||
#define CLKID_PWM_I_DIV 87
|
||||
#define CLKID_PWM_I 88
|
||||
#define CLKID_PWM_J_SEL 89
|
||||
#define CLKID_PWM_J_DIV 90
|
||||
#define CLKID_PWM_J 91
|
||||
#define CLKID_PWM_K_SEL 92
|
||||
#define CLKID_PWM_K_DIV 93
|
||||
#define CLKID_PWM_K 94
|
||||
#define CLKID_PWM_L_SEL 95
|
||||
#define CLKID_PWM_L_DIV 96
|
||||
#define CLKID_PWM_L 97
|
||||
#define CLKID_PWM_M_SEL 98
|
||||
#define CLKID_PWM_M_DIV 99
|
||||
#define CLKID_PWM_M 100
|
||||
#define CLKID_PWM_N_SEL 101
|
||||
#define CLKID_PWM_N_DIV 102
|
||||
#define CLKID_PWM_N 103
|
||||
#define CLKID_SPISG0_SEL 104
|
||||
#define CLKID_SPISG0_DIV 105
|
||||
#define CLKID_SPISG0 106
|
||||
#define CLKID_SPISG1_SEL 107
|
||||
#define CLKID_SPISG1_DIV 108
|
||||
#define CLKID_SPISG1 109
|
||||
#define CLKID_SPISG2_SEL 110
|
||||
#define CLKID_SPISG2_DIV 111
|
||||
#define CLKID_SPISG2 112
|
||||
#define CLKID_SARADC_SEL 113
|
||||
#define CLKID_SARADC_DIV 114
|
||||
#define CLKID_SARADC 115
|
||||
#define CLKID_AMFC_SEL 116
|
||||
#define CLKID_AMFC_DIV 117
|
||||
#define CLKID_AMFC 118
|
||||
#define CLKID_NNA_SEL 119
|
||||
#define CLKID_NNA_DIV 120
|
||||
#define CLKID_NNA 121
|
||||
#define CLKID_USB_250M_SEL 122
|
||||
#define CLKID_USB_250M_DIV 123
|
||||
#define CLKID_USB_250M 124
|
||||
#define CLKID_USB_48M_PRE_SEL 125
|
||||
#define CLKID_USB_48M_PRE_DIV 126
|
||||
#define CLKID_USB_48M_PRE 127
|
||||
#define CLKID_PCIE0_TL_SEL 128
|
||||
#define CLKID_PCIE0_TL_DIV 129
|
||||
#define CLKID_PCIE0_TL 130
|
||||
#define CLKID_PCIE1_TL_SEL 131
|
||||
#define CLKID_PCIE1_TL_DIV 132
|
||||
#define CLKID_PCIE1_TL 133
|
||||
#define CLKID_CMPR_SEL 134
|
||||
#define CLKID_CMPR_DIV 135
|
||||
#define CLKID_CMPR 136
|
||||
#define CLKID_DEWARPA_SEL 137
|
||||
#define CLKID_DEWARPA_DIV 138
|
||||
#define CLKID_DEWARPA 139
|
||||
#define CLKID_SC_PRE_SEL 140
|
||||
#define CLKID_SC_PRE_DIV 141
|
||||
#define CLKID_SC_PRE 142
|
||||
#define CLKID_SC 143
|
||||
#define CLKID_DPTX_APB2_SEL 144
|
||||
#define CLKID_DPTX_APB2_DIV 145
|
||||
#define CLKID_DPTX_APB2 146
|
||||
#define CLKID_DPTX_AUD_SEL 147
|
||||
#define CLKID_DPTX_AUD_DIV 148
|
||||
#define CLKID_DPTX_AUD 149
|
||||
#define CLKID_ISP_SEL 150
|
||||
#define CLKID_ISP_DIV 151
|
||||
#define CLKID_ISP 152
|
||||
#define CLKID_CVE_SEL 153
|
||||
#define CLKID_CVE_DIV 154
|
||||
#define CLKID_CVE 155
|
||||
#define CLKID_VGE_SEL 156
|
||||
#define CLKID_VGE_DIV 157
|
||||
#define CLKID_VGE 158
|
||||
#define CLKID_PP_SEL 159
|
||||
#define CLKID_PP_DIV 160
|
||||
#define CLKID_PP 161
|
||||
#define CLKID_GLB_SEL 162
|
||||
#define CLKID_GLB_DIV 163
|
||||
#define CLKID_GLB 164
|
||||
#define CLKID_USB_48M_DUALDIV_IN 165
|
||||
#define CLKID_USB_48M_DUALDIV_DIV 166
|
||||
#define CLKID_USB_48M_DUALDIV_SEL 167
|
||||
#define CLKID_USB_48M_DUALDIV 168
|
||||
#define CLKID_USB_48M 169
|
||||
#define CLKID_CAN0_PE_SEL 170
|
||||
#define CLKID_CAN0_PE_DIV 171
|
||||
#define CLKID_CAN0_PE 172
|
||||
#define CLKID_CAN1_PE_SEL 173
|
||||
#define CLKID_CAN1_PE_DIV 174
|
||||
#define CLKID_CAN1_PE 175
|
||||
#define CLKID_CAN0_FILTER_SEL 176
|
||||
#define CLKID_CAN0_FILTER_DIV 177
|
||||
#define CLKID_CAN0_FILTER 178
|
||||
#define CLKID_CAN1_FILTER_SEL 179
|
||||
#define CLKID_CAN1_FILTER_DIV 180
|
||||
#define CLKID_CAN1_FILTER 181
|
||||
#define CLKID_I3C_SEL 182
|
||||
#define CLKID_I3C_DIV 183
|
||||
#define CLKID_I3C 184
|
||||
#define CLKID_TS_DIV 185
|
||||
#define CLKID_TS 186
|
||||
#define CLKID_ETH_125M_DIV 187
|
||||
#define CLKID_ETH_125M 188
|
||||
#define CLKID_ETH_RMII_SEL 189
|
||||
#define CLKID_ETH_RMII_DIV 190
|
||||
#define CLKID_ETH_RMII 191
|
||||
#define CLKID_GEN_SEL 192
|
||||
#define CLKID_GEN_DIV 193
|
||||
#define CLKID_GEN 194
|
||||
#define CLKID_CLK24M_IN 195
|
||||
#define CLKID_CLK12_24M 196
|
||||
#define CLKID_MALI_0_SEL 197
|
||||
#define CLKID_MALI_0_DIV 198
|
||||
#define CLKID_MALI_0 199
|
||||
#define CLKID_MALI_1_SEL 200
|
||||
#define CLKID_MALI_1_DIV 201
|
||||
#define CLKID_MALI_1 202
|
||||
#define CLKID_MALI 203
|
||||
#define CLKID_MALI_STACK_0_SEL 204
|
||||
#define CLKID_MALI_STACK_0_DIV 205
|
||||
#define CLKID_MALI_STACK_0 206
|
||||
#define CLKID_MALI_STACK_1_SEL 207
|
||||
#define CLKID_MALI_STACK_1_DIV 208
|
||||
#define CLKID_MALI_STACK_1 209
|
||||
#define CLKID_MALI_STACK 210
|
||||
#define CLKID_DSPA_0_SEL 211
|
||||
#define CLKID_DSPA_0_DIV 212
|
||||
#define CLKID_DSPA_0 213
|
||||
#define CLKID_DSPA_1_SEL 214
|
||||
#define CLKID_DSPA_1_DIV 215
|
||||
#define CLKID_DSPA_1 216
|
||||
#define CLKID_DSPA 217
|
||||
#define CLKID_HEVCF_0_SEL 218
|
||||
#define CLKID_HEVCF_0_DIV 219
|
||||
#define CLKID_HEVCF_0 220
|
||||
#define CLKID_HEVCF_1_SEL 221
|
||||
#define CLKID_HEVCF_1_DIV 222
|
||||
#define CLKID_HEVCF_1 223
|
||||
#define CLKID_HEVCF 224
|
||||
#define CLKID_HCODEC_0_SEL 225
|
||||
#define CLKID_HCODEC_0_DIV 226
|
||||
#define CLKID_HCODEC_0 227
|
||||
#define CLKID_HCODEC_1_SEL 228
|
||||
#define CLKID_HCODEC_1_DIV 229
|
||||
#define CLKID_HCODEC_1 230
|
||||
#define CLKID_HCODEC 231
|
||||
#define CLKID_VPU_0_SEL 232
|
||||
#define CLKID_VPU_0_DIV 233
|
||||
#define CLKID_VPU_0 234
|
||||
#define CLKID_VPU_1_SEL 235
|
||||
#define CLKID_VPU_1_DIV 236
|
||||
#define CLKID_VPU_1 237
|
||||
#define CLKID_VPU 238
|
||||
#define CLKID_VAPB_0_SEL 239
|
||||
#define CLKID_VAPB_0_DIV 240
|
||||
#define CLKID_VAPB_0 241
|
||||
#define CLKID_VAPB_1_SEL 242
|
||||
#define CLKID_VAPB_1_DIV 243
|
||||
#define CLKID_VAPB_1 244
|
||||
#define CLKID_VAPB 245
|
||||
#define CLKID_GE2D 246
|
||||
#define CLKID_VPU_CLKB_TMP_SEL 247
|
||||
#define CLKID_VPU_CLKB_TMP_DIV 248
|
||||
#define CLKID_VPU_CLKB_TMP 249
|
||||
#define CLKID_VPU_CLKB_DIV 250
|
||||
#define CLKID_VPU_CLKB 251
|
||||
#define CLKID_HDMITX_SYS_SEL 252
|
||||
#define CLKID_HDMITX_SYS_DIV 253
|
||||
#define CLKID_HDMITX_SYS 254
|
||||
#define CLKID_HDMITX_PRIF_SEL 255
|
||||
#define CLKID_HDMITX_PRIF_DIV 256
|
||||
#define CLKID_HDMITX_PRIF 257
|
||||
#define CLKID_HDMITX_200M_SEL 258
|
||||
#define CLKID_HDMITX_200M_DIV 259
|
||||
#define CLKID_HDMITX_200M 260
|
||||
#define CLKID_HDMITX_AUD_SEL 261
|
||||
#define CLKID_HDMITX_AUD_DIV 262
|
||||
#define CLKID_HDMITX_AUD 263
|
||||
#define CLKID_HDMIRX_5M_SEL 264
|
||||
#define CLKID_HDMIRX_5M_DIV 265
|
||||
#define CLKID_HDMIRX_5M 266
|
||||
#define CLKID_HDMIRX_2M_SEL 267
|
||||
#define CLKID_HDMIRX_2M_DIV 268
|
||||
#define CLKID_HDMIRX_2M 269
|
||||
#define CLKID_HDMIRX_CFG_SEL 270
|
||||
#define CLKID_HDMIRX_CFG_DIV 271
|
||||
#define CLKID_HDMIRX_CFG 272
|
||||
#define CLKID_HDMIRX_HDCP2X_SEL 273
|
||||
#define CLKID_HDMIRX_HDCP2X_DIV 274
|
||||
#define CLKID_HDMIRX_HDCP2X 275
|
||||
#define CLKID_HDMIRX_ACR_REF_SEL 276
|
||||
#define CLKID_HDMIRX_ACR_REF_DIV 277
|
||||
#define CLKID_HDMIRX_ACR_REF 278
|
||||
#define CLKID_HDMIRX_METER_SEL 279
|
||||
#define CLKID_HDMIRX_METER_DIV 280
|
||||
#define CLKID_HDMIRX_METER 281
|
||||
#define CLKID_VID_LOCK_SEL 282
|
||||
#define CLKID_VID_LOCK_DIV 283
|
||||
#define CLKID_VID_LOCK 284
|
||||
#define CLKID_VDIN_MEAS_SEL 285
|
||||
#define CLKID_VDIN_MEAS_DIV 286
|
||||
#define CLKID_VDIN_MEAS 287
|
||||
#define CLKID_VID_PLL_DIV 288
|
||||
#define CLKID_VID_PLL_SEL 289
|
||||
#define CLKID_VID_PLL 290
|
||||
#define CLKID_VID_PLL_VCLK 291
|
||||
#define CLKID_VCLK0_SEL 292
|
||||
#define CLKID_VCLK0_IN 293
|
||||
#define CLKID_VCLK0_DIV 294
|
||||
#define CLKID_VCLK0 295
|
||||
#define CLKID_VCLK0_DIV1_EN 296
|
||||
#define CLKID_VCLK0_DIV2_EN 297
|
||||
#define CLKID_VCLK0_DIV2 298
|
||||
#define CLKID_VCLK0_DIV4_EN 299
|
||||
#define CLKID_VCLK0_DIV4 300
|
||||
#define CLKID_VCLK0_DIV6_EN 301
|
||||
#define CLKID_VCLK0_DIV6 302
|
||||
#define CLKID_VCLK0_DIV12_EN 303
|
||||
#define CLKID_VCLK0_DIV12 304
|
||||
#define CLKID_VCLK1_SEL 305
|
||||
#define CLKID_VCLK1_IN 306
|
||||
#define CLKID_VCLK1_DIV 307
|
||||
#define CLKID_VCLK1 308
|
||||
#define CLKID_VCLK1_DIV1_EN 309
|
||||
#define CLKID_VCLK1_DIV2_EN 310
|
||||
#define CLKID_VCLK1_DIV2 311
|
||||
#define CLKID_VCLK1_DIV4_EN 312
|
||||
#define CLKID_VCLK1_DIV4 313
|
||||
#define CLKID_VCLK1_DIV6_EN 314
|
||||
#define CLKID_VCLK1_DIV6 315
|
||||
#define CLKID_VCLK1_DIV12_EN 316
|
||||
#define CLKID_VCLK1_DIV12 317
|
||||
#define CLKID_VDAC_SEL 318
|
||||
#define CLKID_VDAC 319
|
||||
#define CLKID_ENCODER0_SEL 320
|
||||
#define CLKID_ENCODER0 321
|
||||
#define CLKID_ENCODER1_SEL 322
|
||||
#define CLKID_ENCODER1 323
|
||||
#define CLKID_HDMITX0_PIXEL_SEL 324
|
||||
#define CLKID_HDMITX0_PIXEL 325
|
||||
#define CLKID_HDMITX0_FE_SEL 326
|
||||
#define CLKID_HDMITX0_FE 327
|
||||
#define CLKID_HDMITX1_PIXEL_SEL 328
|
||||
#define CLKID_HDMITX1_PIXEL 329
|
||||
#define CLKID_HDMITX1_FE_SEL 330
|
||||
#define CLKID_HDMITX1_FE 331
|
||||
#define CLKID_CSI_PHY_SEL 332
|
||||
#define CLKID_CSI_PHY_DIV 333
|
||||
#define CLKID_CSI_PHY 334
|
||||
#define CLKID_DSI0_MEAS_SEL 335
|
||||
#define CLKID_DSI0_MEAS_DIV 336
|
||||
#define CLKID_DSI0_MEAS 337
|
||||
#define CLKID_DSI1_MEAS_SEL 338
|
||||
#define CLKID_DSI1_MEAS_DIV 339
|
||||
#define CLKID_DSI1_MEAS 340
|
||||
|
||||
#endif /* __AMLOGIC_A9_PERIPHERALS_CLKC_H */
|
||||
Loading…
Reference in New Issue
Block a user