mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 22:22:08 +02:00
A few more Qualcomm clk updates for v6.11
This introduces helper logic to expose clock controllers as simple interconnect providers, and used this on ipq9574 to add the the system's interconnect providers. CLK_SET_RATE_PARENT is added to the remaining USB pipe clocks on X1Elite. Error handling is improved in kpss-xcc, and lastly the SC8280XP LPASS clock controller regmap_config is declared const. -----BEGIN PGP SIGNATURE----- iQJJBAABCAAzFiEEBd4DzF816k8JZtUlCx85Pw2ZrcUFAmaNkZcVHGFuZGVyc3Nv bkBrZXJuZWwub3JnAAoJEAsfOT8Nma3FuasQALZ431btBHhZ9HqmBsVgQ24yqU1A 3b+YQ/9v+ESInbdujxRt5v0KDjWJyNGFHYQKnHO/rxx7YbZsD6QW/qxFGnh7+h2Z BFbi1+QWokmXXPUXJMybA2nF1rMcTczu8Pqpu5W/Jl+0mtssO9jSXzZnvuxs9DEH 5SkDpyE3W4oUDiNG7e2dny7/g9qLefMNivWPqqaqx6yUtlP/lwJm+W3vBdTCpYLW bbovj5uA6h2jTVzIkk4YRi8DDubzs3i9RGKizzhXUh5LkOm/cDmXN3LVf4aHOfF1 TKhQcL0nouGdHqRltbo3+TyDQnFApSLHCXs1tG9NjoW0xVj409fGrUS2ViPmlXBH q7UR7fDdl86bCjP8Oz92Vh/y4IYHPVHm3xIIet6y1ETEv5KW8D8pra/c4NNrw/RW HT+MtFd+5jf+lVZfG7xQWZYYMjyL1hwI8tEE0uCsKB4nYvWvRaj7EUFna403BeE1 YJAZbnAxfYpJl9s3UoBPJgjxmIMrt9R8NUCaOmbUxBw80nQTvp0DeGvp9Fc0pJTT Z+JCbGSl/ghy2bKkeU+Cwy4L7KJGNC51QGhYRSRi01IxPM3kPnfA7utRj6O6pdhe HN+S670tw7NISsZyQ4fNm5t8yZlnhXuSoxtNFSLTnLiUhdngpYc+kYCep5t+zcWi 13dAX2Q9vaat5x4l =IynE -----END PGP SIGNATURE----- Merge tag 'qcom-clk-for-6.11-2' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux into clk-qcom Pull more qcom clk driver updates from Bjorn Andersson: - Introduces helper logic to expose clock controllers as simple interconnect providers - Use the interconnect helper above on Qualcomm ipq9574 - Add CLK_SET_RATE_PARENT to the remaining USB pipe clocks on Qualcomm X1Elite. - Improve error handling in Qualcomm kpss-xcc driver - Mark Qualcomm SC8280XP LPASS clock controller regmap_config const * tag 'qcom-clk-for-6.11-2' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux: clk: qcom: ipq9574: Use icc-clk for enabling NoC related clocks clk: qcom: common: Add interconnect clocks support interconnect: icc-clk: Add devm_icc_clk_register interconnect: icc-clk: Specify master/slave ids dt-bindings: clock: qcom: Add AHB clock for SM8150 clk: qcom: gcc-x1e80100: Set parent rate for USB3 sec and tert PHY pipe clks dt-bindings: interconnect: Add Qualcomm IPQ9574 support clk: qcom: kpss-xcc: Return of_clk_add_hw_provider to transfer the error clk: qcom: lpasscc-sc8280xp: Constify struct regmap_config
This commit is contained in:
commit
691a018040
|
|
@ -35,6 +35,9 @@ properties:
|
|||
|
||||
'#power-domain-cells': false
|
||||
|
||||
'#interconnect-cells':
|
||||
const: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- clocks
|
||||
|
|
|
|||
|
|
@ -62,7 +62,6 @@ allOf:
|
|||
enum:
|
||||
- qcom,sc7180-videocc
|
||||
- qcom,sdm845-videocc
|
||||
- qcom,sm8150-videocc
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
|
|
@ -88,6 +87,22 @@ allOf:
|
|||
- const: bi_tcxo
|
||||
- const: bi_tcxo_ao
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- qcom,sm8150-videocc
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
items:
|
||||
- description: AHB
|
||||
- description: Board XO source
|
||||
clock-names:
|
||||
items:
|
||||
- const: iface
|
||||
- const: bi_tcxo
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ menuconfig COMMON_CLK_QCOM
|
|||
select RATIONAL
|
||||
select REGMAP_MMIO
|
||||
select RESET_CONTROLLER
|
||||
select INTERCONNECT
|
||||
select INTERCONNECT_CLK
|
||||
|
||||
if COMMON_CLK_QCOM
|
||||
|
||||
|
|
|
|||
|
|
@ -226,7 +226,12 @@ static int qcom_msm8996_cbf_icc_register(struct platform_device *pdev, struct cl
|
|||
struct device *dev = &pdev->dev;
|
||||
struct clk *clk = devm_clk_hw_get_clk(dev, cbf_hw, "cbf");
|
||||
const struct icc_clk_data data[] = {
|
||||
{ .clk = clk, .name = "cbf", },
|
||||
{
|
||||
.clk = clk,
|
||||
.name = "cbf",
|
||||
.master_id = MASTER_CBF_M4M,
|
||||
.slave_id = SLAVE_CBF_M4M,
|
||||
},
|
||||
};
|
||||
struct icc_provider *provider;
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
#include <linux/regmap.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/interconnect-clk.h>
|
||||
#include <linux/reset-controller.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
|
|
@ -252,6 +253,38 @@ static struct clk_hw *qcom_cc_clk_hw_get(struct of_phandle_args *clkspec,
|
|||
return cc->rclks[idx] ? &cc->rclks[idx]->hw : NULL;
|
||||
}
|
||||
|
||||
static int qcom_cc_icc_register(struct device *dev,
|
||||
const struct qcom_cc_desc *desc)
|
||||
{
|
||||
struct icc_clk_data *icd;
|
||||
struct clk_hw *hws;
|
||||
int i;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_INTERCONNECT_CLK))
|
||||
return 0;
|
||||
|
||||
if (!desc->icc_hws)
|
||||
return 0;
|
||||
|
||||
icd = devm_kcalloc(dev, desc->num_icc_hws, sizeof(*icd), GFP_KERNEL);
|
||||
if (!icd)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < desc->num_icc_hws; i++) {
|
||||
icd[i].master_id = desc->icc_hws[i].master_id;
|
||||
icd[i].slave_id = desc->icc_hws[i].slave_id;
|
||||
hws = &desc->clks[desc->icc_hws[i].clk_id]->hw;
|
||||
icd[i].clk = devm_clk_hw_get_clk(dev, hws, "icc");
|
||||
if (!icd[i].clk)
|
||||
return dev_err_probe(dev, -ENOENT,
|
||||
"(%d) clock entry is null\n", i);
|
||||
icd[i].name = clk_hw_get_name(hws);
|
||||
}
|
||||
|
||||
return devm_icc_clk_register(dev, desc->icc_first_node_id,
|
||||
desc->num_icc_hws, icd);
|
||||
}
|
||||
|
||||
int qcom_cc_really_probe(struct device *dev,
|
||||
const struct qcom_cc_desc *desc, struct regmap *regmap)
|
||||
{
|
||||
|
|
@ -320,7 +353,7 @@ int qcom_cc_really_probe(struct device *dev,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
return qcom_cc_icc_register(dev, desc);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qcom_cc_really_probe);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,12 @@ struct clk_hw;
|
|||
#define PLL_VOTE_FSM_ENA BIT(20)
|
||||
#define PLL_VOTE_FSM_RESET BIT(21)
|
||||
|
||||
struct qcom_icc_hws_data {
|
||||
int master_id;
|
||||
int slave_id;
|
||||
int clk_id;
|
||||
};
|
||||
|
||||
struct qcom_cc_desc {
|
||||
const struct regmap_config *config;
|
||||
struct clk_regmap **clks;
|
||||
|
|
@ -29,6 +35,9 @@ struct qcom_cc_desc {
|
|||
size_t num_gdscs;
|
||||
struct clk_hw **clk_hws;
|
||||
size_t num_clk_hws;
|
||||
struct qcom_icc_hws_data *icc_hws;
|
||||
size_t num_icc_hws;
|
||||
unsigned int icc_first_node_id;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
*/
|
||||
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/interconnect-clk.h>
|
||||
#include <linux/interconnect-provider.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
|
|
@ -12,6 +14,7 @@
|
|||
|
||||
#include <dt-bindings/clock/qcom,ipq9574-gcc.h>
|
||||
#include <dt-bindings/reset/qcom,ipq9574-gcc.h>
|
||||
#include <dt-bindings/interconnect/qcom,ipq9574.h>
|
||||
|
||||
#include "clk-alpha-pll.h"
|
||||
#include "clk-branch.h"
|
||||
|
|
@ -4377,6 +4380,32 @@ static const struct qcom_reset_map gcc_ipq9574_resets[] = {
|
|||
[GCC_WCSS_Q6_TBU_BCR] = { 0x12054, 0 },
|
||||
};
|
||||
|
||||
#define IPQ_APPS_ID 9574 /* some unique value */
|
||||
|
||||
static struct qcom_icc_hws_data icc_ipq9574_hws[] = {
|
||||
{ MASTER_ANOC_PCIE0, SLAVE_ANOC_PCIE0, GCC_ANOC_PCIE0_1LANE_M_CLK },
|
||||
{ MASTER_SNOC_PCIE0, SLAVE_SNOC_PCIE0, GCC_SNOC_PCIE0_1LANE_S_CLK },
|
||||
{ MASTER_ANOC_PCIE1, SLAVE_ANOC_PCIE1, GCC_ANOC_PCIE1_1LANE_M_CLK },
|
||||
{ MASTER_SNOC_PCIE1, SLAVE_SNOC_PCIE1, GCC_SNOC_PCIE1_1LANE_S_CLK },
|
||||
{ MASTER_ANOC_PCIE2, SLAVE_ANOC_PCIE2, GCC_ANOC_PCIE2_2LANE_M_CLK },
|
||||
{ MASTER_SNOC_PCIE2, SLAVE_SNOC_PCIE2, GCC_SNOC_PCIE2_2LANE_S_CLK },
|
||||
{ MASTER_ANOC_PCIE3, SLAVE_ANOC_PCIE3, GCC_ANOC_PCIE3_2LANE_M_CLK },
|
||||
{ MASTER_SNOC_PCIE3, SLAVE_SNOC_PCIE3, GCC_SNOC_PCIE3_2LANE_S_CLK },
|
||||
{ MASTER_USB, SLAVE_USB, GCC_SNOC_USB_CLK },
|
||||
{ MASTER_USB_AXI, SLAVE_USB_AXI, GCC_ANOC_USB_AXI_CLK },
|
||||
{ MASTER_NSSNOC_NSSCC, SLAVE_NSSNOC_NSSCC, GCC_NSSNOC_NSSCC_CLK },
|
||||
{ MASTER_NSSNOC_SNOC_0, SLAVE_NSSNOC_SNOC_0, GCC_NSSNOC_SNOC_CLK },
|
||||
{ MASTER_NSSNOC_SNOC_1, SLAVE_NSSNOC_SNOC_1, GCC_NSSNOC_SNOC_1_CLK },
|
||||
{ MASTER_NSSNOC_PCNOC_1, SLAVE_NSSNOC_PCNOC_1, GCC_NSSNOC_PCNOC_1_CLK },
|
||||
{ MASTER_NSSNOC_QOSGEN_REF, SLAVE_NSSNOC_QOSGEN_REF, GCC_NSSNOC_QOSGEN_REF_CLK },
|
||||
{ MASTER_NSSNOC_TIMEOUT_REF, SLAVE_NSSNOC_TIMEOUT_REF, GCC_NSSNOC_TIMEOUT_REF_CLK },
|
||||
{ MASTER_NSSNOC_XO_DCD, SLAVE_NSSNOC_XO_DCD, GCC_NSSNOC_XO_DCD_CLK },
|
||||
{ MASTER_NSSNOC_ATB, SLAVE_NSSNOC_ATB, GCC_NSSNOC_ATB_CLK },
|
||||
{ MASTER_MEM_NOC_NSSNOC, SLAVE_MEM_NOC_NSSNOC, GCC_MEM_NOC_NSSNOC_CLK },
|
||||
{ MASTER_NSSNOC_MEMNOC, SLAVE_NSSNOC_MEMNOC, GCC_NSSNOC_MEMNOC_CLK },
|
||||
{ MASTER_NSSNOC_MEM_NOC_1, SLAVE_NSSNOC_MEM_NOC_1, GCC_NSSNOC_MEM_NOC_1_CLK },
|
||||
};
|
||||
|
||||
static const struct of_device_id gcc_ipq9574_match_table[] = {
|
||||
{ .compatible = "qcom,ipq9574-gcc" },
|
||||
{ }
|
||||
|
|
@ -4399,6 +4428,9 @@ static const struct qcom_cc_desc gcc_ipq9574_desc = {
|
|||
.num_resets = ARRAY_SIZE(gcc_ipq9574_resets),
|
||||
.clk_hws = gcc_ipq9574_hws,
|
||||
.num_clk_hws = ARRAY_SIZE(gcc_ipq9574_hws),
|
||||
.icc_hws = icc_ipq9574_hws,
|
||||
.num_icc_hws = ARRAY_SIZE(icc_ipq9574_hws),
|
||||
.icc_first_node_id = IPQ_APPS_ID,
|
||||
};
|
||||
|
||||
static int gcc_ipq9574_probe(struct platform_device *pdev)
|
||||
|
|
@ -4411,6 +4443,7 @@ static struct platform_driver gcc_ipq9574_driver = {
|
|||
.driver = {
|
||||
.name = "qcom,gcc-ipq9574",
|
||||
.of_match_table = gcc_ipq9574_match_table,
|
||||
.sync_state = icc_sync_state,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -5269,6 +5269,7 @@ static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
|
|||
&gcc_usb3_sec_phy_pipe_clk_src.clkr.hw,
|
||||
},
|
||||
.num_parents = 1,
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
.ops = &clk_branch2_ops,
|
||||
},
|
||||
},
|
||||
|
|
@ -5339,6 +5340,7 @@ static struct clk_branch gcc_usb3_tert_phy_pipe_clk = {
|
|||
&gcc_usb3_tert_phy_pipe_clk_src.clkr.hw,
|
||||
},
|
||||
.num_parents = 1,
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
.ops = &clk_branch2_ops,
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -58,9 +58,7 @@ static int kpss_xcc_driver_probe(struct platform_device *pdev)
|
|||
if (IS_ERR(hw))
|
||||
return PTR_ERR(hw);
|
||||
|
||||
of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get, hw);
|
||||
|
||||
return 0;
|
||||
return of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get, hw);
|
||||
}
|
||||
|
||||
static struct platform_driver kpss_xcc_driver = {
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ static const struct qcom_reset_map lpass_audiocc_sc8280xp_resets[] = {
|
|||
[LPASS_AUDIO_SWR_WSA2_CGCR] = { 0xd8, 1 },
|
||||
};
|
||||
|
||||
static struct regmap_config lpass_audiocc_sc8280xp_regmap_config = {
|
||||
static const struct regmap_config lpass_audiocc_sc8280xp_regmap_config = {
|
||||
.reg_bits = 32,
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
|
|
@ -41,7 +41,7 @@ static const struct qcom_reset_map lpasscc_sc8280xp_resets[] = {
|
|||
[LPASS_AUDIO_SWR_TX_CGCR] = { 0xc010, 1 },
|
||||
};
|
||||
|
||||
static struct regmap_config lpasscc_sc8280xp_regmap_config = {
|
||||
static const struct regmap_config lpasscc_sc8280xp_regmap_config = {
|
||||
.reg_bits = 32,
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ struct icc_provider *icc_clk_register(struct device *dev,
|
|||
for (i = 0, j = 0; i < num_clocks; i++) {
|
||||
qp->clocks[i].clk = data[i].clk;
|
||||
|
||||
node = icc_node_create(first_id + j);
|
||||
node = icc_node_create(first_id + data[i].master_id);
|
||||
if (IS_ERR(node)) {
|
||||
ret = PTR_ERR(node);
|
||||
goto err;
|
||||
|
|
@ -118,10 +118,10 @@ struct icc_provider *icc_clk_register(struct device *dev,
|
|||
node->data = &qp->clocks[i];
|
||||
icc_node_add(node, provider);
|
||||
/* link to the next node, slave */
|
||||
icc_link_create(node, first_id + j + 1);
|
||||
icc_link_create(node, first_id + data[i].slave_id);
|
||||
onecell->nodes[j++] = node;
|
||||
|
||||
node = icc_node_create(first_id + j);
|
||||
node = icc_node_create(first_id + data[i].slave_id);
|
||||
if (IS_ERR(node)) {
|
||||
ret = PTR_ERR(node);
|
||||
goto err;
|
||||
|
|
@ -148,6 +148,24 @@ struct icc_provider *icc_clk_register(struct device *dev,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(icc_clk_register);
|
||||
|
||||
static void devm_icc_release(void *res)
|
||||
{
|
||||
icc_clk_unregister(res);
|
||||
}
|
||||
|
||||
int devm_icc_clk_register(struct device *dev, unsigned int first_id,
|
||||
unsigned int num_clocks, const struct icc_clk_data *data)
|
||||
{
|
||||
struct icc_provider *prov;
|
||||
|
||||
prov = icc_clk_register(dev, first_id, num_clocks, data);
|
||||
if (IS_ERR(prov))
|
||||
return PTR_ERR(prov);
|
||||
|
||||
return devm_add_action_or_reset(dev, devm_icc_release, prov);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_icc_clk_register);
|
||||
|
||||
/**
|
||||
* icc_clk_unregister() - unregister a previously registered clk interconnect provider
|
||||
* @provider: provider returned by icc_clk_register()
|
||||
|
|
|
|||
59
include/dt-bindings/interconnect/qcom,ipq9574.h
Normal file
59
include/dt-bindings/interconnect/qcom,ipq9574.h
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
|
||||
#ifndef INTERCONNECT_QCOM_IPQ9574_H
|
||||
#define INTERCONNECT_QCOM_IPQ9574_H
|
||||
|
||||
#define MASTER_ANOC_PCIE0 0
|
||||
#define SLAVE_ANOC_PCIE0 1
|
||||
#define MASTER_SNOC_PCIE0 2
|
||||
#define SLAVE_SNOC_PCIE0 3
|
||||
#define MASTER_ANOC_PCIE1 4
|
||||
#define SLAVE_ANOC_PCIE1 5
|
||||
#define MASTER_SNOC_PCIE1 6
|
||||
#define SLAVE_SNOC_PCIE1 7
|
||||
#define MASTER_ANOC_PCIE2 8
|
||||
#define SLAVE_ANOC_PCIE2 9
|
||||
#define MASTER_SNOC_PCIE2 10
|
||||
#define SLAVE_SNOC_PCIE2 11
|
||||
#define MASTER_ANOC_PCIE3 12
|
||||
#define SLAVE_ANOC_PCIE3 13
|
||||
#define MASTER_SNOC_PCIE3 14
|
||||
#define SLAVE_SNOC_PCIE3 15
|
||||
#define MASTER_USB 16
|
||||
#define SLAVE_USB 17
|
||||
#define MASTER_USB_AXI 18
|
||||
#define SLAVE_USB_AXI 19
|
||||
#define MASTER_NSSNOC_NSSCC 20
|
||||
#define SLAVE_NSSNOC_NSSCC 21
|
||||
#define MASTER_NSSNOC_SNOC_0 22
|
||||
#define SLAVE_NSSNOC_SNOC_0 23
|
||||
#define MASTER_NSSNOC_SNOC_1 24
|
||||
#define SLAVE_NSSNOC_SNOC_1 25
|
||||
#define MASTER_NSSNOC_PCNOC_1 26
|
||||
#define SLAVE_NSSNOC_PCNOC_1 27
|
||||
#define MASTER_NSSNOC_QOSGEN_REF 28
|
||||
#define SLAVE_NSSNOC_QOSGEN_REF 29
|
||||
#define MASTER_NSSNOC_TIMEOUT_REF 30
|
||||
#define SLAVE_NSSNOC_TIMEOUT_REF 31
|
||||
#define MASTER_NSSNOC_XO_DCD 32
|
||||
#define SLAVE_NSSNOC_XO_DCD 33
|
||||
#define MASTER_NSSNOC_ATB 34
|
||||
#define SLAVE_NSSNOC_ATB 35
|
||||
#define MASTER_MEM_NOC_NSSNOC 36
|
||||
#define SLAVE_MEM_NOC_NSSNOC 37
|
||||
#define MASTER_NSSNOC_MEMNOC 38
|
||||
#define SLAVE_NSSNOC_MEMNOC 39
|
||||
#define MASTER_NSSNOC_MEM_NOC_1 40
|
||||
#define SLAVE_NSSNOC_MEM_NOC_1 41
|
||||
|
||||
#define MASTER_NSSNOC_PPE 0
|
||||
#define SLAVE_NSSNOC_PPE 1
|
||||
#define MASTER_NSSNOC_PPE_CFG 2
|
||||
#define SLAVE_NSSNOC_PPE_CFG 3
|
||||
#define MASTER_NSSNOC_NSS_CSR 4
|
||||
#define SLAVE_NSSNOC_NSS_CSR 5
|
||||
#define MASTER_NSSNOC_IMEM_QSB 6
|
||||
#define SLAVE_NSSNOC_IMEM_QSB 7
|
||||
#define MASTER_NSSNOC_IMEM_AHB 8
|
||||
#define SLAVE_NSSNOC_IMEM_AHB 9
|
||||
|
||||
#endif /* INTERCONNECT_QCOM_IPQ9574_H */
|
||||
|
|
@ -11,12 +11,16 @@ struct device;
|
|||
struct icc_clk_data {
|
||||
struct clk *clk;
|
||||
const char *name;
|
||||
unsigned int master_id;
|
||||
unsigned int slave_id;
|
||||
};
|
||||
|
||||
struct icc_provider *icc_clk_register(struct device *dev,
|
||||
unsigned int first_id,
|
||||
unsigned int num_clocks,
|
||||
const struct icc_clk_data *data);
|
||||
int devm_icc_clk_register(struct device *dev, unsigned int first_id,
|
||||
unsigned int num_clocks, const struct icc_clk_data *data);
|
||||
void icc_clk_unregister(struct icc_provider *provider);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user