at91sam9n12.c (9b031c86506cef9acae45e61339fcf9deaabb793) at91sam9n12.c (153bc1c66a8814e621ca0483098ac722be860aaf)
1// SPDX-License-Identifier: GPL-2.0
2#include <linux/clk-provider.h>
3#include <linux/mfd/syscon.h>
4#include <linux/slab.h>
5
6#include <dt-bindings/clock/at91.h>
7
8#include "pmc.h"

--- 110 unchanged lines hidden (view full) ---

119
120 slck_name = of_clk_get_parent_name(np, i);
121
122 i = of_property_match_string(np, "clock-names", "main_xtal");
123 if (i < 0)
124 return;
125 mainxtal_name = of_clk_get_parent_name(np, i);
126
1// SPDX-License-Identifier: GPL-2.0
2#include <linux/clk-provider.h>
3#include <linux/mfd/syscon.h>
4#include <linux/slab.h>
5
6#include <dt-bindings/clock/at91.h>
7
8#include "pmc.h"

--- 110 unchanged lines hidden (view full) ---

119
120 slck_name = of_clk_get_parent_name(np, i);
121
122 i = of_property_match_string(np, "clock-names", "main_xtal");
123 if (i < 0)
124 return;
125 mainxtal_name = of_clk_get_parent_name(np, i);
126
127 regmap = syscon_node_to_regmap(np);
127 regmap = device_node_to_regmap(np);
128 if (IS_ERR(regmap))
129 return;
130
128 if (IS_ERR(regmap))
129 return;
130
131 at91sam9n12_pmc = pmc_data_allocate(PMC_MAIN + 1,
132 nck(at91sam9n12_systemck), 31, 0);
131 at91sam9n12_pmc = pmc_data_allocate(PMC_PLLBCK + 1,
132 nck(at91sam9n12_systemck), 31, 0, 2);
133 if (!at91sam9n12_pmc)
134 return;
135
136 hw = at91_clk_register_main_rc_osc(regmap, "main_rc_osc", 12000000,
137 50000000);
138 if (IS_ERR(hw))
139 goto err_free;
140

--- 16 unchanged lines hidden (view full) ---

157 &at91rm9200_pll_layout, &plla_characteristics);
158 if (IS_ERR(hw))
159 goto err_free;
160
161 hw = at91_clk_register_plldiv(regmap, "plladivck", "pllack");
162 if (IS_ERR(hw))
163 goto err_free;
164
133 if (!at91sam9n12_pmc)
134 return;
135
136 hw = at91_clk_register_main_rc_osc(regmap, "main_rc_osc", 12000000,
137 50000000);
138 if (IS_ERR(hw))
139 goto err_free;
140

--- 16 unchanged lines hidden (view full) ---

157 &at91rm9200_pll_layout, &plla_characteristics);
158 if (IS_ERR(hw))
159 goto err_free;
160
161 hw = at91_clk_register_plldiv(regmap, "plladivck", "pllack");
162 if (IS_ERR(hw))
163 goto err_free;
164
165 at91sam9n12_pmc->chws[PMC_PLLACK] = hw;
166
165 hw = at91_clk_register_pll(regmap, "pllbck", "mainck", 1,
166 &at91rm9200_pll_layout, &pllb_characteristics);
167 if (IS_ERR(hw))
168 goto err_free;
169
167 hw = at91_clk_register_pll(regmap, "pllbck", "mainck", 1,
168 &at91rm9200_pll_layout, &pllb_characteristics);
169 if (IS_ERR(hw))
170 goto err_free;
171
172 at91sam9n12_pmc->chws[PMC_PLLBCK] = hw;
173
170 parent_names[0] = slck_name;
171 parent_names[1] = "mainck";
172 parent_names[2] = "plladivck";
173 parent_names[3] = "pllbck";
174 hw = at91_clk_register_master(regmap, "masterck", 4, parent_names,
175 &at91sam9x5_master_layout,
176 &mck_characteristics);
177 if (IS_ERR(hw))

--- 15 unchanged lines hidden (view full) ---

193
194 snprintf(name, sizeof(name), "prog%d", i);
195
196 hw = at91_clk_register_programmable(regmap, name,
197 parent_names, 5, i,
198 &at91sam9x5_programmable_layout);
199 if (IS_ERR(hw))
200 goto err_free;
174 parent_names[0] = slck_name;
175 parent_names[1] = "mainck";
176 parent_names[2] = "plladivck";
177 parent_names[3] = "pllbck";
178 hw = at91_clk_register_master(regmap, "masterck", 4, parent_names,
179 &at91sam9x5_master_layout,
180 &mck_characteristics);
181 if (IS_ERR(hw))

--- 15 unchanged lines hidden (view full) ---

197
198 snprintf(name, sizeof(name), "prog%d", i);
199
200 hw = at91_clk_register_programmable(regmap, name,
201 parent_names, 5, i,
202 &at91sam9x5_programmable_layout);
203 if (IS_ERR(hw))
204 goto err_free;
205
206 at91sam9n12_pmc->pchws[i] = hw;
201 }
202
203 for (i = 0; i < ARRAY_SIZE(at91sam9n12_systemck); i++) {
204 hw = at91_clk_register_system(regmap, at91sam9n12_systemck[i].n,
205 at91sam9n12_systemck[i].p,
206 at91sam9n12_systemck[i].id);
207 if (IS_ERR(hw))
208 goto err_free;

--- 14 unchanged lines hidden (view full) ---

223 at91sam9n12_pmc->phws[at91sam9n12_periphck[i].id] = hw;
224 }
225
226 of_clk_add_hw_provider(np, of_clk_hw_pmc_get, at91sam9n12_pmc);
227
228 return;
229
230err_free:
207 }
208
209 for (i = 0; i < ARRAY_SIZE(at91sam9n12_systemck); i++) {
210 hw = at91_clk_register_system(regmap, at91sam9n12_systemck[i].n,
211 at91sam9n12_systemck[i].p,
212 at91sam9n12_systemck[i].id);
213 if (IS_ERR(hw))
214 goto err_free;

--- 14 unchanged lines hidden (view full) ---

229 at91sam9n12_pmc->phws[at91sam9n12_periphck[i].id] = hw;
230 }
231
232 of_clk_add_hw_provider(np, of_clk_hw_pmc_get, at91sam9n12_pmc);
233
234 return;
235
236err_free:
231 pmc_data_free(at91sam9n12_pmc);
237 kfree(at91sam9n12_pmc);
232}
233/*
234 * The TCB is used as the clocksource so its clock is needed early. This means
235 * this can't be a platform driver.
236 */
237CLK_OF_DECLARE_DRIVER(at91sam9n12_pmc, "atmel,at91sam9n12-pmc",
238 at91sam9n12_pmc_setup);
238}
239/*
240 * The TCB is used as the clocksource so its clock is needed early. This means
241 * this can't be a platform driver.
242 */
243CLK_OF_DECLARE_DRIVER(at91sam9n12_pmc, "atmel,at91sam9n12-pmc",
244 at91sam9n12_pmc_setup);